@agoric/spawner 0.6.9-dev-cfab0b8.0 → 0.6.9-dev-df2faae.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/bundle-spawn-js-meta.json +96 -96
- package/bundles/bundle-spawn.js +1 -1
- package/package.json +10 -10
package/bundles/bundle-spawn.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default {"moduleFormat":"endoZipBase64","endoZipBase64":"UEsDBAoAAAAAAAAAAABuu5vISs8AAErPAAAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zcGF3bmVyLXYwLjYuOCIsCiAgICAibW9kdWxlIjogIi4vc3JjL3ZhdC1zcGF3bmVkLmpzIgogIH0sCiAgImNvbXBhcnRtZW50cyI6IHsKICAgICJAYWdvcmljL3NwYXduZXItdjAuNi44IjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3NwYXduZXIiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9zcGF3bmVyLXYwLjYuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3NwYXduZXItdjAuNi44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3Bhd25lciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3NwYXduZXItdjAuNi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvY29udHJhY3RIb3N0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9zb3VyY2UtbWFwLW5vZGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3ZhdC1zcGF3bmVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy92YXQtc3Bhd25lZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA3YTQyZDI3NzkzNzZmYzVjNGE3NmQyZTc1ZTQ4MTYwZWY1M2YyNWVlZWZkMDZhY2Q0MzhkMTU1M2YxZGI5ZTFhZmU4OWY3MWQzZWU0OTM4MmI5MDcwMzRiZDQ0Njk3ZThjNTVkNzBlNDU3ZGM4ZmUyZmVhZTVjYTAzNzUxMWU4IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9iYXNlNjQtdjEuMC44IjogewogICAgICAibmFtZSI6ICJAZW5kby9iYXNlNjQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Jhc2U2NCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9iYXNlNjQvYXRvYi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hdG9iLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9idG9hLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Jhc2U2NC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2J0b2EuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L2RlY29kZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kZWNvZGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L2VuY29kZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmNvZGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2F0b2IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiYXRvYi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNjNjNlMGMxNTlmZThiYmZkZmNiNTVlOGNiNjkyZTM2OWJmZjg1OGE2OTk1NDI3ZTcwY2Y3Y2QyNThhYjYxZmY0MzMwY2Q3ZDY5ZmUyYTg2Nzg4MmU4MDUzNDM1YzNjM2YyMDIzODUwNDQ1ODIxOWNhYzc1ODk1NjBhOGE0OWFhIgogICAgICAgIH0sCiAgICAgICAgIi4vYnRvYS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJidG9hLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlmYzY5MjcxM2ExNTExNDUwZGI2NTFhMjNiYWMwYjMxN2JlMTE3YjYyZjc1MjZjN2I3NDcyNDdlZGQ1ZWY5YmZiNGFmMjNiNDMwZTZlMmMyZDEyZGE1M2UxYWY5NmE1MGEzMThmZmNjZjcxZDA2MDE5NDgzZTA0ODk3NmQxMzAiCiAgICAgICAgfSwKICAgICAgICAiLi9kZWNvZGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiZGVjb2RlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTc0YjhmNjVkMmEwNjE1NDQ4MDRiYjE3OTg4ZjExNjViYWMxZGE3OWExZWFjZjI0ODc2MDI0NWIwYzA4YzZkNTk4MDYwM2RkOWYzOTg2NzU4NGFmMjgzYjcwOWRlNjU1NjNmZjIzZWYwNDIwYTE0N2RiYTY3NzZhMzg1ZWI1ZWIiCiAgICAgICAgfSwKICAgICAgICAiLi9lbmNvZGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiZW5jb2RlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGI2ZTQ1YmNkZDQxNDE1YmE1ZmZjNjJjMjk2NjU4NzM2N2I1MjVmMGFmZTkyZDQ4YWE0NmQyYzI1MTVkNWVkMjIwYTc0YTc4ZDgwYjFiOTcwOTRmNjJjZTExNDk4NGE1MDMyY2UwMDc1NTNkMTEyOWU1OWYyM2RlMTgxNGY5ZmIiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVkNGZmN2YzYjMwODExN2FiNTk5NjQyNGQzOTFmM2U3OWU0ZTFmNjVlMzA1NjAzNmIzMzYzNGU5ZjcxZmVlZWU0YTljYzhlOWQ1NzRjNGNkZDIwOTJjYTk5NmM2YjlmMjcxNmYzYTU0MmNjNWQ2Mzg4NzdlMzU0NThjZWU1OWQzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbW1vbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29tbW9uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzhiMjBhNmQxMWE1OGFmNDgyZDcwNTY1OTgwNmU1MjNmMzE5MWE5MGUyMzI0YjZmYjdhNzIyMWEzOWVlYTRmMmNkMzgwMDQ0MzdhYjA0OTM5OTFkYzhhNjgzN2MxOTIxYzBhYWNmYmQ4YWFhZjQwMmYxODdjMWU3ZGY5NjM1YzkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGVjb2RlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWNvZGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiOTA0ZTc1MDk1MzJiYzZjNTE4MGE1NjU2OWY2OWUzMGE4OGIxOGZhYzgyZDc3ZDJiMTUzODU0MTdiZDMwYjFmMDEwODE1YTdhNTIzYTM0YTQ1M2Q0MjE1MDMzZWVkYzJkOTliNjQ3NGE3YzMyYWRmZDQ0NjVkZmYzZGJhOTEyYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFkZDFiMmY0NTMxYzQ3NjZhZDBjNjE5ODkwMTE1NzAxZmEwNGM4ODc0Mzg2YjlkYzNiNWVmODViZmQzYTNhMjI1Y2MzM2NiZTNlN2MzYWNlMzI4NDVkYzQ0NjcwZWRhYjA3ODk1YjM2MjRkYWNhMzQ0MmIwOGUyMzUwODljOTZlIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9jb21tb24tdjEuMi42IjogewogICAgICAibmFtZSI6ICJAZW5kby9jb21tb24iLAogICAgICAibGFiZWwiOiAiQGVuZG8vY29tbW9uLXYxLjIuNiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZjQzN2I1ZjNlMzNiNzczZGU2Y2JlZDEwZTUwYTllMGI5NDhjNzNhNmFlMTY0NjY0MDE0OWNjOGYwZjgxNjk1ODVhYWYyNTdkMTAyNjZmYzI2YmU1ZTFkYzM5NGY1YTM1MWVjNmE2YWY4NWQzYjk5MjI4ODE5OWRiOGQxNjZlOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9janMtbW9kdWxlLWFuYWx5emVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Nqcy1tb2R1bGUtYW5hbHl6ZXItdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9janMtbW9kdWxlLWFuYWx5emVyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9janMtbW9kdWxlLWFuYWx5emVyLXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvYXJjaGl2ZS1saXRlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FyY2hpdmUtbGl0ZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvYXJjaGl2ZS1wYXJzZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FyY2hpdmUtcGFyc2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvYXJjaGl2ZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcmNoaXZlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9idW5kbGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYnVuZGxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9jYXB0dXJlLWxpdGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY2FwdHVyZS1saXRlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtYXJjaGl2ZS1saXRlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LWFyY2hpdmUtcGFyc2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvaW1wb3J0LWFyY2hpdmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LWFyY2hpdmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1saXRlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2ltcG9ydC1saXRlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtcGFyc2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbXBvcnQtcGFyc2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvaW1wb3J0LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2ltcG9ydC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvbm9kZS1tb2R1bGVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL25vZGUtbW9kdWxlcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvbm9kZS1wb3dlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbm9kZS1wb3dlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbW9kdWxlLXNvdXJjZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tb2R1bGUtc291cmNlLXYxLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbW9kdWxlLXNvdXJjZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbW9kdWxlLXNvdXJjZS12MS4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tb2R1bGUtc291cmNlL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbW9kdWxlLXNvdXJjZS12MS4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vdHJhbXBvbGluZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby90cmFtcG9saW5lLXYxLjAuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vdHJhbXBvbGluZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby96aXAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vemlwLXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vemlwL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vemlwL3JlYWRlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9yZWFkZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vemlwL3dyaXRlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi93cml0ZXIuanMiCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb25zb2xlLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL2ltcG9ydC1hcmNoaXZlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImltcG9ydC1hcmNoaXZlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjNmYWQ0ZDRlMTY0ODljODZlNzRmZjFiNDQ1ZmFlMjNlMmZhOWM1NjE5ZTRjNTczNWUzZjk2MGE1NTMyNGY0YjQ3NTYwZTdhMWI4ODE5NjY4YzY2MzgzZjhmYzZjZDcxMmU1MDViNWI2OGNmOWIzNDAwYmViN2E1ZTkwYzE3ZTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29tcGFydG1lbnQtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb21wYXJ0bWVudC1tYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxOTQ5ODk2OTQ2MDhhMzcyYjEwNGIzOWJkMTMzODgzNGU3YmRmY2ZhZTg1ZTNlMjY3ZjBjZjIwMGMyNDY1NzJiNjMxOGYzOTBmYjNiMjJhYmJkNDRlYmY1OGI3MWY2M2U1M2JkMjIxMTQyYzAxNGMwM2NlZTM0MjgwODE5NGIyOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leHRlbnNpb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4dGVuc2lvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRkMWM2OTNjNWMyMGI0ZmYxZmVkMGJhYTAwYjJjNWU5MDUxYWEyMmNlODg5MGIxZTgxNzUwYmY1ZjA3NzE1N2RmNDc5NmQxMWUwNTU5YzVhMGIwZTBkZjRhODdlMjEwNTZkNDVjZWZlMGU1YjRmYjVkYzJmNjMwNDQ5YjRmYjM5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2MDZiZWJjY2E5YTIxNDcxNDMyYzRjYjYzOGUxZjM1YjUwOTRmMjRlNDg4OTY4ZjMxZDNmNWFhM2JmZDlmNjM3M2NmZmY5MmMwYzdhZjRkMjIxYjdjN2FmMmQxNDZlMTU4NTJkMWI3N2I3YzFmMDY1NTUwOWFmNTA0ZmJkMjIzZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjUzN2YyM2EwNGU1YmYxODg5ODVlMTRhOTA0NzBkMjhiMGEyMTU0ZDU4ODE1MzVkY2RhZjU4NWIyNzc3Yjk1ZGI5Y2VmZWEyN2QyOTA5Y2YyZjJmYzdmYWJjYWE4NGRkZjZkNmQ5ZTM4NDg2N2YwMzliZTcyZDA3MDVmMzBmYTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW1wb3J0LWFyY2hpdmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1hcmNoaXZlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTk2ZWZiZDJkMjU2ZjUyNmZhMTNhZWUyOGJiM2I2ZTVlYWJlYzE1NGU0ZjJkZjIwOTk1MWM1Yzc3YTU4ZGNlZTBiMjMxM2U3NjViNWUyY2UyNjcxNDcyNzZiNGQxZGIyMzc4NDJmYTE3YTQzMzNhMDE3ZmQ0YmNiMzFkZmNjYmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW1wb3J0LWhvb2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1ob29rLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODExM2YwNmQ3ZDY2ZjZiNzQxZDU1ZjE1Zjk0M2FhYTA3MDlkMjAxNmI0OTExNjU3Mjg1YTBmOWNiNjhhNzRmNzczMDhlNjMwYTZlNzllMWIyMTMxYmI5NTMyMTBlODhlNTA3OWM1NWNmYTY1NTg4MzNhZTdiMTEyNDQ3ZjA4YmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvanNvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvanNvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY0MDM3OTE5MGM3ODgyY2U2NmQ4YTRiYWUwYWVhMjEwOWZhMjI1MzczMTczZjY5N2I5OWNhZWQ5NmJlYzlmNDY3ZGZmMTU5MmYxYzMxOGVhYzA1YzhkOTY4MzIyODdiOWQzN2EzZTA5YjUxMjgzMGYwNGNhNTczYzZmMmQ2ZDkzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpbmsuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpbmsuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZTc5ZThmNTkyNDM1MDM5ZDQ0NDU3YjAyMDg4NTA5M2E5OTQ1M2QwYzkzNTMwMmVjMzdhM2RlMTg3NWUxOGQ3OTExMTUwODIzMjQ0MDgwM2M2OGFkYmZkNzI3OGJiN2FiN2VkN2UzODkwMjM2YjM0ZmYyZDhlOTcxNTc2YmEwOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXAtcGFyc2VyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXAtcGFyc2VyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWVmMzNkNGYyZTVmN2QwZTM3ODA2ZjlmYTAzZGJkNTUwMDMwMDE4ZThjMDRmYjI1YWY1MDA3MzBiMGY2YTcwOTNjYzc2ZDExZjM3NWZhMDZlNGI3NWI3YjQxNGUzYjg4ZDBkZTE4M2JmMTY1YzMzMzNhMDEyMDk0N2ViMjc3OTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyYTdiMGM3NmI4OWQ1MTljYzNjN2E0MTE2NjIxY2IwMzMxOWE5YTRhOTVmYTg4MGI2YTgxYjAxYmRmNWVhMzQxY2I0MjVlMzZhNjE1MmI1NWE2ZWE1MDJkMTNkYTJiMWM1NGVmMzA3ODZiNTIzZDU3ODQwMTQ3MjQ5NjIxMmNjNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1ieXRlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtYnl0ZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYWExZWVmYzg4MmEwNjNhYTUxNWZkNjlmNmE1MDE4MThiMWQ2ZTU5YWQyZDBhYjMwYWI1MmM3MmJhOGFlODA5NTE5Nzg5MjliZDhmYzNjYzcyM2Y4Y2MyYTViNjNlZDc0YmRiZWJjMDk4NDEzZGJiNzczZDBiYWE3OGQ3YTNmYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzQ5NGEwMDU0MWFiYTI3N2U5ZTlhOTg1MzJjNWNjYTk3YTYwNGNiYjA1OWQzYTcxNzhlZmM4Zjk3MmJkMDQyNzZjN2M4OGFiMjI5OWQ4YTY3ZjVlYjJkMDIzM2U5MGE1ZjUxNjhhYzkzMDI1YmY5N2FhYjBhN2M1ZGZlZjMwZGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFyc2UtanNvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtanNvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY4MTY4NmIxY2NhM2M2ZTQ0YzQxZTBmZDdkZDM3OTMwZTNkNzkwMjhjYjhiZGNhNzFhZWVlOGZhZDI3YjZjOTFlYTRjOTNhOWZjZDNiZGY4ZjYwOTM1N2E3MDkwZjAwNzQ5ZmM5YjA0ZTBkNzVlYWZjZDVlMDliMGZiYzQ5Yjg2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhcnNlLXByZS1janMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhcnNlLXByZS1janMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzNTlhMTE0MGFmOWEyYmQ1YmExNTkxYWUzZGU0MDAzNjU3NjVkODhlOWZhOWJhMGJiNjM0ZjI5MDM3Y2U4YmI0ODY2MWY3YzI4N2JkYjIwY2ZjOTNlZWQ0NTA3YmYxNWNhOGJiNDlkMzI5NTgxZGUwZTUxZDhjYmI1ZDk1YmE1NCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1wcmUtbWpzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXJzZS1wcmUtbWpzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTFkMGUzYjZlMTM3NjliZjI4ZmJhMWI0ODE4NjdhYzlmZDYzNWRjZmQ0MDQ1Mzk4YjZjOTVmM2FlOGVlODM2NzQxOGYyYTk3M2U3ZjUxZTUyMGVjZDA4Zjc0MmUxMmE0MThiMTE5MmI5NWJjMDM1MDI3MWY3OWNhN2ZjMmVlOGEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFyc2UtdGV4dC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtdGV4dC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM1MTVhOGQzMWUyZmU1YjhkMzY3YTFlNjA4N2Q2ZGJjM2U0ZTA5Yjg2YzlmY2Q3OWEwZjYyOTUxYWJhNDI2ODYxNGJmYjgxYjY3NTQ5ZDRhOWM3MDEzNjM0Zjk1YTg3OWNiODdhN2EzZTRhMjNlNmY3N2YxOWU2NzBmYTI3ODk3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BvbGljeS1mb3JtYXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BvbGljeS1mb3JtYXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmZDNiYjMzZWZiMGQ1OGY1YTI4ZjA2MmMwMTZkMzA3NGM1Yzg1NDM4ZGQ3YmZjZjA5ZTczMGRmYTFhZTgwY2FjMjFiMTlkNzY0YjE4Zjc4ZDNmM2ExNzYwNDY3NTY2ZTRlZTJiNGI5MWMwN2JhNTQzYjg1OGUzNTQ0OTRkZjJmZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wb2xpY3kuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BvbGljeS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUyNzdkZTU5ZWQ2ZGQ4ZDI0MzI4OTBhOWYwNWU2NWU5MzYxY2ZlNWVlMmM3OTkyYmExMDZhMTY0MTAzYWMyYWJlZDhlZTg4ZThjMGZiNzIxYTc3ZDc1OWUwMWMzNTBlZjFmY2Q0OTE0NmM4NzA0MzdhZTVkZjM5ZTU3NTRjNGQxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bvd2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcG93ZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTQ1ZmQzOTQxMzU2YWEzOTBjZTI4NDUwMzA1ZWM0ZWRhNTIwMzRiMTMyNTVmN2Y1NWE0YzE3MDE5Nzk2ZWFmYmZhODc4YmQzZThiN2YwN2I5ODc1ZDU2NWNkNzkzNzZjMjRhZTcwNDE5Y2JiY2FmOTkyYzU0NTAyODA0ZGY1NWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZW52LW9wdGlvbnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDE3NzZlZWIyMWIxYzU1MWRhM2Y5YjhkY2RmNWFiZDg4YmNiZjVmOGUzOGNiMDRlZGFiYzhjYjk2NGJiOTc1MThmZjRjYWNiNzQzZThhYmJhYWMyMjg2MTY4MTVmYmU0MGU4NmJlMmQ3ZDQyODE1Nzg5NTJmOGFhODY2YTFiOTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW52LW9wdGlvbnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vudi1vcHRpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWRiMTVkNGI2NjkzMzI1ZDM0NTIzODBjYTYyZGQ5N2E3YWU0ZDAzM2JmNjc1M2FiZjQxNzViZjhmMmE0MDVkY2M5M2Q4NzdkZGRlYzEwYTdiZTViNGZjMzIzNjdkNzJlM2U3NjgwMGY3ZjQ4YzYwOGRhNDUzYzNkMmQxMTQ0ODUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vycm9ycy12MS4yLjYiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vycm9ycyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lcnJvcnMtdjEuMi42IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vycm9ycy12MS4yLjYiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvYXNzZXJ0LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29uc29sZS1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbnNvbGUtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjE1ODA1Y2JhMjk3NDg5NmMzZWM3YjY2YmEzNWNkODllNzEwZWM5NzhmNGJiMzIxOTc4YTRmNTkyZmI0ZDAzNTVkN2ZjN2JjZTYxMThkYzI5MjU1NDFkYTNhNTVhZjY1NWJlM2IyZjVhOTkxNDBiNjAwMjUzMmUzODI0N2E0ODljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDYwMWVmNGM4MjdmOWNmNTAyZWFlYzVlODE1ZmUyNmU2NDI4MTAxN2FjODI0MjE4ODY3YjY3MTg0MjFhZDgyOWNmYzQ4NzJkMTUwZTZiOTkxODVmY2Q3ZjE1ZGZkNzVhZTkxNGFjZGE0NTMwOTBmYjI1ODY3MjhjMTdlNWVlNDQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xvY2FsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sb2NhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImE5NWRmNGNhMzI4MjA5NjhmMTIwM2FiNWVhMjcyYjk2MWFlMzExNjM0MDcwY2YxNTIwZThhYWE2MmNhOGVhMjIyOTcwNDRhYzRlODg5MjY3NGZiYjkxYTM0M2E3NjUwZGNiYWY1M2I3Yzc0NTIxYWQ1ZTU1NmI4ZjMzYTMzYTRlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2OTExMTQ2YzhlMDQ1MjI3MDBlMjNjOTM4ZTZiYTU3MGFjN2VhMWU5MTVkOWU3YzRkY2JjNTNmYzBmN2FiOGFjYjhkZDdjZmMwN2M1MmUwMmYyYzY1NzQwNGVlODllZjczMTFhMzI3OTRhODcxMWFhN2FiNDNhNTQyMGIzMmM4OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9uby1zaGltLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9uby1zaGltLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDkyMDUxZjY5NDQyZGIxM2Y5ZTJiNmMxOWRkZDE4OWM1MWFiMjFhODQwNDIxMDMwMWY4ZDI2MWIzYjMxOTQ4YmQ1MGNiNmY4NTIzZTAzNWM0ZjNkZjc2MzExNTgyOGZjMmVhZGM5YzJiMTI3MTdmYTM5MzhmZDRmMWQ3ODRiMTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHJhY2stdHVybnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RyYWNrLXR1cm5zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODBjYmE3NTc5OGJkYTM5MjBkNzVkNjg1ZGYzODNhNmJiYTA3MTVlMTMyNjQ4NGM2M2FmODFlYmRlN2U4NGIzODVmMDdhNzM3N2ZjNTJmYzNjODBlODAzMWJhN2Y5MWI1YmQyNWM4N2M0OTk0NjllYTFkMTM3MDc3Nzc5YWIxZTgiCiAgICAgICAgfSwKICAgICAgICAiLi91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ1dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImZlYTA0MTFiMjE2YzcxNDE1MTQzOTY2NjRmOGY4MjEzYWNkMTEyZTkzMGMwZjRmYWMwMzQyN2Y1NzM3ZDczN2QwZTk0NmI2Y2M0YzYwODg0ZDA0MDU3Yjc3Zjg4MDhhMzk2NzM2ODU5NTU4ODcyNDM1ZWFlZWVkMmYxMzI2NDdkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9iYXNlNjQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L2F0b2IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXRvYi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9iYXNlNjQvYnRvYS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9idG9hLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9kZWNvZGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGVjb2RlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9lbmNvZGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5jb2RlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Jhc2U2NC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9hcmNoaXZlLWxpdGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXJjaGl2ZS1saXRlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9hcmNoaXZlLXBhcnNlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXJjaGl2ZS1wYXJzZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9hcmNoaXZlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FyY2hpdmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2J1bmRsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9idW5kbGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2NhcHR1cmUtbGl0ZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jYXB0dXJlLWxpdGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LWFyY2hpdmUtbGl0ZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvaW1wb3J0LWFyY2hpdmUtcGFyc2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtYXJjaGl2ZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbXBvcnQtYXJjaGl2ZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvaW1wb3J0LWxpdGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LWxpdGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1wYXJzZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2ltcG9ydC1wYXJzZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9ub2RlLW1vZHVsZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbm9kZS1tb2R1bGVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9ub2RlLXBvd2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9ub2RlLXBvd2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9zb3VyY2UtbWFwLW5vZGUtcG93ZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zb3VyY2UtbWFwLW5vZGUtcG93ZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvc291cmNlLW1hcC1ub2RlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zb3VyY2UtbWFwLW5vZGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vd2hlcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vd2hlcmUtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby93aGVyZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vd2hlcmUtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb25zb2xlLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb21wYXJ0bWVudC13cmFwcGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb21wYXJ0bWVudC13cmFwcGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGUxMTI2YzBiNTdlNWVhYTVjZjllYTU5OTIxYmM0MzMyODIxMGJkZDZmZDhmMzkwOWUzYmU4NDUzYWQ5M2YyNTA3NmJlNTNjZTQ3MzMyZTkxN2Y1NTEzM2RiMjg0ZDgwNGIyMWUzYTJlMTlmNjU5ZTM5Y2JiMDQyYTA4N2ZmYzkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDA5ZjJhMTg0Yjg3ZDk0N2M3Y2IzN2IxYzBkN2Y0ZmUwMzhmMDJlNjYwNWRkMjEyYmRiYWRmM2M5Y2E1MTRhMzYwZjM2MDIwMTE0MTdlNzc3ZjE3NGY1MGEzYmFmMWQ1OGIwNGExYThlNGU3MjcwY2RiYTNiNDk0MmI0NjQyNmMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL21hcnNoYWwtdjEuNS40IjogewogICAgICAibmFtZSI6ICJAZW5kby9tYXJzaGFsIiwKICAgICAgImxhYmVsIjogIkBlbmRvL21hcnNoYWwtdjEuNS40IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL21hcnNoYWwtdjEuNS40IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjExIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjk5NzFhNGJhZjkyYjU0OGUyNDc0ODgwYzA3ZGFiZjM2MWYyZmQwMzhjNDAwZGE1MWQwYTQ0NjgwOTJlMzY1NTU3Njk3YzhlYjFjYWUzMjVjZmQ5ZmFmNzJhYjg2YzEzZjA0MjQwYTZlMTQ3M2E3ZTM5Mzg2MmRkMDQxMWI1NGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVBhc3NhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjJiYTFiNjI2ZGE3MzE5YjFkNTZhZmRkZmYwYmIxNjdhZTNjYWU2MmJkODZlMjA2ZTUzZGI5NzEwYWI2YzExZjkwYmE1MDg3NmRmYjYxNTAxYjJjZjRjMDZmMzYzNjhkYThlZTE0MjBjYTg5NTA4ZDdmY2RjMTJhMmQ2M2Q2NzEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVUb0NhcERhdGEuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMzJiNDhjN2IwYTdjNGFmMWYwNThjNDUwMzBjYzUxYTIxNjExNjA3NWMyNGU1MDhkYTllY2VmNmJkNmQ0MWM0ZGIwODBhMmE4MzgzMjI4N2ZmNjIwODczZTY3ZjMxOGVjYTQyMzE1NDFkMjEwYjk0YjQ0MjFjOWUzNGEzOTg4YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlVG9TbWFsbGNhcHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkY2JkZjlhYWUzMTZiYzNlMzQwNWVmZGY3MDAzY2FhZTE4N2E5MzI5ODk0ZDkyOTJkYWM2NmQ1OTkwY2M1ZGZiODExMmY0MzNhODdkYzNkMmQxZWMwMjZkZDg1NjYwZGRmYTNkMTllZGU0OWFlYmJhYTI4NGQxYzAwOWVmODFkOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC1qdXN0aW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MGI4YzFhOWM1YjY2ZDdkZjA2MTg0NWJiNzM4ZmVhZjMwZGU3NTQ4M2RkZDg1M2QyYjU1N2ZhYmQ4MzI3OWQ0MDRhYzQ5ZmY1NTNiMmUzM2ExOTAwMWY1MDExNjQyMzU4N2E5YzQyZDM2M2RkNWU5ZmMxNDUzMTIyOGVhOTQ2OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYzJiZDI0MWUyMjkzYmEyMWFlNmFiMmM0ZmZlMzYwNDcxZmQ1YjkxNWE0OTc2ZGE0MWYxNjhmOTgwMDI0MDJmZDQ3Y2VlYTgxOGI4ZDBiMzRjYjhjNTdhYTk1MDI5MmY3Mjk3M2ExMGI0N2MwOGIwNDE3YTRjY2IzZjA1ODJjNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmVlYzY1NmQ1ZDRmZDIzYzI5YTU0YmE2ODVlZmJiMDkyZGNmMmY5NGUwY2JjYzg4MThhMTEyOWNhYzY4MTZhOTNlMTUwNGM1YWVkMGZmYzMxZTY2MmVmNDA1NDIxYmE1YzllMWI4NGQ4ZDQzMzBjMDY4MDNhYzIyYzUwMWFkMTEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmFua09yZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yYW5rT3JkZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMWFmZjkyYmNmYWYyZTM0NDc2YzkyOTQzZmNjMzM0Zjg2ZTBhNjAwMjFhZjcwZjg3YTk0ZmMxZGU5YTdhYmMzOWY3MWQ0MzZmN2UwYjhkNjdiZDNiODljZTM0NWRjZTJmZjExMGFlMjNkZmE1YTQ2NGE0YzU0NmJlOGI3ZjQzNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vbmF0LXY1LjAuMTEiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL25hdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9uYXQtdjUuMC4xMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9uYXQtdjUuMC4xMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjExIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjIwYTk0N2YxMmZkZDUyNjYxMDJjZjZlMjAwMzgzYTQyODk3ZTlkYjM5OWEyNzJiNmNjZGMwNTAyMzIzNTYzZTI5OWM5ZDYzZmZlYmQ3MDUxZTFjYzY4OGVmYTVmOTFkNjhlNDNlNjRjNWM5MzFmMGI3YTU0ODU1ZTQzYTA0NmQiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40IjogewogICAgICAibmFtZSI6ICJAZW5kby9wYXNzLXN0eWxlIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBmYXN0LWNoZWNrL2F2YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZmFzdC1jaGVjay9hdmEtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saWIvZXNtL2F2YS1mYXN0LWNoZWNrLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBmYXN0LWNoZWNrL2F2YS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGZhc3QtY2hlY2svYXZhLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOTkzMmQ1NGY1YjQxYWM3YjI0MWIwNDQ3ZGViYjVmNzkzNTlhNGNhYzUyZDdjYjY4NDU1NGQyNTE1MTk5Yjk5YTQ1ZjAxZmVjOTJhY2E0N2FhNWI3MTU5ZTRlZGI5NGFjN2NjNGIxYmE4NjE1YjIzOTQ0Mjg4MWVkODkwZmUxNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5QXJyYXkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlBcnJheS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNmMDdhYjlkMTczYzUwMzgzOGVjNWFjOTMwNjFiOTdiYzFlMDI3OWM2YmUzYzRkN2JhNDZjMWU5YWNmNDFjMGM5ODAwZGFkYjlhMjViYjllNzliYTcyMmEwZDQzNDRiY2NmYjkwYjIwZWI2N2YxY2Y5MDg1ODg0ZjJjNzJmYmFhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvcHlSZWNvcmQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlSZWNvcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMWM0OWNjNmQ1NzdhYWIyYmVhNzhkNDQzY2U4ZGU3MTM4YTQ4YWRkMDE4YTIyMTU2NGZhMTQ0NGIxNWVhYTY5YjYyMjE2MTE4MDg1ZWUyNjU1NTJlZTQ4YzZlZGY2ZWE1OWEwMDM4ZTgzNzVlNTQxNDk4MmUyMTJhODkxZmUyOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzYzBiYzBiZWMxOTRmZDkxMWI0OWM4NzkzOTk4ODZkZjZkNjZkYjc5Zjc1MGQyNDNkNjY1ZDliYWZhMWNjYzQ0NzJmODQzMzg2NDFiMGUxODRjYWMzOWM1NzdkZmExMTVlOGIzZGJiZjY5MjdmOWI3N2IwZDcyODM3NGM3MDZmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lcnJvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJlY2QwZTNkZWE2NGE5MTkyYzU3OGQwNzhiYWZkYTY4ZDE1ZjNiZjhjNWY3ZjcyZGVhNTNiZjYwNDJlZGUyNjYyYTFhMzBlNWQ1ZGE0ZjE2Mjc2NGU0MTExMWRiMDZkYTliNGIyNWM0M2E5MTc5ZGEyNjEyYWIwNmQ4YTVlODNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2l0ZXItaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXRlci1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWE4ZDdjZTA1MWJlYzg3NTY0ZTdjNGY2YWQxMjAzNjI2OTgyZjQxYTMyMzhhNTEwMjVmYWE1MzEwMWQ2MjdhNTMwMGNiYjQwNjYxYjM4ZThkYjEyMDAwMzIyZDdhZGY5NTkyY2YwYTViYTdjZDYzMTY5YzIxN2I0MGJjNDhjMzAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1mYXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2UtZmFyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGVkYWI1OTY4YjY5MWEyOWEyZmQ4NTRjYTMzMWJkNDc1ZTBmNDdmNTU0YmYxZjlkZDY3Y2MxN2NmMjdhMTJjOWQ3NjU0NmFkNmZiNmUyOWViOTk2MTVmNDRjYjVmMDE1NTE0Mjg2YTlhYjIzZjQ0OGJiYzQ1YjA4NDFjMWRhZjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZVRhZ2dlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwMWY4MmY5YjQwNjQzZjU5YWRjMjAyZGE3MWEwMWE1N2FmNjA0NGZhNWRlOWY5YmY4OTNiOTMyNzljYTFhMTVjYmExMGJmZDU2YzBhZDkzMDA2MzdhZTJkNjJkMDhlYjgzYmE3MDYzYmE4MDVkZmQxYmVhZjEyNGJjMmZlYTIxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNlNTU2MDQ3ZWYwMzFkYjQzNmM4NGZhMzI4YjM3M2ZiNDhiYTllNDY2ZWMyNDJkNDBmMWZmMmZmYjJlNmZlMGQyOTBjYmNjZDA5MDVkMWYyODEwOTZkZGQ1MzdiODBjZmFkMDE2N2NhMjYxOTUzNTk5N2EyMzI4OGIzNjg4Y2MyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGVPZi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0MmE5ZWZiYjI4NTZlNmZmYzBmMzg5Yzg1ZGZkZGE4NGU2MTFjM2JmNDdiYTQ3ODBmMjA3ODFiOTYzN2I2MDIyMWJlMTQ4MDM4YTgwOWYyZDZmYjc2ZTJkZTY0NjlmZGFlNjNjMDA1MjU2YmE1NGU0OTZlNzRmYmVkNTM5N2FlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JlbW90YWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmVtb3RhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzkxMDA5Mzg3NDc1Y2I5NzM3YmM4YWQ1MGY5OGE0ODhjOGE1MTExMDMzMjZiNTNiNDI5NDkxN2FkNjg2ODgzYTBhNGJhZDZkYjA2YTk0YzA1MDZiZWYxNGFjYmFkZjMwODUyOGI5MWRhMjRiMmE1MGU5NTgxYTNlY2E5MjA3NTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2FmZS1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zYWZlLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxZDZjYmZiM2MzZjllMThhMDA1Njg3YzU5N2YxZWZiNzc5NWRiM2FjMzY5NzQ0N2NhYTJiMjgyNGNjMWJhYjE0Y2IxYjhhMWE3MDZhZGExMjlkNzk4YjBhOTJkMDlhOTEzZjA4M2JmYzdiNjM2NzZlNzEzOGY1ZmJmZTljMGM4NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdHJpbmcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0cmluZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM5YjIxMDE3MWRmZjI5NmYzOGI0NTc3MDZhYjAyMWVhYmI3NTYwZTI1OGQ5M2ZmZjY4YjU2ZTk2YzZjMmE2YzJjOWQ5NzE2Yjk2NjBlYTk4Y2VkOWZmNGFiNmRmMDJhYTAxYjhmODE4NmI3MDZlNWY3MGJhMjdkZmU5NWVkODlkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N5bWJvbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3ltYm9sLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjg1YzRlYWNhNzllODFjZTczMGM1Y2NhYzQxMjBmOTJiZjQ4YjMxN2YzNGQ4MzVhZDIxMzllYzcxMTE1NTkzY2U0ZTlmOWFjNjhkNzdiOWRkNmI2YjM5NzViZjE2NmJmNDFkZTM4MjRlZWNmZTViYjE2OWU1NzFiMzNiYWZlYzIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdGFnZ2VkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90YWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjZGQwY2U5MmVlOGI1ZTZkMDA5N2E1Nzg4MjQyYTg3OWU3MjZjNjdjNTRmZmIwZTNiYTRlYWUzOTk2NDFkYzRkMWFjNWU1NjE5ZjVmNTY2ZTZhM2VkZDg0NmNmODczYjVjMWM1OTc4NWIyNTFmZDIwNGU5MDg5YjE3YWMwMTQ5NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzI5ZmMxNTQwNTM3NzE1ZGY4NTRhMzhhNWU0NWFlNmQyMjg2ZTlmYjE1MWM1Mjg1NmM5YjlkZmMxZTIyY2Q2MzA5ZWQzMjIyMzBlNmZlY2M2YTI0OGE2YjM0NTBhM2ZmMTY0YTY3NGVlZmY4MjhjOTE1ZWM0ODIwM2JkYzY2NDciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcHJvbWlzZS1raXQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS42IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2Fzc2VydC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Fzc2VydC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb21wYXJ0bWVudC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbXBhcnRtZW50LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbnNvbGUtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb25zb2xlLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93bi1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xvY2tkb3duLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYzM0YjU2YmExZDI1NTY1MDQzMzVhNmNiMzRkYjVmNjljY2EzNTJmNTk4OTgzMGJlMDY3MWRmN2I2YjA4MDA0NjgyOTI4MGE1YmY4OTBhNGU5MmY4ZDE4NDE5ZGZiYzFiYzQzYWQ3ZTYyZjA4MTRmMzgxN2U0MWRjMzBjNDYwZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pcy1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2M2MmI1ODA1YzQyNTU3NmJkMTFiYTM4NzEwNmU3MmFkNjk1YTc0MjIzZjU4ZDZmODkxY2JmMThhNjZjZTQyNjgxMWIxMmYzOGRiMTM4NDg3NzBjOTJmZTlhODM0NzNiNDJmMTcwZGY0NmNiODZkMjU0ODhiN2Y1ZmQxZDllYTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWVtby1yYWNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZW1vLXJhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0NjIyNWYxYjUzZGYxYjI4YjM5ZTM3NzI3YmEwZGY0OTE1OGMxMjcyYmZjMTE1MWUzZWQ5NzhkZTVlODBiYjUzNTgwZjkwNWEzNzI1ODYyMmJhYzNmYzhmODNlMDkwNDFlYmY3NDFkODA1NmFmZmI2MWQyYjYxZDJkYjRjM2ViOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YThjNTIzNDc1ZWUwNWRlMjgwMWJkMzZkOTc2N2Q2ODI1YWE2MGRkYTA0ZDQ3ZTQ0MDQ5ZWM0ZjQ5MDg2MzYxYTM5ZTNmYjE5OGZhYzg0OGMzNTYwZmY1ZjU1Yzc3MzUyMjU1MzVlY2E1NjNlZWEyNzY3NWIxOGE0Zjk0NzZmMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3RyYW1wb2xpbmUiLAogICAgICAibGFiZWwiOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vdHJhbXBvbGluZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby90cmFtcG9saW5lLXYxLjAuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vdHJhbXBvbGluZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2M1NDNlZjUyYjdmNTA1ZGY4YzYwMWU3ZWU1NzRjOGNjMzI2MTkyOTg3NmFlNmY2YTQ5NDJlMDVhZjQxMjdlYzgxZGU4YWMxMmU4OWMyMmYyNDRjNTViNzhlMzMxNzJlOTI1MGNiNDM5YzIwMjc5OTJiZDY0MzgwZjI3ZTk0NmMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHJhbXBvbGluZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhbXBvbGluZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY1YTAyN2JlNzM0YzU3NThlNjI2NmRhMjE3YjExYTY4OTRhM2UxNWRjNmI5MmEwYzJlMzdmZmE1OWNhNWFiZmY2NDE0MWRiYzVjNWM5YTA2ZDVlZTk5M2QwNTgwZWUxZDM0NWI0YmI0YTMyMmRhZmZiYzBlOTFhZjFjN2I0YTQ1IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby96aXAtdjEuMC44IjogewogICAgICAibmFtZSI6ICJAZW5kby96aXAiLAogICAgICAibGFiZWwiOiAiQGVuZG8vemlwLXYxLjAuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL3ppcCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby96aXAvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3ppcC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby96aXAvcmVhZGVyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3ppcC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3JlYWRlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby96aXAvd3JpdGVyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3ppcC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3dyaXRlci5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTUwODY5N2FlMzI3MmVkYTRiOWJlMTk0MWIwODBlNDAwM2U1OGZmNDAzMjFlYjlhNzBmODk3MzllZDM4Yjc0M2IxOGM2ZjZkMjA4YmM3M2RhMmMwMTU3OTZmZGUyZjA3MjlkNzUyMzA2ZDkzZjYzZjU1M2NlNjk2MGYxNzUxMTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYnVmZmVyLXJlYWRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYnVmZmVyLXJlYWRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIyYjUzZTBjYWRkNGZjZGVhMGNhMzE4Njg0NWYxZWIzYzhiOWI1NTA3YmI4ODFkMzcyYzUzNzIzY2U3ZWY2YzY5M2YyYmQ0Y2JmMzMxYzg0NjZiZGZjMGU2Yjc3NTExNzk5MjA0MWI1OTdlY2JjNzkxY2Y0N2ZkYzk4ZDhhOWVmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2J1ZmZlci13cml0ZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2J1ZmZlci13cml0ZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1YzNmZTdlYzU5MTE2NjU5YTUzNDAzMzg5ZTkyYTA0MWNkMDE4NDEyYzkxZTcyZmE2ZTUwYzFlYWY5ZTU1OWRmNDQzZjJiODc5MDU4NjFhZTZhMTFjN2FhOGVjZTBhMWMwNGU5NGUxZTU5OWU0YzI5M2EyMWVkYmM5NzhiZjEwZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb21wcmVzc2lvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29tcHJlc3Npb24uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ODNmZmVlYjhiMWY3OTc2MTE5Mjg4ODQ5NDA2ZGI4NjcyMjkxZjY2ZjQ1NzM2YjBjZmFhNjFlM2ZjZjMxZDNiNmQ5ZjkyYjFkZTJkZDU4Zjc3MjA2NzY0ZmIyMGU4MjQzZGY0Y2EzZGQ2MDc2NGMxMWYwNDMxYTg1MzNmNDVjNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jcmMzMi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY3JjMzIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MGZmODc1MzAyYTIyZTg5ZjFlNTE2MTRmOTM1NGQ1NDU1ZTk1MzZjMDBlMDdiZjY2YjQyMzcyMDk0M2ZmMjYyNDg0YmUxNGQzMzU0MTI3ZmQ4ZDI4ZDJkMDM4ZWI5YTcyZTg3NmViNTY0ZWNiMjQ2OTdiYWYxNThlMzk1MTMzYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9mb3JtYXQtcmVhZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9mb3JtYXQtcmVhZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTc4NzBkODE5NTQ2MjgyN2MyMjIxYzAzOWI5OGE0MWZjYjM3YmFiNDI3YWUzZjBlYWQ4ODNhMjFlOWY0NjdjYWUyMGJiMmYyNTUwZTljM2Y3ODQ5MDFhODJkYTkwMjc1Yzg1ZTc0ZjRhODU1Mjk2NDFiYjY4YTU2MWU1NDAxMTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZm9ybWF0LXdyaXRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZm9ybWF0LXdyaXRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImU4NTM5ODUwMDBlMjExNjZhODIwZjRjMmRkYzNlMjhiNzYyMmMwYmRkMTJjYzRmZGFlNWM0ZTJhN2Y5ZTVjMTQ2MTY2MGI5ZTRkMjNmNDU5ZWZhYWFkMDlhNjZmMzBjMTY5ZDRkMDkwMWEyMDJmY2JlN2NhYzA1NGU2NTJjZWY2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JlYWRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmVhZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2EyODA3NzJlZmY3MWEwZDkxYmYxZGM5OGY3NzZiMTJkZmIyZThlMTMyMzk2Mjk0ZjhhNWVhMGRhZjAyMzA0Mzk4YmU4ZWE3MjM1MzAwNzk1N2E0YTg2ZTIwZjk0Njk0MTdlMjM0MDgxMjFjZDg0MDM0ZTExNzc0OTg1YjBlMTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2lnbmF0dXJlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zaWduYXR1cmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMWFhYWFkMGM5MTk1NDkzMWVjOWJlNWViNDcxODczOTdjYTFlMzc4ZGMwMzUxM2U4ZTE2NzYwZGI5ZjQ3Y2Y5ODUxYjNiMzQwZDRkNDViZWI2YjU3ZTYwMzIxNTc4OWFmMmRlYjQ3YWNjYjQyNGIwMDM0NmY4OWI1YjE3ZDc3NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93cml0ZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3dyaXRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZDQ5MTdlMTZjOTIxMzk5ZDU4NDRiMWRjNzVkOTBiN2RjYzI4MjVhYjI1YmQ4NDRlN2ZlMjllM2MzMGJjNmIyYTFmOGZmOThkZmY4ZDgzMzI0YWY0YTI3Njc2YmRjYWQ3ZmUxYzBjOTNhMDkwY2I3ZTlkMTQ4Y2RjODNkMjJkIgogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfVBLAwQKAAAAAAAAAAAALhzkYnMEAABzBAAAKQAAAEBhZ29yaWMvc3Bhd25lci12MC42Ljgvc3JjL3ZhdC1zcGF3bmVkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ltcG9ydC1idW5kbGUiLCJAZW5kby9tYXJzaGFsIl0sImV4cG9ydHMiOlsiYnVpbGRSb290T2JqZWN0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGltcG9ydEJ1bmRsZSxGYXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9pbXBvcnQtYnVuZGxlXCIsIFtbXCJpbXBvcnRCdW5kbGVcIiwgWyRozY9fYSA9PiAoaW1wb3J0QnVuZGxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1aWxkUm9vdE9iamVjdCwgJ25hbWUnLCB7dmFsdWU6IFwiYnVpbGRSb290T2JqZWN0XCJ9KTskaM2PX29uY2UuYnVpbGRSb290T2JqZWN0KGJ1aWxkUm9vdE9iamVjdCk7ICAgXG5cblxuXG5cbmNvbnN0IGVuZG93bWVudHM9e1xuVmF0RGF0YSxcbmNvbnNvbGUsXG4vL1xuYXNzZXJ0Omdsb2JhbFRoaXMuYXNzZXJ0LFxuQmFzZTY0Omdsb2JhbFRoaXMuQmFzZTY0LC8vXG5VUkw6Z2xvYmFsVGhpcy5VUkwvL1xufTtcblxuZnVuY3Rpb24gICAgICAgIGJ1aWxkUm9vdE9iamVjdCgpe1xucmV0dXJuIEZhcigncm9vdCcse1xuICAgICAgYXN5bmMgbG9hZEJ1bmRsZShidW5kbGUpe1xuY29uc3QgbnM9YXdhaXQgaW1wb3J0QnVuZGxlKGJ1bmRsZSx7ZW5kb3dtZW50c30pO1xuY29uc3Qgc3RhcnRGbj1ucy5kZWZhdWx0O1xucmV0dXJuIEZhcignc3Bhd25lZCBidW5kbGUnLHtcbiAgICAgIGFzeW5jIHN0YXJ0KGFyZ3NQKXtcbmNvbnN0IGFyZ3M9YXdhaXQgYXJnc1A7XG5yZXR1cm4gc3RhcnRGbihhcmdzKTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJidWlsZFJvb3RPYmplY3QiOlsiYnVpbGRSb290T2JqZWN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIHpHbNhAgAAYQIAABsAAABAZW5kby9iYXNlNjQtdjEuMC44L2F0b2IuanN7ImltcG9ydHMiOlsiLi9kZWNvZGUuanMiXSwiZXhwb3J0cyI6WyJhdG9iIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGRlY29kZUJhc2U2NDskaM2PX2ltcG9ydHMoW1tcIi4vZGVjb2RlLmpzXCIsIFtbXCJkZWNvZGVCYXNlNjRcIiwgWyRozY9fYSA9PiAoZGVjb2RlQmFzZTY0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhdG9iPShlbmNvZGVkRGF0YSk9PntcbmNvbnN0IGJ1Zj1kZWNvZGVCYXNlNjQoZW5jb2RlZERhdGEpO1xucmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmKTtcbiB9OyRozY9fb25jZS5hdG9iKGF0b2IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXRvYiI6WyJhdG9iIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACZUXeYBAwAAAQMAABsAAABAZW5kby9iYXNlNjQtdjEuMC44L2J0b2EuanN7ImltcG9ydHMiOlsiLi9lbmNvZGUuanMiXSwiZXhwb3J0cyI6WyJidG9hIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGVuY29kZUJhc2U2NDskaM2PX2ltcG9ydHMoW1tcIi4vZW5jb2RlLmpzXCIsIFtbXCJlbmNvZGVCYXNlNjRcIiwgWyRozY9fYSA9PiAoZW5jb2RlQmFzZTY0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBidG9hPShzdHJpbmdUb0VuY29kZSk9PntcbmNvbnN0IGJ5dGVzPXN0cmluZ1RvRW5jb2RlLnNwbGl0KCcnKS5tYXAoKGNoYXIpPT57XG5jb25zdCBiPWNoYXIuY2hhckNvZGVBdCgwKTtcbmlmKGI+MHhmZil7XG50aHJvdyBFcnJvciggYGJ0b2E6IGNoYXJhY3RlciBvdXQgb2YgcmFuZ2U6ICR7Y2hhcn1gKTtcbiB9XG5yZXR1cm4gYjtcbiB9KTtcbmNvbnN0IGJ1Zj1uZXcgVWludDhBcnJheShieXRlcyk7XG5yZXR1cm4gZW5jb2RlQmFzZTY0KGJ1Zik7XG4gfTskaM2PX29uY2UuYnRvYShidG9hKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImJ0b2EiOlsiYnRvYSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABz+iePqwEAAKsBAAAdAAAAQGVuZG8vYmFzZTY0LXYxLjAuOC9kZWNvZGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZGVjb2RlLmpzIl0sImV4cG9ydHMiOltudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2RlY29kZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2RlY29kZS5qcyI6W1siZGVjb2RlQmFzZTY0IiwiZGVjb2RlQmFzZTY0Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD390dCqwEAAKsBAAAdAAAAQGVuZG8vYmFzZTY0LXYxLjAuOC9lbmNvZGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZW5jb2RlLmpzIl0sImV4cG9ydHMiOltudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2VuY29kZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2VuY29kZS5qcyI6W1siZW5jb2RlQmFzZTY0IiwiZW5jb2RlQmFzZTY0Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABq5nZnlgIAAJYCAAAcAAAAQGVuZG8vYmFzZTY0LXYxLjAuOC9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbmNvZGUuanMiLCIuL3NyYy9kZWNvZGUuanMiLCIuL2J0b2EuanMiLCIuL2F0b2IuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW5jb2RlLmpzXCIsIFtdXSxbXCIuL3NyYy9kZWNvZGUuanNcIiwgW11dLFtcIi4vYnRvYS5qc1wiLCBbXV0sW1wiLi9hdG9iLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZW5jb2RlLmpzIjpbWyJlbmNvZGVCYXNlNjQiLCJlbmNvZGVCYXNlNjQiXV0sIi4vc3JjL2RlY29kZS5qcyI6W1siZGVjb2RlQmFzZTY0IiwiZGVjb2RlQmFzZTY0Il1dLCIuL2J0b2EuanMiOltbImJ0b2EiLCJidG9hIl1dLCIuL2F0b2IuanMiOltbImF0b2IiLCJhdG9iIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABdcxYnEQMAABEDAAAhAAAAQGVuZG8vYmFzZTY0LXYxLjAuOC9zcmMvY29tbW9uLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJhbHBoYWJldDY0IiwibW9ub2R1NjQiLCJwYWRkaW5nIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG5jb25zdCAgICAgICAgcGFkZGluZz0nPSc7JGjNj19vbmNlLnBhZGRpbmcocGFkZGluZyk7XG5cbmNvbnN0ICAgICAgICBhbHBoYWJldDY0PVxuJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hbHBoYWJldDY0KGFscGhhYmV0NjQpO1xuY29uc3QgICAgICAgIG1vbm9kdTY0PXt9OyRozY9fb25jZS5tb25vZHU2NChtb25vZHU2NCk7XG5mb3IobGV0IGk9MDtpPGFscGhhYmV0NjQubGVuZ3RoO2krPTEpe1xuY29uc3QgYz1hbHBoYWJldDY0W2ldO1xubW9ub2R1NjRbY109aTtcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwYWRkaW5nIjpbInBhZGRpbmciXSwiYWxwaGFiZXQ2NCI6WyJhbHBoYWJldDY0Il0sIm1vbm9kdTY0IjpbIm1vbm9kdTY0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOBOTL53BwAAdwcAACEAAABAZW5kby9iYXNlNjQtdjEuMC44L3NyYy9kZWNvZGUuanN7ImltcG9ydHMiOlsiLi9jb21tb24uanMiXSwiZXhwb3J0cyI6WyJkZWNvZGVCYXNlNjQiLCJqc0RlY29kZUJhc2U2NCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtb25vZHU2NCxwYWRkaW5nOyRozY9faW1wb3J0cyhbW1wiLi9jb21tb24uanNcIiwgW1tcIm1vbm9kdTY0XCIsIFskaM2PX2EgPT4gKG1vbm9kdTY0ID0gJGjNj19hKV1dLFtcInBhZGRpbmdcIiwgWyRozY9fYSA9PiAocGFkZGluZyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGpzRGVjb2RlQmFzZTY0PShzdHJpbmcsbmFtZT0nPHVua25vd24+Jyk9PntcbmNvbnN0IGRhdGE9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKHN0cmluZy5sZW5ndGgqNC8zKSk7XG5sZXQgcmVnaXN0ZXI9MDtcbmxldCBxdWFudHVtPTA7XG5sZXQgaT0wOy8vXG5sZXQgaj0wOy8vXG5cbndoaWxlKGk8c3RyaW5nLmxlbmd0aCYmc3RyaW5nW2ldIT09cGFkZGluZyl7XG5jb25zdCBudW1iZXI9bW9ub2R1NjRbc3RyaW5nW2ldXTtcbmlmKG51bWJlcj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvciggYEludmFsaWQgYmFzZTY0IGNoYXJhY3RlciAke3N0cmluZ1tpXX0gaW4gc3RyaW5nICR7bmFtZX1gKTtcbiB9XG5yZWdpc3Rlcj1yZWdpc3Rlcjw8NnxudW1iZXI7XG5xdWFudHVtKz02O1xuaWYocXVhbnR1bT49OCl7XG5xdWFudHVtLT04O1xuZGF0YVtqXT1yZWdpc3Rlcj4+PnF1YW50dW07XG5qKz0xO1xucmVnaXN0ZXImPSgxPDxxdWFudHVtKS0xO1xuIH1cbmkrPTE7XG4gfVxuXG53aGlsZShxdWFudHVtPjApe1xuaWYoaT09PXN0cmluZy5sZW5ndGh8fHN0cmluZ1tpXSE9PXBhZGRpbmcpe1xudGhyb3cgRXJyb3IoIGBNaXNzaW5nIHBhZGRpbmcgYXQgb2Zmc2V0ICR7aX0gb2Ygc3RyaW5nICR7bmFtZX1gKTtcbiB9XG4vL1xuLy9cbmkrPTE7XG5xdWFudHVtLT0yO1xuIH1cblxuaWYoaTxzdHJpbmcubGVuZ3RoKXtcbnRocm93IEVycm9yKFxuIGBCYXNlNjQgc3RyaW5nIGhhcyB0cmFpbGluZyBnYXJiYWdlICR7c3RyaW5nLnN1YnN0cihcbmkpXG4gfSBpbiBzdHJpbmcgJHtuYW1lfWApO1xuXG4gfVxuXG5yZXR1cm4gZGF0YS5zdWJhcnJheSgwLGopO1xuIH07XG5cbi8vXG4vL1xuJGjNj19vbmNlLmpzRGVjb2RlQmFzZTY0KGpzRGVjb2RlQmFzZTY0KTtjb25zdCBhZGFwdERlY29kZXI9XG4obmF0aXZlRGVjb2RlQmFzZTY0KT0+XG4oLi4uYXJncyk9PntcbmNvbnN0IGRlY29kZWQ9bmF0aXZlRGVjb2RlQmFzZTY0KC4uLmFyZ3MpO1xuaWYoZGVjb2RlZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe1xucmV0dXJuIGRlY29kZWQ7XG4gfVxucmV0dXJuIG5ldyBVaW50OEFycmF5KGRlY29kZWQpO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGRlY29kZUJhc2U2ND1cbmdsb2JhbFRoaXMuQmFzZTY0IT09dW5kZWZpbmVkP1xuYWRhcHREZWNvZGVyKGdsb2JhbFRoaXMuQmFzZTY0LmRlY29kZSk6XG5qc0RlY29kZUJhc2U2NDskaM2PX29uY2UuZGVjb2RlQmFzZTY0KGRlY29kZUJhc2U2NCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJqc0RlY29kZUJhc2U2NCI6WyJqc0RlY29kZUJhc2U2NCJdLCJkZWNvZGVCYXNlNjQiOlsiZGVjb2RlQmFzZTY0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEcLyqkgBgAAIAYAACEAAABAZW5kby9iYXNlNjQtdjEuMC44L3NyYy9lbmNvZGUuanN7ImltcG9ydHMiOlsiLi9jb21tb24uanMiXSwiZXhwb3J0cyI6WyJlbmNvZGVCYXNlNjQiLCJqc0VuY29kZUJhc2U2NCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhbHBoYWJldDY0LHBhZGRpbmc7JGjNj19pbXBvcnRzKFtbXCIuL2NvbW1vbi5qc1wiLCBbW1wiYWxwaGFiZXQ2NFwiLCBbJGjNj19hID0+IChhbHBoYWJldDY0ID0gJGjNj19hKV1dLFtcInBhZGRpbmdcIiwgWyRozY9fYSA9PiAocGFkZGluZyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAganNFbmNvZGVCYXNlNjQ9KGRhdGEpPT57XG4vL1xuLy9cbi8vXG5sZXQgc3RyaW5nPScnO1xubGV0IHJlZ2lzdGVyPTA7XG5sZXQgcXVhbnR1bT0wO1xuXG5mb3IobGV0IGk9MDtpPGRhdGEubGVuZ3RoO2krPTEpe1xuY29uc3QgYj1kYXRhW2ldO1xucmVnaXN0ZXI9cmVnaXN0ZXI8PDh8YjtcbnF1YW50dW0rPTg7XG5pZihxdWFudHVtPT09MjQpe1xuc3RyaW5nKz1cbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4xOCYweDNmXStcbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4xMiYweDNmXStcbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj42JjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcj4+PjAmMHgzZl07XG5yZWdpc3Rlcj0wO1xucXVhbnR1bT0wO1xuIH1cbiB9XG5cbnN3aXRjaChxdWFudHVtKXtcbmNhc2UgMDpcbmJyZWFrO1xuY2FzZSA4Olxuc3RyaW5nKz1cbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4yJjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcjw8NCYweDNmXStcbnBhZGRpbmcrXG5wYWRkaW5nO1xuYnJlYWs7XG5jYXNlIDE2Olxuc3RyaW5nKz1cbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4xMCYweDNmXStcbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj40JjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcjw8MiYweDNmXStcbnBhZGRpbmc7XG5icmVhaztcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYGludGVybmFsOiBiYWQgcXVhbnR1bSAke3F1YW50dW19YCk7fVxuXG5yZXR1cm4gc3RyaW5nO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5qc0VuY29kZUJhc2U2NChqc0VuY29kZUJhc2U2NCk7XG5jb25zdCAgICAgICAgZW5jb2RlQmFzZTY0PVxuZ2xvYmFsVGhpcy5CYXNlNjQhPT11bmRlZmluZWQ/Z2xvYmFsVGhpcy5CYXNlNjQuZW5jb2RlOmpzRW5jb2RlQmFzZTY0OyRozY9fb25jZS5lbmNvZGVCYXNlNjQoZW5jb2RlQmFzZTY0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImpzRW5jb2RlQmFzZTY0IjpbImpzRW5jb2RlQmFzZTY0Il0sImVuY29kZUJhc2U2NCI6WyJlbmNvZGVCYXNlNjQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAArVcGfgIDAAACAwAAIQAAAEBlbmRvL2NvbW1vbi12MS4yLjYvb2JqZWN0LW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBjb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1hcD0ob3JpZ2luYWwsbWFwRm4pPT57XG5jb25zdCBlbnRzPWVudHJpZXMob3JpZ2luYWwpO1xuY29uc3QgbWFwRW50cz1lbnRzLm1hcChcbihbayx2XSk9Pi8qICAgICAgICAgICAgICAgICAgICAgICAqL1trLG1hcEZuKHYsayldKTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cykpKTtcbiB9OyRozY9fb25jZS5vYmplY3RNYXAob2JqZWN0TWFwKTtcbmhhcmRlbihvYmplY3RNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsib2JqZWN0TWFwIjpbIm9iamVjdE1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACUhs57GgIAABoCAAAxAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9pbXBvcnQtYXJjaGl2ZS5qc3siaW1wb3J0cyI6WyIuL3NyYy9pbXBvcnQtYXJjaGl2ZS5qcyJdLCJleHBvcnRzIjpbImxvYWRBcmNoaXZlIiwibG9hZEFyY2hpdmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2ltcG9ydC1hcmNoaXZlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvaW1wb3J0LWFyY2hpdmUuanMiOltbInBhcnNlQXJjaGl2ZSIsInBhcnNlQXJjaGl2ZSJdLFsibG9hZEFyY2hpdmUiLCJsb2FkQXJjaGl2ZSJdLFsiaW1wb3J0QXJjaGl2ZSIsImltcG9ydEFyY2hpdmUiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADuTBsziJgAA4iYAADYAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9jb21wYXJ0bWVudC1tYXAuanN7ImltcG9ydHMiOlsiLi9wb2xpY3ktZm9ybWF0LmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29tcGFydG1lbnRNYXAiLCJwYXRoQ29tcGFyZSIsInN0cmluZ0NvbXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UGFja2FnZVBvbGljeTskaM2PX2ltcG9ydHMoW1tcIi4vcG9saWN5LWZvcm1hdC5qc1wiLCBbW1wiYXNzZXJ0UGFja2FnZVBvbGljeVwiLCBbJGjNj19hID0+IChhc3NlcnRQYWNrYWdlUG9saWN5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0ICAgICAgICBzdHJpbmdDb21wYXJlPShhLGIpPT5hPT09Yj8wOmE8Yj8tMToxO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5zdHJpbmdDb21wYXJlKHN0cmluZ0NvbXBhcmUpO1xuY29uc3QgY3VtdWxhdGl2ZUxlbmd0aD0obGVuZ3RoLHRlcm0pPT57XG5yZXR1cm4gbGVuZ3RoK3Rlcm0ubGVuZ3RoO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgcGF0aENvbXBhcmU9KGEsYik9Pntcbi8vXG5pZihhPT09dW5kZWZpbmVkJiZiPT09dW5kZWZpbmVkKXtcbnJldHVybiAwO1xuIH1cbmlmKGE9PT11bmRlZmluZWQpe1xucmV0dXJuIDE7XG4gfVxuaWYoYj09PXVuZGVmaW5lZCl7XG5yZXR1cm4tMTtcbiB9XG4vL1xuaWYoYS5sZW5ndGghPT1iLmxlbmd0aCl7XG5yZXR1cm4gYS5sZW5ndGgtYi5sZW5ndGg7XG4gfVxuLy9cbmNvbnN0IGFTdW09YS5yZWR1Y2UoY3VtdWxhdGl2ZUxlbmd0aCwwKTtcbmNvbnN0IGJTdW09Yi5yZWR1Y2UoY3VtdWxhdGl2ZUxlbmd0aCwwKTtcbmlmKGFTdW0hPT1iU3VtKXtcbnJldHVybiBhU3VtLWJTdW07XG4gfVxuLy9cbmFzc2VydChhLmxlbmd0aD09PWIubGVuZ3RoKTsvL1xuLy9cbi8vXG5mb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krPTEpe1xuY29uc3QgY29tcGFyaXNvbj1zdHJpbmdDb21wYXJlKGFbaV0sYltpXSk7XG5pZihjb21wYXJpc29uIT09MCl7XG5yZXR1cm4gY29tcGFyaXNvbjtcbiB9XG4gfVxuLy9cbi8vXG4vL1xucmV0dXJuIDA7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UucGF0aENvbXBhcmUocGF0aENvbXBhcmUpO1xuZnVuY3Rpb24qZW51bWVyYXRlKGl0ZXJhYmxlKXtcbmxldCBpbmRleD0wO1xuZm9yKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKXtcbnlpZWxkW2luZGV4LHZhbHVlXTtcbmluZGV4Kz0xO1xuIH1cbiB9XG5cbi8qXG5cblxuICovXG5jb25zdCBhc3NlcnRFbXB0eU9iamVjdD0ob2JqZWN0LG1lc3NhZ2UpPT57XG5hc3NlcnQoT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg9PT0wLG1lc3NhZ2UpO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCBhc3NlcnRDb25kaXRpb25zPShjb25kaXRpb25zLHVybCk9PntcbmlmKGNvbmRpdGlvbnM9PT11bmRlZmluZWQpcmV0dXJuO1xuYXNzZXJ0KFxuQXJyYXkuaXNBcnJheShjb25kaXRpb25zKSxcbiBgY29uZGl0aW9ucyBtdXN0IGJlIGFuIGFycmF5LCBnb3QgJHtjb25kaXRpb25zfSBpbiAke3EodXJsKX1gKTtcblxuZm9yKGNvbnN0W2luZGV4LHZhbHVlXW9mIGVudW1lcmF0ZShjb25kaXRpb25zKSl7XG5hc3NlcnQudHlwZW9mKFxudmFsdWUsXG4nc3RyaW5nJyxcbiBgY29uZGl0aW9uc1ske2luZGV4fV0gbXVzdCBiZSBhIHN0cmluZywgZ290ICR7dmFsdWV9IGluICR7cSh1cmwpfWApO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvbXBhcnRtZW50TW9kdWxlPShhbGxlZ2VkTW9kdWxlLHBhdGgsdXJsKT0+e1xuY29uc3R7Y29tcGFydG1lbnQsbW9kdWxlLC4uLmV4dHJhfT1hbGxlZ2VkTW9kdWxlO1xuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3Eoe1xuZXh0cmEsXG5jb21wYXJ0bWVudH0pXG4gfSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbmNvbXBhcnRtZW50LFxuJ3N0cmluZycsXG4gYCR7cGF0aH0uY29tcGFydG1lbnQgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShjb21wYXJ0bWVudCl9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxubW9kdWxlLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ubW9kdWxlIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3EobW9kdWxlKX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRGaWxlTW9kdWxlPShhbGxlZ2VkTW9kdWxlLHBhdGgsdXJsKT0+e1xuY29uc3R7bG9jYXRpb24scGFyc2VyLHNoYTUxMiwuLi5leHRyYX09YWxsZWdlZE1vZHVsZTtcbmFzc2VydEVtcHR5T2JqZWN0KFxuZXh0cmEsXG4gYCR7cGF0aH0gbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKFxuT2JqZWN0LmtleXMoZXh0cmEpKVxuIH0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5sb2NhdGlvbixcbidzdHJpbmcnLFxuIGAke3BhdGh9LmxvY2F0aW9uIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3EobG9jYXRpb24pfSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbnBhcnNlcixcbidzdHJpbmcnLFxuIGAke3BhdGh9LnBhcnNlciBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKHBhcnNlcil9IGluICR7cSh1cmwpfWApO1xuXG5cbmlmKHNoYTUxMiE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKFxuc2hhNTEyLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0uc2hhNTEyIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3Eoc2hhNTEyKX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0RXhpdE1vZHVsZT0oYWxsZWdlZE1vZHVsZSxwYXRoLHVybCk9PntcbmNvbnN0e2V4aXQsLi4uZXh0cmF9PWFsbGVnZWRNb2R1bGU7XG5hc3NlcnRFbXB0eU9iamVjdChcbmV4dHJhLFxuIGAke3BhdGh9IG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcywgZ290ICR7cShcbk9iamVjdC5rZXlzKGV4dHJhKSlcbiB9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxuZXhpdCxcbidzdHJpbmcnLFxuIGAke3BhdGh9LmV4aXQgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShleGl0KX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRNb2R1bGU9KGFsbGVnZWRNb2R1bGUscGF0aCx1cmwpPT57XG5jb25zdCBtb2R1bGVEZXNjcmlwdG9yPU9iamVjdChhbGxlZ2VkTW9kdWxlKTtcbmFzc2VydChcbmFsbGVnZWRNb2R1bGU9PT1tb2R1bGVEZXNjcmlwdG9yJiYhQXJyYXkuaXNBcnJheShtb2R1bGVEZXNjcmlwdG9yKSxcbiBgJHtwYXRofSBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7YWxsZWdlZE1vZHVsZX0gaW4gJHtxKHVybCl9YCk7XG5cblxuY29uc3R7Y29tcGFydG1lbnQsbW9kdWxlLGxvY2F0aW9uLHBhcnNlcixleGl0LGRlZmVycmVkRXJyb3J9PVxubW9kdWxlRGVzY3JpcHRvcjtcbmlmKGNvbXBhcnRtZW50IT09dW5kZWZpbmVkfHxtb2R1bGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0Q29tcGFydG1lbnRNb2R1bGUobW9kdWxlRGVzY3JpcHRvcixwYXRoLHVybCk7XG4gfWVsc2UgaWYobG9jYXRpb24hPT11bmRlZmluZWR8fHBhcnNlciE9PXVuZGVmaW5lZCl7XG5hc3NlcnRGaWxlTW9kdWxlKG1vZHVsZURlc2NyaXB0b3IscGF0aCx1cmwpO1xuIH1lbHNlIGlmKGV4aXQhPT11bmRlZmluZWQpe1xuYXNzZXJ0RXhpdE1vZHVsZShtb2R1bGVEZXNjcmlwdG9yLHBhdGgsdXJsKTtcbiB9ZWxzZSBpZihkZWZlcnJlZEVycm9yIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoXG5kZWZlcnJlZEVycm9yLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0uZGVmZXJyZWRFcnJvciBtdXN0IGJlIGEgc3RyaW5nIGNvbnRhaWluZyBhbiBlcnJvciBtZXNzYWdlYCk7XG5cbiB9ZWxzZXtcbmFzc2VydC5mYWlsKFxuIGAke3BhdGh9IGlzIG5vdCBhIHZhbGlkIG1vZHVsZSBkZXNjcmlwdG9yLCBnb3QgJHtxKGFsbGVnZWRNb2R1bGUpfSBpbiAke3EoXG51cmwpXG4gfWApO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydE1vZHVsZXM9KGFsbGVnZWRNb2R1bGVzLHBhdGgsdXJsKT0+e1xuY29uc3QgbW9kdWxlcz1PYmplY3QoYWxsZWdlZE1vZHVsZXMpO1xuYXNzZXJ0KFxuYWxsZWdlZE1vZHVsZXM9PT1tb2R1bGVzfHwhQXJyYXkuaXNBcnJheShtb2R1bGVzKSxcbiBgbW9kdWxlcyBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7cShhbGxlZ2VkTW9kdWxlcyl9IGluICR7cSh1cmwpfWApO1xuXG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMpKXtcbmFzc2VydE1vZHVsZSh2YWx1ZSwgYCR7cGF0aH0ubW9kdWxlc1ske3Eoa2V5KX1dYCx1cmwpO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRQYXJzZXJzPShhbGxlZ2VkUGFyc2VycyxwYXRoLHVybCk9PntcbmlmKGFsbGVnZWRQYXJzZXJzPT09dW5kZWZpbmVkKXtcbnJldHVybjtcbiB9XG5jb25zdCBwYXJzZXJzPU9iamVjdChhbGxlZ2VkUGFyc2Vycyk7XG5hc3NlcnQoXG5hbGxlZ2VkUGFyc2Vycz09PXBhcnNlcnMmJiFBcnJheS5pc0FycmF5KHBhcnNlcnMpLFxuIGAke3BhdGh9LnBhcnNlcnMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRQYXJzZXJzfSBpbiAke3EodXJsKX1gKTtcblxuXG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKHBhcnNlcnMpKXtcbmFzc2VydC50eXBlb2YoXG5rZXksXG4nc3RyaW5nJyxcbiBgYWxsIGtleXMgb2YgJHtwYXRofS5wYXJzZXJzIG11c3QgYmUgc3RyaW5ncywgZ290ICR7a2V5fSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbnZhbHVlLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ucGFyc2Vyc1ske3Eoa2V5KX1dIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3ZhbHVlfSBpbiAke3EodXJsKX1gKTtcblxuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRTY29wZT0oYWxsZWdlZFNjb3BlLHBhdGgsdXJsKT0+e1xuY29uc3Qgc2NvcGU9T2JqZWN0KGFsbGVnZWRTY29wZSk7XG5hc3NlcnQoXG5hbGxlZ2VkU2NvcGU9PT1zY29wZSYmIUFycmF5LmlzQXJyYXkoc2NvcGUpLFxuIGAke3BhdGh9IG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHthbGxlZ2VkU2NvcGV9IGluICR7cSh1cmwpfWApO1xuXG5cbmNvbnN0e2NvbXBhcnRtZW50LC4uLmV4dHJhfT1zY29wZTtcbmFzc2VydEVtcHR5T2JqZWN0KFxuZXh0cmEsXG4gYCR7cGF0aH0gbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKFxuT2JqZWN0LmtleXMoZXh0cmEpKVxuIH0gaW4gJHtxKHVybCl9YCk7XG5cblxuYXNzZXJ0LnR5cGVvZihcbmNvbXBhcnRtZW50LFxuJ3N0cmluZycsXG4gYCR7cGF0aH0uY29tcGFydG1lbnQgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShjb21wYXJ0bWVudCl9IGluICR7cSh1cmwpfWApO1xuXG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0U2NvcGVzPShhbGxlZ2VkU2NvcGVzLHBhdGgsdXJsKT0+e1xuaWYoYWxsZWdlZFNjb3Blcz09PXVuZGVmaW5lZCl7XG5yZXR1cm47XG4gfVxuY29uc3Qgc2NvcGVzPU9iamVjdChhbGxlZ2VkU2NvcGVzKTtcbmFzc2VydChcbmFsbGVnZWRTY29wZXM9PT1zY29wZXMmJiFBcnJheS5pc0FycmF5KHNjb3BlcyksXG4gYCR7cGF0aH0uc2NvcGVzIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHtxKGFsbGVnZWRTY29wZXMpfSBpbiAke3EodXJsKX1gKTtcblxuXG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKHNjb3Blcykpe1xuYXNzZXJ0LnR5cGVvZihcbmtleSxcbidzdHJpbmcnLFxuIGBhbGwga2V5cyBvZiAke3BhdGh9LnNjb3BlcyBtdXN0IGJlIHN0cmluZ3MsIGdvdCAke2tleX0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydFNjb3BlKHZhbHVlLCBgJHtwYXRofS5zY29wZXNbJHtxKGtleSl9XWAsdXJsKTtcbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0VHlwZXM9KGFsbGVnZWRUeXBlcyxwYXRoLHVybCk9PntcbmlmKGFsbGVnZWRUeXBlcz09PXVuZGVmaW5lZCl7XG5yZXR1cm47XG4gfVxuY29uc3QgdHlwZXM9T2JqZWN0KGFsbGVnZWRUeXBlcyk7XG5hc3NlcnQoXG5hbGxlZ2VkVHlwZXM9PT10eXBlcyYmIUFycmF5LmlzQXJyYXkodHlwZXMpLFxuIGAke3BhdGh9LnR5cGVzIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHthbGxlZ2VkVHlwZXN9IGluICR7cSh1cmwpfWApO1xuXG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXModHlwZXMpKXtcbmFzc2VydC50eXBlb2YoXG5rZXksXG4nc3RyaW5nJyxcbiBgYWxsIGtleXMgb2YgJHtwYXRofS50eXBlcyBtdXN0IGJlIHN0cmluZ3MsIGdvdCAke2tleX0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG52YWx1ZSxcbidzdHJpbmcnLFxuIGAke3BhdGh9LnR5cGVzWyR7cShrZXkpfV0gbXVzdCBiZSBhIHN0cmluZywgZ290ICR7dmFsdWV9IGluICR7cSh1cmwpfWApO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cblxuY29uc3QgYXNzZXJ0UG9saWN5PShcbmFsbGVnZWRQb2xpY3ksXG5wYXRoLFxudXJsPSc8dW5rbm93bi1jb21wYXJ0bWVudC1tYXAuanNvbj4nKT0+XG57XG5hc3NlcnRQYWNrYWdlUG9saWN5KGFsbGVnZWRQb2xpY3ksIGAke3BhdGh9LnBvbGljeWAsdXJsKTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRDb21wYXJ0bWVudD0oYWxsZWdlZENvbXBhcnRtZW50LHBhdGgsdXJsKT0+e1xuY29uc3QgY29tcGFydG1lbnQ9T2JqZWN0KGFsbGVnZWRDb21wYXJ0bWVudCk7XG5hc3NlcnQoXG5hbGxlZ2VkQ29tcGFydG1lbnQ9PT1jb21wYXJ0bWVudCYmIUFycmF5LmlzQXJyYXkoY29tcGFydG1lbnQpLFxuIGAke3BhdGh9IG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHthbGxlZ2VkQ29tcGFydG1lbnR9IGluICR7cSh1cmwpfWApO1xuXG5cbmNvbnN0e1xubG9jYXRpb24sXG5uYW1lLFxubGFiZWwsXG5wYXJzZXJzLFxudHlwZXMsXG5zY29wZXMsXG5tb2R1bGVzLFxucG9saWN5LFxuLi4uZXh0cmF9PVxuY29tcGFydG1lbnQ7XG5cbmFzc2VydEVtcHR5T2JqZWN0KFxuZXh0cmEsXG4gYCR7cGF0aH0gbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKFxuT2JqZWN0LmtleXMoZXh0cmEpKVxuIH0gaW4gJHtxKHVybCl9YCk7XG5cblxuYXNzZXJ0LnR5cGVvZihcbmxvY2F0aW9uLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ubG9jYXRpb24gaW4gJHtxKHVybCl9IG11c3QgYmUgc3RyaW5nLCBnb3QgJHtxKGxvY2F0aW9uKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbm5hbWUsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5uYW1lIGluICR7cSh1cmwpfSBtdXN0IGJlIHN0cmluZywgZ290ICR7cShuYW1lKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbmxhYmVsLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ubGFiZWwgaW4gJHtxKHVybCl9IG11c3QgYmUgc3RyaW5nLCBnb3QgJHtxKGxhYmVsKX1gKTtcblxuXG5hc3NlcnRNb2R1bGVzKG1vZHVsZXMscGF0aCx1cmwpO1xuYXNzZXJ0UGFyc2VycyhwYXJzZXJzLHBhdGgsdXJsKTtcbmFzc2VydFNjb3BlcyhzY29wZXMscGF0aCx1cmwpO1xuYXNzZXJ0VHlwZXModHlwZXMscGF0aCx1cmwpO1xuYXNzZXJ0UG9saWN5KHBvbGljeSxwYXRoLHVybCk7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0IGFzc2VydENvbXBhcnRtZW50cz0oYWxsZWdlZENvbXBhcnRtZW50cyx1cmwpPT57XG5jb25zdCBjb21wYXJ0bWVudHM9T2JqZWN0KGFsbGVnZWRDb21wYXJ0bWVudHMpO1xuYXNzZXJ0KFxuYWxsZWdlZENvbXBhcnRtZW50cz09PWNvbXBhcnRtZW50c3x8IUFycmF5LmlzQXJyYXkoY29tcGFydG1lbnRzKSxcbiBgY29tcGFydG1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHtxKGFsbGVnZWRDb21wYXJ0bWVudHMpfSBpbiAke3EoXG51cmwpXG4gfWApO1xuXG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKGNvbXBhcnRtZW50cykpe1xuYXNzZXJ0Q29tcGFydG1lbnQodmFsdWUsIGBjb21wYXJ0bWVudHNbJHtxKGtleSl9XWAsdXJsKTtcbiB9XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0IGFzc2VydEVudHJ5PShhbGxlZ2VkRW50cnksdXJsKT0+e1xuY29uc3QgZW50cnk9T2JqZWN0KGFsbGVnZWRFbnRyeSk7XG5hc3NlcnQoXG5hbGxlZ2VkRW50cnk9PT1lbnRyeSYmIUFycmF5LmlzQXJyYXkoZW50cnkpLFxuIGBcImVudHJ5XCIgbXVzdCBiZSBhbiBvYmplY3QgaW4gY29tcGFydG1lbnQgbWFwLCBnb3QgJHthbGxlZ2VkRW50cnl9IGluICR7cShcbnVybClcbiB9YCk7XG5cbmNvbnN0e2NvbXBhcnRtZW50LG1vZHVsZSwuLi5leHRyYX09ZW50cnk7XG5hc3NlcnRFbXB0eU9iamVjdChcbmV4dHJhLFxuIGBcImVudHJ5XCIgbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzIGluIGNvbXBhcnRtZW50IG1hcCwgZ290ICR7cShcbk9iamVjdC5rZXlzKGV4dHJhKSlcbiB9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxuY29tcGFydG1lbnQsXG4nc3RyaW5nJyxcbiBgZW50cnkuY29tcGFydG1lbnQgbXVzdCBiZSBhIHN0cmluZyBpbiBjb21wYXJ0bWVudCBtYXAsIGdvdCAke2NvbXBhcnRtZW50fSBpbiAke3EoXG51cmwpXG4gfWApO1xuXG5hc3NlcnQudHlwZW9mKFxubW9kdWxlLFxuJ3N0cmluZycsXG4gYGVudHJ5Lm1vZHVsZSBtdXN0IGJlIGEgc3RyaW5nIGluIGNvbXBhcnRtZW50IG1hcCwgZ290ICR7bW9kdWxlfSBpbiAke3EoXG51cmwpXG4gfWApO1xuXG4gfTtcblxuLypcblxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgYXNzZXJ0Q29tcGFydG1lbnRNYXA9KFxuYWxsZWdlZENvbXBhcnRtZW50TWFwLFxudXJsPSc8dW5rbm93bi1jb21wYXJ0bWVudC1tYXAuanNvbj4nKT0+XG57XG5jb25zdCBjb21wYXJ0bWVudE1hcD1PYmplY3QoYWxsZWdlZENvbXBhcnRtZW50TWFwKTtcbmFzc2VydChcbmFsbGVnZWRDb21wYXJ0bWVudE1hcD09PWNvbXBhcnRtZW50TWFwJiYhQXJyYXkuaXNBcnJheShjb21wYXJ0bWVudE1hcCksXG4gYENvbXBhcnRtZW50IG1hcCBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7YWxsZWdlZENvbXBhcnRtZW50TWFwfSBpbiAke3EoXG51cmwpXG4gfWApO1xuXG5jb25zdHtcbi8vXG4vL1xudGFnczpjb25kaXRpb25zLFxuZW50cnksXG5jb21wYXJ0bWVudHMsXG4uLi5leHRyYX09XG5PYmplY3QoY29tcGFydG1lbnRNYXApO1xuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgQ29tcGFydG1lbnQgbWFwIG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcywgZ290ICR7cShcbk9iamVjdC5rZXlzKGV4dHJhKSlcbiB9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnRDb25kaXRpb25zKGNvbmRpdGlvbnMsdXJsKTtcbmFzc2VydEVudHJ5KGVudHJ5LHVybCk7XG5hc3NlcnRDb21wYXJ0bWVudHMoY29tcGFydG1lbnRzLHVybCk7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29tcGFydG1lbnRNYXAoYXNzZXJ0Q29tcGFydG1lbnRNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic3RyaW5nQ29tcGFyZSI6WyJzdHJpbmdDb21wYXJlIl0sInBhdGhDb21wYXJlIjpbInBhdGhDb21wYXJlIl0sImFzc2VydENvbXBhcnRtZW50TWFwIjpbImFzc2VydENvbXBhcnRtZW50TWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABVv/m7+AgAA/gIAADAAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9leHRlbnNpb24uanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbInBhcnNlRXh0ZW5zaW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXJzZUV4dGVuc2lvbj0obG9jYXRpb24pPT57XG5jb25zdCBsYXN0U2xhc2g9bG9jYXRpb24ubGFzdEluZGV4T2YoJy8nKTtcbmlmKGxhc3RTbGFzaDwwKXtcbnJldHVybicnO1xuIH1cbmNvbnN0IGJhc2U9bG9jYXRpb24uc2xpY2UobGFzdFNsYXNoKzEpO1xuY29uc3QgbGFzdERvdD1iYXNlLmxhc3RJbmRleE9mKCcuJyk7XG5pZihsYXN0RG90PDApe1xucmV0dXJuJyc7XG4gfVxucmV0dXJuIGJhc2Uuc2xpY2UobGFzdERvdCsxKTtcbiB9OyRozY9fb25jZS5wYXJzZUV4dGVuc2lvbihwYXJzZUV4dGVuc2lvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwYXJzZUV4dGVuc2lvbiI6WyJwYXJzZUV4dGVuc2lvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADGTq0CXyUAAF8lAAA6AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvaW1wb3J0LWFyY2hpdmUtbGl0ZS5qc3siaW1wb3J0cyI6WyJAZW5kby96aXAiLCIuL2xpbmsuanMiLCIuL2pzb24uanMiLCIuL3Bvd2Vycy5qcyIsIi4vbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzIiwiLi9jb21wYXJ0bWVudC1tYXAuanMiLCIuL2ltcG9ydC1ob29rLmpzIiwiLi9wb2xpY3kuanMiXSwiZXhwb3J0cyI6WyJpbXBvcnRBcmNoaXZlIiwibG9hZEFyY2hpdmUiLCJwYXJzZUFyY2hpdmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWmlwUmVhZGVyLGxpbmsscGFyc2VMb2NhdGVkSnNvbix1bnBhY2tSZWFkUG93ZXJzLGpvaW4sYXNzZXJ0Q29tcGFydG1lbnRNYXAsZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcixhdHRlbnVhdGVNb2R1bGVIb29rLGVuZm9yY2VNb2R1bGVQb2xpY3k7JGjNj19pbXBvcnRzKFtbXCJAZW5kby96aXBcIiwgW1tcIlppcFJlYWRlclwiLCBbJGjNj19hID0+IChaaXBSZWFkZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2xpbmsuanNcIiwgW1tcImxpbmtcIiwgWyRozY9fYSA9PiAobGluayA9ICRozY9fYSldXV1dLFtcIi4vanNvbi5qc1wiLCBbW1wicGFyc2VMb2NhdGVkSnNvblwiLCBbJGjNj19hID0+IChwYXJzZUxvY2F0ZWRKc29uID0gJGjNj19hKV1dXV0sW1wiLi9wb3dlcnMuanNcIiwgW1tcInVucGFja1JlYWRQb3dlcnNcIiwgWyRozY9fYSA9PiAodW5wYWNrUmVhZFBvd2VycyA9ICRozY9fYSldXV1dLFtcIi4vbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzXCIsIFtbXCJqb2luXCIsIFskaM2PX2EgPT4gKGpvaW4gPSAkaM2PX2EpXV1dXSxbXCIuL2NvbXBhcnRtZW50LW1hcC5qc1wiLCBbW1wiYXNzZXJ0Q29tcGFydG1lbnRNYXBcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q29tcGFydG1lbnRNYXAgPSAkaM2PX2EpXV1dXSxbXCIuL2ltcG9ydC1ob29rLmpzXCIsIFtbXCJleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyXCIsIFskaM2PX2EgPT4gKGV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3BvbGljeS5qc1wiLCBbW1wiYXR0ZW51YXRlTW9kdWxlSG9va1wiLCBbJGjNj19hID0+IChhdHRlbnVhdGVNb2R1bGVIb29rID0gJGjNj19hKV1dLFtcImVuZm9yY2VNb2R1bGVQb2xpY3lcIiwgWyRozY9fYSA9PiAoZW5mb3JjZU1vZHVsZVBvbGljeSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCBEZWZhdWx0Q29tcGFydG1lbnQ9Q29tcGFydG1lbnQ7XG5cbmNvbnN0e0ZhaWwscXVvdGU6cX09YXNzZXJ0O1xuXG5jb25zdCB0ZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoKTtcblxuY29uc3R7YXNzaWduLGNyZWF0ZSxmcmVlemV9PU9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IHBvc3Rwb25lRXJyb3JUb0V4ZWN1dGU9KGVycm9yTWVzc2FnZSk9Pntcbi8vXG4vL1xuLy9cbi8vXG5cbmNvbnN0IHJlY29yZD1mcmVlemUoe1xuaW1wb3J0czpbXSxcbmV4cG9ydHM6W10sXG5leGVjdXRlOigpPT57XG50aHJvdyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuIH19KTtcblxuXG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VBcmNoaXZlSW1wb3J0SG9va01ha2VyPShcbmdldCxcbmNvbXBhcnRtZW50cyxcbmFyY2hpdmVMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlLFxuY29tcHV0ZVNoYTUxMj11bmRlZmluZWQsXG5jb21wdXRlU291cmNlTG9jYXRpb249dW5kZWZpbmVkLFxuZXhpdE1vZHVsZUltcG9ydEhvb2s9dW5kZWZpbmVkLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uPXVuZGVmaW5lZCk9Plxue1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFrZUltcG9ydEhvb2s9KHtcbnBhY2thZ2VMb2NhdGlvbixcbnBhY2thZ2VOYW1lLFxuYXR0ZW51YXRvcnNcbi8vXG4vL1xufSk9Pntcbi8vXG5jb25zdCBjb21wYXJ0bWVudERlc2NyaXB0b3I9Y29tcGFydG1lbnRzW3BhY2thZ2VMb2NhdGlvbl07XG5jb25zdHttb2R1bGVzfT1jb21wYXJ0bWVudERlc2NyaXB0b3I7XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbXBvcnRIb29rPWFzeW5jKG1vZHVsZVNwZWNpZmllcik9PntcbmF3YWl0IG51bGw7XG4vL1xuY29uc3QgbW9kdWxlPW1vZHVsZXNbbW9kdWxlU3BlY2lmaWVyXTtcbmlmKG1vZHVsZT09PXVuZGVmaW5lZCl7XG5pZihleGl0TW9kdWxlSW1wb3J0SG9vayl7XG4vL1xuLy9cbi8vXG5lbmZvcmNlTW9kdWxlUG9saWN5KG1vZHVsZVNwZWNpZmllcixjb21wYXJ0bWVudERlc2NyaXB0b3Ise1xuZXhpdDp0cnVlLFxuZXJyb3JIaW50OiBgQmxvY2tlZCBpbiBsb2FkaW5nLiAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSB3YXMgbm90IGluIHRoZSBhcmNoaXZlIGFuZCBhbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGxvYWQgaXQgYXMgYSBidWlsdGluYH0pO1xuXG5jb25zdCByZWNvcmQ9YXdhaXQgZXhpdE1vZHVsZUltcG9ydEhvb2sobW9kdWxlU3BlY2lmaWVyKTtcbmlmKHJlY29yZCl7XG4vL1xuLy9cbi8vXG5yZXR1cm57XG5yZWNvcmQ6YXdhaXQgYXR0ZW51YXRlTW9kdWxlSG9vayhcbm1vZHVsZVNwZWNpZmllcixcbnJlY29yZCxcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5wb2xpY3ksXG5hdHRlbnVhdG9ycyksXG5cbnNwZWNpZmllcjptb2R1bGVTcGVjaWZpZXJ9O1xuXG4gfWVsc2V7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gcG9zdHBvbmVFcnJvclRvRXhlY3V0ZShcbiBgQ2Fubm90IGZpbmQgZXh0ZXJuYWwgbW9kdWxlICR7cShtb2R1bGVTcGVjaWZpZXIpfSBpbiBwYWNrYWdlICR7cShcbnBhY2thZ2VMb2NhdGlvbilcbiB9IGluIGFyY2hpdmUgJHtxKGFyY2hpdmVMb2NhdGlvbil9YCk7XG5cbiB9XG4gfVxudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBmaW5kIG1vZHVsZSAke3EobW9kdWxlU3BlY2lmaWVyKX0gaW4gcGFja2FnZSAke3EoXG5wYWNrYWdlTG9jYXRpb24pXG4gfSBpbiBhcmNoaXZlICR7cShhcmNoaXZlTG9jYXRpb24pfWApO1xuXG4gfVxuaWYobW9kdWxlLmRlZmVycmVkRXJyb3IhPT11bmRlZmluZWQpe1xucmV0dXJuIHBvc3Rwb25lRXJyb3JUb0V4ZWN1dGUobW9kdWxlLmRlZmVycmVkRXJyb3IpO1xuIH1cbmlmKG1vZHVsZS5wYXJzZXI9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBwYXJzZSBtb2R1bGUgJHtxKG1vZHVsZVNwZWNpZmllcil9IGluIHBhY2thZ2UgJHtxKFxucGFja2FnZUxvY2F0aW9uKVxuIH0gaW4gYXJjaGl2ZSAke3EoYXJjaGl2ZUxvY2F0aW9uKX1gKTtcblxuIH1cbmNvbnN0IHBhcnNlcj1wYXJzZXJGb3JMYW5ndWFnZVttb2R1bGUucGFyc2VyXTtcbmlmKHBhcnNlcj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IHBhcnNlICR7cShtb2R1bGUucGFyc2VyKX0gbW9kdWxlICR7cShcbm1vZHVsZVNwZWNpZmllcilcbiB9IGluIHBhY2thZ2UgJHtxKHBhY2thZ2VMb2NhdGlvbil9IGluIGFyY2hpdmUgJHtxKGFyY2hpdmVMb2NhdGlvbil9YCk7XG5cbiB9XG5jb25zdHtwYXJzZX09cGFyc2VyO1xuY29uc3QgbW9kdWxlTG9jYXRpb249IGAke3BhY2thZ2VMb2NhdGlvbn0vJHttb2R1bGUubG9jYXRpb259YDtcbmNvbnN0IG1vZHVsZUJ5dGVzPWdldChtb2R1bGVMb2NhdGlvbik7XG5cbmlmKGNvbXB1dGVTaGE1MTIhPT11bmRlZmluZWQmJm1vZHVsZS5zaGE1MTIhPT11bmRlZmluZWQpe1xuY29uc3Qgc2hhNTEyPWNvbXB1dGVTaGE1MTIobW9kdWxlQnl0ZXMpO1xuaWYoc2hhNTEyIT09bW9kdWxlLnNoYTUxMil7XG50aHJvdyBFcnJvcihcbiBgTW9kdWxlICR7cShtb2R1bGUubG9jYXRpb24pfSBvZiBwYWNrYWdlICR7cShcbnBhY2thZ2VMb2NhdGlvbilcbiB9IGluIGFyY2hpdmUgJHtxKFxuYXJjaGl2ZUxvY2F0aW9uKVxuIH0gZmFpbGVkIGEgU0hBLTUxMiBpbnRlZ3JpdHkgY2hlY2tgKTtcblxuIH1cbiB9XG5cbmxldCBzb3VyY2VMb2NhdGlvbj0gYGZpbGU6Ly8vJHttb2R1bGVMb2NhdGlvbn1gO1xuaWYocGFja2FnZU5hbWUhPT11bmRlZmluZWQpe1xuY29uc3QgYmFzZT1wYWNrYWdlTmFtZS5zcGxpdCgnLycpLnNsaWNlKC0xKS5qb2luKCcvJyk7XG5zb3VyY2VMb2NhdGlvbj0gYC4uLi8ke2pvaW4oYmFzZSxtb2R1bGVTcGVjaWZpZXIpfWA7XG4gfVxuaWYoY29tcHV0ZVNvdXJjZUxvY2F0aW9uIT09dW5kZWZpbmVkKXtcbnNvdXJjZUxvY2F0aW9uPVxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uKHBhY2thZ2VMb2NhdGlvbixtb2R1bGVTcGVjaWZpZXIpfHxcbnNvdXJjZUxvY2F0aW9uO1xuIH1cblxubGV0IHNvdXJjZU1hcFVybDtcbmlmKFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uIT09dW5kZWZpbmVkJiZcbm1vZHVsZS5zaGE1MTIhPT11bmRlZmluZWQpXG57XG5zb3VyY2VNYXBVcmw9Y29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uKHtcbmNvbXBhcnRtZW50OnBhY2thZ2VMb2NhdGlvbixcbm1vZHVsZTptb2R1bGVTcGVjaWZpZXIsXG5sb2NhdGlvbjpzb3VyY2VMb2NhdGlvbixcbnNoYTUxMjptb2R1bGUuc2hhNTEyfSk7XG5cbiB9XG5cbi8vXG5jb25zdHtyZWNvcmR9PWF3YWl0IHBhcnNlKFxubW9kdWxlQnl0ZXMsXG5tb2R1bGVTcGVjaWZpZXIsXG5zb3VyY2VMb2NhdGlvbixcbnBhY2thZ2VMb2NhdGlvbixcbntcbnNvdXJjZU1hcFVybCxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcn0pO1xuXG5cbnJldHVybntyZWNvcmQsc3BlY2lmaWVyOm1vZHVsZVNwZWNpZmllcn07XG4gfTtcbnJldHVybiBpbXBvcnRIb29rO1xuIH07XG5yZXR1cm4gbWFrZUltcG9ydEhvb2s7XG4gfTtcblxuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFyc2VBcmNoaXZlPWFzeW5jKFxuYXJjaGl2ZUJ5dGVzLFxuYXJjaGl2ZUxvY2F0aW9uPSc8dW5rbm93bj4nLFxub3B0aW9ucz17fSk9Plxue1xuYXdhaXQgbnVsbDtcbmNvbnN0e1xuY29tcHV0ZVNoYTUxMj11bmRlZmluZWQsXG5leHBlY3RlZFNoYTUxMj11bmRlZmluZWQsXG5jb21wdXRlU291cmNlTG9jYXRpb249dW5kZWZpbmVkLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uPXVuZGVmaW5lZCxcbkNvbXBhcnRtZW50PURlZmF1bHRDb21wYXJ0bWVudCxcbm1vZHVsZXM9dW5kZWZpbmVkLFxuaW1wb3J0SG9vazpleGl0TW9kdWxlSW1wb3J0SG9vaz11bmRlZmluZWQsXG5wYXJzZXJGb3JMYW5ndWFnZTpwYXJzZXJGb3JMYW5ndWFnZU9wdGlvbj17fSxcbmxhbmd1YWdlRm9yRXh0ZW5zaW9uOmxhbmd1YWdlRm9yRXh0ZW5zaW9uT3B0aW9uPXt9fT1cbm9wdGlvbnM7XG5cbmNvbnN0IHBhcnNlckZvckxhbmd1YWdlPWZyZWV6ZShcbmFzc2lnbihjcmVhdGUobnVsbCkscGFyc2VyRm9yTGFuZ3VhZ2VPcHRpb24pKTtcblxuY29uc3QgbGFuZ3VhZ2VGb3JFeHRlbnNpb249ZnJlZXplKFxuYXNzaWduKGNyZWF0ZShudWxsKSxsYW5ndWFnZUZvckV4dGVuc2lvbk9wdGlvbikpO1xuXG5cbmNvbnN0IGNvbXBhcnRtZW50RXhpdE1vZHVsZUltcG9ydEhvb2s9ZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcih7XG5tb2R1bGVzLFxuZXhpdE1vZHVsZUltcG9ydEhvb2t9KTtcblxuXG5jb25zdCBhcmNoaXZlPW5ldyBaaXBSZWFkZXIoYXJjaGl2ZUJ5dGVzLHtuYW1lOmFyY2hpdmVMb2NhdGlvbn0pO1xuXG4vL1xuY29uc3QgdW5zZWVuPW5ldyBTZXQoYXJjaGl2ZS5maWxlcy5rZXlzKCkpO1xudW5zZWVuLnNpemU+PTJ8fFxuRmFpbCBgQXJjaGl2ZSBmYWlsZWQgc2FuaXR5IGNoZWNrOiBzaG91bGQgY29udGFpbiBhdCBsZWFzdCBhIGNvbXBhcnRtZW50IG1hcCBmaWxlIGFuZCBvbmUgbW9kdWxlIGZpbGUgaW4gJHtxKFxuYXJjaGl2ZUxvY2F0aW9uKVxuIH1gO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgZ2V0PShwYXRoKT0+e1xudW5zZWVuLmRlbGV0ZShwYXRoKTtcbnJldHVybiBhcmNoaXZlLnJlYWQocGF0aCk7XG4gfTtcblxuY29uc3QgY29tcGFydG1lbnRNYXBCeXRlcz1nZXQoJ2NvbXBhcnRtZW50LW1hcC5qc29uJyk7XG5cbmxldCBzaGE1MTI7XG5pZihjb21wdXRlU2hhNTEyIT09dW5kZWZpbmVkKXtcbnNoYTUxMj1jb21wdXRlU2hhNTEyKGNvbXBhcnRtZW50TWFwQnl0ZXMpO1xuIH1cbmlmKGV4cGVjdGVkU2hhNTEyIT09dW5kZWZpbmVkKXtcbmlmKHNoYTUxMj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IHZlcmlmeSBleHBlY3RlZFNoYTUxMiB3aXRob3V0IGFsc28gcHJvdmlkaW5nIGNvbXB1dGVTaGE1MTIsIGZvciBhcmNoaXZlICR7YXJjaGl2ZUxvY2F0aW9ufWApO1xuXG4gfVxuaWYoc2hhNTEyIT09ZXhwZWN0ZWRTaGE1MTIpe1xudGhyb3cgRXJyb3IoXG4gYEFyY2hpdmUgY29tcGFydG1lbnQgbWFwIGZhaWxlZCBhIFNIQS01MTIgaW50ZWdyaXR5IGNoZWNrLCBleHBlY3RlZCAke2V4cGVjdGVkU2hhNTEyfSwgZ290ICR7c2hhNTEyfSwgZm9yIGFyY2hpdmUgJHthcmNoaXZlTG9jYXRpb259YCk7XG5cbiB9XG4gfVxuY29uc3QgY29tcGFydG1lbnRNYXBUZXh0PXRleHREZWNvZGVyLmRlY29kZShjb21wYXJ0bWVudE1hcEJ5dGVzKTtcbmNvbnN0IGNvbXBhcnRtZW50TWFwPXBhcnNlTG9jYXRlZEpzb24oXG5jb21wYXJ0bWVudE1hcFRleHQsXG4nY29tcGFydG1lbnQtbWFwLmpzb24nKTtcblxuYXNzZXJ0Q29tcGFydG1lbnRNYXAoY29tcGFydG1lbnRNYXAsYXJjaGl2ZUxvY2F0aW9uKTtcblxuY29uc3R7XG5jb21wYXJ0bWVudHMsXG5lbnRyeTp7bW9kdWxlOm1vZHVsZVNwZWNpZmllcn19PVxuY29tcGFydG1lbnRNYXA7XG5cbi8vXG4vL1xuLy9cbmlmKGNvbXB1dGVTaGE1MTIhPT11bmRlZmluZWQpe1xuY29uc3QgbWFrZUltcG9ydEhvb2s9bWFrZUFyY2hpdmVJbXBvcnRIb29rTWFrZXIoXG5nZXQsXG5jb21wYXJ0bWVudHMsXG5hcmNoaXZlTG9jYXRpb24sXG5wYXJzZXJGb3JMYW5ndWFnZSxcbmNvbXB1dGVTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5jb21wYXJ0bWVudEV4aXRNb2R1bGVJbXBvcnRIb29rLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uKTtcblxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0e2NvbXBhcnRtZW50LHBlbmRpbmdKb2JzUHJvbWlzZX09bGluayhjb21wYXJ0bWVudE1hcCx7XG5tYWtlSW1wb3J0SG9vayxcbnBhcnNlckZvckxhbmd1YWdlLFxubGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5tb2R1bGVzOk9iamVjdC5mcm9tRW50cmllcyhcbk9iamVjdC5rZXlzKG1vZHVsZXN8fHt9KS5tYXAoKHNwZWNpZmllcik9PntcbnJldHVybltzcGVjaWZpZXIse25hbWVzcGFjZTp7fX1dO1xuIH0pKSxcblxuQ29tcGFydG1lbnR9KTtcblxuXG5hd2FpdCBwZW5kaW5nSm9ic1Byb21pc2U7XG5cbmF3YWl0IGNvbXBhcnRtZW50LmxvYWQobW9kdWxlU3BlY2lmaWVyKTtcbnVuc2Vlbi5zaXplPT09MHx8XG5GYWlsIGBBcmNoaXZlIGNvbnRhaW5zIGV4dHJhbmVvdXMgZmlsZXM6ICR7cShbLi4udW5zZWVuXSl9IGluICR7cShcbmFyY2hpdmVMb2NhdGlvbilcbiB9YDtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZXhlY3V0ZT1hc3luYyhvcHRpb25zKT0+e1xuY29uc3R7XG5nbG9iYWxzLFxubW9kdWxlcyxcbnRyYW5zZm9ybXMsXG5fX3NoaW1UcmFuc2Zvcm1zX18sXG5Db21wYXJ0bWVudCxcbmltcG9ydEhvb2s6ZXhpdE1vZHVsZUltcG9ydEhvb2t9PVxub3B0aW9uc3x8e307XG5cbmNvbnN0IGNvbXBhcnRtZW50RXhpdE1vZHVsZUltcG9ydEhvb2s9ZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcih7XG5tb2R1bGVzLFxuZXhpdE1vZHVsZUltcG9ydEhvb2t9KTtcblxuY29uc3QgbWFrZUltcG9ydEhvb2s9bWFrZUFyY2hpdmVJbXBvcnRIb29rTWFrZXIoXG5nZXQsXG5jb21wYXJ0bWVudHMsXG5hcmNoaXZlTG9jYXRpb24sXG5wYXJzZXJGb3JMYW5ndWFnZSxcbmNvbXB1dGVTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5jb21wYXJ0bWVudEV4aXRNb2R1bGVJbXBvcnRIb29rLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uKTtcblxuY29uc3R7Y29tcGFydG1lbnQscGVuZGluZ0pvYnNQcm9taXNlfT1saW5rKGNvbXBhcnRtZW50TWFwLHtcbm1ha2VJbXBvcnRIb29rLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5sYW5ndWFnZUZvckV4dGVuc2lvbixcbmdsb2JhbHMsXG5tb2R1bGVzLFxudHJhbnNmb3Jtcyxcbl9fc2hpbVRyYW5zZm9ybXNfXyxcbkNvbXBhcnRtZW50fSk7XG5cblxuYXdhaXQgcGVuZGluZ0pvYnNQcm9taXNlO1xuXG4vL1xucmV0dXJuIGNvbXBhcnRtZW50WydpbXBvcnQnXShtb2R1bGVTcGVjaWZpZXIpO1xuIH07XG5cbnJldHVybntpbXBvcnQ6ZXhlY3V0ZSxzaGE1MTJ9O1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5wYXJzZUFyY2hpdmUocGFyc2VBcmNoaXZlKTtcbmNvbnN0ICAgICAgICBsb2FkQXJjaGl2ZT1hc3luYyhcbnJlYWRQb3dlcnMsXG5hcmNoaXZlTG9jYXRpb24sXG5vcHRpb25zPXt9KT0+XG57XG5jb25zdHtyZWFkLGNvbXB1dGVTaGE1MTJ9PXVucGFja1JlYWRQb3dlcnMocmVhZFBvd2Vycyk7XG5jb25zdHtcbmV4cGVjdGVkU2hhNTEyLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uLFxubW9kdWxlcyxcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlLFxubGFuZ3VhZ2VGb3JFeHRlbnNpb259PVxub3B0aW9ucztcbmNvbnN0IGFyY2hpdmVCeXRlcz1hd2FpdCByZWFkKGFyY2hpdmVMb2NhdGlvbik7XG5yZXR1cm4gcGFyc2VBcmNoaXZlKGFyY2hpdmVCeXRlcyxhcmNoaXZlTG9jYXRpb24se1xuY29tcHV0ZVNoYTUxMixcbmV4cGVjdGVkU2hhNTEyLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uLFxubW9kdWxlcyxcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlLFxubGFuZ3VhZ2VGb3JFeHRlbnNpb259KTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5sb2FkQXJjaGl2ZShsb2FkQXJjaGl2ZSk7XG5jb25zdCAgICAgICAgaW1wb3J0QXJjaGl2ZT1hc3luYyhyZWFkUG93ZXJzLGFyY2hpdmVMb2NhdGlvbixvcHRpb25zKT0+e1xuY29uc3QgYXJjaGl2ZT1hd2FpdCBsb2FkQXJjaGl2ZShyZWFkUG93ZXJzLGFyY2hpdmVMb2NhdGlvbixvcHRpb25zKTtcbnJldHVybiBhcmNoaXZlLmltcG9ydChvcHRpb25zKTtcbiB9OyRozY9fb25jZS5pbXBvcnRBcmNoaXZlKGltcG9ydEFyY2hpdmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicGFyc2VBcmNoaXZlIjpbInBhcnNlQXJjaGl2ZSJdLCJsb2FkQXJjaGl2ZSI6WyJsb2FkQXJjaGl2ZSJdLCJpbXBvcnRBcmNoaXZlIjpbImltcG9ydEFyY2hpdmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+Y+EfQMFAAADBQAAPQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanN7ImltcG9ydHMiOlsiLi9wYXJzZS1wcmUtY2pzLmpzIiwiLi9wYXJzZS1qc29uLmpzIiwiLi9wYXJzZS10ZXh0LmpzIiwiLi9wYXJzZS1ieXRlcy5qcyIsIi4vcGFyc2UtcHJlLW1qcy5qcyJdLCJleHBvcnRzIjpbImRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXJzZXJQcmVDanMscGFyc2VySnNvbixwYXJzZXJUZXh0LHBhcnNlckJ5dGVzLHBhcnNlclByZU1qczskaM2PX2ltcG9ydHMoW1tcIi4vcGFyc2UtcHJlLWNqcy5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChwYXJzZXJQcmVDanMgPSAkaM2PX2EpXV1dXSxbXCIuL3BhcnNlLWpzb24uanNcIiwgW1tcImRlZmF1bHRcIiwgWyRozY9fYSA9PiAocGFyc2VySnNvbiA9ICRozY9fYSldXV1dLFtcIi4vcGFyc2UtdGV4dC5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChwYXJzZXJUZXh0ID0gJGjNj19hKV1dXV0sW1wiLi9wYXJzZS1ieXRlcy5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChwYXJzZXJCeXRlcyA9ICRozY9fYSldXV1dLFtcIi4vcGFyc2UtcHJlLW1qcy5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChwYXJzZXJQcmVNanMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZT1PYmplY3QuZnJlZXplKFxuLyogICAgICAgICAgICAgICAgKi97XG4ncHJlLWNqcy1qc29uJzpwYXJzZXJQcmVDanMsXG4ncHJlLW1qcy1qc29uJzpwYXJzZXJQcmVNanMsXG5qc29uOnBhcnNlckpzb24sXG50ZXh0OnBhcnNlclRleHQsXG5ieXRlczpwYXJzZXJCeXRlc30pOyRozY9fb25jZS5kZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UoZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZSI6WyJkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuLMxViIKAAAiCgAANQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL2ltcG9ydC1hcmNoaXZlLmpzeyJpbXBvcnRzIjpbIi4vaW1wb3J0LWFyY2hpdmUtcGFyc2Vycy5qcyIsIi4vaW1wb3J0LWFyY2hpdmUtbGl0ZS5qcyJdLCJleHBvcnRzIjpbImltcG9ydEFyY2hpdmUiLCJsb2FkQXJjaGl2ZSIsInBhcnNlQXJjaGl2ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UscGFyc2VBcmNoaXZlTGl0ZSxsb2FkQXJjaGl2ZUxpdGUsaW1wb3J0QXJjaGl2ZUxpdGU7JGjNj19pbXBvcnRzKFtbXCIuL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanNcIiwgW1tcImRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZVwiLCBbJGjNj19hID0+IChkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UgPSAkaM2PX2EpXV1dXSxbXCIuL2ltcG9ydC1hcmNoaXZlLWxpdGUuanNcIiwgW1tcInBhcnNlQXJjaGl2ZVwiLCBbJGjNj19hID0+IChwYXJzZUFyY2hpdmVMaXRlID0gJGjNj19hKV1dLFtcImxvYWRBcmNoaXZlXCIsIFskaM2PX2EgPT4gKGxvYWRBcmNoaXZlTGl0ZSA9ICRozY9fYSldXSxbXCJpbXBvcnRBcmNoaXZlXCIsIFskaM2PX2EgPT4gKGltcG9ydEFyY2hpdmVMaXRlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHthc3NpZ24sY3JlYXRlLGZyZWV6ZX09T2JqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzaWduUGFyc2VyRm9yTGFuZ3VhZ2U9KG9wdGlvbnM9e30pPT57XG5jb25zdHtwYXJzZXJGb3JMYW5ndWFnZTpwYXJzZXJGb3JMYW5ndWFnZU9wdGlvbiwuLi5yZXN0fT1vcHRpb25zO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBhcnNlckZvckxhbmd1YWdlPWZyZWV6ZShcbmFzc2lnbihjcmVhdGUobnVsbCksZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlLHBhcnNlckZvckxhbmd1YWdlT3B0aW9uKSk7XG5cbnJldHVybnsuLi5yZXN0LHBhcnNlckZvckxhbmd1YWdlfTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXJzZUFyY2hpdmU9YXN5bmMoXG5hcmNoaXZlQnl0ZXMsXG5hcmNoaXZlTG9jYXRpb249Jzx1bmtub3duPicsXG5vcHRpb25zPXt9KT0+XG5cbnBhcnNlQXJjaGl2ZUxpdGUoXG5hcmNoaXZlQnl0ZXMsXG5hcmNoaXZlTG9jYXRpb24sXG5hc3NpZ25QYXJzZXJGb3JMYW5ndWFnZShvcHRpb25zKSk7XG5cblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLnBhcnNlQXJjaGl2ZShwYXJzZUFyY2hpdmUpO1xuY29uc3QgICAgICAgIGxvYWRBcmNoaXZlPWFzeW5jKHJlYWRQb3dlcnMsYXJjaGl2ZUxvY2F0aW9uLG9wdGlvbnMpPT5cbmxvYWRBcmNoaXZlTGl0ZShcbnJlYWRQb3dlcnMsXG5hcmNoaXZlTG9jYXRpb24sXG5hc3NpZ25QYXJzZXJGb3JMYW5ndWFnZShvcHRpb25zKSk7XG5cblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLmxvYWRBcmNoaXZlKGxvYWRBcmNoaXZlKTtcbmNvbnN0ICAgICAgICBpbXBvcnRBcmNoaXZlPWFzeW5jKHJlYWRQb3dlcnMsYXJjaGl2ZUxvY2F0aW9uLG9wdGlvbnMpPT5cbmltcG9ydEFyY2hpdmVMaXRlKFxucmVhZFBvd2VycyxcbmFyY2hpdmVMb2NhdGlvbixcbmFzc2lnblBhcnNlckZvckxhbmd1YWdlKG9wdGlvbnMpKTskaM2PX29uY2UuaW1wb3J0QXJjaGl2ZShpbXBvcnRBcmNoaXZlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InBhcnNlQXJjaGl2ZSI6WyJwYXJzZUFyY2hpdmUiXSwibG9hZEFyY2hpdmUiOlsibG9hZEFyY2hpdmUiXSwiaW1wb3J0QXJjaGl2ZSI6WyJpbXBvcnRBcmNoaXZlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMxfiCZIOAAASDgAADIAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9pbXBvcnQtaG9vay5qc3siaW1wb3J0cyI6WyJAZW5kby90cmFtcG9saW5lIiwiLi9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanMiLCIuL3BvbGljeS5qcyIsIi4vcG93ZXJzLmpzIl0sImV4cG9ydHMiOlsiZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlciIsIm1ha2VJbXBvcnRIb29rTWFrZXIiLCJtYWtlSW1wb3J0Tm93SG9va01ha2VyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzeW5jVHJhbXBvbGluZSxzeW5jVHJhbXBvbGluZSxyZXNvbHZlLGF0dGVudWF0ZU1vZHVsZUhvb2ssQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQsZW5mb3JjZU1vZHVsZVBvbGljeSx1bnBhY2tSZWFkUG93ZXJzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vdHJhbXBvbGluZVwiLCBbW1wiYXN5bmNUcmFtcG9saW5lXCIsIFskaM2PX2EgPT4gKGFzeW5jVHJhbXBvbGluZSA9ICRozY9fYSldXSxbXCJzeW5jVHJhbXBvbGluZVwiLCBbJGjNj19hID0+IChzeW5jVHJhbXBvbGluZSA9ICRozY9fYSldXV1dLFtcIi4vbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzXCIsIFtbXCJyZXNvbHZlXCIsIFskaM2PX2EgPT4gKHJlc29sdmUgPSAkaM2PX2EpXV1dXSxbXCIuL3BvbGljeS5qc1wiLCBbW1wiYXR0ZW51YXRlTW9kdWxlSG9va1wiLCBbJGjNj19hID0+IChhdHRlbnVhdGVNb2R1bGVIb29rID0gJGjNj19hKV1dLFtcIkFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UXCIsIFskaM2PX2EgPT4gKEFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UID0gJGjNj19hKV1dLFtcImVuZm9yY2VNb2R1bGVQb2xpY3lcIiwgWyRozY9fYSA9PiAoZW5mb3JjZU1vZHVsZVBvbGljeSA9ICRozY9fYSldXV1dLFtcIi4vcG93ZXJzLmpzXCIsIFtbXCJ1bnBhY2tSZWFkUG93ZXJzXCIsIFskaM2PX2EgPT4gKHVucGFja1JlYWRQb3dlcnMgPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlSW1wb3J0Tm93SG9va01ha2VyLCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlSW1wb3J0Tm93SG9va01ha2VyXCJ9KTskaM2PX29uY2UubWFrZUltcG9ydE5vd0hvb2tNYWtlcihtYWtlSW1wb3J0Tm93SG9va01ha2VyKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBmcmVlemU9T2JqZWN0LmZyZWV6ZTtcblxuY29uc3R7ZW50cmllcyxrZXlzLGFzc2lnbixjcmVhdGV9PU9iamVjdDtcblxuY29uc3R7aGFzT3duUHJvcGVydHl9PU9iamVjdC5wcm90b3R5cGU7XG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzPShoYXlzdGFjayxuZWVkbGUpPT5hcHBseShoYXNPd25Qcm9wZXJ0eSxoYXlzdGFjayxbbmVlZGxlXSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHJlc29sdmVMb2NhdGlvbj0ocmVsLGFicyk9Pm5ldyBVUkwocmVsLGFicykudG9TdHJpbmcoKTtcblxuLy9cbmZ1bmN0aW9uIGdldEltcG9ydHNGcm9tUmVjb3JkKHJlY29yZCl7XG5yZXR1cm4oaGFzKHJlY29yZCwncmVjb3JkJyk/cmVjb3JkLnJlY29yZC5pbXBvcnRzOnJlY29yZC5pbXBvcnRzKXx8W107XG4gfVxuXG4vL1xuLy9cbmNvbnN0IG5vZGVqc0NvbnZlbnRpb25TZWFyY2hTdWZmaXhlcz1bXG4vL1xuJy5qcycsXG4nLmpzb24nLFxuJy5ub2RlJyxcbi8vXG4nL2luZGV4LmpzJyxcbicvaW5kZXguanNvbicsXG4nL2luZGV4Lm5vZGUnXTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBmaW5kUmVkaXJlY3Q9KHtcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMsXG5jb21wYXJ0bWVudHMsXG5hYnNvbHV0ZU1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbn0pPT5cbntcbmNvbnN0IG1vZHVsZVNwZWNpZmllckxvY2F0aW9uPW5ldyBVUkwoXG5hYnNvbHV0ZU1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbikuXG5ocmVmO1xuXG4vL1xubGV0IHNvbWVMb2NhdGlvbj1uZXcgVVJMKCcuLycsbW9kdWxlU3BlY2lmaWVyTG9jYXRpb24pLmhyZWY7XG5cbi8vXG4vL1xuXG4vL1xuZm9yKDs7KXtcbmlmKFxuc29tZUxvY2F0aW9uIT09QVRURU5VQVRPUlNfQ09NUEFSVE1FTlQmJlxuc29tZUxvY2F0aW9uIGluIGNvbXBhcnRtZW50cylcbntcbmNvbnN0IGxvY2F0aW9uPXNvbWVMb2NhdGlvbjtcbmNvbnN0IHNvbWVDb21wYXJ0bWVudERlc2NyaXB0b3I9Y29tcGFydG1lbnREZXNjcmlwdG9yc1tsb2NhdGlvbl07XG5pZihjb21wYXJ0bWVudERlc2NyaXB0b3I9PT1zb21lQ29tcGFydG1lbnREZXNjcmlwdG9yKXtcbi8vXG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5cbi8vXG4vL1xuaWYoY29tcGFydG1lbnREZXNjcmlwdG9yLmNvbXBhcnRtZW50cy5oYXMobG9jYXRpb24pKXtcbnJldHVybntcbnNwZWNpZmllcjphYnNvbHV0ZU1vZHVsZVNwZWNpZmllcixcbmNvbXBhcnRtZW50OmNvbXBhcnRtZW50c1tsb2NhdGlvbl19O1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5pZihcbnNvbWVDb21wYXJ0bWVudERlc2NyaXB0b3IuY29tcGFydG1lbnRzLmhhcyhcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5sb2NhdGlvbikpXG5cbntcbmVuZm9yY2VNb2R1bGVQb2xpY3koXG5jb21wYXJ0bWVudERlc2NyaXB0b3IubmFtZSxcbnNvbWVDb21wYXJ0bWVudERlc2NyaXB0b3IsXG57XG5lcnJvckhpbnQ6IGBCbG9ja2VkIGluIGltcG9ydCBob29rLiAke3EoYWJzb2x1dGVNb2R1bGVTcGVjaWZpZXIpfSBpcyBwYXJ0IG9mIHRoZSBjb21wYXJ0bWVudCBtYXAgYW5kIHJlc29sdmVzIHRvICR7bG9jYXRpb259YH0pO1xuXG5cbnJldHVybntcbnNwZWNpZmllcjphYnNvbHV0ZU1vZHVsZVNwZWNpZmllcixcbmNvbXBhcnRtZW50OmNvbXBhcnRtZW50c1tsb2NhdGlvbl19O1xuXG4gfVxuXG50aHJvdyBuZXcgRXJyb3IoIGBDb3VsZCBub3QgaW1wb3J0IG1vZHVsZTogJHtxKGFic29sdXRlTW9kdWxlU3BlY2lmaWVyKX1gKTtcbiB9ZWxzZXtcbi8vXG5jb25zdCBwYXJlbnRMb2NhdGlvbj1uZXcgVVJMKCcuLi8nLHNvbWVMb2NhdGlvbikuaHJlZjtcblxuLy9cbmlmKHBhcmVudExvY2F0aW9uPT09c29tZUxvY2F0aW9uKXtcbnRocm93IG5ldyBFcnJvcihcbiBgQ291bGQgbm90IGltcG9ydCB1bmtub3duIG1vZHVsZTogJHtxKGFic29sdXRlTW9kdWxlU3BlY2lmaWVyKX1gKTtcblxuIH1cblxuc29tZUxvY2F0aW9uPXBhcmVudExvY2F0aW9uO1xuIH1cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcj0oe1xubW9kdWxlcz11bmRlZmluZWQsXG5leGl0TW9kdWxlSW1wb3J0SG9vaz11bmRlZmluZWR9KT0+XG57XG5pZighbW9kdWxlcyYmIWV4aXRNb2R1bGVJbXBvcnRIb29rKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxucmV0dXJuIGFzeW5jKHNwZWNpZmllcik9PntcbmlmKG1vZHVsZXMmJmhhcyhtb2R1bGVzLHNwZWNpZmllcikpe1xuY29uc3QgbnM9bW9kdWxlc1tzcGVjaWZpZXJdO1xucmV0dXJuIGZyZWV6ZSh7XG5pbXBvcnRzOltdLFxuZXhwb3J0czpucz9rZXlzKG5zKTpbXSxcbmV4ZWN1dGU6KG1vZHVsZUV4cG9ydHMpPT57XG5tb2R1bGVFeHBvcnRzLmRlZmF1bHQ9bnM7XG5hc3NpZ24obW9kdWxlRXhwb3J0cyxucyk7XG4gfX0pO1xuXG4gfVxuaWYoZXhpdE1vZHVsZUltcG9ydEhvb2spe1xucmV0dXJuIGV4aXRNb2R1bGVJbXBvcnRIb29rKHNwZWNpZmllcik7XG4gfVxucmV0dXJuIHVuZGVmaW5lZDtcbiB9O1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIoZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcik7XG5jb25zdCBub21pbmF0ZUNhbmRpZGF0ZXM9KG1vZHVsZVNwZWNpZmllcixzZWFyY2hTdWZmaXhlcyk9Pntcbi8vXG4vL1xuY29uc3QgY2FuZGlkYXRlcz1bbW9kdWxlU3BlY2lmaWVyXTtcbmZvcihjb25zdCBjYW5kaWRhdGVTdWZmaXggb2Ygc2VhcmNoU3VmZml4ZXMpe1xuY2FuZGlkYXRlcy5wdXNoKCBgJHttb2R1bGVTcGVjaWZpZXJ9JHtjYW5kaWRhdGVTdWZmaXh9YCk7XG4gfVxucmV0dXJuIGNhbmRpZGF0ZXM7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uKmNob29zZU1vZHVsZURlc2NyaXB0b3IoXG57XG5jYW5kaWRhdGVzLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLFxuY29tcGFydG1lbnREZXNjcmlwdG9ycyxcbmNvbXBhcnRtZW50cyxcbmNvbXB1dGVTaGE1MTIsXG5tb2R1bGVEZXNjcmlwdG9ycyxcbm1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbixcbnBhY2thZ2VTb3VyY2VzLFxucmVhZFBvd2VycyxcbnNvdXJjZU1hcEhvb2ssXG5zdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnR9LFxuXG57bWF5YmVSZWFkLHBhcnNlLHNob3VsZERlZmVyRXJyb3I9KCk9PmZhbHNlfSlcbntcbmZvcihjb25zdCBjYW5kaWRhdGVTcGVjaWZpZXIgb2YgY2FuZGlkYXRlcyl7XG5jb25zdCBjYW5kaWRhdGVNb2R1bGVEZXNjcmlwdG9yPW1vZHVsZURlc2NyaXB0b3JzW2NhbmRpZGF0ZVNwZWNpZmllcl07XG5pZihjYW5kaWRhdGVNb2R1bGVEZXNjcmlwdG9yIT09dW5kZWZpbmVkKXtcbmNvbnN0e2NvbXBhcnRtZW50OmNhbmRpZGF0ZUNvbXBhcnRtZW50TmFtZT1wYWNrYWdlTG9jYXRpb259PVxuY2FuZGlkYXRlTW9kdWxlRGVzY3JpcHRvcjtcbmNvbnN0IGNhbmRpZGF0ZUNvbXBhcnRtZW50PWNvbXBhcnRtZW50c1tjYW5kaWRhdGVDb21wYXJ0bWVudE5hbWVdO1xuaWYoY2FuZGlkYXRlQ29tcGFydG1lbnQ9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYGNvbXBhcnRtZW50IG1pc3NpbmcgZm9yIGNhbmRpZGF0ZSAke2NhbmRpZGF0ZVNwZWNpZmllcn0gaW4gJHtjYW5kaWRhdGVDb21wYXJ0bWVudE5hbWV9YCk7XG5cbiB9XG4vL1xuY29uc3QgY2FuZGlkYXRlQ29tcGFydG1lbnREZXNjcmlwdG9yPVxuY29tcGFydG1lbnREZXNjcmlwdG9yc1tjYW5kaWRhdGVDb21wYXJ0bWVudE5hbWVdO1xuaWYoY2FuZGlkYXRlQ29tcGFydG1lbnREZXNjcmlwdG9yPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBjb21wYXJ0bWVudERlc2NyaXB0b3IgbWlzc2luZyBmb3IgY2FuZGlkYXRlICR7Y2FuZGlkYXRlU3BlY2lmaWVyfSBpbiAke2NhbmRpZGF0ZUNvbXBhcnRtZW50TmFtZX1gKTtcblxuIH1cbmNhbmRpZGF0ZUNvbXBhcnRtZW50RGVzY3JpcHRvci5tb2R1bGVzW21vZHVsZVNwZWNpZmllcl09XG5jYW5kaWRhdGVNb2R1bGVEZXNjcmlwdG9yO1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWNvcmQ9e1xuc3BlY2lmaWVyOmNhbmRpZGF0ZVNwZWNpZmllcixcbmNvbXBhcnRtZW50OmNhbmRpZGF0ZUNvbXBhcnRtZW50fTtcblxucmV0dXJuIHJlY29yZDtcbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBtb2R1bGVMb2NhdGlvbj1yZXNvbHZlTG9jYXRpb24oY2FuZGlkYXRlU3BlY2lmaWVyLHBhY2thZ2VMb2NhdGlvbik7XG5cbi8vXG4vL1xuY29uc3QgbW9kdWxlQnl0ZXM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnlpZWxkIG1heWJlUmVhZChtb2R1bGVMb2NhdGlvbik7XG5cblxuaWYobW9kdWxlQnl0ZXMhPT11bmRlZmluZWQpe1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgc291cmNlTWFwO1xuLy9cbmNvbnN0IGVudmVsb3BlPS8qICAgICAgICAgICAgICAgICAgICAgICovXG55aWVsZCBwYXJzZShcbm1vZHVsZUJ5dGVzLFxuY2FuZGlkYXRlU3BlY2lmaWVyLFxubW9kdWxlTG9jYXRpb24sXG5wYWNrYWdlTG9jYXRpb24sXG57XG5yZWFkUG93ZXJzLFxuc291cmNlTWFwSG9vazpcbnNvdXJjZU1hcEhvb2smJihcbihuZXh0U291cmNlTWFwT2JqZWN0KT0+e1xuc291cmNlTWFwPUpTT04uc3RyaW5naWZ5KG5leHRTb3VyY2VNYXBPYmplY3QpO1xuIH0pLFxuY29tcGFydG1lbnREZXNjcmlwdG9yfSk7XG5cblxuXG5jb25zdHtcbnBhcnNlcixcbmJ5dGVzOnRyYW5zZm9ybWVkQnl0ZXMsXG5yZWNvcmQ6Y29uY3JldGVSZWNvcmR9PVxuZW52ZWxvcGU7XG5cbi8vXG4vL1xuaWYoY2FuZGlkYXRlU3BlY2lmaWVyIT09bW9kdWxlU3BlY2lmaWVyKXtcbm1vZHVsZURlc2NyaXB0b3JzW21vZHVsZVNwZWNpZmllcl09e1xubW9kdWxlOmNhbmRpZGF0ZVNwZWNpZmllcixcbmNvbXBhcnRtZW50OnBhY2thZ2VMb2NhdGlvbn07XG5cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWNvcmQ9e1xucmVjb3JkOmNvbmNyZXRlUmVjb3JkLFxuc3BlY2lmaWVyOmNhbmRpZGF0ZVNwZWNpZmllcixcbmltcG9ydE1ldGE6e3VybDptb2R1bGVMb2NhdGlvbn19O1xuXG5cbmxldCBzaGE1MTI7XG5pZihjb21wdXRlU2hhNTEyIT09dW5kZWZpbmVkKXtcbnNoYTUxMj1jb21wdXRlU2hhNTEyKHRyYW5zZm9ybWVkQnl0ZXMpO1xuXG5pZihzb3VyY2VNYXBIb29rIT09dW5kZWZpbmVkJiZzb3VyY2VNYXAhPT11bmRlZmluZWQpe1xuc291cmNlTWFwSG9vayhzb3VyY2VNYXAse1xuY29tcGFydG1lbnQ6cGFja2FnZUxvY2F0aW9uLFxubW9kdWxlOmNhbmRpZGF0ZVNwZWNpZmllcixcbmxvY2F0aW9uOm1vZHVsZUxvY2F0aW9uLFxuc2hhNTEyfSk7XG5cbiB9XG4gfVxuXG5jb25zdCBwYWNrYWdlUmVsYXRpdmVMb2NhdGlvbj1tb2R1bGVMb2NhdGlvbi5zbGljZShcbnBhY2thZ2VMb2NhdGlvbi5sZW5ndGgpO1xuXG5wYWNrYWdlU291cmNlc1tjYW5kaWRhdGVTcGVjaWZpZXJdPXtcbmxvY2F0aW9uOnBhY2thZ2VSZWxhdGl2ZUxvY2F0aW9uLFxuc291cmNlTG9jYXRpb246bW9kdWxlTG9jYXRpb24sXG5wYXJzZXIsXG5ieXRlczp0cmFuc2Zvcm1lZEJ5dGVzLFxucmVjb3JkOmNvbmNyZXRlUmVjb3JkLFxuc2hhNTEyfTtcblxuaWYoIXNob3VsZERlZmVyRXJyb3IocGFyc2VyKSl7XG5mb3IoY29uc3QgaW1wb3J0U3BlY2lmaWVyIG9mIGdldEltcG9ydHNGcm9tUmVjb3JkKHJlY29yZCkpe1xuc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50KHBhY2thZ2VMb2NhdGlvbikuYWRkKFxucmVzb2x2ZShpbXBvcnRTcGVjaWZpZXIsbW9kdWxlU3BlY2lmaWVyKSk7XG5cbiB9XG4gfVxuXG5yZXR1cm4gcmVjb3JkO1xuIH1cbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUltcG9ydEhvb2tNYWtlcj0oXG5yZWFkUG93ZXJzLFxuYmFzZUxvY2F0aW9uLFxue1xuc291cmNlcz1jcmVhdGUobnVsbCksXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzPWNyZWF0ZShudWxsKSxcbmFyY2hpdmVPbmx5PWZhbHNlLFxuY29tcHV0ZVNoYTUxMj11bmRlZmluZWQsXG5zZWFyY2hTdWZmaXhlcz1ub2RlanNDb252ZW50aW9uU2VhcmNoU3VmZml4ZXMsXG5zb3VyY2VNYXBIb29rPXVuZGVmaW5lZCxcbmVudHJ5Q29tcGFydG1lbnROYW1lLFxuZW50cnlNb2R1bGVTcGVjaWZpZXIsXG5leGl0TW9kdWxlSW1wb3J0SG9vaz11bmRlZmluZWR9KT0+XG5cbntcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0cmljdGx5UmVxdWlyZWQ9bmV3IE1hcChbXG5bZW50cnlDb21wYXJ0bWVudE5hbWUsbmV3IFNldChbZW50cnlNb2R1bGVTcGVjaWZpZXJdKV1dKTtcblxuXG4vKlxuXG4gICAqL1xuY29uc3Qgc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50PShjb21wYXJ0bWVudE5hbWUpPT57XG5sZXQgY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkPXN0cmljdGx5UmVxdWlyZWQuZ2V0KGNvbXBhcnRtZW50TmFtZSk7XG5pZihjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQhPT11bmRlZmluZWQpe1xucmV0dXJuIGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZDtcbiB9XG5jb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ9bmV3IFNldCgpO1xuc3RyaWN0bHlSZXF1aXJlZC5zZXQoY29tcGFydG1lbnROYW1lLGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZCk7XG5yZXR1cm4gY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkO1xuIH07XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ha2VJbXBvcnRIb29rPSh7XG5wYWNrYWdlTG9jYXRpb24sXG5wYWNrYWdlTmFtZTpfcGFja2FnZU5hbWUsXG5hdHRlbnVhdG9ycyxcbnBhcnNlLFxuc2hvdWxkRGVmZXJFcnJvcixcbmNvbXBhcnRtZW50c30pPT5cbntcbi8vXG5wYWNrYWdlTG9jYXRpb249cmVzb2x2ZUxvY2F0aW9uKHBhY2thZ2VMb2NhdGlvbixiYXNlTG9jYXRpb24pO1xuY29uc3QgcGFja2FnZVNvdXJjZXM9c291cmNlc1twYWNrYWdlTG9jYXRpb25dfHxjcmVhdGUobnVsbCk7XG5zb3VyY2VzW3BhY2thZ2VMb2NhdGlvbl09cGFja2FnZVNvdXJjZXM7XG5jb25zdCBjb21wYXJ0bWVudERlc2NyaXB0b3I9Y29tcGFydG1lbnREZXNjcmlwdG9yc1twYWNrYWdlTG9jYXRpb25dfHx7fTtcbmNvbnN0e21vZHVsZXM6bW9kdWxlRGVzY3JpcHRvcnM9Y3JlYXRlKG51bGwpfT1jb21wYXJ0bWVudERlc2NyaXB0b3I7XG5jb21wYXJ0bWVudERlc2NyaXB0b3IubW9kdWxlcz1tb2R1bGVEZXNjcmlwdG9ycztcblxuLypcblxuXG5cbiAgICAgKi9cbmNvbnN0IGRlZmVyRXJyb3I9KHNwZWNpZmllcixlcnJvcik9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuaWYoc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50KHBhY2thZ2VMb2NhdGlvbikuaGFzKHNwZWNpZmllcikpe1xudGhyb3cgZXJyb3I7XG4gfVxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHJlY29yZD1mcmVlemUoe1xuaW1wb3J0czpbXSxcbmV4cG9ydHM6W10sXG5leGVjdXRlOigpPT57XG50aHJvdyBlcnJvcjtcbiB9fSk7XG5cbnBhY2thZ2VTb3VyY2VzW3NwZWNpZmllcl09e1xuZGVmZXJyZWRFcnJvcjplcnJvci5tZXNzYWdlfTtcblxuXG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydEhvb2s9YXN5bmMobW9kdWxlU3BlY2lmaWVyKT0+e1xuY29tcGFydG1lbnREZXNjcmlwdG9yLnJldGFpbmVkPXRydWU7XG5cbi8vXG5hd2FpdCBudWxsO1xuXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuaWYobW9kdWxlU3BlY2lmaWVyIT09Jy4nJiYhbW9kdWxlU3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4vJykpe1xuaWYoZXhpdE1vZHVsZUltcG9ydEhvb2spe1xuY29uc3QgcmVjb3JkPWF3YWl0IGV4aXRNb2R1bGVJbXBvcnRIb29rKG1vZHVsZVNwZWNpZmllcik7XG5pZihyZWNvcmQpe1xuLy9cbi8vXG5lbmZvcmNlTW9kdWxlUG9saWN5KG1vZHVsZVNwZWNpZmllcixjb21wYXJ0bWVudERlc2NyaXB0b3Ise1xuZXhpdDp0cnVlLFxuZXJyb3JIaW50OiBgQmxvY2tlZCBpbiBsb2FkaW5nLiAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSB3YXMgbm90IGluIHRoZSBjb21wYXJ0bWVudCBtYXAgYW5kIGFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gbG9hZCBpdCBhcyBhIGJ1aWx0aW5gfSk7XG5cbmlmKGFyY2hpdmVPbmx5KXtcbi8vXG4vL1xucmV0dXJuIGZyZWV6ZSh7aW1wb3J0czpbXSxleHBvcnRzOltdLGV4ZWN1dGUoKXsgfX0pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IGF0dGVudWF0ZWRSZWNvcmQ9YXdhaXQgYXR0ZW51YXRlTW9kdWxlSG9vayhcbm1vZHVsZVNwZWNpZmllcixcbnJlY29yZCxcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5wb2xpY3ksXG5hdHRlbnVhdG9ycyk7XG5cbnJldHVybiBhdHRlbnVhdGVkUmVjb3JkO1xuIH1cbiB9XG5yZXR1cm4gZGVmZXJFcnJvcihcbm1vZHVsZVNwZWNpZmllcixcbkVycm9yKFxuIGBDYW5ub3QgZmluZCBleHRlcm5hbCBtb2R1bGUgJHtxKFxubW9kdWxlU3BlY2lmaWVyKVxuIH0gaW4gcGFja2FnZSAke3BhY2thZ2VMb2NhdGlvbn1gKSk7XG5cblxuIH1cblxuY29uc3R7bWF5YmVSZWFkfT11bnBhY2tSZWFkUG93ZXJzKHJlYWRQb3dlcnMpO1xuXG5jb25zdCBjYW5kaWRhdGVzPW5vbWluYXRlQ2FuZGlkYXRlcyhtb2R1bGVTcGVjaWZpZXIsc2VhcmNoU3VmZml4ZXMpO1xuXG5jb25zdCByZWNvcmQ9YXdhaXQgYXN5bmNUcmFtcG9saW5lKFxuY2hvb3NlTW9kdWxlRGVzY3JpcHRvcixcbntcbmNhbmRpZGF0ZXMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzLFxuY29tcGFydG1lbnRzLFxuY29tcHV0ZVNoYTUxMixcbm1vZHVsZURlc2NyaXB0b3JzLFxubW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9uLFxucGFja2FnZVNvdXJjZXMsXG5yZWFkUG93ZXJzLFxuc291cmNlTWFwSG9vayxcbnN0cmljdGx5UmVxdWlyZWRGb3JDb21wYXJ0bWVudH0sXG5cbnttYXliZVJlYWQscGFyc2Usc2hvdWxkRGVmZXJFcnJvcn0pO1xuXG5cbmlmKHJlY29yZCl7XG5yZXR1cm4gcmVjb3JkO1xuIH1cblxucmV0dXJuIGRlZmVyRXJyb3IoXG5tb2R1bGVTcGVjaWZpZXIsXG4vL1xuRXJyb3IoXG4gYENhbm5vdCBmaW5kIGZpbGUgZm9yIGludGVybmFsIG1vZHVsZSAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSAod2l0aCBjYW5kaWRhdGVzICR7Y2FuZGlkYXRlcy5cbm1hcCgoeCk9PnEoeCkpLlxuam9pbignLCAnKSB9KSBpbiBwYWNrYWdlICR7cGFja2FnZUxvY2F0aW9ufWApKTtcblxuXG4gfTtcbnJldHVybiBpbXBvcnRIb29rO1xuIH07XG5yZXR1cm4gbWFrZUltcG9ydEhvb2s7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlSW1wb3J0SG9va01ha2VyKG1ha2VJbXBvcnRIb29rTWFrZXIpO1xuZnVuY3Rpb24gICAgICAgIG1ha2VJbXBvcnROb3dIb29rTWFrZXIoXG5yZWFkUG93ZXJzLFxuYmFzZUxvY2F0aW9uLFxue1xuc291cmNlcz1jcmVhdGUobnVsbCksXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzPWNyZWF0ZShudWxsKSxcbmNvbXB1dGVTaGE1MTI9dW5kZWZpbmVkLFxuc2VhcmNoU3VmZml4ZXM9bm9kZWpzQ29udmVudGlvblNlYXJjaFN1ZmZpeGVzLFxuc291cmNlTWFwSG9vaz11bmRlZmluZWQsXG5leGl0TW9kdWxlSW1wb3J0Tm93SG9va30pXG5cbntcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0cmljdGx5UmVxdWlyZWQ9bmV3IE1hcCgpO1xuXG4vKlxuXG4gICAqL1xuY29uc3Qgc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50PShjb21wYXJ0bWVudE5hbWUpPT57XG5sZXQgY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkPXN0cmljdGx5UmVxdWlyZWQuZ2V0KGNvbXBhcnRtZW50TmFtZSk7XG5pZihjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQhPT11bmRlZmluZWQpe1xucmV0dXJuIGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZDtcbiB9XG5jb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ9bmV3IFNldCgpO1xuc3RyaWN0bHlSZXF1aXJlZC5zZXQoY29tcGFydG1lbnROYW1lLGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZCk7XG5yZXR1cm4gY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCBtYWtlSW1wb3J0Tm93SG9vaz0oe1xucGFja2FnZUxvY2F0aW9uLFxucGFja2FnZU5hbWU6X3BhY2thZ2VOYW1lLFxucGFyc2UsXG5jb21wYXJ0bWVudHN9KT0+XG57XG5pZighKCdpc1N5bmNQYXJzZXInaW4gcGFyc2UpKXtcbnJldHVybiBmdW5jdGlvbiBpbXBvc3NpYmxlVHJhbnNmb3JtSW1wb3J0Tm93SG9vaygpe1xudGhyb3cgbmV3IEVycm9yKFxuJ0R5bmFtaWMgcmVxdWlyZXMgYXJlIG9ubHkgcG9zc2libGUgd2l0aCBzeW5jaHJvbm91cyBwYXJzZXJzIGFuZCBubyBhc3luY2hyb25vdXMgbW9kdWxlIHRyYW5zZm9ybXMgaW4gb3B0aW9ucycpO1xuXG4gfTtcbiB9XG5cbmNvbnN0IGNvbXBhcnRtZW50RGVzY3JpcHRvcj1jb21wYXJ0bWVudERlc2NyaXB0b3JzW3BhY2thZ2VMb2NhdGlvbl18fHt9O1xuXG5wYWNrYWdlTG9jYXRpb249cmVzb2x2ZUxvY2F0aW9uKHBhY2thZ2VMb2NhdGlvbixiYXNlTG9jYXRpb24pO1xuY29uc3QgcGFja2FnZVNvdXJjZXM9c291cmNlc1twYWNrYWdlTG9jYXRpb25dfHxjcmVhdGUobnVsbCk7XG5zb3VyY2VzW3BhY2thZ2VMb2NhdGlvbl09cGFja2FnZVNvdXJjZXM7XG5jb25zdHtcbm1vZHVsZXM6XG5tb2R1bGVEZXNjcmlwdG9ycz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY3JlYXRlKG51bGwpfT1cblxuY29tcGFydG1lbnREZXNjcmlwdG9yO1xuY29tcGFydG1lbnREZXNjcmlwdG9yLm1vZHVsZXM9bW9kdWxlRGVzY3JpcHRvcnM7XG5cbmxldHtwb2xpY3l9PWNvbXBhcnRtZW50RGVzY3JpcHRvcjtcbnBvbGljeT1wb2xpY3l8fGNyZWF0ZShudWxsKTtcblxuLy9cbi8vXG4vL1xuaWYoJ3BhY2thZ2VzJ2luIHBvbGljeSYmdHlwZW9mIHBvbGljeS5wYWNrYWdlcz09PSdvYmplY3QnKXtcbmZvcihjb25zdFtwYWNrYWdlTmFtZSxwYWNrYWdlUG9saWN5SXRlbV1vZiBlbnRyaWVzKHBvbGljeS5wYWNrYWdlcykpe1xuaWYoXG4hKHBhY2thZ2VOYW1lIGluIGNvbXBhcnRtZW50RGVzY3JpcHRvci5tb2R1bGVzKSYmXG5wYWNrYWdlTmFtZSBpbiBjb21wYXJ0bWVudERlc2NyaXB0b3Iuc2NvcGVzJiZcbnBhY2thZ2VQb2xpY3lJdGVtKVxue1xuY29tcGFydG1lbnREZXNjcmlwdG9yLm1vZHVsZXNbcGFja2FnZU5hbWVdPVxuY29tcGFydG1lbnREZXNjcmlwdG9yLnNjb3Blc1twYWNrYWdlTmFtZV07XG4gfVxuIH1cbiB9XG5cbmNvbnN0e21heWJlUmVhZE5vdyxpc0Fic29sdXRlfT1yZWFkUG93ZXJzO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbXBvcnROb3dIb29rPShtb2R1bGVTcGVjaWZpZXIpPT57XG5pZihpc0Fic29sdXRlKG1vZHVsZVNwZWNpZmllcikpe1xuY29uc3QgcmVjb3JkPWZpbmRSZWRpcmVjdCh7XG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzLFxuY29tcGFydG1lbnRzLFxuYWJzb2x1dGVNb2R1bGVTcGVjaWZpZXI6bW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9ufSk7XG5cbmlmKHJlY29yZCl7XG5yZXR1cm4gcmVjb3JkO1xuIH1cbiB9XG5cbmNvbnN0IGNhbmRpZGF0ZXM9bm9taW5hdGVDYW5kaWRhdGVzKG1vZHVsZVNwZWNpZmllcixzZWFyY2hTdWZmaXhlcyk7XG5cbmNvbnN0IHJlY29yZD1zeW5jVHJhbXBvbGluZShcbmNob29zZU1vZHVsZURlc2NyaXB0b3IsXG57XG5jYW5kaWRhdGVzLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLFxuY29tcGFydG1lbnREZXNjcmlwdG9ycyxcbmNvbXBhcnRtZW50cyxcbmNvbXB1dGVTaGE1MTIsXG5tb2R1bGVEZXNjcmlwdG9ycyxcbm1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbixcbnBhY2thZ2VTb3VyY2VzLFxucmVhZFBvd2VycyxcbnNvdXJjZU1hcEhvb2ssXG5zdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnR9LFxuXG57XG5tYXliZVJlYWQ6bWF5YmVSZWFkTm93LFxucGFyc2V9KTtcblxuXG5cbmlmKHJlY29yZCl7XG5yZXR1cm4gcmVjb3JkO1xuIH1cblxuaWYoZXhpdE1vZHVsZUltcG9ydE5vd0hvb2spe1xuLy9cbmNvbnN0IGV4aXRSZWNvcmQ9ZXhpdE1vZHVsZUltcG9ydE5vd0hvb2soXG5tb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb24pO1xuXG5cbmlmKCFleGl0UmVjb3JkKXtcbnRocm93IG5ldyBFcnJvciggYENvdWxkIG5vdCBpbXBvcnQgbW9kdWxlOiAke3EobW9kdWxlU3BlY2lmaWVyKX1gKTtcbiB9XG5cbnJldHVybiBleGl0UmVjb3JkO1xuIH1cblxudGhyb3cgbmV3IEVycm9yKFxuIGBDb3VsZCBub3QgaW1wb3J0IG1vZHVsZTogJHtxKFxubW9kdWxlU3BlY2lmaWVyKVxuIH07IHRyeSBwcm92aWRpbmcgYW4gaW1wb3J0Tm93SG9va2ApO1xuXG4gfTtcblxucmV0dXJuIGltcG9ydE5vd0hvb2s7XG4gfTtcbnJldHVybiBtYWtlSW1wb3J0Tm93SG9vaztcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyIjpbImV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIiXSwibWFrZUltcG9ydEhvb2tNYWtlciI6WyJtYWtlSW1wb3J0SG9va01ha2VyIl0sIm1ha2VJbXBvcnROb3dIb29rTWFrZXIiOlsibWFrZUltcG9ydE5vd0hvb2tNYWtlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABjT7Iv+QIAAPkCAAArAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvanNvbi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsicGFyc2VMb2NhdGVkSnNvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXJzZUxvY2F0ZWRKc29uPShzb3VyY2UsbG9jYXRpb24pPT57XG50cnl7XG5yZXR1cm4gSlNPTi5wYXJzZShzb3VyY2UpO1xuIH1jYXRjaChlcnJvcil7XG5pZihlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKXtcbnRocm93IFN5bnRheEVycm9yKCBgQ2Fubm90IHBhcnNlIEpTT04gZnJvbSAke2xvY2F0aW9ufSwgJHtlcnJvcn1gKTtcbiB9XG50aHJvdyBlcnJvcjtcbiB9XG4gfTskaM2PX29uY2UucGFyc2VMb2NhdGVkSnNvbihwYXJzZUxvY2F0ZWRKc29uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InBhcnNlTG9jYXRlZEpzb24iOlsicGFyc2VMb2NhdGVkSnNvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABz7dIxFCAAABQgAAArAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvbGluay5qc3siaW1wb3J0cyI6WyIuL21hcC1wYXJzZXIuanMiLCIuL25vZGUtbW9kdWxlLXNwZWNpZmllci5qcyIsIi4vcG9saWN5LmpzIl0sImV4cG9ydHMiOlsiYXNzZW1ibGUiLCJsaW5rIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VNYXBQYXJzZXJzLHJlc29sdmVGYWxsYmFjayxBVFRFTlVBVE9SU19DT01QQVJUTUVOVCxhdHRlbnVhdGVHbG9iYWxzLGVuZm9yY2VNb2R1bGVQb2xpY3ksbWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlcjskaM2PX2ltcG9ydHMoW1tcIi4vbWFwLXBhcnNlci5qc1wiLCBbW1wibWFrZU1hcFBhcnNlcnNcIiwgWyRozY9fYSA9PiAobWFrZU1hcFBhcnNlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL25vZGUtbW9kdWxlLXNwZWNpZmllci5qc1wiLCBbW1wicmVzb2x2ZVwiLCBbJGjNj19hID0+IChyZXNvbHZlRmFsbGJhY2sgPSAkaM2PX2EpXV1dXSxbXCIuL3BvbGljeS5qc1wiLCBbW1wiQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRcIiwgWyRozY9fYSA9PiAoQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQgPSAkaM2PX2EpXV0sW1wiYXR0ZW51YXRlR2xvYmFsc1wiLCBbJGjNj19hID0+IChhdHRlbnVhdGVHbG9iYWxzID0gJGjNj19hKV1dLFtcImVuZm9yY2VNb2R1bGVQb2xpY3lcIiwgWyRozY9fYSA9PiAoZW5mb3JjZU1vZHVsZVBvbGljeSA9ICRozY9fYSldXSxbXCJtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyXCIsIFskaM2PX2EgPT4gKG1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHthc3NpZ24sY3JlYXRlLGVudHJpZXMsZnJlZXplfT1PYmplY3Q7XG5jb25zdHtoYXNPd25Qcm9wZXJ0eX09T2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7YWxsU2V0dGxlZH09UHJvbWlzZTtcblxuLypcblxuXG4gKi9cbmNvbnN0IHByb21pc2VBbGxTZXR0bGVkPWFsbFNldHRsZWQuYmluZChQcm9taXNlKTtcblxuY29uc3QgZGVmYXVsdENvbXBhcnRtZW50PUNvbXBhcnRtZW50O1xuXG4vL1xuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaGFzPShvYmplY3Qsa2V5KT0+YXBwbHkoaGFzT3duUHJvcGVydHksb2JqZWN0LFtrZXldKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHRyaW1Nb2R1bGVTcGVjaWZpZXJQcmVmaXg9KG1vZHVsZVNwZWNpZmllcixwcmVmaXgpPT57XG5pZihtb2R1bGVTcGVjaWZpZXI9PT1wcmVmaXgpe1xucmV0dXJuJy4nO1xuIH1cbmlmKG1vZHVsZVNwZWNpZmllci5zdGFydHNXaXRoKCBgJHtwcmVmaXh9L2ApKXtcbnJldHVybiBgLi8ke21vZHVsZVNwZWNpZmllci5zbGljZShwcmVmaXgubGVuZ3RoKzEpfWA7XG4gfVxucmV0dXJuIHVuZGVmaW5lZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlTW9kdWxlTWFwSG9vaz0oXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudHMsXG5jb21wYXJ0bWVudE5hbWUsXG5tb2R1bGVEZXNjcmlwdG9ycyxcbnNjb3BlRGVzY3JpcHRvcnMpPT5cbntcbi8qXG5cblxuICAgKi9cbmNvbnN0IG1vZHVsZU1hcEhvb2s9KG1vZHVsZVNwZWNpZmllcik9PntcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5yZXRhaW5lZD10cnVlO1xuXG5jb25zdCBtb2R1bGVEZXNjcmlwdG9yPW1vZHVsZURlc2NyaXB0b3JzW21vZHVsZVNwZWNpZmllcl07XG5pZihtb2R1bGVEZXNjcmlwdG9yIT09dW5kZWZpbmVkKXtcbi8vXG4vL1xuY29uc3R7XG5jb21wYXJ0bWVudDpmb3JlaWduQ29tcGFydG1lbnROYW1lPWNvbXBhcnRtZW50TmFtZSxcbm1vZHVsZTpmb3JlaWduTW9kdWxlU3BlY2lmaWVyLFxuZXhpdH09XG5tb2R1bGVEZXNjcmlwdG9yO1xuaWYoZXhpdCE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gdW5kZWZpbmVkOy8vXG4gfVxuaWYoZm9yZWlnbk1vZHVsZVNwZWNpZmllciE9PXVuZGVmaW5lZCl7XG4vL1xuaWYoIW1vZHVsZVNwZWNpZmllci5zdGFydHNXaXRoKCcuLycpKXtcbi8vXG4vL1xuZW5mb3JjZU1vZHVsZVBvbGljeShtb2R1bGVTcGVjaWZpZXIsY29tcGFydG1lbnREZXNjcmlwdG9yLHtcbmV4aXQ6ZmFsc2UsXG5lcnJvckhpbnQ6XG4nVGhpcyBjaGVjayBzaG91bGQgbm90IGJlIHJlYWNoYWJsZS4gSWYgeW91IHNlZSB0aGlzIGVycm9yLCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nfSk7XG5cbiB9XG5cbmNvbnN0IGZvcmVpZ25Db21wYXJ0bWVudD1jb21wYXJ0bWVudHNbZm9yZWlnbkNvbXBhcnRtZW50TmFtZV07XG5pZihmb3JlaWduQ29tcGFydG1lbnQ9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbXBvcnQgZnJvbSBtaXNzaW5nIGNvbXBhcnRtZW50ICR7cShcbmZvcmVpZ25Db21wYXJ0bWVudE5hbWUpXG4gfX1gKTtcblxuIH1cbnJldHVybntcbmNvbXBhcnRtZW50OmZvcmVpZ25Db21wYXJ0bWVudCxcbm5hbWVzcGFjZTpmb3JlaWduTW9kdWxlU3BlY2lmaWVyfTtcblxuIH1cbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuZm9yKGNvbnN0W3Njb3BlUHJlZml4LHNjb3BlRGVzY3JpcHRvcl1vZiBlbnRyaWVzKHNjb3BlRGVzY3JpcHRvcnMpKXtcbmNvbnN0IGZvcmVpZ25Nb2R1bGVTcGVjaWZpZXI9dHJpbU1vZHVsZVNwZWNpZmllclByZWZpeChcbm1vZHVsZVNwZWNpZmllcixcbnNjb3BlUHJlZml4KTtcblxuXG5pZihmb3JlaWduTW9kdWxlU3BlY2lmaWVyIT09dW5kZWZpbmVkKXtcbmNvbnN0e2NvbXBhcnRtZW50OmZvcmVpZ25Db21wYXJ0bWVudE5hbWV9PXNjb3BlRGVzY3JpcHRvcjtcbmlmKGZvcmVpZ25Db21wYXJ0bWVudE5hbWU9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbXBvcnQgZnJvbSBzY29wZSAke3Njb3BlUHJlZml4fSBkdWUgdG8gbWlzc2luZyBcImNvbXBhcnRtZW50XCIgcHJvcGVydHlgKTtcblxuIH1cbmNvbnN0IGZvcmVpZ25Db21wYXJ0bWVudD1jb21wYXJ0bWVudHNbZm9yZWlnbkNvbXBhcnRtZW50TmFtZV07XG5pZihmb3JlaWduQ29tcGFydG1lbnQ9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbXBvcnQgZnJvbSBtaXNzaW5nIGNvbXBhcnRtZW50ICR7cShcbmZvcmVpZ25Db21wYXJ0bWVudE5hbWUpXG4gfWApO1xuXG4gfVxuXG5lbmZvcmNlTW9kdWxlUG9saWN5KHNjb3BlUHJlZml4LGNvbXBhcnRtZW50RGVzY3JpcHRvcix7XG5leGl0OmZhbHNlLFxuZXJyb3JIaW50OiBgQmxvY2tlZCBpbiBsaW5raW5nLiAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSBpcyBwYXJ0IG9mIHRoZSBjb21wYXJ0bWVudCBtYXAgYW5kIHJlc29sdmVzIHRvICR7cShcbmZvcmVpZ25Db21wYXJ0bWVudE5hbWUpXG4gfS5gfSk7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xubW9kdWxlRGVzY3JpcHRvcnNbbW9kdWxlU3BlY2lmaWVyXT17XG5jb21wYXJ0bWVudDpmb3JlaWduQ29tcGFydG1lbnROYW1lLFxubW9kdWxlOmZvcmVpZ25Nb2R1bGVTcGVjaWZpZXJ9O1xuXG5yZXR1cm57XG5jb21wYXJ0bWVudDpmb3JlaWduQ29tcGFydG1lbnQsXG5uYW1lc3BhY2U6Zm9yZWlnbk1vZHVsZVNwZWNpZmllcn07XG5cbiB9XG4gfVxuXG4vL1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfTtcblxucmV0dXJuIG1vZHVsZU1hcEhvb2s7XG4gfTtcblxuLypcblxuICovXG5jb25zdCBpbXBvc3NpYmxlSW1wb3J0Tm93SG9va01ha2VyPSgpPT57XG5yZXR1cm4gZnVuY3Rpb24gaW1wb3NzaWJsZUltcG9ydE5vd0hvb2soKXtcbnRocm93IG5ldyBFcnJvcignUHJvdmlkZWQgcmVhZCBwb3dlcnMgZG8gbm90IHN1cHBvcnQgZHluYW1pYyByZXF1aXJlcycpO1xuIH07XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbGluaz0oXG57ZW50cnksY29tcGFydG1lbnRzOmNvbXBhcnRtZW50RGVzY3JpcHRvcnN9LFxub3B0aW9ucyk9Plxue1xuY29uc3R7XG5yZXNvbHZlPXJlc29sdmVGYWxsYmFjayxcbm1ha2VJbXBvcnRIb29rLFxubWFrZUltcG9ydE5vd0hvb2s9aW1wb3NzaWJsZUltcG9ydE5vd0hvb2tNYWtlcixcbnBhcnNlckZvckxhbmd1YWdlOnBhcnNlckZvckxhbmd1YWdlT3B0aW9uPXt9LFxubGFuZ3VhZ2VGb3JFeHRlbnNpb246bGFuZ3VhZ2VGb3JFeHRlbnNpb25PcHRpb249e30sXG5nbG9iYWxzPXt9LFxudHJhbnNmb3Jtcz1bXSxcbm1vZHVsZVRyYW5zZm9ybXMsXG5zeW5jTW9kdWxlVHJhbnNmb3Jtcyxcbl9fc2hpbVRyYW5zZm9ybXNfXz1bXSxcbmFyY2hpdmVPbmx5PWZhbHNlLFxuQ29tcGFydG1lbnQ9ZGVmYXVsdENvbXBhcnRtZW50fT1cbm9wdGlvbnM7XG5cbmNvbnN0e2NvbXBhcnRtZW50OmVudHJ5Q29tcGFydG1lbnROYW1lfT1lbnRyeTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb21wYXJ0bWVudHM9Y3JlYXRlKG51bGwpO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXR0ZW51YXRvcnM9bWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlcihcbmNvbXBhcnRtZW50cyxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMpO1xuXG5cbmNvbnN0IHBlbmRpbmdKb2JzPVtdO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdExhbmd1YWdlRm9yRXh0ZW5zaW9uPWZyZWV6ZShcbmFzc2lnbihjcmVhdGUobnVsbCksbGFuZ3VhZ2VGb3JFeHRlbnNpb25PcHRpb24pKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBhcnNlckZvckxhbmd1YWdlPWZyZWV6ZShcbmFzc2lnbihjcmVhdGUobnVsbCkscGFyc2VyRm9yTGFuZ3VhZ2VPcHRpb24pKTtcblxuXG5jb25zdCBtYXBQYXJzZXJzPW1ha2VNYXBQYXJzZXJzKHtcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zfSk7XG5cblxuZm9yKGNvbnN0W2NvbXBhcnRtZW50TmFtZSxjb21wYXJ0bWVudERlc2NyaXB0b3Jdb2YgZW50cmllcyhcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMpKVxue1xuY29uc3R7XG5sb2NhdGlvbixcbm5hbWUsXG5wYXJzZXJzOmxhbmd1YWdlRm9yRXh0ZW5zaW9uT3ZlcnJpZGVzPXt9LFxudHlwZXM6bGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXJPdmVycmlkZXM9e319PVxuY29tcGFydG1lbnREZXNjcmlwdG9yO1xuXG4vL1xuLy9cbmNvbnN0e3Njb3Blczpfc2NvcGVzLG1vZHVsZXM6X21vZHVsZXN9PWNvbXBhcnRtZW50RGVzY3JpcHRvcjtcbmNvbnN0IG1vZHVsZXM9X21vZHVsZXN8fGNyZWF0ZShudWxsKTtcbmNvbnN0IHNjb3Blcz1fc2NvcGVzfHxjcmVhdGUobnVsbCk7XG5cbi8vXG4vL1xuY29tcGFydG1lbnREZXNjcmlwdG9yLm1vZHVsZXM9bW9kdWxlcztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXI9ZnJlZXplKFxuYXNzaWduKGNyZWF0ZShudWxsKSxsYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllck92ZXJyaWRlcykpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbGFuZ3VhZ2VGb3JFeHRlbnNpb249ZnJlZXplKFxuYXNzaWduKFxuY3JlYXRlKG51bGwpLFxuZGVmYXVsdExhbmd1YWdlRm9yRXh0ZW5zaW9uLFxubGFuZ3VhZ2VGb3JFeHRlbnNpb25PdmVycmlkZXMpKTtcblxuXG5cbi8vXG4vL1xuY29uc3QgcGFyc2U9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbm1hcFBhcnNlcnMobGFuZ3VhZ2VGb3JFeHRlbnNpb24sbGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNob3VsZERlZmVyRXJyb3I9KGxhbmd1YWdlKT0+e1xuaWYobGFuZ3VhZ2UmJmhhcyhwYXJzZXJGb3JMYW5ndWFnZSxsYW5ndWFnZSkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3BhcnNlckZvckxhbmd1YWdlW2xhbmd1YWdlXS5cbmhldXJpc3RpY0ltcG9ydHMpO1xuIH1lbHNle1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07XG5cbi8vXG4vL1xuY29uc3QgcmVzb2x2ZUhvb2s9cmVzb2x2ZTtcbmNvbnN0IGltcG9ydEhvb2s9bWFrZUltcG9ydEhvb2soe1xucGFja2FnZUxvY2F0aW9uOmxvY2F0aW9uLFxucGFja2FnZU5hbWU6bmFtZSxcbmF0dGVudWF0b3JzLFxucGFyc2UsXG5zaG91bGREZWZlckVycm9yLFxuY29tcGFydG1lbnRzfSk7XG5cblxuY29uc3QgaW1wb3J0Tm93SG9vaz1tYWtlSW1wb3J0Tm93SG9vayh7XG5wYWNrYWdlTG9jYXRpb246bG9jYXRpb24sXG5wYWNrYWdlTmFtZTpuYW1lLFxucGFyc2UsXG5jb21wYXJ0bWVudHN9KTtcblxuXG5jb25zdCBtb2R1bGVNYXBIb29rPW1ha2VNb2R1bGVNYXBIb29rKFxuY29tcGFydG1lbnREZXNjcmlwdG9yLFxuY29tcGFydG1lbnRzLFxuY29tcGFydG1lbnROYW1lLFxubW9kdWxlcyxcbnNjb3Blcyk7XG5cblxuY29uc3QgY29tcGFydG1lbnQ9bmV3IENvbXBhcnRtZW50KHtcbm5hbWU6bG9jYXRpb24sXG5yZXNvbHZlSG9vayxcbmltcG9ydEhvb2ssXG5pbXBvcnROb3dIb29rLFxubW9kdWxlTWFwSG9vayxcbnRyYW5zZm9ybXMsXG5fX3NoaW1UcmFuc2Zvcm1zX18sXG5fX29wdGlvbnNfXzp0cnVlfSk7XG5cblxuaWYoIWFyY2hpdmVPbmx5KXtcbmF0dGVudWF0ZUdsb2JhbHMoXG5jb21wYXJ0bWVudC5nbG9iYWxUaGlzLFxuZ2xvYmFscyxcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5wb2xpY3ksXG5hdHRlbnVhdG9ycyxcbnBlbmRpbmdKb2JzLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLm5hbWUpO1xuXG4gfVxuXG5jb21wYXJ0bWVudHNbY29tcGFydG1lbnROYW1lXT1jb21wYXJ0bWVudDtcbiB9XG5cbmNvbnN0IGNvbXBhcnRtZW50PWNvbXBhcnRtZW50c1tlbnRyeUNvbXBhcnRtZW50TmFtZV07XG5pZihjb21wYXJ0bWVudD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGFzc2VtYmxlIGNvbXBhcnRtZW50IGdyYXBoIGJlY2F1c2UgdGhlIHJvb3QgY29tcGFydG1lbnQgbmFtZWQgJHtxKFxuZW50cnlDb21wYXJ0bWVudE5hbWUpXG4gfSBpcyBtaXNzaW5nIGZyb20gdGhlIGNvbXBhcnRtZW50IG1hcGApO1xuXG4gfVxuY29uc3QgYXR0ZW51YXRvcnNDb21wYXJ0bWVudD1jb21wYXJ0bWVudHNbQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRdO1xuXG5yZXR1cm57XG5jb21wYXJ0bWVudCxcbmNvbXBhcnRtZW50cyxcbmF0dGVudWF0b3JzQ29tcGFydG1lbnQsXG5wZW5kaW5nSm9ic1Byb21pc2U6cHJvbWlzZUFsbFNldHRsZWQocGVuZGluZ0pvYnMpLnRoZW4oXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovKHJlc3VsdHMpPT57XG5jb25zdCBlcnJvcnM9cmVzdWx0cy5cbmZpbHRlcigocmVzdWx0KT0+cmVzdWx0LnN0YXR1cz09PSdyZWplY3RlZCcpLlxubWFwKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8ocmVzdWx0KT0+XG5yZXN1bHQucmVhc29uKTtcblxuaWYoZXJyb3JzLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBHbG9iYWxzIGF0dGVudWF0aW9uIGVycm9yczogJHtlcnJvcnMuXG5tYXAoKGVycm9yKT0+ZXJyb3IubWVzc2FnZSkuXG5qb2luKCcsICcpIH1gKTtcblxuIH1cbiB9KX07XG5cblxuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UubGluayhsaW5rKTtcbmNvbnN0ICAgICAgICBhc3NlbWJsZT0oY29tcGFydG1lbnRNYXAsb3B0aW9ucyk9PlxubGluayhjb21wYXJ0bWVudE1hcCxvcHRpb25zKS5jb21wYXJ0bWVudDskaM2PX29uY2UuYXNzZW1ibGUoYXNzZW1ibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibGluayI6WyJsaW5rIl0sImFzc2VtYmxlIjpbImFzc2VtYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPyaiyFEEwAARBMAADEAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9tYXAtcGFyc2VyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3RyYW1wb2xpbmUiLCIuL2V4dGVuc2lvbi5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXBQYXJzZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHN5bmNUcmFtcG9saW5lLGFzeW5jVHJhbXBvbGluZSxwYXJzZUV4dGVuc2lvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3RyYW1wb2xpbmVcIiwgW1tcInN5bmNUcmFtcG9saW5lXCIsIFskaM2PX2EgPT4gKHN5bmNUcmFtcG9saW5lID0gJGjNj19hKV1dLFtcImFzeW5jVHJhbXBvbGluZVwiLCBbJGjNj19hID0+IChhc3luY1RyYW1wb2xpbmUgPSAkaM2PX2EpXV1dXSxbXCIuL2V4dGVuc2lvbi5qc1wiLCBbW1wicGFyc2VFeHRlbnNpb25cIiwgWyRozY9fYSA9PiAocGFyc2VFeHRlbnNpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0e2VudHJpZXMsZnJvbUVudHJpZXMsa2V5cyxoYXNPd25Qcm9wZXJ0eSx2YWx1ZXN9PU9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuLy9cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGhhcz0ob2JqZWN0LGtleSk9PmFwcGx5KGhhc093blByb3BlcnR5LG9iamVjdCxba2V5XSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZXh0ZW5zaW9uSW1wbGllc0xhbmd1YWdlPShleHRlbnNpb24pPT5leHRlbnNpb24hPT0nanMnO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUV4dGVuc2lvblBhcnNlcj0oXG5wcmVmZXJTeW5jaHJvbm91cyxcbmxhbmd1YWdlRm9yRXh0ZW5zaW9uLFxubGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIsXG5wYXJzZXJGb3JMYW5ndWFnZSxcbm1vZHVsZVRyYW5zZm9ybXMsXG5zeW5jTW9kdWxlVHJhbnNmb3Jtcyk9Plxue1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB0cmFuc2Zvcm1zO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5mdW5jdGlvbipnZXRQYXJzZXJHZW5lcmF0b3IoXG5ieXRlcyxcbnNwZWNpZmllcixcbmxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxub3B0aW9ucylcbntcbi8qICAgICAgICAgICAgICAgICAqL1xubGV0IGxhbmd1YWdlO1xuY29uc3QgZXh0ZW5zaW9uPXBhcnNlRXh0ZW5zaW9uKGxvY2F0aW9uKTtcblxuaWYoXG4hZXh0ZW5zaW9uSW1wbGllc0xhbmd1YWdlKGV4dGVuc2lvbikmJlxuaGFzKGxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyLHNwZWNpZmllcikpXG57XG5sYW5ndWFnZT1sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcltzcGVjaWZpZXJdO1xuIH1lbHNle1xubGFuZ3VhZ2U9bGFuZ3VhZ2VGb3JFeHRlbnNpb25bZXh0ZW5zaW9uXXx8ZXh0ZW5zaW9uO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHNvdXJjZU1hcDtcblxuaWYoaGFzKHRyYW5zZm9ybXMsbGFuZ3VhZ2UpKXtcbnRyeXtcbih7XG5ieXRlcyxcbnBhcnNlcjpsYW5ndWFnZSxcbnNvdXJjZU1hcH09XG55aWVsZCB0cmFuc2Zvcm1zW2xhbmd1YWdlXShcbmJ5dGVzLFxuc3BlY2lmaWVyLFxubG9jYXRpb24sXG5wYWNrYWdlTG9jYXRpb24sXG57XG4vL1xuLy9cbi8vXG5zb3VyY2VNYXB9KSk7XG5cblxuIH1jYXRjaChlcnIpe1xudGhyb3cgRXJyb3IoXG4gYEVycm9yIHRyYW5zZm9ybWluZyAke3EobGFuZ3VhZ2UpfSBzb3VyY2UgaW4gJHtxKGxvY2F0aW9uKX06ICR7ZXJyLm1lc3NhZ2V9YCxcbntjYXVzZTplcnJ9KTtcblxuIH1cbiB9XG5pZighaGFzKHBhcnNlckZvckxhbmd1YWdlLGxhbmd1YWdlKSl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IHBhcnNlIG1vZHVsZSAke3NwZWNpZmllcn0gYXQgJHtsb2NhdGlvbn0sIG5vIHBhcnNlciBjb25maWd1cmVkIGZvciB0aGUgbGFuZ3VhZ2UgJHtsYW5ndWFnZX1gKTtcblxuIH1cbmNvbnN0e3BhcnNlfT1wYXJzZXJGb3JMYW5ndWFnZVtsYW5ndWFnZV07XG5yZXR1cm4gcGFyc2UoYnl0ZXMsc3BlY2lmaWVyLGxvY2F0aW9uLHBhY2thZ2VMb2NhdGlvbix7XG5zb3VyY2VNYXAsXG4uLi5vcHRpb25zfSk7XG5cbiB9XG5cbi8qXG5cbiAgICovXG5jb25zdCBzeW5jUGFyc2VyPShieXRlcyxzcGVjaWZpZXIsbG9jYXRpb24scGFja2FnZUxvY2F0aW9uLG9wdGlvbnMpPT57XG5jb25zdCByZXN1bHQ9c3luY1RyYW1wb2xpbmUoXG5nZXRQYXJzZXJHZW5lcmF0b3IsXG5ieXRlcyxcbnNwZWNpZmllcixcbmxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxub3B0aW9ucyk7XG5cbmlmKCd0aGVuJ2luIHJlc3VsdCYmdHlwZW9mIHJlc3VsdC50aGVuPT09J2Z1bmN0aW9uJyl7XG50aHJvdyBuZXcgVHlwZUVycm9yKFxuJ1N5bmMgcGFyc2VyIGNhbm5vdCByZXR1cm4gYSBUaGVuYWJsZTsgZW5zdXJlIHBhcnNlciBpcyBhY3R1YWxseSBzeW5jaHJvbm91cycpO1xuXG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuc3luY1BhcnNlci5pc1N5bmNQYXJzZXI9dHJ1ZTtcblxuLypcblxuICAgKi9cbmNvbnN0IGFzeW5jUGFyc2VyPWFzeW5jKFxuYnl0ZXMsXG5zcGVjaWZpZXIsXG5sb2NhdGlvbixcbnBhY2thZ2VMb2NhdGlvbixcbm9wdGlvbnMpPT5cbntcbnJldHVybiBhc3luY1RyYW1wb2xpbmUoXG5nZXRQYXJzZXJHZW5lcmF0b3IsXG5ieXRlcyxcbnNwZWNpZmllcixcbmxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxub3B0aW9ucyk7XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG5pZihwcmVmZXJTeW5jaHJvbm91cyl7XG50cmFuc2Zvcm1zPXN5bmNNb2R1bGVUcmFuc2Zvcm1zO1xucmV0dXJuIHN5bmNQYXJzZXI7XG4gfWVsc2V7XG4vL1xuLy9cbnRyYW5zZm9ybXM9e1xuLi4uc3luY01vZHVsZVRyYW5zZm9ybXMsXG4uLi5tb2R1bGVUcmFuc2Zvcm1zfTtcblxuXG5yZXR1cm4gYXN5bmNQYXJzZXI7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBtYXBQYXJzZXJzKFxubGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3Jtcz17fSxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zPXt9LFxucHJlZmVyU3luY2hyb25vdXM9ZmFsc2UpXG57XG5jb25zdCBsYW5ndWFnZUZvckV4dGVuc2lvbkVudHJpZXM9W107XG5jb25zdCBwcm9ibGVtcz1bXTtcbmZvcihjb25zdFtleHRlbnNpb24sbGFuZ3VhZ2Vdb2YgZW50cmllcyhsYW5ndWFnZUZvckV4dGVuc2lvbikpe1xuaWYoaGFzKHBhcnNlckZvckxhbmd1YWdlLGxhbmd1YWdlKSl7XG5sYW5ndWFnZUZvckV4dGVuc2lvbkVudHJpZXMucHVzaChbZXh0ZW5zaW9uLGxhbmd1YWdlXSk7XG4gfWVsc2V7XG5wcm9ibGVtcy5wdXNoKCBgJHtxKGxhbmd1YWdlKX0gZm9yIGV4dGVuc2lvbiAke3EoZXh0ZW5zaW9uKX1gKTtcbiB9XG4gfVxuaWYocHJvYmxlbXMubGVuZ3RoPjApe1xudGhyb3cgRXJyb3IoIGBObyBwYXJzZXIgYXZhaWxhYmxlIGZvciBsYW5ndWFnZTogJHtwcm9ibGVtcy5qb2luKCcsICcpfWApO1xuIH1cbnJldHVybiBtYWtlRXh0ZW5zaW9uUGFyc2VyKFxucHJlZmVyU3luY2hyb25vdXMsXG5mcm9tRW50cmllcyhsYW5ndWFnZUZvckV4dGVuc2lvbkVudHJpZXMpLFxubGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIsXG5wYXJzZXJGb3JMYW5ndWFnZSxcbm1vZHVsZVRyYW5zZm9ybXMsXG5zeW5jTW9kdWxlVHJhbnNmb3Jtcyk7XG5cbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWFwUGFyc2Vycz0oe1xucGFyc2VyRm9yTGFuZ3VhZ2UsXG5tb2R1bGVUcmFuc2Zvcm1zLFxuc3luY01vZHVsZVRyYW5zZm9ybXN9KT0+XG57XG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgYXN5bmNQYXJzZUZuPShsYW5ndWFnZUZvckV4dGVuc2lvbixsYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcik9PlxubWFwUGFyc2Vycyhcbmxhbmd1YWdlRm9yRXh0ZW5zaW9uLFxubGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIsXG5wYXJzZXJGb3JMYW5ndWFnZSxcbm1vZHVsZVRyYW5zZm9ybXMsXG5zeW5jTW9kdWxlVHJhbnNmb3Jtcyk7XG5cblxuaWYobW9kdWxlVHJhbnNmb3JtcyYma2V5cyhtb2R1bGVUcmFuc2Zvcm1zKS5sZW5ndGg+MCl7XG5yZXR1cm4gYXN5bmNQYXJzZUZuO1xuIH1cblxuLy9cbi8vXG5pZih2YWx1ZXMocGFyc2VyRm9yTGFuZ3VhZ2UpLnNvbWUoKHtzeW5jaHJvbm91c30pPT4hc3luY2hyb25vdXMpKXtcbnJldHVybiBhc3luY1BhcnNlRm47XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xucmV0dXJuKGxhbmd1YWdlRm9yRXh0ZW5zaW9uLGxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyKT0+XG5tYXBQYXJzZXJzKFxubGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zLFxudHJ1ZSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTWFwUGFyc2VycyhtYWtlTWFwUGFyc2Vycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFwUGFyc2VycyI6WyJtYWtlTWFwUGFyc2VycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADGtGHVeQoAAHkKAAA8AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJqb2luIiwicmVsYXRpdml6ZSIsInJlc29sdmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuICovXG5cbi8vXG5cbi8vXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc29sdmU9KHNvbHV0aW9uLHByb2JsZW0pPT57XG5mb3IoY29uc3QgcGFydCBvZiBwcm9ibGVtKXtcbmlmKHBhcnQ9PT0nLid8fHBhcnQ9PT0nJyl7XG4vL1xuIH1lbHNlIGlmKHBhcnQ9PT0nLi4nKXtcbmlmKHNvbHV0aW9uLmxlbmd0aD09PTApe1xucmV0dXJuIGZhbHNlO1xuIH1cbnNvbHV0aW9uLnBvcCgpO1xuIH1lbHNle1xuc29sdXRpb24ucHVzaChwYXJ0KTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcmVzb2x2ZT0oc3BlYyxyZWZlcnJlcik9PntcbnNwZWM9U3RyaW5nKHNwZWN8fCcnKTtcbnJlZmVycmVyPVN0cmluZyhyZWZlcnJlcnx8JycpO1xuXG5pZihzcGVjLnN0YXJ0c1dpdGgoJy8nKSl7XG50aHJvdyBFcnJvciggYE1vZHVsZSBzcGVjaWZpZXIgJHtxKHNwZWMpfSBtdXN0IG5vdCBiZWdpbiB3aXRoIFwiL1wiYCk7XG4gfVxuaWYoIXJlZmVycmVyLnN0YXJ0c1dpdGgoJy4vJykpe1xudGhyb3cgRXJyb3IoIGBNb2R1bGUgcmVmZXJyZXIgJHtxKHJlZmVycmVyKX0gbXVzdCBiZWdpbiB3aXRoIFwiLi9cImApO1xuIH1cblxuY29uc3Qgc3BlY1BhcnRzPXNwZWMuc3BsaXQoJy8nKTtcbmNvbnN0IHNvbHV0aW9uPVtdO1xuY29uc3QgcHJvYmxlbT1bXTtcbmlmKHNwZWNQYXJ0c1swXT09PScuJ3x8c3BlY1BhcnRzWzBdPT09Jy4uJyl7XG5jb25zdCByZWZlcnJlclBhcnRzPXJlZmVycmVyLnNwbGl0KCcvJyk7XG5wcm9ibGVtLnB1c2goLi4ucmVmZXJyZXJQYXJ0cyk7XG5wcm9ibGVtLnBvcCgpO1xuc29sdXRpb24ucHVzaCgnLicpO1xuIH1cbnByb2JsZW0ucHVzaCguLi5zcGVjUGFydHMpO1xuXG5pZighc29sdmUoc29sdXRpb24scHJvYmxlbSkpe1xudGhyb3cgRXJyb3IoXG4gYE1vZHVsZSBzcGVjaWZpZXIgJHtxKHNwZWMpfSB2aWEgcmVmZXJyZXIgJHtxKFxucmVmZXJyZXIpXG4gfSBtdXN0IG5vdCB0cmF2ZXJzZSBiZWhpbmQgYW4gZW1wdHkgcGF0aGApO1xuXG4gfVxuXG5yZXR1cm4gc29sdXRpb24uam9pbignLycpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLnJlc29sdmUocmVzb2x2ZSk7XG5jb25zdCAgICAgICAgam9pbj0oYmFzZSxzcGVjKT0+e1xuc3BlYz1TdHJpbmcoc3BlY3x8JycpO1xuYmFzZT1TdHJpbmcoYmFzZXx8JycpO1xuXG5jb25zdCBzcGVjUGFydHM9c3BlYy5zcGxpdCgnLycpO1xuY29uc3QgYmFzZVBhcnRzPWJhc2Uuc3BsaXQoJy8nKTtcblxuaWYoc3BlY1BhcnRzLmxlbmd0aD4xJiZzcGVjUGFydHNbMF09PT0nJyl7XG50aHJvdyBFcnJvciggYE1vZHVsZSBzcGVjaWZpZXIgJHtxKHNwZWMpfSBtdXN0IG5vdCBzdGFydCB3aXRoIFwiL1wiYCk7XG4gfVxuaWYoYmFzZVBhcnRzWzBdPT09Jy4nfHxiYXNlUGFydHNbMF09PT0nLi4nKXtcbnRocm93IEVycm9yKCBgRXh0ZXJuYWwgbW9kdWxlIHNwZWNpZmllciAke3EoYmFzZSl9IG11c3QgYmUgYWJzb2x1dGVgKTtcbiB9XG5pZihzcGVjUGFydHNbMF0hPT0nLicpe1xudGhyb3cgRXJyb3IoIGBJbnRlcm5hbCBtb2R1bGUgc3BlY2lmaWVyICR7cShzcGVjKX0gbXVzdCBiZSByZWxhdGl2ZWApO1xuIH1cblxuY29uc3Qgc29sdXRpb249W107XG5pZighc29sdmUoc29sdXRpb24sc3BlY1BhcnRzKSl7XG50aHJvdyBFcnJvcihcbiBgTW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IHZpYSBiYXNlICR7cShcbmJhc2UpXG4gfSBtdXN0IG5vdCByZWZlciB0byBhIG1vZHVsZSBvdXRzaWRlIG9mIHRoZSBiYXNlYCk7XG5cbiB9XG5cbnJldHVybltiYXNlLC4uLnNvbHV0aW9uXS5qb2luKCcvJyk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5qb2luKGpvaW4pO1xuY29uc3QgICAgICAgIHJlbGF0aXZpemU9KHNwZWMpPT57XG5zcGVjPVN0cmluZyhzcGVjfHwnJyk7XG5cbmNvbnN0IHNvbHV0aW9uPVtdO1xuaWYoIXNvbHZlKHNvbHV0aW9uLHNwZWMuc3BsaXQoJy8nKSkpe1xudGhyb3cgRXJyb3IoXG4gYE1vZHVsZSBzcGVjaWZpZXIgJHtxKHNwZWMpfSBtdXN0IG5vdCB0cmF2ZXJzZSBiZWhpbmQgYW4gZW1wdHkgcGF0aGApO1xuXG4gfVxuXG5yZXR1cm5bJy4nLC4uLnNvbHV0aW9uXS5qb2luKCcvJyk7XG4gfTskaM2PX29uY2UucmVsYXRpdml6ZShyZWxhdGl2aXplKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlc29sdmUiOlsicmVzb2x2ZSJdLCJqb2luIjpbImpvaW4iXSwicmVsYXRpdml6ZSI6WyJyZWxhdGl2aXplIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKGEn3WnBAAApwQAADIAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9wYXJzZS1ieXRlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVmYXVsdCIsInBhcnNlQnl0ZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGZyZWV6ZT1PYmplY3QuZnJlZXplO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgcGFyc2VCeXRlcz0oYnl0ZXMsX3NwZWNpZmllcixfbG9jYXRpb24sX3BhY2thZ2VMb2NhdGlvbik9Pntcbi8vXG5jb25zdCBidWZmZXI9bmV3IEFycmF5QnVmZmVyKGJ5dGVzLmxlbmd0aCk7XG5jb25zdCBieXRlc1ZpZXc9bmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbmJ5dGVzVmlldy5zZXQoYnl0ZXMpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbXBvcnRzPWZyZWV6ZShbXSk7XG5cbi8qXG5cbiAgICovXG5jb25zdCBleGVjdXRlPShleHBvcnRzKT0+e1xuZXhwb3J0cy5kZWZhdWx0PWJ1ZmZlcjtcbiB9O1xuXG5yZXR1cm57XG5wYXJzZXI6J2J5dGVzJyxcbmJ5dGVzLFxucmVjb3JkOmZyZWV6ZSh7XG5pbXBvcnRzLFxuZXhwb3J0czpmcmVlemUoWydkZWZhdWx0J10pLFxuZXhlY3V0ZTpmcmVlemUoZXhlY3V0ZSl9KX07XG5cblxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnBhcnNlQnl0ZXMocGFyc2VCeXRlcyk7XG5jb25zdHtkZWZhdWx0OiRjzY9fZGVmYXVsdH09e2RlZmF1bHQ6e1xucGFyc2U6cGFyc2VCeXRlcyxcbmhldXJpc3RpY0ltcG9ydHM6ZmFsc2UsXG5zeW5jaHJvbm91czp0cnVlfX07JGjNj19vbmNlLmRlZmF1bHQoJGPNj19kZWZhdWx0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdLCJwYXJzZUJ5dGVzIjpbInBhcnNlQnl0ZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAART0u3BkRAAAZEQAARgAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL3BhcnNlLWNqcy1zaGFyZWQtZXhwb3J0LXdyYXBwZXIuanN7ImltcG9ydHMiOlsiLi9wb3dlcnMuanMiXSwiZXhwb3J0cyI6WyJnZXRNb2R1bGVQYXRocyIsIndyYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMsaXNSZWFkTm93UG93ZXJzOyRozY9faW1wb3J0cyhbW1wiLi9wb3dlcnMuanNcIiwgW1tcImZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzXCIsIFskaM2PX2EgPT4gKGZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzID0gJGjNj19hKV1dLFtcImlzUmVhZE5vd1Bvd2Vyc1wiLCBbJGjNj19hID0+IChpc1JlYWROb3dQb3dlcnMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHthcHBseX09UmVmbGVjdDtcbmNvbnN0e2ZyZWV6ZSxrZXlzLGNyZWF0ZSxoYXNPd25Qcm9wZXJ0eSxkZWZpbmVQcm9wZXJ0eX09T2JqZWN0O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBoYXM9KG9iamVjdCxrZXkpPT5hcHBseShoYXNPd25Qcm9wZXJ0eSxvYmplY3QsW2tleV0pO1xuXG5jb25zdCBub1RyYWlsaW5nU2xhc2g9KHBhdGgpPT57XG5jb25zdCBsPXBhdGgubGVuZ3RoLTE7XG5yZXR1cm4gcGF0aFtsXT09PSdcXFxcJ3x8cGF0aFtsXT09PScvJz9wYXRoLnNsaWNlKDAsLTEpOnBhdGg7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TW9kdWxlUGF0aHM9KHJlYWRQb3dlcnMsbG9jYXRpb24pPT57XG5pZihcbnJlYWRQb3dlcnMmJlxudHlwZW9mIHJlYWRQb3dlcnMhPT0nZnVuY3Rpb24nJiZcbnJlYWRQb3dlcnMuZmlsZVVSTFRvUGF0aClcbntcbmxldCBmaWxlbmFtZT1sb2NhdGlvbjtcbmxldCBkaXJuYW1lO1xudHJ5e1xuZGlybmFtZT1uZXcgVVJMKCcuLycsZmlsZW5hbWUpLmhyZWY7XG4gfWNhdGNoKF8pe1xucmV0dXJue1xuZmlsZW5hbWU6bnVsbCxcbmRpcm5hbWU6bnVsbH07XG5cbiB9XG5cbmZpbGVuYW1lPXJlYWRQb3dlcnMuZmlsZVVSTFRvUGF0aChmaWxlbmFtZSkudG9TdHJpbmcoKTtcbmRpcm5hbWU9bm9UcmFpbGluZ1NsYXNoKHJlYWRQb3dlcnMuZmlsZVVSTFRvUGF0aChkaXJuYW1lKS50b1N0cmluZygpKTtcblxucmV0dXJue1xuZmlsZW5hbWUsXG5kaXJuYW1lfTtcblxuIH1lbHNle1xucmV0dXJue1xuZmlsZW5hbWU6bnVsbCxcbmRpcm5hbWU6bnVsbH07XG5cbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5nZXRNb2R1bGVQYXRocyhnZXRNb2R1bGVQYXRocyk7XG5jb25zdCAgICAgICAgd3JhcD0oe1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmQsXG5jb21wYXJ0bWVudCxcbnJlc29sdmVkSW1wb3J0cyxcbmxvY2F0aW9uLFxucmVhZFBvd2Vyc30pPT5cbntcbi8vXG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZC5kZWZhdWx0PWNyZWF0ZShcbmNvbXBhcnRtZW50Lmdsb2JhbFRoaXMuT2JqZWN0LnByb3RvdHlwZSk7XG5cblxuLy9cbi8vXG5jb25zdCBwcm9tb3RlVG9OYW1lZEV4cG9ydD0ocHJvcCx2YWx1ZSk9Pntcbi8vXG5pZihwcm9wIT09J2RlZmF1bHQnKXtcbm1vZHVsZUVudmlyb25tZW50UmVjb3JkW3Byb3BdPXZhbHVlO1xuIH1cbiB9O1xuXG5jb25zdCByZWRlZmluZWQ9bmV3IFNldCgpO1xuXG5jb25zdCBvcmlnaW5hbEV4cG9ydHM9bmV3IFByb3h5KG1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHQse1xuc2V0KF90YXJnZXQscHJvcCx2YWx1ZSl7XG5wcm9tb3RlVG9OYW1lZEV4cG9ydChwcm9wLHZhbHVlKTtcbm1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHRbcHJvcF09dmFsdWU7XG5yZXR1cm4gdHJ1ZTtcbiB9LFxuZGVmaW5lUHJvcGVydHkodGFyZ2V0LHByb3AsZGVzY3JpcHRvcil7XG5pZihoYXMoZGVzY3JpcHRvciwndmFsdWUnKSl7XG4vL1xuLy9cbnByb21vdGVUb05hbWVkRXhwb3J0KHByb3AsZGVzY3JpcHRvci52YWx1ZSk7XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQscHJvcCxkZXNjcmlwdG9yKTtcbi8vXG4vL1xucmVkZWZpbmVkLmFkZChwcm9wKTtcbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG5sZXQgZmluYWxFeHBvcnRzPW9yaWdpbmFsRXhwb3J0cztcblxuY29uc3QgbW9kdWxlPWZyZWV6ZSh7XG5nZXQgZXhwb3J0cygpe1xucmV0dXJuIGZpbmFsRXhwb3J0cztcbiB9LFxuc2V0IGV4cG9ydHModmFsdWUpe1xuZmluYWxFeHBvcnRzPXZhbHVlO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVxdWlyZT0oaW1wb3J0U3BlY2lmaWVyKT0+e1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgbmFtZXNwYWNlO1xuXG5pZighaGFzKHJlc29sdmVkSW1wb3J0cyxpbXBvcnRTcGVjaWZpZXIpKXtcbmlmKGlzUmVhZE5vd1Bvd2VycyhyZWFkUG93ZXJzKSl7XG5uYW1lc3BhY2U9Y29tcGFydG1lbnQuaW1wb3J0Tm93KGltcG9ydFNwZWNpZmllcik7XG4gfWVsc2V7XG5jb25zdCBpbnZhbGlkUHJvcHM9ZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMocmVhZFBvd2Vycykuc29ydCgpO1xudGhyb3cgbmV3IEVycm9yKFxuIGBTeW5jaHJvbm91cyByZWFkUG93ZXJzIHJlcXVpcmVkIGZvciBkeW5hbWljIGltcG9ydCBvZiAke2Fzc2VydC5xdW90ZShpbXBvcnRTcGVjaWZpZXIpfTsgbWlzc2luZyBvciBpbnZhbGlkIHByb3Aocyk6ICR7aW52YWxpZFByb3BzLmpvaW4oJywgJyl9YCk7XG5cbiB9XG4gfWVsc2V7XG5uYW1lc3BhY2U9Y29tcGFydG1lbnQuaW1wb3J0Tm93KHJlc29sdmVkSW1wb3J0c1tpbXBvcnRTcGVjaWZpZXJdKTtcbiB9XG5cbi8vXG4vL1xuaWYoaGFzKG5hbWVzcGFjZSwnZGVmYXVsdCcpKXtcbnJldHVybiBuYW1lc3BhY2UuZGVmYXVsdDtcbiB9ZWxzZXtcbnJldHVybiBuYW1lc3BhY2U7XG4gfVxuIH07XG5pZih0eXBlb2YgcmVhZFBvd2Vycz09PSdvYmplY3QnJiZyZWFkUG93ZXJzLnJlcXVpcmVSZXNvbHZlKXtcbmNvbnN0e3JlcXVpcmVSZXNvbHZlfT1yZWFkUG93ZXJzO1xucmVxdWlyZS5yZXNvbHZlPWZyZWV6ZSgoc3BlY2lmaWVyLG9wdGlvbnMpPT5cbnJlcXVpcmVSZXNvbHZlKGxvY2F0aW9uLHNwZWNpZmllcixvcHRpb25zKSk7XG5cbiB9ZWxzZXtcbnJlcXVpcmUucmVzb2x2ZT1mcmVlemUoKHNwZWNpZmllcik9PntcbmNvbnN0IGVycm9yPUVycm9yKFxuIGBDYW5ub3QgZmluZCBtb2R1bGUgJyR7c3BlY2lmaWVyfSdcXG5BZGQgcmVxdWlyZVJlc29sdmUgdG8gRW5kbyBDb21wYXJ0bWVudCBNYXBwZXIgcmVhZFBvd2Vycy5gKTtcblxuZGVmaW5lUHJvcGVydHkoZXJyb3IsJ2NvZGUnLHt2YWx1ZTonTU9EVUxFX05PVF9GT1VORCd9KTtcbnRocm93IGVycm9yO1xuIH0pO1xuIH1cblxuZnJlZXplKHJlcXVpcmUpO1xuXG5jb25zdCBhZnRlckV4ZWN1dGU9KCk9PntcbmNvbnN0IGV4cG9ydHNIYXZlQmVlbk92ZXJ3cml0dGVuPWZpbmFsRXhwb3J0cyE9PW9yaWdpbmFsRXhwb3J0cztcbi8vXG4vL1xuLy9cbmlmKGV4cG9ydHNIYXZlQmVlbk92ZXJ3cml0dGVuKXtcbm1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHQ9ZmluYWxFeHBvcnRzO1xuZm9yKGNvbnN0IHByb3Agb2Yga2V5cyhtb2R1bGVFbnZpcm9ubWVudFJlY29yZC5kZWZhdWx0fHx7fSkpe1xuaWYocHJvcCE9PSdkZWZhdWx0Jyl7XG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZFtwcm9wXT1tb2R1bGVFbnZpcm9ubWVudFJlY29yZC5kZWZhdWx0W3Byb3BdO1xuIH1cbiB9XG4gfWVsc2V7XG5mb3IoY29uc3QgcHJvcCBvZiByZWRlZmluZWQpe1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmRbcHJvcF09bW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdFtwcm9wXTtcbiB9XG4gfVxuIH07XG5cbnJldHVybntcbm1vZHVsZSxcbm1vZHVsZUV4cG9ydHM6b3JpZ2luYWxFeHBvcnRzLFxuYWZ0ZXJFeGVjdXRlLFxucmVxdWlyZX07XG5cbiB9OyRozY9fb25jZS53cmFwKHdyYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0TW9kdWxlUGF0aHMiOlsiZ2V0TW9kdWxlUGF0aHMiXSwid3JhcCI6WyJ3cmFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPBaXtXABAAAwAQAADEAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9wYXJzZS1qc29uLmpzeyJpbXBvcnRzIjpbIi4vanNvbi5qcyJdLCJleHBvcnRzIjpbImRlZmF1bHQiLCJwYXJzZUpzb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFyc2VMb2NhdGVkSnNvbjskaM2PX2ltcG9ydHMoW1tcIi4vanNvbi5qc1wiLCBbW1wicGFyc2VMb2NhdGVkSnNvblwiLCBbJGjNj19hID0+IChwYXJzZUxvY2F0ZWRKc29uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZnJlZXplPU9iamVjdC5mcmVlemU7XG5cbmNvbnN0IHRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgcGFyc2VKc29uPShieXRlcyxfc3BlY2lmaWVyLGxvY2F0aW9uLF9wYWNrYWdlTG9jYXRpb24pPT57XG5jb25zdCBzb3VyY2U9dGV4dERlY29kZXIuZGVjb2RlKGJ5dGVzKTtcbmNvbnN0IGltcG9ydHM9ZnJlZXplKFtdKTtcblxuLypcblxuICAgKi9cbmNvbnN0IGV4ZWN1dGU9KGV4cG9ydHMpPT57XG5leHBvcnRzLmRlZmF1bHQ9cGFyc2VMb2NhdGVkSnNvbihzb3VyY2UsbG9jYXRpb24pO1xuIH07XG5yZXR1cm57XG5wYXJzZXI6J2pzb24nLFxuYnl0ZXMsXG5yZWNvcmQ6ZnJlZXplKHtcbmltcG9ydHMsXG5leHBvcnRzOmZyZWV6ZShbJ2RlZmF1bHQnXSksXG5leGVjdXRlOmZyZWV6ZShleGVjdXRlKX0pfTtcblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucGFyc2VKc29uKHBhcnNlSnNvbik7XG5jb25zdHtkZWZhdWx0OiRjzY9fZGVmYXVsdH09e2RlZmF1bHQ6e1xucGFyc2U6cGFyc2VKc29uLFxuaGV1cmlzdGljSW1wb3J0czpmYWxzZSxcbnN5bmNocm9ub3VzOnRydWV9fTskaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sInBhcnNlSnNvbiI6WyJwYXJzZUpzb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAOQER4hcHAAAXBwAANAAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL3BhcnNlLXByZS1janMuanN7ImltcG9ydHMiOlsiLi9qc29uLmpzIiwiLi9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCIsInBhcnNlUHJlQ2pzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlTG9jYXRlZEpzb24sd3JhcCxnZXRNb2R1bGVQYXRoczskaM2PX2ltcG9ydHMoW1tcIi4vanNvbi5qc1wiLCBbW1wicGFyc2VMb2NhdGVkSnNvblwiLCBbJGjNj19hID0+IChwYXJzZUxvY2F0ZWRKc29uID0gJGjNj19hKV1dXV0sW1wiLi9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzXCIsIFtbXCJ3cmFwXCIsIFskaM2PX2EgPT4gKHdyYXAgPSAkaM2PX2EpXV0sW1wiZ2V0TW9kdWxlUGF0aHNcIiwgWyRozY9fYSA9PiAoZ2V0TW9kdWxlUGF0aHMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCB0ZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIHBhcnNlUHJlQ2pzPShcbmJ5dGVzLFxuX3NwZWNpZmllcixcbmxvY2F0aW9uLFxuX3BhY2thZ2VMb2NhdGlvbixcbntyZWFkUG93ZXJzfT17fSk9Plxue1xuY29uc3QgdGV4dD10ZXh0RGVjb2Rlci5kZWNvZGUoYnl0ZXMpO1xuY29uc3R7c291cmNlLGltcG9ydHMsZXhwb3J0cyxyZWV4cG9ydHN9PXBhcnNlTG9jYXRlZEpzb24oXG50ZXh0LFxubG9jYXRpb24pO1xuXG5cbmNvbnN0e2ZpbGVuYW1lLGRpcm5hbWV9PWdldE1vZHVsZVBhdGhzKHJlYWRQb3dlcnMsbG9jYXRpb24pO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGV4ZWN1dGU9KG1vZHVsZUVudmlyb25tZW50UmVjb3JkLGNvbXBhcnRtZW50LHJlc29sdmVkSW1wb3J0cyk9PntcbmNvbnN0IGZ1bmN0b3I9Y29tcGFydG1lbnQuZXZhbHVhdGUoc291cmNlKTtcblxuY29uc3R7cmVxdWlyZSxtb2R1bGVFeHBvcnRzLG1vZHVsZSxhZnRlckV4ZWN1dGV9PXdyYXAoe1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmQsXG5jb21wYXJ0bWVudCxcbnJlc29sdmVkSW1wb3J0cyxcbmxvY2F0aW9uLFxucmVhZFBvd2Vyc30pO1xuXG5cbmZ1bmN0b3IocmVxdWlyZSxtb2R1bGVFeHBvcnRzLG1vZHVsZSxmaWxlbmFtZSxkaXJuYW1lKTtcblxuYWZ0ZXJFeGVjdXRlKCk7XG4gfTtcblxucmV0dXJue1xucGFyc2VyOidwcmUtY2pzLWpzb24nLFxuYnl0ZXMsXG5yZWNvcmQ6e1xuaW1wb3J0cyxcbnJlZXhwb3J0cyxcbmV4cG9ydHMsXG5leGVjdXRlfX07XG5cblxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnBhcnNlUHJlQ2pzKHBhcnNlUHJlQ2pzKTtcbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDp7XG5wYXJzZTpwYXJzZVByZUNqcyxcbmhldXJpc3RpY0ltcG9ydHM6dHJ1ZSxcbnN5bmNocm9ub3VzOnRydWV9fTskaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sInBhcnNlUHJlQ2pzIjpbInBhcnNlUHJlQ2pzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAI7p/aEBBQAAAQUAADQAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9wYXJzZS1wcmUtbWpzLmpzeyJpbXBvcnRzIjpbIi4vanNvbi5qcyJdLCJleHBvcnRzIjpbImRlZmF1bHQiLCJwYXJzZVByZU1qcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXJzZUxvY2F0ZWRKc29uOyRozY9faW1wb3J0cyhbW1wiLi9qc29uLmpzXCIsIFtbXCJwYXJzZUxvY2F0ZWRKc29uXCIsIFskaM2PX2EgPT4gKHBhcnNlTG9jYXRlZEpzb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuY29uc3QgdGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBwYXJzZVByZU1qcz0oXG5ieXRlcyxcbl9zcGVjaWZpZXIsXG5sb2NhdGlvbixcbl9wYWNrYWdlTG9jYXRpb24sXG57c291cmNlTWFwVXJsfT17fSk9Plxue1xuY29uc3QgdGV4dD10ZXh0RGVjb2Rlci5kZWNvZGUoYnl0ZXMpO1xuY29uc3QgcmVjb3JkPXBhcnNlTG9jYXRlZEpzb24odGV4dCxsb2NhdGlvbik7XG5pZihzb3VyY2VNYXBVcmwpe1xuLy9cbnJlY29yZC5fX3N5bmNNb2R1bGVQcm9ncmFtX18rPSBgLy8jIHNvdXJjZU1hcHBpbmdVUkw9JHtzb3VyY2VNYXBVcmx9XFxuYDtcbiB9ZWxzZXtcbi8vXG5yZWNvcmQuX19zeW5jTW9kdWxlUHJvZ3JhbV9fKz0gYC8vIyBzb3VyY2VVUkw9JHtsb2NhdGlvbn1cXG5gO1xuIH1cbnJldHVybntcbnBhcnNlcjoncHJlLW1qcy1qc29uJyxcbmJ5dGVzLFxucmVjb3JkfTtcblxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnBhcnNlUHJlTWpzKHBhcnNlUHJlTWpzKTtcbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDp7XG5wYXJzZTpwYXJzZVByZU1qcyxcbmhldXJpc3RpY0ltcG9ydHM6ZmFsc2UsXG5zeW5jaHJvbm91czp0cnVlfX07JGjNj19vbmNlLmRlZmF1bHQoJGPNj19kZWZhdWx0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdLCJwYXJzZVByZU1qcyI6WyJwYXJzZVByZU1qcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACtcOKEfQQAAH0EAAAxAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvcGFyc2UtdGV4dC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVmYXVsdCIsInBhcnNlVGV4dCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG4gKi9cblxuLy9cblxuLypcblxuXG5cblxuICovXG5jb25zdCBmcmVlemU9T2JqZWN0LmZyZWV6ZTtcblxuY29uc3QgdGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBwYXJzZVRleHQ9KGJ5dGVzLF9zcGVjaWZpZXIsX2xvY2F0aW9uLF9wYWNrYWdlTG9jYXRpb24pPT57XG5jb25zdCB0ZXh0PXRleHREZWNvZGVyLmRlY29kZShieXRlcyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydHM9ZnJlZXplKFtdKTtcblxuLypcblxuICAgKi9cbmNvbnN0IGV4ZWN1dGU9KGV4cG9ydHMpPT57XG5leHBvcnRzLmRlZmF1bHQ9dGV4dDtcbiB9O1xuXG5yZXR1cm57XG5wYXJzZXI6J3RleHQnLFxuYnl0ZXMsXG5yZWNvcmQ6ZnJlZXplKHtcbmltcG9ydHMsXG5leHBvcnRzOmZyZWV6ZShbJ2RlZmF1bHQnXSksXG5leGVjdXRlOmZyZWV6ZShleGVjdXRlKX0pfTtcblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucGFyc2VUZXh0KHBhcnNlVGV4dCk7XG5jb25zdHtkZWZhdWx0OiRjzY9fZGVmYXVsdH09e2RlZmF1bHQ6e1xucGFyc2U6cGFyc2VUZXh0LFxuaGV1cmlzdGljSW1wb3J0czpmYWxzZSxcbnN5bmNocm9ub3VzOnRydWV9fTskaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sInBhcnNlVGV4dCI6WyJwYXJzZVRleHQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxf3LJ1UWAABVFgAANAAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL3BvbGljeS1mb3JtYXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFzc2VydFBhY2thZ2VQb2xpY3kiLCJhc3NlcnRQb2xpY3kiLCJnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24iLCJpc0FsbG93aW5nRXZlcnl0aGluZyIsImlzQXR0ZW51YXRpb25EZWZpbml0aW9uIiwicG9saWN5TG9va3VwSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG4gKi9cblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2VudHJpZXMsa2V5c309T2JqZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdCBBVFRFTlVBVE9SX0tFWT0nYXR0ZW51YXRlJztcbmNvbnN0IEFUVEVOVUFUT1JfUEFSQU1TX0tFWT0ncGFyYW1zJztcbmNvbnN0IFdJTERDQVJEX1BPTElDWV9WQUxVRT0nYW55JztcbmNvbnN0IFBPTElDWV9GSUVMRFNfTE9PS1VQPS8qICAgICAgICAgICAgICAgICovW1xuJ2J1aWx0aW5zJyxcbidnbG9iYWxzJyxcbidwYWNrYWdlcyddO1xuXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcG9saWN5TG9va3VwSGVscGVyPShwYWNrYWdlUG9saWN5LGZpZWxkLGl0ZW1OYW1lKT0+e1xuaWYoIVBPTElDWV9GSUVMRFNfTE9PS1VQLmluY2x1ZGVzKGZpZWxkKSl7XG50aHJvdyBFcnJvciggYEludmFsaWQgZmllbGQgJHtxKGZpZWxkKX1gKTtcbiB9XG5pZihcbnR5cGVvZiBwYWNrYWdlUG9saWN5IT09J29iamVjdCd8fFxucGFja2FnZVBvbGljeT09PW51bGx8fFxuIXBhY2thZ2VQb2xpY3lbZmllbGRdKVxue1xucmV0dXJuIGZhbHNlO1xuIH1cblxuaWYocGFja2FnZVBvbGljeVtmaWVsZF09PT1XSUxEQ0FSRF9QT0xJQ1lfVkFMVUUpe1xucmV0dXJuIHRydWU7XG4gfVxuXG5jb25zdCB2YWx1ZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnBhY2thZ2VQb2xpY3lbZmllbGRdO1xuXG5pZihpdGVtTmFtZSBpbiB2YWx1ZSl7XG5yZXR1cm4gdmFsdWVbaXRlbU5hbWVdO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UucG9saWN5TG9va3VwSGVscGVyKHBvbGljeUxvb2t1cEhlbHBlcik7XG5jb25zdCAgICAgICAgaXNBbGxvd2luZ0V2ZXJ5dGhpbmc9KHBvbGljeVZhbHVlKT0+XG5wb2xpY3lWYWx1ZT09PVdJTERDQVJEX1BPTElDWV9WQUxVRTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5pc0FsbG93aW5nRXZlcnl0aGluZyhpc0FsbG93aW5nRXZlcnl0aGluZyk7XG5jb25zdCAgICAgICAgaXNBdHRlbnVhdGlvbkRlZmluaXRpb249KGFsbGVnZWREZWZpbml0aW9uKT0+e1xucmV0dXJuIEJvb2xlYW4oXG5hbGxlZ2VkRGVmaW5pdGlvbiYmXG50eXBlb2YgYWxsZWdlZERlZmluaXRpb249PT0nb2JqZWN0JyYmXG50eXBlb2YgYWxsZWdlZERlZmluaXRpb25bQVRURU5VQVRPUl9LRVldPT09J3N0cmluZyd8fC8vXG5pc0FycmF5KGFsbGVnZWREZWZpbml0aW9uKS8vXG4pO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuaXNBdHRlbnVhdGlvbkRlZmluaXRpb24oaXNBdHRlbnVhdGlvbkRlZmluaXRpb24pO1xuY29uc3QgICAgICAgIGdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbj0oYXR0ZW51YXRpb25EZWZpbml0aW9uKT0+e1xuaWYoIWlzQXR0ZW51YXRpb25EZWZpbml0aW9uKGF0dGVudWF0aW9uRGVmaW5pdGlvbikpe1xudGhyb3cgRXJyb3IoXG4gYEludmFsaWQgYXR0ZW51YXRpb24gJHtxKFxuYXR0ZW51YXRpb25EZWZpbml0aW9uKVxuIH0sIG11c3QgYmUgYW4gYXJyYXkgb2YgcGFyYW1zIGZvciBkZWZhdWx0IGF0dGVudWF0b3Igb3IgYW4gb2JqZWN0IHdpdGggYW4gYXR0ZW51YXRvciBrZXlgKTtcblxuIH1cbmlmKGlzQXJyYXkoYXR0ZW51YXRpb25EZWZpbml0aW9uKSl7XG5yZXR1cm57XG5kaXNwbGF5TmFtZTonPGRlZmF1bHQgYXR0ZW51YXRvcj4nLFxuc3BlY2lmaWVyOm51bGwsXG5wYXJhbXM6YXR0ZW51YXRpb25EZWZpbml0aW9ufTtcblxuIH1lbHNle1xucmV0dXJue1xuZGlzcGxheU5hbWU6YXR0ZW51YXRpb25EZWZpbml0aW9uW0FUVEVOVUFUT1JfS0VZXSxcbnNwZWNpZmllcjphdHRlbnVhdGlvbkRlZmluaXRpb25bQVRURU5VQVRPUl9LRVldLFxucGFyYW1zOmF0dGVudWF0aW9uRGVmaW5pdGlvbltBVFRFTlVBVE9SX1BBUkFNU19LRVldfTtcblxuIH1cbiB9O1xuXG4vL1xuJGjNj19vbmNlLmdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbihnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24pO2NvbnN0IGlzUmVjb3JkT2Y9KGl0ZW0scHJlZGljYXRlKT0+e1xuaWYodHlwZW9mIGl0ZW0hPT0nb2JqZWN0J3x8aXRlbT09PW51bGx8fGlzQXJyYXkoaXRlbSkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnJldHVybiBlbnRyaWVzKGl0ZW0pLmV2ZXJ5KChba2V5LHZhbHVlXSk9PnByZWRpY2F0ZSh2YWx1ZSxrZXkpKTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc0Jvb2xlYW49KGl0ZW0pPT50eXBlb2YgaXRlbT09PSdib29sZWFuJztcblxuLy9cbmNvbnN0IHByZWRpY2F0ZU9yPVxuKC4uLnByZWRpY2F0ZXMpPT5cbihpdGVtKT0+XG5wcmVkaWNhdGVzLnNvbWUoKHApPT5wKGl0ZW0pKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IGlzUG9saWN5SXRlbT0oaXRlbSk9PlxuaXRlbT09PXVuZGVmaW5lZHx8XG5pdGVtPT09V0lMRENBUkRfUE9MSUNZX1ZBTFVFfHxcbmlzUmVjb3JkT2YoaXRlbSxpc0Jvb2xlYW4pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhY2thZ2VQb2xpY3k9KGFsbGVnZWRQYWNrYWdlUG9saWN5LHBhdGgsdXJsKT0+e1xuaWYoYWxsZWdlZFBhY2thZ2VQb2xpY3k9PT11bmRlZmluZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IGluVXJsPXVybD8gYCBpbiAke3EodXJsKX1gOicnO1xuXG5jb25zdCBwYWNrYWdlUG9saWN5PU9iamVjdChhbGxlZ2VkUGFja2FnZVBvbGljeSk7XG5hc3NlcnQoXG5hbGxlZ2VkUGFja2FnZVBvbGljeT09PXBhY2thZ2VQb2xpY3kmJiFpc0FycmF5KGFsbGVnZWRQYWNrYWdlUG9saWN5KSxcbiBgJHtwYXRofSBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7cShhbGxlZ2VkUGFja2FnZVBvbGljeSl9JHtpblVybH1gKTtcblxuY29uc3R7XG5wYWNrYWdlcyxcbmJ1aWx0aW5zLFxuZ2xvYmFscyxcbm5vR2xvYmFsRnJlZXplLFxuZGVmYXVsdEF0dGVudWF0b3I6X2lnbm9yZSwvL1xuLy9cbm9wdGlvbnMsLy9cbi4uLmV4dHJhfT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcGFja2FnZVBvbGljeTtcblxuYXNzZXJ0KFxua2V5cyhleHRyYSkubGVuZ3RoPT09MCxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3Eoa2V5cyhleHRyYSkpfSR7aW5Vcmx9YCk7XG5cblxuYXNzZXJ0KFxubm9HbG9iYWxGcmVlemU9PT11bmRlZmluZWR8fHR5cGVvZiBub0dsb2JhbEZyZWV6ZT09PSdib29sZWFuJyxcbiBgJHtwYXRofS5ub0dsb2JhbEZyZWV6ZSBtdXN0IGJlIGEgYm9vbGVhbiwgZ290ICR7cSh7XG5ub0dsb2JhbEZyZWV6ZX0pXG4gfSR7aW5Vcmx9YCk7XG5cblxuaXNQb2xpY3lJdGVtKHBhY2thZ2VzKXx8XG5hc3NlcnQuZmFpbChcbiBgJHtwYXRofS5wYWNrYWdlcyBtdXN0IGJlIGEgcmVjb3JkIG9mIGJvb2xlYW5zLCBnb3QgJHtxKHtcbnBhY2thZ2VzfSlcbiB9JHtpblVybH1gKTtcblxuXG5pc1BvbGljeUl0ZW0oZ2xvYmFscyl8fFxuaXNBdHRlbnVhdGlvbkRlZmluaXRpb24oZ2xvYmFscyl8fFxuYXNzZXJ0LmZhaWwoXG4gYCR7cGF0aH0uZ2xvYmFscyBtdXN0IGJlIGEgcmVjb3JkIG9mIGJvb2xlYW5zIG9yIGEgc2luZ2xlIGF0dGVudWF0aW9uLCBnb3QgJHtxKFxue1xuZ2xvYmFsc30pXG5cbiB9JHtpblVybH1gKTtcblxuXG5pc1BvbGljeUl0ZW0oYnVpbHRpbnMpfHxcbmlzUmVjb3JkT2YoYnVpbHRpbnMscHJlZGljYXRlT3IoaXNCb29sZWFuLGlzQXR0ZW51YXRpb25EZWZpbml0aW9uKSl8fFxuYXNzZXJ0LmZhaWwoXG4gYCR7cGF0aH0uYnVpbHRpbnMgbXVzdCBiZSBhIHJlY29yZCBvZiBib29sZWFucyBvciBhdHRlbnVhdGlvbnMsIGdvdCAke3Eoe1xuYnVpbHRpbnN9KVxuIH0ke2luVXJsfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hc3NlcnRQYWNrYWdlUG9saWN5KGFzc2VydFBhY2thZ2VQb2xpY3kpO1xuY29uc3QgICAgICAgIGFzc2VydFBvbGljeT0oYWxsZWdlZFBvbGljeSk9PntcbmlmKGFsbGVnZWRQb2xpY3k9PT11bmRlZmluZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IHBvbGljeT1PYmplY3QoYWxsZWdlZFBvbGljeSk7XG5hc3NlcnQoXG5hbGxlZ2VkUG9saWN5PT09cG9saWN5JiYhQXJyYXkuaXNBcnJheShwb2xpY3kpLFxuIGBwb2xpY3kgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRQb2xpY3l9YCk7XG5cblxuY29uc3R7cmVzb3VyY2VzLGVudHJ5LGRlZmF1bHRBdHRlbnVhdG9yLC4uLmV4dHJhfT1wb2xpY3k7XG5hc3NlcnQoXG5rZXlzKGV4dHJhKS5sZW5ndGg9PT0wLFxuIGBwb2xpY3kgbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKGtleXMoZXh0cmEpKX1gKTtcblxuXG5hc3NlcnQoXG50eXBlb2YgcmVzb3VyY2VzPT09J29iamVjdCcmJnJlc291cmNlcyE9PW51bGwmJiFpc0FycmF5KHJlc291cmNlcyksXG4gYHBvbGljeS5yZXNvdXJjZXMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke3EocmVzb3VyY2VzKX1gKTtcblxuYXNzZXJ0KFxuIWRlZmF1bHRBdHRlbnVhdG9yfHx0eXBlb2YgZGVmYXVsdEF0dGVudWF0b3I9PT0nc3RyaW5nJyxcbiBgcG9saWN5LmRlZmF1bHRBdHRlbnVhdG9yIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3EoZGVmYXVsdEF0dGVudWF0b3IpfWApO1xuXG5cbmFzc2VydFBhY2thZ2VQb2xpY3koZW50cnksIGBwb2xpY3kuZW50cnlgKTtcblxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBlbnRyaWVzKHJlc291cmNlcykpe1xuYXNzZXJ0UGFja2FnZVBvbGljeSh2YWx1ZSwgYHBvbGljeS5yZXNvdXJjZXNbXCIke2tleX1cIl1gKTtcbiB9XG4gfTskaM2PX29uY2UuYXNzZXJ0UG9saWN5KGFzc2VydFBvbGljeSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwb2xpY3lMb29rdXBIZWxwZXIiOlsicG9saWN5TG9va3VwSGVscGVyIl0sImlzQWxsb3dpbmdFdmVyeXRoaW5nIjpbImlzQWxsb3dpbmdFdmVyeXRoaW5nIl0sImlzQXR0ZW51YXRpb25EZWZpbml0aW9uIjpbImlzQXR0ZW51YXRpb25EZWZpbml0aW9uIl0sImdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbiI6WyJnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24iXSwiYXNzZXJ0UGFja2FnZVBvbGljeSI6WyJhc3NlcnRQYWNrYWdlUG9saWN5Il0sImFzc2VydFBvbGljeSI6WyJhc3NlcnRQb2xpY3kiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAC/dt7A8lAAAPJQAALQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL3BvbGljeS5qc3siaW1wb3J0cyI6WyIuL3BvbGljeS1mb3JtYXQuanMiXSwiZXhwb3J0cyI6WyJBVFRFTlVBVE9SU19DT01QQVJUTUVOVCIsImF0dGVudWF0ZUdsb2JhbHMiLCJhdHRlbnVhdGVNb2R1bGVIb29rIiwiZGVwZW5kZW5jeUFsbG93ZWRCeVBvbGljeSIsImRldGVjdEF0dGVudWF0b3JzIiwiZW5mb3JjZU1vZHVsZVBvbGljeSIsImdldFBvbGljeUZvclBhY2thZ2UiLCJtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbixpc0FsbG93aW5nRXZlcnl0aGluZyxpc0F0dGVudWF0aW9uRGVmaW5pdGlvbixwb2xpY3lMb29rdXBIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCIuL3BvbGljeS1mb3JtYXQuanNcIiwgW1tcImdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvblwiLCBbJGjNj19hID0+IChnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24gPSAkaM2PX2EpXV0sW1wiaXNBbGxvd2luZ0V2ZXJ5dGhpbmdcIiwgWyRozY9fYSA9PiAoaXNBbGxvd2luZ0V2ZXJ5dGhpbmcgPSAkaM2PX2EpXV0sW1wiaXNBdHRlbnVhdGlvbkRlZmluaXRpb25cIiwgWyRozY9fYSA9PiAoaXNBdHRlbnVhdGlvbkRlZmluaXRpb24gPSAkaM2PX2EpXV0sW1wicG9saWN5TG9va3VwSGVscGVyXCIsIFskaM2PX2EgPT4gKHBvbGljeUxvb2t1cEhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtjcmVhdGUsZW50cmllcyx2YWx1ZXMsYXNzaWduLGZyZWV6ZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1cbk9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBBVFRFTlVBVE9SU19DT01QQVJUTUVOVD0nPEFUVEVOVUFUT1JTPic7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLkFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UKEFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UKTtcbmNvbnN0IHNlbGVjdGl2ZUNvcHk9KGZyb20sdG8sbGlzdCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcHJvcHM7XG5pZighbGlzdCl7XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGZyb20pO1xucHJvcHM9b3duS2V5cyhmcm9tKS5maWx0ZXIoKGtleSk9PmRlc2NzW2tleV0uZW51bWVyYWJsZSk7XG4gfWVsc2V7XG5wcm9wcz1saXN0O1xuIH1cbmZvcihsZXQgaW5kZXg9MDtpbmRleDxwcm9wcy5sZW5ndGg7aW5kZXgrPTEpe1xuY29uc3Qga2V5PXByb3BzW2luZGV4XTtcbi8vXG4vL1xudG9ba2V5XT1mcm9tW2tleV07XG4gfVxucmV0dXJuIHRvO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjb2xsZWN0QXR0ZW51YXRvcnM9KGF0dGVudWF0b3JzLHBvbGljeUZyYWdtZW50KT0+e1xuaWYoJ2F0dGVudWF0ZSdpbiBwb2xpY3lGcmFnbWVudCl7XG5hdHRlbnVhdG9ycy5wdXNoKHBvbGljeUZyYWdtZW50LmF0dGVudWF0ZSk7XG4gfVxuZm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyhwb2xpY3lGcmFnbWVudCkpe1xuaWYodHlwZW9mIHZhbHVlPT09J29iamVjdCcmJnZhbHVlIT09bnVsbCl7XG5jb2xsZWN0QXR0ZW51YXRvcnMoYXR0ZW51YXRvcnMsdmFsdWUpO1xuIH1cbiB9XG4gfTtcblxuY29uc3QgYXR0ZW51YXRvcnNDYWNoZT1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRldGVjdEF0dGVudWF0b3JzPShwb2xpY3kpPT57XG5pZighcG9saWN5KXtcbnJldHVybltdO1xuIH1cbmlmKCFhdHRlbnVhdG9yc0NhY2hlLmhhcyhwb2xpY3kpKXtcbmNvbnN0IGF0dGVudWF0b3JzPVtdO1xuaWYocG9saWN5LmRlZmF1bHRBdHRlbnVhdG9yKXtcbmF0dGVudWF0b3JzLnB1c2gocG9saWN5LmRlZmF1bHRBdHRlbnVhdG9yKTtcbiB9XG5jb2xsZWN0QXR0ZW51YXRvcnMoYXR0ZW51YXRvcnMscG9saWN5KTtcbmF0dGVudWF0b3JzQ2FjaGUuc2V0KHBvbGljeSxhdHRlbnVhdG9ycyk7XG4gfVxucmV0dXJuIGF0dGVudWF0b3JzQ2FjaGUuZ2V0KHBvbGljeSk7XG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLmRldGVjdEF0dGVudWF0b3JzKGRldGVjdEF0dGVudWF0b3JzKTtcbmNvbnN0IGdlbmVyYXRlQ2Fub25pY2FsTmFtZT0oe2lzRW50cnk9ZmFsc2UsbmFtZSxwYXRofSk9PntcbmlmKGlzRW50cnkpe1xudGhyb3cgRXJyb3IoJ0VudHJ5IG1vZHVsZSBjYW5ub3QgYmUgaWRlbnRpZmllZCB3aXRoIGEgY2Fub25pY2FsTmFtZScpO1xuIH1cbmlmKG5hbWU9PT1BVFRFTlVBVE9SU19DT01QQVJUTUVOVCl7XG5yZXR1cm4gQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQ7XG4gfVxucmV0dXJuIHBhdGguam9pbignPicpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZXBlbmRlbmN5QWxsb3dlZEJ5UG9saWN5PShuYW1pbmdLaXQscGFja2FnZVBvbGljeSk9PntcbmlmKG5hbWluZ0tpdC5pc0VudHJ5KXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgY2Fub25pY2FsTmFtZT1nZW5lcmF0ZUNhbm9uaWNhbE5hbWUobmFtaW5nS2l0KTtcbnJldHVybiEhcG9saWN5TG9va3VwSGVscGVyKHBhY2thZ2VQb2xpY3ksJ3BhY2thZ2VzJyxjYW5vbmljYWxOYW1lKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLmRlcGVuZGVuY3lBbGxvd2VkQnlQb2xpY3koZGVwZW5kZW5jeUFsbG93ZWRCeVBvbGljeSk7XG5jb25zdCAgICAgICAgZ2V0UG9saWN5Rm9yUGFja2FnZT0obmFtaW5nS2l0LHBvbGljeSk9PntcbmlmKCFwb2xpY3kpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5pZihuYW1pbmdLaXQuaXNFbnRyeSl7XG5yZXR1cm4gcG9saWN5LmVudHJ5O1xuIH1cbmNvbnN0IGNhbm9uaWNhbE5hbWU9Z2VuZXJhdGVDYW5vbmljYWxOYW1lKG5hbWluZ0tpdCk7XG5pZihjYW5vbmljYWxOYW1lPT09QVRURU5VQVRPUlNfQ09NUEFSVE1FTlQpe1xucmV0dXJue1xuZGVmYXVsdEF0dGVudWF0b3I6cG9saWN5LmRlZmF1bHRBdHRlbnVhdG9yLFxucGFja2FnZXM6J2FueSd9O1xuXG4gfVxuaWYocG9saWN5LnJlc291cmNlcyYmcG9saWN5LnJlc291cmNlc1tjYW5vbmljYWxOYW1lXSE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gcG9saWN5LnJlc291cmNlc1tjYW5vbmljYWxOYW1lXTtcbiB9ZWxzZXtcbi8vXG5yZXR1cm4gY3JlYXRlKG51bGwpO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmdldFBvbGljeUZvclBhY2thZ2UoZ2V0UG9saWN5Rm9yUGFja2FnZSk7XG5jb25zdCBnZXRHbG9iYWxzTGlzdD0ocGFja2FnZVBvbGljeSk9PntcbmlmKCFwYWNrYWdlUG9saWN5fHwhcGFja2FnZVBvbGljeS5nbG9iYWxzKXtcbnJldHVybltdO1xuIH1cbnJldHVybiBlbnRyaWVzKHBhY2thZ2VQb2xpY3kuZ2xvYmFscykuXG5maWx0ZXIoKFtfa2V5LHZhbHVlXSk9PnZhbHVlKS5cbm1hcCgoW2tleSxfdnZhbHVlXSk9PmtleSk7XG4gfTtcblxuY29uc3QgR0xPQkFMX0FUVEVOVUFUT1I9J2F0dGVudWF0ZUdsb2JhbHMnO1xuY29uc3QgTU9EVUxFX0FUVEVOVUFUT1I9J2F0dGVudWF0ZU1vZHVsZSc7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpbXBvcnRBdHRlbnVhdG9yRm9yRGVmaW5pdGlvbj1hc3luYyhcbmF0dGVudWF0aW9uRGVmaW5pdGlvbixcbmF0dGVudWF0b3JzUHJvdmlkZXIsXG5hdHRlbnVhdG9yRXhwb3J0TmFtZSk9Plxue1xuaWYoIWF0dGVudWF0b3JzUHJvdmlkZXIpe1xudGhyb3cgRXJyb3IoIGBhdHRlbnVhdG9yc1Byb3ZpZGVyIGlzIHJlcXVpcmVkIHRvIGltcG9ydCBhdHRlbnVhdG9yc2ApO1xuIH1cbmNvbnN0e3NwZWNpZmllcixwYXJhbXMsZGlzcGxheU5hbWV9PWdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbihcbmF0dGVudWF0aW9uRGVmaW5pdGlvbik7XG5cbmNvbnN0IGF0dGVudWF0b3I9YXdhaXQgYXR0ZW51YXRvcnNQcm92aWRlci5pbXBvcnQoc3BlY2lmaWVyKTtcbmlmKCFhdHRlbnVhdG9yW2F0dGVudWF0b3JFeHBvcnROYW1lXSl7XG50aHJvdyBFcnJvcihcbiBgQXR0ZW51YXRvciAke3EoZGlzcGxheU5hbWUpfSBkb2VzIG5vdCBleHBvcnQgJHtxKGF0dGVudWF0b3JFeHBvcnROYW1lKX1gKTtcblxuIH1cbi8vXG5jb25zdCBhdHRlbnVhdGU9YXR0ZW51YXRvclthdHRlbnVhdG9yRXhwb3J0TmFtZV0uYmluZChhdHRlbnVhdG9yLHBhcmFtcyk7XG5yZXR1cm4gYXR0ZW51YXRlO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXI9KFxuY29tcGFydG1lbnRzLFxuY29tcGFydG1lbnREZXNjcmlwdG9ycyk9Plxue1xubGV0IGltcG9ydEF0dGVudWF0b3I7XG5sZXQgZGVmYXVsdEF0dGVudWF0b3I7XG4vL1xuLy9cbmlmKCFjb21wYXJ0bWVudERlc2NyaXB0b3JzW0FUVEVOVUFUT1JTX0NPTVBBUlRNRU5UXSl7XG5pbXBvcnRBdHRlbnVhdG9yPWFzeW5jKCk9PntcbnRocm93IEVycm9yKCBgTm8gYXR0ZW51YXRvcnMgc3BlY2lmaWVkIGluIHBvbGljeWApO1xuIH07XG4gfWVsc2V7XG5kZWZhdWx0QXR0ZW51YXRvcj1cbmNvbXBhcnRtZW50RGVzY3JpcHRvcnNbQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRdLnBvbGljeS5kZWZhdWx0QXR0ZW51YXRvcjtcblxuLy9cbi8vXG4vL1xuLypcblxuXG5cbiAgICAgKi9cbmltcG9ydEF0dGVudWF0b3I9YXN5bmMoYXR0ZW51YXRvclNwZWNpZmllcik9PntcbmlmKCFhdHRlbnVhdG9yU3BlY2lmaWVyKXtcbmlmKCFkZWZhdWx0QXR0ZW51YXRvcil7XG50aHJvdyBFcnJvciggYE5vIGRlZmF1bHQgYXR0ZW51YXRvciBzcGVjaWZpZWQgaW4gcG9saWN5YCk7XG4gfVxuYXR0ZW51YXRvclNwZWNpZmllcj1kZWZhdWx0QXR0ZW51YXRvcjtcbiB9XG5jb25zdHtuYW1lc3BhY2V9PVxuYXdhaXQgY29tcGFydG1lbnRzW0FUVEVOVUFUT1JTX0NPTVBBUlRNRU5UXS5pbXBvcnQoYXR0ZW51YXRvclNwZWNpZmllcik7XG5yZXR1cm4gbmFtZXNwYWNlO1xuIH07XG4gfVxuXG5yZXR1cm57XG5pbXBvcnQ6aW1wb3J0QXR0ZW51YXRvcn07XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlcihtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyKTtcbmFzeW5jIGZ1bmN0aW9uIGF0dGVudWF0ZUdsb2JhbFRoaXMoe1xuYXR0ZW51YXRvcnMsXG5hdHRlbnVhdGlvbkRlZmluaXRpb24sXG5nbG9iYWxUaGlzLFxuZ2xvYmFsc30pXG57XG5jb25zdCBhdHRlbnVhdGU9YXdhaXQgaW1wb3J0QXR0ZW51YXRvckZvckRlZmluaXRpb24oXG5hdHRlbnVhdGlvbkRlZmluaXRpb24sXG5hdHRlbnVhdG9ycyxcbkdMT0JBTF9BVFRFTlVBVE9SKTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuXG4vL1xuXG5jb25zdCByZXN1bHQ9LyogICAgICAgKi9hdHRlbnVhdGUoZ2xvYmFscyxnbG9iYWxUaGlzKTtcbmlmKHR5cGVvZiByZXN1bHQ9PT0nb2JqZWN0JyYmcmVzdWx0IT09bnVsbCl7XG5hc3NpZ24oZ2xvYmFsVGhpcyxyZXN1bHQpO1xuIH1cbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhdHRlbnVhdGVHbG9iYWxzPShcbmdsb2JhbFRoaXMsXG5nbG9iYWxzLFxucGFja2FnZVBvbGljeSxcbmF0dGVudWF0b3JzLFxucGVuZGluZ0pvYnMsXG5uYW1lPSc8dW5rbm93bj4nKT0+XG57XG5sZXQgZnJlZXplR2xvYmFsVGhpc1VubGVzc09wdGVkT3V0PSgpPT57XG5mcmVlemUoZ2xvYmFsVGhpcyk7XG4gfTtcbmlmKHBhY2thZ2VQb2xpY3kmJnBhY2thZ2VQb2xpY3kubm9HbG9iYWxGcmVlemUpe1xuZnJlZXplR2xvYmFsVGhpc1VubGVzc09wdGVkT3V0PSgpPT57IH07XG4gfVxuaWYoIXBhY2thZ2VQb2xpY3l8fGlzQWxsb3dpbmdFdmVyeXRoaW5nKHBhY2thZ2VQb2xpY3kuZ2xvYmFscykpe1xuc2VsZWN0aXZlQ29weShnbG9iYWxzLGdsb2JhbFRoaXMpO1xuZnJlZXplR2xvYmFsVGhpc1VubGVzc09wdGVkT3V0KCk7XG5yZXR1cm47XG4gfVxuaWYoaXNBdHRlbnVhdGlvbkRlZmluaXRpb24ocGFja2FnZVBvbGljeS5nbG9iYWxzKSl7XG5jb25zdCBhdHRlbnVhdGlvbkRlZmluaXRpb249cGFja2FnZVBvbGljeS5nbG9iYWxzO1xuY29uc3R7ZGlzcGxheU5hbWV9PWdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbihhdHRlbnVhdGlvbkRlZmluaXRpb24pO1xuY29uc3QgYXR0ZW51YXRpb25Qcm9taXNlPVByb21pc2UucmVzb2x2ZSgpLy9cbi50aGVuKCgpPT5cbmF0dGVudWF0ZUdsb2JhbFRoaXMoe1xuYXR0ZW51YXRvcnMsXG5hdHRlbnVhdGlvbkRlZmluaXRpb24sXG5nbG9iYWxUaGlzLFxuZ2xvYmFsc30pKS5cblxuXG50aGVuKGZyZWV6ZUdsb2JhbFRoaXNVbmxlc3NPcHRlZE91dCwoZXJyb3IpPT57XG5mcmVlemVHbG9iYWxUaGlzVW5sZXNzT3B0ZWRPdXQoKTtcbnRocm93IEVycm9yKFxuIGBFcnJvciB3aGlsZSBhdHRlbnVhdGluZyBnbG9iYWxzIGZvciAke3EobmFtZSl9IHdpdGggJHtxKFxuZGlzcGxheU5hbWUpXG4gfTogJHtxKGVycm9yLm1lc3NhZ2UpfWAvL1xuKTtcbiB9KTtcbnBlbmRpbmdKb2JzLnB1c2goYXR0ZW51YXRpb25Qcm9taXNlKTtcblxucmV0dXJuO1xuIH1cbmNvbnN0IGxpc3Q9Z2V0R2xvYmFsc0xpc3QocGFja2FnZVBvbGljeSk7XG5zZWxlY3RpdmVDb3B5KGdsb2JhbHMsZ2xvYmFsVGhpcyxsaXN0KTtcbmZyZWV6ZUdsb2JhbFRoaXNVbmxlc3NPcHRlZE91dCgpO1xuIH07XG5cbi8qXG5cblxuICovJGjNj19vbmNlLmF0dGVudWF0ZUdsb2JhbHMoYXR0ZW51YXRlR2xvYmFscyk7XG5jb25zdCBkaWFnbm9zZU1vZHVsZVBvbGljeT0oZXJyb3JIaW50KT0+e1xuaWYoIWVycm9ySGludCl7XG5yZXR1cm4nJztcbiB9XG5yZXR1cm4gYCAoaW5mbzogJHtlcnJvckhpbnR9KWA7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZW5mb3JjZU1vZHVsZVBvbGljeT0oXG5zcGVjaWZpZXIsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG57ZXhpdCxlcnJvckhpbnR9PXt9KT0+XG57XG5jb25zdHtwb2xpY3ksbW9kdWxlcyxsYWJlbH09Y29tcGFydG1lbnREZXNjcmlwdG9yO1xuaWYoIXBvbGljeSl7XG5yZXR1cm47XG4gfVxuXG5pZighZXhpdCl7XG5pZighbW9kdWxlc1tzcGVjaWZpZXJdKXtcbnRocm93IEVycm9yKFxuIGBJbXBvcnRpbmcgJHtxKHNwZWNpZmllcil9IGluICR7cShcbmxhYmVsKVxuIH0gd2FzIG5vdCBhbGxvd2VkIGJ5IHBhY2thZ2VzIHBvbGljeSAke3EoXG5wb2xpY3kucGFja2FnZXMpXG4gfSR7ZGlhZ25vc2VNb2R1bGVQb2xpY3koZXJyb3JIaW50KX1gKTtcblxuIH1cbnJldHVybjtcbiB9XG5cbmlmKCFwb2xpY3lMb29rdXBIZWxwZXIocG9saWN5LCdidWlsdGlucycsc3BlY2lmaWVyKSl7XG50aHJvdyBFcnJvcihcbiBgSW1wb3J0aW5nICR7cShzcGVjaWZpZXIpfSB3YXMgbm90IGFsbG93ZWQgYnkgcG9saWN5IGJ1aWx0aW5zOiR7cShcbnBvbGljeS5idWlsdGlucylcbiB9JHtkaWFnbm9zZU1vZHVsZVBvbGljeShlcnJvckhpbnQpfWApO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZW5mb3JjZU1vZHVsZVBvbGljeShlbmZvcmNlTW9kdWxlUG9saWN5KTtcbmFzeW5jIGZ1bmN0aW9uIGF0dGVudWF0ZU1vZHVsZSh7XG5hdHRlbnVhdG9ycyxcbmF0dGVudWF0aW9uRGVmaW5pdGlvbixcbm9yaWdpbmFsTW9kdWxlUmVjb3JkfSlcbntcbmNvbnN0IGF0dGVudWF0ZT1hd2FpdCBpbXBvcnRBdHRlbnVhdG9yRm9yRGVmaW5pdGlvbihcbmF0dGVudWF0aW9uRGVmaW5pdGlvbixcbmF0dGVudWF0b3JzLFxuTU9EVUxFX0FUVEVOVUFUT1IpO1xuXG5cbi8vXG4vL1xuXG5yZXR1cm4gZnJlZXplKHtcbmltcG9ydHM6b3JpZ2luYWxNb2R1bGVSZWNvcmQuaW1wb3J0cyxcbi8vXG4vL1xuZXhwb3J0czpvcmlnaW5hbE1vZHVsZVJlY29yZC5leHBvcnRzLFxuZXhlY3V0ZToobW9kdWxlRXhwb3J0cyxjb21wYXJ0bWVudCxyZXNvbHZlZEltcG9ydHMpPT57XG5jb25zdCBucz17fTtcbm9yaWdpbmFsTW9kdWxlUmVjb3JkLmV4ZWN1dGUobnMsY29tcGFydG1lbnQscmVzb2x2ZWRJbXBvcnRzKTtcbmNvbnN0IGF0dGVudWF0ZWQ9YXR0ZW51YXRlKG5zKTtcbm1vZHVsZUV4cG9ydHMuZGVmYXVsdD1hdHRlbnVhdGVkO1xuYXNzaWduKG1vZHVsZUV4cG9ydHMsYXR0ZW51YXRlZCk7XG4gfX0pO1xuXG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhdHRlbnVhdGVNb2R1bGVIb29rPWFzeW5jKFxuc3BlY2lmaWVyLFxub3JpZ2luYWxNb2R1bGVSZWNvcmQsXG5wb2xpY3ksXG5hdHRlbnVhdG9ycyk9Plxue1xuY29uc3QgcG9saWN5VmFsdWU9cG9saWN5TG9va3VwSGVscGVyKHBvbGljeSwnYnVpbHRpbnMnLHNwZWNpZmllcik7XG5pZighcG9saWN5fHxwb2xpY3lWYWx1ZT09PXRydWUpe1xucmV0dXJuIG9yaWdpbmFsTW9kdWxlUmVjb3JkO1xuIH1cblxuaWYoIXBvbGljeVZhbHVlKXtcbnRocm93IEVycm9yKFxuIGBBdHRlbnVhdGlvbiBmYWlsZWQgJyR7c3BlY2lmaWVyfScgd2FzIG5vdCBpbiBwb2xpY3kgYnVpbHRpbnM6JHtxKFxucG9saWN5LmJ1aWx0aW5zKVxuIH1gKTtcblxuIH1cbnJldHVybiBhdHRlbnVhdGVNb2R1bGUoe1xuYXR0ZW51YXRvcnMsXG5hdHRlbnVhdGlvbkRlZmluaXRpb246cG9saWN5VmFsdWUsXG5vcmlnaW5hbE1vZHVsZVJlY29yZH0pO1xuXG4gfTskaM2PX29uY2UuYXR0ZW51YXRlTW9kdWxlSG9vayhhdHRlbnVhdGVNb2R1bGVIb29rKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UIjpbIkFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UIl0sImRldGVjdEF0dGVudWF0b3JzIjpbImRldGVjdEF0dGVudWF0b3JzIl0sImRlcGVuZGVuY3lBbGxvd2VkQnlQb2xpY3kiOlsiZGVwZW5kZW5jeUFsbG93ZWRCeVBvbGljeSJdLCJnZXRQb2xpY3lGb3JQYWNrYWdlIjpbImdldFBvbGljeUZvclBhY2thZ2UiXSwibWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlciI6WyJtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyIl0sImF0dGVudWF0ZUdsb2JhbHMiOlsiYXR0ZW51YXRlR2xvYmFscyJdLCJlbmZvcmNlTW9kdWxlUG9saWN5IjpbImVuZm9yY2VNb2R1bGVQb2xpY3kiXSwiYXR0ZW51YXRlTW9kdWxlSG9vayI6WyJhdHRlbnVhdGVNb2R1bGVIb29rIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACPExGRMCQAATAkAAC0AAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9wb3dlcnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzIiwiaXNSZWFkTm93UG93ZXJzIiwidW5wYWNrUmVhZFBvd2VycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuICovXG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZnJlZXplfT1PYmplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYW5vbmljYWxTaGltPWFzeW5jKHBhdGgpPT5wYXRoO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIHVucGFja1JlYWRQb3dlcnM9KHBvd2Vycyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlYWQ7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG1heWJlUmVhZDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgY2Fub25pY2FsO1xuXG5pZih0eXBlb2YgcG93ZXJzPT09J2Z1bmN0aW9uJyl7XG5yZWFkPXBvd2VycztcbiB9ZWxzZXtcbih7cmVhZCxtYXliZVJlYWQsY2Fub25pY2FsfT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9wb3dlcnMpO1xuIH1cblxuaWYoY2Fub25pY2FsPT09dW5kZWZpbmVkKXtcbmNhbm9uaWNhbD1jYW5vbmljYWxTaGltO1xuIH1cblxuaWYobWF5YmVSZWFkPT09dW5kZWZpbmVkKXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xubWF5YmVSZWFkPShwYXRoKT0+XG4vKiAgICAgICAgICAgICAgICAgKi9yZWFkKHBhdGgpLmNhdGNoKChfZXJyb3IpPT51bmRlZmluZWQpO1xuIH1cblxucmV0dXJue1xuLi4ucG93ZXJzLFxucmVhZCxcbm1heWJlUmVhZCxcbmNhbm9uaWNhbH07XG5cbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLnVucGFja1JlYWRQb3dlcnModW5wYWNrUmVhZFBvd2Vycyk7XG5jb25zdCByZXF1aXJlZFJlYWROb3dQb3dlcnNQcm9wcz1mcmVlemUoXG4vKiAgICAgICAgICAgICAgICAqL1snZmlsZVVSTFRvUGF0aCcsJ2lzQWJzb2x1dGUnLCdtYXliZVJlYWROb3cnXSk7XG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNSZWFkTm93UG93ZXJzPSh2YWx1ZSk9PlxuQm9vbGVhbihcbnZhbHVlJiZcbnR5cGVvZiB2YWx1ZT09PSdvYmplY3QnJiZcbnJlcXVpcmVkUmVhZE5vd1Bvd2Vyc1Byb3BzLmV2ZXJ5KFxuKHByb3ApPT5wcm9wIGluIHZhbHVlJiZ0eXBlb2YgdmFsdWVbcHJvcF09PT0nZnVuY3Rpb24nKSk7XG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaXNSZWFkTm93UG93ZXJzKGlzUmVhZE5vd1Bvd2Vycyk7XG5jb25zdCAgICAgICAgZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHM9KHZhbHVlKT0+e1xuaWYoIXZhbHVlfHx0eXBlb2YgdmFsdWU9PT0nZnVuY3Rpb24nKXtcbnJldHVyblsuLi5yZXF1aXJlZFJlYWROb3dQb3dlcnNQcm9wc107XG4gfVxucmV0dXJuIHJlcXVpcmVkUmVhZE5vd1Bvd2Vyc1Byb3BzLmZpbHRlcihcbihwcm9wKT0+IShwcm9wIGluIHZhbHVlKXx8dHlwZW9mIHZhbHVlW3Byb3BdIT09J2Z1bmN0aW9uJyk7XG5cbiB9OyRozY9fb25jZS5maW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyhmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ1bnBhY2tSZWFkUG93ZXJzIjpbInVucGFja1JlYWRQb3dlcnMiXSwiaXNSZWFkTm93UG93ZXJzIjpbImlzUmVhZE5vd1Bvd2VycyJdLCJmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyI6WyJmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFGOc6lAEAAJQBAAAhAAAAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2Vudi1vcHRpb25zLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2Vudi1vcHRpb25zLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJK3R37sDQAA7A0AACsAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjcvc3JjL2Vudi1vcHRpb25zLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIiwiZ2V0RW52aXJvbm1lbnRPcHRpb24iLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IiwibWFrZUVudmlyb25tZW50Q2FwdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cblxuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuY29uc3R7ZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLy9cbi8vXG5jb25zdCB1bmN1cnJ5VGhpcz1cbihmbik9PlxuKHJlY2VpdmVyLC4uLmFyZ3MpPT5cbmFwcGx5KGZuLHJlY2VpdmVyLGFyZ3MpO1xuY29uc3QgYXJyYXlQdXNoPXVuY3VycnlUaGlzKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbmNvbnN0IGFycmF5SW5jbHVkZXM9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKTtcbmNvbnN0IHN0cmluZ1NwbGl0PXVuY3VycnlUaGlzKFN0cmluZy5wcm90b3R5cGUuc3BsaXQpO1xuXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdCBGYWlsPShsaXRlcmFscywuLi5hcmdzKT0+e1xubGV0IG1zZz1saXRlcmFsc1swXTtcbmZvcihsZXQgaT0wO2k8YXJncy5sZW5ndGg7aSs9MSl7XG5tc2c9IGAke21zZ30ke2FyZ3NbaV19JHtsaXRlcmFsc1tpKzFdfWA7XG4gfVxudGhyb3cgRXJyb3IobXNnKTtcbiB9O1xuXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVudmlyb25tZW50Q2FwdG9yPShhR2xvYmFsLGRyb3BOYW1lcz1mYWxzZSk9PntcbmNvbnN0IGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcz1bXTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb249KFxub3B0aW9uTmFtZSxcbmRlZmF1bHRTZXR0aW5nLFxub3B0T3RoZXJWYWx1ZXM9dW5kZWZpbmVkKT0+XG57XG50eXBlb2Ygb3B0aW9uTmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBuYW1lICR7cShvcHRpb25OYW1lKX0gbXVzdCBiZSBhIHN0cmluZy5gO1xudHlwZW9mIGRlZmF1bHRTZXR0aW5nPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIGRlZmF1bHQgc2V0dGluZyAke3EoXG5kZWZhdWx0U2V0dGluZylcbiB9IG11c3QgYmUgYSBzdHJpbmcuYDtcblxuLyogICAgICAgICAgICAgICAgICovXG5sZXQgc2V0dGluZz1kZWZhdWx0U2V0dGluZztcbmNvbnN0IGdsb2JhbFByb2Nlc3M9YUdsb2JhbC5wcm9jZXNzfHx1bmRlZmluZWQ7XG5jb25zdCBnbG9iYWxFbnY9XG50eXBlb2YgZ2xvYmFsUHJvY2Vzcz09PSdvYmplY3QnJiZnbG9iYWxQcm9jZXNzLmVudnx8dW5kZWZpbmVkO1xuaWYodHlwZW9mIGdsb2JhbEVudj09PSdvYmplY3QnKXtcbmlmKG9wdGlvbk5hbWUgaW4gZ2xvYmFsRW52KXtcbmlmKCFkcm9wTmFtZXMpe1xuYXJyYXlQdXNoKGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyxvcHRpb25OYW1lKTtcbiB9XG5jb25zdCBvcHRpb25WYWx1ZT1nbG9iYWxFbnZbb3B0aW9uTmFtZV07XG4vL1xudHlwZW9mIG9wdGlvblZhbHVlPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWVkICR7cShcbm9wdGlvbk5hbWUpXG4gfSwgaWYgcHJlc2VudCwgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUsIGdvdCAke3EoXG5vcHRpb25WYWx1ZSlcbiB9YDtcbnNldHRpbmc9b3B0aW9uVmFsdWU7XG4gfVxuIH1cbm9wdE90aGVyVmFsdWVzPT09dW5kZWZpbmVkfHxcbnNldHRpbmc9PT1kZWZhdWx0U2V0dGluZ3x8XG5hcnJheUluY2x1ZGVzKG9wdE90aGVyVmFsdWVzLHNldHRpbmcpfHxcbkZhaWwgYFVucmVjb2duaXplZCAke3Eob3B0aW9uTmFtZSl9IHZhbHVlICR7cShcbnNldHRpbmcpXG4gfS4gRXhwZWN0ZWQgb25lIG9mICR7cShbZGVmYXVsdFNldHRpbmcsLi4ub3B0T3RoZXJWYWx1ZXNdKX1gO1xucmV0dXJuIHNldHRpbmc7XG4gfTtcbmZyZWV6ZShnZXRFbnZpcm9ubWVudE9wdGlvbik7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldEVudmlyb25tZW50T3B0aW9uc0xpc3Q9KG9wdGlvbk5hbWUpPT57XG5jb25zdCBvcHRpb249Z2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnJyk7XG5yZXR1cm4gZnJlZXplKG9wdGlvbj09PScnP1tdOnN0cmluZ1NwbGl0KG9wdGlvbiwnLCcpKTtcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpO1xuXG5jb25zdCBlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzPShvcHRpb25OYW1lLGVsZW1lbnQpPT5cbmFycmF5SW5jbHVkZXMoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChvcHRpb25OYW1lKSxlbGVtZW50KTtcblxuY29uc3QgZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPSgpPT57XG5yZXR1cm4gZnJlZXplKFsuLi5jYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXNdKTtcbiB9O1xuZnJlZXplKGdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyk7XG5cbnJldHVybiBmcmVlemUoe1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxcbmdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc30pO1xuXG4gfTskaM2PX29uY2UubWFrZUVudmlyb25tZW50Q2FwdG9yKG1ha2VFbnZpcm9ubWVudENhcHRvcik7XG5mcmVlemUobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXN9PVxubWFrZUVudmlyb25tZW50Q2FwdG9yKGdsb2JhbFRoaXMsdHJ1ZSk7JGjNj19vbmNlLmdldEVudmlyb25tZW50T3B0aW9uKGdldEVudmlyb25tZW50T3B0aW9uKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KTskaM2PX29uY2UuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyhlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFbnZpcm9ubWVudENhcHRvciI6WyJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwiZ2V0RW52aXJvbm1lbnRPcHRpb24iOlsiZ2V0RW52aXJvbm1lbnRPcHRpb24iXSwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0Il0sImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABxUQtH5QcAAOUHAAAcAAAAQGVuZG8vZXJyb3JzLXYxLjIuNi9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiRmFpbCIsIlgiLCJhbm5vdGF0ZUVycm9yIiwiYXNzZXJ0IiwiYiIsImJhcmUiLCJtYWtlRXJyb3IiLCJub3RlIiwicSIsInF1b3RlIiwicmVkYWN0ZWQiLCJ0aHJvd1JlZGFjdGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuXG5jb25zdCBnbG9iYWxBc3NlcnQ9Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmlmKGdsb2JhbEFzc2VydD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGluaXRpYWxpemUgQGVuZG8vZXJyb3JzLCBtaXNzaW5nIGdsb2JhbFRoaXMuYXNzZXJ0LCBpbXBvcnQgJ3NlcycgYmVmb3JlICdAZW5kby9lcnJvcnMnYCk7XG5cbiB9XG5cbmNvbnN0IG1pc3Npbmc9LyogICAgICAgICAgICAgICAgKi9bXG4ndHlwZW9mJyxcbidlcnJvcicsXG4nZmFpbCcsXG4nZXF1YWwnLFxuJ3N0cmluZycsXG4nbm90ZScsXG4nZGV0YWlscycsXG4nRmFpbCcsXG4ncXVvdGUnLFxuLy9cbi8vXG4vL1xuLy9cbidtYWtlQXNzZXJ0J10uXG5maWx0ZXIoKG5hbWUpPT5nbG9iYWxBc3NlcnRbbmFtZV09PT11bmRlZmluZWQpO1xuaWYobWlzc2luZy5sZW5ndGg+MCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGluaXRpYWxpemUgQGVuZG8vZXJyb3JzLCBtaXNzaW5nIGdsb2JhbFRoaXMuYXNzZXJ0IG1ldGhvZHMgJHttaXNzaW5nLmpvaW4oXG4nLCAnKVxuIH1gKTtcblxuIH1cblxuLy9cbi8vXG4vL1xuY29uc3R7XG5iYXJlLFxuZGV0YWlsczpyZWRhY3RlZCxcbmVycm9yOm1ha2VFcnJvcixcbkZhaWw6dGhyb3dSZWRhY3RlZCxcbm1ha2VBc3NlcnQ6X29taXR0ZWRNYWtlQXNzZXJ0LFxubm90ZSxcbnF1b3RlLFxuLi4uYXNzZXJ0aW9uc309XG5nbG9iYWxBc3NlcnQ7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4kaM2PX29uY2UucmVkYWN0ZWQocmVkYWN0ZWQpOyRozY9fb25jZS5tYWtlRXJyb3IobWFrZUVycm9yKTskaM2PX29uY2UudGhyb3dSZWRhY3RlZCh0aHJvd1JlZGFjdGVkKTskaM2PX29uY2Uubm90ZShub3RlKTskaM2PX29uY2UucXVvdGUocXVvdGUpO2NvbnN0IGFzc2VydD0odmFsdWUsb3B0RGV0YWlscyxlcnJDb250cnVjdG9yLG9wdGlvbnMpPT5cbmdsb2JhbEFzc2VydCh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk7JGjNj19vbmNlLmFzc2VydChhc3NlcnQpO1xuT2JqZWN0LmFzc2lnbihhc3NlcnQsYXNzZXJ0aW9ucyk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGJhcmVPclF1b3RlPWJhcmV8fHF1b3RlO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLmJhcmVPclF1b3RlKGJhcmVPclF1b3RlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlZGFjdGVkIjpbInJlZGFjdGVkIl0sIlgiOlsicmVkYWN0ZWQiXSwibWFrZUVycm9yIjpbIm1ha2VFcnJvciJdLCJ0aHJvd1JlZGFjdGVkIjpbInRocm93UmVkYWN0ZWQiXSwiRmFpbCI6WyJ0aHJvd1JlZGFjdGVkIl0sIm5vdGUiOlsibm90ZSJdLCJhbm5vdGF0ZUVycm9yIjpbIm5vdGUiXSwicXVvdGUiOlsicXVvdGUiXSwicSI6WyJxdW90ZSJdLCJhc3NlcnQiOlsiYXNzZXJ0Il0sImJhcmUiOlsiYmFyZU9yUXVvdGUiXSwiYiI6WyJiYXJlT3JRdW90ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAfy23EmBAAAJgQAAAjAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYvc3JjL0UuanN7ImltcG9ydHMiOlsiLi90cmFjay10dXJucy5qcyIsIi4vbWVzc2FnZS1icmVha3BvaW50cy5qcyJdLCJleHBvcnRzIjpbImRlZmF1bHQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHJhY2tUdXJucyxtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL3RyYWNrLXR1cm5zLmpzXCIsIFtbXCJ0cmFja1R1cm5zXCIsIFskaM2PX2EgPT4gKHRyYWNrVHVybnMgPSAkaM2PX2EpXV1dXSxbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbmNvbnN0e2RldGFpbHM6WCxxdW90ZTpxLEZhaWwsZXJyb3I6bWFrZUVycm9yfT1hc3NlcnQ7XG5jb25zdHthc3NpZ24sY3JlYXRlfT1PYmplY3Q7XG5cbmNvbnN0IG9uU2VuZD1tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIoJ0VORE9fU0VORF9CUkVBS1BPSU5UUycpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcj17XG5zZXQoX3RhcmdldCxfcHJvcCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5pc0V4dGVuc2libGUoX3RhcmdldCl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbnNldFByb3RvdHlwZU9mKF90YXJnZXQsX3ZhbHVlKXtcbnJldHVybiBmYWxzZTtcbiB9LFxuZGVsZXRlUHJvcGVydHkoX3RhcmdldCxfcHJvcCl7XG5yZXR1cm4gZmFsc2U7XG4gfX07XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVByb3h5SGFuZGxlcj0ocmVjaXBpZW50LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmdldDooX3RhcmdldCxwcm9wZXJ0eUtleSxyZWNlaXZlcik9PntcbnJldHVybiBoYXJkZW4oXG57XG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuaWYodGhpcyE9PXJlY2VpdmVyKXtcbi8vXG5yZXR1cm4gSGFuZGxlZFByb21pc2UucmVqZWN0KFxubWFrZUVycm9yKFxuWCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EocHJvcGVydHlLZXkpfVwiIG1ldGhvZCBvZiBFKCR7cShcbnJlY2lwaWVudClcbiB9KWApKTtcblxuXG4gfVxuXG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5hcHBseU1ldGhvZChyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG4gfVxuLy9cbn1bcHJvcGVydHlLZXldKTtcblxuIH0sXG5hcHBseTooX3RhcmdldCxfdGhpc0FyZyxhcmdBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ0FycmF5KTtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW3Byb3BlcnR5S2V5XSguLi5hcmdzKXtcbi8vXG50aGlzPT09cmVjZWl2ZXJ8fFxuRmFpbCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EoXG5wcm9wZXJ0eUtleSlcbiB9XCIgbWV0aG9kIG9mIEUuc2VuZE9ubHkoJHtxKHJlY2lwaWVudCl9KWA7XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbkhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kU2VuZE9ubHkocmVjaXBpZW50LHByb3BlcnR5S2V5LGFyZ3MpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ3NBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvblNlbmRPbmx5KHJlY2lwaWVudCxhcmdzQXJyYXkpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRUdldFByb3h5SGFuZGxlcj0oeCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5oYXM6KF90YXJnZXQsX3Byb3ApPT50cnVlLFxuZ2V0OihfdGFyZ2V0LHByb3ApPT5IYW5kbGVkUHJvbWlzZS5nZXQoeCxwcm9wKX0pO1xuXG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZUU9KEhhbmRsZWRQcm9taXNlKT0+e1xucmV0dXJuIGhhcmRlbihcbmFzc2lnbihcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuLy9cbih4KT0+aGFyZGVuKG5ldyBQcm94eSgoKT0+eyB9LG1ha2VFUHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldDooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eShjcmVhdGUobnVsbCksbWFrZUVHZXRQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xucmVzb2x2ZTpIYW5kbGVkUHJvbWlzZS5yZXNvbHZlLFxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuc2VuZE9ubHk6KHgpPT5cbi8vXG5oYXJkZW4oXG5uZXcgUHJveHkoKCk9PnsgfSxtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbndoZW46KHgsb25mdWxmaWxsZWQsb25yZWplY3RlZCk9PlxuSGFuZGxlZFByb21pc2UucmVzb2x2ZSh4KS50aGVuKFxuLi4udHJhY2tUdXJucyhbb25mdWxmaWxsZWQsb25yZWplY3RlZF0pKX0pKTtcblxuXG5cblxuIH07XG5cbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDptYWtlRX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNi9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42L3NyYy9sb2NhbC5qc3siaW1wb3J0cyI6WyIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6WyJnZXRNZXRob2ROYW1lcyIsImxvY2FsQXBwbHlGdW5jdGlvbiIsImxvY2FsQXBwbHlNZXRob2QiLCJsb2NhbEdldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsZ2V0UHJvdG90eXBlT2YsZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCBudHlwZW9mPShzcGVjaW1lbik9PnNwZWNpbWVuPT09bnVsbD8nbnVsbCc6dHlwZW9mIHNwZWNpbWVuO1xuXG5jb25zdCBvbkRlbGl2ZXJ5PW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19ERUxJVkVSWV9CUkVBS1BPSU5UUycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzT2JqZWN0PSh2YWwpPT5PYmplY3QodmFsKT09PXZhbDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoZGVzY3MpKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTtcbi8vXG4vL1xuJGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5RnVuY3Rpb24obG9jYWxBcHBseUZ1bmN0aW9uKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlNZXRob2Q9KHJlY2lwaWVudCxtZXRob2ROYW1lLGFyZ3MpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGxvY2FsQXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJncyk7XG4gfVxuaWYocmVjaXBpZW50PT09dW5kZWZpbmVkfHxyZWNpcGllbnQ9PT1udWxsKXtcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGRlbGl2ZXIgJHtxKG1ldGhvZE5hbWUpfSB0byB0YXJnZXQ7IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZuPXJlY2lwaWVudFttZXRob2ROYW1lXTtcbmlmKGZuPT09dW5kZWZpbmVkKXtcbmFzc2VydC5mYWlsKFxuWCBgdGFyZ2V0IGhhcyBubyBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSwgaGFzICR7cShcbmdldE1ldGhvZE5hbWVzKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZnR5cGU9bnR5cGVvZihmbik7XG50eXBlb2YgZm49PT0nZnVuY3Rpb24nfHxcbkZhaWwgYGludm9rZWQgbWV0aG9kICR7cShtZXRob2ROYW1lKX0gaXMgbm90IGEgZnVuY3Rpb247IGl0IGlzIGEgJHtxKFxuZnR5cGUpXG4gfWA7XG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LG1ldGhvZE5hbWUpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkoZm4scmVjaXBpZW50LGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5TWV0aG9kKGxvY2FsQXBwbHlNZXRob2QpO1xuXG5jb25zdCAgICAgICAgbG9jYWxHZXQ9KHQsa2V5KT0+dFtrZXldOyRozY9fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAABjnBM6QwAAOkMAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRozY9fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7aGFzT3duLGZyZWV6ZSxlbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0IGlzSlNPTlJlY29yZD0odmFsKT0+XG50eXBlb2YgdmFsPT09J29iamVjdCcmJnZhbCE9PW51bGwmJiFBcnJheS5pc0FycmF5KHZhbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNpbXBsaWZ5VGFnPSh0YWcpPT57XG5mb3IoY29uc3QgcHJlZml4IG9mWydBbGxlZ2VkOiAnLCdEZWJ1Z05hbWU6ICddKXtcbmlmKHRhZy5zdGFydHNXaXRoKHByZWZpeCkpe1xucmV0dXJuIHRhZy5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiB9XG4gfVxucmV0dXJuIHRhZztcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcj0ob3B0aW9uTmFtZSk9PntcbmxldCBicmVha3BvaW50cz1KU09OLnBhcnNlKGdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJ251bGwnKSk7XG5cbmlmKGJyZWFrcG9pbnRzPT09bnVsbCl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgYnJlYWtwb2ludHNUYWJsZTtcblxuY29uc3QgZ2V0QnJlYWtwb2ludHM9KCk9PmJyZWFrcG9pbnRzO1xuZnJlZXplKGdldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2V0QnJlYWtwb2ludHM9KG5ld0JyZWFrcG9pbnRzPWJyZWFrcG9pbnRzKT0+e1xuaXNKU09OUmVjb3JkKG5ld0JyZWFrcG9pbnRzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbiB0byBiZSBhIEpTT04gYnJlYWtwb2ludHMgcmVjb3JkYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgbmV3QnJlYWtwb2ludHNUYWJsZT17X19wcm90b19fOm51bGx9O1xuXG5mb3IoY29uc3RbdGFnLG1ldGhvZEJQc11vZiBlbnRyaWVzKG5ld0JyZWFrcG9pbnRzKSl7XG50YWc9PT1zaW1wbGlmeVRhZyh0YWcpfHxcbkZhaWwgYEp1c3QgdXNlIHNpbXBsZSB0YWcgJHtxKHNpbXBsaWZ5VGFnKHRhZykpfSByYXRoZXIgdGhhbiAke3EodGFnKX1gO1xuaXNKU09OUmVjb3JkKG1ldGhvZEJQcyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EoXG50YWcpXG4gfSB0byBiZSBhIEpTT04gbWV0aG9kcyBicmVha3BvaW50cyByZWNvcmRgO1xuZm9yKGNvbnN0W21ldGhvZE5hbWUsY291bnRdb2YgZW50cmllcyhtZXRob2RCUHMpKXtcbmNvdW50PT09JyonfHxcbnR5cGVvZiBjb3VudD09PSdudW1iZXInJiZcbk51bWJlci5pc1NhZmVJbnRlZ2VyKGNvdW50KSYmXG5jb3VudD49MHx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cSh0YWcpfS4ke3EoXG5tZXRob2ROYW1lKVxuIH0gdG8gYmUgXCIqXCIgb3IgYSBub24tbmVnYXRpdmUgaW50ZWdlcmA7XG5cbmNvbnN0IGNsYXNzQlBzPWhhc093bihuZXdCcmVha3BvaW50c1RhYmxlLG1ldGhvZE5hbWUpP1xubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXTpcbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV09e1xuLy9cbl9fcHJvdG9fXzpudWxsfTtcblxuY2xhc3NCUHNbdGFnXT1jb3VudDtcbiB9XG4gfVxuYnJlYWtwb2ludHM9bmV3QnJlYWtwb2ludHM7XG5icmVha3BvaW50c1RhYmxlPW5ld0JyZWFrcG9pbnRzVGFibGU7XG4gfTtcbmZyZWV6ZShzZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNob3VsZEJyZWFrcG9pbnQ9KHJlY2lwaWVudCxtZXRob2ROYW1lKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBjbGFzc0JQcz1icmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdfHxicmVha3BvaW50c1RhYmxlWycqJ107XG5pZihjbGFzc0JQcz09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxubGV0IHRhZz1zaW1wbGlmeVRhZyhyZWNpcGllbnRbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG5sZXQgY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnRhZz0nKic7XG5jb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5pZihjb3VudD09PScqJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjb3VudD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuYXNzZXJ0KHR5cGVvZiBjb3VudD09PSdudW1iZXInJiZjb3VudD49MSk7XG5jbGFzc0JQc1t0YWddPWNvdW50LTE7XG5yZXR1cm4gZmFsc2U7XG4gfTtcbmZyZWV6ZShzaG91bGRCcmVha3BvaW50KTtcblxuY29uc3QgYnJlYWtwb2ludFRlc3Rlcj1mcmVlemUoe1xuZ2V0QnJlYWtwb2ludHMsXG5zZXRCcmVha3BvaW50cyxcbnNob3VsZEJyZWFrcG9pbnR9KTtcblxuYnJlYWtwb2ludFRlc3Rlci5zZXRCcmVha3BvaW50cygpO1xucmV0dXJuIGJyZWFrcG9pbnRUZXN0ZXI7XG4gfTskaM2PX29uY2UubWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcik7XG5mcmVlemUobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42L3NyYy9uby1zaGltLmpzeyJpbXBvcnRzIjpbIi4vRS5qcyIsIi4vZXhwb3J0cy5qcyJdLCJleHBvcnRzIjpbIkUiLCJIYW5kbGVkUHJvbWlzZSJdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VFOyRozY9faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKG1ha2VFID0gJGjNj19hKV1dXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgaHA9SGFuZGxlZFByb21pc2U7JGjNj19vbmNlLmhwKGhwKTtcbmNvbnN0ICAgICAgICBFPW1ha2VFKGhwKTskaM2PX29uY2UuRShFKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkhhbmRsZWRQcm9taXNlIjpbImhwIl0sIkUiOlsiRSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACGqKbHXwkAAF8JAAAtAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYvc3JjL3RyYWNrLXR1cm5zLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsidHJhY2tUdXJucyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IGhpZGRlblByaW9yRXJyb3I7XG5sZXQgaGlkZGVuQ3VycmVudFR1cm49MDtcbmxldCBoaWRkZW5DdXJyZW50RXZlbnQ9MDtcblxuLy9cbmNvbnN0IFZFUkJPU0U9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCd0cmFjay10dXJucycpO1xuXG4vL1xuLy9cbmNvbnN0IEVOQUJMRUQ9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignVFJBQ0tfVFVSTlMnLCdkaXNhYmxlZCcsWydlbmFibGVkJ10pPT09J2VuYWJsZWQnO1xuXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBhZGRSZWplY3Rpb25Ob3RlPShkZXRhaWxzTm90ZSk9PihyZWFzb24pPT57XG5pZihyZWFzb24gaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKHJlYXNvbixkZXRhaWxzTm90ZSk7XG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnUkVKRUNURUQgYXQgdG9wIG9mIGV2ZW50IGxvb3AnLHJlYXNvbik7XG4gfVxuIH07XG5cbmNvbnN0IHdyYXBGdW5jdGlvbj1cbihmdW5jLHNlbmRpbmdFcnJvcixYKT0+XG4oLi4uYXJncyk9PntcbmhpZGRlblByaW9yRXJyb3I9c2VuZGluZ0Vycm9yO1xuaGlkZGVuQ3VycmVudFR1cm4rPTE7XG5oaWRkZW5DdXJyZW50RXZlbnQ9MDtcbnRyeXtcbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbmlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUoXG5lcnIsXG5YIGBUaHJvd24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1RIUk9XTiB0byB0b3Agb2YgZXZlbnQgbG9vcCcsZXJyKTtcbiB9XG50aHJvdyBlcnI7XG4gfVxuLy9cbmNvbnN0IGRldGFpbHNOb3RlPVggYFJlamVjdGlvbiBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWA7XG5Qcm9taXNlLnJlc29sdmUocmVzdWx0KS5jYXRjaChhZGRSZWplY3Rpb25Ob3RlKGRldGFpbHNOb3RlKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH1maW5hbGx5e1xuaGlkZGVuUHJpb3JFcnJvcj11bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRyYWNrVHVybnM9KGZ1bmNzKT0+e1xuaWYoIUVOQUJMRUR8fHR5cGVvZiBnbG9iYWxUaGlzPT09J3VuZGVmaW5lZCd8fCFnbG9iYWxUaGlzLmFzc2VydCl7XG5yZXR1cm4gZnVuY3M7XG4gfVxuY29uc3R7ZGV0YWlsczpYLG5vdGU6YW5ub3RhdGVFcnJvcn09Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmhpZGRlbkN1cnJlbnRFdmVudCs9MTtcbmNvbnN0IHNlbmRpbmdFcnJvcj1FcnJvcihcbiBgRXZlbnQ6ICR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG5pZihoaWRkZW5QcmlvckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Ioc2VuZGluZ0Vycm9yLFggYENhdXNlZCBieTogJHtoaWRkZW5QcmlvckVycm9yfWApO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICovXG5mdW5jcy5tYXAoKGZ1bmMpPT5mdW5jJiZ3cmFwRnVuY3Rpb24oZnVuYyxzZW5kaW5nRXJyb3IsWCkpKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNi91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9sb2NhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2xvY2FsLmpzIjpbWyJnZXRNZXRob2ROYW1lcyIsImdldE1ldGhvZE5hbWVzIl1dLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjpbWyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiLCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGnwGZ8zCgAAMwoAADUAAABAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMC9zcmMvY29tcGFydG1lbnQtd3JhcHBlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsid3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCwgJ25hbWUnLCB7dmFsdWU6IFwid3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnRcIn0pOyRozY9fb25jZS53cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCh3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCk7ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgY29tcGFydG1lbnRPcHRpb25zPSguLi5hcmdzKT0+e1xuaWYoYXJncy5sZW5ndGg9PT0wKXtcbnJldHVybnt9O1xuIH1cbmlmKFxuYXJncy5sZW5ndGg9PT0xJiZcbnR5cGVvZiBhcmdzWzBdPT09J29iamVjdCcmJlxuYXJnc1swXSE9PW51bGwmJlxuJ19fb3B0aW9uc19fJ2luIGFyZ3NbMF0pXG57XG5jb25zdHtfX29wdGlvbnNfXywuLi5vcHRpb25zfT1hcmdzWzBdO1xuYXNzZXJ0KFxuX19vcHRpb25zX189PT10cnVlLFxuIGBDb21wYXJ0bWVudCBjb25zdHJ1Y3RvciBvbmx5IHN1cHBvcnRzIHRydWUgX19vcHRpb25zX18gc2lnaWwsIGdvdCAke19fb3B0aW9uc19ffWApO1xuXG5yZXR1cm4gb3B0aW9ucztcbiB9ZWxzZXtcbmNvbnN0W1xuZ2xvYmFscz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICove30sXG5tb2R1bGVzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICove30sXG5vcHRpb25zPXt9XT1cbmFyZ3M7XG5hc3NlcnQuZXF1YWwoXG5vcHRpb25zLm1vZHVsZXMsXG51bmRlZmluZWQsXG4gYENvbXBhcnRtZW50IGNvbnN0cnVjdG9yIG11c3QgcmVjZWl2ZSBlaXRoZXIgYSBtb2R1bGUgbWFwIGFyZ3VtZW50IG9yIG1vZHVsZXMgb3B0aW9uLCBub3QgYm90aGApO1xuXG5hc3NlcnQuZXF1YWwoXG5vcHRpb25zLmdsb2JhbHMsXG51bmRlZmluZWQsXG4gYENvbXBhcnRtZW50IGNvbnN0cnVjdG9yIG11c3QgcmVjZWl2ZSBlaXRoZXIgZ2xvYmFscyBhcmd1bWVudCBvciBvcHRpb24sIG5vdCBib3RoYCk7XG5cbnJldHVybntcbi4uLm9wdGlvbnMsXG5nbG9iYWxzLFxubW9kdWxlc307XG5cbiB9XG4gfTtcblxuZnVuY3Rpb24gICAgICAgIHdyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50KFxuT2xkQ29tcGFydG1lbnQsXG5pbmVzY2FwYWJsZVRyYW5zZm9ybXMsXG5pbmVzY2FwYWJsZUdsb2JhbFByb3BlcnRpZXMpXG57XG4vL1xuLy9cbi8vXG5jb25zdCBOZXdDb21wYXJ0bWVudD1mdW5jdGlvbiBDb21wYXJ0bWVudCguLi5hcmdzKXtcbmNvbnN0e3RyYW5zZm9ybXM6b2xkVHJhbnNmb3Jtcz1bXSwuLi5vdGhlck9wdGlvbnN9PVxuY29tcGFydG1lbnRPcHRpb25zKC4uLmFyZ3MpO1xuY29uc3QgbmV3VHJhbnNmb3Jtcz1bLi4ub2xkVHJhbnNmb3JtcywuLi5pbmVzY2FwYWJsZVRyYW5zZm9ybXNdO1xuY29uc3QgbmV3T3B0aW9ucz17XG4uLi5vdGhlck9wdGlvbnMsXG50cmFuc2Zvcm1zOm5ld1RyYW5zZm9ybXMsXG5fX29wdGlvbnNfXzp0cnVlfTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuaWYobmV3LnRhcmdldD09PXVuZGVmaW5lZCl7XG4vL1xudGhyb3cgRXJyb3IoJ0NvbXBhcnRtZW50IG11c3QgYmUgY2FsbGVkIGFzIGEgY29uc3RydWN0b3InKTtcbiB9XG5cbi8vXG5cbmNvbnN0IGM9UmVmbGVjdC5jb25zdHJ1Y3QoT2xkQ29tcGFydG1lbnQsW25ld09wdGlvbnNdLG5ldy50YXJnZXQpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYy5nbG9iYWxUaGlzLkNvbXBhcnRtZW50PU5ld0NvbXBhcnRtZW50O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5mb3IoY29uc3QgcHJvcCBvZiBSZWZsZWN0Lm93bktleXMoaW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzKSl7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoYy5nbG9iYWxUaGlzLHByb3Ase1xudmFsdWU6aW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzW3Byb3BdLFxud3JpdGFibGU6dHJ1ZSxcbi8vXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOnRydWV9KTtcblxuIH1cblxucmV0dXJuIGM7XG4gfTtcblxuLy9cbk5ld0NvbXBhcnRtZW50LnByb3RvdHlwZT1PbGRDb21wYXJ0bWVudC5wcm90b3R5cGU7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5yZXR1cm4gTmV3Q29tcGFydG1lbnQ7XG4gfVxuXG4vL1xuLy9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IndyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50IjpbIndyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABzGkF4jDAAAIwwAACcAAABAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMC9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1hcmNoaXZlLmpzIiwiQGVuZG8vYmFzZTY0IiwiQGVuZG8vZXJyb3JzIiwiLi9jb21wYXJ0bWVudC13cmFwcGVyLmpzIl0sImV4cG9ydHMiOlsiaW1wb3J0QnVuZGxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlQXJjaGl2ZSxkZWNvZGVCYXNlNjQsRmFpbCx3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtYXJjaGl2ZS5qc1wiLCBbW1wicGFyc2VBcmNoaXZlXCIsIFskaM2PX2EgPT4gKHBhcnNlQXJjaGl2ZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Jhc2U2NFwiLCBbW1wiZGVjb2RlQmFzZTY0XCIsIFskaM2PX2EgPT4gKGRlY29kZUJhc2U2NCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9jb21wYXJ0bWVudC13cmFwcGVyLmpzXCIsIFtbXCJ3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudFwiLCBbJGjNj19hID0+ICh3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGltcG9ydEJ1bmRsZSwgJ25hbWUnLCB7dmFsdWU6IFwiaW1wb3J0QnVuZGxlXCJ9KTskaM2PX29uY2UuaW1wb3J0QnVuZGxlKGltcG9ydEJ1bmRsZSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG5cbmFzeW5jIGZ1bmN0aW9uICAgICAgICBpbXBvcnRCdW5kbGUoYnVuZGxlLG9wdGlvbnM9e30scG93ZXJzPXt9KXtcbmF3YWl0IG51bGw7XG5jb25zdHtcbmJ1bmRsZVVybD11bmRlZmluZWQsXG5maWxlUHJlZml4LFxuZW5kb3dtZW50czpvcHRFbmRvd21lbnRzPXt9LFxuLy9cbi8vXG50cmFuc2Zvcm1zPVtdLFxuaW5lc2NhcGFibGVUcmFuc2Zvcm1zPVtdLFxuaW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzPXt9LFxuZXhwZWN0ZWRTaGE1MTI9dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdHtcbmNvbXB1dGVTaGE1MTI9dW5kZWZpbmVkLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uPXVuZGVmaW5lZCxcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbj11bmRlZmluZWR9PVxucG93ZXJzO1xuY29uc3QgZW5kb3dtZW50cz17XG5UZXh0RW5jb2RlcixcblRleHREZWNvZGVyLFxuVVJMOmdsb2JhbFRoaXMuVVJMLC8vXG5CYXNlNjQ6Z2xvYmFsVGhpcy5CYXNlNjQsLy9cbmF0b2I6Z2xvYmFsVGhpcy5hdG9iLFxuYnRvYTpnbG9iYWxUaGlzLmJ0b2EsXG4uLi5vcHRFbmRvd21lbnRzfTtcblxuXG5sZXQgQ29tcGFydG1lbnRUb1VzZT1Db21wYXJ0bWVudDtcbmlmKFxuaW5lc2NhcGFibGVUcmFuc2Zvcm1zLmxlbmd0aHx8XG5PYmplY3Qua2V5cyhpbmVzY2FwYWJsZUdsb2JhbFByb3BlcnRpZXMpLmxlbmd0aClcbntcbi8vXG5Db21wYXJ0bWVudFRvVXNlPXdyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50KFxuQ29tcGFydG1lbnQsXG5pbmVzY2FwYWJsZVRyYW5zZm9ybXMsXG5pbmVzY2FwYWJsZUdsb2JhbFByb3BlcnRpZXMpO1xuXG4gfVxuXG5sZXQgY29tcGFydG1lbnQ7XG5cbmNvbnN0e21vZHVsZUZvcm1hdH09YnVuZGxlO1xuaWYobW9kdWxlRm9ybWF0PT09J2VuZG9aaXBCYXNlNjQnKXtcbmNvbnN0e2VuZG9aaXBCYXNlNjR9PWJ1bmRsZTtcbmNvbnN0IGJ5dGVzPWRlY29kZUJhc2U2NChlbmRvWmlwQmFzZTY0KTtcbmNvbnN0IGFyY2hpdmU9YXdhaXQgcGFyc2VBcmNoaXZlKGJ5dGVzLGJ1bmRsZVVybCx7XG5jb21wdXRlU2hhNTEyLFxuZXhwZWN0ZWRTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb259KTtcblxuLy9cbi8vXG5jb25zdHtuYW1lc3BhY2V9PWF3YWl0IGFyY2hpdmVbJ2ltcG9ydCddKHtcbmdsb2JhbHM6ZW5kb3dtZW50cyxcbl9fc2hpbVRyYW5zZm9ybXNfXzp0cmFuc2Zvcm1zLFxuLy9cbkNvbXBhcnRtZW50OkNvbXBhcnRtZW50VG9Vc2V9KTtcblxuLy9cbnJldHVybiBuYW1lc3BhY2U7XG4gfVxuXG5sZXR7c291cmNlfT1idW5kbGU7XG5jb25zdHtzb3VyY2VNYXB9PWJ1bmRsZTtcbmlmKG1vZHVsZUZvcm1hdD09PSdnZXRFeHBvcnQnKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuc291cmNlPSBgKCR7c291cmNlfSlcXG4ke3NvdXJjZU1hcHx8Jyd9YDtcbiB9ZWxzZSBpZihtb2R1bGVGb3JtYXQ9PT0nbmVzdGVkRXZhbHVhdGUnKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5lbmRvd21lbnRzLm5lc3RlZEV2YWx1YXRlPShzcmMpPT5jb21wYXJ0bWVudC5ldmFsdWF0ZShzcmMpO1xuc291cmNlPSBgKCR7c291cmNlfSlcXG4ke3NvdXJjZU1hcHx8Jyd9YDtcbiB9ZWxzZSBpZihtb2R1bGVGb3JtYXQ9PT0nZW5kb1NjcmlwdCcpe1xuLy9cbiB9ZWxzZXtcbkZhaWwgYHVucmVjb2duaXplZCBtb2R1bGVGb3JtYXQgJyR7bW9kdWxlRm9ybWF0fSdgO1xuIH1cblxuY29tcGFydG1lbnQ9bmV3IENvbXBhcnRtZW50VG9Vc2UoZW5kb3dtZW50cyx7fSx7dHJhbnNmb3Jtc30pO1xuaGFyZGVuKGNvbXBhcnRtZW50Lmdsb2JhbFRoaXMpO1xuY29uc3QgcmVzdWx0PWNvbXBhcnRtZW50LmV2YWx1YXRlKHNvdXJjZSk7XG5pZihtb2R1bGVGb3JtYXQ9PT0nZW5kb1NjcmlwdCcpe1xuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH1lbHNle1xuLy9cbmNvbnN0IG5hbWVzcGFjZT1yZXN1bHQoZmlsZVByZWZpeCk7XG4vL1xucmV0dXJuIG5hbWVzcGFjZTtcbiB9XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuKi9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImltcG9ydEJ1bmRsZSI6WyJpbXBvcnRCdW5kbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuIFp8HQHAAB0BwAAHQAAAEBlbmRvL21hcnNoYWwtdjEuNS40L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vc3JjL21hcnNoYWwuanMiLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIiwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiLCIuL3NyYy9yYW5rT3JkZXIuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsInBhcnNlIiwicGFyc2UiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1wiLCBbXV0sW1wiLi9zcmMvZW5jb2RlUGFzc2FibGUuanNcIiwgW11dLFtcIi4vc3JjL3JhbmtPcmRlci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOltbIlFDTEFTUyIsIlFDTEFTUyJdXSwiLi9zcmMvbWFyc2hhbC5qcyI6W1sibWFrZU1hcnNoYWwiLCJtYWtlTWFyc2hhbCJdXSwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOltbInN0cmluZ2lmeSIsInN0cmluZ2lmeSJdLFsicGFyc2UiLCJwYXJzZSJdXSwiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOltbImRlY29kZVRvSnVzdGluIiwiZGVjb2RlVG9KdXN0aW4iXV0sIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjpbWyJtYWtlUGFzc2FibGVLaXQiLCJtYWtlUGFzc2FibGVLaXQiXSxbIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSJdLFsibWFrZURlY29kZVBhc3NhYmxlIiwibWFrZURlY29kZVBhc3NhYmxlIl0sWyJpc0VuY29kZWRSZW1vdGFibGUiLCJpc0VuY29kZWRSZW1vdGFibGUiXSxbInplcm9QYWQiLCJ6ZXJvUGFkIl0sWyJyZWNvcmROYW1lcyIsInJlY29yZE5hbWVzIl0sWyJyZWNvcmRWYWx1ZXMiLCJyZWNvcmRWYWx1ZXMiXV0sIi4vc3JjL3JhbmtPcmRlci5qcyI6W1sidHJpdmlhbENvbXBhcmF0b3IiLCJ0cml2aWFsQ29tcGFyYXRvciJdLFsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiXSxbImNvbXBhcmVSYW5rIiwiY29tcGFyZVJhbmsiXSxbImlzUmFua1NvcnRlZCIsImlzUmFua1NvcnRlZCJdLFsic29ydEJ5UmFuayIsInNvcnRCeVJhbmsiXSxbImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVBbnRpUmFuayJdLFsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCJdLFsiZ2V0UGFzc1N0eWxlQ292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciJdLFsiaW50ZXJzZWN0UmFua0NvdmVycyIsImludGVyc2VjdFJhbmtDb3ZlcnMiXSxbInVuaW9uUmFua0NvdmVycyIsInVuaW9uUmFua0NvdmVycyJdXSwiQGVuZG8vcGFzcy1zdHlsZSI6W1siZGVlcGx5RnVsZmlsbGVkIiwiZGVlcGx5RnVsZmlsbGVkIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAI14vbTUMAAE1DAAAqAAAAQGVuZG8vbWFyc2hhbC12MS41LjQvc3JjL2VuY29kZVBhc3NhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJpc0VuY29kZWRSZW1vdGFibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlUGFzc2FibGVLaXQiLCJwYXNzU3R5bGVQcmVmaXhlcyIsInJlY29yZE5hbWVzIiwicmVjb3JkVmFsdWVzIiwiemVyb1BhZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixhc3NlcnRSZWNvcmQsaXNFcnJvckxpa2UsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxiLHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImFzc2VydFJlY29yZFwiLCBbJGjNj19hID0+IChhc3NlcnRSZWNvcmQgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJiXCIsIFskaM2PX2EgPT4gKGIgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7ZnJvbUVudHJpZXMsaXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8vXG5jb25zdCByQzA9L1tcXHgwMC1cXHgxRl0vO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdldFN1ZmZpeD0oc3RyLGluZGV4KT0+aW5kZXg9PT0wP3N0cjpzdHIuc3Vic3RyaW5nKGluZGV4KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcmVjb3JkTmFtZXM9KHJlY29yZCk9PlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4oLyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlY29yZCkuc29ydCgpLnJldmVyc2UoKSk7JGjNj19vbmNlLnJlY29yZE5hbWVzKHJlY29yZE5hbWVzKTtcbmhhcmRlbihyZWNvcmROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZFZhbHVlcz0ocmVjb3JkLG5hbWVzKT0+XG5oYXJkZW4obmFtZXMubWFwKChuYW1lKT0+cmVjb3JkW25hbWVdKSk7JGjNj19vbmNlLnJlY29yZFZhbHVlcyhyZWNvcmRWYWx1ZXMpO1xuaGFyZGVuKHJlY29yZFZhbHVlcyk7XG5cbmNvbnN0IHplcm9lcz1BcnJheSgxNikuXG5maWxsKHVuZGVmaW5lZCkuXG5tYXAoKF8saSk9PicwJy5yZXBlYXQoaSkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgemVyb1BhZD0obixzaXplKT0+e1xuY29uc3QgblN0cj0gYCR7bn1gO1xuY29uc3QgZmlsbExlbj1zaXplLW5TdHIubGVuZ3RoO1xuaWYoZmlsbExlbj09PTApcmV0dXJuIG5TdHI7XG5hc3NlcnQoZmlsbExlbj4wJiZmaWxsTGVuPHplcm9lcy5sZW5ndGgpO1xucmV0dXJuIGAke3plcm9lc1tmaWxsTGVuXX0ke25TdHJ9YDtcbiB9OyRozY9fb25jZS56ZXJvUGFkKHplcm9QYWQpO1xuaGFyZGVuKHplcm9QYWQpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGFzTnVtYmVyPW5ldyBGbG9hdDY0QXJyYXkoMSk7XG5jb25zdCBhc0JpdHM9bmV3IEJpZ1VpbnQ2NEFycmF5KGFzTnVtYmVyLmJ1ZmZlcik7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbmNvbnN0IENhbm9uaWNhbE5hTkJpdHM9J2ZmZjgwMDAwMDAwMDAwMDAnO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmluYXJ5NjQ9KG4pPT57XG4vL1xuaWYoaXMobiwtMCkpe1xubj0wO1xuIH1lbHNlIGlmKGlzKG4sTmFOKSl7XG5yZXR1cm4gYGYke0Nhbm9uaWNhbE5hTkJpdHN9YDtcbiB9XG5hc051bWJlclswXT1uO1xubGV0IGJpdHM9YXNCaXRzWzBdO1xuaWYobjwwKXtcbmJpdHNePTB4ZmZmZmZmZmZmZmZmZmZmZm47XG4gfWVsc2V7XG5iaXRzXj0weDgwMDAwMDAwMDAwMDAwMDBuO1xuIH1cbnJldHVybiBgZiR7emVyb1BhZChiaXRzLnRvU3RyaW5nKDE2KSwxNil9YDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVCaW5hcnk2ND0oZW5jb2RlZCxza2lwPTApPT57XG5lbmNvZGVkLmNoYXJBdChza2lwKT09PSdmJ3x8RmFpbCBgRW5jb2RlZCBudW1iZXIgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IGJpdHM9QmlnSW50KCBgMHgke2dldFN1ZmZpeChlbmNvZGVkLHNraXArMSl9YCk7XG5pZihlbmNvZGVkLmNoYXJBdChza2lwKzEpPCc4Jyl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5hc0JpdHNbMF09Yml0cztcbmNvbnN0IHJlc3VsdD1hc051bWJlclswXTtcbiFpcyhyZXN1bHQsLTApfHxcbkZhaWwgYFVuZXhwZWN0ZWQgbmVnYXRpdmUgemVybzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVCaWdJbnQ9KG4pPT57XG5jb25zdCBhYnM9bjwwbj8tbjpuO1xuY29uc3QgbkRpZ2l0cz1hYnMudG9TdHJpbmcoKS5sZW5ndGg7XG5jb25zdCBsRGlnaXRzPW5EaWdpdHMudG9TdHJpbmcoKS5sZW5ndGg7XG5pZihuPDBuKXtcbnJldHVybiBgbiR7XG4vL1xuLy9cbicjJy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbigxMCoqbERpZ2l0cy1uRGlnaXRzKS50b1N0cmluZygpLnBhZFN0YXJ0KGxEaWdpdHMsJzAnKVxuIH06JHtcbi8vXG4oMTBuKipCaWdJbnQobkRpZ2l0cykrbikudG9TdHJpbmcoKS5wYWRTdGFydChuRGlnaXRzLCcwJylcbiB9YDtcbiB9ZWxzZXtcbnJldHVybiBgcCR7XG4vL1xuLy9cbid+Jy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbm5EaWdpdHNcbiB9OiR7XG4vL1xublxuIH1gO1xuIH1cbiB9O1xuXG5jb25zdCByQmlnSW50UGF5bG9hZD0vKFswLTldKykoOihbMC05XSskfCl8KS9zO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmlnSW50PShlbmNvZGVkKT0+e1xuY29uc3QgdHlwZVByZWZpeD1lbmNvZGVkLmNoYXJBdCgwKTsvL1xudHlwZVByZWZpeD09PSdwJ3x8XG50eXBlUHJlZml4PT09J24nfHxcbkZhaWwgYEVuY29kZWQgYmlnaW50IGV4cGVjdGVkOiAke2VuY29kZWR9YDtcblxuY29uc3R7XG5pbmRleDpsRGlnaXRzLFxuMTpzbkRpZ2l0cyxcbjI6dGFpbCxcbjM6ZGlnaXRzfT1cbmVuY29kZWQubWF0Y2gockJpZ0ludFBheWxvYWQpfHxGYWlsIGBEaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbnNuRGlnaXRzLmxlbmd0aD09PWxEaWdpdHN8fFxuRmFpbCBgVW5hcnktcHJlZml4ZWQgZGVjaW1hbCBkaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5sZXQgbkRpZ2l0cz1wYXJzZUludChzbkRpZ2l0cywxMCk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubkRpZ2l0cz0xMCoqLyogICAgICAgICAgICAgICAgICovbERpZ2l0cy1uRGlnaXRzO1xuIH1cblxudGFpbC5jaGFyQXQoMCk9PT0nOid8fEZhaWwgYFNlcGFyYXRvciBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5kaWdpdHMubGVuZ3RoPT09bkRpZ2l0c3x8XG5GYWlsIGBGaXhlZC1sZW5ndGggZGlnaXQgc2VxdWVuY2UgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG49QmlnSW50KGRpZ2l0cyk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubj0tKDEwbioqQmlnSW50KG5EaWdpdHMpLW4pO1xuIH1cblxucmV0dXJuIG47XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdHJpbmdFc2NhcGVzPUFycmF5KDB4MjIpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGNwKT0+e1xuc3dpdGNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApKXtcbmNhc2UnICc6XG5yZXR1cm4nIV8nO1xuY2FzZSchJzpcbnJldHVybichfCc7XG5kZWZhdWx0OlxucmV0dXJuIGAhJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKzB4MjEpfWA7fVxuXG4gfSk7XG5zdHJpbmdFc2NhcGVzWydeJy5jaGFyQ29kZUF0KDApXT0nX0AnO1xuc3RyaW5nRXNjYXBlc1snXycuY2hhckNvZGVBdCgwKV09J19fJztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeD0oc3RyKT0+XG5zdHIucmVwbGFjZSgvW1xcMC0hXl9dL2csKGNoKT0+c3RyaW5nRXNjYXBlc1tjaC5jaGFyQ29kZUF0KDApXSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT57XG5yZXR1cm4gZW5jb2RlZC5yZXBsYWNlKC8oW1xcMC0hX10pKC58XFxuKT8vZywoZXNjLHByZWZpeCxzdWZmaXgpPT57XG5zd2l0Y2goZXNjKXtcbmNhc2UnIV8nOlxucmV0dXJuJyAnO1xuY2FzZSchfCc6XG5yZXR1cm4nISc7XG5jYXNlJ19AJzpcbnJldHVybideJztcbmNhc2UnX18nOlxucmV0dXJuJ18nO1xuZGVmYXVsdDp7XG5jb25zdCBjaD0vKiAgICAgICAgICAgICAgICAgKi9zdWZmaXg7XG4vL1xuLy9cbnByZWZpeD09PSchJyYmc3VmZml4IT09dW5kZWZpbmVkJiZjaD49JyEnJiZjaDw9J0AnfHxcbkZhaWwgYGludmFsaWQgc3RyaW5nIGVzY2FwZTogJHtxKGVzYyl9YDtcbnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCktMHgyMSk7XG4gfX1cblxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeVN0cmluZ1N1ZmZpeD0oc3RyKT0+c3RyO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT5lbmNvZGVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ14nXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmNoYXJzLnB1c2goZW5jLCcgJyk7XG4gfVxucmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQ29tcGFjdEFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xubGV0IGRlcHRoPTA7XG4vL1xuLy9cbmxldCBuZXh0SW5kZXg9c2tpcCsxO1xubGV0IGN1cnJlbnRFbGVtZW50U3RhcnQ9c2tpcCsxO1xuZm9yKGNvbnN0ezA6Y2gsaW5kZXg6aX1vZiBlbmNvZGVkLm1hdGNoQWxsKC9bXFxeIF0vZykpe1xuY29uc3QgaW5kZXg9LyogICAgICAgICAgICAgICAgICovaTtcbmlmKGluZGV4PD1za2lwKXtcbmlmKGluZGV4PT09c2tpcCl7XG5jaD09PSdeJ3x8RmFpbCBgRW5jb2RlZCBhcnJheSBleHBlY3RlZDogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH1cbiB9ZWxzZSBpZihjaD09PSdeJyl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcHRoKz0xO1xuIH1lbHNle1xuLy9cbmlmKGluZGV4PT09bmV4dEluZGV4KXtcbi8vXG5kZXB0aC09MTtcbmRlcHRoPj0wfHxcbi8vXG5GYWlsIGB1bmV4cGVjdGVkIGFycmF5IGVsZW1lbnQgdGVybWluYXRvcjogJHtlbmNvZGVkLnNsaWNlKHNraXAsaW5kZXgrMil9YDtcbiB9XG5pZihkZXB0aD09PTApe1xuLy9cbmVsZW1lbnRzLnB1c2goXG5kZWNvZGVQYXNzYWJsZShlbmNvZGVkLnNsaWNlKGN1cnJlbnRFbGVtZW50U3RhcnQsaW5kZXgpKSk7XG5cbmN1cnJlbnRFbGVtZW50U3RhcnQ9aW5kZXgrMTtcbiB9XG4gfVxuLy9cbm5leHRJbmRleD1pbmRleCsxO1xuIH1cbmRlcHRoPT09MHx8RmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5uZXh0SW5kZXg9PT1lbmNvZGVkLmxlbmd0aHx8XG5GYWlsIGB1bnRlcm1pbmF0ZWQgYXJyYXkgZWxlbWVudDogJHtnZXRTdWZmaXgoXG5lbmNvZGVkLFxuY3VycmVudEVsZW1lbnRTdGFydClcbiB9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeUFycmF5PShhcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IGNoYXJzPVsnWyddO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpe1xuY29uc3QgZW5jPWVuY29kZVBhc3NhYmxlKGVsZW1lbnQpO1xuZm9yKGNvbnN0IGMgb2YgZW5jKXtcbmlmKGM9PT0nXFx1MDAwMCd8fGM9PT0nXFx1MDAwMScpe1xuY2hhcnMucHVzaCgnXFx1MDAwMScpO1xuIH1cbmNoYXJzLnB1c2goYyk7XG4gfVxuY2hhcnMucHVzaCgnXFx1MDAwMCcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUxlZ2FjeUFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xuY29uc3QgZWxlbUNoYXJzPVtdO1xuLy9cbi8vXG5sZXQgc3RpbGxUb1NraXA9c2tpcCsxO1xubGV0IGluRXNjYXBlPWZhbHNlO1xuZm9yKGNvbnN0IGMgb2YgZW5jb2RlZCl7XG5pZihzdGlsbFRvU2tpcD4wKXtcbnN0aWxsVG9Ta2lwLT0xO1xuaWYoc3RpbGxUb1NraXA9PT0wKXtcbmM9PT0nWyd8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoaW5Fc2NhcGUpe1xuYz09PSdcXHUwMDAwJ3x8XG5jPT09J1xcdTAwMDEnfHxcbkZhaWwgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHUwMDAxIGVzY2FwZTogJHtjfWA7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDAnKXtcbmNvbnN0IGVuY29kZWRFbGVtZW50PWVsZW1DaGFycy5qb2luKCcnKTtcbmVsZW1DaGFycy5sZW5ndGg9MDtcbmNvbnN0IGVsZW1lbnQ9ZGVjb2RlUGFzc2FibGUoZW5jb2RlZEVsZW1lbnQpO1xuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDEnKXtcbmluRXNjYXBlPXRydWU7XG4vL1xuY29udGludWU7XG4gfWVsc2V7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9XG5pbkVzY2FwZT1mYWxzZTtcbiB9XG4haW5Fc2NhcGV8fEZhaWwgYHVuZXhwZWN0ZWQgZW5kIG9mIGVuY29kaW5nICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmVsZW1DaGFycy5sZW5ndGg9PT0wfHxcbkZhaWwgYGVuY29kaW5nIHRlcm1pbmF0ZWQgZWFybHk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlY29yZD0ocmVjb3JkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgbmFtZXM9cmVjb3JkTmFtZXMocmVjb3JkKTtcbmNvbnN0IHZhbHVlcz1yZWNvcmRWYWx1ZXMocmVjb3JkLG5hbWVzKTtcbnJldHVybiBgKCR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtuYW1lcyx2YWx1ZXNdKSxlbmNvZGVQYXNzYWJsZSl9YDtcbiB9O1xuXG5jb25zdCBkZWNvZGVSZWNvcmQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JygnKTtcbi8vXG4vL1xuY29uc3QgdW56aXBwZWRFbnRyaWVzPWRlY29kZUFycmF5KGVuY29kZWQsZGVjb2RlUGFzc2FibGUsc2tpcCsxKTtcbnVuemlwcGVkRW50cmllcy5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIGtleXMsdmFsdWVzIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W2tleXMsdmFsc109dW56aXBwZWRFbnRyaWVzO1xuXG5wYXNzU3R5bGVPZihrZXlzKT09PSdjb3B5QXJyYXknJiZcbnBhc3NTdHlsZU9mKHZhbHMpPT09J2NvcHlBcnJheScmJlxua2V5cy5sZW5ndGg9PT12YWxzLmxlbmd0aCYmXG5rZXlzLmV2ZXJ5KChrZXkpPT50eXBlb2Yga2V5PT09J3N0cmluZycpfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHJlY29yZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3QgbWFwRW50cmllcz1rZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHNbaV1dKTtcbmNvbnN0IHJlY29yZD1oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cmllcykpO1xuYXNzZXJ0UmVjb3JkKHJlY29yZCwnZGVjb2RlZCByZWNvcmQnKTtcbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3QgZW5jb2RlVGFnZ2VkPSh0YWdnZWQsZW5jb2RlQXJyYXksZW5jb2RlUGFzc2FibGUpPT5cbiBgOiR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtnZXRUYWcodGFnZ2VkKSx0YWdnZWQucGF5bG9hZF0pLGVuY29kZVBhc3NhYmxlKX1gO1xuXG5jb25zdCBkZWNvZGVUYWdnZWQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JzonKTtcbi8vXG4vL1xuY29uc3QgdGFnZ2VkUGF5bG9hZD1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG50YWdnZWRQYXlsb2FkLmxlbmd0aD09PTJ8fFxuRmFpbCBgZXhwZWN0ZWQgdGFnLHBheWxvYWQgcGFpcjogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3RbdGFnLHBheWxvYWRdPXRhZ2dlZFBheWxvYWQ7XG5wYXNzU3R5bGVPZih0YWcpPT09J3N0cmluZyd8fFxuRmFpbCBgbm90IGEgdmFsaWQgdGFnZ2VkIGVuY29kaW5nOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVJlbW90YWJsZT0odW5zYWZlRW5jb2RlUmVtb3RhYmxlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPShyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUmVtb3RhYmxlKHIsaW5uZXJFbmNvZGUpO1xudHlwZW9mIGVuY29kaW5nPT09J3N0cmluZycmJmVuY29kaW5nLmNoYXJBdCgwKT09PSdyJ3x8XG5GYWlsIGBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiclwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUmVtb3RhYmxlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVSZW1vdGFibGU7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVByb21pc2U9KHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVQcm9taXNlPShwLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUHJvbWlzZShwLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nPyd8fFxuRmFpbCBgUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCI/XCI6ICR7ZW5jb2Rpbmd9YDtcbnZlcmlmeUVuY29kaW5nKGVuY29kaW5nLCdQcm9taXNlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVQcm9taXNlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVFcnJvcj0odW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVFcnJvcj0oZXJyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlRXJyb3IoZXJyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nISd8fFxuRmFpbCBgRXJyb3IgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiIVwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnRXJyb3InKTtcbnJldHVybiBlbmNvZGluZztcbiB9O1xucmV0dXJuIGVuY29kZUVycm9yO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRW5jb2RlPShlbmNvZGVTdHJpbmdTdWZmaXgsZW5jb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlOnVuc2FmZUVuY29kZVJlbW90YWJsZSxcbmVuY29kZVByb21pc2U6dW5zYWZlRW5jb2RlUHJvbWlzZSxcbmVuY29kZUVycm9yOnVuc2FmZUVuY29kZUVycm9yLFxudmVyaWZ5RW5jb2Rpbmc9KCk9PnsgfX09XG5vcHRpb25zO1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPW1ha2VFbmNvZGVSZW1vdGFibGUoXG51bnNhZmVFbmNvZGVSZW1vdGFibGUsXG52ZXJpZnlFbmNvZGluZyk7XG5cbmNvbnN0IGVuY29kZVByb21pc2U9bWFrZUVuY29kZVByb21pc2UodW5zYWZlRW5jb2RlUHJvbWlzZSx2ZXJpZnlFbmNvZGluZyk7XG5jb25zdCBlbmNvZGVFcnJvcj1tYWtlRW5jb2RlRXJyb3IodW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBpbm5lckVuY29kZT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBlbmNvZGVFcnJvcihwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzp7XG5yZXR1cm4ndic7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybid6JztcbiB9XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kZUJpbmFyeTY0KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xucmV0dXJuIGBzJHtlbmNvZGVTdHJpbmdTdWZmaXgocGFzc2FibGUpfWA7XG4gfVxuY2FzZSdib29sZWFuJzp7XG5yZXR1cm4gYGIke3Bhc3NhYmxlfWA7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybiBlbmNvZGVCaWdJbnQocGFzc2FibGUpO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGVuY29kZVByb21pc2UocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG4vL1xuY29uc3QgbmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbnJldHVybiBgeSR7ZW5jb2RlU3RyaW5nU3VmZml4KG5hbWUpfWA7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBlbmNvZGVBcnJheShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5yZXR1cm4gZW5jb2RlUmVjb3JkKHBhc3NhYmxlLGVuY29kZUFycmF5LGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJuIGVuY29kZVRhZ2dlZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBhICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbGxlY3Rpb24gcGFzc2FibGVgO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRW5jb2RlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBsaWJlcmFsRGVjb2RlcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgKi97XG5kZWNvZGVSZW1vdGFibGU6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWQsXG5kZWNvZGVQcm9taXNlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlRXJyb3I6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWR9O1xuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlSW5uZXJEZWNvZGU9KGRlY29kZVN0cmluZ1N1ZmZpeCxkZWNvZGVBcnJheSxvcHRpb25zKT0+e1xuY29uc3R7ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5uZXJEZWNvZGU9KGVuY29kZWQsc2tpcD0wKT0+e1xuc3dpdGNoKGVuY29kZWQuY2hhckF0KHNraXApKXtcbmNhc2Undic6e1xucmV0dXJuIG51bGw7XG4gfVxuY2FzZSd6Jzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnZic6e1xucmV0dXJuIGRlY29kZUJpbmFyeTY0KGVuY29kZWQsc2tpcCk7XG4gfVxuY2FzZSdzJzp7XG5yZXR1cm4gZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xuIH1cbmNhc2UnYic6e1xuY29uc3Qgc3Vic3RyaW5nPWdldFN1ZmZpeChlbmNvZGVkLHNraXArMSk7XG5pZihzdWJzdHJpbmc9PT0ndHJ1ZScpe1xucmV0dXJuIHRydWU7XG4gfWVsc2UgaWYoc3Vic3RyaW5nPT09J2ZhbHNlJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxudGhyb3cgRmFpbCBgZXhwZWN0ZWQgZW5jb2RlZCBib29sZWFuIHRvIGJlIFwiYnRydWVcIiBvciBcImJmYWxzZVwiOiAke3N1YnN0cmluZ31gO1xuIH1cbmNhc2Unbic6XG5jYXNlJ3AnOntcbnJldHVybiBkZWNvZGVCaWdJbnQoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCkpO1xuIH1cbmNhc2Uncic6e1xucmV0dXJuIGRlY29kZVJlbW90YWJsZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSc/Jzp7XG5yZXR1cm4gZGVjb2RlUHJvbWlzZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSchJzp7XG5yZXR1cm4gZGVjb2RlRXJyb3IoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UneSc6e1xuLy9cbmNvbnN0IG5hbWU9ZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ1snOlxuY2FzZSdeJzp7XG4vL1xucmV0dXJuIGRlY29kZUFycmF5KGVuY29kZWQsaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZScoJzp7XG5yZXR1cm4gZGVjb2RlUmVjb3JkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZSc6Jzp7XG5yZXR1cm4gZGVjb2RlVGFnZ2VkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGRhdGFiYXNlIGtleTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRGVjb2RlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFzc2FibGVLaXQ9KG9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZT0ocixfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cn1gLFxuZW5jb2RlUHJvbWlzZT0ocCxfKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3B9YCxcbmVuY29kZUVycm9yPShlcnIsXyk9PkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyfWAsXG5mb3JtYXQ9J2xlZ2FjeU9yZGVyZWQnLFxuXG5kZWNvZGVSZW1vdGFibGU9KGVuY29kaW5nLF8pPT5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlUHJvbWlzZT0oZW5jb2RpbmcsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlRXJyb3I9KGVuY29kaW5nLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWB9PVxub3B0aW9ucztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbmNvZGVQYXNzYWJsZTtcbmNvbnN0IGVuY29kZU9wdGlvbnM9e2VuY29kZVJlbW90YWJsZSxlbmNvZGVQcm9taXNlLGVuY29kZUVycm9yLGZvcm1hdH07XG5pZihmb3JtYXQ9PT0nY29tcGFjdE9yZGVyZWQnKXtcbmNvbnN0IGxpYmVyYWxEZWNvZGU9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmxpYmVyYWxEZWNvZGVycyk7XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCB2ZXJpZnlFbmNvZGluZz0oZW5jb2RpbmcsbGFiZWwpPT57XG4hZW5jb2RpbmcubWF0Y2gockMwKXx8XG5GYWlsIGAke2IoXG5sYWJlbClcbiB9IGVuY29kaW5nIG11c3Qgbm90IGNvbnRhaW4gYSBDMCBjb250cm9sIGNoYXJhY3RlcjogJHtlbmNvZGluZ31gO1xuY29uc3QgZGVjb2RlZD1kZWNvZGVDb21wYWN0QXJyYXkoIGBediAke2VuY29kaW5nfSB2IGAsbGliZXJhbERlY29kZSk7XG5pc0FycmF5KGRlY29kZWQpJiZcbmRlY29kZWQubGVuZ3RoPT09MyYmXG5kZWNvZGVkWzBdPT09bnVsbCYmXG5kZWNvZGVkWzJdPT09bnVsbHx8XG5GYWlsIGAke2IobGFiZWwpfSBlbmNvZGluZyBtdXN0IGJlIGVtYmVkZGFibGU6ICR7ZW5jb2Rpbmd9YDtcbiB9O1xuY29uc3QgZW5jb2RlQ29tcGFjdD1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZW5jb2RlQ29tcGFjdEFycmF5LFxuey4uLmVuY29kZU9wdGlvbnMsdmVyaWZ5RW5jb2Rpbmd9KTtcblxuZW5jb2RlUGFzc2FibGU9KHBhc3NhYmxlKT0+IGB+JHtlbmNvZGVDb21wYWN0KHBhc3NhYmxlKX1gO1xuIH1lbHNlIGlmKGZvcm1hdD09PSdsZWdhY3lPcmRlcmVkJyl7XG5lbmNvZGVQYXNzYWJsZT1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5lbmNvZGVMZWdhY3lBcnJheSxcbmVuY29kZU9wdGlvbnMpO1xuXG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZm9ybWF0OiAke3EoZm9ybWF0KX1gO1xuIH1cblxuY29uc3QgZGVjb2RlT3B0aW9ucz17ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9O1xuY29uc3QgZGVjb2RlQ29tcGFjdD1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZGVjb2RlQ29tcGFjdEFycmF5LFxuZGVjb2RlT3B0aW9ucyk7XG5cbmNvbnN0IGRlY29kZUxlZ2FjeT1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5kZWNvZGVMZWdhY3lBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVQYXNzYWJsZT0oZW5jb2RlZCk9Pntcbi8vXG4vL1xuLy9cbmlmKGVuY29kZWQuY2hhckF0KDApPT09J34nKXtcbnJldHVybiBkZWNvZGVDb21wYWN0KGVuY29kZWQsMSk7XG4gfVxucmV0dXJuIGRlY29kZUxlZ2FjeShlbmNvZGVkKTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtlbmNvZGVQYXNzYWJsZSxkZWNvZGVQYXNzYWJsZX0pO1xuIH07JGjNj19vbmNlLm1ha2VQYXNzYWJsZUtpdChtYWtlUGFzc2FibGVLaXQpO1xuaGFyZGVuKG1ha2VQYXNzYWJsZUtpdCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVBhc3NhYmxlPShlbmNvZGVPcHRpb25zKT0+e1xuY29uc3R7ZW5jb2RlUGFzc2FibGV9PW1ha2VQYXNzYWJsZUtpdChlbmNvZGVPcHRpb25zKTtcbnJldHVybiBlbmNvZGVQYXNzYWJsZTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlUGFzc2FibGUobWFrZUVuY29kZVBhc3NhYmxlKTtcbmhhcmRlbihtYWtlRW5jb2RlUGFzc2FibGUpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVQYXNzYWJsZT0oZGVjb2RlT3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZGVjb2RlT3B0aW9ucyk7XG5yZXR1cm4gZGVjb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZURlY29kZVBhc3NhYmxlKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZURlY29kZVBhc3NhYmxlKTtcblxuY29uc3QgICAgICAgIGlzRW5jb2RlZFJlbW90YWJsZT0oZW5jb2RlZCk9PmVuY29kZWQuY2hhckF0KDApPT09J3InOyRozY9fb25jZS5pc0VuY29kZWRSZW1vdGFibGUoaXNFbmNvZGVkUmVtb3RhYmxlKTtcbmhhcmRlbihpc0VuY29kZWRSZW1vdGFibGUpO1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc1N0eWxlUHJlZml4ZXM9e1xuZXJyb3I6JyEnLFxuY29weVJlY29yZDonKCcsXG50YWdnZWQ6JzonLFxucHJvbWlzZTonPycsXG5jb3B5QXJyYXk6J1teJyxcbmJvb2xlYW46J2InLFxubnVtYmVyOidmJyxcbmJpZ2ludDonbnAnLFxucmVtb3RhYmxlOidyJyxcbnN0cmluZzoncycsXG5udWxsOid2JyxcbnN5bWJvbDoneScsXG51bmRlZmluZWQ6J3onfTskaM2PX29uY2UucGFzc1N0eWxlUHJlZml4ZXMocGFzc1N0eWxlUHJlZml4ZXMpO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUHJlZml4ZXMsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUHJlZml4ZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVjb3JkTmFtZXMiOlsicmVjb3JkTmFtZXMiXSwicmVjb3JkVmFsdWVzIjpbInJlY29yZFZhbHVlcyJdLCJ6ZXJvUGFkIjpbInplcm9QYWQiXSwibWFrZVBhc3NhYmxlS2l0IjpbIm1ha2VQYXNzYWJsZUtpdCJdLCJtYWtlRW5jb2RlUGFzc2FibGUiOlsibWFrZUVuY29kZVBhc3NhYmxlIl0sIm1ha2VEZWNvZGVQYXNzYWJsZSI6WyJtYWtlRGVjb2RlUGFzc2FibGUiXSwiaXNFbmNvZGVkUmVtb3RhYmxlIjpbImlzRW5jb2RlZFJlbW90YWJsZSJdLCJwYXNzU3R5bGVQcmVmaXhlcyI6WyJwYXNzU3R5bGVQcmVmaXhlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABfnPAyUiIAAFIiAAArAAAAQGVuZG8vbWFyc2hhbC12MS41LjQvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiUUNMQVNTIiwibWFrZURlY29kZUZyb21DYXBEYXRhIiwibWFrZUVuY29kZVRvQ2FwRGF0YSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGlzT2JqZWN0LGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxcbmRlZmluZVByb3BlcnRpZXMsXG5pcyxcbmVudHJpZXMsXG5mcm9tRW50cmllcyxcbmZyZWV6ZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBRQ0xBU1M9J0BxY2xhc3MnOyRozY9fb25jZS5RQ0xBU1MoUUNMQVNTKTtcblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzUUNsYXNzPShlbmNvZGVkKT0+aGFzT3duUHJvcGVydHlPZihlbmNvZGVkLFFDTEFTUyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHFjbGFzc01hdGNoZXM9KGVuY29kZWQscWNsYXNzKT0+XG5pc09iamVjdChlbmNvZGVkKSYmXG4haXNBcnJheShlbmNvZGVkKSYmXG5oYXNRQ2xhc3MoZW5jb2RlZCkmJlxuZW5jb2RlZFtRQ0xBU1NdPT09cWNsYXNzO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT0ocmVtKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIpPT5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtlcnJ9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9DYXBEYXRhPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9ZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YSxcbmVuY29kZVByb21pc2VUb0NhcERhdGE9ZG9udEVuY29kZVByb21pc2VUb0NhcERhdGEsXG5lbmNvZGVFcnJvclRvQ2FwRGF0YT1kb250RW5jb2RlRXJyb3JUb0NhcERhdGF9PVxuZW5jb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvQ2FwRGF0YVJlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJue1tRQ0xBU1NdOid1bmRlZmluZWQnfTtcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJue1tRQ0xBU1NdOidOYU4nfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonSW5maW5pdHknfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106Jy1JbmZpbml0eSd9O1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybntcbltRQ0xBU1NdOidiaWdpbnQnLFxuZGlnaXRzOlN0cmluZyhwYXNzYWJsZSl9O1xuXG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybntcbltRQ0xBU1NdOidzeW1ib2wnLFxubmFtZX07XG5cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmlmKGhhc093blByb3BlcnR5T2YocGFzc2FibGUsUUNMQVNTKSl7XG4vL1xuY29uc3R7W1FDTEFTU106cWNsYXNzVmFsdWUsLi4ucmVzdH09cGFzc2FibGU7XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PXtcbltRQ0xBU1NdOidoaWxiZXJ0Jyxcbm9yaWdpbmFsOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHFjbGFzc1ZhbHVlKX07XG5cbmlmKG93bktleXMocmVzdCkubGVuZ3RoPj0xKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJlc3VsdC5yZXN0PWVuY29kZVRvQ2FwRGF0YVJlY3VyKGZyZWV6ZShyZXN0KSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb0NhcERhdGFSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbltRQ0xBU1NdOid0YWdnZWQnLFxudGFnOmdldFRhZyhwYXNzYWJsZSksXG5wYXlsb2FkOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YShcbnBhc3NhYmxlLFxuZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuXG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUylcbiB9ICR7cSgnc2xvdCcpfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVByb21pc2VUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nc2xvdCcpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ2Vycm9yJykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ2Vycm9yJylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvQ2FwRGF0YT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpKTtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9DYXBEYXRhKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShzbG90RW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSBvciBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7c2xvdEVuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0oZXJyb3JFbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlcnJvckVuY29kaW5nfWA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21DYXBEYXRhPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT1kb250RGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT1kb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YX09XG5kZWNvZGVPcHRpb25zO1xuXG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT09PWRlY29kZVByb21pc2VGcm9tQ2FwRGF0YXx8XG5GYWlsIGBBbiBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbiBmb3Igbm93OiBJZiBlaXRoZXIgZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEgb3IgZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhIGlzIHByb3ZpZGVkLCBib3RoIG11c3QgYmUgcHJvdmlkZWQgYW5kIHRoZXkgbXVzdCBiZSB0aGUgc2FtZTogJHtxKFxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEpXG4gfSB2cyAke3EoZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhKX1gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tQ2FwRGF0YT0oanNvbkVuY29kZWQpPT57XG5pZighaXNPYmplY3QoanNvbkVuY29kZWQpKXtcbi8vXG5yZXR1cm4ganNvbkVuY29kZWQ7XG4gfVxuaWYoaXNBcnJheShqc29uRW5jb2RlZCkpe1xucmV0dXJuIGpzb25FbmNvZGVkLm1hcCgoZW5jb2RlZFZhbCk9PmRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpKTtcbiB9ZWxzZSBpZihoYXNRQ2xhc3MoanNvbkVuY29kZWQpKXtcbmNvbnN0IHFjbGFzcz1qc29uRW5jb2RlZFtRQ0xBU1NdO1xudHlwZW9mIHFjbGFzcz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgJHtxKFFDTEFTUyl9IHR5cGVvZiAke3EodHlwZW9mIHFjbGFzcyl9YDtcbnN3aXRjaChxY2xhc3Mpe1xuLy9cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PWpzb25FbmNvZGVkO1xudHlwZW9mIGRpZ2l0cz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZGlnaXRzIHR5cGVvZiAke3EodHlwZW9mIGRpZ2l0cyl9YDtcbnJldHVybiBCaWdJbnQoZGlnaXRzKTtcbiB9XG5jYXNlJ0BAYXN5bmNJdGVyYXRvcic6e1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvcjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09anNvbkVuY29kZWQ7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09anNvbkVuY29kZWQ7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcsZGVjb2RlRnJvbUNhcERhdGEocGF5bG9hZCkpO1xuIH1cbmNhc2Unc2xvdCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlZD1kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGRlY29kZWQ7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZGVjb2RlZD1kZWNvZGVFcnJvckZyb21DYXBEYXRhKFxuanNvbkVuY29kZWQsXG5kZWNvZGVGcm9tQ2FwRGF0YSk7XG5cbmlmKHBhc3NTdHlsZU9mKGRlY29kZWQpPT09J2Vycm9yJyl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YSBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7ZGVjb2RlZH1gO1xuIH1cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09anNvbkVuY29kZWQ7XG5oYXNPd25Qcm9wZXJ0eU9mKGpzb25FbmNvZGVkLCdvcmlnaW5hbCcpfHxcbkZhaWwgYEludmFsaWQgSGlsYmVydCBIb3RlbCBlbmNvZGluZyAke2pzb25FbmNvZGVkfWA7XG4vL1xuY29uc3QgcmVzdWx0PXtbUUNMQVNTXTpkZWNvZGVGcm9tQ2FwRGF0YShvcmlnaW5hbCl9O1xuaWYoaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwncmVzdCcpKXtcbmNvbnN0IGlzTm9uRW1wdHlPYmplY3Q9XG50eXBlb2YgcmVzdD09PSdvYmplY3QnJiZcbnJlc3QhPT1udWxsJiZcbm93bktleXMocmVzdCkubGVuZ3RoPj0xO1xuaWYoIWlzTm9uRW1wdHlPYmplY3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyBtdXN0IGJlIGEgbm9uLWVtcHR5IG9iamVjdDogJHtyZXN0fWA7XG4gfVxuY29uc3QgcmVzdE9iaj1kZWNvZGVGcm9tQ2FwRGF0YShyZXN0KTtcbi8vXG4vL1xuLy9cbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RPYmosUUNMQVNTKXx8XG5GYWlsIGBSZXN0IG11c3Qgbm90IGNvbnRhaW4gaXRzIG93biBkZWZpbml0aW9uIG9mICR7cShRQ0xBU1MpfWA7XG5kZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHJlc3RPYmopKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG5jYXNlJ2liaWQnOntcbnRocm93IEZhaWwgYFRoZSBjYXBEYXRhIHByb3RvY29sIG5vIGxvbmdlciBzdXBwb3J0cyAke3EoUUNMQVNTKX0gJHtxKFxucWNsYXNzKVxuIH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1lbHNle1xuYXNzZXJ0KHR5cGVvZiBqc29uRW5jb2RlZD09PSdvYmplY3QnJiZqc29uRW5jb2RlZCE9PW51bGwpO1xuY29uc3QgZGVjb2RlRW50cnk9KFtuYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSAke3EobmFtZSl9IG9mICR7anNvbkVuY29kZWR9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbUNhcERhdGEoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGpzb25FbmNvZGVkKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbUNhcERhdGEpO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVGcm9tQ2FwRGF0YShtYWtlRGVjb2RlRnJvbUNhcERhdGEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUUNMQVNTIjpbIlFDTEFTUyJdLCJtYWtlRW5jb2RlVG9DYXBEYXRhIjpbIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwibWFrZURlY29kZUZyb21DYXBEYXRhIjpbIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAPShurLiIAAC4iAAAtAAAAQGVuZG8vbWFyc2hhbC12MS41LjQvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyIsIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtpcyxlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbmNvbnN0IEJBTkc9JyEnLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBEQVNIPSctJy5jaGFyQ29kZUF0KDApO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdGFydHNTcGVjaWFsPShlbmNvZGVkU3RyKT0+e1xuaWYoZW5jb2RlZFN0cj09PScnKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuY29uc3QgY29kZT1lbmNvZGVkU3RyLmNoYXJDb2RlQXQoMCk7XG4vL1xucmV0dXJuIEJBTkc8PWNvZGUmJmNvZGU8PURBU0g7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtyZW19YDtcblxuY29uc3QgZG9udEVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbSk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwcm9tfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzPShlcnIpPT5cbkZhaWwgYGVycm9yIG9iamVjdCB1bmV4cGVjdGVkOiAke3EoZXJyKX1gO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVUb1NtYWxsY2Fwcz0oZW5jb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9ZG9udEVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMsXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzPWRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzfT1cbmVuY29kZU9wdGlvbnM7XG5cbmNvbnN0IGFzc2VydEVuY29kZWRFcnJvcj0oZW5jb2RpbmcpPT57XG50eXBlb2YgZW5jb2Rpbmc9PT0nb2JqZWN0JyYmaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI2Vycm9yJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBcIiNlcnJvclwiIHByb3BlcnR5OiAke3EoXG5lbmNvZGluZylcbiB9YDtcbi8vXG5jb25zdCBtZXNzYWdlPWVuY29kaW5nWycjZXJyb3InXTtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZycmJihcbiFzdGFydHNTcGVjaWFsKG1lc3NhZ2UpfHxtZXNzYWdlLmNoYXJBdCgwKT09PSchJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBzdHJpbmcgbWVzc2FnZTogJHtxKG1lc3NhZ2UpfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzUmVjdXI9KHBhc3NhYmxlKT0+e1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGFzc2FibGUpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzp7XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZihzdGFydHNTcGVjaWFsKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBgISR7cGFzc2FibGV9YDtcbiB9XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4nI3VuZGVmaW5lZCc7XG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4ocGFzc2FibGUpKXtcbnJldHVybicjTmFOJztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybicjSW5maW5pdHknO1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09LUluZmluaXR5KXtcbnJldHVybicjLUluZmluaXR5JztcbiB9XG4vL1xucmV0dXJuIGlzKHBhc3NhYmxlLC0wKT8wOnBhc3NhYmxlO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdCBzdHI9U3RyaW5nKHBhc3NhYmxlKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICovcGFzc2FibGU8MG4/c3RyOmArJHtzdHJ9YCk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybiBgJSR7bmFtZX1gO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgbmFtZXM9b3duS2V5cyhwYXNzYWJsZSkuc29ydCgpO1xucmV0dXJuIGZyb21FbnRyaWVzKFxubmFtZXMubWFwKChuYW1lKT0+W1xuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihuYW1lKSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGVbbmFtZV0pXSkpO1xuXG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJue1xuJyN0YWcnOmVuY29kZVRvU21hbGxjYXBzUmVjdXIoZ2V0VGFnKHBhc3NhYmxlKSksXG5wYXlsb2FkOmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUucGF5bG9hZCl9O1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyhcbnBhc3NhYmxlLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5cbmlmKHR5cGVvZiByZXN1bHQ9PT0nc3RyaW5nJyYmcmVzdWx0LmNoYXJBdCgwKT09PSckJyl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiRcIjogJHtyZXN1bHR9YDtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJicpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCImXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgcmVzdWx0PWVuY29kZUVycm9yVG9TbWFsbGNhcHMocGFzc2FibGUsZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5hc3NlcnRFbmNvZGVkRXJyb3IocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiBVbnJlY29nbml6ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwcz0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHJlc3VsdD1oYXJkZW4oXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpKTtcblxuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnJldHVybiBoYXJkZW4oZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZSkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9TbWFsbGNhcHMobWFrZUVuY29kZVRvU21hbGxjYXBzKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtxKGVuY29kaW5nKX1gO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9PVxuZGVjb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT57XG5zd2l0Y2godHlwZW9mIGVuY29kaW5nKXtcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZighc3RhcnRzU3BlY2lhbChlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNvbnN0IGM9ZW5jb2RpbmcuY2hhckF0KDApO1xuc3dpdGNoKGMpe1xuY2FzZSchJzp7XG4vL1xucmV0dXJuIGVuY29kaW5nLnNsaWNlKDEpO1xuIH1cbmNhc2UnJSc6e1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShlbmNvZGluZy5zbGljZSgxKSk7XG4gfVxuY2FzZScjJzp7XG5zd2l0Y2goZW5jb2Rpbmcpe1xuY2FzZScjdW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnI05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJyNJbmZpbml0eSc6e1xucmV0dXJuIEluZmluaXR5O1xuIH1cbmNhc2UnIy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bmtub3duIGNvbnN0YW50IFwiJHtxKGVuY29kaW5nKX1cImAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1cbmNhc2UnKyc6XG5jYXNlJy0nOntcbnJldHVybiBCaWdJbnQoZW5jb2RpbmcpO1xuIH1cbmNhc2UnJCc6e1xuY29uc3QgcmVzdWx0PWRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG4vL1xuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdyZW1vdGFibGUnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhIHJlbW90YWJsZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UnJic6e1xuY29uc3QgcmVzdWx0PWRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdwcm9taXNlJyl7XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgU3BlY2lhbCBjaGFyICR7cShcbmMpXG4gfSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTogJHtlbmNvZGluZ31gO1xuIH19XG5cbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoZW5jb2Rpbmc9PT1udWxsKXtcbnJldHVybiBlbmNvZGluZztcbiB9XG5cbmlmKGlzQXJyYXkoZW5jb2RpbmcpKXtcbnJldHVybiBlbmNvZGluZy5tYXAoKHZhbCk9PmRlY29kZUZyb21TbWFsbGNhcHModmFsKSk7XG4gfVxuXG5pZihoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjdGFnJykpe1xuY29uc3R7JyN0YWcnOnRhZyxwYXlsb2FkLC4uLnJlc3R9PWVuY29kaW5nO1xudHlwZW9mIHRhZz09PSdzdHJpbmcnfHxcbkZhaWwgYFZhbHVlIG9mIFwiI3RhZ1wiLCB0aGUgdGFnLCBtdXN0IGJlIGEgc3RyaW5nOiAke2VuY29kaW5nfWA7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgI3RhZyByZWNvcmQgdW5leHBlY3RlZCBwcm9wZXJ0aWVzOiAke3Eob3duS2V5cyhyZXN0KSl9YDtcbnJldHVybiBtYWtlVGFnZ2VkKFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyh0YWcpLFxuZGVjb2RlRnJvbVNtYWxsY2FwcyhwYXlsb2FkKSk7XG5cbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpKXtcbmNvbnN0IHJlc3VsdD1kZWNvZGVFcnJvckZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5wYXNzU3R5bGVPZihyZXN1bHQpPT09J2Vycm9yJ3x8XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhbiBlcnJvcjogJHtyZXN1bHR9YDtcbnJldHVybiByZXN1bHQ7XG4gfVxuXG5jb25zdCBkZWNvZGVFbnRyeT0oW2VuY29kZWROYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIGVuY29kZWROYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke3EoXG5lbmNvZGVkTmFtZSlcbiB9IG9mICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xuZW5jb2RlZE5hbWUuY2hhckF0KDApIT09JyMnfHxcbkZhaWwgYFVucmVjb2duaXplZCByZWNvcmQgdHlwZSAke3EoZW5jb2RlZE5hbWUpfTogJHtlbmNvZGluZ31gO1xuY29uc3QgbmFtZT1kZWNvZGVGcm9tU21hbGxjYXBzKGVuY29kZWROYW1lKTtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRGVjb2RlZCBwcm9wZXJ0eSBuYW1lICR7bmFtZX0gZnJvbSAke2VuY29kaW5nfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGVuY29kaW5nKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IHVucmVjb2duaXplZCBKU09OIHR5cGVvZiAke3EoXG50eXBlb2YgZW5jb2RpbmcpXG4gfTogJHtlbmNvZGluZ31gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xucmV0dXJuIGhhcmRlbihkZWNvZGVGcm9tU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyhtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiOlsibWFrZUVuY29kZVRvU21hbGxjYXBzIl0sIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIjpbIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEULMv0QIwAAECMAACoAAABAZW5kby9tYXJzaGFsLXYxLjUuNC9zcmMvbWFyc2hhbC1qdXN0aW4uanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIl0sImV4cG9ydHMiOlsiZGVjb2RlVG9KdXN0aW4iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTmF0LGdldEVycm9yQ29uc3RydWN0b3IsaXNPYmplY3QscGFzc2FibGVTeW1ib2xGb3JOYW1lLHEsWCxGYWlsLFFDTEFTUzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtzdHJpbmdpZnk6cXVvdGV9PUpTT047XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVllc0luZGVudGVyPSgpPT57XG5jb25zdCBzdHJpbmdzPVtdO1xubGV0IGxldmVsPTA7XG5sZXQgbmVlZFNwYWNlPWZhbHNlO1xuY29uc3QgbGluZT0oKT0+e1xubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaCgnXFxuJywnICAnLnJlcGVhdChsZXZlbCkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHtcbm9wZW46KG9wZW5CcmFja2V0KT0+e1xubGV2ZWwrPTE7XG5pZihuZWVkU3BhY2Upe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaChvcGVuQnJhY2tldCk7XG4gfSxcbmxpbmUsXG5uZXh0Oih0b2tlbik9PntcbmlmKG5lZWRTcGFjZSYmdG9rZW4hPT0nLCcpe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPXRydWU7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKHRva2VuKTtcbiB9LFxuY2xvc2U6KGNsb3NlQnJhY2tldCk9PntcbmFzc2VydChsZXZlbD49MSk7XG5sZXZlbC09MTtcbmxpbmUoKTtcbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+e1xuYXNzZXJ0LmVxdWFsKGxldmVsLDApO1xucmV0dXJuIHN0cmluZ3Muam9pbignJyk7XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZFBhaXJQYXR0ZXJuPS9eKD86XFx3XFx3fDw8fD4+fFxcK1xcK3wtLXw8IXwtPikkLztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZU5vSW5kZW50ZXI9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdzPVtdO1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PnN0cmluZ3MucHVzaChvcGVuQnJhY2tldCksXG5saW5lOigpPT5zdHJpbmdzLmxlbmd0aCxcbm5leHQ6KHRva2VuKT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEpe1xuY29uc3QgbGFzdD1zdHJpbmdzW3N0cmluZ3MubGVuZ3RoLTFdO1xuLy9cbmlmKGxhc3QubGVuZ3RoPj0xJiZ0b2tlbi5sZW5ndGg+PTEpe1xuY29uc3QgcGFpcj0gYCR7bGFzdFtsYXN0Lmxlbmd0aC0xXX0ke3Rva2VuWzBdfWA7XG5pZihiYWRQYWlyUGF0dGVybi50ZXN0KHBhaXIpKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbiB9XG4gfVxucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5pZihzdHJpbmdzLmxlbmd0aD49MSYmc3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXT09PScsJyl7XG5zdHJpbmdzLnBvcCgpO1xuIH1cbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+c3RyaW5ncy5qb2luKCcnKX0pO1xuXG4gfTtcblxuY29uc3QgaWRlbnRQYXR0ZXJuPS9eW2EtekEtWl1cXHcqJC87XG5oYXJkZW4oaWRlbnRQYXR0ZXJuKTtcbmNvbnN0IEF0QXRQcmVmaXhQYXR0ZXJuPS9eQEAoLiopJC87XG5oYXJkZW4oQXRBdFByZWZpeFBhdHRlcm4pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZVRvSnVzdGluPShlbmNvZGluZyxzaG91bGRJbmRlbnQ9ZmFsc2Usc2xvdHM9W10pPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZT0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG5yZXR1cm47XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIHFjbGFzcyB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5hc3NlcnQoIWlzQXJyYXkocmF3VHJlZSkpO1xuc3dpdGNoKHJhd1RyZWVbJ0BxY2xhc3MnXSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG5yZXR1cm47XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm47XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbnJldHVybjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5jb25zdCBzeW09cGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuYXNzZXJ0LnR5cGVvZihzeW0sJ3N5bWJvbCcpO1xucmV0dXJuO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YodGFnLCdzdHJpbmcnKTtcbnByZXBhcmUocGF5bG9hZCk7XG5yZXR1cm47XG4gfVxuY2FzZSdzbG90Jzp7XG5jb25zdHtpbmRleCxpZmFjZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuTmF0KGluZGV4KTtcbmlmKGlmYWNlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoaWZhY2UsJ3N0cmluZycpO1xuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG4nb3JpZ2luYWwnaW4gcmF3VHJlZXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtyYXdUcmVlfWA7XG5wcmVwYXJlKG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuaWYodHlwZW9mIHJlc3QhPT0nb2JqZWN0Jyl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3RgO1xuIH1cbmlmKHJlc3Q9PT1udWxsKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBudWxsYDtcbiB9XG5pZihpc0FycmF5KHJlc3QpKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBhbiBhcnJheWA7XG4gfVxuaWYoUUNMQVNTIGluIHJlc3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyAke3Jlc3R9IG11c3Qgbm90IGNvbnRhaW4gJHtxKFFDTEFTUyl9YDtcbiB9XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnByZXBhcmUocmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdHtuYW1lLG1lc3NhZ2V9PXJhd1RyZWU7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBuYW1lKX1gO1xuIH1cbmdldEVycm9yQ29uc3RydWN0b3IobmFtZSkhPT11bmRlZmluZWR8fFxuRmFpbCBgTXVzdCBiZSB0aGUgbmFtZSBvZiBhbiBFcnJvciBjb25zdHJ1Y3RvciAke25hbWV9YDtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBlcnJvciBtZXNzYWdlIHR5cGVvZiAke3EodHlwZW9mIG1lc3NhZ2UpfWA7XG5yZXR1cm47XG4gfVxuXG5kZWZhdWx0OntcbmFzc2VydC5mYWlsKFggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xucHJlcGFyZShyYXdUcmVlW2ldKTtcbiB9XG4gfWVsc2V7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJhd1RyZWUpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbiB9XG5wcmVwYXJlKHJhd1RyZWVbbmFtZV0pO1xuIH1cbiB9XG4gfTtcblxuY29uc3QgbWFrZUluZGVudGVyPXNob3VsZEluZGVudD9tYWtlWWVzSW5kZW50ZXI6bWFrZU5vSW5kZW50ZXI7XG5sZXQgb3V0PW1ha2VJbmRlbnRlcigpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZT0ocmF3VHJlZSk9Pntcbi8vXG5yZXR1cm4gcmVjdXIocmF3VHJlZSk7XG4gfTtcblxuY29uc3QgZGVjb2RlUHJvcGVydHk9KG5hbWUsdmFsdWUpPT57XG5vdXQubGluZSgpO1xuaWYobmFtZT09PSdfX3Byb3RvX18nKXtcbi8vXG4vL1xuLy9cbi8vXG5vdXQubmV4dCggYFtcIl9fcHJvdG9fX1wiXTpgKTtcbiB9ZWxzZSBpZihpZGVudFBhdHRlcm4udGVzdChuYW1lKSl7XG5vdXQubmV4dCggYCR7bmFtZX06YCk7XG4gfWVsc2V7XG5vdXQubmV4dCggYCR7cXVvdGUobmFtZSl9OmApO1xuIH1cbmRlY29kZSh2YWx1ZSk7XG5vdXQubmV4dCgnLCcpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCByZWN1cj0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG4vL1xucmV0dXJuIG91dC5uZXh0KHF1b3RlKHJhd1RyZWUpKTtcbiB9XG4vL1xuYXNzZXJ0LnR5cGVvZihyYXdUcmVlLCdvYmplY3QnKTtcbmFzc2VydChyYXdUcmVlIT09bnVsbCk7XG5pZihRQ0xBU1MgaW4gcmF3VHJlZSl7XG5jb25zdCBxY2xhc3M9cmF3VHJlZVtRQ0xBU1NdO1xuYXNzZXJ0LnR5cGVvZihxY2xhc3MsJ3N0cmluZycpO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbi8vXG4vL1xuLy9cbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuLy9cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnTmFOJzpcbmNhc2UnSW5maW5pdHknOlxuY2FzZSctSW5maW5pdHknOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQocWNsYXNzKTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihkaWdpdHMsJ3N0cmluZycpO1xucmV0dXJuIG91dC5uZXh0KCBgJHtCaWdJbnQoZGlnaXRzKX1uYCk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQoJ1N5bWJvbC5hc3luY0l0ZXJhdG9yJyk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbmNvbnN0IHJlZ2lzdGVyZWROYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKHJlZ2lzdGVyZWROYW1lPT09dW5kZWZpbmVkKXtcbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5hc3NlcnQobWF0Y2ghPT1udWxsKTtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmFzc2VydChTeW1ib2xbc3VmZml4XT09PXN5bSk7XG5hc3NlcnQoaWRlbnRQYXR0ZXJuLnRlc3Qoc3VmZml4KSk7XG5yZXR1cm4gb3V0Lm5leHQoIGBTeW1ib2wuJHtzdWZmaXh9YCk7XG4gfVxucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLmZvcigke3F1b3RlKHJlZ2lzdGVyZWROYW1lKX0pYCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0e3RhZyxwYXlsb2FkfT1yYXdUcmVlO1xub3V0Lm5leHQoIGBtYWtlVGFnZ2VkKCR7cXVvdGUodGFnKX0sYCk7XG5kZWNvZGUocGF5bG9hZCk7XG5yZXR1cm4gb3V0Lm5leHQoJyknKTtcbiB9XG5cbmNhc2Unc2xvdCc6e1xubGV0e2lmYWNlfT1yYXdUcmVlO1xuY29uc3QgaW5kZXg9TnVtYmVyKE5hdChyYXdUcmVlLmluZGV4KSk7XG5jb25zdCBuZXN0ZWRSZW5kZXI9KGFyZyk9PntcbmNvbnN0IG9sZE91dD1vdXQ7XG50cnl7XG5vdXQ9bWFrZU5vSW5kZW50ZXIoKTtcbmRlY29kZShhcmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfWZpbmFsbHl7XG5vdXQ9b2xkT3V0O1xuIH1cbiB9O1xuaWYoaW5kZXg8c2xvdHMubGVuZ3RoKXtcbmNvbnN0IHNsb3Q9bmVzdGVkUmVuZGVyKHNsb3RzW2luZGV4XSk7XG5pZihpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gb3V0Lm5leHQoIGBzbG90VG9WYWwoJHtzbG90fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0sJHtpZmFjZX0pYCk7XG4gfWVsc2UgaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSwke2lmYWNlfSlgKTtcbiB9XG5cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09cmF3VHJlZTtcbm91dC5vcGVuKCd7Jyk7XG5kZWNvZGVQcm9wZXJ0eShRQ0xBU1Msb3JpZ2luYWwpO1xuaWYoJ3Jlc3QnaW4gcmF3VHJlZSl7XG5hc3NlcnQudHlwZW9mKHJlc3QsJ29iamVjdCcpO1xuYXNzZXJ0KHJlc3QhPT1udWxsKTtcbmNvbnN0IG5hbWVzPW93bktleXMocmVzdCk7XG5mb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxubmFtZSlcbiB9IG9mICR7cmVzdH0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxuZGVjb2RlUHJvcGVydHkobmFtZSxyZXN0W25hbWVdKTtcbiB9XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cblxuY2FzZSdlcnJvcic6e1xuY29uc3R7XG5uYW1lLFxubWVzc2FnZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWR9PVxucmF3VHJlZTtcbmNhdXNlPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGNhdXNlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xubmFtZSE9PSBgQWdncmVnYXRlRXJyb3JgfHxcbkZhaWwgYEFnZ3JlZ2F0ZUVycm9yIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xuZXJyb3JzPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGVycm9ycyBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbnJldHVybiBvdXQubmV4dCggYCR7bmFtZX0oJHtxdW90ZShtZXNzYWdlKX0pYCk7XG4gfVxuXG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCdbXScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ1snKTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xub3V0LmxpbmUoKTtcbmRlY29kZShyYXdUcmVlW2ldKTtcbm91dC5uZXh0KCcsJyk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnXScpO1xuIH1cbiB9ZWxzZXtcbi8vXG4vL1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJhd1RyZWUpO1xuaWYobmFtZXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gb3V0Lm5leHQoJ3t9Jyk7XG4gfWVsc2V7XG5vdXQub3BlbigneycpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuZGVjb2RlUHJvcGVydHkobmFtZSxyYXdUcmVlW25hbWVdKTtcbiB9XG5yZXR1cm4gb3V0LmNsb3NlKCd9Jyk7XG4gfVxuIH1cbiB9O1xucHJlcGFyZShlbmNvZGluZyk7XG5kZWNvZGUoZW5jb2RpbmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfTskaM2PX29uY2UuZGVjb2RlVG9KdXN0aW4oZGVjb2RlVG9KdXN0aW4pO1xuaGFyZGVuKGRlY29kZVRvSnVzdGluKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlY29kZVRvSnVzdGluIjpbImRlY29kZVRvSnVzdGluIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEQSpudcBgAAXAYAAC0AAABAZW5kby9tYXJzaGFsLXYxLjUuNC9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9tYXJzaGFsLmpzIl0sImV4cG9ydHMiOlsicGFyc2UiLCJzdHJpbmdpZnkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlTWFyc2hhbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRWYWxUb1Nsb3Q9KHZhbCk9PlxuRmFpbCBgTWFyc2hhbCdzIHN0cmluZ2lmeSByZWplY3RzIHByZXNlbmNlcyBhbmQgcHJvbWlzZXMgJHt2YWx9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRTbG90VG9WYWw9KHNsb3QsX2lmYWNlKT0+XG5GYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90cyAke3Nsb3R9YDtcblxuY29uc3QgYmFkQXJyYXlIYW5kbGVyPWhhcmRlbih7XG5nZXQ6KF90YXJnZXQsbmFtZSxfcmVjZWl2ZXIpPT57XG5pZihuYW1lPT09J2xlbmd0aCcpe1xucmV0dXJuIDA7XG4gfVxuLy9cbnRocm93IEZhaWwgYE1hcnNoYWwncyBwYXJzZSBtdXN0IG5vdCBlbmNvZGUgYW55IHNsb3QgcG9zaXRpb25zICR7bmFtZX1gO1xuIH19KTtcblxuXG5jb25zdCBiYWRBcnJheT1oYXJkZW4obmV3IFByb3h5KGhhcmRlbihbXSksYmFkQXJyYXlIYW5kbGVyKSk7XG5cbmNvbnN0e3NlcmlhbGl6ZSx1bnNlcmlhbGl6ZX09bWFrZU1hcnNoYWwoXG5kb05vdENvbnZlcnRWYWxUb1Nsb3QsXG5kb05vdENvbnZlcnRTbG90VG9WYWwsXG57XG5lcnJvclRhZ2dpbmc6J29mZicsXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdDonY2FwZGF0YSd9KTtcblxuXG5cbi8qXG5cblxuICovXG5jb25zdCBzdHJpbmdpZnk9KHZhbCk9PnNlcmlhbGl6ZSh2YWwpLmJvZHk7JGjNj19vbmNlLnN0cmluZ2lmeShzdHJpbmdpZnkpO1xuaGFyZGVuKHN0cmluZ2lmeSk7XG5cbi8qXG5cblxuICovXG5jb25zdCBwYXJzZT0oc3RyKT0+XG51bnNlcmlhbGl6ZShcbmhhcmRlbih7XG5ib2R5OnN0cixcbnNsb3RzOmJhZEFycmF5fSkpOyRozY9fb25jZS5wYXJzZShwYXJzZSk7XG5cblxuaGFyZGVuKHBhcnNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN0cmluZ2lmeSI6WyJzdHJpbmdpZnkiXSwicGFyc2UiOlsicGFyc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKcNSTionAAAqJwAAIwAAAEBlbmRvL21hcnNoYWwtdjEuNS40L3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIiwiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXJzaGFsIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxhc3NlcnRQYXNzYWJsZSxnZXRJbnRlcmZhY2VPZixnZXRFcnJvckNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5T2YsdG9QYXNzYWJsZUVycm9yLFgsRmFpbCxxLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLG9iamVjdE1hcCxRQ0xBU1MsbWFrZUVuY29kZVRvQ2FwRGF0YSxtYWtlRGVjb2RlRnJvbUNhcERhdGEsbWFrZURlY29kZUZyb21TbWFsbGNhcHMsbWFrZUVuY29kZVRvU21hbGxjYXBzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJ0b1Bhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAodG9QYXNzYWJsZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb0NhcERhdGEuanNcIiwgW1tcIlFDTEFTU1wiLCBbJGjNj19hID0+IChRQ0xBU1MgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRW5jb2RlVG9DYXBEYXRhID0gJGjNj19hKV1dLFtcIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbUNhcERhdGEgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvU21hbGxjYXBzLmpzXCIsIFtbXCJtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwc1wiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyA9ICRozY9fYSldXSxbXCJtYWtlRW5jb2RlVG9TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvU21hbGxjYXBzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e2RlZmluZVByb3BlcnRpZXN9PU9iamVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0VmFsVG9TbG90Rm49KHgpPT54O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0U2xvdFRvVmFsRm49KHgsXyk9Png7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXJzaGFsPShcbmNvbnZlcnRWYWxUb1Nsb3Q9ZGVmYXVsdFZhbFRvU2xvdEZuLFxuY29udmVydFNsb3RUb1ZhbD1kZWZhdWx0U2xvdFRvVmFsRm4sXG57XG5lcnJvclRhZ2dpbmc9J29uJyxcbm1hcnNoYWxOYW1lPSdhbm9uLW1hcnNoYWwnLFxuLy9cbi8vXG5lcnJvcklkTnVtPTEwMDAwLFxuLy9cbi8vXG5tYXJzaGFsU2F2ZUVycm9yPShlcnIpPT5cbmNvbnNvbGUubG9nKCdUZW1wb3JhcnkgbG9nZ2luZyBvZiBzZW50IGVycm9yJyxlcnIpLFxuLy9cbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0PSdjYXBkYXRhJ309XG57fSk9Plxue1xuYXNzZXJ0LnR5cGVvZihtYXJzaGFsTmFtZSwnc3RyaW5nJyk7XG5lcnJvclRhZ2dpbmc9PT0nb24nfHxcbmVycm9yVGFnZ2luZz09PSdvZmYnfHxcbkZhaWwgYFRoZSBlcnJvclRhZ2dpbmcgb3B0aW9uIGNhbiBvbmx5IGJlIFwib25cIiBvciBcIm9mZlwiICR7ZXJyb3JUYWdnaW5nfWA7XG5jb25zdCBuZXh0RXJyb3JJZD0oKT0+e1xuZXJyb3JJZE51bSs9MTtcbnJldHVybiBgZXJyb3I6JHttYXJzaGFsTmFtZX0jJHtlcnJvcklkTnVtfWA7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IHRvQ2FwRGF0YT0ocm9vdCk9PntcbmNvbnN0IHNsb3RzPVtdO1xuLy9cbmNvbnN0IHNsb3RNYXA9bmV3IE1hcCgpO1xuXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RDb21tb249KHBhc3NhYmxlKT0+e1xubGV0IGluZGV4PXNsb3RNYXAuZ2V0KHBhc3NhYmxlKTtcbmlmKGluZGV4IT09dW5kZWZpbmVkKXtcbi8vXG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDp0cnVlfSk7XG4gfVxuXG5pbmRleD1zbG90cy5sZW5ndGg7XG5jb25zdCBzbG90PWNvbnZlcnRWYWxUb1Nsb3QocGFzc2FibGUpO1xuc2xvdHMucHVzaChzbG90KTtcbnNsb3RNYXAuc2V0KHBhc3NhYmxlLGluZGV4KTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDpmYWxzZX0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAqL1xuY29uc3QgZW5jb2RlRXJyb3JDb21tb249KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IG1lc3NhZ2U9ZW5jb2RlUmVjdXIoIGAke2Vyci5tZXNzYWdlfWApO1xuYXNzZXJ0LnR5cGVvZihtZXNzYWdlLCdzdHJpbmcnKTtcbmNvbnN0IG5hbWU9ZW5jb2RlUmVjdXIoIGAke2Vyci5uYW1lfWApO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbi8vXG4vL1xuLy9cbmlmKGVycm9yVGFnZ2luZz09PSdvbicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGVycm9ySWQ9ZW5jb2RlUmVjdXIobmV4dEVycm9ySWQoKSk7XG5hc3NlcnQudHlwZW9mKGVycm9ySWQsJ3N0cmluZycpO1xuYW5ub3RhdGVFcnJvcihlcnIsWCBgU2VudCBhcyAke2Vycm9ySWR9YCk7XG5tYXJzaGFsU2F2ZUVycm9yKGVycik7XG5yZXR1cm4gaGFyZGVuKHtlcnJvcklkLG1lc3NhZ2UsbmFtZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7bWVzc2FnZSxuYW1lfSk7XG4gfVxuIH07XG5cbmlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nY2FwZGF0YScpe1xuLypcblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvQ2FwRGF0YT0ocGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuaWYocmVwZWF0PT09dHJ1ZXx8aWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGluZGV4fSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonc2xvdCcsaWZhY2UsaW5kZXh9KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHZhbCxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEodmFsLGdldEludGVyZmFjZU9mKHZhbCkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvQ2FwRGF0YShwcm9taXNlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBlcnJEYXRhPWVuY29kZUVycm9yQ29tbW9uKGVycixlbmNvZGVSZWN1cik7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonZXJyb3InLC4uLmVyckRhdGF9KTtcbiB9O1xuXG5jb25zdCBlbmNvZGVUb0NhcERhdGE9bWFrZUVuY29kZVRvQ2FwRGF0YSh7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGF9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvQ2FwRGF0YShyb290KTtcbmNvbnN0IGJvZHk9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5yZXR1cm4gaGFyZGVuKHtcbmJvZHksXG5zbG90c30pO1xuXG4gfWVsc2UgaWYoc2VyaWFsaXplQm9keUZvcm1hdD09PSdzbWFsbGNhcHMnKXtcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvU21hbGxjYXBzPShwcmVmaXgscGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuLy9cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH1gO1xuIH1cbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH0uJHtpZmFjZX1gO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW1vdGFibGUsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9TbWFsbGNhcHMoJyQnLHJlbW90YWJsZSxnZXRJbnRlcmZhY2VPZihyZW1vdGFibGUpKTtcblxuY29uc3QgZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCcmJyxwcm9taXNlKTtcblxuY29uc3QgZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xuY29uc3R7bWVzc2FnZSwuLi5yZXN0fT1lcnJEYXRhO1xucmV0dXJuIGhhcmRlbih7JyNlcnJvcic6bWVzc2FnZSwuLi5yZXN0fSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9bWFrZUVuY29kZVRvU21hbGxjYXBzKHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwc30pO1xuXG5cbmNvbnN0IGVuY29kZWQ9ZW5jb2RlVG9TbWFsbGNhcHMocm9vdCk7XG5jb25zdCBzbWFsbGNhcHNCb2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG4vL1xuLy9cbmJvZHk6IGAjJHtzbWFsbGNhcHNCb2R5fWAsXG5zbG90c30pO1xuXG4gfWVsc2V7XG4vL1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZUJvZHlGb3JtYXQ6ICR7cShzZXJpYWxpemVCb2R5Rm9ybWF0KX1gO1xuIH1cbiB9O1xuXG5jb25zdCBtYWtlRnVsbFJldml2ZT0oc2xvdHMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsTWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVTbG90Q29tbW9uPShzbG90RGF0YSk9PntcbmNvbnN0e2lmYWNlPXVuZGVmaW5lZCxpbmRleCwuLi5yZXN0fT1zbG90RGF0YTtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgc2xvdCBwcm9wZXJ0aWVzICR7cShvd25LZXlzKHJlc3QpKX1gO1xuY29uc3QgZXh0YW50PXZhbE1hcC5nZXQoaW5kZXgpO1xuaWYoZXh0YW50KXtcbnJldHVybiBleHRhbnQ7XG4gfVxuLy9cbi8vXG5jb25zdCBzbG90PXNsb3RzW051bWJlcihOYXQoaW5kZXgpKV07XG5jb25zdCB2YWw9Y29udmVydFNsb3RUb1ZhbChzbG90LGlmYWNlKTtcbnZhbE1hcC5zZXQoaW5kZXgsdmFsKTtcbnJldHVybiB2YWw7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGRlY29kZUVycm9yQ29tbW9uPShlcnJEYXRhLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7XG5lcnJvcklkPXVuZGVmaW5lZCxcbm1lc3NhZ2UsXG5uYW1lLFxuY2F1c2U9dW5kZWZpbmVkLFxuZXJyb3JzPXVuZGVmaW5lZCxcbi4uLnJlc3R9PVxuZXJyRGF0YTtcbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBkTmFtZT1kZWNvZGVSZWN1cihuYW1lKTtcbmNvbnN0IGRNZXNzYWdlPWRlY29kZVJlY3VyKG1lc3NhZ2UpO1xuLy9cbmNvbnN0IGRFcnJvcklkPS8qICAgICAgICAgICAgICAgICAqL2Vycm9ySWQmJmRlY29kZVJlY3VyKGVycm9ySWQpO1xuaWYodHlwZW9mIGROYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgaW52YWxpZCBlcnJvciBuYW1lIHR5cGVvZiAke3EodHlwZW9mIGROYW1lKX1gO1xuIH1cbmlmKHR5cGVvZiBkTWVzc2FnZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBkTWVzc2FnZSl9YDtcbiB9XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKGROYW1lKXx8RXJyb3I7XG5jb25zdCBlcnJvck5hbWU9XG5kRXJyb3JJZD09PXVuZGVmaW5lZD9cbiBgUmVtb3RlJHtlcnJDb25zdHJ1Y3Rvci5uYW1lfWA6XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX0oJHtkRXJyb3JJZH0pYDtcbmNvbnN0IG9wdGlvbnM9e1xuZXJyb3JOYW1lLFxuc2FuaXRpemU6ZmFsc2V9O1xuXG5pZihjYXVzZSl7XG5vcHRpb25zLmNhdXNlPWRlY29kZVJlY3VyKGNhdXNlKTtcbiB9XG5pZihlcnJvcnMpe1xub3B0aW9ucy5lcnJvcnM9ZGVjb2RlUmVjdXIoZXJyb3JzKTtcbiB9XG5jb25zdCByYXdFcnJvcj1tYWtlRXJyb3IoZE1lc3NhZ2UsZXJyQ29uc3RydWN0b3Isb3B0aW9ucyk7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVzY3M9b2JqZWN0TWFwKHJlc3QsKGRhdGEpPT4oe1xudmFsdWU6ZGVjb2RlUmVjdXIoZGF0YSksXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KSk7XG5cbmRlZmluZVByb3BlcnRpZXMocmF3RXJyb3IsZGVzY3MpO1xuaGFyZGVuKHJhd0Vycm9yKTtcbnJldHVybiB0b1Bhc3NhYmxlRXJyb3IocmF3RXJyb3IpO1xuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGE9KHJhd1RyZWUsX2RlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5zbG90RGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHNsb3REYXRhKTtcbiB9O1xuXG5jb25zdCBkZWNvZGVFcnJvckZyb21DYXBEYXRhPShyYXdUcmVlLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5lcnJEYXRhfT1yYXdUcmVlO1xucmV0dXJuIGRlY29kZUVycm9yQ29tbW9uKGVyckRhdGEsZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21DYXBEYXRhPW1ha2VEZWNvZGVGcm9tQ2FwRGF0YSh7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZVByb21pc2VGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGF9KTtcblxuXG5jb25zdCBtYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHM9KHByZWZpeCk9Pntcbi8qXG5cblxuXG4gICAgICAgKi9cbnJldHVybihzdHJpbmdFbmNvZGluZyxfZGVjb2RlUmVjdXIpPT57XG5hc3NlcnQoc3RyaW5nRW5jb2RpbmcuY2hhckF0KDApPT09cHJlZml4KTtcbi8vXG5jb25zdCBpPXN0cmluZ0VuY29kaW5nLmluZGV4T2YoJy4nKTtcbmNvbnN0IGluZGV4PU51bWJlcihzdHJpbmdFbmNvZGluZy5zbGljZSgxLGk8MD91bmRlZmluZWQ6aSkpO1xuLy9cbmNvbnN0IGlmYWNlPWk8MD91bmRlZmluZWQ6c3RyaW5nRW5jb2Rpbmcuc2xpY2UoaSsxKTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHtpZmFjZSxpbmRleH0pO1xuIH07XG4gfTtcbmNvbnN0IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCckJyk7XG5jb25zdCBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1tYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHMoJyYnKTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyxkZWNvZGVSZWN1cik9PntcbmNvbnN0eycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdEVyckRhdGF9PWVuY29kaW5nO1xuIWhhc093blByb3BlcnR5T2YocmVzdEVyckRhdGEsJ21lc3NhZ2UnKXx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgZXJyb3IgcHJvcGVydHkgJHtxKCdtZXNzYWdlJyl9YDtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbih7bWVzc2FnZSwuLi5yZXN0RXJyRGF0YX0sZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZUZyb21TbWFsbGNhcHMoe1xuLy9cbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG4vL1xuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtyZXZpdmVGcm9tQ2FwRGF0YSxyZXZpdmVGcm9tU21hbGxjYXBzfSk7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPShkYXRhKT0+e1xuY29uc3R7Ym9keSxzbG90c309ZGF0YTtcbnR5cGVvZiBib2R5PT09J3N0cmluZyd8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLmJvZHkgaXMgJHtib2R5fSwgbm90IHN0cmluZylgO1xuaXNBcnJheShkYXRhLnNsb3RzKXx8XG5GYWlsIGB1bnNlcmlhbGl6ZSgpIGdpdmVuIG5vbi1jYXBkYXRhICguc2xvdHMgYXJlIG5vdCBBcnJheSlgO1xuY29uc3R7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc309bWFrZUZ1bGxSZXZpdmUoc2xvdHMpO1xubGV0IHJlc3VsdDtcbi8vXG5pZihib2R5LmNoYXJBdCgwKT09PScjJyl7XG5jb25zdCBzbWFsbGNhcHNCb2R5PWJvZHkuc2xpY2UoMSk7XG5jb25zdCBlbmNvZGluZz1oYXJkZW4oSlNPTi5wYXJzZShzbWFsbGNhcHNCb2R5KSk7XG5yZXN1bHQ9aGFyZGVuKHJldml2ZUZyb21TbWFsbGNhcHMoZW5jb2RpbmcpKTtcbiB9ZWxzZXtcbmNvbnN0IHJhd1RyZWU9aGFyZGVuKEpTT04ucGFyc2UoYm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tQ2FwRGF0YShyYXdUcmVlKSk7XG4gfVxuLy9cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUocmVzdWx0KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHQpO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xudG9DYXBEYXRhLFxuZnJvbUNhcERhdGEsXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc2VyaWFsaXplOnRvQ2FwRGF0YSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVuc2VyaWFsaXplOmZyb21DYXBEYXRhfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTWFyc2hhbChtYWtlTWFyc2hhbCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFyc2hhbCI6WyJtYWtlTWFyc2hhbCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACTuhnzyCUAAMglAAAlAAAAQGVuZG8vbWFyc2hhbC12MS41LjQvc3JjL3JhbmtPcmRlci5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiLi9lbmNvZGVQYXNzYWJsZS5qcyJdLCJleHBvcnRzIjpbIkZ1bGxSYW5rQ292ZXIiLCJhc3NlcnRSYW5rU29ydGVkIiwiY29tcGFyYXRvck1pcnJvckltYWdlIiwiY29tcGFyZUFudGlSYW5rIiwiY29tcGFyZVJhbmsiLCJjb3ZlcmVkRW50cmllcyIsImdldEluZGV4Q292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciIsImludGVyc2VjdFJhbmtDb3ZlcnMiLCJpc1JhbmtTb3J0ZWQiLCJtYWtlQ29tcGFyYXRvcktpdCIsIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Iiwic29ydEJ5UmFuayIsInRyaXZpYWxDb21wYXJhdG9yIiwidW5pb25SYW5rQ292ZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldFRhZyxwYXNzU3R5bGVPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsRmFpbCxxLHBhc3NTdHlsZVByZWZpeGVzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlUGFzc2FibGUuanNcIiwgW1tcInBhc3NTdHlsZVByZWZpeGVzXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZVByZWZpeGVzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzLHNldFByb3RvdHlwZU9mLGlzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNhbWVWYWx1ZVplcm89KHgseSk9Png9PT15fHxpcyh4LHkpO1xuXG5jb25zdCAgICAgICAgdHJpdmlhbENvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT5cbi8vXG5sZWZ0PHJpZ2h0Py0xOmxlZnQ9PT1yaWdodD8wOjE7XG5cbi8qXG5cbiAqLyRozY9fb25jZS50cml2aWFsQ29tcGFyYXRvcih0cml2aWFsQ29tcGFyYXRvcik7XG5cbmNvbnN0IHBhc3NTdHlsZVJhbmtzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbmVudHJpZXMocGFzc1N0eWxlUHJlZml4ZXMpXG4vL1xuLnNvcnQoKFtfbGVmdFN0eWxlLGxlZnRQcmVmaXhlc10sW19yaWdodFN0eWxlLHJpZ2h0UHJlZml4ZXNdKT0+e1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKGxlZnRQcmVmaXhlcyxyaWdodFByZWZpeGVzKTtcbiB9KS5cbm1hcCgoW3Bhc3NTdHlsZSxwcmVmaXhlc10saW5kZXgpPT57XG4vL1xuLy9cbi8vXG5wcmVmaXhlcz09PVsuLi5wcmVmaXhlc10uc29ydCgpLmpvaW4oJycpfHxcbkZhaWwgYHVuc29ydGVkIHByZWZpeGVzIGZvciBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3EocHJlZml4ZXMpfWA7XG5jb25zdCBjb3Zlcj1bXG5wcmVmaXhlcy5jaGFyQXQoMCksXG5TdHJpbmcuZnJvbUNoYXJDb2RlKHByZWZpeGVzLmNoYXJDb2RlQXQocHJlZml4ZXMubGVuZ3RoLTEpKzEpXTtcblxucmV0dXJuW3Bhc3NTdHlsZSx7aW5kZXgsY292ZXJ9XTtcbiB9KSk7XG5cblxuc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUmFua3MsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUmFua3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0UGFzc1N0eWxlQ292ZXI9KHBhc3NTdHlsZSk9PnBhc3NTdHlsZVJhbmtzW3Bhc3NTdHlsZV0uY292ZXI7JGjNj19vbmNlLmdldFBhc3NTdHlsZUNvdmVyKGdldFBhc3NTdHlsZUNvdmVyKTtcbmhhcmRlbihnZXRQYXNzU3R5bGVDb3Zlcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWVtb09mU29ydGVkPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgY29tcGFyYXRvck1pcnJvckltYWdlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvbXBhcmF0b3JLaXQ9KGNvbXBhcmVSZW1vdGFibGVzPShfeCxfeSk9PjApPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29tcGFyYXRvcj0obGVmdCxyaWdodCk9PntcbmlmKHNhbWVWYWx1ZVplcm8obGVmdCxyaWdodCkpe1xucmV0dXJuIDA7XG4gfVxuY29uc3QgbGVmdFN0eWxlPXBhc3NTdHlsZU9mKGxlZnQpO1xuY29uc3QgcmlnaHRTdHlsZT1wYXNzU3R5bGVPZihyaWdodCk7XG5pZihsZWZ0U3R5bGUhPT1yaWdodFN0eWxlKXtcbnJldHVybiB0cml2aWFsQ29tcGFyYXRvcihcbnBhc3NTdHlsZVJhbmtzW2xlZnRTdHlsZV0uaW5kZXgsXG5wYXNzU3R5bGVSYW5rc1tyaWdodFN0eWxlXS5pbmRleCk7XG5cbiB9XG4vKlxuXG4gICAgICovXG5zd2l0Y2gobGVmdFN0eWxlKXtcbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gY29tcGFyZVJlbW90YWJsZXMobGVmdCxyaWdodCk7XG4gfVxuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdudWxsJzpcbmNhc2UnZXJyb3InOlxuY2FzZSdwcm9taXNlJzp7XG4vL1xuLy9cbnJldHVybiAwO1xuIH1cbmNhc2UnYm9vbGVhbic6XG5jYXNlJ2JpZ2ludCc6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbi8vXG5pZihsZWZ0PHJpZ2h0KXtcbnJldHVybi0xO1xuIH1lbHNle1xuYXNzZXJ0KGxlZnQ+cmlnaHQpO1xucmV0dXJuIDE7XG4gfVxuIH1cbmNhc2Unc3ltYm9sJzp7XG5yZXR1cm4gY29tcGFyYXRvcihcbm5hbWVGb3JQYXNzYWJsZVN5bWJvbChsZWZ0KSxcbm5hbWVGb3JQYXNzYWJsZVN5bWJvbChyaWdodCkpO1xuXG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4obGVmdCkpe1xuYXNzZXJ0KCFOdW1iZXIuaXNOYU4ocmlnaHQpKTtcbnJldHVybiAxO1xuIH1lbHNlIGlmKE51bWJlci5pc05hTihyaWdodCkpe1xucmV0dXJuLTE7XG4gfVxuLy9cbi8vXG5pZihsZWZ0PHJpZ2h0KXtcbnJldHVybi0xO1xuIH1lbHNle1xuYXNzZXJ0KGxlZnQ+cmlnaHQpO1xucmV0dXJuIDE7XG4gfVxuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbGVmdE5hbWVzPXJlY29yZE5hbWVzKGxlZnQpO1xuY29uc3QgcmlnaHROYW1lcz1yZWNvcmROYW1lcyhyaWdodCk7XG5cbmNvbnN0IHJlc3VsdD1jb21wYXJhdG9yKGxlZnROYW1lcyxyaWdodE5hbWVzKTtcbmlmKHJlc3VsdCE9PTApe1xucmV0dXJuIHJlc3VsdDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihcbnJlY29yZFZhbHVlcyhsZWZ0LGxlZnROYW1lcyksXG5yZWNvcmRWYWx1ZXMocmlnaHQscmlnaHROYW1lcykpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxhYmVsQ29tcD1jb21wYXJhdG9yKGdldFRhZyhsZWZ0KSxnZXRUYWcocmlnaHQpKTtcbmlmKGxhYmVsQ29tcCE9PTApe1xucmV0dXJuIGxhYmVsQ29tcDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihsZWZ0LnBheWxvYWQscmlnaHQucGF5bG9hZCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgcGFzc1N0eWxlOiAke3EobGVmdFN0eWxlKX1gO1xuIH19XG5cbi8qICAgICAgICAgICAgICAgKi9cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYW50aUNvbXBhcmF0b3I9KHgseSk9PmNvbXBhcmF0b3IoeSx4KTtcblxubWVtb09mU29ydGVkLnNldChjb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xubWVtb09mU29ydGVkLnNldChhbnRpQ29tcGFyYXRvcixuZXcgV2Vha1NldCgpKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGNvbXBhcmF0b3IsYW50aUNvbXBhcmF0b3IpO1xuY29tcGFyYXRvck1pcnJvckltYWdlcy5zZXQoYW50aUNvbXBhcmF0b3IsY29tcGFyYXRvcik7XG5cbnJldHVybiBoYXJkZW4oe2NvbXBhcmF0b3IsYW50aUNvbXBhcmF0b3J9KTtcbiB9O1xuLypcblxuXG4gKi8kaM2PX29uY2UubWFrZUNvbXBhcmF0b3JLaXQobWFrZUNvbXBhcmF0b3JLaXQpO1xuY29uc3QgICAgICAgIGNvbXBhcmF0b3JNaXJyb3JJbWFnZT0oY29tcGFyYXRvcik9PlxuY29tcGFyYXRvck1pcnJvckltYWdlcy5nZXQoY29tcGFyYXRvcik7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuY29tcGFyYXRvck1pcnJvckltYWdlKGNvbXBhcmF0b3JNaXJyb3JJbWFnZSk7XG5jb25zdCAgICAgICAgaXNSYW5rU29ydGVkPShwYXNzYWJsZXMsY29tcGFyZSk9PntcbmNvbnN0IHN1Yk1lbW9PZlNvcnRlZD1tZW1vT2ZTb3J0ZWQuZ2V0KGNvbXBhcmUpO1xuYXNzZXJ0KHN1Yk1lbW9PZlNvcnRlZCE9PXVuZGVmaW5lZCk7XG5pZihzdWJNZW1vT2ZTb3J0ZWQuaGFzKHBhc3NhYmxlcykpe1xucmV0dXJuIHRydWU7XG4gfVxuYXNzZXJ0KHBhc3NTdHlsZU9mKHBhc3NhYmxlcyk9PT0nY29weUFycmF5Jyk7XG5mb3IobGV0IGk9MTtpPHBhc3NhYmxlcy5sZW5ndGg7aSs9MSl7XG5pZihjb21wYXJlKHBhc3NhYmxlc1tpLTFdLHBhc3NhYmxlc1tpXSk+PTEpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5zdWJNZW1vT2ZTb3J0ZWQuYWRkKHBhc3NhYmxlcyk7XG5yZXR1cm4gdHJ1ZTtcbiB9OyRozY9fb25jZS5pc1JhbmtTb3J0ZWQoaXNSYW5rU29ydGVkKTtcbmhhcmRlbihpc1JhbmtTb3J0ZWQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFJhbmtTb3J0ZWQ9KHNvcnRlZCxjb21wYXJlKT0+XG5pc1JhbmtTb3J0ZWQoc29ydGVkLGNvbXBhcmUpfHxcbi8vXG4vL1xuRmFpbCBgTXVzdCBiZSByYW5rIHNvcnRlZDogJHtzb3J0ZWR9IHZzICR7c29ydEJ5UmFuayhzb3J0ZWQsY29tcGFyZSl9YDskaM2PX29uY2UuYXNzZXJ0UmFua1NvcnRlZChhc3NlcnRSYW5rU29ydGVkKTtcbmhhcmRlbihhc3NlcnRSYW5rU29ydGVkKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc29ydEJ5UmFuaz0ocGFzc2FibGVzLGNvbXBhcmUpPT57XG5pZihBcnJheS5pc0FycmF5KHBhc3NhYmxlcykpe1xuaGFyZGVuKHBhc3NhYmxlcyk7XG4vL1xuLy9cbi8vXG5pZihpc1JhbmtTb3J0ZWQocGFzc2FibGVzLGNvbXBhcmUpKXtcbnJldHVybiBwYXNzYWJsZXM7XG4gfVxuIH1cbmNvbnN0IHVuc29ydGVkPVsuLi5wYXNzYWJsZXNdO1xudW5zb3J0ZWQuZm9yRWFjaChoYXJkZW4pO1xuY29uc3Qgc29ydGVkPWhhcmRlbih1bnNvcnRlZC5zb3J0KGNvbXBhcmUpKTtcbmNvbnN0IHN1Yk1lbW9PZlNvcnRlZD1tZW1vT2ZTb3J0ZWQuZ2V0KGNvbXBhcmUpO1xuYXNzZXJ0KHN1Yk1lbW9PZlNvcnRlZCE9PXVuZGVmaW5lZCk7XG5zdWJNZW1vT2ZTb3J0ZWQuYWRkKHNvcnRlZCk7XG5yZXR1cm4gc29ydGVkO1xuIH07JGjNj19vbmNlLnNvcnRCeVJhbmsoc29ydEJ5UmFuayk7XG5oYXJkZW4oc29ydEJ5UmFuayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByYW5rU2VhcmNoPShzb3J0ZWQsY29tcGFyZSxrZXksYmlhcz0nbGVmdE1vc3QnKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5sZXQgbGVmdD0wO1xubGV0IHJpZ2h0PXNvcnRlZC5sZW5ndGg7XG53aGlsZShsZWZ0PHJpZ2h0KXtcbmNvbnN0IG09TWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7XG5jb25zdCBjb21wPWNvbXBhcmUoc29ydGVkW21dLGtleSk7XG5pZihjb21wPD0tMXx8Y29tcD09PTAmJmJpYXM9PT0ncmlnaHRNb3N0Jyl7XG5sZWZ0PW0rMTtcbiB9ZWxzZXtcbmFzc2VydChjb21wPj0xfHxjb21wPT09MCYmYmlhcz09PSdsZWZ0TW9zdCcpO1xucmlnaHQ9bTtcbiB9XG4gfVxucmV0dXJuIGJpYXM9PT0nbGVmdE1vc3QnP2xlZnQ6cmlnaHQtMTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbmRleENvdmVyPShzb3J0ZWQsY29tcGFyZSxbbGVmdEtleSxyaWdodEtleV0pPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmNvbnN0IGxlZnRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLGxlZnRLZXksJ2xlZnRNb3N0Jyk7XG5jb25zdCByaWdodEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUscmlnaHRLZXksJ3JpZ2h0TW9zdCcpO1xucmV0dXJuW2xlZnRJbmRleCxyaWdodEluZGV4XTtcbiB9OyRozY9fb25jZS5nZXRJbmRleENvdmVyKGdldEluZGV4Q292ZXIpO1xuaGFyZGVuKGdldEluZGV4Q292ZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBGdWxsUmFua0NvdmVyPWhhcmRlbihbJycsJ3snXSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuRnVsbFJhbmtDb3ZlcihGdWxsUmFua0NvdmVyKTtcbmNvbnN0ICAgICAgICBjb3ZlcmVkRW50cmllcz0oc29ydGVkLFtsZWZ0SW5kZXgscmlnaHRJbmRleF0pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpdGVyYWJsZT1oYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPWxlZnRJbmRleDtcbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuaWYoaTw9cmlnaHRJbmRleCl7XG5jb25zdCBlbGVtZW50PXNvcnRlZFtpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTpbaSxlbGVtZW50XSxkb25lOmZhbHNlfSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTp1bmRlZmluZWQsZG9uZTp0cnVlfSk7XG4gfVxuIH19KTtcblxuIH19KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLmNvdmVyZWRFbnRyaWVzKGNvdmVyZWRFbnRyaWVzKTtcbmhhcmRlbihjb3ZlcmVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYXhSYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKT49MD9hOmI7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtaW5SYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKTw9MD9hOmI7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bmlvblJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCB1bmlvblJhbmtDb3ZlclBhaXI9KFtsZWZ0QSxyaWdodEFdLFtsZWZ0QixyaWdodEJdKT0+W1xubWluUmFuayhjb21wYXJlLGxlZnRBLGxlZnRCKSxcbm1heFJhbmsoY29tcGFyZSxyaWdodEEscmlnaHRCKV07XG5cbnJldHVybiBjb3ZlcnMucmVkdWNlKHVuaW9uUmFua0NvdmVyUGFpcixbJ3snLCcnXSk7XG4gfTskaM2PX29uY2UudW5pb25SYW5rQ292ZXJzKHVuaW9uUmFua0NvdmVycyk7XG5oYXJkZW4odW5pb25SYW5rQ292ZXJzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGludGVyc2VjdFJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBpbnRlcnNlY3RSYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1heFJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5taW5SYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZShpbnRlcnNlY3RSYW5rQ292ZXJQYWlyLFsnJywneyddKTtcbiB9OyRozY9fb25jZS5pbnRlcnNlY3RSYW5rQ292ZXJzKGludGVyc2VjdFJhbmtDb3ZlcnMpO1xuXG5jb25zdCAgICAgICB7Y29tcGFyYXRvcjpjb21wYXJlUmFuayxhbnRpQ29tcGFyYXRvcjpjb21wYXJlQW50aVJhbmt9PVxubWFrZUNvbXBhcmF0b3JLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJlUmFuayhjb21wYXJlUmFuayk7JGjNj19vbmNlLmNvbXBhcmVBbnRpUmFuayhjb21wYXJlQW50aVJhbmspO1xuY29uc3QgICAgICAgIG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0PShsb25nTGl2ZWQ9ZmFsc2UpPT57XG5sZXQgbnVtU2Vlbj0wO1xuLy9cbi8vXG4vL1xuY29uc3QgTWFwQ29uc3RydWN0b3I9bG9uZ0xpdmVkP1dlYWtNYXA6TWFwO1xuY29uc3Qgc2Vlbj1uZXcgTWFwQ29uc3RydWN0b3IoKTtcbmNvbnN0IHRhZz0ocik9PntcbmlmKHNlZW4uaGFzKHIpKXtcbnJldHVybiBzZWVuLmdldChyKTtcbiB9XG5udW1TZWVuKz0xO1xuc2Vlbi5zZXQocixudW1TZWVuKTtcbnJldHVybiBudW1TZWVuO1xuIH07XG5jb25zdCBjb21wYXJlUmVtb3RhYmxlcz0oeCx5KT0+Y29tcGFyZVJhbmsodGFnKHgpLHRhZyh5KSk7XG5yZXR1cm4gbWFrZUNvbXBhcmF0b3JLaXQoY29tcGFyZVJlbW90YWJsZXMpO1xuIH07JGjNj19vbmNlLm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KTtcbmhhcmRlbihtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0cml2aWFsQ29tcGFyYXRvciI6WyJ0cml2aWFsQ29tcGFyYXRvciJdLCJnZXRQYXNzU3R5bGVDb3ZlciI6WyJnZXRQYXNzU3R5bGVDb3ZlciJdLCJtYWtlQ29tcGFyYXRvcktpdCI6WyJtYWtlQ29tcGFyYXRvcktpdCJdLCJjb21wYXJhdG9yTWlycm9ySW1hZ2UiOlsiY29tcGFyYXRvck1pcnJvckltYWdlIl0sImlzUmFua1NvcnRlZCI6WyJpc1JhbmtTb3J0ZWQiXSwiYXNzZXJ0UmFua1NvcnRlZCI6WyJhc3NlcnRSYW5rU29ydGVkIl0sInNvcnRCeVJhbmsiOlsic29ydEJ5UmFuayJdLCJnZXRJbmRleENvdmVyIjpbImdldEluZGV4Q292ZXIiXSwiRnVsbFJhbmtDb3ZlciI6WyJGdWxsUmFua0NvdmVyIl0sImNvdmVyZWRFbnRyaWVzIjpbImNvdmVyZWRFbnRyaWVzIl0sInVuaW9uUmFua0NvdmVycyI6WyJ1bmlvblJhbmtDb3ZlcnMiXSwiaW50ZXJzZWN0UmFua0NvdmVycyI6WyJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sImNvbXBhcmVSYW5rIjpbImNvbXBhcmVSYW5rIl0sImNvbXBhcmVBbnRpUmFuayI6WyJjb21wYXJlQW50aVJhbmsiXSwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiOlsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAEBlbmRvL21hcnNoYWwtdjEuNS40L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX+pOglkFAABZBQAAHgAAAEBlbmRvL25hdC12NS4wLjExL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiTmF0IiwiaXNOYXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc05hdCwgJ25hbWUnLCB7dmFsdWU6IFwiaXNOYXRcIn0pOyRozY9fb25jZS5pc05hdChpc05hdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdCwgJ25hbWUnLCB7dmFsdWU6IFwiTmF0XCJ9KTskaM2PX29uY2UuTmF0KE5hdCk7ICAgLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGlzTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5yZXR1cm4gYWxsZWdlZE51bT49MDtcbiB9XG5pZih0eXBlb2YgYWxsZWdlZE51bSE9PSdudW1iZXInKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbnJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihhbGxlZ2VkTnVtKSYmYWxsZWdlZE51bT49MDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBOYXQoYWxsZWdlZE51bSl7XG5pZih0eXBlb2YgYWxsZWdlZE51bT09PSdiaWdpbnQnKXtcbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBhbGxlZ2VkTnVtO1xuIH1cblxuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nbnVtYmVyJyl7XG5pZighTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkpe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYCk7XG4gfVxuaWYoYWxsZWdlZE51bTwwKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5lZ2F0aXZlYCk7XG4gfVxucmV0dXJuIEJpZ0ludChhbGxlZ2VkTnVtKTtcbiB9XG5cbnRocm93IFR5cGVFcnJvcihcbiBgJHthbGxlZ2VkTnVtfSBpcyBhICR7dHlwZW9mIGFsbGVnZWROdW19IGJ1dCBtdXN0IGJlIGEgYmlnaW50IG9yIGEgbnVtYmVyYCk7XG5cbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc05hdCI6WyJpc05hdCJdLCJOYXQiOlsiTmF0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKEpqrw/CgAAPwoAACAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiLCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vc3JjL2Vycm9yLmpzIiwiLi9zcmMvcmVtb3RhYmxlLmpzIiwiLi9zcmMvc3ltYm9sLmpzIiwiLi9zcmMvc3RyaW5nLmpzIiwiLi9zcmMvcGFzc1N0eWxlT2YuanMiLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIiwiLi9zcmMvbWFrZS1mYXIuanMiLCIuL3NyYy90eXBlR3VhcmRzLmpzIiwiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJGYXIiLCJGYXIiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiLCJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIiwiaXNPYmplY3QiLCJpc09iamVjdCIsImlzUGFzc2FibGUiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJeovyVUBgAAVAYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxhc3NlcnRDaGVja2VyLGdldE93bkRhdGFEZXNjcmlwdG9yOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHtnZXRQcm90b3R5cGVPZn09T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXkscHJvdG90eXBlOmFycmF5UHJvdG90eXBlfT1BcnJheTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2FuQmVWYWxpZD0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PlxuaXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJmNoZWNrKGZhbHNlLFggYEFycmF5IGV4cGVjdGVkOiAke2NhbmRpZGF0ZX1gKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5QXJyYXlIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonY29weUFycmF5JyxcblxuY2FuQmVWYWxpZCxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09YXJyYXlQcm90b3R5cGV8fFxuYXNzZXJ0LmZhaWwoWCBgTWFsZm9ybWVkIGFycmF5OiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4vL1xuLy9cbmNvbnN0IGxlbj0vKiAgICAgICAgICAgICAgICAgKi9cbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwnbGVuZ3RoJyxmYWxzZSxhc3NlcnRDaGVja2VyKS52YWx1ZTtcblxuLy9cbi8vXG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbnBhc3NTdHlsZU9mUmVjdXIoXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsaSx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH1cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkubGVuZ3RoPT09bGVuKzF8fFxuYXNzZXJ0LmZhaWwoWCBgQXJyYXlzIG11c3Qgbm90IGhhdmUgbm9uLWluZGV4ZXM6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbiB9fSk7JGjNj19vbmNlLkNvcHlBcnJheUhlbHBlcihDb3B5QXJyYXlIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weUFycmF5SGVscGVyIjpbIkNvcHlBcnJheUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyz0q1KQgAACkIAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL2NvcHlSZWNvcmQuanN7ImltcG9ydHMiOlsiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkNvcHlSZWNvcmRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxnZXRPd25EYXRhRGVzY3JpcHRvcixDWDskaM2PX2ltcG9ydHMoW1tcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRQcm90b3R5cGVPZixwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBjaGVja09iamVjdFByb3RvdHlwZT0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlY29yZHMgbXVzdCBpbmhlcml0IGZyb20gT2JqZWN0LnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJvcGVydHlDYW5CZVZhbGlkPShjYW5kaWRhdGUsa2V5LHZhbHVlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbih0eXBlb2Yga2V5PT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbiBvbmx5IGhhdmUgc3RyaW5nLW5hbWVkIHByb3BlcnRpZXM6ICR7Y2FuZGlkYXRlfWApJiYoXG4hY2FuQmVNZXRob2QodmFsdWUpfHxcbiEhY2hlY2smJlxuLy9cbkNYKFxuY2hlY2spXG4gYFJlY29yZHMgY2Fubm90IGNvbnRhaW4gbm9uLWZhciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IG1heSBiZSBtZXRob2RzIG9mIGFuIGltcGxpY2l0IFJlbW90YWJsZTogJHtjYW5kaWRhdGV9YCkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5UmVjb3JkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlSZWNvcmQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xucmV0dXJuKFxuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGNoZWNrKSYmXG4vL1xuLy9cbm93bktleXMoY2FuZGlkYXRlKS5ldmVyeSgoa2V5KT0+XG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsa2V5LGNhbmRpZGF0ZVtrZXldLGNoZWNrKSkpO1xuXG5cbiB9LFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja09iamVjdFByb3RvdHlwZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG4vL1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhjYW5kaWRhdGUpKXtcbmNvbnN0e3ZhbHVlfT1nZXRPd25EYXRhRGVzY3JpcHRvcihcbmNhbmRpZGF0ZSxcbm5hbWUsXG50cnVlLFxuYXNzZXJ0Q2hlY2tlcik7XG5cbmNoZWNrUHJvcGVydHlDYW5CZVZhbGlkKGNhbmRpZGF0ZSxuYW1lLHZhbHVlLGFzc2VydENoZWNrZXIpO1xucGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSk7XG4gfVxuIH19KTskaM2PX29uY2UuQ29weVJlY29yZEhlbHBlcihDb3B5UmVjb3JkSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlSZWNvcmRIZWxwZXIiOlsiQ29weVJlY29yZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABwIuV6VgoAAFYKAAAuAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyIsIi4vbWFrZVRhZ2dlZC5qcyJdLCJleHBvcnRzIjpbImRlZXBseUZ1bGZpbGxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkPWFzeW5jKHZhbCk9Pntcbi8vXG4vL1xuLy9cblxuaWYoIWlzT2JqZWN0KHZhbCkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsKTtcbiB9XG5pZihpc1Byb21pc2UodmFsKSl7XG5yZXR1cm4gRS53aGVuKHZhbCwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCBuYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMocmVjKTtcbmNvbnN0IHZhbFBzPW5hbWVzLm1hcCgobmFtZSk9PmRlZXBseUZ1bGZpbGxlZChyZWNbbmFtZV0pKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PlxuaGFyZGVuKGZyb21FbnRyaWVzKHZhbHMubWFwKChjLGkpPT5bbmFtZXNbaV0sY10pKSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGFycj0vKiAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB2YWxQcz1hcnIubWFwKChwKT0+ZGVlcGx5RnVsZmlsbGVkKHApKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PmhhcmRlbih2YWxzKSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnZD0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdGFnPWdldFRhZyh0Z2QpO1xuLy9cbnJldHVybiBFLndoZW4oZGVlcGx5RnVsZmlsbGVkKHRnZC5wYXlsb2FkKSwocGF5bG9hZCk9PlxubWFrZVRhZ2dlZCh0YWcscGF5bG9hZCkpO1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlbT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIHJlbTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlcnI9LyogICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIGVycjtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHByb209LyogICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdmFsO1xucmV0dXJuIEUud2hlbihwcm9tLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTskaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40L3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsYXNzZXJ0Q2hlY2tlcixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGhhc093bixlbnRyaWVzfT1PYmplY3Q7XG5cbi8vXG4vL1xuY29uc3QgZXJyb3JDb25zdHJ1Y3RvcnM9bmV3IE1hcChcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bXG5bJ0Vycm9yJyxFcnJvcl0sXG5bJ0V2YWxFcnJvcicsRXZhbEVycm9yXSxcblsnUmFuZ2VFcnJvcicsUmFuZ2VFcnJvcl0sXG5bJ1JlZmVyZW5jZUVycm9yJyxSZWZlcmVuY2VFcnJvcl0sXG5bJ1N5bnRheEVycm9yJyxTeW50YXhFcnJvcl0sXG5bJ1R5cGVFcnJvcicsVHlwZUVycm9yXSxcblsnVVJJRXJyb3InLFVSSUVycm9yXVxuXG4vL1xuLy9cbi8vXG4vL1xuXSk7XG5cblxuaWYodHlwZW9mIEFnZ3JlZ2F0ZUVycm9yIT09J3VuZGVmaW5lZCcpe1xuLy9cbmVycm9yQ29uc3RydWN0b3JzLnNldCgnQWdncmVnYXRlRXJyb3InLEFnZ3JlZ2F0ZUVycm9yKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0RXJyb3JDb25zdHJ1Y3Rvcj0obmFtZSk9PmVycm9yQ29uc3RydWN0b3JzLmdldChuYW1lKTskaM2PX29uY2UuZ2V0RXJyb3JDb25zdHJ1Y3RvcihnZXRFcnJvckNvbnN0cnVjdG9yKTtcbmhhcmRlbihnZXRFcnJvckNvbnN0cnVjdG9yKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tFcnJvckxpa2U9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuKFxuY2FuZGlkYXRlIGluc3RhbmNlb2YgRXJyb3J8fFxuISFjaGVjayYmQ1goY2hlY2spIGBFcnJvciBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrRXJyb3JMaWtlKTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzRXJyb3JMaWtlPShjYW5kaWRhdGUpPT5jaGVja0Vycm9yTGlrZShjYW5kaWRhdGUpOyRozY9fb25jZS5pc0Vycm9yTGlrZShpc0Vycm9yTGlrZSk7XG5oYXJkZW4oaXNFcnJvckxpa2UpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjPShcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKGRlc2MuZW51bWVyYWJsZSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtkZXNjfWApO1xuXG4gfVxuaWYoIWhhc093bihkZXNjLCd2YWx1ZScpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eTogJHtkZXNjfWApO1xuXG4gfVxuY29uc3R7dmFsdWV9PWRlc2M7XG5zd2l0Y2gocHJvcE5hbWUpe1xuY2FzZSdtZXNzYWdlJzpcbmNhc2Unc3RhY2snOntcbnJldHVybihcbnR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nOiAke3ZhbHVlfWApO1xuXG4gfVxuY2FzZSdjYXVzZSc6e1xuLy9cbnJldHVybiBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcih2YWx1ZSxwYXNzU3R5bGVPZlJlY3VyLGNoZWNrKTtcbiB9XG5jYXNlJ2Vycm9ycyc6e1xuaWYoIUFycmF5LmlzQXJyYXkodmFsdWUpfHxwYXNzU3R5bGVPZlJlY3VyKHZhbHVlKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgY29weUFycmF5OiAke3ZhbHVlfWApO1xuXG4gfVxucmV0dXJuIHZhbHVlLmV2ZXJ5KChlcnIpPT5cbi8vXG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2ZSZWN1cixjaGVjaykpO1xuXG4gfVxuZGVmYXVsdDp7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgaGFzIGV4dHJhIHVucGFzc2VkIHByb3BlcnR5ICR7cShwcm9wTmFtZSl9YCk7XG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcj0oXG5jYW5kaWRhdGUsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZighY2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKTtcbmNvbnN0e25hbWV9PXByb3RvO1xuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihuYW1lKTtcbmlmKGVyckNvbnN0cnVjdG9yPT09dW5kZWZpbmVkfHxlcnJDb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1wcm90byl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaW5oZXJpdCBmcm9tIGFuIGVycm9yIGNsYXNzIC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYoISgnbWVzc2FnZSdpbiBkZXNjcykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGhhdmUgYW4gb3duIFwibWVzc2FnZVwiIHN0cmluZyBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5cbnJldHVybiBlbnRyaWVzKGRlc2NzKS5ldmVyeSgoW3Byb3BOYW1lLGRlc2NdKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaykpO1xuXG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBFcnJvckhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidlcnJvcicsXG5cbmNhbkJlVmFsaWQ6Y2hlY2tFcnJvckxpa2UsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIsYXNzZXJ0Q2hlY2tlcil9KTskaM2PX29uY2UuRXJyb3JIZWxwZXIoRXJyb3JIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0RXJyb3JDb25zdHJ1Y3RvciI6WyJnZXRFcnJvckNvbnN0cnVjdG9yIl0sImlzRXJyb3JMaWtlIjpbImlzRXJyb3JMaWtlIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIl0sIkVycm9ySGVscGVyIjpbIkVycm9ySGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvaXRlci1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIi4vbWFrZS1mYXIuanMiXSwiZXhwb3J0cyI6WyJmaWx0ZXJJdGVyYWJsZSIsIm1hcEl0ZXJhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaM2PX2ltcG9ydHMoW1tcIi4vbWFrZS1mYXIuanNcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwSXRlcmFibGU9KGJhc2VJdGVyYWJsZSxmdW5jKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdtYXBwZWQgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBiYXNlSXRlcmF0b3I9YmFzZUl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBGYXIoJ21hcHBlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuY29uc3R7dmFsdWU6YmFzZVZhbHVlLGRvbmV9PWJhc2VJdGVyYXRvci5uZXh0KCk7XG5jb25zdCB2YWx1ZT1kb25lP2Jhc2VWYWx1ZTpmdW5jKGJhc2VWYWx1ZSk7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSxkb25lfSk7XG4gfX0pO1xuXG4gfX0pOyRozY9fb25jZS5tYXBJdGVyYWJsZShtYXBJdGVyYWJsZSk7XG5cbmhhcmRlbihtYXBJdGVyYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmaWx0ZXJJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLHByZWQpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ2ZpbHRlcmVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdmaWx0ZXJlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuZm9yKDs7KXtcbmNvbnN0IHJlc3VsdD1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3R7dmFsdWUsZG9uZX09cmVzdWx0O1xuaWYoZG9uZXx8cHJlZCh2YWx1ZSkpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuIH19KTtcblxuIH19KTskaM2PX29uY2UuZmlsdGVySXRlcmFibGUoZmlsdGVySXRlcmFibGUpO1xuXG5oYXJkZW4oZmlsdGVySXRlcmFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFwSXRlcmFibGUiOlsibWFwSXRlcmFibGUiXSwiZmlsdGVySXRlcmFibGUiOlsiZmlsdGVySXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40L3NyYy9tYWtlLWZhci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcmVtb3RhYmxlLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiR0VUX01FVEhPRF9OQU1FUyIsIlJlbW90YWJsZSIsIlRvRmFyRnVuY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMscSxGYWlsLGFzc2VydENoZWNrZXIsUEFTU19TVFlMRSxhc3NlcnRJZmFjZSxnZXRJbnRlcmZhY2VPZixSZW1vdGFibGVIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiYXNzZXJ0SWZhY2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0SWZhY2UgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaM2PX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbnNldFByb3RvdHlwZU9mLFxuY3JlYXRlLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlUmVtb3RhYmxlUHJvdG89KHJlbW90YWJsZSxpZmFjZSk9PntcbmxldCBvbGRQcm90bz1nZXRQcm90b3R5cGVPZihyZW1vdGFibGUpO1xuaWYodHlwZW9mIHJlbW90YWJsZT09PSdvYmplY3QnKXtcbmlmKG9sZFByb3RvPT09bnVsbCl7XG5vbGRQcm90bz1vYmplY3RQcm90b3R5cGU7XG4gfVxub2xkUHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuRmFpbCBgRm9yIG5vdywgcmVtb3RhYmxlcyBjYW5ub3QgaW5oZXJpdCBmcm9tIGFueXRoaW5nIHVudXN1YWwsIGluICR7cmVtb3RhYmxlfWA7XG4gfWVsc2UgaWYodHlwZW9mIHJlbW90YWJsZT09PSdmdW5jdGlvbicpe1xub2xkUHJvdG8hPT1udWxsfHxcbkZhaWwgYE9yaWdpbmFsIGZ1bmN0aW9uIG11c3Qgbm90IGluaGVyaXQgZnJvbSBudWxsOiAke3JlbW90YWJsZX1gO1xub2xkUHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5nZXRQcm90b3R5cGVPZihvbGRQcm90byk9PT1mdW5jdGlvblByb3RvdHlwZXx8XG5GYWlsIGBGYXIgZnVuY3Rpb25zIG11c3Qgb3JpZ2luYWxseSBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNle1xuRmFpbCBgdW5yZWNvZ25pemVkIHR5cGVvZiAke3JlbW90YWJsZX1gO1xuIH1cbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2xkUHJvdG8se1xuW1BBU1NfU1RZTEVdOnt2YWx1ZToncmVtb3RhYmxlJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6aWZhY2V9fSkpO1xuXG5cbiB9O1xuXG5jb25zdCBhc3NlcnRDYW5CZVJlbW90YWJsZT0oY2FuZGlkYXRlKT0+XG5SZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGU9KFxuLy9cbmlmYWNlPSdSZW1vdGFibGUnLFxucHJvcHM9dW5kZWZpbmVkLFxucmVtb3RhYmxlPS8qICAgICAgICAgICAgKi97fSk9Plxue1xuYXNzZXJ0SWZhY2UoaWZhY2UpO1xuYXNzZXJ0KGlmYWNlKTtcbi8vXG4vL1xucHJvcHM9PT11bmRlZmluZWR8fEZhaWwgYFJlbW90YWJsZSBwcm9wcyBub3QgeWV0IGltcGxlbWVudGVkICR7cHJvcHN9YDtcblxuLy9cbmFzc2VydENhbkJlUmVtb3RhYmxlKHJlbW90YWJsZSk7XG5cbi8vXG4hKFBBU1NfU1RZTEUgaW4gcmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgbWFya2VkIGFzIGEgJHtxKFxucmVtb3RhYmxlW1BBU1NfU1RZTEVdKVxuIH1gO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4uaXNGYWtlfHxcbi8vXG4haXNGcm96ZW4ocmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgZnJvemVuYDtcbmNvbnN0IHJlbW90YWJsZVByb3RvPW1ha2VSZW1vdGFibGVQcm90byhyZW1vdGFibGUsaWZhY2UpO1xuXG4vL1xuLy9cbmNvbnN0IG11dGF0ZUhhcmRlbkFuZENoZWNrPSh0YXJnZXQpPT57XG4vL1xuc2V0UHJvdG90eXBlT2YodGFyZ2V0LHJlbW90YWJsZVByb3RvKTtcbmhhcmRlbih0YXJnZXQpO1xuYXNzZXJ0Q2FuQmVSZW1vdGFibGUodGFyZ2V0KTtcbiB9O1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2soe30pO1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2socmVtb3RhYmxlKTtcblxuLy9cbi8vXG5hc3NlcnQoaWZhY2UhPT11bmRlZmluZWQpOy8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAqL3JlbW90YWJsZSk7XG4gfTskaM2PX29uY2UuUmVtb3RhYmxlKFJlbW90YWJsZSk7XG5oYXJkZW4oUmVtb3RhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9NRVRIT0RfTkFNRVM9J19fZ2V0TWV0aG9kTmFtZXNfXyc7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaM2PX29uY2UuRmFyKEZhcik7XG5oYXJkZW4oRmFyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRvRmFyRnVuY3Rpb249KGZhck5hbWUsZnVuYyk9PntcbmlmKGdldEludGVyZmFjZU9mKGZ1bmMpIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gZnVuYztcbiB9XG4vL1xucmV0dXJuIEZhcihmYXJOYW1lLCguLi5hcmdzKT0+ZnVuYyguLi5hcmdzKSk7XG4gfTskaM2PX29uY2UuVG9GYXJGdW5jdGlvbihUb0ZhckZ1bmN0aW9uKTtcbmhhcmRlbihUb0ZhckZ1bmN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlJlbW90YWJsZSI6WyJSZW1vdGFibGUiXSwiR0VUX01FVEhPRF9OQU1FUyI6WyJHRVRfTUVUSE9EX05BTUVTIl0sIkZhciI6WyJGYXIiXSwiVG9GYXJGdW5jdGlvbiI6WyJUb0ZhckZ1bmN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvbWFrZVRhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbIm1ha2VUYWdnZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxQQVNTX1NUWUxFLGFzc2VydFBhc3NhYmxlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuY29uc3R7Y3JlYXRlLHByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVGFnZ2VkPSh0YWcscGF5bG9hZCk9PntcbnR5cGVvZiB0YWc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBUaGUgdGFnIG9mIGEgdGFnZ2VkIHJlY29yZCBtdXN0IGJlIGEgc3RyaW5nOiAke3RhZ31gO1xuYXNzZXJ0UGFzc2FibGUoaGFyZGVuKHBheWxvYWQpKTtcbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2JqZWN0UHJvdG90eXBlLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3RhZ2dlZCd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOnRhZ30sXG5wYXlsb2FkOnt2YWx1ZTpwYXlsb2FkLGVudW1lcmFibGU6dHJ1ZX19KSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VUYWdnZWQobWFrZVRhZ2dlZCk7XG5oYXJkZW4obWFrZVRhZ2dlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlVGFnZ2VkIjpbIm1ha2VUYWdnZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAADSKSdxQVAAAUFQAAMAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJDWCIsIlBBU1NfU1RZTEUiLCJhc3NlcnRDaGVja2VyIiwiY2FuQmVNZXRob2QiLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIiwiY2hlY2tQYXNzU3R5bGUiLCJjaGVja1RhZ1JlY29yZCIsImdldE93bkRhdGFEZXNjcmlwdG9yIiwiZ2V0VGFnIiwiaGFzT3duUHJvcGVydHlPZiIsImlzT2JqZWN0IiwiaXNUeXBlZEFycmF5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e3Byb3RvdHlwZTpmdW5jdGlvblByb3RvdHlwZX09RnVuY3Rpb247XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbmdldFByb3RvdHlwZU9mLFxuaGFzT3duUHJvcGVydHk6b2JqZWN0SGFzT3duUHJvcGVydHksXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PVxuT2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZzp0b1N0cmluZ1RhZ1N5bWJvbH09U3ltYm9sO1xuXG5jb25zdCB0eXBlZEFycmF5UHJvdG90eXBlPWdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkucHJvdG90eXBlKTtcbmNvbnN0IHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxudHlwZWRBcnJheVByb3RvdHlwZSxcbnRvU3RyaW5nVGFnU3ltYm9sKTtcblxuYXNzZXJ0KHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MpO1xuY29uc3QgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPXR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MuZ2V0O1xuYXNzZXJ0KHR5cGVvZiBnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWc9PT0nZnVuY3Rpb24nKTtcblxuY29uc3QgICAgICAgIGhhc093blByb3BlcnR5T2Y9KG9iaixwcm9wKT0+XG5hcHBseShvYmplY3RIYXNPd25Qcm9wZXJ0eSxvYmosW3Byb3BdKTskaM2PX29uY2UuaGFzT3duUHJvcGVydHlPZihoYXNPd25Qcm9wZXJ0eU9mKTtcbmhhcmRlbihoYXNPd25Qcm9wZXJ0eU9mKTtcblxuLy9cbmNvbnN0ICAgICAgICBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7JGjNj19vbmNlLmlzT2JqZWN0KGlzT2JqZWN0KTtcbmhhcmRlbihpc09iamVjdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1R5cGVkQXJyYXk9KG9iamVjdCk9Pntcbi8vXG5jb25zdCB0YWc9YXBwbHkoZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLG9iamVjdCxbXSk7XG5yZXR1cm4gdGFnIT09dW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmlzVHlwZWRBcnJheShpc1R5cGVkQXJyYXkpO1xuaGFyZGVuKGlzVHlwZWRBcnJheSk7XG5cbmNvbnN0ICAgICAgICBQQVNTX1NUWUxFPVN5bWJvbC5mb3IoJ3Bhc3NTdHlsZScpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5QQVNTX1NUWUxFKFBBU1NfU1RZTEUpO1xuY29uc3QgICAgICAgIGNhbkJlTWV0aG9kPShmdW5jKT0+XG50eXBlb2YgZnVuYz09PSdmdW5jdGlvbicmJiEoUEFTU19TVFlMRSBpbiBmdW5jKTskaM2PX29uY2UuY2FuQmVNZXRob2QoY2FuQmVNZXRob2QpO1xuaGFyZGVuKGNhbkJlTWV0aG9kKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydENoZWNrZXI9KGNvbmQsZGV0YWlscyk9PntcbmFzc2VydChjb25kLGRldGFpbHMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q2hlY2tlcihhc3NlcnRDaGVja2VyKTtcbmhhcmRlbihhc3NlcnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQ1g9KGNoZWNrKT0+e1xuY29uc3QgcmVqZWN0PShULC4uLnN1YnMpPT5jaGVjayhmYWxzZSxYKFQsLi4uc3VicykpO1xucmV0dXJuIHJlamVjdDtcbiB9OyRozY9fb25jZS5DWChDWCk7XG5oYXJkZW4oQ1gpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE93bkRhdGFEZXNjcmlwdG9yPShcbmNhbmRpZGF0ZSxcbnByb3BOYW1lLFxuc2hvdWxkQmVFbnVtZXJhYmxlLFxuY2hlY2spPT5cbntcbmNvbnN0IGRlc2M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY2FuZGlkYXRlLHByb3BOYW1lKTtcblxucmV0dXJuKGRlc2MhPT11bmRlZmluZWR8fFxuISFjaGVjayYmQ1goY2hlY2spIGAke3EocHJvcE5hbWUpfSBwcm9wZXJ0eSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCkmJihcbmhhc093blByb3BlcnR5T2YoZGVzYywndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGFjY2Vzc29yIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKSYmKFxuc2hvdWxkQmVFbnVtZXJhYmxlP1xuZGVzYy5lbnVtZXJhYmxlfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgJHtxKHByb3BOYW1lKX0gbXVzdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gOlxuIWRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGVudW1lcmFibGUgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApP1xuZGVzYzpcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmdldE93bkRhdGFEZXNjcmlwdG9yKGdldE93bkRhdGFEZXNjcmlwdG9yKTtcbmhhcmRlbihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRUYWc9KHRhZ1JlY29yZCk9PnRhZ1JlY29yZFtTeW1ib2wudG9TdHJpbmdUYWddOyRozY9fb25jZS5nZXRUYWcoZ2V0VGFnKTtcbmhhcmRlbihnZXRUYWcpO1xuXG5jb25zdCAgICAgICAgY2hlY2tQYXNzU3R5bGU9KG9iaixwYXNzU3R5bGUsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG5wYXNzU3R5bGU9PT1leHBlY3RlZFBhc3NTdHlsZXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRXhwZWN0ZWQgJHtxKGV4cGVjdGVkUGFzc1N0eWxlKX0sIG5vdCAke3EocGFzc1N0eWxlKX06ICR7b2JqfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tQYXNzU3R5bGUoY2hlY2tQYXNzU3R5bGUpO1xuaGFyZGVuKGNoZWNrUGFzc1N0eWxlKTtcblxuY29uc3QgbWFrZUNoZWNrVGFnUmVjb3JkPShjaGVja1Byb3RvKT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnUmVjb3JkPSh0YWdSZWNvcmQsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNPYmplY3QodGFnUmVjb3JkKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBub24tb2JqZWN0IGNhbm5vdCBiZSBhIHRhZ1JlY29yZDogJHt0YWdSZWNvcmR9YCkmJihcbmlzRnJvemVuKHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBIHRhZ1JlY29yZCBtdXN0IGJlIGZyb3plbjogJHt0YWdSZWNvcmR9YCkmJihcbiFpc0FycmF5KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBbiBhcnJheSBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUGFzc1N0eWxlKFxudGFnUmVjb3JkLFxuZ2V0T3duRGF0YURlc2NyaXB0b3IodGFnUmVjb3JkLFBBU1NfU1RZTEUsZmFsc2UsY2hlY2spLnZhbHVlLFxuZXhwZWN0ZWRQYXNzU3R5bGUsXG5jaGVjaykmJihcblxudHlwZW9mIGdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxTeW1ib2wudG9TdHJpbmdUYWcsZmFsc2UsY2hlY2spLlxudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEEgW1N5bWJvbC50b1N0cmluZ1RhZ10tbmFtZWQgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt0YWdSZWNvcmR9YCkmJlxuY2hlY2tQcm90byh0YWdSZWNvcmQsZ2V0UHJvdG90eXBlT2YodGFnUmVjb3JkKSxjaGVjaykpO1xuXG4gfTtcbnJldHVybiBoYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuIH07XG5cbmNvbnN0ICAgICAgICBjaGVja1RhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbmNoZWNrKGZhbHNlLFggYEEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7dmFsfWApKTskaM2PX29uY2UuY2hlY2tUYWdSZWNvcmQoY2hlY2tUYWdSZWNvcmQpO1xuXG5oYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuXG5jb25zdCAgICAgICAgY2hlY2tGdW5jdGlvblRhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbnByb3RvIT09bnVsbCYmZ2V0UHJvdG90eXBlT2YocHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhcbmZhbHNlLFxuWCBgRm9yIGZ1bmN0aW9ucywgYSB0YWdSZWNvcmQgbXVzdCBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrRnVuY3Rpb25UYWdSZWNvcmQoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCk7XG5cblxuaGFyZGVuKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaGFzT3duUHJvcGVydHlPZiI6WyJoYXNPd25Qcm9wZXJ0eU9mIl0sImlzT2JqZWN0IjpbImlzT2JqZWN0Il0sImlzVHlwZWRBcnJheSI6WyJpc1R5cGVkQXJyYXkiXSwiUEFTU19TVFlMRSI6WyJQQVNTX1NUWUxFIl0sImNhbkJlTWV0aG9kIjpbImNhbkJlTWV0aG9kIl0sImFzc2VydENoZWNrZXIiOlsiYXNzZXJ0Q2hlY2tlciJdLCJDWCI6WyJDWCJdLCJnZXRPd25EYXRhRGVzY3JpcHRvciI6WyJnZXRPd25EYXRhRGVzY3JpcHRvciJdLCJnZXRUYWciOlsiZ2V0VGFnIl0sImNoZWNrUGFzc1N0eWxlIjpbImNoZWNrUGFzc1N0eWxlIl0sImNoZWNrVGFnUmVjb3JkIjpbImNoZWNrVGFnUmVjb3JkIl0sImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiOlsiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL3Bhc3NTdHlsZU9mLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vY29weUFycmF5LmpzIiwiLi9jb3B5UmVjb3JkLmpzIiwiLi90YWdnZWQuanMiLCIuL2Vycm9yLmpzIiwiLi9yZW1vdGFibGUuanMiLCIuL3N5bWJvbC5qcyIsIi4vc2FmZS1wcm9taXNlLmpzIiwiLi9zdHJpbmcuanMiXSwiZXhwb3J0cyI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCIsImFzc2VydFBhc3NhYmxlIiwiaXNQYXNzYWJsZSIsInBhc3NTdHlsZU9mIiwidG9QYXNzYWJsZUVycm9yIiwidG9UaHJvd2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjNj19hID0+IChpc1R5cGVkQXJyYXkgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5QXJyYXkuanNcIiwgW1tcIkNvcHlBcnJheUhlbHBlclwiLCBbJGjNj19hID0+IChDb3B5QXJyYXlIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weVJlY29yZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vdGFnZ2VkLmpzXCIsIFtbXCJUYWdnZWRIZWxwZXJcIiwgWyRozY9fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9lcnJvci5qc1wiLCBbW1wiRXJyb3JIZWxwZXJcIiwgWyRozY9fYSA9PiAoRXJyb3JIZWxwZXIgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N5bWJvbC5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2FmZVByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3N0cmluZy5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTdHJpbmdcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0Zyb3plbixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLHZhbHVlc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBtYWtlSGVscGVyVGFibGU9KHBhc3NTdHlsZUhlbHBlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEhlbHBlclRhYmxlPXtcbl9fcHJvdG9fXzpudWxsLFxuY29weUFycmF5OnVuZGVmaW5lZCxcbmNvcHlSZWNvcmQ6dW5kZWZpbmVkLFxudGFnZ2VkOnVuZGVmaW5lZCxcbmVycm9yOnVuZGVmaW5lZCxcbnJlbW90YWJsZTp1bmRlZmluZWR9O1xuXG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuY29uc3R7c3R5bGVOYW1lfT1oZWxwZXI7XG5zdHlsZU5hbWUgaW4gSGVscGVyVGFibGV8fEZhaWwgYFVucmVjb2duaXplZCBoZWxwZXI6ICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPT09dW5kZWZpbmVkfHxcbkZhaWwgYGNvbmZsaWN0aW5nIGhlbHBlcnMgZm9yICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPWhlbHBlcjtcbiB9XG5mb3IoY29uc3Qgc3R5bGVOYW1lIG9mIG93bktleXMoSGVscGVyVGFibGUpKXtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV0hPT11bmRlZmluZWR8fFxuRmFpbCBgbWlzc2luZyBoZWxwZXIgZm9yICR7cShzdHlsZU5hbWUpfWA7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKEhlbHBlclRhYmxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVBhc3NTdHlsZU9mPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuY29uc3QgSGVscGVyVGFibGU9bWFrZUhlbHBlclRhYmxlKHBhc3NTdHlsZUhlbHBlcnMpO1xuY29uc3QgcmVtb3RhYmxlSGVscGVyPUhlbHBlclRhYmxlLnJlbW90YWJsZTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGFzc1N0eWxlTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gICAqL1xuLy9cbmNvbnN0IHBhc3NTdHlsZU9mPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGluUHJvZ3Jlc3M9bmV3IFNldCgpO1xuXG5jb25zdCBwYXNzU3R5bGVPZlJlY3VyPShpbm5lcik9PntcbmNvbnN0IGlubmVySXNPYmplY3Q9aXNPYmplY3QoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5jb25zdCBpbm5lclN0eWxlPXBhc3NTdHlsZU1lbW8uZ2V0KGlubmVyKTtcbmlmKGlubmVyU3R5bGUpe1xucmV0dXJuIGlubmVyU3R5bGU7XG4gfVxuIWluUHJvZ3Jlc3MuaGFzKGlubmVyKXx8XG5GYWlsIGBQYXNzLWJ5LWNvcHkgZGF0YSBjYW5ub3QgYmUgY3ljbGljICR7aW5uZXJ9YDtcbmluUHJvZ3Jlc3MuYWRkKGlubmVyKTtcbiB9XG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mSW50ZXJuYWwoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5wYXNzU3R5bGVNZW1vLnNldChpbm5lcixwYXNzU3R5bGUpO1xuaW5Qcm9ncmVzcy5kZWxldGUoaW5uZXIpO1xuIH1cbnJldHVybiBwYXNzU3R5bGU7XG4gfTtcblxuY29uc3QgcGFzc1N0eWxlT2ZJbnRlcm5hbD0oaW5uZXIpPT57XG5jb25zdCB0eXBlc3RyPXR5cGVvZiBpbm5lcjtcbnN3aXRjaCh0eXBlc3RyKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJuIHR5cGVzdHI7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmFzc2VydFBhc3NhYmxlU3RyaW5nKGlubmVyKTtcbnJldHVybidzdHJpbmcnO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChpbm5lcik7XG5yZXR1cm4nc3ltYm9sJztcbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoaW5uZXI9PT1udWxsKXtcbnJldHVybidudWxsJztcbiB9XG5pZighaXNGcm96ZW4oaW5uZXIpKXtcbmFzc2VydC5mYWlsKFxuLy9cbi8vXG5pc1R5cGVkQXJyYXkoaW5uZXIpP1xuWCBgQ2Fubm90IHBhc3MgbXV0YWJsZSB0eXBlZCBhcnJheXMgbGlrZSAke2lubmVyfS5gOlxuWCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWApO1xuXG4gfVxuaWYoaXNQcm9taXNlKGlubmVyKSl7XG5hc3NlcnRTYWZlUHJvbWlzZShpbm5lcik7XG5yZXR1cm4ncHJvbWlzZSc7XG4gfVxudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5jb25zdCBwYXNzU3R5bGVUYWc9aW5uZXJbUEFTU19TVFlMRV07XG5pZihwYXNzU3R5bGVUYWchPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihwYXNzU3R5bGVUYWcsJ3N0cmluZycpO1xuY29uc3QgaGVscGVyPUhlbHBlclRhYmxlW3Bhc3NTdHlsZVRhZ107XG5oZWxwZXIhPT11bmRlZmluZWR8fFxuRmFpbCBgVW5yZWNvZ25pemVkIFBhc3NTdHlsZTogJHtxKHBhc3NTdHlsZVRhZyl9YDtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICovcGFzc1N0eWxlVGFnKTtcbiB9XG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuaWYoaGVscGVyLmNhbkJlVmFsaWQoaW5uZXIpKXtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiBoZWxwZXIuc3R5bGVOYW1lO1xuIH1cbiB9XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5jYXNlJ2Z1bmN0aW9uJzp7XG5pc0Zyb3plbihpbm5lcil8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWA7XG50eXBlb2YgaW5uZXIudGhlbiE9PSdmdW5jdGlvbid8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLXByb21pc2UgdGhlbmFibGVzYDtcbnJlbW90YWJsZUhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybidyZW1vdGFibGUnO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5yZWNvZ25pemVkIHR5cGVvZiAke3EodHlwZXN0cil9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9O1xuXG5yZXR1cm4gcGFzc1N0eWxlT2ZSZWN1cihwYXNzYWJsZSk7XG4gfTtcbnJldHVybiBoYXJkZW4ocGFzc1N0eWxlT2YpO1xuIH07XG5cbmNvbnN0ICAgICAgICBQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbD1TeW1ib2wuZm9yKCdAZW5kbyBwYXNzU3R5bGVPZicpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2woUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wpO1xuY29uc3QgICAgICAgIHBhc3NTdHlsZU9mPVxuZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc1tQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbF18fFxubWFrZVBhc3NTdHlsZU9mKFtcbkNvcHlBcnJheUhlbHBlcixcbkNvcHlSZWNvcmRIZWxwZXIsXG5UYWdnZWRIZWxwZXIsXG5FcnJvckhlbHBlcixcblJlbW90YWJsZUhlbHBlcl0pOyRozY9fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGUoYXNzZXJ0UGFzc2FibGUpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PntcbnRyeXtcbi8vXG4vL1xucmV0dXJuIHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PXVuZGVmaW5lZDtcbiB9Y2F0Y2goXyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG5oYXJkZW4oaXNQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0obmFtZSxkZXNjKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhuYW1lLGRlc2MscGFzc1N0eWxlT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvUGFzc2FibGVFcnJvcj0oZXJyKT0+e1xuaGFyZGVuKGVycik7XG5pZihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2YpKXtcbnJldHVybiBlcnI7XG4gfVxuY29uc3R7bmFtZSxtZXNzYWdlfT1lcnI7XG5jb25zdHtjYXVzZTpjYXVzZURlc2MsZXJyb3JzOmVycm9yc0Rlc2N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlcnIpO1xubGV0IGNhdXNlO1xubGV0IGVycm9ycztcbmlmKGNhdXNlRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdjYXVzZScsY2F1c2VEZXNjKSl7XG5jYXVzZT1jYXVzZURlc2MudmFsdWU7XG4gfVxuaWYoZXJyb3JzRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdlcnJvcnMnLGVycm9yc0Rlc2MpKXtcbmVycm9ycz1lcnJvcnNEZXNjLnZhbHVlO1xuIH1cblxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvciggYCR7bmFtZX1gKXx8RXJyb3I7XG5jb25zdCBuZXdFcnJvcj1tYWtlRXJyb3IoIGAke21lc3NhZ2V9YCxlcnJDb25zdHJ1Y3Rvcix7XG4vL1xuY2F1c2UsXG5lcnJvcnN9KTtcblxuLy9cbmhhcmRlbihuZXdFcnJvcik7XG4vL1xuLy9cbi8vXG5hbm5vdGF0ZUVycm9yKG5ld0Vycm9yLFggYGNvcGllZCBmcm9tIGVycm9yICR7ZXJyfWApO1xucGFzc1N0eWxlT2YobmV3RXJyb3IpPT09J2Vycm9yJ3x8XG5GYWlsIGBFeHBlY3RlZCAke25ld0Vycm9yfSB0byBiZSBhIHBhc3NhYmxlIGVycm9yYDtcbnJldHVybiBuZXdFcnJvcjtcbiB9OyRozY9fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaM2PX29uY2UudG9UaHJvd2FibGUodG9UaHJvd2FibGUpO1xuaGFyZGVuKHRvVGhyb3dhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIl0sInBhc3NTdHlsZU9mIjpbInBhc3NTdHlsZU9mIl0sImFzc2VydFBhc3NhYmxlIjpbImFzc2VydFBhc3NhYmxlIl0sImlzUGFzc2FibGUiOlsiaXNQYXNzYWJsZSJdLCJ0b1Bhc3NhYmxlRXJyb3IiOlsidG9QYXNzYWJsZUVycm9yIl0sInRvVGhyb3dhYmxlIjpbInRvVGhyb3dhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFKEe3qmFwAAphcAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvcmVtb3RhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJSZW1vdGFibGVIZWxwZXIiLCJhc3NlcnRJZmFjZSIsImdldEludGVyZmFjZU9mIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxhc3NlcnRDaGVja2VyLGNhbkJlTWV0aG9kLGhhc093blByb3BlcnR5T2YsUEFTU19TVFlMRSxjaGVja1RhZ1JlY29yZCxjaGVja0Z1bmN0aW9uVGFnUmVjb3JkLGlzT2JqZWN0LGdldFRhZyxDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcImNoZWNrRnVuY3Rpb25UYWdSZWNvcmRcIiwgWyRozY9fYSA9PiAoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZSxcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tJZmFjZT0oaWZhY2UsY2hlY2spPT57XG5yZXR1cm4oXG4vL1xuKHR5cGVvZiBpZmFjZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRm9yIG5vdywgaW50ZXJmYWNlICR7aWZhY2V9IG11c3QgYmUgYSBzdHJpbmc7IHVuaW1wbGVtZW50ZWRgKSYmKFxuaWZhY2U9PT0nUmVtb3RhYmxlJ3x8XG5pZmFjZS5zdGFydHNXaXRoKCdBbGxlZ2VkOiAnKXx8XG5pZmFjZS5zdGFydHNXaXRoKCdEZWJ1Z05hbWU6ICcpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBGb3Igbm93LCBpZmFjZSAke3EoXG5pZmFjZSlcbiB9IG11c3QgYmUgXCJSZW1vdGFibGVcIiBvciBiZWdpbiB3aXRoIFwiQWxsZWdlZDogXCIgb3IgXCJEZWJ1Z05hbWU6IFwiOyB1bmltcGxlbWVudGVkYCkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRJZmFjZT0oaWZhY2UpPT5jaGVja0lmYWNlKGlmYWNlLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRJZmFjZShhc3NlcnRJZmFjZSk7XG5oYXJkZW4oYXNzZXJ0SWZhY2UpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZVByb3RvT2Y9KG9yaWdpbmFsLGNoZWNrKT0+e1xuaXNPYmplY3Qob3JpZ2luYWwpfHxcbkZhaWwgYFJlbW90YWJsZXMgbXVzdCBiZSBvYmplY3RzIG9yIGZ1bmN0aW9uczogJHtvcmlnaW5hbH1gO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKG9yaWdpbmFsKTtcbmlmKFxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxucHJvdG89PT1udWxsfHxcbnByb3RvPT09RnVuY3Rpb24ucHJvdG90eXBlKVxue1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlbW90YWJsZXMgbXVzdCBiZSBleHBsaWNpdGx5IGRlY2xhcmVkOiAke3Eob3JpZ2luYWwpfWApO1xuXG4gfVxuXG5pZih0eXBlb2Ygb3JpZ2luYWw9PT0nb2JqZWN0Jyl7XG5jb25zdCBwcm90b1Byb3RvPWdldFByb3RvdHlwZU9mKHByb3RvKTtcbmlmKHByb3RvUHJvdG8hPT1vYmplY3RQcm90b3R5cGUmJnByb3RvUHJvdG8hPT1udWxsKXtcbi8vXG5yZXR1cm4gY2hlY2tSZW1vdGFibGUocHJvdG8sY2hlY2spO1xuIH1cbmlmKCFjaGVja1RhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9ZWxzZSBpZih0eXBlb2Ygb3JpZ2luYWw9PT0nZnVuY3Rpb24nKXtcbmlmKCFjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cblxuLy9cbmNvbnN0IHBhc3NTdHlsZUtleT0vKiAgICAgICAgICAgICAgICAgICovUEFTU19TVFlMRTtcbmNvbnN0IHRhZ0tleT0vKiAgICAgICAgICAgICAgICAgICovU3ltYm9sLnRvU3RyaW5nVGFnO1xuY29uc3R7XG4vL1xuWy8qICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZUtleV06X3Bhc3NTdHlsZURlc2MsXG5bLyogICAgICAgICAgICAgICAgICovdGFnS2V5XTp7dmFsdWU6aWZhY2V9LFxuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pO1xuXG5yZXR1cm4oXG4ob3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIHByb3BlcnRpZXMgb24gUmVtb3RhYmxlIFByb3RvICR7b3duS2V5cyhyZXN0RGVzY3MpfWApJiZcbmNoZWNrSWZhY2UoaWZhY2UsY2hlY2spKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29uZmlybWVkUmVtb3RhYmxlcz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZT0odmFsLGNoZWNrKT0+e1xuaWYoY29uZmlybWVkUmVtb3RhYmxlcy5oYXModmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighaXNGcm96ZW4odmFsKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZDWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHt2YWx9YCk7XG5cbiB9XG4vL1xuaWYoIVJlbW90YWJsZUhlbHBlci5jYW5CZVZhbGlkKHZhbCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHJlc3VsdD1jaGVja1JlbW90YWJsZVByb3RvT2YodmFsLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb25maXJtZWRSZW1vdGFibGVzLmFkZCh2YWwpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlT2Y9KHZhbCk9PntcbmlmKFxuIWlzT2JqZWN0KHZhbCl8fFxudmFsW1BBU1NfU1RZTEVdIT09J3JlbW90YWJsZSd8fFxuIWNoZWNrUmVtb3RhYmxlKHZhbCkpXG57XG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xucmV0dXJuIGdldFRhZyh2YWwpO1xuIH07JGjNj19vbmNlLmdldEludGVyZmFjZU9mKGdldEludGVyZmFjZU9mKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VPZik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3JlbW90YWJsZScsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5jb25zdCB2YWxpZFR5cGU9XG4oaXNPYmplY3QoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tb2JqZWN0cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCkmJihcbiFpc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgYXJyYXlzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKTtcbmlmKCF2YWxpZFR5cGUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdvYmplY3QnKXtcbi8vXG4vL1xucmV0dXJuIG93bktleXMoZGVzY3MpLmV2ZXJ5KChrZXkpPT57XG5yZXR1cm4oXG4vL1xuKGhhc093blByb3BlcnR5T2YoZGVzY3NbLyogICAgICAgICAgICAgICAgICova2V5XSwndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggYWNjZXNzb3JzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5PT09U3ltYm9sLnRvU3RyaW5nVGFnJiZjaGVja0lmYWNlKGNhbmRpZGF0ZVtrZXldLGNoZWNrKXx8XG4oY2FuQmVNZXRob2QoY2FuZGlkYXRlW2tleV0pfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBub24tbWV0aG9kcyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleSE9PVBBU1NfU1RZTEV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgcGFzcy1ieS1yZW1vdGUgY2Fubm90IHNoYWRvdyAke3EoUEFTU19TVFlMRSl9YCkpKTtcblxuIH0pO1xuIH1lbHNlIGlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nZnVuY3Rpb24nKXtcbi8vXG4vL1xuY29uc3R7XG5uYW1lOm5hbWVEZXNjLFxubGVuZ3RoOmxlbmd0aERlc2MsXG4vL1xuW1N5bWJvbC50b1N0cmluZ1RhZ106dG9TdHJpbmdUYWdEZXNjLFxuLi4ucmVzdERlc2NzfT1cbmRlc2NzO1xuY29uc3QgcmVzdEtleXM9b3duS2V5cyhyZXN0RGVzY3MpO1xucmV0dXJuKFxuKG5hbWVEZXNjJiZ0eXBlb2YgbmFtZURlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRmFyIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJihcbmxlbmd0aERlc2MmJnR5cGVvZiBsZW5ndGhEZXNjLnZhbHVlPT09J251bWJlcid8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gbGVuZ3RoIG11c3QgYmUgYSBudW1iZXIsIGluICR7Y2FuZGlkYXRlfWApJiYoXG50b1N0cmluZ1RhZ0Rlc2M9PT11bmRlZmluZWR8fFxuKHR5cGVvZiB0b1N0cmluZ1RhZ0Rlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBAQHRvU3RyaW5nVGFnIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiZcbmNoZWNrSWZhY2UodG9TdHJpbmdUYWdEZXNjLnZhbHVlLGNoZWNrKSkmJihcbnJlc3RLZXlzLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb25zIHVuZXhwZWN0ZWQgcHJvcGVydGllcyBiZXNpZGVzIC5uYW1lIGFuZCAubGVuZ3RoICR7cmVzdEtleXN9YCkpO1xuXG4gfVxucmV0dXJuISFjaGVjayYmQ1goY2hlY2spIGB1bnJlY29nbml6ZWQgdHlwZW9mICR7Y2FuZGlkYXRlfWA7XG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSk9PmNoZWNrUmVtb3RhYmxlKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKSxcblxuZXZlcnk6KF9wYXNzYWJsZSxfZm4pPT50cnVlfSk7JGjNj19vbmNlLlJlbW90YWJsZUhlbHBlcihSZW1vdGFibGVIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0SWZhY2UiOlsiYXNzZXJ0SWZhY2UiXSwiZ2V0SW50ZXJmYWNlT2YiOlsiZ2V0SW50ZXJmYWNlT2YiXSwiUmVtb3RhYmxlSGVscGVyIjpbIlJlbW90YWJsZUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL3NhZmUtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRTYWZlUHJvbWlzZSIsImlzU2FmZVByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLHEsYXNzZXJ0Q2hlY2tlcixoYXNPd25Qcm9wZXJ0eU9mLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtpc0Zyb3plbixnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZ309U3ltYm9sO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb21pc2VPd25LZXlzPShwcixjaGVjayk9PntcbmNvbnN0IGtleXM9b3duS2V5cyhwcik7XG5cbmlmKGtleXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB1bmtub3duS2V5cz1rZXlzLmZpbHRlcihcbihrZXkpPT50eXBlb2Yga2V5IT09J3N5bWJvbCd8fCFoYXNPd25Qcm9wZXJ0eU9mKFByb21pc2UucHJvdG90eXBlLGtleSkpO1xuXG5cbmlmKHVua25vd25LZXlzLmxlbmd0aCE9PTApe1xucmV0dXJuIENYKFxuY2hlY2spXG4gYCR7cHJ9IC0gTXVzdCBub3QgaGF2ZSBhbnkgb3duIHByb3BlcnRpZXM6ICR7cSh1bmtub3duS2V5cyl9YDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1NhZmVPd25LZXk9KGtleSk9PntcbmlmKGtleT09PXRvU3RyaW5nVGFnKXtcbi8vXG4vL1xuY29uc3QgdGFnRGVzYz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHIsdG9TdHJpbmdUYWcpO1xuYXNzZXJ0KHRhZ0Rlc2MhPT11bmRlZmluZWQpO1xucmV0dXJuKFxuKGhhc093blByb3BlcnR5T2YodGFnRGVzYywndmFsdWUnKXx8XG5DWChcbmNoZWNrKVxuIGBPd24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eSwgbm90IGFuIGFjY2Vzc29yOiAke3EodGFnRGVzYyl9YCkmJihcbnR5cGVvZiB0YWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJHtxKHRhZ0Rlc2MudmFsdWUpfWApJiYoXG4hdGFnRGVzYy5lbnVtZXJhYmxlfHxcbkNYKGNoZWNrKSBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtxKHRhZ0Rlc2MpfWApKTtcblxuIH1cbmNvbnN0IHZhbD1wcltrZXldO1xuaWYodmFsPT09dW5kZWZpbmVkfHx0eXBlb2YgdmFsPT09J251bWJlcicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoXG50eXBlb2YgdmFsPT09J29iamVjdCcmJlxudmFsIT09bnVsbCYmXG5pc0Zyb3plbih2YWwpJiZcbmdldFByb3RvdHlwZU9mKHZhbCk9PT1PYmplY3QucHJvdG90eXBlKVxue1xuY29uc3Qgc3ViS2V5cz1vd25LZXlzKHZhbCk7XG5pZihzdWJLZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG5pZihcbnN1YktleXMubGVuZ3RoPT09MSYmXG5zdWJLZXlzWzBdPT09J2Rlc3Ryb3llZCcmJlxudmFsLmRlc3Ryb3llZD09PWZhbHNlKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBDWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIE5vZGUgYXN5bmNfaG9va3MgYWRkaXRpb25zIHRvIHByb21pc2U6ICR7cHJ9LiR7cShcblN0cmluZyhrZXkpKVxuIH0gaXMgJHt2YWx9YDtcbiB9O1xuXG5yZXR1cm4ga2V5cy5ldmVyeShjaGVja1NhZmVPd25LZXkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja1NhZmVQcm9taXNlPShwcixjaGVjayk9PntcbnJldHVybihcbihpc0Zyb3plbihwcil8fENYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGJlIGZyb3plbmApJiYoXG5pc1Byb21pc2UocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBhIHByb21pc2VgKSYmKFxuZ2V0UHJvdG90eXBlT2YocHIpPT09UHJvbWlzZS5wcm90b3R5cGV8fFxuQ1goY2hlY2spIGAke3ByfSAtIE11c3QgaW5oZXJpdCBmcm9tIFByb21pc2UucHJvdG90eXBlOiAke3EoXG5nZXRQcm90b3R5cGVPZihwcikpXG4gfWApJiZcbmNoZWNrUHJvbWlzZU93bktleXMoLyogICAgICAgICAgICAgICAgICAqL3ByLGNoZWNrKSk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrU2FmZVByb21pc2UpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsKHgpPT54KTskaM2PX29uY2UuaXNTYWZlUHJvbWlzZShpc1NhZmVQcm9taXNlKTtcbmhhcmRlbihpc1NhZmVQcm9taXNlKTtcblxuY29uc3QgICAgICAgIGFzc2VydFNhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsYXNzZXJ0Q2hlY2tlcik7JGjNj19vbmNlLmFzc2VydFNhZmVQcm9taXNlKGFzc2VydFNhZmVQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzU2FmZVByb21pc2UiOlsiaXNTYWZlUHJvbWlzZSJdLCJhc3NlcnRTYWZlUHJvbWlzZSI6WyJhc3NlcnRTYWZlUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACYl18ssgcAALIHAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL3N0cmluZy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzV2VsbEZvcm1lZFN0cmluZyhpc1dlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGlzV2VsbEZvcm1lZFN0cmluZyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0V2VsbEZvcm1lZFN0cmluZz0oc3RyKT0+e1xuaXNXZWxsRm9ybWVkU3RyaW5nKHN0cil8fEZhaWwgYEV4cGVjdGVkIHdlbGwtZm9ybWVkIHVuaWNvZGUgc3RyaW5nOiAke3N0cn1gO1xuIH07JGjNj19vbmNlLmFzc2VydFdlbGxGb3JtZWRTdHJpbmcoYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5cbmNvbnN0IE9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRT1cbmdldEVudmlyb25tZW50T3B0aW9uKCdPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEUnLCdkaXNhYmxlZCcsW1xuJ2VuYWJsZWQnXSk9PT1cbidlbmFibGVkJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3RyaW5nPShzdHIpPT57XG50eXBlb2Ygc3RyPT09J3N0cmluZyd8fEZhaWwgYEV4cGVjdGVkIHN0cmluZyAke3N0cn1gO1xuIU9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRXx8YXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhzdHIpO1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABmP1mV/AkAAPwJAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCB3ZWxsS25vd25TeW1ib2xOYW1lcz1uZXcgTWFwKFxub3duS2V5cyhTeW1ib2wpLlxuZmlsdGVyKFxuKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnJiZ0eXBlb2YgU3ltYm9sW25hbWVdPT09J3N5bWJvbCcpLlxuXG5maWx0ZXIoKG5hbWUpPT57XG4vL1xuIW5hbWUuc3RhcnRzV2l0aCgnQEAnKXx8XG5GYWlsIGBEaWQgbm90IGV4cGVjdCBTeW1ib2wgdG8gaGF2ZSBhIHN5bWJvbC12YWx1ZWQgcHJvcGVydHkgbmFtZSBzdGFydGluZyB3aXRoIFwiQEBcIiAke3EoXG5uYW1lKVxuIH1gO1xucmV0dXJuIHRydWU7XG4gfSlcbi8vXG4ubWFwKChuYW1lKT0+W1N5bWJvbFtuYW1lXSwgYEBAJHtuYW1lfWBdKSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGVTeW1ib2w9KHN5bSk9PlxudHlwZW9mIHN5bT09PSdzeW1ib2wnJiYoXG50eXBlb2YgU3ltYm9sLmtleUZvcihzeW0pPT09J3N0cmluZyd8fHdlbGxLbm93blN5bWJvbE5hbWVzLmhhcyhzeW0pKTskaM2PX29uY2UuaXNQYXNzYWJsZVN5bWJvbChpc1Bhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihpc1Bhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3ltYm9sPShzeW0pPT5cbmlzUGFzc2FibGVTeW1ib2woc3ltKXx8XG5GYWlsIGBPbmx5IHJlZ2lzdGVyZWQgc3ltYm9scyBvciB3ZWxsLWtub3duIHN5bWJvbHMgYXJlIHBhc3NhYmxlOiAke3Eoc3ltKX1gOyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN5bWJvbChhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYW1lRm9yUGFzc2FibGVTeW1ib2w9KHN5bSk9PntcbmNvbnN0IG5hbWU9U3ltYm9sLmtleUZvcihzeW0pO1xuaWYobmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gd2VsbEtub3duU3ltYm9sTmFtZXMuZ2V0KHN5bSk7XG4gfVxuaWYobmFtZS5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBgQEAke25hbWV9YDtcbiB9XG5yZXR1cm4gbmFtZTtcbiB9OyRozY9fb25jZS5uYW1lRm9yUGFzc2FibGVTeW1ib2wobmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXNzYWJsZVN5bWJvbEZvck5hbWU9KG5hbWUpPT57XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY29uc3QgbWF0Y2g9QXRBdFByZWZpeFBhdHRlcm4uZXhlYyhuYW1lKTtcbmlmKG1hdGNoKXtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmlmKHN1ZmZpeC5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBTeW1ib2wuZm9yKHN1ZmZpeCk7XG4gfWVsc2V7XG5jb25zdCBzeW09U3ltYm9sW3N1ZmZpeF07XG5pZih0eXBlb2Ygc3ltPT09J3N5bWJvbCcpe1xucmV0dXJuIHN5bTtcbiB9XG5GYWlsIGBSZXNlcnZlZCBmb3Igd2VsbCBrbm93biBzeW1ib2wgJHtxKHN1ZmZpeCl9OiAke3EobmFtZSl9YDtcbiB9XG4gfVxucmV0dXJuIFN5bWJvbC5mb3IobmFtZSk7XG4gfTskaM2PX29uY2UucGFzc2FibGVTeW1ib2xGb3JOYW1lKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG5oYXJkZW4ocGFzc2FibGVTeW1ib2xGb3JOYW1lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUGFzc2FibGVTeW1ib2wiOlsiaXNQYXNzYWJsZVN5bWJvbCJdLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiOlsibmFtZUZvclBhc3NhYmxlU3ltYm9sIl0sInBhc3NhYmxlU3ltYm9sRm9yTmFtZSI6WyJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYNVjnhQHAAAUBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40L3NyYy90YWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIlRhZ2dlZEhlbHBlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLGFzc2VydENoZWNrZXIsY2hlY2tUYWdSZWNvcmQsUEFTU19TVFlMRSxnZXRPd25EYXRhRGVzY3JpcHRvcixjaGVja1Bhc3NTdHlsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJjaGVja1Bhc3NTdHlsZVwiLCBbJGjNj19hID0+IChjaGVja1Bhc3NTdHlsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgVGFnZ2VkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3RhZ2dlZCcsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmNoZWNrUGFzc1N0eWxlKGNhbmRpZGF0ZSxjYW5kaWRhdGVbUEFTU19TVFlMRV0sJ3RhZ2dlZCcsY2hlY2spLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja1RhZ1JlY29yZChjYW5kaWRhdGUsJ3RhZ2dlZCcsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06X2xhYmVsRGVzYyxcbnBheWxvYWQ6X3BheWxvYWREZXNjLC8vXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xub3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuRmFpbCBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIHRhZ2dlZCByZWNvcmQgJHtvd25LZXlzKHJlc3REZXNjcyl9YDtcblxuLy9cbi8vXG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdwYXlsb2FkJyx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH19KTskaM2PX29uY2UuVGFnZ2VkSGVscGVyKFRhZ2dlZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUYWdnZWRIZWxwZXIiOlsiVGFnZ2VkSGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZU9mLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0UmVjb3JkIiwiYXNzZXJ0UmVtb3RhYmxlIiwiaXNDb3B5QXJyYXkiLCJpc1JlY29yZCIsImlzUmVtb3RhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxwYXNzU3R5bGVPZjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaM2PX29uY2UuaXNDb3B5QXJyYXkoaXNDb3B5QXJyYXkpO1xuaGFyZGVuKGlzQ29weUFycmF5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVjb3JkPShyZWNvcmQpPT5wYXNzU3R5bGVPZihyZWNvcmQpPT09J2NvcHlSZWNvcmQnOyRozY9fb25jZS5pc1JlY29yZChpc1JlY29yZCk7XG5oYXJkZW4oaXNSZWNvcmQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVtb3RhYmxlPShyZW1vdGFibGUpPT5wYXNzU3R5bGVPZihyZW1vdGFibGUpPT09J3JlbW90YWJsZSc7JGjNj19vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyYXksb3B0TmFtZU9mQXJyYXk9J0FsbGVnZWQgYXJyYXknKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKGFycmF5KTtcbnBhc3NTdHlsZT09PSdjb3B5QXJyYXknfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZBcnJheSl9ICR7YXJyYXl9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weUFycmF5KGFzc2VydENvcHlBcnJheSk7XG5oYXJkZW4oYXNzZXJ0Q29weUFycmF5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVjb3JkPShyZWNvcmQsb3B0TmFtZU9mUmVjb3JkPSdBbGxlZ2VkIHJlY29yZCcpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVjb3JkKTtcbnBhc3NTdHlsZT09PSdjb3B5UmVjb3JkJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVjb3JkKX0gJHtyZWNvcmR9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgcmVjb3JkLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlY29yZChhc3NlcnRSZWNvcmQpO1xuaGFyZGVuKGFzc2VydFJlY29yZCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlbW90YWJsZT0oXG5yZW1vdGFibGUsXG5vcHROYW1lT2ZSZW1vdGFibGU9J0FsbGVnZWQgcmVtb3RhYmxlJyk9Plxue1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlbW90YWJsZSk7XG5wYXNzU3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVtb3RhYmxlKX0gJHtyZW1vdGFibGV9IG11c3QgYmUgYSByZW1vdGFibGUsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFL0SMlGBgAARgYAACEAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjYvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLCIuL3NyYy9tZW1vLXJhY2UuanMiLCIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlUHJvbWlzZUtpdCIsInJhY2VQcm9taXNlcyJdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCxtZW1vUmFjZTskaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzXCIsIFtbXCJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvbWVtby1yYWNlLmpzXCIsIFtbXCJtZW1vUmFjZVwiLCBbJGjNj19hID0+IChtZW1vUmFjZSA9ICRozY9fYSldXV1dLFtcIi4vc3JjL2lzLXByb21pc2UuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlUHJvbWlzZUtpdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVByb21pc2VLaXRcIn0pOyRozY9fb25jZS5tYWtlUHJvbWlzZUtpdChtYWtlUHJvbWlzZUtpdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJhY2VQcm9taXNlcywgJ25hbWUnLCB7dmFsdWU6IFwicmFjZVByb21pc2VzXCJ9KTskaM2PX29uY2UucmFjZVByb21pc2VzKHJhY2VQcm9taXNlcyk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZT1nbG9iYWxUaGlzLkhhbmRsZWRQcm9taXNlfHxQcm9taXNlO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVByb21pc2VLaXQoKXtcbmNvbnN0e3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfT1tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQoKTtcblxuY29uc3QgcHJvbWlzZT1uZXcgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZShleGVjdXRvcik7XG5cbnJldHVybiBoYXJkZW4oe3Byb21pc2UscmVzb2x2ZSxyZWplY3R9KTtcbiB9XG5oYXJkZW4obWFrZVByb21pc2VLaXQpO1xuXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByYWNlUHJvbWlzZXModmFsdWVzKXtcbnJldHVybiBoYXJkZW4obWVtb1JhY2UuY2FsbChCZXN0UGlwZWxpbmFibGVQcm9taXNlLHZhbHVlcykpO1xuIH1cbmhhcmRlbihyYWNlUHJvbWlzZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2VLaXQiOlsibWFrZVByb21pc2VLaXQiXSwicmFjZVByb21pc2VzIjpbInJhY2VQcm9taXNlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACzXVtGVQIAAFUCAAAqAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS42L3NyYy9pcy1wcm9taXNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpc1Byb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc1Byb21pc2UsICduYW1lJywge3ZhbHVlOiBcImlzUHJvbWlzZVwifSk7JGjNj19vbmNlLmlzUHJvbWlzZShpc1Byb21pc2UpOyAgIC8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIGlzUHJvbWlzZShtYXliZVByb21pc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2UpPT09bWF5YmVQcm9taXNlO1xuIH1cbmhhcmRlbihpc1Byb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQcm9taXNlIjpbImlzUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD6ZvCRnAcAAJwHAAApAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS42L3NyYy9tZW1vLXJhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1lbW9SYWNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuKi9cblxuY29uc3QgaXNPYmplY3Q9KHZhbHVlKT0+T2JqZWN0KHZhbHVlKT09PXZhbHVlO1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga25vd25Qcm9taXNlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFya1NldHRsZWQ9KHJlY29yZCk9PntcbmlmKCFyZWNvcmR8fHJlY29yZC5zZXR0bGVkKXtcbnJldHVybiBuZXcgU2V0KCk7XG4gfVxuXG5jb25zdHtkZWZlcnJlZHN9PXJlY29yZDtcbk9iamVjdC5hc3NpZ24ocmVjb3JkLHtcbmRlZmVycmVkczp1bmRlZmluZWQsXG5zZXR0bGVkOnRydWV9KTtcblxuT2JqZWN0LmZyZWV6ZShyZWNvcmQpO1xucmV0dXJuIGRlZmVycmVkcztcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBnZXRNZW1vUmVjb3JkPSh2YWx1ZSk9PntcbmlmKCFpc09iamVjdCh2YWx1ZSkpe1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oe3NldHRsZWQ6dHJ1ZX0pO1xuIH1cblxubGV0IHJlY29yZD1rbm93blByb21pc2VzLmdldCh2YWx1ZSk7XG5cbmlmKCFyZWNvcmQpe1xucmVjb3JkPXtkZWZlcnJlZHM6bmV3IFNldCgpLHNldHRsZWQ6ZmFsc2V9O1xua25vd25Qcm9taXNlcy5zZXQodmFsdWUscmVjb3JkKTtcbi8vXG5Qcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oXG4odmFsKT0+e1xuZm9yKGNvbnN0e3Jlc29sdmV9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZXNvbHZlKHZhbCk7XG4gfVxuIH0sXG4oZXJyKT0+e1xuZm9yKGNvbnN0e3JlamVjdH1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlamVjdChlcnIpO1xuIH1cbiB9KTtcblxuIH1cbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3R7cmFjZX09e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xucmFjZSh2YWx1ZXMpe1xubGV0IGRlZmVycmVkO1xuLyogICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgY2FjaGVkVmFsdWVzPVtdO1xuY29uc3QgQz10aGlzO1xuY29uc3QgcmVzdWx0PW5ldyBDKChyZXNvbHZlLHJlamVjdCk9PntcbmRlZmVycmVkPXtyZXNvbHZlLHJlamVjdH07XG5mb3IoY29uc3QgdmFsdWUgb2YgdmFsdWVzKXtcbmNhY2hlZFZhbHVlcy5wdXNoKHZhbHVlKTtcbmNvbnN0e3NldHRsZWQsZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKHNldHRsZWQpe1xuLy9cbi8vXG5DLnJlc29sdmUodmFsdWUpLnRoZW4ocmVzb2x2ZSxyZWplY3QpO1xuIH1lbHNle1xuZGVmZXJyZWRzLmFkZChkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcblxuLy9cbi8vXG5yZXR1cm4gcmVzdWx0LmZpbmFsbHkoKCk9PntcbmZvcihjb25zdCB2YWx1ZSBvZiBjYWNoZWRWYWx1ZXMpe1xuY29uc3R7ZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKGRlZmVycmVkcyl7XG5kZWZlcnJlZHMuZGVsZXRlKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuIH19OyRozY9fb25jZS5yYWNlKHJhY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWVtb1JhY2UiOlsicmFjZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACcbcSyfAUAAHwFAAA0AAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS42L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZXNvbHZlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzb2x2ZT0odmFsdWUpPT57XG5pZihpbnRlcm5hbFJlc29sdmUpe1xuaW50ZXJuYWxSZXNvbHZlKHZhbHVlKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT1udWxsKTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWplY3Q9KHJlYXNvbik9PntcbmlmKGludGVybmFsUmVqZWN0KXtcbmludGVybmFsUmVqZWN0KHJlYXNvbik7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZWplY3Q9PT1udWxsKTtcbiB9XG4gfTtcblxuY29uc3QgZXhlY3V0b3I9KHJlcyxyZWopPT57XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09dW5kZWZpbmVkJiZpbnRlcm5hbFJlamVjdD09PXVuZGVmaW5lZCk7XG5pbnRlcm5hbFJlc29sdmU9cmVzO1xuaW50ZXJuYWxSZWplY3Q9cmVqO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfSk7XG4gfTskaM2PX29uY2UubWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG5oYXJkZW4obWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAJQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACoQ7JGRAQAAkQEAACAAAABAZW5kby90cmFtcG9saW5lLXYxLjAuMi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy90cmFtcG9saW5lLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHJhbXBvbGluZS5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvdHJhbXBvbGluZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADyaLmgIAcAACAHAAApAAAAQGVuZG8vdHJhbXBvbGluZS12MS4wLjIvc3JjL3RyYW1wb2xpbmUuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFzeW5jVHJhbXBvbGluZSIsImdlbmVyYXRvclByb3RvdHlwZSIsInN5bmNUcmFtcG9saW5lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoc3luY1RyYW1wb2xpbmUsICduYW1lJywge3ZhbHVlOiBcInN5bmNUcmFtcG9saW5lXCJ9KTskaM2PX29uY2Uuc3luY1RyYW1wb2xpbmUoc3luY1RyYW1wb2xpbmUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luY1RyYW1wb2xpbmUsICduYW1lJywge3ZhbHVlOiBcImFzeW5jVHJhbXBvbGluZVwifSk7JGjNj19vbmNlLmFzeW5jVHJhbXBvbGluZShhc3luY1RyYW1wb2xpbmUpOyAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qXG5cbiAqL1xuY29uc3R7Z2V0UHJvdG90eXBlT2Z9PU9iamVjdDtcbmNvbnN0e2JpbmR9PUZ1bmN0aW9uLnByb3RvdHlwZTtcbmNvbnN0IHVuY3VycnlUaGlzPWJpbmQuYmluZChiaW5kLmNhbGwpOy8vXG5jb25zdCAgICAgICB7cHJvdG90eXBlOmdlbmVyYXRvclByb3RvdHlwZX09Z2V0UHJvdG90eXBlT2YoXG4vL1xuZnVuY3Rpb24qKCl7IH0pOyRozY9fb25jZS5nZW5lcmF0b3JQcm90b3R5cGUoZ2VuZXJhdG9yUHJvdG90eXBlKTtcblxuY29uc3QgZ2VuZXJhdG9yTmV4dD11bmN1cnJ5VGhpcyhnZW5lcmF0b3JQcm90b3R5cGUubmV4dCk7XG5jb25zdCBnZW5lcmF0b3JUaHJvdz11bmN1cnJ5VGhpcyhnZW5lcmF0b3JQcm90b3R5cGUudGhyb3cpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBzeW5jVHJhbXBvbGluZShnZW5lcmF0b3JGbiwuLi5hcmdzKXtcbmNvbnN0IGl0ZXJhdG9yPWdlbmVyYXRvckZuKC4uLmFyZ3MpO1xubGV0IHJlc3VsdD1nZW5lcmF0b3JOZXh0KGl0ZXJhdG9yKTtcbndoaWxlKCFyZXN1bHQuZG9uZSl7XG50cnl7XG5yZXN1bHQ9Z2VuZXJhdG9yTmV4dChpdGVyYXRvcixyZXN1bHQudmFsdWUpO1xuIH1jYXRjaChlcnIpe1xucmVzdWx0PWdlbmVyYXRvclRocm93KGl0ZXJhdG9yLGVycik7XG4gfVxuIH1cbnJldHVybiByZXN1bHQudmFsdWU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uICAgICAgICBhc3luY1RyYW1wb2xpbmUoZ2VuZXJhdG9yRm4sLi4uYXJncyl7XG5jb25zdCBpdGVyYXRvcj1nZW5lcmF0b3JGbiguLi5hcmdzKTtcbmxldCByZXN1bHQ9Z2VuZXJhdG9yTmV4dChpdGVyYXRvcik7XG53aGlsZSghcmVzdWx0LmRvbmUpe1xudHJ5e1xuLy9cbmNvbnN0IHZhbD1hd2FpdCByZXN1bHQudmFsdWU7XG5yZXN1bHQ9Z2VuZXJhdG9yTmV4dChpdGVyYXRvcix2YWwpO1xuIH1jYXRjaChlcnIpe1xucmVzdWx0PWdlbmVyYXRvclRocm93KGl0ZXJhdG9yLGVycik7XG4gfVxuIH1cbnJldHVybiByZXN1bHQudmFsdWU7XG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2VuZXJhdG9yUHJvdG90eXBlIjpbImdlbmVyYXRvclByb3RvdHlwZSJdLCJzeW5jVHJhbXBvbGluZSI6WyJzeW5jVHJhbXBvbGluZSJdLCJhc3luY1RyYW1wb2xpbmUiOlsiYXN5bmNUcmFtcG9saW5lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANcAT7OMAgAAjAIAABkAAABAZW5kby96aXAtdjEuMC44L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIiwiLi9zcmMvcmVhZGVyLmpzIiwiLi9zcmMvd3JpdGVyLmpzIl0sImV4cG9ydHMiOlsicmVhZFppcCIsInJlYWRaaXAiLCJ3cml0ZVppcCIsIndyaXRlWmlwIl0sInJlZXhwb3J0cyI6WyIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIi4vc3JjL3JlYWRlci5qc1wiLCBbXV0sW1wiLi9zcmMvd3JpdGVyLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvcmVhZGVyLmpzIjpbWyJaaXBSZWFkZXIiLCJaaXBSZWFkZXIiXSxbInJlYWRaaXAiLCJyZWFkWmlwIl1dLCIuL3NyYy93cml0ZXIuanMiOltbIlppcFdyaXRlciIsIlppcFdyaXRlciJdLFsid3JpdGVaaXAiLCJ3cml0ZVppcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZKqSA0ISAABCEgAAJQAAAEBlbmRvL3ppcC12MS4wLjgvc3JjL2J1ZmZlci1yZWFkZXIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkJ1ZmZlclJlYWRlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHJpdmF0ZUZpZWxkcz1uZXcgV2Vha01hcCgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwcml2YXRlRmllbGRzR2V0PXByaXZhdGVGaWVsZHMuZ2V0LmJpbmQocHJpdmF0ZUZpZWxkcyk7XG5cbmNsYXNzICAgICAgICBCdWZmZXJSZWFkZXJ7XG4vKlxuXG4gICAqL1xuICAgICAgICAgICBjb25zdHJ1Y3RvcihidWZmZXIpe1xuY29uc3QgYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbmNvbnN0IGRhdGE9bmV3IERhdGFWaWV3KGJ5dGVzLmJ1ZmZlcik7XG5wcml2YXRlRmllbGRzLnNldCh0aGlzLHtcbmJ5dGVzLFxuZGF0YSxcbmxlbmd0aDpieXRlcy5sZW5ndGgsXG5pbmRleDowLFxub2Zmc2V0OjB9KTtcblxuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgICBnZXQgbGVuZ3RoKCl7XG5yZXR1cm4gcHJpdmF0ZUZpZWxkc0dldCh0aGlzKS5sZW5ndGg7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgZ2V0IGluZGV4KCl7XG5yZXR1cm4gcHJpdmF0ZUZpZWxkc0dldCh0aGlzKS5pbmRleDtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICBzZXQgaW5kZXgoaW5kZXgpe1xudGhpcy5zZWVrKGluZGV4KTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICAgc2V0IG9mZnNldChvZmZzZXQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5pZihvZmZzZXQ+ZmllbGRzLmRhdGEuYnl0ZUxlbmd0aCl7XG50aHJvdyBFcnJvcignQ2Fubm90IHNldCBvZmZzZXQgYmV5b25kIGxlbmd0aCBvZiB1bmRlcmx5aW5nIGRhdGEnKTtcbiB9XG5pZihvZmZzZXQ8MCl7XG50aHJvdyBFcnJvcignQ2Fubm90IHNldCBuZWdhdGl2ZSBvZmZzZXQnKTtcbiB9XG5maWVsZHMub2Zmc2V0PW9mZnNldDtcbmZpZWxkcy5sZW5ndGg9ZmllbGRzLmRhdGEuYnl0ZUxlbmd0aC1maWVsZHMub2Zmc2V0O1xuIH1cblxuLypcblxuXG5cbiAgICovXG4gICAgICAgY2FuU2VlayhpbmRleCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnJldHVybiBpbmRleD49MCYmZmllbGRzLm9mZnNldCtpbmRleDw9ZmllbGRzLmxlbmd0aDtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgICAgICAgICBhc3NlcnRDYW5TZWVrKGluZGV4KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xuaWYoIXRoaXMuY2FuU2VlayhpbmRleCkpe1xudGhyb3cgRXJyb3IoXG4gYEVuZCBvZiBkYXRhIHJlYWNoZWQgKGRhdGEgbGVuZ3RoID0gJHtmaWVsZHMubGVuZ3RofSwgYXNrZWQgaW5kZXggJHtpbmRleH1gKTtcblxuIH1cbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICBzZWVrKGluZGV4KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xuY29uc3QgcmVzdG9yZT1maWVsZHMuaW5kZXg7XG50aGlzLmFzc2VydENhblNlZWsoaW5kZXgpO1xuZmllbGRzLmluZGV4PWluZGV4O1xucmV0dXJuIHJlc3RvcmU7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgcGVlayhzaXplKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xuLy9cbnNpemU9TWF0aC5tYXgoMCxNYXRoLm1pbihmaWVsZHMubGVuZ3RoLWZpZWxkcy5pbmRleCxzaXplKSk7XG5pZihzaXplPT09MCl7XG4vL1xucmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuIH1cbmNvbnN0IHJlc3VsdD1maWVsZHMuYnl0ZXMuc3ViYXJyYXkoXG5maWVsZHMub2Zmc2V0K2ZpZWxkcy5pbmRleCxcbmZpZWxkcy5vZmZzZXQrZmllbGRzLmluZGV4K3NpemUpO1xuXG5yZXR1cm4gcmVzdWx0O1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICBjYW5SZWFkKG9mZnNldCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnJldHVybiB0aGlzLmNhblNlZWsoZmllbGRzLmluZGV4K29mZnNldCk7XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xuICAgICAgICAgICAgIGFzc2VydENhblJlYWQob2Zmc2V0KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xudGhpcy5hc3NlcnRDYW5TZWVrKGZpZWxkcy5pbmRleCtvZmZzZXQpO1xuIH1cblxuLypcblxuXG5cblxuICAgKi9cbiAgICByZWFkKHNpemUpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLmFzc2VydENhblJlYWQoc2l6ZSk7XG5jb25zdCByZXN1bHQ9dGhpcy5wZWVrKHNpemUpO1xuZmllbGRzLmluZGV4Kz1zaXplO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICByZWFkVWludDgoKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xudGhpcy5hc3NlcnRDYW5SZWFkKDEpO1xuY29uc3QgaW5kZXg9ZmllbGRzLm9mZnNldCtmaWVsZHMuaW5kZXg7XG5jb25zdCB2YWx1ZT1maWVsZHMuZGF0YS5nZXRVaW50OChpbmRleCk7XG5maWVsZHMuaW5kZXgrPTE7XG5yZXR1cm4gdmFsdWU7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgICAgcmVhZFVpbnQxNihsaXR0bGVFbmRpYW4pe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLmFzc2VydENhblJlYWQoMik7XG5jb25zdCBpbmRleD1maWVsZHMub2Zmc2V0K2ZpZWxkcy5pbmRleDtcbmNvbnN0IHZhbHVlPWZpZWxkcy5kYXRhLmdldFVpbnQxNihpbmRleCxsaXR0bGVFbmRpYW4pO1xuZmllbGRzLmluZGV4Kz0yO1xucmV0dXJuIHZhbHVlO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgICAgIHJlYWRVaW50MzIobGl0dGxlRW5kaWFuKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xudGhpcy5hc3NlcnRDYW5SZWFkKDQpO1xuY29uc3QgaW5kZXg9ZmllbGRzLm9mZnNldCtmaWVsZHMuaW5kZXg7XG5jb25zdCB2YWx1ZT1maWVsZHMuZGF0YS5nZXRVaW50MzIoaW5kZXgsbGl0dGxlRW5kaWFuKTtcbmZpZWxkcy5pbmRleCs9NDtcbnJldHVybiB2YWx1ZTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgIGJ5dGVBdChpbmRleCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnJldHVybiBmaWVsZHMuYnl0ZXNbZmllbGRzLm9mZnNldCtpbmRleF07XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgIHNraXAob2Zmc2V0KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xudGhpcy5zZWVrKGZpZWxkcy5pbmRleCtvZmZzZXQpO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgZXhwZWN0KGV4cGVjdGVkKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xuaWYoIXRoaXMubWF0Y2hBdChmaWVsZHMuaW5kZXgsZXhwZWN0ZWQpKXtcbnJldHVybiBmYWxzZTtcbiB9XG5maWVsZHMuaW5kZXgrPWV4cGVjdGVkLmxlbmd0aDtcbnJldHVybiB0cnVlO1xuIH1cblxuLypcblxuXG5cbiAgICovXG4gICAgICAgbWF0Y2hBdChpbmRleCxleHBlY3RlZCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbmlmKGluZGV4K2V4cGVjdGVkLmxlbmd0aD5maWVsZHMubGVuZ3RofHxpbmRleDwwKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IobGV0IGk9MDtpPGV4cGVjdGVkLmxlbmd0aDtpKz0xKXtcbmlmKGV4cGVjdGVkW2ldIT09dGhpcy5ieXRlQXQoaW5kZXgraSkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICBhc3NlcnQoZXhwZWN0ZWQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5pZighdGhpcy5leHBlY3QoZXhwZWN0ZWQpKXtcbnRocm93IEVycm9yKFxuIGBFeHBlY3RlZCAke3EoZXhwZWN0ZWQpfSBhdCAke2ZpZWxkcy5pbmRleH0sIGdvdCAke3RoaXMucGVlayhcbmV4cGVjdGVkLmxlbmd0aClcbiB9YCk7XG5cbiB9XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgIGZpbmRMYXN0KGV4cGVjdGVkKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xubGV0IGluZGV4PWZpZWxkcy5sZW5ndGgtZXhwZWN0ZWQubGVuZ3RoO1xud2hpbGUoaW5kZXg+PTAmJiF0aGlzLm1hdGNoQXQoaW5kZXgsZXhwZWN0ZWQpKXtcbmluZGV4LT0xO1xuIH1cbnJldHVybiBpbmRleDtcbiB9fSRozY9fb25jZS4gQnVmZmVyUmVhZGVyKEJ1ZmZlclJlYWRlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCdWZmZXJSZWFkZXIiOlsiQnVmZmVyUmVhZGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADkSlZBCDgAAQg4AACUAAABAZW5kby96aXAtdjEuMC44L3NyYy9idWZmZXItd3JpdGVyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCdWZmZXJXcml0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHByaXZhdGVGaWVsZHM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuICovXG5jb25zdCBnZXRQcml2YXRlRmllbGRzPShzZWxmKT0+e1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHMuZ2V0KHNlbGYpO1xuaWYoIWZpZWxkcyl7XG50aHJvdyBFcnJvcignQnVmZmVyV3JpdGVyIGZpZWxkcyBhcmUgbm90IGluaXRpYWxpemVkJyk7XG4gfVxucmV0dXJuIGZpZWxkcztcbiB9O1xuXG5jb25zdCBhc3NlcnROYXROdW1iZXI9KG4pPT57XG5pZihOdW1iZXIuaXNTYWZlSW50ZWdlcihuKSYmLyogICAgICAgICAgICAgICAgICovbj49MCl7XG5yZXR1cm47XG4gfVxudGhyb3cgVHlwZUVycm9yKCBgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBnb3QgJHtufWApO1xuIH07XG5cbmNsYXNzICAgICAgICBCdWZmZXJXcml0ZXJ7XG4vKlxuXG4gICAqL1xuICAgICAgICAgIGdldCBsZW5ndGgoKXtcbnJldHVybiBnZXRQcml2YXRlRmllbGRzKHRoaXMpLmxlbmd0aDtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICBnZXQgaW5kZXgoKXtcbnJldHVybiBnZXRQcml2YXRlRmllbGRzKHRoaXMpLmluZGV4O1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgIHNldCBpbmRleChpbmRleCl7XG50aGlzLnNlZWsoaW5kZXgpO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgICAgY29uc3RydWN0b3IoY2FwYWNpdHk9MTYpe1xuY29uc3QgYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoY2FwYWNpdHkpO1xuY29uc3QgZGF0YT1uZXcgRGF0YVZpZXcoYnl0ZXMuYnVmZmVyKTtcbnByaXZhdGVGaWVsZHMuc2V0KHRoaXMse1xuYnl0ZXMsXG5kYXRhLFxuaW5kZXg6MCxcbmxlbmd0aDowLFxuY2FwYWNpdHl9KTtcblxuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgICAgICBlbnN1cmVDYW5TZWVrKHJlcXVpcmVkKXtcbmFzc2VydE5hdE51bWJlcihyZXF1aXJlZCk7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbmxldCBjYXBhY2l0eT1maWVsZHMuY2FwYWNpdHk7XG53aGlsZShjYXBhY2l0eTxyZXF1aXJlZCl7XG5jYXBhY2l0eSo9MjtcbiB9XG5jb25zdCBieXRlcz1uZXcgVWludDhBcnJheShjYXBhY2l0eSk7XG5jb25zdCBkYXRhPW5ldyBEYXRhVmlldyhieXRlcy5idWZmZXIpO1xuYnl0ZXMuc2V0KGZpZWxkcy5ieXRlcy5zdWJhcnJheSgwLGZpZWxkcy5sZW5ndGgpKTtcbmZpZWxkcy5ieXRlcz1ieXRlcztcbmZpZWxkcy5kYXRhPWRhdGE7XG5maWVsZHMuY2FwYWNpdHk9Y2FwYWNpdHk7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgIHNlZWsoaW5kZXgpe1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG50aGlzLmVuc3VyZUNhblNlZWsoaW5kZXgpO1xuZmllbGRzLmluZGV4PWluZGV4O1xuZmllbGRzLmxlbmd0aD1NYXRoLm1heChmaWVsZHMuaW5kZXgsZmllbGRzLmxlbmd0aCk7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgICAgICBlbnN1cmVDYW5Xcml0ZShzaXplKXtcbmFzc2VydE5hdE51bWJlcihzaXplKTtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xudGhpcy5lbnN1cmVDYW5TZWVrKGZpZWxkcy5pbmRleCtzaXplKTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgIHdyaXRlKGJ5dGVzKXtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xudGhpcy5lbnN1cmVDYW5Xcml0ZShieXRlcy5ieXRlTGVuZ3RoKTtcbmZpZWxkcy5ieXRlcy5zZXQoYnl0ZXMsZmllbGRzLmluZGV4KTtcbmZpZWxkcy5pbmRleCs9Ynl0ZXMuYnl0ZUxlbmd0aDtcbmZpZWxkcy5sZW5ndGg9TWF0aC5tYXgoZmllbGRzLmluZGV4LGZpZWxkcy5sZW5ndGgpO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgICAgd3JpdGVDb3B5KHN0YXJ0LGVuZCl7XG5hc3NlcnROYXROdW1iZXIoc3RhcnQpO1xuYXNzZXJ0TmF0TnVtYmVyKGVuZCk7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbmNvbnN0IHNpemU9ZW5kLXN0YXJ0O1xudGhpcy5lbnN1cmVDYW5Xcml0ZShzaXplKTtcbmZpZWxkcy5ieXRlcy5jb3B5V2l0aGluKGZpZWxkcy5pbmRleCxzdGFydCxlbmQpO1xuZmllbGRzLmluZGV4Kz1zaXplO1xuZmllbGRzLmxlbmd0aD1NYXRoLm1heChmaWVsZHMuaW5kZXgsZmllbGRzLmxlbmd0aCk7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgIHdyaXRlVWludDgodmFsdWUpe1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG50aGlzLmVuc3VyZUNhbldyaXRlKDEpO1xuZmllbGRzLmRhdGEuc2V0VWludDgoZmllbGRzLmluZGV4LHZhbHVlKTtcbmZpZWxkcy5pbmRleCs9MTtcbmZpZWxkcy5sZW5ndGg9TWF0aC5tYXgoZmllbGRzLmluZGV4LGZpZWxkcy5sZW5ndGgpO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgICAgICB3cml0ZVVpbnQxNih2YWx1ZSxsaXR0bGVFbmRpYW4pe1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG50aGlzLmVuc3VyZUNhbldyaXRlKDIpO1xuY29uc3QgaW5kZXg9ZmllbGRzLmluZGV4O1xuZmllbGRzLmRhdGEuc2V0VWludDE2KGluZGV4LHZhbHVlLGxpdHRsZUVuZGlhbik7XG5maWVsZHMuaW5kZXgrPTI7XG5maWVsZHMubGVuZ3RoPU1hdGgubWF4KGZpZWxkcy5pbmRleCxmaWVsZHMubGVuZ3RoKTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgICAgICAgd3JpdGVVaW50MzIodmFsdWUsbGl0dGxlRW5kaWFuKXtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xudGhpcy5lbnN1cmVDYW5Xcml0ZSg0KTtcbmNvbnN0IGluZGV4PWZpZWxkcy5pbmRleDtcbmZpZWxkcy5kYXRhLnNldFVpbnQzMihpbmRleCx2YWx1ZSxsaXR0bGVFbmRpYW4pO1xuZmllbGRzLmluZGV4Kz00O1xuZmllbGRzLmxlbmd0aD1NYXRoLm1heChmaWVsZHMuaW5kZXgsZmllbGRzLmxlbmd0aCk7XG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbiAgICAgICAgc3ViYXJyYXkoYmVnaW4sZW5kKXtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xucmV0dXJuIGZpZWxkcy5ieXRlcy5zdWJhcnJheSgwLGZpZWxkcy5sZW5ndGgpLnN1YmFycmF5KGJlZ2luLGVuZCk7XG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbiAgICAgc2xpY2UoYmVnaW4sZW5kKXtcbnJldHVybiB0aGlzLnN1YmFycmF5KGJlZ2luLGVuZCkuc2xpY2UoKTtcbiB9fSRozY9fb25jZS4gQnVmZmVyV3JpdGVyKEJ1ZmZlcldyaXRlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCdWZmZXJXcml0ZXIiOlsiQnVmZmVyV3JpdGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALCy5WyYAQAAmAEAACMAAABAZW5kby96aXAtdjEuMC44L3NyYy9jb21wcmVzc2lvbi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiU1RPUkUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8vXG5jb25zdCAgICAgICAgU1RPUkU9MDskaM2PX29uY2UuU1RPUkUoU1RPUkUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiU1RPUkUiOlsiU1RPUkUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAd7ixdawDAACsAwAAHQAAAEBlbmRvL3ppcC12MS4wLjgvc3JjL2NyYzMyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJjcmMzMiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGNyYzMyLCAnbmFtZScsIHt2YWx1ZTogXCJjcmMzMlwifSk7JGjNj19vbmNlLmNyYzMyKGNyYzMyKTsgICAvL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuLypcblxuICovXG5mdW5jdGlvbiBtYWtlVGFibGUoKXtcbmxldCBjO1xuY29uc3QgdGFibGU9W107XG5cbmZvcihsZXQgbj0wO248MjU2O24rPTEpe1xuYz1uO1xuZm9yKGxldCBrPTA7azw4O2srPTEpe1xuYz1jJjE/MHhlZGI4ODMyMF5jPj4+MTpjPj4+MTtcbiB9XG50YWJsZVtuXT1jO1xuIH1cblxucmV0dXJuIHRhYmxlO1xuIH1cblxuLy9cbmNvbnN0IHRhYmxlPW1ha2VUYWJsZSgpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBjcmMzMihieXRlcyxsZW5ndGg9Ynl0ZXMubGVuZ3RoLGluZGV4PTAsY3JjPTApe1xuY29uc3QgZW5kPWluZGV4K2xlbmd0aDtcblxuY3JjXj0tMTtcblxuZm9yKGxldCBpPWluZGV4O2k8ZW5kO2krPTEpe1xuY3JjPWNyYz4+PjhedGFibGVbKGNyY15ieXRlc1tpXSkmMHhmZl07XG4gfVxuXG5yZXR1cm4oY3JjXi0xKT4+PjA7XG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY3JjMzIiOlsiY3JjMzIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGi2id9klAADZJQAAJQAAAEBlbmRvL3ppcC12MS4wLjgvc3JjL2Zvcm1hdC1yZWFkZXIuanN7ImltcG9ydHMiOlsiLi90eXBlcy5qcyIsIi4vY3JjMzIuanMiLCIuL3NpZ25hdHVyZS5qcyIsIi4vY29tcHJlc3Npb24uanMiXSwiZXhwb3J0cyI6WyJyZWFkWmlwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGNyYzMyLHNpZ25hdHVyZSxjb21wcmVzc2lvbjskaM2PX2ltcG9ydHMoW1tcIi4vdHlwZXMuanNcIiwgW11dLFtcIi4vY3JjMzIuanNcIiwgW1tcImNyYzMyXCIsIFskaM2PX2EgPT4gKGNyYzMyID0gJGjNj19hKV1dXV0sW1wiLi9zaWduYXR1cmUuanNcIiwgW1tcIipcIiwgWyRozY9fYSA9PiAoc2lnbmF0dXJlID0gJGjNj19hKV1dXV0sW1wiLi9jb21wcmVzc2lvbi5qc1wiLCBbW1wiKlwiLCBbJGjNj19hID0+IChjb21wcmVzc2lvbiA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlYWRaaXAsICduYW1lJywge3ZhbHVlOiBcInJlYWRaaXBcIn0pOyRozY9fb25jZS5yZWFkWmlwKHJlYWRaaXApOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuY29uc3QgTUFYX1ZBTFVFXzE2QklUUz02NTUzNTtcbmNvbnN0IE1BWF9WQUxVRV8zMkJJVFM9NDI5NDk2NzI5NTtcblxuY29uc3QgdGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCk7XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBpc0VuY3J5cHRlZChiaXRGbGFnKXtcbnJldHVybihiaXRGbGFnJjB4MDAwMSk9PT0weDAwMDE7XG4gfVxuXG4vKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHJlYWREb3NEYXRlVGltZShyZWFkZXIpe1xuY29uc3QgZG9zVGltZT1yZWFkZXIucmVhZFVpbnQzMih0cnVlKTtcbnJldHVybiBuZXcgRGF0ZShcbkRhdGUuVVRDKFxuKGRvc1RpbWU+PjI1JjB4N2YpKzE5ODAsLy9cbihkb3NUaW1lPj4yMSYweDBmKS0xLC8vXG5kb3NUaW1lPj4xNiYweDFmLC8vXG5kb3NUaW1lPj4xMSYweDFmLC8vXG5kb3NUaW1lPj41JjB4M2YsLy9cbihkb3NUaW1lJjB4MWYpPDwxLy9cbikpO1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZEhlYWRlcnMocmVhZGVyKXtcbnJldHVybntcbnZlcnNpb25OZWVkZWQ6cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSksXG5iaXRGbGFnOnJlYWRlci5yZWFkVWludDE2KHRydWUpLFxuY29tcHJlc3Npb25NZXRob2Q6cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSksXG5kYXRlOnJlYWREb3NEYXRlVGltZShyZWFkZXIpLFxuY3JjMzI6cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSksXG5jb21wcmVzc2VkTGVuZ3RoOnJlYWRlci5yZWFkVWludDMyKHRydWUpLFxudW5jb21wcmVzc2VkTGVuZ3RoOnJlYWRlci5yZWFkVWludDMyKHRydWUpfTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIHJlYWRDZW50cmFsRmlsZUhlYWRlcihyZWFkZXIpe1xuY29uc3QgdmVyc2lvbj1yZWFkZXIucmVhZFVpbnQ4KCk7XG5jb25zdCBtYWRlQnk9cmVhZGVyLnJlYWRVaW50OCgpO1xuY29uc3QgaGVhZGVycz1yZWFkSGVhZGVycyhyZWFkZXIpO1xuY29uc3QgbmFtZUxlbmd0aD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGV4dHJhRmllbGRzTGVuZ3RoPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgY29tbWVudExlbmd0aD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGRpc2tOdW1iZXJTdGFydD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGludGVybmFsRmlsZUF0dHJpYnV0ZXM9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBleHRlcm5hbEZpbGVBdHRyaWJ1dGVzPXJlYWRlci5yZWFkVWludDMyKHRydWUpO1xuY29uc3QgZmlsZVN0YXJ0PXJlYWRlci5yZWFkVWludDMyKHRydWUpO1xuXG5jb25zdCBuYW1lPXJlYWRlci5yZWFkKG5hbWVMZW5ndGgpO1xuLy9cbnJlYWRlci5za2lwKGV4dHJhRmllbGRzTGVuZ3RoKTtcblxuaWYoaGVhZGVycy51bmNvbXByZXNzZWRMZW5ndGg9PT1NQVhfVkFMVUVfMzJCSVRTKXtcbnRocm93IEVycm9yKCdDYW5ub3QgcmVhZCBaaXA2NCcpO1xuIH1cbmlmKGhlYWRlcnMuY29tcHJlc3NlZExlbmd0aD09PU1BWF9WQUxVRV8zMkJJVFMpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCByZWFkIFppcDY0Jyk7XG4gfVxuaWYoZmlsZVN0YXJ0PT09TUFYX1ZBTFVFXzMyQklUUyl7XG50aHJvdyBFcnJvcignQ2Fubm90IHJlYWQgWmlwNjQnKTtcbiB9XG5pZihkaXNrTnVtYmVyU3RhcnQ9PT1NQVhfVkFMVUVfMzJCSVRTKXtcbnRocm93IEVycm9yKCdDYW5ub3QgcmVhZCBaaXA2NCcpO1xuIH1cblxuY29uc3QgY29tbWVudD1yZWFkZXIucmVhZChjb21tZW50TGVuZ3RoKTtcblxucmV0dXJue1xubmFtZSxcbnZlcnNpb24sXG5tYWRlQnksXG4uLi5oZWFkZXJzLFxuZGlza051bWJlclN0YXJ0LFxuaW50ZXJuYWxGaWxlQXR0cmlidXRlcyxcbmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMsXG5maWxlU3RhcnQsXG5jb21tZW50fTtcblxuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZENlbnRyYWxEaXJlY3RvcnkocmVhZGVyLGxvY2F0b3Ipe1xuY29uc3R7Y2VudHJhbERpcmVjdG9yeU9mZnNldCxjZW50cmFsRGlyZWN0b3J5UmVjb3Jkc309bG9jYXRvcjtcbnJlYWRlci5zZWVrKGNlbnRyYWxEaXJlY3RvcnlPZmZzZXQpO1xuXG5jb25zdCBlbnRyaWVzPVtdO1xud2hpbGUocmVhZGVyLmV4cGVjdChzaWduYXR1cmUuQ0VOVFJBTF9GSUxFX0hFQURFUikpe1xuY29uc3QgZW50cnk9cmVhZENlbnRyYWxGaWxlSGVhZGVyKHJlYWRlcik7XG5lbnRyaWVzLnB1c2goZW50cnkpO1xuIH1cblxuaWYoY2VudHJhbERpcmVjdG9yeVJlY29yZHMhPT1lbnRyaWVzLmxlbmd0aCl7XG4vL1xuLy9cbnRocm93IEVycm9yKFxuIGBDb3JydXB0ZWQgemlwIG9yIGJ1ZzogZXhwZWN0ZWQgJHtjZW50cmFsRGlyZWN0b3J5UmVjb3Jkc30gcmVjb3JkcyBpbiBjZW50cmFsIGRpciwgZ290ICR7ZW50cmllcy5sZW5ndGh9YCk7XG5cbiB9XG5cbnJldHVybiBlbnRyaWVzO1xuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIHJlYWRGaWxlKHJlYWRlcil7XG5yZWFkZXIuZXhwZWN0KHNpZ25hdHVyZS5MT0NBTF9GSUxFX0hFQURFUik7XG5jb25zdCBoZWFkZXJzPXJlYWRIZWFkZXJzKHJlYWRlcik7XG5jb25zdCBuYW1lTGVuZ3RoPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgZXh0cmFGaWVsZHNMZW5ndGg9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBuYW1lPXJlYWRlci5yZWFkKG5hbWVMZW5ndGgpO1xucmVhZGVyLnNraXAoZXh0cmFGaWVsZHNMZW5ndGgpO1xuY29uc3QgY29udGVudD1yZWFkZXIucmVhZChoZWFkZXJzLmNvbXByZXNzZWRMZW5ndGgpO1xucmV0dXJue25hbWUsLi4uaGVhZGVycyxjb250ZW50fTtcbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHJlYWRMb2NhbEZpbGVzKHJlYWRlcixyZWNvcmRzKXtcbmNvbnN0IGZpbGVzPVtdO1xuZm9yKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKXtcbnJlYWRlci5zZWVrKHJlY29yZC5maWxlU3RhcnQpO1xuY29uc3QgZmlsZT1yZWFkRmlsZShyZWFkZXIpO1xuZmlsZXMucHVzaChmaWxlKTtcbiB9XG5yZXR1cm4gZmlsZXM7XG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZEJsb2NrRW5kT2ZDZW50cmFsKHJlYWRlcil7XG5pZighcmVhZGVyLmV4cGVjdChzaWduYXR1cmUuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSl7XG50aHJvdyBFcnJvcihcbidDb3JydXB0IHppcCBmaWxlLCBvciB6aXAgZmlsZSBjb250YWluaW5nIGFuIHVuc3VwcG9ydGVkIHZhcmlhYmxlLXdpZHRoIGVuZC1vZi1hcmNoaXZlIGNvbW1lbnQsIG9yIGFuIHVuc3VwcG9ydGVkIHppcCBmaWxlIHdpdGggNjQgYml0IHNpemVzJyk7XG5cbiB9XG5jb25zdCBkaXNrTnVtYmVyPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBjZW50cmFsRGlyZWN0b3J5UmVjb3Jkc09uVGhpc0Rpc2s9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBjZW50cmFsRGlyZWN0b3J5UmVjb3Jkcz1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGNlbnRyYWxEaXJlY3RvcnlTaXplPXJlYWRlci5yZWFkVWludDMyKHRydWUpO1xuY29uc3QgY2VudHJhbERpcmVjdG9yeU9mZnNldD1yZWFkZXIucmVhZFVpbnQzMih0cnVlKTtcbmNvbnN0IGNvbW1lbnRMZW5ndGg9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgY29tbWVudD10ZXh0RGVjb2Rlci5kZWNvZGUocmVhZGVyLnJlYWQoY29tbWVudExlbmd0aCkpO1xucmV0dXJue1xuZGlza051bWJlcixcbmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0LFxuY2VudHJhbERpcmVjdG9yeVJlY29yZHNPblRoaXNEaXNrLFxuY2VudHJhbERpcmVjdG9yeVJlY29yZHMsXG5jZW50cmFsRGlyZWN0b3J5U2l6ZSxcbmNlbnRyYWxEaXJlY3RvcnlPZmZzZXQsXG5jb21tZW50fTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIHJlYWRFbmRPZkNlbnRyYWxEaXJlY3RvcnlSZWNvcmQocmVhZGVyKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgY2VudHJhbERpcmVjdG9yeUVuZD1yZWFkZXIubGVuZ3RoLTIyO1xuaWYoY2VudHJhbERpcmVjdG9yeUVuZDwwKXtcbnRocm93IEVycm9yKCdDb3JydXB0ZWQgemlwOiBub3QgZW5vdWdoIGNvbnRlbnQnKTtcbiB9XG5yZWFkZXIuc2VlayhjZW50cmFsRGlyZWN0b3J5RW5kKTtcbmNvbnN0IGxvY2F0b3I9cmVhZEJsb2NrRW5kT2ZDZW50cmFsKHJlYWRlcik7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHppcDY0PVxubG9jYXRvci5kaXNrTnVtYmVyPT09TUFYX1ZBTFVFXzE2QklUU3x8XG5sb2NhdG9yLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09TUFYX1ZBTFVFXzE2QklUU3x8XG5sb2NhdG9yLmNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzT25UaGlzRGlzaz09PU1BWF9WQUxVRV8xNkJJVFN8fFxubG9jYXRvci5jZW50cmFsRGlyZWN0b3J5UmVjb3Jkcz09PU1BWF9WQUxVRV8xNkJJVFN8fFxubG9jYXRvci5jZW50cmFsRGlyZWN0b3J5U2l6ZT09PU1BWF9WQUxVRV8zMkJJVFN8fFxubG9jYXRvci5jZW50cmFsRGlyZWN0b3J5T2Zmc2V0PT09TUFYX1ZBTFVFXzMyQklUUztcblxuaWYoemlwNjQpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCByZWFkIFppcDY0Jyk7XG4gfVxuXG5jb25zdHtcbmNlbnRyYWxEaXJlY3RvcnlPZmZzZXQsXG5jZW50cmFsRGlyZWN0b3J5U2l6ZVxuLy9cbn09bG9jYXRvcjtcblxuY29uc3QgZXhwZWN0ZWRDZW50cmFsRGlyZWN0b3J5RW5kPVxuY2VudHJhbERpcmVjdG9yeU9mZnNldCtjZW50cmFsRGlyZWN0b3J5U2l6ZTtcbmNvbnN0IGV4dHJhQnl0ZXM9Y2VudHJhbERpcmVjdG9yeUVuZC1leHBlY3RlZENlbnRyYWxEaXJlY3RvcnlFbmQ7XG5cbnJlYWRlci5vZmZzZXQ9ZXh0cmFCeXRlcztcblxucmV0dXJuIGxvY2F0b3I7XG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiBjaGVja1JlY29yZHMoY2VudHJhbFJlY29yZCxsb2NhbFJlY29yZCxhcmNoaXZlTmFtZSl7XG5jb25zdCBjZW50cmFsTmFtZT10ZXh0RGVjb2Rlci5kZWNvZGUoY2VudHJhbFJlY29yZC5uYW1lKTtcbmNvbnN0IGxvY2FsTmFtZT10ZXh0RGVjb2Rlci5kZWNvZGUobG9jYWxSZWNvcmQubmFtZSk7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmlmKGNlbnRyYWxOYW1lLnJlcGxhY2UoL1xcXFwvZywnLycpIT09bG9jYWxOYW1lKXtcbnRocm93IEVycm9yKFxuIGBaaXAgaW50ZWdyaXR5IGVycm9yOiBjZW50cmFsIHJlY29yZCBmaWxlIG5hbWUgJHtxKFxuY2VudHJhbE5hbWUpXG4gfSBtdXN0IG1hdGNoIGxvY2FsIGZpbGUgbmFtZSAke3EobG9jYWxOYW1lKX0gaW4gYXJjaGl2ZSAke3EoXG5hcmNoaXZlTmFtZSlcbiB9YCk7XG5cbiB9XG5cbi8qXG5cblxuICAgKi9cbmZ1bmN0aW9uIGNoZWNrKHZhbHVlLG1lc3NhZ2Upe1xuaWYoIXZhbHVlKXtcbnRocm93IEVycm9yKFxuIGBaaXAgaW50ZWdyaXR5IGVycm9yOiAke21lc3NhZ2V9IGZvciBmaWxlICR7cShcbmxvY2FsTmFtZSlcbiB9IGluIGFyY2hpdmUgJHtxKGFyY2hpdmVOYW1lKX1gKTtcblxuIH1cbiB9XG5cbmNoZWNrKFxuY2VudHJhbFJlY29yZC5iaXRGbGFnPT09bG9jYWxSZWNvcmQuYml0RmxhZyxcbiBgQ2VudHJhbCByZWNvcmQgYml0IGZsYWcgJHtjZW50cmFsUmVjb3JkLmJpdEZsYWcudG9TdHJpbmcoXG4xNilcbiB9IG11c3QgbWF0Y2ggbG9jYWwgcmVjb3JkIGJpdCBmbGFnICR7bG9jYWxSZWNvcmQuYml0RmxhZy50b1N0cmluZygxNil9YCk7XG5cbmNoZWNrKFxuY2VudHJhbFJlY29yZC5jb21wcmVzc2lvbk1ldGhvZD09PWxvY2FsUmVjb3JkLmNvbXByZXNzaW9uTWV0aG9kLFxuIGBDZW50cmFsIHJlY29yZCBjb21wcmVzc2lvbiBtZXRob2QgJHtxKFxuY2VudHJhbFJlY29yZC5jb21wcmVzc2lvbk1ldGhvZClcbiB9IG11c3QgbWF0Y2ggbG9jYWwgY29tcHJlc3Npb24gbWV0aG9kICR7cShsb2NhbFJlY29yZC5jb21wcmVzc2lvbk1ldGhvZCl9YCk7XG5cbi8vXG4vL1xuY2hlY2soXG5jZW50cmFsUmVjb3JkLmNyYzMyPT09bG9jYWxSZWNvcmQuY3JjMzIsXG4gYENlbnRyYWwgcmVjb3JkIENSQy0zMiBjaGVja3N1bSAke2NlbnRyYWxSZWNvcmQuY3JjMzJ9IG11c3QgbWF0Y2ggbG9jYWwgY2hlY2tzdW0gJHtsb2NhbFJlY29yZC5jcmMzMn1gKTtcblxuY2hlY2soXG5jZW50cmFsUmVjb3JkLmNvbXByZXNzZWRMZW5ndGg9PT1sb2NhbFJlY29yZC5jb21wcmVzc2VkTGVuZ3RoLFxuIGBDZW50cmFsIHJlY29yZCBjb21wcmVzc2VkIHNpemUgJHtjZW50cmFsUmVjb3JkLmNvbXByZXNzZWRMZW5ndGh9IG11c3QgbWF0Y2ggbG9jYWwgJHtsb2NhbFJlY29yZC5jb21wcmVzc2VkTGVuZ3RofWApO1xuXG5jaGVjayhcbmNlbnRyYWxSZWNvcmQudW5jb21wcmVzc2VkTGVuZ3RoPT09bG9jYWxSZWNvcmQudW5jb21wcmVzc2VkTGVuZ3RoLFxuIGBDZW50cmFsIHJlY29yZCB1bmNvbXByZXNzZWQgc2l6ZSAke2NlbnRyYWxSZWNvcmQudW5jb21wcmVzc2VkTGVuZ3RofSBtdXN0IG1hdGNoIGxvY2FsICR7bG9jYWxSZWNvcmQudW5jb21wcmVzc2VkTGVuZ3RofWApO1xuXG5cbmNvbnN0IGNoZWNrc3VtPWNyYzMyKGxvY2FsUmVjb3JkLmNvbnRlbnQpO1xuY2hlY2soXG5jaGVja3N1bT09PWxvY2FsUmVjb3JkLmNyYzMyLFxuIGBDUkMtMzIgY2hlY2tzdW0gbWlzbWF0Y2gsIHdhbnRlZCAke2xvY2FsUmVjb3JkLmNyYzMyfSBidXQgYWN0dWFsIGNvbnRlbnQgaXMgJHtjaGVja3N1bX1gKTtcblxuIH1cblxuLypcblxuICovXG5mdW5jdGlvbiBtb2RlRm9yRXh0ZXJuYWxBdHRyaWJ1dGVzKGV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpe1xucmV0dXJuIGV4dGVybmFsRmlsZUF0dHJpYnV0ZXM+PjE2JjB4ZmZmZjtcbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHJlY29yZFRvRmlsZShjZW50cmFsUmVjb3JkLGxvY2FsUmVjb3JkKXtcbmNvbnN0IG1vZGU9bW9kZUZvckV4dGVybmFsQXR0cmlidXRlcyhjZW50cmFsUmVjb3JkLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpO1xucmV0dXJue1xubmFtZTpjZW50cmFsUmVjb3JkLm5hbWUsXG5tb2RlLFxuZGF0ZTpjZW50cmFsUmVjb3JkLmRhdGUsXG5jcmMzMjpjZW50cmFsUmVjb3JkLmNyYzMyLFxuY29tcHJlc3Npb25NZXRob2Q6Y2VudHJhbFJlY29yZC5jb21wcmVzc2lvbk1ldGhvZCxcbmNvbXByZXNzZWRMZW5ndGg6Y2VudHJhbFJlY29yZC5jb21wcmVzc2VkTGVuZ3RoLFxudW5jb21wcmVzc2VkTGVuZ3RoOmNlbnRyYWxSZWNvcmQudW5jb21wcmVzc2VkTGVuZ3RoLFxuY29udGVudDpsb2NhbFJlY29yZC5jb250ZW50LFxuY29tbWVudDpjZW50cmFsUmVjb3JkLmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gZGVjb21wcmVzc0ZpbGUoZmlsZSl7XG5pZihmaWxlLmNvbXByZXNzaW9uTWV0aG9kIT09Y29tcHJlc3Npb24uU1RPUkUpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBmaW5kIGRlY29tcHJlc3NvciBmb3IgY29tcHJlc3Npb24gbWV0aG9kICR7cShcbmZpbGUuY29tcHJlc3Npb25NZXRob2QpXG4gfSBmb3IgZmlsZSAke2ZpbGUubmFtZX1gKTtcblxuIH1cbnJldHVybntcbm5hbWU6ZmlsZS5uYW1lLFxubW9kZTpmaWxlLm1vZGUsXG5kYXRlOmZpbGUuZGF0ZSxcbmNvbnRlbnQ6ZmlsZS5jb250ZW50LFxuY29tbWVudDpmaWxlLmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlRmlsZShmaWxlKXtcbmNvbnN0IG5hbWU9dGV4dERlY29kZXIuZGVjb2RlKGZpbGUubmFtZSk7XG5jb25zdCBjb21tZW50PXRleHREZWNvZGVyLmRlY29kZShmaWxlLmNvbW1lbnQpO1xucmV0dXJue1xubmFtZSxcbnR5cGU6J2ZpbGUnLFxubW9kZTpmaWxlLm1vZGUmMG83NzcsXG5kYXRlOmZpbGUuZGF0ZSxcbmNvbnRlbnQ6ZmlsZS5jb250ZW50LFxuY29tbWVudH07XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgcmVhZFppcChyZWFkZXIsbmFtZT0nPHVua25vd24+Jyl7XG5jb25zdCBsb2NhdG9yPXJlYWRFbmRPZkNlbnRyYWxEaXJlY3RvcnlSZWNvcmQocmVhZGVyKTtcbmNvbnN0IGNlbnRyYWxSZWNvcmRzPXJlYWRDZW50cmFsRGlyZWN0b3J5KHJlYWRlcixsb2NhdG9yKTtcbmNvbnN0IGxvY2FsUmVjb3Jkcz1yZWFkTG9jYWxGaWxlcyhyZWFkZXIsY2VudHJhbFJlY29yZHMpO1xuY29uc3QgZmlsZXM9bmV3IE1hcCgpO1xuXG5mb3IobGV0IGk9MDtpPGNlbnRyYWxSZWNvcmRzLmxlbmd0aDtpKz0xKXtcbmNvbnN0IGNlbnRyYWxSZWNvcmQ9Y2VudHJhbFJlY29yZHNbaV07XG5jb25zdCBsb2NhbFJlY29yZD1sb2NhbFJlY29yZHNbaV07XG5cbmNoZWNrUmVjb3JkcyhjZW50cmFsUmVjb3JkLGxvY2FsUmVjb3JkLG5hbWUpO1xuXG5pZihpc0VuY3J5cHRlZChjZW50cmFsUmVjb3JkLmJpdEZsYWcpKXtcbnRocm93IEVycm9yKCdFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkJyk7XG4gfVxuXG5jb25zdCBpc0Rpcj0oY2VudHJhbFJlY29yZC5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzJjB4MDAxMCkhPT0wO1xuaWYoIWlzRGlyKXtcbmNvbnN0IGNvbXByZXNzZWRGaWxlPXJlY29yZFRvRmlsZShjZW50cmFsUmVjb3JkLGxvY2FsUmVjb3JkKTtcbmNvbnN0IGRlY29tcHJlc3NlZEZpbGU9ZGVjb21wcmVzc0ZpbGUoY29tcHJlc3NlZEZpbGUpO1xuY29uc3QgZGVjb2RlZEZpbGU9ZGVjb2RlRmlsZShkZWNvbXByZXNzZWRGaWxlKTtcbmZpbGVzLnNldChkZWNvZGVkRmlsZS5uYW1lLGRlY29kZWRGaWxlKTtcbiB9XG4vL1xuIH1cbnJldHVybiBmaWxlcztcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJyZWFkWmlwIjpbInJlYWRaaXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAk8pN2YUUAACFFAAAJQAAAEBlbmRvL3ppcC12MS4wLjgvc3JjL2Zvcm1hdC13cml0ZXIuanN7ImltcG9ydHMiOlsiLi9jcmMzMi5qcyIsIi4vc2lnbmF0dXJlLmpzIiwiLi9jb21wcmVzc2lvbi5qcyJdLCJleHBvcnRzIjpbIndyaXRlWmlwIiwid3JpdGVaaXBSZWNvcmRzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGNyYzMyLHNpZ25hdHVyZSxjb21wcmVzc2lvbjskaM2PX2ltcG9ydHMoW1tcIi4vY3JjMzIuanNcIiwgW1tcImNyYzMyXCIsIFskaM2PX2EgPT4gKGNyYzMyID0gJGjNj19hKV1dXV0sW1wiLi9zaWduYXR1cmUuanNcIiwgW1tcIipcIiwgWyRozY9fYSA9PiAoc2lnbmF0dXJlID0gJGjNj19hKV1dXV0sW1wiLi9jb21wcmVzc2lvbi5qc1wiLCBbW1wiKlwiLCBbJGjNj19hID0+IChjb21wcmVzc2lvbiA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdyaXRlWmlwUmVjb3JkcywgJ25hbWUnLCB7dmFsdWU6IFwid3JpdGVaaXBSZWNvcmRzXCJ9KTskaM2PX29uY2Uud3JpdGVaaXBSZWNvcmRzKHdyaXRlWmlwUmVjb3Jkcyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdyaXRlWmlwLCAnbmFtZScsIHt2YWx1ZTogXCJ3cml0ZVppcFwifSk7JGjNj19vbmNlLndyaXRlWmlwKHdyaXRlWmlwKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0IFVOSVg9MztcbmNvbnN0IFVOSVhfVkVSU0lPTj0zMDtcblxuY29uc3QgdGV4dEVuY29kZXI9bmV3IFRleHRFbmNvZGVyKCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gd3JpdGVEb3NEYXRlVGltZSh3cml0ZXIsZGF0ZSl7XG5jb25zdCBkb3NUaW1lPVxuZGF0ZSE9PXVuZGVmaW5lZCYmZGF0ZSE9PW51bGw/XG4oZGF0ZS5nZXRVVENGdWxsWWVhcigpLTE5ODAmMHg3Zik8PDI1fC8vXG5kYXRlLmdldFVUQ01vbnRoKCkrMTw8MjF8Ly9cbmRhdGUuZ2V0VVRDRGF0ZSgpPDwxNnwvL1xuZGF0ZS5nZXRVVENIb3VycygpPDwxMXwvL1xuZGF0ZS5nZXRVVENNaW51dGVzKCk8PDV8Ly9cbmRhdGUuZ2V0VVRDU2Vjb25kcygpPj4xLy9cbjowOy8vXG53cml0ZXIud3JpdGVVaW50MzIoZG9zVGltZSx0cnVlKTtcbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlRmlsZSh3cml0ZXIsZmlsZSl7XG4vL1xuY29uc3QgZmlsZVN0YXJ0PXdyaXRlci5pbmRleDtcbndyaXRlci53cml0ZShzaWduYXR1cmUuTE9DQUxfRklMRV9IRUFERVIpO1xuY29uc3QgaGVhZGVyU3RhcnQ9d3JpdGVyLmluZGV4O1xuLy9cbndyaXRlci53cml0ZVVpbnQxNigxMCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLmJpdEZsYWcsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZmlsZS5jb21wcmVzc2lvbk1ldGhvZCx0cnVlKTtcbndyaXRlRG9zRGF0ZVRpbWUod3JpdGVyLGZpbGUuZGF0ZSk7XG53cml0ZXIud3JpdGVVaW50MzIoZmlsZS5jcmMzMix0cnVlKTtcbndyaXRlci53cml0ZVVpbnQzMihmaWxlLmNvbXByZXNzZWRMZW5ndGgsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MzIoZmlsZS51bmNvbXByZXNzZWRMZW5ndGgsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZmlsZS5uYW1lLmxlbmd0aCx0cnVlKTtcbmNvbnN0IGhlYWRlckVuZD13cml0ZXIubGVuZ3RoO1xuXG4vL1xud3JpdGVyLndyaXRlVWludDE2KDAsdHJ1ZSk7XG53cml0ZXIud3JpdGUoZmlsZS5uYW1lKTtcbi8vXG53cml0ZXIud3JpdGUoZmlsZS5jb250ZW50KTtcblxucmV0dXJue1xuZmlsZVN0YXJ0LFxuaGVhZGVyU3RhcnQsXG5oZWFkZXJFbmR9O1xuXG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiB3cml0ZUNlbnRyYWxGaWxlSGVhZGVyKHdyaXRlcixmaWxlLGxvY2F0b3Ipe1xud3JpdGVyLndyaXRlKHNpZ25hdHVyZS5DRU5UUkFMX0ZJTEVfSEVBREVSKTtcbndyaXRlci53cml0ZVVpbnQ4KGZpbGUudmVyc2lvbik7XG53cml0ZXIud3JpdGVVaW50OChmaWxlLm1hZGVCeSk7XG53cml0ZXIud3JpdGVDb3B5KGxvY2F0b3IuaGVhZGVyU3RhcnQsbG9jYXRvci5oZWFkZXJFbmQpO1xuLy9cbndyaXRlci53cml0ZVVpbnQxNigwLHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGZpbGUuY29tbWVudC5sZW5ndGgsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZmlsZS5kaXNrTnVtYmVyU3RhcnQsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZmlsZS5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzLHRydWUpO1xud3JpdGVyLndyaXRlVWludDMyKGZpbGUuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQzMihsb2NhdG9yLmZpbGVTdGFydCx0cnVlKTtcbndyaXRlci53cml0ZShmaWxlLmNlbnRyYWxOYW1lKTtcbi8vXG53cml0ZXIud3JpdGUoZmlsZS5jb21tZW50KTtcbiB9XG5cbi8qXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiB3cml0ZUVuZE9mQ2VudHJhbERpcmVjdG9yeVJlY29yZChcbndyaXRlcixcbmVudHJpZXNDb3VudCxcbmNlbnRyYWxEaXJlY3RvcnlTdGFydCxcbmNlbnRyYWxEaXJlY3RvcnlMZW5ndGgsXG5jb21tZW50Qnl0ZXMpXG57XG53cml0ZXIud3JpdGUoc2lnbmF0dXJlLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7XG53cml0ZXIud3JpdGVVaW50MTYoMCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNigwLHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGVudHJpZXNDb3VudCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihlbnRyaWVzQ291bnQsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MzIoY2VudHJhbERpcmVjdG9yeUxlbmd0aCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQzMihjZW50cmFsRGlyZWN0b3J5U3RhcnQsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoY29tbWVudEJ5dGVzLmxlbmd0aCx0cnVlKTtcbndyaXRlci53cml0ZShjb21tZW50Qnl0ZXMpO1xuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHdyaXRlWmlwUmVjb3Jkcyh3cml0ZXIscmVjb3Jkcyxjb21tZW50PScnKXtcbi8vXG5jb25zdCBsb2NhdG9ycz1bXTtcbmZvcihsZXQgaT0wO2k8cmVjb3Jkcy5sZW5ndGg7aSs9MSl7XG5sb2NhdG9ycy5wdXNoKHdyaXRlRmlsZSh3cml0ZXIscmVjb3Jkc1tpXSkpO1xuIH1cblxuLy9cbmNvbnN0IGNlbnRyYWxEaXJlY3RvcnlTdGFydD13cml0ZXIuaW5kZXg7XG5mb3IobGV0IGk9MDtpPGxvY2F0b3JzLmxlbmd0aDtpKz0xKXtcbndyaXRlQ2VudHJhbEZpbGVIZWFkZXIod3JpdGVyLHJlY29yZHNbaV0sbG9jYXRvcnNbaV0pO1xuIH1cbmNvbnN0IGNlbnRyYWxEaXJlY3RvcnlMZW5ndGg9d3JpdGVyLmluZGV4LWNlbnRyYWxEaXJlY3RvcnlTdGFydDtcblxuY29uc3QgY29tbWVudEJ5dGVzPXRleHRFbmNvZGVyLmVuY29kZShjb21tZW50KTtcblxuLy9cbndyaXRlRW5kT2ZDZW50cmFsRGlyZWN0b3J5UmVjb3JkKFxud3JpdGVyLFxucmVjb3Jkcy5sZW5ndGgsXG5jZW50cmFsRGlyZWN0b3J5U3RhcnQsXG5jZW50cmFsRGlyZWN0b3J5TGVuZ3RoLFxuY29tbWVudEJ5dGVzKTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZUZpbGUoZmlsZSl7XG5jb25zdCBuYW1lPXRleHRFbmNvZGVyLmVuY29kZShmaWxlLm5hbWUucmVwbGFjZSgvXFxcXC9nLCcvJykpO1xuY29uc3QgY29tbWVudD10ZXh0RW5jb2Rlci5lbmNvZGUoZmlsZS5jb21tZW50KTtcbnJldHVybntcbm5hbWUsXG5tb2RlOmZpbGUubW9kZSxcbmRhdGU6ZmlsZS5kYXRlLFxuY29udGVudDpmaWxlLmNvbnRlbnQsXG5jb21tZW50fTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIGNvbXByZXNzRmlsZVdpdGhTdG9yZShmaWxlKXtcbnJldHVybntcbm5hbWU6ZmlsZS5uYW1lLFxubW9kZTpmaWxlLm1vZGUsXG5kYXRlOmZpbGUuZGF0ZSxcbmNyYzMyOmNyYzMyKGZpbGUuY29udGVudCksXG5jb21wcmVzc2lvbk1ldGhvZDpjb21wcmVzc2lvbi5TVE9SRSxcbmNvbXByZXNzZWRMZW5ndGg6ZmlsZS5jb250ZW50Lmxlbmd0aCxcbnVuY29tcHJlc3NlZExlbmd0aDpmaWxlLmNvbnRlbnQubGVuZ3RoLFxuY29udGVudDpmaWxlLmNvbnRlbnQsXG5jb21tZW50OmZpbGUuY29tbWVudH07XG5cbiB9XG5cbi8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyhtb2RlKXtcbnJldHVybihtb2RlJjBvNzc3fDBvMTAwMDAwKTw8MTY7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBtYWtlRmlsZVJlY29yZChmaWxlKXtcbnJldHVybntcbm5hbWU6ZmlsZS5uYW1lLFxuY2VudHJhbE5hbWU6ZmlsZS5uYW1lLFxubWFkZUJ5OlVOSVgsXG52ZXJzaW9uOlVOSVhfVkVSU0lPTixcbnZlcnNpb25OZWVkZWQ6MCwvL1xuYml0RmxhZzowLFxuY29tcHJlc3Npb25NZXRob2Q6Y29tcHJlc3Npb24uU1RPUkUsXG5kYXRlOmZpbGUuZGF0ZSxcbmNyYzMyOmZpbGUuY3JjMzIsXG5jb21wcmVzc2VkTGVuZ3RoOmZpbGUuY29tcHJlc3NlZExlbmd0aCxcbnVuY29tcHJlc3NlZExlbmd0aDpmaWxlLnVuY29tcHJlc3NlZExlbmd0aCxcbmRpc2tOdW1iZXJTdGFydDowLFxuaW50ZXJuYWxGaWxlQXR0cmlidXRlczowLFxuZXh0ZXJuYWxGaWxlQXR0cmlidXRlczpleHRlcm5hbEZpbGVBdHRyaWJ1dGVzKGZpbGUubW9kZSksXG5jb21tZW50OmZpbGUuY29tbWVudCxcbmNvbnRlbnQ6ZmlsZS5jb250ZW50fTtcblxuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHdyaXRlWmlwKHdyaXRlcixmaWxlcyxjb21tZW50PScnKXtcbmNvbnN0IGVuY29kZWRGaWxlcz1maWxlcy5tYXAoZW5jb2RlRmlsZSk7XG5jb25zdCBjb21wcmVzc2VkRmlsZXM9ZW5jb2RlZEZpbGVzLm1hcChjb21wcmVzc0ZpbGVXaXRoU3RvcmUpO1xuLy9cbmNvbnN0IGZpbGVSZWNvcmRzPWNvbXByZXNzZWRGaWxlcy5tYXAobWFrZUZpbGVSZWNvcmQpO1xud3JpdGVaaXBSZWNvcmRzKHdyaXRlcixmaWxlUmVjb3Jkcyxjb21tZW50KTtcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ3cml0ZVppcFJlY29yZHMiOlsid3JpdGVaaXBSZWNvcmRzIl0sIndyaXRlWmlwIjpbIndyaXRlWmlwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANH0FhL6BQAA+gUAAB4AAABAZW5kby96aXAtdjEuMC44L3NyYy9yZWFkZXIuanN7ImltcG9ydHMiOlsiLi9idWZmZXItcmVhZGVyLmpzIiwiLi9mb3JtYXQtcmVhZGVyLmpzIl0sImV4cG9ydHMiOlsiWmlwUmVhZGVyIiwicmVhZFppcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBCdWZmZXJSZWFkZXIscmVhZFppcEZvcm1hdDskaM2PX2ltcG9ydHMoW1tcIi4vYnVmZmVyLXJlYWRlci5qc1wiLCBbW1wiQnVmZmVyUmVhZGVyXCIsIFskaM2PX2EgPT4gKEJ1ZmZlclJlYWRlciA9ICRozY9fYSldXV1dLFtcIi4vZm9ybWF0LXJlYWRlci5qc1wiLCBbW1wicmVhZFppcFwiLCBbJGjNj19hID0+IChyZWFkWmlwRm9ybWF0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY2xhc3MgICAgICAgIFppcFJlYWRlcntcbi8qXG5cblxuXG4gICAqL1xuICAgICAgICAgICBjb25zdHJ1Y3RvcihkYXRhLG9wdGlvbnM9e30pe1xuY29uc3R7bmFtZT0nPHVua25vd24+J309b3B0aW9ucztcbmNvbnN0IHJlYWRlcj1uZXcgQnVmZmVyUmVhZGVyKGRhdGEpO1xudGhpcy5maWxlcz1yZWFkWmlwRm9ybWF0KHJlYWRlcik7XG50aGlzLm5hbWU9bmFtZTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICByZWFkKG5hbWUpe1xuY29uc3QgZmlsZT10aGlzLmZpbGVzLmdldChuYW1lKTtcbmlmKGZpbGU9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoIGBDYW5ub3QgZmluZCBmaWxlICR7bmFtZX0gaW4gWmlwIGZpbGUgJHt0aGlzLm5hbWV9YCk7XG4gfVxucmV0dXJuIGZpbGUuY29udGVudDtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICBzdGF0KG5hbWUpe1xuY29uc3QgZmlsZT10aGlzLmZpbGVzLmdldChuYW1lKTtcbmlmKGZpbGU9PT11bmRlZmluZWQpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5yZXR1cm57XG50eXBlOmZpbGUudHlwZSxcbm1vZGU6ZmlsZS5tb2RlLFxuZGF0ZTpmaWxlLmRhdGUsXG5jb21tZW50OmZpbGUuY29tbWVudH07XG5cbiB9fVxuXG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuIFppcFJlYWRlcihaaXBSZWFkZXIpO1xuY29uc3QgICAgICAgIHJlYWRaaXA9YXN5bmMoZGF0YSxsb2NhdGlvbik9PntcbmNvbnN0IHJlYWRlcj1uZXcgWmlwUmVhZGVyKGRhdGEse25hbWU6bG9jYXRpb259KTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVhZD1hc3luYyhwYXRoKT0+cmVhZGVyLnJlYWQocGF0aCk7XG5yZXR1cm57cmVhZH07XG4gfTskaM2PX29uY2UucmVhZFppcChyZWFkWmlwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlppcFJlYWRlciI6WyJaaXBSZWFkZXIiXSwicmVhZFppcCI6WyJyZWFkWmlwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOzerz6GBgAAhgYAACEAAABAZW5kby96aXAtdjEuMC44L3NyYy9zaWduYXR1cmUuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkNFTlRSQUxfRElSRUNUT1JZX0VORCIsIkNFTlRSQUxfRklMRV9IRUFERVIiLCJEQVRBX0RFU0NSSVBUT1IiLCJMT0NBTF9GSUxFX0hFQURFUiIsIlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCIsIlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gdShzdHJpbmcpe1xuY29uc3QgYXJyYXk9bmV3IFVpbnQ4QXJyYXkoc3RyaW5nLmxlbmd0aCk7XG5mb3IobGV0IGk9MDtpPHN0cmluZy5sZW5ndGg7aSs9MSl7XG5hcnJheVtpXT1zdHJpbmcuY2hhckNvZGVBdChpKSYweGZmO1xuIH1cbnJldHVybiBhcnJheTtcbiB9XG5cbmNvbnN0ICAgICAgICBMT0NBTF9GSUxFX0hFQURFUj11KCdQS1xceDAzXFx4MDQnKTskaM2PX29uY2UuTE9DQUxfRklMRV9IRUFERVIoTE9DQUxfRklMRV9IRUFERVIpO1xuY29uc3QgICAgICAgIENFTlRSQUxfRklMRV9IRUFERVI9dSgnUEtcXHgwMVxceDAyJyk7JGjNj19vbmNlLkNFTlRSQUxfRklMRV9IRUFERVIoQ0VOVFJBTF9GSUxFX0hFQURFUik7XG5jb25zdCAgICAgICAgQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPXUoJ1BLXFx4MDVcXHgwNicpOyRozY9fb25jZS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQoQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtcbmNvbnN0ICAgICAgICBaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SPXUoJ1BLXFx4MDZcXHgwNycpOyRozY9fb25jZS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKFpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpO1xuY29uc3QgICAgICAgIFpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORD11KCdQS1xceDA2XFx4MDYnKTskaM2PX29uY2UuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKFpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCk7XG5jb25zdCAgICAgICAgREFUQV9ERVNDUklQVE9SPXUoJ1BLXFx4MDdcXHgwOCcpOyRozY9fb25jZS5EQVRBX0RFU0NSSVBUT1IoREFUQV9ERVNDUklQVE9SKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkxPQ0FMX0ZJTEVfSEVBREVSIjpbIkxPQ0FMX0ZJTEVfSEVBREVSIl0sIkNFTlRSQUxfRklMRV9IRUFERVIiOlsiQ0VOVFJBTF9GSUxFX0hFQURFUiJdLCJDRU5UUkFMX0RJUkVDVE9SWV9FTkQiOlsiQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIl0sIlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IiOlsiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiJdLCJaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQiOlsiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIl0sIkRBVEFfREVTQ1JJUFRPUiI6WyJEQVRBX0RFU0NSSVBUT1IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAHQAAAEBlbmRvL3ppcC12MS4wLjgvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACfJQfxaAYAAGgGAAAeAAAAQGVuZG8vemlwLXYxLjAuOC9zcmMvd3JpdGVyLmpzeyJpbXBvcnRzIjpbIi4vYnVmZmVyLXdyaXRlci5qcyIsIi4vZm9ybWF0LXdyaXRlci5qcyJdLCJleHBvcnRzIjpbIlppcFdyaXRlciIsIndyaXRlWmlwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEJ1ZmZlcldyaXRlcix3cml0ZVppcEZvcm1hdDskaM2PX2ltcG9ydHMoW1tcIi4vYnVmZmVyLXdyaXRlci5qc1wiLCBbW1wiQnVmZmVyV3JpdGVyXCIsIFskaM2PX2EgPT4gKEJ1ZmZlcldyaXRlciA9ICRozY9fYSldXV1dLFtcIi4vZm9ybWF0LXdyaXRlci5qc1wiLCBbW1wid3JpdGVaaXBcIiwgWyRozY9fYSA9PiAod3JpdGVaaXBGb3JtYXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jbGFzcyAgICAgICAgWmlwV3JpdGVye1xuLypcblxuXG5cbiAgICovXG4gICAgICAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM9e2RhdGU6bmV3IERhdGUoKX0pe1xuY29uc3R7ZGF0ZX09b3B0aW9ucztcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG50aGlzLmZpbGVzPW5ldyBNYXAoKTtcbnRoaXMuZGF0ZT1kYXRlO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbiAgICAgd3JpdGUobmFtZSxjb250ZW50LG9wdGlvbnM9e30pe1xuY29uc3R7bW9kZT0wbzY0NCxkYXRlPXVuZGVmaW5lZCxjb21tZW50PScnfT1vcHRpb25zO1xuaWYoIWNvbnRlbnQpe1xudGhyb3cgRXJyb3IoIGBaaXBXcml0ZXIgd3JpdGUgcmVxdWlyZXMgY29udGVudCBmb3IgJHtuYW1lfWApO1xuIH1cbnRoaXMuZmlsZXMuc2V0KG5hbWUse1xubmFtZSxcbm1vZGUsXG5kYXRlLFxuY29udGVudCxcbmNvbW1lbnR9KTtcblxuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgc25hcHNob3QoKXtcbmNvbnN0IHdyaXRlcj1uZXcgQnVmZmVyV3JpdGVyKCk7XG53cml0ZVppcEZvcm1hdCh3cml0ZXIsQXJyYXkuZnJvbSh0aGlzLmZpbGVzLnZhbHVlcygpKSk7XG5yZXR1cm4gd3JpdGVyLnN1YmFycmF5KCk7XG4gfX1cblxuXG4vKlxuXG4gKi8kaM2PX29uY2UuIFppcFdyaXRlcihaaXBXcml0ZXIpO1xuY29uc3QgICAgICAgIHdyaXRlWmlwPSgpPT57XG5jb25zdCB3cml0ZXI9bmV3IFppcFdyaXRlcigpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd3JpdGU9YXN5bmMocGF0aCxkYXRhKT0+e1xud3JpdGVyLndyaXRlKHBhdGgsZGF0YSk7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNuYXBzaG90PWFzeW5jKCk9PndyaXRlci5zbmFwc2hvdCgpO1xucmV0dXJue3dyaXRlLHNuYXBzaG90fTtcbiB9OyRozY9fb25jZS53cml0ZVppcCh3cml0ZVppcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJaaXBXcml0ZXIiOlsiWmlwV3JpdGVyIl0sIndyaXRlWmlwIjpbIndyaXRlWmlwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwECHgMKAAAAAAAAAAAAbrubyErPAABKzwAAFAAAAAAAAAAAAAAApIEAAAAAY29tcGFydG1lbnQtbWFwLmpzb25QSwECHgMKAAAAAAAAAAAALhzkYnMEAABzBAAAKQAAAAAAAAAAAAAApIF8zwAAQGFnb3JpYy9zcGF3bmVyLXYwLjYuOC9zcmMvdmF0LXNwYXduZWQuanNQSwECHgMKAAAAAAAAAAAAgekds2ECAABhAgAAGwAAAAAAAAAAAAAApIE21AAAQGVuZG8vYmFzZTY0LXYxLjAuOC9hdG9iLmpzUEsBAh4DCgAAAAAAAAAAACZUXeYBAwAAAQMAABsAAAAAAAAAAAAAAKSB0NYAAEBlbmRvL2Jhc2U2NC12MS4wLjgvYnRvYS5qc1BLAQIeAwoAAAAAAAAAAABz+iePqwEAAKsBAAAdAAAAAAAAAAAAAACkgQraAABAZW5kby9iYXNlNjQtdjEuMC44L2RlY29kZS5qc1BLAQIeAwoAAAAAAAAAAAD390dCqwEAAKsBAAAdAAAAAAAAAAAAAACkgfDbAABAZW5kby9iYXNlNjQtdjEuMC44L2VuY29kZS5qc1BLAQIeAwoAAAAAAAAAAABq5nZnlgIAAJYCAAAcAAAAAAAAAAAAAACkgdbdAABAZW5kby9iYXNlNjQtdjEuMC44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAF1zFicRAwAAEQMAACEAAAAAAAAAAAAAAKSBpuAAAEBlbmRvL2Jhc2U2NC12MS4wLjgvc3JjL2NvbW1vbi5qc1BLAQIeAwoAAAAAAAAAAADgTky+dwcAAHcHAAAhAAAAAAAAAAAAAACkgfbjAABAZW5kby9iYXNlNjQtdjEuMC44L3NyYy9kZWNvZGUuanNQSwECHgMKAAAAAAAAAAAARwvKqSAGAAAgBgAAIQAAAAAAAAAAAAAApIGs6wAAQGVuZG8vYmFzZTY0LXYxLjAuOC9zcmMvZW5jb2RlLmpzUEsBAh4DCgAAAAAAAAAAAK1XBn4CAwAAAgMAACEAAAAAAAAAAAAAAKSBC/IAAEBlbmRvL2NvbW1vbi12MS4yLjYvb2JqZWN0LW1hcC5qc1BLAQIeAwoAAAAAAAAAAACUhs57GgIAABoCAAAxAAAAAAAAAAAAAACkgUz1AABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL2ltcG9ydC1hcmNoaXZlLmpzUEsBAh4DCgAAAAAAAAAAADuTBsziJgAA4iYAADYAAAAAAAAAAAAAAKSBtfcAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL2NvbXBhcnRtZW50LW1hcC5qc1BLAQIeAwoAAAAAAAAAAAAVb/5u/gIAAP4CAAAwAAAAAAAAAAAAAACkgeseAQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9leHRlbnNpb24uanNQSwECHgMKAAAAAAAAAAAAxk6tAl8lAABfJQAAOgAAAAAAAAAAAAAApIE3IgEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvaW1wb3J0LWFyY2hpdmUtbGl0ZS5qc1BLAQIeAwoAAAAAAAAAAAD5j4R9AwUAAAMFAAA9AAAAAAAAAAAAAACkge5HAQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzUEsBAh4DCgAAAAAAAAAAALizMVYiCgAAIgoAADUAAAAAAAAAAAAAAKSBTE0BAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL2ltcG9ydC1hcmNoaXZlLmpzUEsBAh4DCgAAAAAAAAAAAMxfiCZIOAAASDgAADIAAAAAAAAAAAAAAKSBwVcBAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL2ltcG9ydC1ob29rLmpzUEsBAh4DCgAAAAAAAAAAAGNPsi/5AgAA+QIAACsAAAAAAAAAAAAAAKSBWZABAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL2pzb24uanNQSwECHgMKAAAAAAAAAAAAc+3SMRQgAAAUIAAAKwAAAAAAAAAAAAAApIGbkwEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvbGluay5qc1BLAQIeAwoAAAAAAAAAAAD8moshRBMAAEQTAAAxAAAAAAAAAAAAAACkgfizAQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9tYXAtcGFyc2VyLmpzUEsBAh4DCgAAAAAAAAAAAMa0YdV5CgAAeQoAADwAAAAAAAAAAAAAAKSBi8cBAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL25vZGUtbW9kdWxlLXNwZWNpZmllci5qc1BLAQIeAwoAAAAAAAAAAAChhJ91pwQAAKcEAAAyAAAAAAAAAAAAAACkgV7SAQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9wYXJzZS1ieXRlcy5qc1BLAQIeAwoAAAAAAAAAAABFPS7cGREAABkRAABGAAAAAAAAAAAAAACkgVXXAQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzUEsBAh4DCgAAAAAAAAAAAPBaXtXABAAAwAQAADEAAAAAAAAAAAAAAKSB0ugBAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL3BhcnNlLWpzb24uanNQSwECHgMKAAAAAAAAAAAAOQER4hcHAAAXBwAANAAAAAAAAAAAAAAApIHh7QEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvcGFyc2UtcHJlLWNqcy5qc1BLAQIeAwoAAAAAAAAAAACO6f2hAQUAAAEFAAA0AAAAAAAAAAAAAACkgUr1AQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9wYXJzZS1wcmUtbWpzLmpzUEsBAh4DCgAAAAAAAAAAAK1w4oR9BAAAfQQAADEAAAAAAAAAAAAAAKSBnfoBAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjAvc3JjL3BhcnNlLXRleHQuanNQSwECHgMKAAAAAAAAAAAAxf3LJ1UWAABVFgAANAAAAAAAAAAAAAAApIFp/wEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvcG9saWN5LWZvcm1hdC5qc1BLAQIeAwoAAAAAAAAAAAAL923sDyUAAA8lAAAtAAAAAAAAAAAAAACkgRAWAgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4wL3NyYy9wb2xpY3kuanNQSwECHgMKAAAAAAAAAAAAI8TEZEwJAABMCQAALQAAAAAAAAAAAAAApIFqOwIAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMC9zcmMvcG93ZXJzLmpzUEsBAh4DCgAAAAAAAAAAAMUY5zqUAQAAlAEAACEAAAAAAAAAAAAAAKSBAUUCAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACSt0d+7A0AAOwNAAArAAAAAAAAAAAAAACkgdRGAgBAZW5kby9lbnYtb3B0aW9ucy12MS4xLjcvc3JjL2Vudi1vcHRpb25zLmpzUEsBAh4DCgAAAAAAAAAAAHFRC0flBwAA5QcAABwAAAAAAAAAAAAAAKSBCVUCAEBlbmRvL2Vycm9ycy12MS4yLjYvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAH8ttxJgQAACYEAAAIwAAAAAAAAAAAAAApIEoXQIAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYvc3JjL0UuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKQAAAAAAAAAAAAAApIEBbgIAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYvc3JjL2V4cG9ydHMuanNQSwECHgMKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAAAAAAAAAAAApIGSbwIAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjYvc3JjL2xvY2FsLmpzUEsBAh4DCgAAAAAAAAAAAAGOcEzpDAAA6QwAADUAAAAAAAAAAAAAAKSBgXwCAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42L3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzUEsBAh4DCgAAAAAAAAAAABlsu0UzAwAAMwMAACkAAAAAAAAAAAAAAKSBvYkCAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42L3NyYy9uby1zaGltLmpzUEsBAh4DCgAAAAAAAAAAAIaopsdfCQAAXwkAAC0AAAAAAAAAAAAAAKSBN40CAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi42L3NyYy90cmFjay10dXJucy5qc1BLAQIeAwoAAAAAAAAAAAA/8Oc6VgIAAFYCAAAjAAAAAAAAAAAAAACkgeGWAgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNi91dGlscy5qc1BLAQIeAwoAAAAAAAAAAABp8BmfMwoAADMKAAA1AAAAAAAAAAAAAACkgXiZAgBAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMC9zcmMvY29tcGFydG1lbnQtd3JhcHBlci5qc1BLAQIeAwoAAAAAAAAAAAAcxpBeIwwAACMMAAAnAAAAAAAAAAAAAACkgf6jAgBAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMC9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAuIFp8HQHAAB0BwAAHQAAAAAAAAAAAAAApIFmsAIAQGVuZG8vbWFyc2hhbC12MS41LjQvaW5kZXguanNQSwECHgMKAAAAAAAAAAAACNeL201DAABNQwAAKgAAAAAAAAAAAAAApIEVuAIAQGVuZG8vbWFyc2hhbC12MS41LjQvc3JjL2VuY29kZVBhc3NhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAF+c8DJSIgAAUiIAACsAAAAAAAAAAAAAAKSBqvsCAEBlbmRvL21hcnNoYWwtdjEuNS40L3NyYy9lbmNvZGVUb0NhcERhdGEuanNQSwECHgMKAAAAAAAAAAAAD0obqy4iAAAuIgAALQAAAAAAAAAAAAAApIFFHgMAQGVuZG8vbWFyc2hhbC12MS41LjQvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzUEsBAh4DCgAAAAAAAAAAAEULMv0QIwAAECMAACoAAAAAAAAAAAAAAKSBvkADAEBlbmRvL21hcnNoYWwtdjEuNS40L3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1BLAQIeAwoAAAAAAAAAAABEEqbnXAYAAFwGAAAtAAAAAAAAAAAAAACkgRZkAwBAZW5kby9tYXJzaGFsLXYxLjUuNC9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanNQSwECHgMKAAAAAAAAAAAAKcNSTionAAAqJwAAIwAAAAAAAAAAAAAApIG9agMAQGVuZG8vbWFyc2hhbC12MS41LjQvc3JjL21hcnNoYWwuanNQSwECHgMKAAAAAAAAAAAAk7oZ88glAADIJQAAJQAAAAAAAAAAAAAApIEokgMAQGVuZG8vbWFyc2hhbC12MS41LjQvc3JjL3JhbmtPcmRlci5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAhAAAAAAAAAAAAAACkgTO4AwBAZW5kby9tYXJzaGFsLXYxLjUuNC9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAX+pOglkFAABZBQAAHgAAAAAAAAAAAAAApIG8uQMAQGVuZG8vbmF0LXY1LjAuMTEvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAKEpqrw/CgAAPwoAACAAAAAAAAAAAAAAAKSBUb8DAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJeovyVUBgAAVAYAACgAAAAAAAAAAAAAAKSBzskDAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40L3NyYy9jb3B5QXJyYXkuanNQSwECHgMKAAAAAAAAAAAAMs9KtSkIAAApCAAAKQAAAAAAAAAAAAAApIFo0AMAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL2NvcHlSZWNvcmQuanNQSwECHgMKAAAAAAAAAAAAcCLlelYKAABWCgAALgAAAAAAAAAAAAAApIHY2AMAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc1BLAQIeAwoAAAAAAAAAAABDm4qoNBIAADQSAAAkAAAAAAAAAAAAAACkgXrjAwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvZXJyb3IuanNQSwECHgMKAAAAAAAAAAAAQU/8T48FAACPBQAAKwAAAAAAAAAAAAAApIHw9QMAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL2l0ZXItaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAABkz+JvQREAAEERAAAnAAAAAAAAAAAAAACkgcj7AwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvbWFrZS1mYXIuanNQSwECHgMKAAAAAAAAAAAAK9Ggv4AEAACABAAAKQAAAAAAAAAAAAAApIFODQQAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL21ha2VUYWdnZWQuanNQSwECHgMKAAAAAAAAAAAADSKSdxQVAAAUFQAAMAAAAAAAAAAAAAAApIEVEgQAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAABQMTX6wJAAAsCQAACoAAAAAAAAAAAAAAKSBdycEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40L3NyYy9wYXNzU3R5bGVPZi5qc1BLAQIeAwoAAAAAAAAAAABShHt6phcAAKYXAAAoAAAAAAAAAAAAAACkgW9MBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvcmVtb3RhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAMUYAMyGDAAAhgwAACsAAAAAAAAAAAAAAKSBW2QEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40L3NyYy9zYWZlLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAAmJdfLLIHAACyBwAAJQAAAAAAAAAAAAAApIEqcQQAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL3N0cmluZy5qc1BLAQIeAwoAAAAAAAAAAABmP1mV/AkAAPwJAAAlAAAAAAAAAAAAAACkgR95BABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNC9zcmMvc3ltYm9sLmpzUEsBAh4DCgAAAAAAAAAAAGDVY54UBwAAFAcAACUAAAAAAAAAAAAAAKSBXoMEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC40L3NyYy90YWdnZWQuanNQSwECHgMKAAAAAAAAAAAADr8JLf4IAAD+CAAAKQAAAAAAAAAAAAAApIG1igQAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJAAAAAAAAAAAAAAApIH6kwQAQGVuZG8vcGFzcy1zdHlsZS12MS40LjQvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAFL0SMlGBgAARgYAACEAAAAAAAAAAAAAAKSBhpUEAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNi9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACzXVtGVQIAAFUCAAAqAAAAAAAAAAAAAACkgQucBABAZW5kby9wcm9taXNlLWtpdC12MS4xLjYvc3JjL2lzLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAA+mbwkZwHAACcBwAAKQAAAAAAAAAAAAAApIGongQAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS42L3NyYy9tZW1vLXJhY2UuanNQSwECHgMKAAAAAAAAAAAAnG3EsnwFAAB8BQAANAAAAAAAAAAAAAAApIGLpgQAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS42L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAlAAAAAAAAAAAAAACkgVmsBABAZW5kby9wcm9taXNlLWtpdC12MS4xLjYvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAACoQ7JGRAQAAkQEAACAAAAAAAAAAAAAAAKSB5q0EAEBlbmRvL3RyYW1wb2xpbmUtdjEuMC4yL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAPJouaAgBwAAIAcAACkAAAAAAAAAAAAAAKSBta8EAEBlbmRvL3RyYW1wb2xpbmUtdjEuMC4yL3NyYy90cmFtcG9saW5lLmpzUEsBAh4DCgAAAAAAAAAAANcAT7OMAgAAjAIAABkAAAAAAAAAAAAAAKSBHLcEAEBlbmRvL3ppcC12MS4wLjgvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAZKqSA0ISAABCEgAAJQAAAAAAAAAAAAAApIHfuQQAQGVuZG8vemlwLXYxLjAuOC9zcmMvYnVmZmVyLXJlYWRlci5qc1BLAQIeAwoAAAAAAAAAAAA5EpWQQg4AAEIOAAAlAAAAAAAAAAAAAACkgWTMBABAZW5kby96aXAtdjEuMC44L3NyYy9idWZmZXItd3JpdGVyLmpzUEsBAh4DCgAAAAAAAAAAALCy5WyYAQAAmAEAACMAAAAAAAAAAAAAAKSB6doEAEBlbmRvL3ppcC12MS4wLjgvc3JjL2NvbXByZXNzaW9uLmpzUEsBAh4DCgAAAAAAAAAAAHe4sXWsAwAArAMAAB0AAAAAAAAAAAAAAKSBwtwEAEBlbmRvL3ppcC12MS4wLjgvc3JjL2NyYzMyLmpzUEsBAh4DCgAAAAAAAAAAABotonfZJQAA2SUAACUAAAAAAAAAAAAAAKSBqeAEAEBlbmRvL3ppcC12MS4wLjgvc3JjL2Zvcm1hdC1yZWFkZXIuanNQSwECHgMKAAAAAAAAAAAAk8pN2YUUAACFFAAAJQAAAAAAAAAAAAAApIHFBgUAQGVuZG8vemlwLXYxLjAuOC9zcmMvZm9ybWF0LXdyaXRlci5qc1BLAQIeAwoAAAAAAAAAAADR9BYS+gUAAPoFAAAeAAAAAAAAAAAAAACkgY0bBQBAZW5kby96aXAtdjEuMC44L3NyYy9yZWFkZXIuanNQSwECHgMKAAAAAAAAAAAA7N6vPoYGAACGBgAAIQAAAAAAAAAAAAAApIHDIQUAQGVuZG8vemlwLXYxLjAuOC9zcmMvc2lnbmF0dXJlLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAAB0AAAAAAAAAAAAAAKSBiCgFAEBlbmRvL3ppcC12MS4wLjgvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAJ8lB/FoBgAAaAYAAB4AAAAAAAAAAAAAAKSBDSoFAEBlbmRvL3ppcC12MS4wLjgvc3JjL3dyaXRlci5qc1BLBQYAAAAAWABYAKsdAACxMAUAAAA=","endoZipBase64Sha512":"f88544c7625a63ed1411a7fbbca23abd500c443255160ebb5cac0269f0e74f5e56402b4466622e20a0f1ece8a5d8d06bfa27eb632f990581101677a5fdc224a8"};
|
|
1
|
+
export default {"moduleFormat":"endoZipBase64","endoZipBase64":"UEsDBAoAAAAAAAAAAAC2yVXQSs8AAErPAAAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zcGF3bmVyLXYwLjYuOCIsCiAgICAibW9kdWxlIjogIi4vc3JjL3ZhdC1zcGF3bmVkLmpzIgogIH0sCiAgImNvbXBhcnRtZW50cyI6IHsKICAgICJAYWdvcmljL3NwYXduZXItdjAuNi44IjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3NwYXduZXIiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9zcGF3bmVyLXYwLjYuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3NwYXduZXItdjAuNi44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3Bhd25lciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3NwYXduZXItdjAuNi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvY29udHJhY3RIb3N0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9zb3VyY2UtbWFwLW5vZGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3ZhdC1zcGF3bmVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy92YXQtc3Bhd25lZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA3YTQyZDI3NzkzNzZmYzVjNGE3NmQyZTc1ZTQ4MTYwZWY1M2YyNWVlZWZkMDZhY2Q0MzhkMTU1M2YxZGI5ZTFhZmU4OWY3MWQzZWU0OTM4MmI5MDcwMzRiZDQ0Njk3ZThjNTVkNzBlNDU3ZGM4ZmUyZmVhZTVjYTAzNzUxMWU4IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9iYXNlNjQtdjEuMC44IjogewogICAgICAibmFtZSI6ICJAZW5kby9iYXNlNjQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Jhc2U2NCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9iYXNlNjQvYXRvYi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hdG9iLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9idG9hLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Jhc2U2NC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2J0b2EuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L2RlY29kZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kZWNvZGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L2VuY29kZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmNvZGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2F0b2IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiYXRvYi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNjNjNlMGMxNTlmZThiYmZkZmNiNTVlOGNiNjkyZTM2OWJmZjg1OGE2OTk1NDI3ZTcwY2Y3Y2QyNThhYjYxZmY0MzMwY2Q3ZDY5ZmUyYTg2Nzg4MmU4MDUzNDM1YzNjM2YyMDIzODUwNDQ1ODIxOWNhYzc1ODk1NjBhOGE0OWFhIgogICAgICAgIH0sCiAgICAgICAgIi4vYnRvYS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJidG9hLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlmYzY5MjcxM2ExNTExNDUwZGI2NTFhMjNiYWMwYjMxN2JlMTE3YjYyZjc1MjZjN2I3NDcyNDdlZGQ1ZWY5YmZiNGFmMjNiNDMwZTZlMmMyZDEyZGE1M2UxYWY5NmE1MGEzMThmZmNjZjcxZDA2MDE5NDgzZTA0ODk3NmQxMzAiCiAgICAgICAgfSwKICAgICAgICAiLi9kZWNvZGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiZGVjb2RlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTc0YjhmNjVkMmEwNjE1NDQ4MDRiYjE3OTg4ZjExNjViYWMxZGE3OWExZWFjZjI0ODc2MDI0NWIwYzA4YzZkNTk4MDYwM2RkOWYzOTg2NzU4NGFmMjgzYjcwOWRlNjU1NjNmZjIzZWYwNDIwYTE0N2RiYTY3NzZhMzg1ZWI1ZWIiCiAgICAgICAgfSwKICAgICAgICAiLi9lbmNvZGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiZW5jb2RlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGI2ZTQ1YmNkZDQxNDE1YmE1ZmZjNjJjMjk2NjU4NzM2N2I1MjVmMGFmZTkyZDQ4YWE0NmQyYzI1MTVkNWVkMjIwYTc0YTc4ZDgwYjFiOTcwOTRmNjJjZTExNDk4NGE1MDMyY2UwMDc1NTNkMTEyOWU1OWYyM2RlMTgxNGY5ZmIiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVkNGZmN2YzYjMwODExN2FiNTk5NjQyNGQzOTFmM2U3OWU0ZTFmNjVlMzA1NjAzNmIzMzYzNGU5ZjcxZmVlZWU0YTljYzhlOWQ1NzRjNGNkZDIwOTJjYTk5NmM2YjlmMjcxNmYzYTU0MmNjNWQ2Mzg4NzdlMzU0NThjZWU1OWQzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbW1vbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29tbW9uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzhiMjBhNmQxMWE1OGFmNDgyZDcwNTY1OTgwNmU1MjNmMzE5MWE5MGUyMzI0YjZmYjdhNzIyMWEzOWVlYTRmMmNkMzgwMDQ0MzdhYjA0OTM5OTFkYzhhNjgzN2MxOTIxYzBhYWNmYmQ4YWFhZjQwMmYxODdjMWU3ZGY5NjM1YzkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGVjb2RlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWNvZGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiOTA0ZTc1MDk1MzJiYzZjNTE4MGE1NjU2OWY2OWUzMGE4OGIxOGZhYzgyZDc3ZDJiMTUzODU0MTdiZDMwYjFmMDEwODE1YTdhNTIzYTM0YTQ1M2Q0MjE1MDMzZWVkYzJkOTliNjQ3NGE3YzMyYWRmZDQ0NjVkZmYzZGJhOTEyYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFkZDFiMmY0NTMxYzQ3NjZhZDBjNjE5ODkwMTE1NzAxZmEwNGM4ODc0Mzg2YjlkYzNiNWVmODViZmQzYTNhMjI1Y2MzM2NiZTNlN2MzYWNlMzI4NDVkYzQ0NjcwZWRhYjA3ODk1YjM2MjRkYWNhMzQ0MmIwOGUyMzUwODljOTZlIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9jb21tb24tdjEuMi43IjogewogICAgICAibmFtZSI6ICJAZW5kby9jb21tb24iLAogICAgICAibGFiZWwiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZjQzN2I1ZjNlMzNiNzczZGU2Y2JlZDEwZTUwYTllMGI5NDhjNzNhNmFlMTY0NjY0MDE0OWNjOGYwZjgxNjk1ODVhYWYyNTdkMTAyNjZmYzI2YmU1ZTFkYzM5NGY1YTM1MWVjNmE2YWY4NWQzYjk5MjI4ODE5OWRiOGQxNjZlOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9janMtbW9kdWxlLWFuYWx5emVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Nqcy1tb2R1bGUtYW5hbHl6ZXItdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9janMtbW9kdWxlLWFuYWx5emVyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9janMtbW9kdWxlLWFuYWx5emVyLXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvYXJjaGl2ZS1saXRlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FyY2hpdmUtbGl0ZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvYXJjaGl2ZS1wYXJzZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FyY2hpdmUtcGFyc2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvYXJjaGl2ZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcmNoaXZlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9idW5kbGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYnVuZGxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9jYXB0dXJlLWxpdGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY2FwdHVyZS1saXRlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtYXJjaGl2ZS1saXRlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LWFyY2hpdmUtcGFyc2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvaW1wb3J0LWFyY2hpdmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LWFyY2hpdmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1saXRlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2ltcG9ydC1saXRlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtcGFyc2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbXBvcnQtcGFyc2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvaW1wb3J0LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2ltcG9ydC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvbm9kZS1tb2R1bGVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL25vZGUtbW9kdWxlcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvbm9kZS1wb3dlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbm9kZS1wb3dlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbW9kdWxlLXNvdXJjZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tb2R1bGUtc291cmNlLXYxLjEuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbW9kdWxlLXNvdXJjZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbW9kdWxlLXNvdXJjZS12MS4xLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tb2R1bGUtc291cmNlL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbW9kdWxlLXNvdXJjZS12MS4xLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vdHJhbXBvbGluZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby90cmFtcG9saW5lLXYxLjAuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vdHJhbXBvbGluZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby96aXAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vemlwLXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vemlwL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vemlwL3JlYWRlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9yZWFkZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vemlwL3dyaXRlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi93cml0ZXIuanMiCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb25zb2xlLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL2ltcG9ydC1hcmNoaXZlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImltcG9ydC1hcmNoaXZlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjNmYWQ0ZDRlMTY0ODljODZlNzRmZjFiNDQ1ZmFlMjNlMmZhOWM1NjE5ZTRjNTczNWUzZjk2MGE1NTMyNGY0YjQ3NTYwZTdhMWI4ODE5NjY4YzY2MzgzZjhmYzZjZDcxMmU1MDViNWI2OGNmOWIzNDAwYmViN2E1ZTkwYzE3ZTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29tcGFydG1lbnQtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb21wYXJ0bWVudC1tYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3NmQ5ZTVkOTFmZjliMWRhNjkxMTAxOThjMmM2NWFjYjU1MDdlNjJjZGRiYzU4NTE1YzQ0Njc3MmNjZTE5NWQ2YzQxNzM4YmUxOTg2ZGE5MjRlNGNjYTY1YTA2MTZiYTI5NzAxMmM2MDFkZTE3MDcxN2JhZjA0YmFlNTNiOTE3OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leHRlbnNpb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4dGVuc2lvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRkMWM2OTNjNWMyMGI0ZmYxZmVkMGJhYTAwYjJjNWU5MDUxYWEyMmNlODg5MGIxZTgxNzUwYmY1ZjA3NzE1N2RmNDc5NmQxMWUwNTU5YzVhMGIwZTBkZjRhODdlMjEwNTZkNDVjZWZlMGU1YjRmYjVkYzJmNjMwNDQ5YjRmYjM5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2MDZiZWJjY2E5YTIxNDcxNDMyYzRjYjYzOGUxZjM1YjUwOTRmMjRlNDg4OTY4ZjMxZDNmNWFhM2JmZDlmNjM3M2NmZmY5MmMwYzdhZjRkMjIxYjdjN2FmMmQxNDZlMTU4NTJkMWI3N2I3YzFmMDY1NTUwOWFmNTA0ZmJkMjIzZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjUzN2YyM2EwNGU1YmYxODg5ODVlMTRhOTA0NzBkMjhiMGEyMTU0ZDU4ODE1MzVkY2RhZjU4NWIyNzc3Yjk1ZGI5Y2VmZWEyN2QyOTA5Y2YyZjJmYzdmYWJjYWE4NGRkZjZkNmQ5ZTM4NDg2N2YwMzliZTcyZDA3MDVmMzBmYTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW1wb3J0LWFyY2hpdmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1hcmNoaXZlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTk2ZWZiZDJkMjU2ZjUyNmZhMTNhZWUyOGJiM2I2ZTVlYWJlYzE1NGU0ZjJkZjIwOTk1MWM1Yzc3YTU4ZGNlZTBiMjMxM2U3NjViNWUyY2UyNjcxNDcyNzZiNGQxZGIyMzc4NDJmYTE3YTQzMzNhMDE3ZmQ0YmNiMzFkZmNjYmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW1wb3J0LWhvb2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1ob29rLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODExM2YwNmQ3ZDY2ZjZiNzQxZDU1ZjE1Zjk0M2FhYTA3MDlkMjAxNmI0OTExNjU3Mjg1YTBmOWNiNjhhNzRmNzczMDhlNjMwYTZlNzllMWIyMTMxYmI5NTMyMTBlODhlNTA3OWM1NWNmYTY1NTg4MzNhZTdiMTEyNDQ3ZjA4YmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvanNvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvanNvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY0MDM3OTE5MGM3ODgyY2U2NmQ4YTRiYWUwYWVhMjEwOWZhMjI1MzczMTczZjY5N2I5OWNhZWQ5NmJlYzlmNDY3ZGZmMTU5MmYxYzMxOGVhYzA1YzhkOTY4MzIyODdiOWQzN2EzZTA5YjUxMjgzMGYwNGNhNTczYzZmMmQ2ZDkzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpbmsuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpbmsuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZTc5ZThmNTkyNDM1MDM5ZDQ0NDU3YjAyMDg4NTA5M2E5OTQ1M2QwYzkzNTMwMmVjMzdhM2RlMTg3NWUxOGQ3OTExMTUwODIzMjQ0MDgwM2M2OGFkYmZkNzI3OGJiN2FiN2VkN2UzODkwMjM2YjM0ZmYyZDhlOTcxNTc2YmEwOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXAtcGFyc2VyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXAtcGFyc2VyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWVmMzNkNGYyZTVmN2QwZTM3ODA2ZjlmYTAzZGJkNTUwMDMwMDE4ZThjMDRmYjI1YWY1MDA3MzBiMGY2YTcwOTNjYzc2ZDExZjM3NWZhMDZlNGI3NWI3YjQxNGUzYjg4ZDBkZTE4M2JmMTY1YzMzMzNhMDEyMDk0N2ViMjc3OTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyYTdiMGM3NmI4OWQ1MTljYzNjN2E0MTE2NjIxY2IwMzMxOWE5YTRhOTVmYTg4MGI2YTgxYjAxYmRmNWVhMzQxY2I0MjVlMzZhNjE1MmI1NWE2ZWE1MDJkMTNkYTJiMWM1NGVmMzA3ODZiNTIzZDU3ODQwMTQ3MjQ5NjIxMmNjNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1ieXRlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtYnl0ZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYWExZWVmYzg4MmEwNjNhYTUxNWZkNjlmNmE1MDE4MThiMWQ2ZTU5YWQyZDBhYjMwYWI1MmM3MmJhOGFlODA5NTE5Nzg5MjliZDhmYzNjYzcyM2Y4Y2MyYTViNjNlZDc0YmRiZWJjMDk4NDEzZGJiNzczZDBiYWE3OGQ3YTNmYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzQ5NGEwMDU0MWFiYTI3N2U5ZTlhOTg1MzJjNWNjYTk3YTYwNGNiYjA1OWQzYTcxNzhlZmM4Zjk3MmJkMDQyNzZjN2M4OGFiMjI5OWQ4YTY3ZjVlYjJkMDIzM2U5MGE1ZjUxNjhhYzkzMDI1YmY5N2FhYjBhN2M1ZGZlZjMwZGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFyc2UtanNvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtanNvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY4MTY4NmIxY2NhM2M2ZTQ0YzQxZTBmZDdkZDM3OTMwZTNkNzkwMjhjYjhiZGNhNzFhZWVlOGZhZDI3YjZjOTFlYTRjOTNhOWZjZDNiZGY4ZjYwOTM1N2E3MDkwZjAwNzQ5ZmM5YjA0ZTBkNzVlYWZjZDVlMDliMGZiYzQ5Yjg2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhcnNlLXByZS1janMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhcnNlLXByZS1janMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzNTlhMTE0MGFmOWEyYmQ1YmExNTkxYWUzZGU0MDAzNjU3NjVkODhlOWZhOWJhMGJiNjM0ZjI5MDM3Y2U4YmI0ODY2MWY3YzI4N2JkYjIwY2ZjOTNlZWQ0NTA3YmYxNWNhOGJiNDlkMzI5NTgxZGUwZTUxZDhjYmI1ZDk1YmE1NCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1wcmUtbWpzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXJzZS1wcmUtbWpzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTFkMGUzYjZlMTM3NjliZjI4ZmJhMWI0ODE4NjdhYzlmZDYzNWRjZmQ0MDQ1Mzk4YjZjOTVmM2FlOGVlODM2NzQxOGYyYTk3M2U3ZjUxZTUyMGVjZDA4Zjc0MmUxMmE0MThiMTE5MmI5NWJjMDM1MDI3MWY3OWNhN2ZjMmVlOGEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFyc2UtdGV4dC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtdGV4dC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM1MTVhOGQzMWUyZmU1YjhkMzY3YTFlNjA4N2Q2ZGJjM2U0ZTA5Yjg2YzlmY2Q3OWEwZjYyOTUxYWJhNDI2ODYxNGJmYjgxYjY3NTQ5ZDRhOWM3MDEzNjM0Zjk1YTg3OWNiODdhN2EzZTRhMjNlNmY3N2YxOWU2NzBmYTI3ODk3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BvbGljeS1mb3JtYXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BvbGljeS1mb3JtYXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmZDNiYjMzZWZiMGQ1OGY1YTI4ZjA2MmMwMTZkMzA3NGM1Yzg1NDM4ZGQ3YmZjZjA5ZTczMGRmYTFhZTgwY2FjMjFiMTlkNzY0YjE4Zjc4ZDNmM2ExNzYwNDY3NTY2ZTRlZTJiNGI5MWMwN2JhNTQzYjg1OGUzNTQ0OTRkZjJmZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wb2xpY3kuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BvbGljeS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUyNzdkZTU5ZWQ2ZGQ4ZDI0MzI4OTBhOWYwNWU2NWU5MzYxY2ZlNWVlMmM3OTkyYmExMDZhMTY0MTAzYWMyYWJlZDhlZTg4ZThjMGZiNzIxYTc3ZDc1OWUwMWMzNTBlZjFmY2Q0OTE0NmM4NzA0MzdhZTVkZjM5ZTU3NTRjNGQxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bvd2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcG93ZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTQ1ZmQzOTQxMzU2YWEzOTBjZTI4NDUwMzA1ZWM0ZWRhNTIwMzRiMTMyNTVmN2Y1NWE0YzE3MDE5Nzk2ZWFmYmZhODc4YmQzZThiN2YwN2I5ODc1ZDU2NWNkNzkzNzZjMjRhZTcwNDE5Y2JiY2FmOTkyYzU0NTAyODA0ZGY1NWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZW52LW9wdGlvbnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDE3NzZlZWIyMWIxYzU1MWRhM2Y5YjhkY2RmNWFiZDg4YmNiZjVmOGUzOGNiMDRlZGFiYzhjYjk2NGJiOTc1MThmZjRjYWNiNzQzZThhYmJhYWMyMjg2MTY4MTVmYmU0MGU4NmJlMmQ3ZDQyODE1Nzg5NTJmOGFhODY2YTFiOTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW52LW9wdGlvbnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vudi1vcHRpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWRiMTVkNGI2NjkzMzI1ZDM0NTIzODBjYTYyZGQ5N2E3YWU0ZDAzM2JmNjc1M2FiZjQxNzViZjhmMmE0MDVkY2M5M2Q4NzdkZGRlYzEwYTdiZTViNGZjMzIzNjdkNzJlM2U3NjgwMGY3ZjQ4YzYwOGRhNDUzYzNkMmQxMTQ0ODUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vycm9ycy12MS4yLjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vycm9ycyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvYXNzZXJ0LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29uc29sZS1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbnNvbGUtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQxZjhmNGY1N2Y0ZjZlMmM4YjVkMjk2NzM2N2ZmZTRkMDdjOWNiMTc2MWE3YzVjODg0ODZmNGIyN2E0ZTNmZTU3ZDI5ODRhNTkwODNjZjUyOTcxOTE4ZmY5OWViZmE2YjgyYThjMGQ5YzVkMzRlYzVkOTQ4YjE1Yzk5ZDJlYjEzIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOWQzZTkxMDRiNmUyNWIwMmE3MzQ5NzlhZDRmMTk3ODZiYTg3MTY5ZTgwZjhiMGQ4YTUxMTY3ODFkOTE2Y2ExY2FhMGNjYWFkOWVjYjNhNDVhZjEyMDE1NjJmMDA1ZWE4YTBhMmUwYWQyNjIyYzA3YTk1OGVjODdmZTQ1ODEwOWIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xvY2FsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sb2NhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImE5NWRmNGNhMzI4MjA5NjhmMTIwM2FiNWVhMjcyYjk2MWFlMzExNjM0MDcwY2YxNTIwZThhYWE2MmNhOGVhMjIyOTcwNDRhYzRlODg5MjY3NGZiYjkxYTM0M2E3NjUwZGNiYWY1M2I3Yzc0NTIxYWQ1ZTU1NmI4ZjMzYTMzYTRlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2OTExMTQ2YzhlMDQ1MjI3MDBlMjNjOTM4ZTZiYTU3MGFjN2VhMWU5MTVkOWU3YzRkY2JjNTNmYzBmN2FiOGFjYjhkZDdjZmMwN2M1MmUwMmYyYzY1NzQwNGVlODllZjczMTFhMzI3OTRhODcxMWFhN2FiNDNhNTQyMGIzMmM4OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9uby1zaGltLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9uby1zaGltLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDkyMDUxZjY5NDQyZGIxM2Y5ZTJiNmMxOWRkZDE4OWM1MWFiMjFhODQwNDIxMDMwMWY4ZDI2MWIzYjMxOTQ4YmQ1MGNiNmY4NTIzZTAzNWM0ZjNkZjc2MzExNTgyOGZjMmVhZGM5YzJiMTI3MTdmYTM5MzhmZDRmMWQ3ODRiMTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHJhY2stdHVybnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RyYWNrLXR1cm5zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODBjYmE3NTc5OGJkYTM5MjBkNzVkNjg1ZGYzODNhNmJiYTA3MTVlMTMyNjQ4NGM2M2FmODFlYmRlN2U4NGIzODVmMDdhNzM3N2ZjNTJmYzNjODBlODAzMWJhN2Y5MWI1YmQyNWM4N2M0OTk0NjllYTFkMTM3MDc3Nzc5YWIxZTgiCiAgICAgICAgfSwKICAgICAgICAiLi91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ1dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImZlYTA0MTFiMjE2YzcxNDE1MTQzOTY2NjRmOGY4MjEzYWNkMTEyZTkzMGMwZjRmYWMwMzQyN2Y1NzM3ZDczN2QwZTk0NmI2Y2M0YzYwODg0ZDA0MDU3Yjc3Zjg4MDhhMzk2NzM2ODU5NTU4ODcyNDM1ZWFlZWVkMmYxMzI2NDdkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9iYXNlNjQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYmFzZTY0L2F0b2IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXRvYi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9iYXNlNjQvYnRvYS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9iYXNlNjQtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9idG9hLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9kZWNvZGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGVjb2RlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9lbmNvZGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5jb2RlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Jhc2U2NC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Jhc2U2NC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9hcmNoaXZlLWxpdGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXJjaGl2ZS1saXRlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9hcmNoaXZlLXBhcnNlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXJjaGl2ZS1wYXJzZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9hcmNoaXZlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FyY2hpdmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2J1bmRsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9idW5kbGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2NhcHR1cmUtbGl0ZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jYXB0dXJlLWxpdGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LWFyY2hpdmUtbGl0ZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvaW1wb3J0LWFyY2hpdmUtcGFyc2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtYXJjaGl2ZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbXBvcnQtYXJjaGl2ZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvaW1wb3J0LWxpdGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LWxpdGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1wYXJzZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2ltcG9ydC1wYXJzZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW1wb3J0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9ub2RlLW1vZHVsZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbm9kZS1tb2R1bGVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9ub2RlLXBvd2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9ub2RlLXBvd2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9zb3VyY2UtbWFwLW5vZGUtcG93ZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zb3VyY2UtbWFwLW5vZGUtcG93ZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvc291cmNlLW1hcC1ub2RlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zb3VyY2UtbWFwLW5vZGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vd2hlcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vd2hlcmUtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby93aGVyZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vd2hlcmUtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb25zb2xlLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29uc29sZS1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb21wYXJ0bWVudC13cmFwcGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb21wYXJ0bWVudC13cmFwcGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGUxMTI2YzBiNTdlNWVhYTVjZjllYTU5OTIxYmM0MzMyODIxMGJkZDZmZDhmMzkwOWUzYmU4NDUzYWQ5M2YyNTA3NmJlNTNjZTQ3MzMyZTkxN2Y1NTEzM2RiMjg0ZDgwNGIyMWUzYTJlMTlmNjU5ZTM5Y2JiMDQyYTA4N2ZmYzkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDA5ZjJhMTg0Yjg3ZDk0N2M3Y2IzN2IxYzBkN2Y0ZmUwMzhmMDJlNjYwNWRkMjEyYmRiYWRmM2M5Y2E1MTRhMzYwZjM2MDIwMTE0MTdlNzc3ZjE3NGY1MGEzYmFmMWQ1OGIwNGExYThlNGU3MjcwY2RiYTNiNDk0MmI0NjQyNmMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL21hcnNoYWwtdjEuNi4xIjogewogICAgICAibmFtZSI6ICJAZW5kby9tYXJzaGFsIiwKICAgICAgImxhYmVsIjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL21hcnNoYWwtdjEuNi4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEyIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjk5NzFhNGJhZjkyYjU0OGUyNDc0ODgwYzA3ZGFiZjM2MWYyZmQwMzhjNDAwZGE1MWQwYTQ0NjgwOTJlMzY1NTU3Njk3YzhlYjFjYWUzMjVjZmQ5ZmFmNzJhYjg2YzEzZjA0MjQwYTZlMTQ3M2E3ZTM5Mzg2MmRkMDQxMWI1NGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVBhc3NhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzlkZDY0ZDZmZTJlMjU4NGE2OWEwNmYzNmI5OWQ2YmY4MDJkNDY0NDNjNTc1NDRmOGU1ZjQ0MGEyMDI2NGNiMGY4ZDRjNDM2MmFmM2M1OTc2MDNmMjQ3ZmQxMzM0Y2U5MmI5YThhMjEwYzhjNjBjMjM5ZGJiZjNiNDMyYmE2OTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVUb0NhcERhdGEuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMzJiNDhjN2IwYTdjNGFmMWYwNThjNDUwMzBjYzUxYTIxNjExNjA3NWMyNGU1MDhkYTllY2VmNmJkNmQ0MWM0ZGIwODBhMmE4MzgzMjI4N2ZmNjIwODczZTY3ZjMxOGVjYTQyMzE1NDFkMjEwYjk0YjQ0MjFjOWUzNGEzOTg4YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlVG9TbWFsbGNhcHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkY2JkZjlhYWUzMTZiYzNlMzQwNWVmZGY3MDAzY2FhZTE4N2E5MzI5ODk0ZDkyOTJkYWM2NmQ1OTkwY2M1ZGZiODExMmY0MzNhODdkYzNkMmQxZWMwMjZkZDg1NjYwZGRmYTNkMTllZGU0OWFlYmJhYTI4NGQxYzAwOWVmODFkOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC1qdXN0aW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MGI4YzFhOWM1YjY2ZDdkZjA2MTg0NWJiNzM4ZmVhZjMwZGU3NTQ4M2RkZDg1M2QyYjU1N2ZhYmQ4MzI3OWQ0MDRhYzQ5ZmY1NTNiMmUzM2ExOTAwMWY1MDExNjQyMzU4N2E5YzQyZDM2M2RkNWU5ZmMxNDUzMTIyOGVhOTQ2OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYzJiZDI0MWUyMjkzYmEyMWFlNmFiMmM0ZmZlMzYwNDcxZmQ1YjkxNWE0OTc2ZGE0MWYxNjhmOTgwMDI0MDJmZDQ3Y2VlYTgxOGI4ZDBiMzRjYjhjNTdhYTk1MDI5MmY3Mjk3M2ExMGI0N2MwOGIwNDE3YTRjY2IzZjA1ODJjNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmVlYzY1NmQ1ZDRmZDIzYzI5YTU0YmE2ODVlZmJiMDkyZGNmMmY5NGUwY2JjYzg4MThhMTEyOWNhYzY4MTZhOTNlMTUwNGM1YWVkMGZmYzMxZTY2MmVmNDA1NDIxYmE1YzllMWI4NGQ4ZDQzMzBjMDY4MDNhYzIyYzUwMWFkMTEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmFua09yZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yYW5rT3JkZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzMGQ4ZmNmZTRjMzdiYjU3YmE2MjMwZGI2NTFmNjgzNWI2ZWQ0MjkyNDM2MWMyODRhOGZjNWVkYmEyOWJkNzFmOTAzMGQxZTVjZTA2ZjFiM2FjZDVlNGM3ODc5Mjc5MDk4OThkZGY2OTJhM2E2MTQwZGZhZTk0YmQzMmZiYmNkNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vbmF0LXY1LjAuMTIiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL25hdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9uYXQtdjUuMC4xMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9uYXQtdjUuMC4xMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEyIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjIwYTk0N2YxMmZkZDUyNjYxMDJjZjZlMjAwMzgzYTQyODk3ZTlkYjM5OWEyNzJiNmNjZGMwNTAyMzIzNTYzZTI5OWM5ZDYzZmZlYmQ3MDUxZTFjYzY4OGVmYTVmOTFkNjhlNDNlNjRjNWM5MzFmMGI3YTU0ODU1ZTQzYTA0NmQiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IjogewogICAgICAibmFtZSI6ICJAZW5kby9wYXNzLXN0eWxlIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBmYXN0LWNoZWNrL2F2YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZmFzdC1jaGVjay9hdmEtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saWIvZXNtL2F2YS1mYXN0LWNoZWNrLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBmYXN0LWNoZWNrL2F2YS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGZhc3QtY2hlY2svYXZhLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOTkzMmQ1NGY1YjQxYWM3YjI0MWIwNDQ3ZGViYjVmNzkzNTlhNGNhYzUyZDdjYjY4NDU1NGQyNTE1MTk5Yjk5YTQ1ZjAxZmVjOTJhY2E0N2FhNWI3MTU5ZTRlZGI5NGFjN2NjNGIxYmE4NjE1YjIzOTQ0Mjg4MWVkODkwZmUxNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5QXJyYXkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlBcnJheS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNmMDdhYjlkMTczYzUwMzgzOGVjNWFjOTMwNjFiOTdiYzFlMDI3OWM2YmUzYzRkN2JhNDZjMWU5YWNmNDFjMGM5ODAwZGFkYjlhMjViYjllNzliYTcyMmEwZDQzNDRiY2NmYjkwYjIwZWI2N2YxY2Y5MDg1ODg0ZjJjNzJmYmFhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvcHlSZWNvcmQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlSZWNvcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMWM0OWNjNmQ1NzdhYWIyYmVhNzhkNDQzY2U4ZGU3MTM4YTQ4YWRkMDE4YTIyMTU2NGZhMTQ0NGIxNWVhYTY5YjYyMjE2MTE4MDg1ZWUyNjU1NTJlZTQ4YzZlZGY2ZWE1OWEwMDM4ZTgzNzVlNTQxNDk4MmUyMTJhODkxZmUyOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzYzBiYzBiZWMxOTRmZDkxMWI0OWM4NzkzOTk4ODZkZjZkNjZkYjc5Zjc1MGQyNDNkNjY1ZDliYWZhMWNjYzQ0NzJmODQzMzg2NDFiMGUxODRjYWMzOWM1NzdkZmExMTVlOGIzZGJiZjY5MjdmOWI3N2IwZDcyODM3NGM3MDZmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lcnJvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJlY2QwZTNkZWE2NGE5MTkyYzU3OGQwNzhiYWZkYTY4ZDE1ZjNiZjhjNWY3ZjcyZGVhNTNiZjYwNDJlZGUyNjYyYTFhMzBlNWQ1ZGE0ZjE2Mjc2NGU0MTExMWRiMDZkYTliNGIyNWM0M2E5MTc5ZGEyNjEyYWIwNmQ4YTVlODNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2l0ZXItaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXRlci1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWE4ZDdjZTA1MWJlYzg3NTY0ZTdjNGY2YWQxMjAzNjI2OTgyZjQxYTMyMzhhNTEwMjVmYWE1MzEwMWQ2MjdhNTMwMGNiYjQwNjYxYjM4ZThkYjEyMDAwMzIyZDdhZGY5NTkyY2YwYTViYTdjZDYzMTY5YzIxN2I0MGJjNDhjMzAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1mYXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2UtZmFyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGVkYWI1OTY4YjY5MWEyOWEyZmQ4NTRjYTMzMWJkNDc1ZTBmNDdmNTU0YmYxZjlkZDY3Y2MxN2NmMjdhMTJjOWQ3NjU0NmFkNmZiNmUyOWViOTk2MTVmNDRjYjVmMDE1NTE0Mjg2YTlhYjIzZjQ0OGJiYzQ1YjA4NDFjMWRhZjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZVRhZ2dlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwMWY4MmY5YjQwNjQzZjU5YWRjMjAyZGE3MWEwMWE1N2FmNjA0NGZhNWRlOWY5YmY4OTNiOTMyNzljYTFhMTVjYmExMGJmZDU2YzBhZDkzMDA2MzdhZTJkNjJkMDhlYjgzYmE3MDYzYmE4MDVkZmQxYmVhZjEyNGJjMmZlYTIxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNlNTU2MDQ3ZWYwMzFkYjQzNmM4NGZhMzI4YjM3M2ZiNDhiYTllNDY2ZWMyNDJkNDBmMWZmMmZmYjJlNmZlMGQyOTBjYmNjZDA5MDVkMWYyODEwOTZkZGQ1MzdiODBjZmFkMDE2N2NhMjYxOTUzNTk5N2EyMzI4OGIzNjg4Y2MyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGVPZi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0MmE5ZWZiYjI4NTZlNmZmYzBmMzg5Yzg1ZGZkZGE4NGU2MTFjM2JmNDdiYTQ3ODBmMjA3ODFiOTYzN2I2MDIyMWJlMTQ4MDM4YTgwOWYyZDZmYjc2ZTJkZTY0NjlmZGFlNjNjMDA1MjU2YmE1NGU0OTZlNzRmYmVkNTM5N2FlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JlbW90YWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmVtb3RhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzkxMDA5Mzg3NDc1Y2I5NzM3YmM4YWQ1MGY5OGE0ODhjOGE1MTExMDMzMjZiNTNiNDI5NDkxN2FkNjg2ODgzYTBhNGJhZDZkYjA2YTk0YzA1MDZiZWYxNGFjYmFkZjMwODUyOGI5MWRhMjRiMmE1MGU5NTgxYTNlY2E5MjA3NTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2FmZS1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zYWZlLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxZDZjYmZiM2MzZjllMThhMDA1Njg3YzU5N2YxZWZiNzc5NWRiM2FjMzY5NzQ0N2NhYTJiMjgyNGNjMWJhYjE0Y2IxYjhhMWE3MDZhZGExMjlkNzk4YjBhOTJkMDlhOTEzZjA4M2JmYzdiNjM2NzZlNzEzOGY1ZmJmZTljMGM4NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdHJpbmcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0cmluZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM5YjIxMDE3MWRmZjI5NmYzOGI0NTc3MDZhYjAyMWVhYmI3NTYwZTI1OGQ5M2ZmZjY4YjU2ZTk2YzZjMmE2YzJjOWQ5NzE2Yjk2NjBlYTk4Y2VkOWZmNGFiNmRmMDJhYTAxYjhmODE4NmI3MDZlNWY3MGJhMjdkZmU5NWVkODlkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N5bWJvbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3ltYm9sLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjg1YzRlYWNhNzllODFjZTczMGM1Y2NhYzQxMjBmOTJiZjQ4YjMxN2YzNGQ4MzVhZDIxMzllYzcxMTE1NTkzY2U0ZTlmOWFjNjhkNzdiOWRkNmI2YjM5NzViZjE2NmJmNDFkZTM4MjRlZWNmZTViYjE2OWU1NzFiMzNiYWZlYzIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdGFnZ2VkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90YWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjZGQwY2U5MmVlOGI1ZTZkMDA5N2E1Nzg4MjQyYTg3OWU3MjZjNjdjNTRmZmIwZTNiYTRlYWUzOTk2NDFkYzRkMWFjNWU1NjE5ZjVmNTY2ZTZhM2VkZDg0NmNmODczYjVjMWM1OTc4NWIyNTFmZDIwNGU5MDg5YjE3YWMwMTQ5NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzI5ZmMxNTQwNTM3NzE1ZGY4NTRhMzhhNWU0NWFlNmQyMjg2ZTlmYjE1MWM1Mjg1NmM5YjlkZmMxZTIyY2Q2MzA5ZWQzMjIyMzBlNmZlY2M2YTI0OGE2YjM0NTBhM2ZmMTY0YTY3NGVlZmY4MjhjOTE1ZWM0ODIwM2JkYzY2NDciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcHJvbWlzZS1raXQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjkuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2Fzc2VydC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Fzc2VydC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb21wYXJ0bWVudC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbXBhcnRtZW50LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbnNvbGUtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb25zb2xlLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93bi1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xvY2tkb3duLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS45LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4Mzc2NTA1ZjY4YmRjM2NiOTRlNjU3NjRlMmZlMzJlY2U5MDI2YTEzNzdlNzA0MWVlYWRjNzUwMTgwYTk3ZTk4MmY3YzRhYjhmNzMxODg4NDg0MmRkMjI1ODUyOWRiNDI1NDRmNThiZDA5OTA5Mzk0OGIwYzVjMzQwYjg2ZWU5ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pcy1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2M2MmI1ODA1YzQyNTU3NmJkMTFiYTM4NzEwNmU3MmFkNjk1YTc0MjIzZjU4ZDZmODkxY2JmMThhNjZjZTQyNjgxMWIxMmYzOGRiMTM4NDg3NzBjOTJmZTlhODM0NzNiNDJmMTcwZGY0NmNiODZkMjU0ODhiN2Y1ZmQxZDllYTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWVtby1yYWNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZW1vLXJhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0NjIyNWYxYjUzZGYxYjI4YjM5ZTM3NzI3YmEwZGY0OTE1OGMxMjcyYmZjMTE1MWUzZWQ5NzhkZTVlODBiYjUzNTgwZjkwNWEzNzI1ODYyMmJhYzNmYzhmODNlMDkwNDFlYmY3NDFkODA1NmFmZmI2MWQyYjYxZDJkYjRjM2ViOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YThjNTIzNDc1ZWUwNWRlMjgwMWJkMzZkOTc2N2Q2ODI1YWE2MGRkYTA0ZDQ3ZTQ0MDQ5ZWM0ZjQ5MDg2MzYxYTM5ZTNmYjE5OGZhYzg0OGMzNTYwZmY1ZjU1Yzc3MzUyMjU1MzVlY2E1NjNlZWEyNzY3NWIxOGE0Zjk0NzZmMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3RyYW1wb2xpbmUiLAogICAgICAibGFiZWwiOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vdHJhbXBvbGluZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby90cmFtcG9saW5lLXYxLjAuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vdHJhbXBvbGluZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2M1NDNlZjUyYjdmNTA1ZGY4YzYwMWU3ZWU1NzRjOGNjMzI2MTkyOTg3NmFlNmY2YTQ5NDJlMDVhZjQxMjdlYzgxZGU4YWMxMmU4OWMyMmYyNDRjNTViNzhlMzMxNzJlOTI1MGNiNDM5YzIwMjc5OTJiZDY0MzgwZjI3ZTk0NmMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHJhbXBvbGluZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhbXBvbGluZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY1YTAyN2JlNzM0YzU3NThlNjI2NmRhMjE3YjExYTY4OTRhM2UxNWRjNmI5MmEwYzJlMzdmZmE1OWNhNWFiZmY2NDE0MWRiYzVjNWM5YTA2ZDVlZTk5M2QwNTgwZWUxZDM0NWI0YmI0YTMyMmRhZmZiYzBlOTFhZjFjN2I0YTQ1IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby96aXAtdjEuMC44IjogewogICAgICAibmFtZSI6ICJAZW5kby96aXAiLAogICAgICAibGFiZWwiOiAiQGVuZG8vemlwLXYxLjAuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL3ppcCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby96aXAtdjEuMC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby96aXAvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3ppcC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby96aXAvcmVhZGVyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3ppcC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3JlYWRlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby96aXAvd3JpdGVyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3ppcC12MS4wLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3dyaXRlci5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTUwODY5N2FlMzI3MmVkYTRiOWJlMTk0MWIwODBlNDAwM2U1OGZmNDAzMjFlYjlhNzBmODk3MzllZDM4Yjc0M2IxOGM2ZjZkMjA4YmM3M2RhMmMwMTU3OTZmZGUyZjA3MjlkNzUyMzA2ZDkzZjYzZjU1M2NlNjk2MGYxNzUxMTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYnVmZmVyLXJlYWRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYnVmZmVyLXJlYWRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIyYjUzZTBjYWRkNGZjZGVhMGNhMzE4Njg0NWYxZWIzYzhiOWI1NTA3YmI4ODFkMzcyYzUzNzIzY2U3ZWY2YzY5M2YyYmQ0Y2JmMzMxYzg0NjZiZGZjMGU2Yjc3NTExNzk5MjA0MWI1OTdlY2JjNzkxY2Y0N2ZkYzk4ZDhhOWVmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2J1ZmZlci13cml0ZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2J1ZmZlci13cml0ZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1YzNmZTdlYzU5MTE2NjU5YTUzNDAzMzg5ZTkyYTA0MWNkMDE4NDEyYzkxZTcyZmE2ZTUwYzFlYWY5ZTU1OWRmNDQzZjJiODc5MDU4NjFhZTZhMTFjN2FhOGVjZTBhMWMwNGU5NGUxZTU5OWU0YzI5M2EyMWVkYmM5NzhiZjEwZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb21wcmVzc2lvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29tcHJlc3Npb24uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ODNmZmVlYjhiMWY3OTc2MTE5Mjg4ODQ5NDA2ZGI4NjcyMjkxZjY2ZjQ1NzM2YjBjZmFhNjFlM2ZjZjMxZDNiNmQ5ZjkyYjFkZTJkZDU4Zjc3MjA2NzY0ZmIyMGU4MjQzZGY0Y2EzZGQ2MDc2NGMxMWYwNDMxYTg1MzNmNDVjNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jcmMzMi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY3JjMzIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MGZmODc1MzAyYTIyZTg5ZjFlNTE2MTRmOTM1NGQ1NDU1ZTk1MzZjMDBlMDdiZjY2YjQyMzcyMDk0M2ZmMjYyNDg0YmUxNGQzMzU0MTI3ZmQ4ZDI4ZDJkMDM4ZWI5YTcyZTg3NmViNTY0ZWNiMjQ2OTdiYWYxNThlMzk1MTMzYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9mb3JtYXQtcmVhZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9mb3JtYXQtcmVhZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTc4NzBkODE5NTQ2MjgyN2MyMjIxYzAzOWI5OGE0MWZjYjM3YmFiNDI3YWUzZjBlYWQ4ODNhMjFlOWY0NjdjYWUyMGJiMmYyNTUwZTljM2Y3ODQ5MDFhODJkYTkwMjc1Yzg1ZTc0ZjRhODU1Mjk2NDFiYjY4YTU2MWU1NDAxMTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZm9ybWF0LXdyaXRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZm9ybWF0LXdyaXRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImU4NTM5ODUwMDBlMjExNjZhODIwZjRjMmRkYzNlMjhiNzYyMmMwYmRkMTJjYzRmZGFlNWM0ZTJhN2Y5ZTVjMTQ2MTY2MGI5ZTRkMjNmNDU5ZWZhYWFkMDlhNjZmMzBjMTY5ZDRkMDkwMWEyMDJmY2JlN2NhYzA1NGU2NTJjZWY2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JlYWRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmVhZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2EyODA3NzJlZmY3MWEwZDkxYmYxZGM5OGY3NzZiMTJkZmIyZThlMTMyMzk2Mjk0ZjhhNWVhMGRhZjAyMzA0Mzk4YmU4ZWE3MjM1MzAwNzk1N2E0YTg2ZTIwZjk0Njk0MTdlMjM0MDgxMjFjZDg0MDM0ZTExNzc0OTg1YjBlMTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2lnbmF0dXJlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zaWduYXR1cmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMWFhYWFkMGM5MTk1NDkzMWVjOWJlNWViNDcxODczOTdjYTFlMzc4ZGMwMzUxM2U4ZTE2NzYwZGI5ZjQ3Y2Y5ODUxYjNiMzQwZDRkNDViZWI2YjU3ZTYwMzIxNTc4OWFmMmRlYjQ3YWNjYjQyNGIwMDM0NmY4OWI1YjE3ZDc3NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93cml0ZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3dyaXRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZDQ5MTdlMTZjOTIxMzk5ZDU4NDRiMWRjNzVkOTBiN2RjYzI4MjVhYjI1YmQ4NDRlN2ZlMjllM2MzMGJjNmIyYTFmOGZmOThkZmY4ZDgzMzI0YWY0YTI3Njc2YmRjYWQ3ZmUxYzBjOTNhMDkwY2I3ZTlkMTQ4Y2RjODNkMjJkIgogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfVBLAwQKAAAAAAAAAAAALhzkYnMEAABzBAAAKQAAAEBhZ29yaWMvc3Bhd25lci12MC42Ljgvc3JjL3ZhdC1zcGF3bmVkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ltcG9ydC1idW5kbGUiLCJAZW5kby9tYXJzaGFsIl0sImV4cG9ydHMiOlsiYnVpbGRSb290T2JqZWN0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGltcG9ydEJ1bmRsZSxGYXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9pbXBvcnQtYnVuZGxlXCIsIFtbXCJpbXBvcnRCdW5kbGVcIiwgWyRozY9fYSA9PiAoaW1wb3J0QnVuZGxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1aWxkUm9vdE9iamVjdCwgJ25hbWUnLCB7dmFsdWU6IFwiYnVpbGRSb290T2JqZWN0XCJ9KTskaM2PX29uY2UuYnVpbGRSb290T2JqZWN0KGJ1aWxkUm9vdE9iamVjdCk7ICAgXG5cblxuXG5cbmNvbnN0IGVuZG93bWVudHM9e1xuVmF0RGF0YSxcbmNvbnNvbGUsXG4vL1xuYXNzZXJ0Omdsb2JhbFRoaXMuYXNzZXJ0LFxuQmFzZTY0Omdsb2JhbFRoaXMuQmFzZTY0LC8vXG5VUkw6Z2xvYmFsVGhpcy5VUkwvL1xufTtcblxuZnVuY3Rpb24gICAgICAgIGJ1aWxkUm9vdE9iamVjdCgpe1xucmV0dXJuIEZhcigncm9vdCcse1xuICAgICAgYXN5bmMgbG9hZEJ1bmRsZShidW5kbGUpe1xuY29uc3QgbnM9YXdhaXQgaW1wb3J0QnVuZGxlKGJ1bmRsZSx7ZW5kb3dtZW50c30pO1xuY29uc3Qgc3RhcnRGbj1ucy5kZWZhdWx0O1xucmV0dXJuIEZhcignc3Bhd25lZCBidW5kbGUnLHtcbiAgICAgIGFzeW5jIHN0YXJ0KGFyZ3NQKXtcbmNvbnN0IGFyZ3M9YXdhaXQgYXJnc1A7XG5yZXR1cm4gc3RhcnRGbihhcmdzKTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJidWlsZFJvb3RPYmplY3QiOlsiYnVpbGRSb290T2JqZWN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIHpHbNhAgAAYQIAABsAAABAZW5kby9iYXNlNjQtdjEuMC44L2F0b2IuanN7ImltcG9ydHMiOlsiLi9kZWNvZGUuanMiXSwiZXhwb3J0cyI6WyJhdG9iIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGRlY29kZUJhc2U2NDskaM2PX2ltcG9ydHMoW1tcIi4vZGVjb2RlLmpzXCIsIFtbXCJkZWNvZGVCYXNlNjRcIiwgWyRozY9fYSA9PiAoZGVjb2RlQmFzZTY0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhdG9iPShlbmNvZGVkRGF0YSk9PntcbmNvbnN0IGJ1Zj1kZWNvZGVCYXNlNjQoZW5jb2RlZERhdGEpO1xucmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmKTtcbiB9OyRozY9fb25jZS5hdG9iKGF0b2IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXRvYiI6WyJhdG9iIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACZUXeYBAwAAAQMAABsAAABAZW5kby9iYXNlNjQtdjEuMC44L2J0b2EuanN7ImltcG9ydHMiOlsiLi9lbmNvZGUuanMiXSwiZXhwb3J0cyI6WyJidG9hIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGVuY29kZUJhc2U2NDskaM2PX2ltcG9ydHMoW1tcIi4vZW5jb2RlLmpzXCIsIFtbXCJlbmNvZGVCYXNlNjRcIiwgWyRozY9fYSA9PiAoZW5jb2RlQmFzZTY0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBidG9hPShzdHJpbmdUb0VuY29kZSk9PntcbmNvbnN0IGJ5dGVzPXN0cmluZ1RvRW5jb2RlLnNwbGl0KCcnKS5tYXAoKGNoYXIpPT57XG5jb25zdCBiPWNoYXIuY2hhckNvZGVBdCgwKTtcbmlmKGI+MHhmZil7XG50aHJvdyBFcnJvciggYGJ0b2E6IGNoYXJhY3RlciBvdXQgb2YgcmFuZ2U6ICR7Y2hhcn1gKTtcbiB9XG5yZXR1cm4gYjtcbiB9KTtcbmNvbnN0IGJ1Zj1uZXcgVWludDhBcnJheShieXRlcyk7XG5yZXR1cm4gZW5jb2RlQmFzZTY0KGJ1Zik7XG4gfTskaM2PX29uY2UuYnRvYShidG9hKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImJ0b2EiOlsiYnRvYSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABz+iePqwEAAKsBAAAdAAAAQGVuZG8vYmFzZTY0LXYxLjAuOC9kZWNvZGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZGVjb2RlLmpzIl0sImV4cG9ydHMiOltudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2RlY29kZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2RlY29kZS5qcyI6W1siZGVjb2RlQmFzZTY0IiwiZGVjb2RlQmFzZTY0Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD390dCqwEAAKsBAAAdAAAAQGVuZG8vYmFzZTY0LXYxLjAuOC9lbmNvZGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZW5jb2RlLmpzIl0sImV4cG9ydHMiOltudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2VuY29kZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2VuY29kZS5qcyI6W1siZW5jb2RlQmFzZTY0IiwiZW5jb2RlQmFzZTY0Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABq5nZnlgIAAJYCAAAcAAAAQGVuZG8vYmFzZTY0LXYxLjAuOC9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbmNvZGUuanMiLCIuL3NyYy9kZWNvZGUuanMiLCIuL2J0b2EuanMiLCIuL2F0b2IuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW5jb2RlLmpzXCIsIFtdXSxbXCIuL3NyYy9kZWNvZGUuanNcIiwgW11dLFtcIi4vYnRvYS5qc1wiLCBbXV0sW1wiLi9hdG9iLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZW5jb2RlLmpzIjpbWyJlbmNvZGVCYXNlNjQiLCJlbmNvZGVCYXNlNjQiXV0sIi4vc3JjL2RlY29kZS5qcyI6W1siZGVjb2RlQmFzZTY0IiwiZGVjb2RlQmFzZTY0Il1dLCIuL2J0b2EuanMiOltbImJ0b2EiLCJidG9hIl1dLCIuL2F0b2IuanMiOltbImF0b2IiLCJhdG9iIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABdcxYnEQMAABEDAAAhAAAAQGVuZG8vYmFzZTY0LXYxLjAuOC9zcmMvY29tbW9uLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJhbHBoYWJldDY0IiwibW9ub2R1NjQiLCJwYWRkaW5nIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG5jb25zdCAgICAgICAgcGFkZGluZz0nPSc7JGjNj19vbmNlLnBhZGRpbmcocGFkZGluZyk7XG5cbmNvbnN0ICAgICAgICBhbHBoYWJldDY0PVxuJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hbHBoYWJldDY0KGFscGhhYmV0NjQpO1xuY29uc3QgICAgICAgIG1vbm9kdTY0PXt9OyRozY9fb25jZS5tb25vZHU2NChtb25vZHU2NCk7XG5mb3IobGV0IGk9MDtpPGFscGhhYmV0NjQubGVuZ3RoO2krPTEpe1xuY29uc3QgYz1hbHBoYWJldDY0W2ldO1xubW9ub2R1NjRbY109aTtcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwYWRkaW5nIjpbInBhZGRpbmciXSwiYWxwaGFiZXQ2NCI6WyJhbHBoYWJldDY0Il0sIm1vbm9kdTY0IjpbIm1vbm9kdTY0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOBOTL53BwAAdwcAACEAAABAZW5kby9iYXNlNjQtdjEuMC44L3NyYy9kZWNvZGUuanN7ImltcG9ydHMiOlsiLi9jb21tb24uanMiXSwiZXhwb3J0cyI6WyJkZWNvZGVCYXNlNjQiLCJqc0RlY29kZUJhc2U2NCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtb25vZHU2NCxwYWRkaW5nOyRozY9faW1wb3J0cyhbW1wiLi9jb21tb24uanNcIiwgW1tcIm1vbm9kdTY0XCIsIFskaM2PX2EgPT4gKG1vbm9kdTY0ID0gJGjNj19hKV1dLFtcInBhZGRpbmdcIiwgWyRozY9fYSA9PiAocGFkZGluZyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGpzRGVjb2RlQmFzZTY0PShzdHJpbmcsbmFtZT0nPHVua25vd24+Jyk9PntcbmNvbnN0IGRhdGE9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKHN0cmluZy5sZW5ndGgqNC8zKSk7XG5sZXQgcmVnaXN0ZXI9MDtcbmxldCBxdWFudHVtPTA7XG5sZXQgaT0wOy8vXG5sZXQgaj0wOy8vXG5cbndoaWxlKGk8c3RyaW5nLmxlbmd0aCYmc3RyaW5nW2ldIT09cGFkZGluZyl7XG5jb25zdCBudW1iZXI9bW9ub2R1NjRbc3RyaW5nW2ldXTtcbmlmKG51bWJlcj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvciggYEludmFsaWQgYmFzZTY0IGNoYXJhY3RlciAke3N0cmluZ1tpXX0gaW4gc3RyaW5nICR7bmFtZX1gKTtcbiB9XG5yZWdpc3Rlcj1yZWdpc3Rlcjw8NnxudW1iZXI7XG5xdWFudHVtKz02O1xuaWYocXVhbnR1bT49OCl7XG5xdWFudHVtLT04O1xuZGF0YVtqXT1yZWdpc3Rlcj4+PnF1YW50dW07XG5qKz0xO1xucmVnaXN0ZXImPSgxPDxxdWFudHVtKS0xO1xuIH1cbmkrPTE7XG4gfVxuXG53aGlsZShxdWFudHVtPjApe1xuaWYoaT09PXN0cmluZy5sZW5ndGh8fHN0cmluZ1tpXSE9PXBhZGRpbmcpe1xudGhyb3cgRXJyb3IoIGBNaXNzaW5nIHBhZGRpbmcgYXQgb2Zmc2V0ICR7aX0gb2Ygc3RyaW5nICR7bmFtZX1gKTtcbiB9XG4vL1xuLy9cbmkrPTE7XG5xdWFudHVtLT0yO1xuIH1cblxuaWYoaTxzdHJpbmcubGVuZ3RoKXtcbnRocm93IEVycm9yKFxuIGBCYXNlNjQgc3RyaW5nIGhhcyB0cmFpbGluZyBnYXJiYWdlICR7c3RyaW5nLnN1YnN0cihcbmkpXG4gfSBpbiBzdHJpbmcgJHtuYW1lfWApO1xuXG4gfVxuXG5yZXR1cm4gZGF0YS5zdWJhcnJheSgwLGopO1xuIH07XG5cbi8vXG4vL1xuJGjNj19vbmNlLmpzRGVjb2RlQmFzZTY0KGpzRGVjb2RlQmFzZTY0KTtjb25zdCBhZGFwdERlY29kZXI9XG4obmF0aXZlRGVjb2RlQmFzZTY0KT0+XG4oLi4uYXJncyk9PntcbmNvbnN0IGRlY29kZWQ9bmF0aXZlRGVjb2RlQmFzZTY0KC4uLmFyZ3MpO1xuaWYoZGVjb2RlZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe1xucmV0dXJuIGRlY29kZWQ7XG4gfVxucmV0dXJuIG5ldyBVaW50OEFycmF5KGRlY29kZWQpO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGRlY29kZUJhc2U2ND1cbmdsb2JhbFRoaXMuQmFzZTY0IT09dW5kZWZpbmVkP1xuYWRhcHREZWNvZGVyKGdsb2JhbFRoaXMuQmFzZTY0LmRlY29kZSk6XG5qc0RlY29kZUJhc2U2NDskaM2PX29uY2UuZGVjb2RlQmFzZTY0KGRlY29kZUJhc2U2NCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJqc0RlY29kZUJhc2U2NCI6WyJqc0RlY29kZUJhc2U2NCJdLCJkZWNvZGVCYXNlNjQiOlsiZGVjb2RlQmFzZTY0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEcLyqkgBgAAIAYAACEAAABAZW5kby9iYXNlNjQtdjEuMC44L3NyYy9lbmNvZGUuanN7ImltcG9ydHMiOlsiLi9jb21tb24uanMiXSwiZXhwb3J0cyI6WyJlbmNvZGVCYXNlNjQiLCJqc0VuY29kZUJhc2U2NCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhbHBoYWJldDY0LHBhZGRpbmc7JGjNj19pbXBvcnRzKFtbXCIuL2NvbW1vbi5qc1wiLCBbW1wiYWxwaGFiZXQ2NFwiLCBbJGjNj19hID0+IChhbHBoYWJldDY0ID0gJGjNj19hKV1dLFtcInBhZGRpbmdcIiwgWyRozY9fYSA9PiAocGFkZGluZyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAganNFbmNvZGVCYXNlNjQ9KGRhdGEpPT57XG4vL1xuLy9cbi8vXG5sZXQgc3RyaW5nPScnO1xubGV0IHJlZ2lzdGVyPTA7XG5sZXQgcXVhbnR1bT0wO1xuXG5mb3IobGV0IGk9MDtpPGRhdGEubGVuZ3RoO2krPTEpe1xuY29uc3QgYj1kYXRhW2ldO1xucmVnaXN0ZXI9cmVnaXN0ZXI8PDh8YjtcbnF1YW50dW0rPTg7XG5pZihxdWFudHVtPT09MjQpe1xuc3RyaW5nKz1cbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4xOCYweDNmXStcbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4xMiYweDNmXStcbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj42JjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcj4+PjAmMHgzZl07XG5yZWdpc3Rlcj0wO1xucXVhbnR1bT0wO1xuIH1cbiB9XG5cbnN3aXRjaChxdWFudHVtKXtcbmNhc2UgMDpcbmJyZWFrO1xuY2FzZSA4Olxuc3RyaW5nKz1cbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4yJjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcjw8NCYweDNmXStcbnBhZGRpbmcrXG5wYWRkaW5nO1xuYnJlYWs7XG5jYXNlIDE2Olxuc3RyaW5nKz1cbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4xMCYweDNmXStcbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj40JjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcjw8MiYweDNmXStcbnBhZGRpbmc7XG5icmVhaztcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYGludGVybmFsOiBiYWQgcXVhbnR1bSAke3F1YW50dW19YCk7fVxuXG5yZXR1cm4gc3RyaW5nO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5qc0VuY29kZUJhc2U2NChqc0VuY29kZUJhc2U2NCk7XG5jb25zdCAgICAgICAgZW5jb2RlQmFzZTY0PVxuZ2xvYmFsVGhpcy5CYXNlNjQhPT11bmRlZmluZWQ/Z2xvYmFsVGhpcy5CYXNlNjQuZW5jb2RlOmpzRW5jb2RlQmFzZTY0OyRozY9fb25jZS5lbmNvZGVCYXNlNjQoZW5jb2RlQmFzZTY0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImpzRW5jb2RlQmFzZTY0IjpbImpzRW5jb2RlQmFzZTY0Il0sImVuY29kZUJhc2U2NCI6WyJlbmNvZGVCYXNlNjQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAArVcGfgIDAAACAwAAIQAAAEBlbmRvL2NvbW1vbi12MS4yLjcvb2JqZWN0LW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBjb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1hcD0ob3JpZ2luYWwsbWFwRm4pPT57XG5jb25zdCBlbnRzPWVudHJpZXMob3JpZ2luYWwpO1xuY29uc3QgbWFwRW50cz1lbnRzLm1hcChcbihbayx2XSk9Pi8qICAgICAgICAgICAgICAgICAgICAgICAqL1trLG1hcEZuKHYsayldKTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cykpKTtcbiB9OyRozY9fb25jZS5vYmplY3RNYXAob2JqZWN0TWFwKTtcbmhhcmRlbihvYmplY3RNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsib2JqZWN0TWFwIjpbIm9iamVjdE1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACUhs57GgIAABoCAAAxAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9pbXBvcnQtYXJjaGl2ZS5qc3siaW1wb3J0cyI6WyIuL3NyYy9pbXBvcnQtYXJjaGl2ZS5qcyJdLCJleHBvcnRzIjpbImxvYWRBcmNoaXZlIiwibG9hZEFyY2hpdmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2ltcG9ydC1hcmNoaXZlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvaW1wb3J0LWFyY2hpdmUuanMiOltbInBhcnNlQXJjaGl2ZSIsInBhcnNlQXJjaGl2ZSJdLFsibG9hZEFyY2hpdmUiLCJsb2FkQXJjaGl2ZSJdLFsiaW1wb3J0QXJjaGl2ZSIsImltcG9ydEFyY2hpdmUiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADtFxADeJgAA3iYAADYAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9jb21wYXJ0bWVudC1tYXAuanN7ImltcG9ydHMiOlsiLi9wb2xpY3ktZm9ybWF0LmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29tcGFydG1lbnRNYXAiLCJwYXRoQ29tcGFyZSIsInN0cmluZ0NvbXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UGFja2FnZVBvbGljeTskaM2PX2ltcG9ydHMoW1tcIi4vcG9saWN5LWZvcm1hdC5qc1wiLCBbW1wiYXNzZXJ0UGFja2FnZVBvbGljeVwiLCBbJGjNj19hID0+IChhc3NlcnRQYWNrYWdlUG9saWN5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgICAgICAgIHN0cmluZ0NvbXBhcmU9KGEsYik9PmE9PT1iPzA6YTxiPy0xOjE7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLnN0cmluZ0NvbXBhcmUoc3RyaW5nQ29tcGFyZSk7XG5jb25zdCBjdW11bGF0aXZlTGVuZ3RoPShsZW5ndGgsdGVybSk9PntcbnJldHVybiBsZW5ndGgrdGVybS5sZW5ndGg7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXRoQ29tcGFyZT0oYSxiKT0+e1xuLy9cbmlmKGE9PT11bmRlZmluZWQmJmI9PT11bmRlZmluZWQpe1xucmV0dXJuIDA7XG4gfVxuaWYoYT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gMTtcbiB9XG5pZihiPT09dW5kZWZpbmVkKXtcbnJldHVybi0xO1xuIH1cbi8vXG5pZihhLmxlbmd0aCE9PWIubGVuZ3RoKXtcbnJldHVybiBhLmxlbmd0aC1iLmxlbmd0aDtcbiB9XG4vL1xuY29uc3QgYVN1bT1hLnJlZHVjZShjdW11bGF0aXZlTGVuZ3RoLDApO1xuY29uc3QgYlN1bT1iLnJlZHVjZShjdW11bGF0aXZlTGVuZ3RoLDApO1xuaWYoYVN1bSE9PWJTdW0pe1xucmV0dXJuIGFTdW0tYlN1bTtcbiB9XG4vL1xuYXNzZXJ0KGEubGVuZ3RoPT09Yi5sZW5ndGgpOy8vXG4vL1xuLy9cbmZvcihsZXQgaT0wO2k8YS5sZW5ndGg7aSs9MSl7XG5jb25zdCBjb21wYXJpc29uPXN0cmluZ0NvbXBhcmUoYVtpXSxiW2ldKTtcbmlmKGNvbXBhcmlzb24hPT0wKXtcbnJldHVybiBjb21wYXJpc29uO1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5yZXR1cm4gMDtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5wYXRoQ29tcGFyZShwYXRoQ29tcGFyZSk7XG5mdW5jdGlvbiplbnVtZXJhdGUoaXRlcmFibGUpe1xubGV0IGluZGV4PTA7XG5mb3IoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpe1xueWllbGRbaW5kZXgsdmFsdWVdO1xuaW5kZXgrPTE7XG4gfVxuIH1cblxuLypcblxuXG4gKi9cbmNvbnN0IGFzc2VydEVtcHR5T2JqZWN0PShvYmplY3QsbWVzc2FnZSk9PntcbmFzc2VydChPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aD09PTAsbWVzc2FnZSk7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0IGFzc2VydENvbmRpdGlvbnM9KGNvbmRpdGlvbnMsdXJsKT0+e1xuaWYoY29uZGl0aW9ucz09PXVuZGVmaW5lZClyZXR1cm47XG5hc3NlcnQoXG5BcnJheS5pc0FycmF5KGNvbmRpdGlvbnMpLFxuIGBjb25kaXRpb25zIG11c3QgYmUgYW4gYXJyYXksIGdvdCAke2NvbmRpdGlvbnN9IGluICR7cSh1cmwpfWApO1xuXG5mb3IoY29uc3RbaW5kZXgsdmFsdWVdb2YgZW51bWVyYXRlKGNvbmRpdGlvbnMpKXtcbmFzc2VydC50eXBlb2YoXG52YWx1ZSxcbidzdHJpbmcnLFxuIGBjb25kaXRpb25zWyR7aW5kZXh9XSBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHt2YWx1ZX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0Q29tcGFydG1lbnRNb2R1bGU9KGFsbGVnZWRNb2R1bGUscGF0aCx1cmwpPT57XG5jb25zdHtjb21wYXJ0bWVudCxtb2R1bGUsLi4uZXh0cmF9PWFsbGVnZWRNb2R1bGU7XG5hc3NlcnRFbXB0eU9iamVjdChcbmV4dHJhLFxuIGAke3BhdGh9IG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcywgZ290ICR7cSh7XG5leHRyYSxcbmNvbXBhcnRtZW50fSlcbiB9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxuY29tcGFydG1lbnQsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5jb21wYXJ0bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKGNvbXBhcnRtZW50KX0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5tb2R1bGUsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5tb2R1bGUgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShtb2R1bGUpfSBpbiAke3EodXJsKX1gKTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydEZpbGVNb2R1bGU9KGFsbGVnZWRNb2R1bGUscGF0aCx1cmwpPT57XG5jb25zdHtsb2NhdGlvbixwYXJzZXIsc2hhNTEyLC4uLmV4dHJhfT1hbGxlZ2VkTW9kdWxlO1xuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3EoXG5PYmplY3Qua2V5cyhleHRyYSkpXG4gfSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbmxvY2F0aW9uLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ubG9jYXRpb24gbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShsb2NhdGlvbil9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxucGFyc2VyLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ucGFyc2VyIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3EocGFyc2VyKX0gaW4gJHtxKHVybCl9YCk7XG5cblxuaWYoc2hhNTEyIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoXG5zaGE1MTIsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5zaGE1MTIgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShzaGE1MTIpfSBpbiAke3EodXJsKX1gKTtcblxuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRFeGl0TW9kdWxlPShhbGxlZ2VkTW9kdWxlLHBhdGgsdXJsKT0+e1xuY29uc3R7ZXhpdCwuLi5leHRyYX09YWxsZWdlZE1vZHVsZTtcbmFzc2VydEVtcHR5T2JqZWN0KFxuZXh0cmEsXG4gYCR7cGF0aH0gbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKFxuT2JqZWN0LmtleXMoZXh0cmEpKVxuIH0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5leGl0LFxuJ3N0cmluZycsXG4gYCR7cGF0aH0uZXhpdCBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKGV4aXQpfSBpbiAke3EodXJsKX1gKTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydE1vZHVsZT0oYWxsZWdlZE1vZHVsZSxwYXRoLHVybCk9PntcbmNvbnN0IG1vZHVsZURlc2NyaXB0b3I9T2JqZWN0KGFsbGVnZWRNb2R1bGUpO1xuYXNzZXJ0KFxuYWxsZWdlZE1vZHVsZT09PW1vZHVsZURlc2NyaXB0b3ImJiFBcnJheS5pc0FycmF5KG1vZHVsZURlc2NyaXB0b3IpLFxuIGAke3BhdGh9IG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHthbGxlZ2VkTW9kdWxlfSBpbiAke3EodXJsKX1gKTtcblxuXG5jb25zdHtjb21wYXJ0bWVudCxtb2R1bGUsbG9jYXRpb24scGFyc2VyLGV4aXQsZGVmZXJyZWRFcnJvcn09XG5tb2R1bGVEZXNjcmlwdG9yO1xuaWYoY29tcGFydG1lbnQhPT11bmRlZmluZWR8fG1vZHVsZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRDb21wYXJ0bWVudE1vZHVsZShtb2R1bGVEZXNjcmlwdG9yLHBhdGgsdXJsKTtcbiB9ZWxzZSBpZihsb2NhdGlvbiE9PXVuZGVmaW5lZHx8cGFyc2VyIT09dW5kZWZpbmVkKXtcbmFzc2VydEZpbGVNb2R1bGUobW9kdWxlRGVzY3JpcHRvcixwYXRoLHVybCk7XG4gfWVsc2UgaWYoZXhpdCE9PXVuZGVmaW5lZCl7XG5hc3NlcnRFeGl0TW9kdWxlKG1vZHVsZURlc2NyaXB0b3IscGF0aCx1cmwpO1xuIH1lbHNlIGlmKGRlZmVycmVkRXJyb3IhPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihcbmRlZmVycmVkRXJyb3IsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5kZWZlcnJlZEVycm9yIG11c3QgYmUgYSBzdHJpbmcgY29udGFpaW5nIGFuIGVycm9yIG1lc3NhZ2VgKTtcblxuIH1lbHNle1xuYXNzZXJ0LmZhaWwoXG4gYCR7cGF0aH0gaXMgbm90IGEgdmFsaWQgbW9kdWxlIGRlc2NyaXB0b3IsIGdvdCAke3EoYWxsZWdlZE1vZHVsZSl9IGluICR7cShcbnVybClcbiB9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0TW9kdWxlcz0oYWxsZWdlZE1vZHVsZXMscGF0aCx1cmwpPT57XG5jb25zdCBtb2R1bGVzPU9iamVjdChhbGxlZ2VkTW9kdWxlcyk7XG5hc3NlcnQoXG5hbGxlZ2VkTW9kdWxlcz09PW1vZHVsZXN8fCFBcnJheS5pc0FycmF5KG1vZHVsZXMpLFxuIGBtb2R1bGVzIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHtxKGFsbGVnZWRNb2R1bGVzKX0gaW4gJHtxKHVybCl9YCk7XG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcykpe1xuYXNzZXJ0TW9kdWxlKHZhbHVlLCBgJHtwYXRofS5tb2R1bGVzWyR7cShrZXkpfV1gLHVybCk7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFBhcnNlcnM9KGFsbGVnZWRQYXJzZXJzLHBhdGgsdXJsKT0+e1xuaWYoYWxsZWdlZFBhcnNlcnM9PT11bmRlZmluZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IHBhcnNlcnM9T2JqZWN0KGFsbGVnZWRQYXJzZXJzKTtcbmFzc2VydChcbmFsbGVnZWRQYXJzZXJzPT09cGFyc2VycyYmIUFycmF5LmlzQXJyYXkocGFyc2VycyksXG4gYCR7cGF0aH0ucGFyc2VycyBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7YWxsZWdlZFBhcnNlcnN9IGluICR7cSh1cmwpfWApO1xuXG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMocGFyc2Vycykpe1xuYXNzZXJ0LnR5cGVvZihcbmtleSxcbidzdHJpbmcnLFxuIGBhbGwga2V5cyBvZiAke3BhdGh9LnBhcnNlcnMgbXVzdCBiZSBzdHJpbmdzLCBnb3QgJHtrZXl9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxudmFsdWUsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5wYXJzZXJzWyR7cShrZXkpfV0gbXVzdCBiZSBhIHN0cmluZywgZ290ICR7dmFsdWV9IGluICR7cSh1cmwpfWApO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFNjb3BlPShhbGxlZ2VkU2NvcGUscGF0aCx1cmwpPT57XG5jb25zdCBzY29wZT1PYmplY3QoYWxsZWdlZFNjb3BlKTtcbmFzc2VydChcbmFsbGVnZWRTY29wZT09PXNjb3BlJiYhQXJyYXkuaXNBcnJheShzY29wZSksXG4gYCR7cGF0aH0gbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRTY29wZX0gaW4gJHtxKHVybCl9YCk7XG5cblxuY29uc3R7Y29tcGFydG1lbnQsLi4uZXh0cmF9PXNjb3BlO1xuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3EoXG5PYmplY3Qua2V5cyhleHRyYSkpXG4gfSBpbiAke3EodXJsKX1gKTtcblxuXG5hc3NlcnQudHlwZW9mKFxuY29tcGFydG1lbnQsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5jb21wYXJ0bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKGNvbXBhcnRtZW50KX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRTY29wZXM9KGFsbGVnZWRTY29wZXMscGF0aCx1cmwpPT57XG5pZihhbGxlZ2VkU2NvcGVzPT09dW5kZWZpbmVkKXtcbnJldHVybjtcbiB9XG5jb25zdCBzY29wZXM9T2JqZWN0KGFsbGVnZWRTY29wZXMpO1xuYXNzZXJ0KFxuYWxsZWdlZFNjb3Blcz09PXNjb3BlcyYmIUFycmF5LmlzQXJyYXkoc2NvcGVzKSxcbiBgJHtwYXRofS5zY29wZXMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke3EoYWxsZWdlZFNjb3Blcyl9IGluICR7cSh1cmwpfWApO1xuXG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMoc2NvcGVzKSl7XG5hc3NlcnQudHlwZW9mKFxua2V5LFxuJ3N0cmluZycsXG4gYGFsbCBrZXlzIG9mICR7cGF0aH0uc2NvcGVzIG11c3QgYmUgc3RyaW5ncywgZ290ICR7a2V5fSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0U2NvcGUodmFsdWUsIGAke3BhdGh9LnNjb3Blc1ske3Eoa2V5KX1dYCx1cmwpO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRUeXBlcz0oYWxsZWdlZFR5cGVzLHBhdGgsdXJsKT0+e1xuaWYoYWxsZWdlZFR5cGVzPT09dW5kZWZpbmVkKXtcbnJldHVybjtcbiB9XG5jb25zdCB0eXBlcz1PYmplY3QoYWxsZWdlZFR5cGVzKTtcbmFzc2VydChcbmFsbGVnZWRUeXBlcz09PXR5cGVzJiYhQXJyYXkuaXNBcnJheSh0eXBlcyksXG4gYCR7cGF0aH0udHlwZXMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRUeXBlc30gaW4gJHtxKHVybCl9YCk7XG5cblxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyh0eXBlcykpe1xuYXNzZXJ0LnR5cGVvZihcbmtleSxcbidzdHJpbmcnLFxuIGBhbGwga2V5cyBvZiAke3BhdGh9LnR5cGVzIG11c3QgYmUgc3RyaW5ncywgZ290ICR7a2V5fSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbnZhbHVlLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0udHlwZXNbJHtxKGtleSl9XSBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHt2YWx1ZX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuXG5jb25zdCBhc3NlcnRQb2xpY3k9KFxuYWxsZWdlZFBvbGljeSxcbnBhdGgsXG51cmw9Jzx1bmtub3duLWNvbXBhcnRtZW50LW1hcC5qc29uPicpPT5cbntcbmFzc2VydFBhY2thZ2VQb2xpY3koYWxsZWdlZFBvbGljeSwgYCR7cGF0aH0ucG9saWN5YCx1cmwpO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvbXBhcnRtZW50PShhbGxlZ2VkQ29tcGFydG1lbnQscGF0aCx1cmwpPT57XG5jb25zdCBjb21wYXJ0bWVudD1PYmplY3QoYWxsZWdlZENvbXBhcnRtZW50KTtcbmFzc2VydChcbmFsbGVnZWRDb21wYXJ0bWVudD09PWNvbXBhcnRtZW50JiYhQXJyYXkuaXNBcnJheShjb21wYXJ0bWVudCksXG4gYCR7cGF0aH0gbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRDb21wYXJ0bWVudH0gaW4gJHtxKHVybCl9YCk7XG5cblxuY29uc3R7XG5sb2NhdGlvbixcbm5hbWUsXG5sYWJlbCxcbnBhcnNlcnMsXG50eXBlcyxcbnNjb3Blcyxcbm1vZHVsZXMsXG5wb2xpY3ksXG4uLi5leHRyYX09XG5jb21wYXJ0bWVudDtcblxuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3EoXG5PYmplY3Qua2V5cyhleHRyYSkpXG4gfSBpbiAke3EodXJsKX1gKTtcblxuXG5hc3NlcnQudHlwZW9mKFxubG9jYXRpb24sXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5sb2NhdGlvbiBpbiAke3EodXJsKX0gbXVzdCBiZSBzdHJpbmcsIGdvdCAke3EobG9jYXRpb24pfWApO1xuXG5hc3NlcnQudHlwZW9mKFxubmFtZSxcbidzdHJpbmcnLFxuIGAke3BhdGh9Lm5hbWUgaW4gJHtxKHVybCl9IG11c3QgYmUgc3RyaW5nLCBnb3QgJHtxKG5hbWUpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxubGFiZWwsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5sYWJlbCBpbiAke3EodXJsKX0gbXVzdCBiZSBzdHJpbmcsIGdvdCAke3EobGFiZWwpfWApO1xuXG5cbmFzc2VydE1vZHVsZXMobW9kdWxlcyxwYXRoLHVybCk7XG5hc3NlcnRQYXJzZXJzKHBhcnNlcnMscGF0aCx1cmwpO1xuYXNzZXJ0U2NvcGVzKHNjb3BlcyxwYXRoLHVybCk7XG5hc3NlcnRUeXBlcyh0eXBlcyxwYXRoLHVybCk7XG5hc3NlcnRQb2xpY3kocG9saWN5LHBhdGgsdXJsKTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0Q29tcGFydG1lbnRzPShhbGxlZ2VkQ29tcGFydG1lbnRzLHVybCk9PntcbmNvbnN0IGNvbXBhcnRtZW50cz1PYmplY3QoYWxsZWdlZENvbXBhcnRtZW50cyk7XG5hc3NlcnQoXG5hbGxlZ2VkQ29tcGFydG1lbnRzPT09Y29tcGFydG1lbnRzfHwhQXJyYXkuaXNBcnJheShjb21wYXJ0bWVudHMpLFxuIGBjb21wYXJ0bWVudHMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke3EoYWxsZWdlZENvbXBhcnRtZW50cyl9IGluICR7cShcbnVybClcbiB9YCk7XG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMoY29tcGFydG1lbnRzKSl7XG5hc3NlcnRDb21wYXJ0bWVudCh2YWx1ZSwgYGNvbXBhcnRtZW50c1ske3Eoa2V5KX1dYCx1cmwpO1xuIH1cbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0RW50cnk9KGFsbGVnZWRFbnRyeSx1cmwpPT57XG5jb25zdCBlbnRyeT1PYmplY3QoYWxsZWdlZEVudHJ5KTtcbmFzc2VydChcbmFsbGVnZWRFbnRyeT09PWVudHJ5JiYhQXJyYXkuaXNBcnJheShlbnRyeSksXG4gYFwiZW50cnlcIiBtdXN0IGJlIGFuIG9iamVjdCBpbiBjb21wYXJ0bWVudCBtYXAsIGdvdCAke2FsbGVnZWRFbnRyeX0gaW4gJHtxKFxudXJsKVxuIH1gKTtcblxuY29uc3R7Y29tcGFydG1lbnQsbW9kdWxlLC4uLmV4dHJhfT1lbnRyeTtcbmFzc2VydEVtcHR5T2JqZWN0KFxuZXh0cmEsXG4gYFwiZW50cnlcIiBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMgaW4gY29tcGFydG1lbnQgbWFwLCBnb3QgJHtxKFxuT2JqZWN0LmtleXMoZXh0cmEpKVxuIH0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5jb21wYXJ0bWVudCxcbidzdHJpbmcnLFxuIGBlbnRyeS5jb21wYXJ0bWVudCBtdXN0IGJlIGEgc3RyaW5nIGluIGNvbXBhcnRtZW50IG1hcCwgZ290ICR7Y29tcGFydG1lbnR9IGluICR7cShcbnVybClcbiB9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5tb2R1bGUsXG4nc3RyaW5nJyxcbiBgZW50cnkubW9kdWxlIG11c3QgYmUgYSBzdHJpbmcgaW4gY29tcGFydG1lbnQgbWFwLCBnb3QgJHttb2R1bGV9IGluICR7cShcbnVybClcbiB9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBhc3NlcnRDb21wYXJ0bWVudE1hcD0oXG5hbGxlZ2VkQ29tcGFydG1lbnRNYXAsXG51cmw9Jzx1bmtub3duLWNvbXBhcnRtZW50LW1hcC5qc29uPicpPT5cbntcbmNvbnN0IGNvbXBhcnRtZW50TWFwPU9iamVjdChhbGxlZ2VkQ29tcGFydG1lbnRNYXApO1xuYXNzZXJ0KFxuYWxsZWdlZENvbXBhcnRtZW50TWFwPT09Y29tcGFydG1lbnRNYXAmJiFBcnJheS5pc0FycmF5KGNvbXBhcnRtZW50TWFwKSxcbiBgQ29tcGFydG1lbnQgbWFwIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHthbGxlZ2VkQ29tcGFydG1lbnRNYXB9IGluICR7cShcbnVybClcbiB9YCk7XG5cbmNvbnN0e1xuLy9cbi8vXG50YWdzOmNvbmRpdGlvbnMsXG5lbnRyeSxcbmNvbXBhcnRtZW50cyxcbi4uLmV4dHJhfT1cbk9iamVjdChjb21wYXJ0bWVudE1hcCk7XG5hc3NlcnRFbXB0eU9iamVjdChcbmV4dHJhLFxuIGBDb21wYXJ0bWVudCBtYXAgbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKFxuT2JqZWN0LmtleXMoZXh0cmEpKVxuIH0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydENvbmRpdGlvbnMoY29uZGl0aW9ucyx1cmwpO1xuYXNzZXJ0RW50cnkoZW50cnksdXJsKTtcbmFzc2VydENvbXBhcnRtZW50cyhjb21wYXJ0bWVudHMsdXJsKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb21wYXJ0bWVudE1hcChhc3NlcnRDb21wYXJ0bWVudE1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdHJpbmdDb21wYXJlIjpbInN0cmluZ0NvbXBhcmUiXSwicGF0aENvbXBhcmUiOlsicGF0aENvbXBhcmUiXSwiYXNzZXJ0Q29tcGFydG1lbnRNYXAiOlsiYXNzZXJ0Q29tcGFydG1lbnRNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFW/+bv4CAAD+AgAAMAAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL2V4dGVuc2lvbi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsicGFyc2VFeHRlbnNpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhcnNlRXh0ZW5zaW9uPShsb2NhdGlvbik9PntcbmNvbnN0IGxhc3RTbGFzaD1sb2NhdGlvbi5sYXN0SW5kZXhPZignLycpO1xuaWYobGFzdFNsYXNoPDApe1xucmV0dXJuJyc7XG4gfVxuY29uc3QgYmFzZT1sb2NhdGlvbi5zbGljZShsYXN0U2xhc2grMSk7XG5jb25zdCBsYXN0RG90PWJhc2UubGFzdEluZGV4T2YoJy4nKTtcbmlmKGxhc3REb3Q8MCl7XG5yZXR1cm4nJztcbiB9XG5yZXR1cm4gYmFzZS5zbGljZShsYXN0RG90KzEpO1xuIH07JGjNj19vbmNlLnBhcnNlRXh0ZW5zaW9uKHBhcnNlRXh0ZW5zaW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InBhcnNlRXh0ZW5zaW9uIjpbInBhcnNlRXh0ZW5zaW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMZOrQJfJQAAXyUAADoAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9pbXBvcnQtYXJjaGl2ZS1saXRlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3ppcCIsIi4vbGluay5qcyIsIi4vanNvbi5qcyIsIi4vcG93ZXJzLmpzIiwiLi9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanMiLCIuL2NvbXBhcnRtZW50LW1hcC5qcyIsIi4vaW1wb3J0LWhvb2suanMiLCIuL3BvbGljeS5qcyJdLCJleHBvcnRzIjpbImltcG9ydEFyY2hpdmUiLCJsb2FkQXJjaGl2ZSIsInBhcnNlQXJjaGl2ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBaaXBSZWFkZXIsbGluayxwYXJzZUxvY2F0ZWRKc29uLHVucGFja1JlYWRQb3dlcnMsam9pbixhc3NlcnRDb21wYXJ0bWVudE1hcCxleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyLGF0dGVudWF0ZU1vZHVsZUhvb2ssZW5mb3JjZU1vZHVsZVBvbGljeTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3ppcFwiLCBbW1wiWmlwUmVhZGVyXCIsIFskaM2PX2EgPT4gKFppcFJlYWRlciA9ICRozY9fYSldXV1dLFtcIi4vbGluay5qc1wiLCBbW1wibGlua1wiLCBbJGjNj19hID0+IChsaW5rID0gJGjNj19hKV1dXV0sW1wiLi9qc29uLmpzXCIsIFtbXCJwYXJzZUxvY2F0ZWRKc29uXCIsIFskaM2PX2EgPT4gKHBhcnNlTG9jYXRlZEpzb24gPSAkaM2PX2EpXV1dXSxbXCIuL3Bvd2Vycy5qc1wiLCBbW1widW5wYWNrUmVhZFBvd2Vyc1wiLCBbJGjNj19hID0+ICh1bnBhY2tSZWFkUG93ZXJzID0gJGjNj19hKV1dXV0sW1wiLi9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanNcIiwgW1tcImpvaW5cIiwgWyRozY9fYSA9PiAoam9pbiA9ICRozY9fYSldXV1dLFtcIi4vY29tcGFydG1lbnQtbWFwLmpzXCIsIFtbXCJhc3NlcnRDb21wYXJ0bWVudE1hcFwiLCBbJGjNj19hID0+IChhc3NlcnRDb21wYXJ0bWVudE1hcCA9ICRozY9fYSldXV1dLFtcIi4vaW1wb3J0LWhvb2suanNcIiwgW1tcImV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXJcIiwgWyRozY9fYSA9PiAoZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlciA9ICRozY9fYSldXV1dLFtcIi4vcG9saWN5LmpzXCIsIFtbXCJhdHRlbnVhdGVNb2R1bGVIb29rXCIsIFskaM2PX2EgPT4gKGF0dGVudWF0ZU1vZHVsZUhvb2sgPSAkaM2PX2EpXV0sW1wiZW5mb3JjZU1vZHVsZVBvbGljeVwiLCBbJGjNj19hID0+IChlbmZvcmNlTW9kdWxlUG9saWN5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0IERlZmF1bHRDb21wYXJ0bWVudD1Db21wYXJ0bWVudDtcblxuY29uc3R7RmFpbCxxdW90ZTpxfT1hc3NlcnQ7XG5cbmNvbnN0IHRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigpO1xuXG5jb25zdHthc3NpZ24sY3JlYXRlLGZyZWV6ZX09T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgcG9zdHBvbmVFcnJvclRvRXhlY3V0ZT0oZXJyb3JNZXNzYWdlKT0+e1xuLy9cbi8vXG4vL1xuLy9cblxuY29uc3QgcmVjb3JkPWZyZWV6ZSh7XG5pbXBvcnRzOltdLFxuZXhwb3J0czpbXSxcbmV4ZWN1dGU6KCk9PntcbnRocm93IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gfX0pO1xuXG5cbnJldHVybiByZWNvcmQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUFyY2hpdmVJbXBvcnRIb29rTWFrZXI9KFxuZ2V0LFxuY29tcGFydG1lbnRzLFxuYXJjaGl2ZUxvY2F0aW9uLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5jb21wdXRlU2hhNTEyPXVuZGVmaW5lZCxcbmNvbXB1dGVTb3VyY2VMb2NhdGlvbj11bmRlZmluZWQsXG5leGl0TW9kdWxlSW1wb3J0SG9vaz11bmRlZmluZWQsXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb249dW5kZWZpbmVkKT0+XG57XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYWtlSW1wb3J0SG9vaz0oe1xucGFja2FnZUxvY2F0aW9uLFxucGFja2FnZU5hbWUsXG5hdHRlbnVhdG9yc1xuLy9cbi8vXG59KT0+e1xuLy9cbmNvbnN0IGNvbXBhcnRtZW50RGVzY3JpcHRvcj1jb21wYXJ0bWVudHNbcGFja2FnZUxvY2F0aW9uXTtcbmNvbnN0e21vZHVsZXN9PWNvbXBhcnRtZW50RGVzY3JpcHRvcjtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydEhvb2s9YXN5bmMobW9kdWxlU3BlY2lmaWVyKT0+e1xuYXdhaXQgbnVsbDtcbi8vXG5jb25zdCBtb2R1bGU9bW9kdWxlc1ttb2R1bGVTcGVjaWZpZXJdO1xuaWYobW9kdWxlPT09dW5kZWZpbmVkKXtcbmlmKGV4aXRNb2R1bGVJbXBvcnRIb29rKXtcbi8vXG4vL1xuLy9cbmVuZm9yY2VNb2R1bGVQb2xpY3kobW9kdWxlU3BlY2lmaWVyLGNvbXBhcnRtZW50RGVzY3JpcHRvcix7XG5leGl0OnRydWUsXG5lcnJvckhpbnQ6IGBCbG9ja2VkIGluIGxvYWRpbmcuICR7cShcbm1vZHVsZVNwZWNpZmllcilcbiB9IHdhcyBub3QgaW4gdGhlIGFyY2hpdmUgYW5kIGFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gbG9hZCBpdCBhcyBhIGJ1aWx0aW5gfSk7XG5cbmNvbnN0IHJlY29yZD1hd2FpdCBleGl0TW9kdWxlSW1wb3J0SG9vayhtb2R1bGVTcGVjaWZpZXIpO1xuaWYocmVjb3JkKXtcbi8vXG4vL1xuLy9cbnJldHVybntcbnJlY29yZDphd2FpdCBhdHRlbnVhdGVNb2R1bGVIb29rKFxubW9kdWxlU3BlY2lmaWVyLFxucmVjb3JkLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLnBvbGljeSxcbmF0dGVudWF0b3JzKSxcblxuc3BlY2lmaWVyOm1vZHVsZVNwZWNpZmllcn07XG5cbiB9ZWxzZXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBwb3N0cG9uZUVycm9yVG9FeGVjdXRlKFxuIGBDYW5ub3QgZmluZCBleHRlcm5hbCBtb2R1bGUgJHtxKG1vZHVsZVNwZWNpZmllcil9IGluIHBhY2thZ2UgJHtxKFxucGFja2FnZUxvY2F0aW9uKVxuIH0gaW4gYXJjaGl2ZSAke3EoYXJjaGl2ZUxvY2F0aW9uKX1gKTtcblxuIH1cbiB9XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGZpbmQgbW9kdWxlICR7cShtb2R1bGVTcGVjaWZpZXIpfSBpbiBwYWNrYWdlICR7cShcbnBhY2thZ2VMb2NhdGlvbilcbiB9IGluIGFyY2hpdmUgJHtxKGFyY2hpdmVMb2NhdGlvbil9YCk7XG5cbiB9XG5pZihtb2R1bGUuZGVmZXJyZWRFcnJvciE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gcG9zdHBvbmVFcnJvclRvRXhlY3V0ZShtb2R1bGUuZGVmZXJyZWRFcnJvcik7XG4gfVxuaWYobW9kdWxlLnBhcnNlcj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IHBhcnNlIG1vZHVsZSAke3EobW9kdWxlU3BlY2lmaWVyKX0gaW4gcGFja2FnZSAke3EoXG5wYWNrYWdlTG9jYXRpb24pXG4gfSBpbiBhcmNoaXZlICR7cShhcmNoaXZlTG9jYXRpb24pfWApO1xuXG4gfVxuY29uc3QgcGFyc2VyPXBhcnNlckZvckxhbmd1YWdlW21vZHVsZS5wYXJzZXJdO1xuaWYocGFyc2VyPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgcGFyc2UgJHtxKG1vZHVsZS5wYXJzZXIpfSBtb2R1bGUgJHtxKFxubW9kdWxlU3BlY2lmaWVyKVxuIH0gaW4gcGFja2FnZSAke3EocGFja2FnZUxvY2F0aW9uKX0gaW4gYXJjaGl2ZSAke3EoYXJjaGl2ZUxvY2F0aW9uKX1gKTtcblxuIH1cbmNvbnN0e3BhcnNlfT1wYXJzZXI7XG5jb25zdCBtb2R1bGVMb2NhdGlvbj0gYCR7cGFja2FnZUxvY2F0aW9ufS8ke21vZHVsZS5sb2NhdGlvbn1gO1xuY29uc3QgbW9kdWxlQnl0ZXM9Z2V0KG1vZHVsZUxvY2F0aW9uKTtcblxuaWYoY29tcHV0ZVNoYTUxMiE9PXVuZGVmaW5lZCYmbW9kdWxlLnNoYTUxMiE9PXVuZGVmaW5lZCl7XG5jb25zdCBzaGE1MTI9Y29tcHV0ZVNoYTUxMihtb2R1bGVCeXRlcyk7XG5pZihzaGE1MTIhPT1tb2R1bGUuc2hhNTEyKXtcbnRocm93IEVycm9yKFxuIGBNb2R1bGUgJHtxKG1vZHVsZS5sb2NhdGlvbil9IG9mIHBhY2thZ2UgJHtxKFxucGFja2FnZUxvY2F0aW9uKVxuIH0gaW4gYXJjaGl2ZSAke3EoXG5hcmNoaXZlTG9jYXRpb24pXG4gfSBmYWlsZWQgYSBTSEEtNTEyIGludGVncml0eSBjaGVja2ApO1xuXG4gfVxuIH1cblxubGV0IHNvdXJjZUxvY2F0aW9uPSBgZmlsZTovLy8ke21vZHVsZUxvY2F0aW9ufWA7XG5pZihwYWNrYWdlTmFtZSE9PXVuZGVmaW5lZCl7XG5jb25zdCBiYXNlPXBhY2thZ2VOYW1lLnNwbGl0KCcvJykuc2xpY2UoLTEpLmpvaW4oJy8nKTtcbnNvdXJjZUxvY2F0aW9uPSBgLi4uLyR7am9pbihiYXNlLG1vZHVsZVNwZWNpZmllcil9YDtcbiB9XG5pZihjb21wdXRlU291cmNlTG9jYXRpb24hPT11bmRlZmluZWQpe1xuc291cmNlTG9jYXRpb249XG5jb21wdXRlU291cmNlTG9jYXRpb24ocGFja2FnZUxvY2F0aW9uLG1vZHVsZVNwZWNpZmllcil8fFxuc291cmNlTG9jYXRpb247XG4gfVxuXG5sZXQgc291cmNlTWFwVXJsO1xuaWYoXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb24hPT11bmRlZmluZWQmJlxubW9kdWxlLnNoYTUxMiE9PXVuZGVmaW5lZClcbntcbnNvdXJjZU1hcFVybD1jb21wdXRlU291cmNlTWFwTG9jYXRpb24oe1xuY29tcGFydG1lbnQ6cGFja2FnZUxvY2F0aW9uLFxubW9kdWxlOm1vZHVsZVNwZWNpZmllcixcbmxvY2F0aW9uOnNvdXJjZUxvY2F0aW9uLFxuc2hhNTEyOm1vZHVsZS5zaGE1MTJ9KTtcblxuIH1cblxuLy9cbmNvbnN0e3JlY29yZH09YXdhaXQgcGFyc2UoXG5tb2R1bGVCeXRlcyxcbm1vZHVsZVNwZWNpZmllcixcbnNvdXJjZUxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxue1xuc291cmNlTWFwVXJsLFxuY29tcGFydG1lbnREZXNjcmlwdG9yfSk7XG5cblxucmV0dXJue3JlY29yZCxzcGVjaWZpZXI6bW9kdWxlU3BlY2lmaWVyfTtcbiB9O1xucmV0dXJuIGltcG9ydEhvb2s7XG4gfTtcbnJldHVybiBtYWtlSW1wb3J0SG9vaztcbiB9O1xuXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXJzZUFyY2hpdmU9YXN5bmMoXG5hcmNoaXZlQnl0ZXMsXG5hcmNoaXZlTG9jYXRpb249Jzx1bmtub3duPicsXG5vcHRpb25zPXt9KT0+XG57XG5hd2FpdCBudWxsO1xuY29uc3R7XG5jb21wdXRlU2hhNTEyPXVuZGVmaW5lZCxcbmV4cGVjdGVkU2hhNTEyPXVuZGVmaW5lZCxcbmNvbXB1dGVTb3VyY2VMb2NhdGlvbj11bmRlZmluZWQsXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb249dW5kZWZpbmVkLFxuQ29tcGFydG1lbnQ9RGVmYXVsdENvbXBhcnRtZW50LFxubW9kdWxlcz11bmRlZmluZWQsXG5pbXBvcnRIb29rOmV4aXRNb2R1bGVJbXBvcnRIb29rPXVuZGVmaW5lZCxcbnBhcnNlckZvckxhbmd1YWdlOnBhcnNlckZvckxhbmd1YWdlT3B0aW9uPXt9LFxubGFuZ3VhZ2VGb3JFeHRlbnNpb246bGFuZ3VhZ2VGb3JFeHRlbnNpb25PcHRpb249e319PVxub3B0aW9ucztcblxuY29uc3QgcGFyc2VyRm9yTGFuZ3VhZ2U9ZnJlZXplKFxuYXNzaWduKGNyZWF0ZShudWxsKSxwYXJzZXJGb3JMYW5ndWFnZU9wdGlvbikpO1xuXG5jb25zdCBsYW5ndWFnZUZvckV4dGVuc2lvbj1mcmVlemUoXG5hc3NpZ24oY3JlYXRlKG51bGwpLGxhbmd1YWdlRm9yRXh0ZW5zaW9uT3B0aW9uKSk7XG5cblxuY29uc3QgY29tcGFydG1lbnRFeGl0TW9kdWxlSW1wb3J0SG9vaz1leGl0TW9kdWxlSW1wb3J0SG9va01ha2VyKHtcbm1vZHVsZXMsXG5leGl0TW9kdWxlSW1wb3J0SG9va30pO1xuXG5cbmNvbnN0IGFyY2hpdmU9bmV3IFppcFJlYWRlcihhcmNoaXZlQnl0ZXMse25hbWU6YXJjaGl2ZUxvY2F0aW9ufSk7XG5cbi8vXG5jb25zdCB1bnNlZW49bmV3IFNldChhcmNoaXZlLmZpbGVzLmtleXMoKSk7XG51bnNlZW4uc2l6ZT49Mnx8XG5GYWlsIGBBcmNoaXZlIGZhaWxlZCBzYW5pdHkgY2hlY2s6IHNob3VsZCBjb250YWluIGF0IGxlYXN0IGEgY29tcGFydG1lbnQgbWFwIGZpbGUgYW5kIG9uZSBtb2R1bGUgZmlsZSBpbiAke3EoXG5hcmNoaXZlTG9jYXRpb24pXG4gfWA7XG5cbi8qXG5cbiAgICovXG5jb25zdCBnZXQ9KHBhdGgpPT57XG51bnNlZW4uZGVsZXRlKHBhdGgpO1xucmV0dXJuIGFyY2hpdmUucmVhZChwYXRoKTtcbiB9O1xuXG5jb25zdCBjb21wYXJ0bWVudE1hcEJ5dGVzPWdldCgnY29tcGFydG1lbnQtbWFwLmpzb24nKTtcblxubGV0IHNoYTUxMjtcbmlmKGNvbXB1dGVTaGE1MTIhPT11bmRlZmluZWQpe1xuc2hhNTEyPWNvbXB1dGVTaGE1MTIoY29tcGFydG1lbnRNYXBCeXRlcyk7XG4gfVxuaWYoZXhwZWN0ZWRTaGE1MTIhPT11bmRlZmluZWQpe1xuaWYoc2hhNTEyPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgdmVyaWZ5IGV4cGVjdGVkU2hhNTEyIHdpdGhvdXQgYWxzbyBwcm92aWRpbmcgY29tcHV0ZVNoYTUxMiwgZm9yIGFyY2hpdmUgJHthcmNoaXZlTG9jYXRpb259YCk7XG5cbiB9XG5pZihzaGE1MTIhPT1leHBlY3RlZFNoYTUxMil7XG50aHJvdyBFcnJvcihcbiBgQXJjaGl2ZSBjb21wYXJ0bWVudCBtYXAgZmFpbGVkIGEgU0hBLTUxMiBpbnRlZ3JpdHkgY2hlY2ssIGV4cGVjdGVkICR7ZXhwZWN0ZWRTaGE1MTJ9LCBnb3QgJHtzaGE1MTJ9LCBmb3IgYXJjaGl2ZSAke2FyY2hpdmVMb2NhdGlvbn1gKTtcblxuIH1cbiB9XG5jb25zdCBjb21wYXJ0bWVudE1hcFRleHQ9dGV4dERlY29kZXIuZGVjb2RlKGNvbXBhcnRtZW50TWFwQnl0ZXMpO1xuY29uc3QgY29tcGFydG1lbnRNYXA9cGFyc2VMb2NhdGVkSnNvbihcbmNvbXBhcnRtZW50TWFwVGV4dCxcbidjb21wYXJ0bWVudC1tYXAuanNvbicpO1xuXG5hc3NlcnRDb21wYXJ0bWVudE1hcChjb21wYXJ0bWVudE1hcCxhcmNoaXZlTG9jYXRpb24pO1xuXG5jb25zdHtcbmNvbXBhcnRtZW50cyxcbmVudHJ5Onttb2R1bGU6bW9kdWxlU3BlY2lmaWVyfX09XG5jb21wYXJ0bWVudE1hcDtcblxuLy9cbi8vXG4vL1xuaWYoY29tcHV0ZVNoYTUxMiE9PXVuZGVmaW5lZCl7XG5jb25zdCBtYWtlSW1wb3J0SG9vaz1tYWtlQXJjaGl2ZUltcG9ydEhvb2tNYWtlcihcbmdldCxcbmNvbXBhcnRtZW50cyxcbmFyY2hpdmVMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlLFxuY29tcHV0ZVNoYTUxMixcbmNvbXB1dGVTb3VyY2VMb2NhdGlvbixcbmNvbXBhcnRtZW50RXhpdE1vZHVsZUltcG9ydEhvb2ssXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb24pO1xuXG4vL1xuLy9cbi8vXG4vL1xuY29uc3R7Y29tcGFydG1lbnQscGVuZGluZ0pvYnNQcm9taXNlfT1saW5rKGNvbXBhcnRtZW50TWFwLHtcbm1ha2VJbXBvcnRIb29rLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5sYW5ndWFnZUZvckV4dGVuc2lvbixcbm1vZHVsZXM6T2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmtleXMobW9kdWxlc3x8e30pLm1hcCgoc3BlY2lmaWVyKT0+e1xucmV0dXJuW3NwZWNpZmllcix7bmFtZXNwYWNlOnt9fV07XG4gfSkpLFxuXG5Db21wYXJ0bWVudH0pO1xuXG5cbmF3YWl0IHBlbmRpbmdKb2JzUHJvbWlzZTtcblxuYXdhaXQgY29tcGFydG1lbnQubG9hZChtb2R1bGVTcGVjaWZpZXIpO1xudW5zZWVuLnNpemU9PT0wfHxcbkZhaWwgYEFyY2hpdmUgY29udGFpbnMgZXh0cmFuZW91cyBmaWxlczogJHtxKFsuLi51bnNlZW5dKX0gaW4gJHtxKFxuYXJjaGl2ZUxvY2F0aW9uKVxuIH1gO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleGVjdXRlPWFzeW5jKG9wdGlvbnMpPT57XG5jb25zdHtcbmdsb2JhbHMsXG5tb2R1bGVzLFxudHJhbnNmb3Jtcyxcbl9fc2hpbVRyYW5zZm9ybXNfXyxcbkNvbXBhcnRtZW50LFxuaW1wb3J0SG9vazpleGl0TW9kdWxlSW1wb3J0SG9va309XG5vcHRpb25zfHx7fTtcblxuY29uc3QgY29tcGFydG1lbnRFeGl0TW9kdWxlSW1wb3J0SG9vaz1leGl0TW9kdWxlSW1wb3J0SG9va01ha2VyKHtcbm1vZHVsZXMsXG5leGl0TW9kdWxlSW1wb3J0SG9va30pO1xuXG5jb25zdCBtYWtlSW1wb3J0SG9vaz1tYWtlQXJjaGl2ZUltcG9ydEhvb2tNYWtlcihcbmdldCxcbmNvbXBhcnRtZW50cyxcbmFyY2hpdmVMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlLFxuY29tcHV0ZVNoYTUxMixcbmNvbXB1dGVTb3VyY2VMb2NhdGlvbixcbmNvbXBhcnRtZW50RXhpdE1vZHVsZUltcG9ydEhvb2ssXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb24pO1xuXG5jb25zdHtjb21wYXJ0bWVudCxwZW5kaW5nSm9ic1Byb21pc2V9PWxpbmsoY29tcGFydG1lbnRNYXAse1xubWFrZUltcG9ydEhvb2ssXG5wYXJzZXJGb3JMYW5ndWFnZSxcbmxhbmd1YWdlRm9yRXh0ZW5zaW9uLFxuZ2xvYmFscyxcbm1vZHVsZXMsXG50cmFuc2Zvcm1zLFxuX19zaGltVHJhbnNmb3Jtc19fLFxuQ29tcGFydG1lbnR9KTtcblxuXG5hd2FpdCBwZW5kaW5nSm9ic1Byb21pc2U7XG5cbi8vXG5yZXR1cm4gY29tcGFydG1lbnRbJ2ltcG9ydCddKG1vZHVsZVNwZWNpZmllcik7XG4gfTtcblxucmV0dXJue2ltcG9ydDpleGVjdXRlLHNoYTUxMn07XG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLnBhcnNlQXJjaGl2ZShwYXJzZUFyY2hpdmUpO1xuY29uc3QgICAgICAgIGxvYWRBcmNoaXZlPWFzeW5jKFxucmVhZFBvd2VycyxcbmFyY2hpdmVMb2NhdGlvbixcbm9wdGlvbnM9e30pPT5cbntcbmNvbnN0e3JlYWQsY29tcHV0ZVNoYTUxMn09dW5wYWNrUmVhZFBvd2VycyhyZWFkUG93ZXJzKTtcbmNvbnN0e1xuZXhwZWN0ZWRTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5tb2R1bGVzLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5sYW5ndWFnZUZvckV4dGVuc2lvbn09XG5vcHRpb25zO1xuY29uc3QgYXJjaGl2ZUJ5dGVzPWF3YWl0IHJlYWQoYXJjaGl2ZUxvY2F0aW9uKTtcbnJldHVybiBwYXJzZUFyY2hpdmUoYXJjaGl2ZUJ5dGVzLGFyY2hpdmVMb2NhdGlvbix7XG5jb21wdXRlU2hhNTEyLFxuZXhwZWN0ZWRTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5tb2R1bGVzLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5sYW5ndWFnZUZvckV4dGVuc2lvbn0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLmxvYWRBcmNoaXZlKGxvYWRBcmNoaXZlKTtcbmNvbnN0ICAgICAgICBpbXBvcnRBcmNoaXZlPWFzeW5jKHJlYWRQb3dlcnMsYXJjaGl2ZUxvY2F0aW9uLG9wdGlvbnMpPT57XG5jb25zdCBhcmNoaXZlPWF3YWl0IGxvYWRBcmNoaXZlKHJlYWRQb3dlcnMsYXJjaGl2ZUxvY2F0aW9uLG9wdGlvbnMpO1xucmV0dXJuIGFyY2hpdmUuaW1wb3J0KG9wdGlvbnMpO1xuIH07JGjNj19vbmNlLmltcG9ydEFyY2hpdmUoaW1wb3J0QXJjaGl2ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwYXJzZUFyY2hpdmUiOlsicGFyc2VBcmNoaXZlIl0sImxvYWRBcmNoaXZlIjpbImxvYWRBcmNoaXZlIl0sImltcG9ydEFyY2hpdmUiOlsiaW1wb3J0QXJjaGl2ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD5j4R9AwUAAAMFAAA9AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvaW1wb3J0LWFyY2hpdmUtcGFyc2Vycy5qc3siaW1wb3J0cyI6WyIuL3BhcnNlLXByZS1janMuanMiLCIuL3BhcnNlLWpzb24uanMiLCIuL3BhcnNlLXRleHQuanMiLCIuL3BhcnNlLWJ5dGVzLmpzIiwiLi9wYXJzZS1wcmUtbWpzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlclByZUNqcyxwYXJzZXJKc29uLHBhcnNlclRleHQscGFyc2VyQnl0ZXMscGFyc2VyUHJlTWpzOyRozY9faW1wb3J0cyhbW1wiLi9wYXJzZS1wcmUtY2pzLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHBhcnNlclByZUNqcyA9ICRozY9fYSldXV1dLFtcIi4vcGFyc2UtanNvbi5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChwYXJzZXJKc29uID0gJGjNj19hKV1dXV0sW1wiLi9wYXJzZS10ZXh0LmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHBhcnNlclRleHQgPSAkaM2PX2EpXV1dXSxbXCIuL3BhcnNlLWJ5dGVzLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHBhcnNlckJ5dGVzID0gJGjNj19hKV1dXV0sW1wiLi9wYXJzZS1wcmUtbWpzLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHBhcnNlclByZU1qcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlPU9iamVjdC5mcmVlemUoXG4vKiAgICAgICAgICAgICAgICAqL3tcbidwcmUtY2pzLWpzb24nOnBhcnNlclByZUNqcyxcbidwcmUtbWpzLWpzb24nOnBhcnNlclByZU1qcyxcbmpzb246cGFyc2VySnNvbixcbnRleHQ6cGFyc2VyVGV4dCxcbmJ5dGVzOnBhcnNlckJ5dGVzfSk7JGjNj19vbmNlLmRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZShkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlIjpbImRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC4szFWIgoAACIKAAA1AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvaW1wb3J0LWFyY2hpdmUuanN7ImltcG9ydHMiOlsiLi9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzIiwiLi9pbXBvcnQtYXJjaGl2ZS1saXRlLmpzIl0sImV4cG9ydHMiOlsiaW1wb3J0QXJjaGl2ZSIsImxvYWRBcmNoaXZlIiwicGFyc2VBcmNoaXZlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZSxwYXJzZUFyY2hpdmVMaXRlLGxvYWRBcmNoaXZlTGl0ZSxpbXBvcnRBcmNoaXZlTGl0ZTskaM2PX2ltcG9ydHMoW1tcIi4vaW1wb3J0LWFyY2hpdmUtcGFyc2Vycy5qc1wiLCBbW1wiZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlXCIsIFskaM2PX2EgPT4gKGRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZSA9ICRozY9fYSldXV1dLFtcIi4vaW1wb3J0LWFyY2hpdmUtbGl0ZS5qc1wiLCBbW1wicGFyc2VBcmNoaXZlXCIsIFskaM2PX2EgPT4gKHBhcnNlQXJjaGl2ZUxpdGUgPSAkaM2PX2EpXV0sW1wibG9hZEFyY2hpdmVcIiwgWyRozY9fYSA9PiAobG9hZEFyY2hpdmVMaXRlID0gJGjNj19hKV1dLFtcImltcG9ydEFyY2hpdmVcIiwgWyRozY9fYSA9PiAoaW1wb3J0QXJjaGl2ZUxpdGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2Fzc2lnbixjcmVhdGUsZnJlZXplfT1PYmplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NpZ25QYXJzZXJGb3JMYW5ndWFnZT0ob3B0aW9ucz17fSk9PntcbmNvbnN0e3BhcnNlckZvckxhbmd1YWdlOnBhcnNlckZvckxhbmd1YWdlT3B0aW9uLC4uLnJlc3R9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGFyc2VyRm9yTGFuZ3VhZ2U9ZnJlZXplKFxuYXNzaWduKGNyZWF0ZShudWxsKSxkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UscGFyc2VyRm9yTGFuZ3VhZ2VPcHRpb24pKTtcblxucmV0dXJuey4uLnJlc3QscGFyc2VyRm9yTGFuZ3VhZ2V9O1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhcnNlQXJjaGl2ZT1hc3luYyhcbmFyY2hpdmVCeXRlcyxcbmFyY2hpdmVMb2NhdGlvbj0nPHVua25vd24+Jyxcbm9wdGlvbnM9e30pPT5cblxucGFyc2VBcmNoaXZlTGl0ZShcbmFyY2hpdmVCeXRlcyxcbmFyY2hpdmVMb2NhdGlvbixcbmFzc2lnblBhcnNlckZvckxhbmd1YWdlKG9wdGlvbnMpKTtcblxuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UucGFyc2VBcmNoaXZlKHBhcnNlQXJjaGl2ZSk7XG5jb25zdCAgICAgICAgbG9hZEFyY2hpdmU9YXN5bmMocmVhZFBvd2VycyxhcmNoaXZlTG9jYXRpb24sb3B0aW9ucyk9PlxubG9hZEFyY2hpdmVMaXRlKFxucmVhZFBvd2VycyxcbmFyY2hpdmVMb2NhdGlvbixcbmFzc2lnblBhcnNlckZvckxhbmd1YWdlKG9wdGlvbnMpKTtcblxuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UubG9hZEFyY2hpdmUobG9hZEFyY2hpdmUpO1xuY29uc3QgICAgICAgIGltcG9ydEFyY2hpdmU9YXN5bmMocmVhZFBvd2VycyxhcmNoaXZlTG9jYXRpb24sb3B0aW9ucyk9PlxuaW1wb3J0QXJjaGl2ZUxpdGUoXG5yZWFkUG93ZXJzLFxuYXJjaGl2ZUxvY2F0aW9uLFxuYXNzaWduUGFyc2VyRm9yTGFuZ3VhZ2Uob3B0aW9ucykpOyRozY9fb25jZS5pbXBvcnRBcmNoaXZlKGltcG9ydEFyY2hpdmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicGFyc2VBcmNoaXZlIjpbInBhcnNlQXJjaGl2ZSJdLCJsb2FkQXJjaGl2ZSI6WyJsb2FkQXJjaGl2ZSJdLCJpbXBvcnRBcmNoaXZlIjpbImltcG9ydEFyY2hpdmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAzF+IJkg4AABIOAAAMgAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL2ltcG9ydC1ob29rLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3RyYW1wb2xpbmUiLCIuL25vZGUtbW9kdWxlLXNwZWNpZmllci5qcyIsIi4vcG9saWN5LmpzIiwiLi9wb3dlcnMuanMiXSwiZXhwb3J0cyI6WyJleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyIiwibWFrZUltcG9ydEhvb2tNYWtlciIsIm1ha2VJbXBvcnROb3dIb29rTWFrZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXN5bmNUcmFtcG9saW5lLHN5bmNUcmFtcG9saW5lLHJlc29sdmUsYXR0ZW51YXRlTW9kdWxlSG9vayxBVFRFTlVBVE9SU19DT01QQVJUTUVOVCxlbmZvcmNlTW9kdWxlUG9saWN5LHVucGFja1JlYWRQb3dlcnM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby90cmFtcG9saW5lXCIsIFtbXCJhc3luY1RyYW1wb2xpbmVcIiwgWyRozY9fYSA9PiAoYXN5bmNUcmFtcG9saW5lID0gJGjNj19hKV1dLFtcInN5bmNUcmFtcG9saW5lXCIsIFskaM2PX2EgPT4gKHN5bmNUcmFtcG9saW5lID0gJGjNj19hKV1dXV0sW1wiLi9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanNcIiwgW1tcInJlc29sdmVcIiwgWyRozY9fYSA9PiAocmVzb2x2ZSA9ICRozY9fYSldXV1dLFtcIi4vcG9saWN5LmpzXCIsIFtbXCJhdHRlbnVhdGVNb2R1bGVIb29rXCIsIFskaM2PX2EgPT4gKGF0dGVudWF0ZU1vZHVsZUhvb2sgPSAkaM2PX2EpXV0sW1wiQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRcIiwgWyRozY9fYSA9PiAoQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQgPSAkaM2PX2EpXV0sW1wiZW5mb3JjZU1vZHVsZVBvbGljeVwiLCBbJGjNj19hID0+IChlbmZvcmNlTW9kdWxlUG9saWN5ID0gJGjNj19hKV1dXV0sW1wiLi9wb3dlcnMuanNcIiwgW1tcInVucGFja1JlYWRQb3dlcnNcIiwgWyRozY9fYSA9PiAodW5wYWNrUmVhZFBvd2VycyA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VJbXBvcnROb3dIb29rTWFrZXIsICduYW1lJywge3ZhbHVlOiBcIm1ha2VJbXBvcnROb3dIb29rTWFrZXJcIn0pOyRozY9fb25jZS5tYWtlSW1wb3J0Tm93SG9va01ha2VyKG1ha2VJbXBvcnROb3dIb29rTWFrZXIpOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGZyZWV6ZT1PYmplY3QuZnJlZXplO1xuXG5jb25zdHtlbnRyaWVzLGtleXMsYXNzaWduLGNyZWF0ZX09T2JqZWN0O1xuXG5jb25zdHtoYXNPd25Qcm9wZXJ0eX09T2JqZWN0LnByb3RvdHlwZTtcbi8qXG5cblxuICovXG5jb25zdCBoYXM9KGhheXN0YWNrLG5lZWRsZSk9PmFwcGx5KGhhc093blByb3BlcnR5LGhheXN0YWNrLFtuZWVkbGVdKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgcmVzb2x2ZUxvY2F0aW9uPShyZWwsYWJzKT0+bmV3IFVSTChyZWwsYWJzKS50b1N0cmluZygpO1xuXG4vL1xuZnVuY3Rpb24gZ2V0SW1wb3J0c0Zyb21SZWNvcmQocmVjb3JkKXtcbnJldHVybihoYXMocmVjb3JkLCdyZWNvcmQnKT9yZWNvcmQucmVjb3JkLmltcG9ydHM6cmVjb3JkLmltcG9ydHMpfHxbXTtcbiB9XG5cbi8vXG4vL1xuY29uc3Qgbm9kZWpzQ29udmVudGlvblNlYXJjaFN1ZmZpeGVzPVtcbi8vXG4nLmpzJyxcbicuanNvbicsXG4nLm5vZGUnLFxuLy9cbicvaW5kZXguanMnLFxuJy9pbmRleC5qc29uJyxcbicvaW5kZXgubm9kZSddO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGZpbmRSZWRpcmVjdD0oe1xuY29tcGFydG1lbnREZXNjcmlwdG9yLFxuY29tcGFydG1lbnREZXNjcmlwdG9ycyxcbmNvbXBhcnRtZW50cyxcbmFic29sdXRlTW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9ufSk9Plxue1xuY29uc3QgbW9kdWxlU3BlY2lmaWVyTG9jYXRpb249bmV3IFVSTChcbmFic29sdXRlTW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9uKS5cbmhyZWY7XG5cbi8vXG5sZXQgc29tZUxvY2F0aW9uPW5ldyBVUkwoJy4vJyxtb2R1bGVTcGVjaWZpZXJMb2NhdGlvbikuaHJlZjtcblxuLy9cbi8vXG5cbi8vXG5mb3IoOzspe1xuaWYoXG5zb21lTG9jYXRpb24hPT1BVFRFTlVBVE9SU19DT01QQVJUTUVOVCYmXG5zb21lTG9jYXRpb24gaW4gY29tcGFydG1lbnRzKVxue1xuY29uc3QgbG9jYXRpb249c29tZUxvY2F0aW9uO1xuY29uc3Qgc29tZUNvbXBhcnRtZW50RGVzY3JpcHRvcj1jb21wYXJ0bWVudERlc2NyaXB0b3JzW2xvY2F0aW9uXTtcbmlmKGNvbXBhcnRtZW50RGVzY3JpcHRvcj09PXNvbWVDb21wYXJ0bWVudERlc2NyaXB0b3Ipe1xuLy9cbi8vXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLy9cbi8vXG5pZihjb21wYXJ0bWVudERlc2NyaXB0b3IuY29tcGFydG1lbnRzLmhhcyhsb2NhdGlvbikpe1xucmV0dXJue1xuc3BlY2lmaWVyOmFic29sdXRlTW9kdWxlU3BlY2lmaWVyLFxuY29tcGFydG1lbnQ6Y29tcGFydG1lbnRzW2xvY2F0aW9uXX07XG5cbiB9XG5cbi8vXG4vL1xuLy9cbmlmKFxuc29tZUNvbXBhcnRtZW50RGVzY3JpcHRvci5jb21wYXJ0bWVudHMuaGFzKFxuY29tcGFydG1lbnREZXNjcmlwdG9yLmxvY2F0aW9uKSlcblxue1xuZW5mb3JjZU1vZHVsZVBvbGljeShcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5uYW1lLFxuc29tZUNvbXBhcnRtZW50RGVzY3JpcHRvcixcbntcbmVycm9ySGludDogYEJsb2NrZWQgaW4gaW1wb3J0IGhvb2suICR7cShhYnNvbHV0ZU1vZHVsZVNwZWNpZmllcil9IGlzIHBhcnQgb2YgdGhlIGNvbXBhcnRtZW50IG1hcCBhbmQgcmVzb2x2ZXMgdG8gJHtsb2NhdGlvbn1gfSk7XG5cblxucmV0dXJue1xuc3BlY2lmaWVyOmFic29sdXRlTW9kdWxlU3BlY2lmaWVyLFxuY29tcGFydG1lbnQ6Y29tcGFydG1lbnRzW2xvY2F0aW9uXX07XG5cbiB9XG5cbnRocm93IG5ldyBFcnJvciggYENvdWxkIG5vdCBpbXBvcnQgbW9kdWxlOiAke3EoYWJzb2x1dGVNb2R1bGVTcGVjaWZpZXIpfWApO1xuIH1lbHNle1xuLy9cbmNvbnN0IHBhcmVudExvY2F0aW9uPW5ldyBVUkwoJy4uLycsc29tZUxvY2F0aW9uKS5ocmVmO1xuXG4vL1xuaWYocGFyZW50TG9jYXRpb249PT1zb21lTG9jYXRpb24pe1xudGhyb3cgbmV3IEVycm9yKFxuIGBDb3VsZCBub3QgaW1wb3J0IHVua25vd24gbW9kdWxlOiAke3EoYWJzb2x1dGVNb2R1bGVTcGVjaWZpZXIpfWApO1xuXG4gfVxuXG5zb21lTG9jYXRpb249cGFyZW50TG9jYXRpb247XG4gfVxuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyPSh7XG5tb2R1bGVzPXVuZGVmaW5lZCxcbmV4aXRNb2R1bGVJbXBvcnRIb29rPXVuZGVmaW5lZH0pPT5cbntcbmlmKCFtb2R1bGVzJiYhZXhpdE1vZHVsZUltcG9ydEhvb2spe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5yZXR1cm4gYXN5bmMoc3BlY2lmaWVyKT0+e1xuaWYobW9kdWxlcyYmaGFzKG1vZHVsZXMsc3BlY2lmaWVyKSl7XG5jb25zdCBucz1tb2R1bGVzW3NwZWNpZmllcl07XG5yZXR1cm4gZnJlZXplKHtcbmltcG9ydHM6W10sXG5leHBvcnRzOm5zP2tleXMobnMpOltdLFxuZXhlY3V0ZToobW9kdWxlRXhwb3J0cyk9Pntcbm1vZHVsZUV4cG9ydHMuZGVmYXVsdD1ucztcbmFzc2lnbihtb2R1bGVFeHBvcnRzLG5zKTtcbiB9fSk7XG5cbiB9XG5pZihleGl0TW9kdWxlSW1wb3J0SG9vayl7XG5yZXR1cm4gZXhpdE1vZHVsZUltcG9ydEhvb2soc3BlY2lmaWVyKTtcbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcihleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyKTtcbmNvbnN0IG5vbWluYXRlQ2FuZGlkYXRlcz0obW9kdWxlU3BlY2lmaWVyLHNlYXJjaFN1ZmZpeGVzKT0+e1xuLy9cbi8vXG5jb25zdCBjYW5kaWRhdGVzPVttb2R1bGVTcGVjaWZpZXJdO1xuZm9yKGNvbnN0IGNhbmRpZGF0ZVN1ZmZpeCBvZiBzZWFyY2hTdWZmaXhlcyl7XG5jYW5kaWRhdGVzLnB1c2goIGAke21vZHVsZVNwZWNpZmllcn0ke2NhbmRpZGF0ZVN1ZmZpeH1gKTtcbiB9XG5yZXR1cm4gY2FuZGlkYXRlcztcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24qY2hvb3NlTW9kdWxlRGVzY3JpcHRvcihcbntcbmNhbmRpZGF0ZXMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzLFxuY29tcGFydG1lbnRzLFxuY29tcHV0ZVNoYTUxMixcbm1vZHVsZURlc2NyaXB0b3JzLFxubW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9uLFxucGFja2FnZVNvdXJjZXMsXG5yZWFkUG93ZXJzLFxuc291cmNlTWFwSG9vayxcbnN0cmljdGx5UmVxdWlyZWRGb3JDb21wYXJ0bWVudH0sXG5cbnttYXliZVJlYWQscGFyc2Usc2hvdWxkRGVmZXJFcnJvcj0oKT0+ZmFsc2V9KVxue1xuZm9yKGNvbnN0IGNhbmRpZGF0ZVNwZWNpZmllciBvZiBjYW5kaWRhdGVzKXtcbmNvbnN0IGNhbmRpZGF0ZU1vZHVsZURlc2NyaXB0b3I9bW9kdWxlRGVzY3JpcHRvcnNbY2FuZGlkYXRlU3BlY2lmaWVyXTtcbmlmKGNhbmRpZGF0ZU1vZHVsZURlc2NyaXB0b3IhPT11bmRlZmluZWQpe1xuY29uc3R7Y29tcGFydG1lbnQ6Y2FuZGlkYXRlQ29tcGFydG1lbnROYW1lPXBhY2thZ2VMb2NhdGlvbn09XG5jYW5kaWRhdGVNb2R1bGVEZXNjcmlwdG9yO1xuY29uc3QgY2FuZGlkYXRlQ29tcGFydG1lbnQ9Y29tcGFydG1lbnRzW2NhbmRpZGF0ZUNvbXBhcnRtZW50TmFtZV07XG5pZihjYW5kaWRhdGVDb21wYXJ0bWVudD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgY29tcGFydG1lbnQgbWlzc2luZyBmb3IgY2FuZGlkYXRlICR7Y2FuZGlkYXRlU3BlY2lmaWVyfSBpbiAke2NhbmRpZGF0ZUNvbXBhcnRtZW50TmFtZX1gKTtcblxuIH1cbi8vXG5jb25zdCBjYW5kaWRhdGVDb21wYXJ0bWVudERlc2NyaXB0b3I9XG5jb21wYXJ0bWVudERlc2NyaXB0b3JzW2NhbmRpZGF0ZUNvbXBhcnRtZW50TmFtZV07XG5pZihjYW5kaWRhdGVDb21wYXJ0bWVudERlc2NyaXB0b3I9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYGNvbXBhcnRtZW50RGVzY3JpcHRvciBtaXNzaW5nIGZvciBjYW5kaWRhdGUgJHtjYW5kaWRhdGVTcGVjaWZpZXJ9IGluICR7Y2FuZGlkYXRlQ29tcGFydG1lbnROYW1lfWApO1xuXG4gfVxuY2FuZGlkYXRlQ29tcGFydG1lbnREZXNjcmlwdG9yLm1vZHVsZXNbbW9kdWxlU3BlY2lmaWVyXT1cbmNhbmRpZGF0ZU1vZHVsZURlc2NyaXB0b3I7XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlY29yZD17XG5zcGVjaWZpZXI6Y2FuZGlkYXRlU3BlY2lmaWVyLFxuY29tcGFydG1lbnQ6Y2FuZGlkYXRlQ29tcGFydG1lbnR9O1xuXG5yZXR1cm4gcmVjb3JkO1xuIH1cblxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IG1vZHVsZUxvY2F0aW9uPXJlc29sdmVMb2NhdGlvbihjYW5kaWRhdGVTcGVjaWZpZXIscGFja2FnZUxvY2F0aW9uKTtcblxuLy9cbi8vXG5jb25zdCBtb2R1bGVCeXRlcz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xueWllbGQgbWF5YmVSZWFkKG1vZHVsZUxvY2F0aW9uKTtcblxuXG5pZihtb2R1bGVCeXRlcyE9PXVuZGVmaW5lZCl7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBzb3VyY2VNYXA7XG4vL1xuY29uc3QgZW52ZWxvcGU9LyogICAgICAgICAgICAgICAgICAgICAgKi9cbnlpZWxkIHBhcnNlKFxubW9kdWxlQnl0ZXMsXG5jYW5kaWRhdGVTcGVjaWZpZXIsXG5tb2R1bGVMb2NhdGlvbixcbnBhY2thZ2VMb2NhdGlvbixcbntcbnJlYWRQb3dlcnMsXG5zb3VyY2VNYXBIb29rOlxuc291cmNlTWFwSG9vayYmKFxuKG5leHRTb3VyY2VNYXBPYmplY3QpPT57XG5zb3VyY2VNYXA9SlNPTi5zdHJpbmdpZnkobmV4dFNvdXJjZU1hcE9iamVjdCk7XG4gfSksXG5jb21wYXJ0bWVudERlc2NyaXB0b3J9KTtcblxuXG5cbmNvbnN0e1xucGFyc2VyLFxuYnl0ZXM6dHJhbnNmb3JtZWRCeXRlcyxcbnJlY29yZDpjb25jcmV0ZVJlY29yZH09XG5lbnZlbG9wZTtcblxuLy9cbi8vXG5pZihjYW5kaWRhdGVTcGVjaWZpZXIhPT1tb2R1bGVTcGVjaWZpZXIpe1xubW9kdWxlRGVzY3JpcHRvcnNbbW9kdWxlU3BlY2lmaWVyXT17XG5tb2R1bGU6Y2FuZGlkYXRlU3BlY2lmaWVyLFxuY29tcGFydG1lbnQ6cGFja2FnZUxvY2F0aW9ufTtcblxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlY29yZD17XG5yZWNvcmQ6Y29uY3JldGVSZWNvcmQsXG5zcGVjaWZpZXI6Y2FuZGlkYXRlU3BlY2lmaWVyLFxuaW1wb3J0TWV0YTp7dXJsOm1vZHVsZUxvY2F0aW9ufX07XG5cblxubGV0IHNoYTUxMjtcbmlmKGNvbXB1dGVTaGE1MTIhPT11bmRlZmluZWQpe1xuc2hhNTEyPWNvbXB1dGVTaGE1MTIodHJhbnNmb3JtZWRCeXRlcyk7XG5cbmlmKHNvdXJjZU1hcEhvb2shPT11bmRlZmluZWQmJnNvdXJjZU1hcCE9PXVuZGVmaW5lZCl7XG5zb3VyY2VNYXBIb29rKHNvdXJjZU1hcCx7XG5jb21wYXJ0bWVudDpwYWNrYWdlTG9jYXRpb24sXG5tb2R1bGU6Y2FuZGlkYXRlU3BlY2lmaWVyLFxubG9jYXRpb246bW9kdWxlTG9jYXRpb24sXG5zaGE1MTJ9KTtcblxuIH1cbiB9XG5cbmNvbnN0IHBhY2thZ2VSZWxhdGl2ZUxvY2F0aW9uPW1vZHVsZUxvY2F0aW9uLnNsaWNlKFxucGFja2FnZUxvY2F0aW9uLmxlbmd0aCk7XG5cbnBhY2thZ2VTb3VyY2VzW2NhbmRpZGF0ZVNwZWNpZmllcl09e1xubG9jYXRpb246cGFja2FnZVJlbGF0aXZlTG9jYXRpb24sXG5zb3VyY2VMb2NhdGlvbjptb2R1bGVMb2NhdGlvbixcbnBhcnNlcixcbmJ5dGVzOnRyYW5zZm9ybWVkQnl0ZXMsXG5yZWNvcmQ6Y29uY3JldGVSZWNvcmQsXG5zaGE1MTJ9O1xuXG5pZighc2hvdWxkRGVmZXJFcnJvcihwYXJzZXIpKXtcbmZvcihjb25zdCBpbXBvcnRTcGVjaWZpZXIgb2YgZ2V0SW1wb3J0c0Zyb21SZWNvcmQocmVjb3JkKSl7XG5zdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnQocGFja2FnZUxvY2F0aW9uKS5hZGQoXG5yZXNvbHZlKGltcG9ydFNwZWNpZmllcixtb2R1bGVTcGVjaWZpZXIpKTtcblxuIH1cbiB9XG5cbnJldHVybiByZWNvcmQ7XG4gfVxuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSW1wb3J0SG9va01ha2VyPShcbnJlYWRQb3dlcnMsXG5iYXNlTG9jYXRpb24sXG57XG5zb3VyY2VzPWNyZWF0ZShudWxsKSxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnM9Y3JlYXRlKG51bGwpLFxuYXJjaGl2ZU9ubHk9ZmFsc2UsXG5jb21wdXRlU2hhNTEyPXVuZGVmaW5lZCxcbnNlYXJjaFN1ZmZpeGVzPW5vZGVqc0NvbnZlbnRpb25TZWFyY2hTdWZmaXhlcyxcbnNvdXJjZU1hcEhvb2s9dW5kZWZpbmVkLFxuZW50cnlDb21wYXJ0bWVudE5hbWUsXG5lbnRyeU1vZHVsZVNwZWNpZmllcixcbmV4aXRNb2R1bGVJbXBvcnRIb29rPXVuZGVmaW5lZH0pPT5cblxue1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaWN0bHlSZXF1aXJlZD1uZXcgTWFwKFtcbltlbnRyeUNvbXBhcnRtZW50TmFtZSxuZXcgU2V0KFtlbnRyeU1vZHVsZVNwZWNpZmllcl0pXV0pO1xuXG5cbi8qXG5cbiAgICovXG5jb25zdCBzdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnQ9KGNvbXBhcnRtZW50TmFtZSk9PntcbmxldCBjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ9c3RyaWN0bHlSZXF1aXJlZC5nZXQoY29tcGFydG1lbnROYW1lKTtcbmlmKGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZCE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkO1xuIH1cbmNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZD1uZXcgU2V0KCk7XG5zdHJpY3RseVJlcXVpcmVkLnNldChjb21wYXJ0bWVudE5hbWUsY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkKTtcbnJldHVybiBjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ7XG4gfTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFrZUltcG9ydEhvb2s9KHtcbnBhY2thZ2VMb2NhdGlvbixcbnBhY2thZ2VOYW1lOl9wYWNrYWdlTmFtZSxcbmF0dGVudWF0b3JzLFxucGFyc2UsXG5zaG91bGREZWZlckVycm9yLFxuY29tcGFydG1lbnRzfSk9Plxue1xuLy9cbnBhY2thZ2VMb2NhdGlvbj1yZXNvbHZlTG9jYXRpb24ocGFja2FnZUxvY2F0aW9uLGJhc2VMb2NhdGlvbik7XG5jb25zdCBwYWNrYWdlU291cmNlcz1zb3VyY2VzW3BhY2thZ2VMb2NhdGlvbl18fGNyZWF0ZShudWxsKTtcbnNvdXJjZXNbcGFja2FnZUxvY2F0aW9uXT1wYWNrYWdlU291cmNlcztcbmNvbnN0IGNvbXBhcnRtZW50RGVzY3JpcHRvcj1jb21wYXJ0bWVudERlc2NyaXB0b3JzW3BhY2thZ2VMb2NhdGlvbl18fHt9O1xuY29uc3R7bW9kdWxlczptb2R1bGVEZXNjcmlwdG9ycz1jcmVhdGUobnVsbCl9PWNvbXBhcnRtZW50RGVzY3JpcHRvcjtcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5tb2R1bGVzPW1vZHVsZURlc2NyaXB0b3JzO1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3QgZGVmZXJFcnJvcj0oc3BlY2lmaWVyLGVycm9yKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5pZihzdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnQocGFja2FnZUxvY2F0aW9uKS5oYXMoc3BlY2lmaWVyKSl7XG50aHJvdyBlcnJvcjtcbiB9XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcmVjb3JkPWZyZWV6ZSh7XG5pbXBvcnRzOltdLFxuZXhwb3J0czpbXSxcbmV4ZWN1dGU6KCk9PntcbnRocm93IGVycm9yO1xuIH19KTtcblxucGFja2FnZVNvdXJjZXNbc3BlY2lmaWVyXT17XG5kZWZlcnJlZEVycm9yOmVycm9yLm1lc3NhZ2V9O1xuXG5cbnJldHVybiByZWNvcmQ7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW1wb3J0SG9vaz1hc3luYyhtb2R1bGVTcGVjaWZpZXIpPT57XG5jb21wYXJ0bWVudERlc2NyaXB0b3IucmV0YWluZWQ9dHJ1ZTtcblxuLy9cbmF3YWl0IG51bGw7XG5cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG5pZihtb2R1bGVTcGVjaWZpZXIhPT0nLicmJiFtb2R1bGVTcGVjaWZpZXIuc3RhcnRzV2l0aCgnLi8nKSl7XG5pZihleGl0TW9kdWxlSW1wb3J0SG9vayl7XG5jb25zdCByZWNvcmQ9YXdhaXQgZXhpdE1vZHVsZUltcG9ydEhvb2sobW9kdWxlU3BlY2lmaWVyKTtcbmlmKHJlY29yZCl7XG4vL1xuLy9cbmVuZm9yY2VNb2R1bGVQb2xpY3kobW9kdWxlU3BlY2lmaWVyLGNvbXBhcnRtZW50RGVzY3JpcHRvcix7XG5leGl0OnRydWUsXG5lcnJvckhpbnQ6IGBCbG9ja2VkIGluIGxvYWRpbmcuICR7cShcbm1vZHVsZVNwZWNpZmllcilcbiB9IHdhcyBub3QgaW4gdGhlIGNvbXBhcnRtZW50IG1hcCBhbmQgYW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBsb2FkIGl0IGFzIGEgYnVpbHRpbmB9KTtcblxuaWYoYXJjaGl2ZU9ubHkpe1xuLy9cbi8vXG5yZXR1cm4gZnJlZXplKHtpbXBvcnRzOltdLGV4cG9ydHM6W10sZXhlY3V0ZSgpeyB9fSk7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgYXR0ZW51YXRlZFJlY29yZD1hd2FpdCBhdHRlbnVhdGVNb2R1bGVIb29rKFxubW9kdWxlU3BlY2lmaWVyLFxucmVjb3JkLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLnBvbGljeSxcbmF0dGVudWF0b3JzKTtcblxucmV0dXJuIGF0dGVudWF0ZWRSZWNvcmQ7XG4gfVxuIH1cbnJldHVybiBkZWZlckVycm9yKFxubW9kdWxlU3BlY2lmaWVyLFxuRXJyb3IoXG4gYENhbm5vdCBmaW5kIGV4dGVybmFsIG1vZHVsZSAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSBpbiBwYWNrYWdlICR7cGFja2FnZUxvY2F0aW9ufWApKTtcblxuXG4gfVxuXG5jb25zdHttYXliZVJlYWR9PXVucGFja1JlYWRQb3dlcnMocmVhZFBvd2Vycyk7XG5cbmNvbnN0IGNhbmRpZGF0ZXM9bm9taW5hdGVDYW5kaWRhdGVzKG1vZHVsZVNwZWNpZmllcixzZWFyY2hTdWZmaXhlcyk7XG5cbmNvbnN0IHJlY29yZD1hd2FpdCBhc3luY1RyYW1wb2xpbmUoXG5jaG9vc2VNb2R1bGVEZXNjcmlwdG9yLFxue1xuY2FuZGlkYXRlcyxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMsXG5jb21wYXJ0bWVudHMsXG5jb21wdXRlU2hhNTEyLFxubW9kdWxlRGVzY3JpcHRvcnMsXG5tb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb24sXG5wYWNrYWdlU291cmNlcyxcbnJlYWRQb3dlcnMsXG5zb3VyY2VNYXBIb29rLFxuc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50fSxcblxue21heWJlUmVhZCxwYXJzZSxzaG91bGREZWZlckVycm9yfSk7XG5cblxuaWYocmVjb3JkKXtcbnJldHVybiByZWNvcmQ7XG4gfVxuXG5yZXR1cm4gZGVmZXJFcnJvcihcbm1vZHVsZVNwZWNpZmllcixcbi8vXG5FcnJvcihcbiBgQ2Fubm90IGZpbmQgZmlsZSBmb3IgaW50ZXJuYWwgbW9kdWxlICR7cShcbm1vZHVsZVNwZWNpZmllcilcbiB9ICh3aXRoIGNhbmRpZGF0ZXMgJHtjYW5kaWRhdGVzLlxubWFwKCh4KT0+cSh4KSkuXG5qb2luKCcsICcpIH0pIGluIHBhY2thZ2UgJHtwYWNrYWdlTG9jYXRpb259YCkpO1xuXG5cbiB9O1xucmV0dXJuIGltcG9ydEhvb2s7XG4gfTtcbnJldHVybiBtYWtlSW1wb3J0SG9vaztcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VJbXBvcnRIb29rTWFrZXIobWFrZUltcG9ydEhvb2tNYWtlcik7XG5mdW5jdGlvbiAgICAgICAgbWFrZUltcG9ydE5vd0hvb2tNYWtlcihcbnJlYWRQb3dlcnMsXG5iYXNlTG9jYXRpb24sXG57XG5zb3VyY2VzPWNyZWF0ZShudWxsKSxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnM9Y3JlYXRlKG51bGwpLFxuY29tcHV0ZVNoYTUxMj11bmRlZmluZWQsXG5zZWFyY2hTdWZmaXhlcz1ub2RlanNDb252ZW50aW9uU2VhcmNoU3VmZml4ZXMsXG5zb3VyY2VNYXBIb29rPXVuZGVmaW5lZCxcbmV4aXRNb2R1bGVJbXBvcnROb3dIb29rfSlcblxue1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaWN0bHlSZXF1aXJlZD1uZXcgTWFwKCk7XG5cbi8qXG5cbiAgICovXG5jb25zdCBzdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnQ9KGNvbXBhcnRtZW50TmFtZSk9PntcbmxldCBjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ9c3RyaWN0bHlSZXF1aXJlZC5nZXQoY29tcGFydG1lbnROYW1lKTtcbmlmKGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZCE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkO1xuIH1cbmNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZD1uZXcgU2V0KCk7XG5zdHJpY3RseVJlcXVpcmVkLnNldChjb21wYXJ0bWVudE5hbWUsY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkKTtcbnJldHVybiBjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IG1ha2VJbXBvcnROb3dIb29rPSh7XG5wYWNrYWdlTG9jYXRpb24sXG5wYWNrYWdlTmFtZTpfcGFja2FnZU5hbWUsXG5wYXJzZSxcbmNvbXBhcnRtZW50c30pPT5cbntcbmlmKCEoJ2lzU3luY1BhcnNlcidpbiBwYXJzZSkpe1xucmV0dXJuIGZ1bmN0aW9uIGltcG9zc2libGVUcmFuc2Zvcm1JbXBvcnROb3dIb29rKCl7XG50aHJvdyBuZXcgRXJyb3IoXG4nRHluYW1pYyByZXF1aXJlcyBhcmUgb25seSBwb3NzaWJsZSB3aXRoIHN5bmNocm9ub3VzIHBhcnNlcnMgYW5kIG5vIGFzeW5jaHJvbm91cyBtb2R1bGUgdHJhbnNmb3JtcyBpbiBvcHRpb25zJyk7XG5cbiB9O1xuIH1cblxuY29uc3QgY29tcGFydG1lbnREZXNjcmlwdG9yPWNvbXBhcnRtZW50RGVzY3JpcHRvcnNbcGFja2FnZUxvY2F0aW9uXXx8e307XG5cbnBhY2thZ2VMb2NhdGlvbj1yZXNvbHZlTG9jYXRpb24ocGFja2FnZUxvY2F0aW9uLGJhc2VMb2NhdGlvbik7XG5jb25zdCBwYWNrYWdlU291cmNlcz1zb3VyY2VzW3BhY2thZ2VMb2NhdGlvbl18fGNyZWF0ZShudWxsKTtcbnNvdXJjZXNbcGFja2FnZUxvY2F0aW9uXT1wYWNrYWdlU291cmNlcztcbmNvbnN0e1xubW9kdWxlczpcbm1vZHVsZURlc2NyaXB0b3JzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jcmVhdGUobnVsbCl9PVxuXG5jb21wYXJ0bWVudERlc2NyaXB0b3I7XG5jb21wYXJ0bWVudERlc2NyaXB0b3IubW9kdWxlcz1tb2R1bGVEZXNjcmlwdG9ycztcblxubGV0e3BvbGljeX09Y29tcGFydG1lbnREZXNjcmlwdG9yO1xucG9saWN5PXBvbGljeXx8Y3JlYXRlKG51bGwpO1xuXG4vL1xuLy9cbi8vXG5pZigncGFja2FnZXMnaW4gcG9saWN5JiZ0eXBlb2YgcG9saWN5LnBhY2thZ2VzPT09J29iamVjdCcpe1xuZm9yKGNvbnN0W3BhY2thZ2VOYW1lLHBhY2thZ2VQb2xpY3lJdGVtXW9mIGVudHJpZXMocG9saWN5LnBhY2thZ2VzKSl7XG5pZihcbiEocGFja2FnZU5hbWUgaW4gY29tcGFydG1lbnREZXNjcmlwdG9yLm1vZHVsZXMpJiZcbnBhY2thZ2VOYW1lIGluIGNvbXBhcnRtZW50RGVzY3JpcHRvci5zY29wZXMmJlxucGFja2FnZVBvbGljeUl0ZW0pXG57XG5jb21wYXJ0bWVudERlc2NyaXB0b3IubW9kdWxlc1twYWNrYWdlTmFtZV09XG5jb21wYXJ0bWVudERlc2NyaXB0b3Iuc2NvcGVzW3BhY2thZ2VOYW1lXTtcbiB9XG4gfVxuIH1cblxuY29uc3R7bWF5YmVSZWFkTm93LGlzQWJzb2x1dGV9PXJlYWRQb3dlcnM7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydE5vd0hvb2s9KG1vZHVsZVNwZWNpZmllcik9PntcbmlmKGlzQWJzb2x1dGUobW9kdWxlU3BlY2lmaWVyKSl7XG5jb25zdCByZWNvcmQ9ZmluZFJlZGlyZWN0KHtcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMsXG5jb21wYXJ0bWVudHMsXG5hYnNvbHV0ZU1vZHVsZVNwZWNpZmllcjptb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb259KTtcblxuaWYocmVjb3JkKXtcbnJldHVybiByZWNvcmQ7XG4gfVxuIH1cblxuY29uc3QgY2FuZGlkYXRlcz1ub21pbmF0ZUNhbmRpZGF0ZXMobW9kdWxlU3BlY2lmaWVyLHNlYXJjaFN1ZmZpeGVzKTtcblxuY29uc3QgcmVjb3JkPXN5bmNUcmFtcG9saW5lKFxuY2hvb3NlTW9kdWxlRGVzY3JpcHRvcixcbntcbmNhbmRpZGF0ZXMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzLFxuY29tcGFydG1lbnRzLFxuY29tcHV0ZVNoYTUxMixcbm1vZHVsZURlc2NyaXB0b3JzLFxubW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9uLFxucGFja2FnZVNvdXJjZXMsXG5yZWFkUG93ZXJzLFxuc291cmNlTWFwSG9vayxcbnN0cmljdGx5UmVxdWlyZWRGb3JDb21wYXJ0bWVudH0sXG5cbntcbm1heWJlUmVhZDptYXliZVJlYWROb3csXG5wYXJzZX0pO1xuXG5cblxuaWYocmVjb3JkKXtcbnJldHVybiByZWNvcmQ7XG4gfVxuXG5pZihleGl0TW9kdWxlSW1wb3J0Tm93SG9vayl7XG4vL1xuY29uc3QgZXhpdFJlY29yZD1leGl0TW9kdWxlSW1wb3J0Tm93SG9vayhcbm1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbik7XG5cblxuaWYoIWV4aXRSZWNvcmQpe1xudGhyb3cgbmV3IEVycm9yKCBgQ291bGQgbm90IGltcG9ydCBtb2R1bGU6ICR7cShtb2R1bGVTcGVjaWZpZXIpfWApO1xuIH1cblxucmV0dXJuIGV4aXRSZWNvcmQ7XG4gfVxuXG50aHJvdyBuZXcgRXJyb3IoXG4gYENvdWxkIG5vdCBpbXBvcnQgbW9kdWxlOiAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfTsgdHJ5IHByb3ZpZGluZyBhbiBpbXBvcnROb3dIb29rYCk7XG5cbiB9O1xuXG5yZXR1cm4gaW1wb3J0Tm93SG9vaztcbiB9O1xucmV0dXJuIG1ha2VJbXBvcnROb3dIb29rO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIiOlsiZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlciJdLCJtYWtlSW1wb3J0SG9va01ha2VyIjpbIm1ha2VJbXBvcnRIb29rTWFrZXIiXSwibWFrZUltcG9ydE5vd0hvb2tNYWtlciI6WyJtYWtlSW1wb3J0Tm93SG9va01ha2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGNPsi/5AgAA+QIAACsAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9qc29uLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJwYXJzZUxvY2F0ZWRKc29uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhcnNlTG9jYXRlZEpzb249KHNvdXJjZSxsb2NhdGlvbik9PntcbnRyeXtcbnJldHVybiBKU09OLnBhcnNlKHNvdXJjZSk7XG4gfWNhdGNoKGVycm9yKXtcbmlmKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3Ipe1xudGhyb3cgU3ludGF4RXJyb3IoIGBDYW5ub3QgcGFyc2UgSlNPTiBmcm9tICR7bG9jYXRpb259LCAke2Vycm9yfWApO1xuIH1cbnRocm93IGVycm9yO1xuIH1cbiB9OyRozY9fb25jZS5wYXJzZUxvY2F0ZWRKc29uKHBhcnNlTG9jYXRlZEpzb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicGFyc2VMb2NhdGVkSnNvbiI6WyJwYXJzZUxvY2F0ZWRKc29uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHPt0jEUIAAAFCAAACsAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9saW5rLmpzeyJpbXBvcnRzIjpbIi4vbWFwLXBhcnNlci5qcyIsIi4vbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzIiwiLi9wb2xpY3kuanMiXSwiZXhwb3J0cyI6WyJhc3NlbWJsZSIsImxpbmsiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZU1hcFBhcnNlcnMscmVzb2x2ZUZhbGxiYWNrLEFUVEVOVUFUT1JTX0NPTVBBUlRNRU5ULGF0dGVudWF0ZUdsb2JhbHMsZW5mb3JjZU1vZHVsZVBvbGljeSxtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyOyRozY9faW1wb3J0cyhbW1wiLi9tYXAtcGFyc2VyLmpzXCIsIFtbXCJtYWtlTWFwUGFyc2Vyc1wiLCBbJGjNj19hID0+IChtYWtlTWFwUGFyc2VycyA9ICRozY9fYSldXV1dLFtcIi4vbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzXCIsIFtbXCJyZXNvbHZlXCIsIFskaM2PX2EgPT4gKHJlc29sdmVGYWxsYmFjayA9ICRozY9fYSldXV1dLFtcIi4vcG9saWN5LmpzXCIsIFtbXCJBVFRFTlVBVE9SU19DT01QQVJUTUVOVFwiLCBbJGjNj19hID0+IChBVFRFTlVBVE9SU19DT01QQVJUTUVOVCA9ICRozY9fYSldXSxbXCJhdHRlbnVhdGVHbG9iYWxzXCIsIFskaM2PX2EgPT4gKGF0dGVudWF0ZUdsb2JhbHMgPSAkaM2PX2EpXV0sW1wiZW5mb3JjZU1vZHVsZVBvbGljeVwiLCBbJGjNj19hID0+IChlbmZvcmNlTW9kdWxlUG9saWN5ID0gJGjNj19hKV1dLFtcIm1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXJcIiwgWyRozY9fYSA9PiAobWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2Fzc2lnbixjcmVhdGUsZW50cmllcyxmcmVlemV9PU9iamVjdDtcbmNvbnN0e2hhc093blByb3BlcnR5fT1PYmplY3QucHJvdG90eXBlO1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5jb25zdHthbGxTZXR0bGVkfT1Qcm9taXNlO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgcHJvbWlzZUFsbFNldHRsZWQ9YWxsU2V0dGxlZC5iaW5kKFByb21pc2UpO1xuXG5jb25zdCBkZWZhdWx0Q29tcGFydG1lbnQ9Q29tcGFydG1lbnQ7XG5cbi8vXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBoYXM9KG9iamVjdCxrZXkpPT5hcHBseShoYXNPd25Qcm9wZXJ0eSxvYmplY3QsW2tleV0pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgdHJpbU1vZHVsZVNwZWNpZmllclByZWZpeD0obW9kdWxlU3BlY2lmaWVyLHByZWZpeCk9PntcbmlmKG1vZHVsZVNwZWNpZmllcj09PXByZWZpeCl7XG5yZXR1cm4nLic7XG4gfVxuaWYobW9kdWxlU3BlY2lmaWVyLnN0YXJ0c1dpdGgoIGAke3ByZWZpeH0vYCkpe1xucmV0dXJuIGAuLyR7bW9kdWxlU3BlY2lmaWVyLnNsaWNlKHByZWZpeC5sZW5ndGgrMSl9YDtcbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VNb2R1bGVNYXBIb29rPShcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbmNvbXBhcnRtZW50cyxcbmNvbXBhcnRtZW50TmFtZSxcbm1vZHVsZURlc2NyaXB0b3JzLFxuc2NvcGVEZXNjcmlwdG9ycyk9Plxue1xuLypcblxuXG4gICAqL1xuY29uc3QgbW9kdWxlTWFwSG9vaz0obW9kdWxlU3BlY2lmaWVyKT0+e1xuY29tcGFydG1lbnREZXNjcmlwdG9yLnJldGFpbmVkPXRydWU7XG5cbmNvbnN0IG1vZHVsZURlc2NyaXB0b3I9bW9kdWxlRGVzY3JpcHRvcnNbbW9kdWxlU3BlY2lmaWVyXTtcbmlmKG1vZHVsZURlc2NyaXB0b3IhPT11bmRlZmluZWQpe1xuLy9cbi8vXG5jb25zdHtcbmNvbXBhcnRtZW50OmZvcmVpZ25Db21wYXJ0bWVudE5hbWU9Y29tcGFydG1lbnROYW1lLFxubW9kdWxlOmZvcmVpZ25Nb2R1bGVTcGVjaWZpZXIsXG5leGl0fT1cbm1vZHVsZURlc2NyaXB0b3I7XG5pZihleGl0IT09dW5kZWZpbmVkKXtcbnJldHVybiB1bmRlZmluZWQ7Ly9cbiB9XG5pZihmb3JlaWduTW9kdWxlU3BlY2lmaWVyIT09dW5kZWZpbmVkKXtcbi8vXG5pZighbW9kdWxlU3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4vJykpe1xuLy9cbi8vXG5lbmZvcmNlTW9kdWxlUG9saWN5KG1vZHVsZVNwZWNpZmllcixjb21wYXJ0bWVudERlc2NyaXB0b3Ise1xuZXhpdDpmYWxzZSxcbmVycm9ySGludDpcbidUaGlzIGNoZWNrIHNob3VsZCBub3QgYmUgcmVhY2hhYmxlLiBJZiB5b3Ugc2VlIHRoaXMgZXJyb3IsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLid9KTtcblxuIH1cblxuY29uc3QgZm9yZWlnbkNvbXBhcnRtZW50PWNvbXBhcnRtZW50c1tmb3JlaWduQ29tcGFydG1lbnROYW1lXTtcbmlmKGZvcmVpZ25Db21wYXJ0bWVudD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGltcG9ydCBmcm9tIG1pc3NpbmcgY29tcGFydG1lbnQgJHtxKFxuZm9yZWlnbkNvbXBhcnRtZW50TmFtZSlcbiB9fWApO1xuXG4gfVxucmV0dXJue1xuY29tcGFydG1lbnQ6Zm9yZWlnbkNvbXBhcnRtZW50LFxubmFtZXNwYWNlOmZvcmVpZ25Nb2R1bGVTcGVjaWZpZXJ9O1xuXG4gfVxuIH1cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5mb3IoY29uc3Rbc2NvcGVQcmVmaXgsc2NvcGVEZXNjcmlwdG9yXW9mIGVudHJpZXMoc2NvcGVEZXNjcmlwdG9ycykpe1xuY29uc3QgZm9yZWlnbk1vZHVsZVNwZWNpZmllcj10cmltTW9kdWxlU3BlY2lmaWVyUHJlZml4KFxubW9kdWxlU3BlY2lmaWVyLFxuc2NvcGVQcmVmaXgpO1xuXG5cbmlmKGZvcmVpZ25Nb2R1bGVTcGVjaWZpZXIhPT11bmRlZmluZWQpe1xuY29uc3R7Y29tcGFydG1lbnQ6Zm9yZWlnbkNvbXBhcnRtZW50TmFtZX09c2NvcGVEZXNjcmlwdG9yO1xuaWYoZm9yZWlnbkNvbXBhcnRtZW50TmFtZT09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGltcG9ydCBmcm9tIHNjb3BlICR7c2NvcGVQcmVmaXh9IGR1ZSB0byBtaXNzaW5nIFwiY29tcGFydG1lbnRcIiBwcm9wZXJ0eWApO1xuXG4gfVxuY29uc3QgZm9yZWlnbkNvbXBhcnRtZW50PWNvbXBhcnRtZW50c1tmb3JlaWduQ29tcGFydG1lbnROYW1lXTtcbmlmKGZvcmVpZ25Db21wYXJ0bWVudD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGltcG9ydCBmcm9tIG1pc3NpbmcgY29tcGFydG1lbnQgJHtxKFxuZm9yZWlnbkNvbXBhcnRtZW50TmFtZSlcbiB9YCk7XG5cbiB9XG5cbmVuZm9yY2VNb2R1bGVQb2xpY3koc2NvcGVQcmVmaXgsY29tcGFydG1lbnREZXNjcmlwdG9yLHtcbmV4aXQ6ZmFsc2UsXG5lcnJvckhpbnQ6IGBCbG9ja2VkIGluIGxpbmtpbmcuICR7cShcbm1vZHVsZVNwZWNpZmllcilcbiB9IGlzIHBhcnQgb2YgdGhlIGNvbXBhcnRtZW50IG1hcCBhbmQgcmVzb2x2ZXMgdG8gJHtxKFxuZm9yZWlnbkNvbXBhcnRtZW50TmFtZSlcbiB9LmB9KTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5tb2R1bGVEZXNjcmlwdG9yc1ttb2R1bGVTcGVjaWZpZXJdPXtcbmNvbXBhcnRtZW50OmZvcmVpZ25Db21wYXJ0bWVudE5hbWUsXG5tb2R1bGU6Zm9yZWlnbk1vZHVsZVNwZWNpZmllcn07XG5cbnJldHVybntcbmNvbXBhcnRtZW50OmZvcmVpZ25Db21wYXJ0bWVudCxcbm5hbWVzcGFjZTpmb3JlaWduTW9kdWxlU3BlY2lmaWVyfTtcblxuIH1cbiB9XG5cbi8vXG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9O1xuXG5yZXR1cm4gbW9kdWxlTWFwSG9vaztcbiB9O1xuXG4vKlxuXG4gKi9cbmNvbnN0IGltcG9zc2libGVJbXBvcnROb3dIb29rTWFrZXI9KCk9PntcbnJldHVybiBmdW5jdGlvbiBpbXBvc3NpYmxlSW1wb3J0Tm93SG9vaygpe1xudGhyb3cgbmV3IEVycm9yKCdQcm92aWRlZCByZWFkIHBvd2VycyBkbyBub3Qgc3VwcG9ydCBkeW5hbWljIHJlcXVpcmVzJyk7XG4gfTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBsaW5rPShcbntlbnRyeSxjb21wYXJ0bWVudHM6Y29tcGFydG1lbnREZXNjcmlwdG9yc30sXG5vcHRpb25zKT0+XG57XG5jb25zdHtcbnJlc29sdmU9cmVzb2x2ZUZhbGxiYWNrLFxubWFrZUltcG9ydEhvb2ssXG5tYWtlSW1wb3J0Tm93SG9vaz1pbXBvc3NpYmxlSW1wb3J0Tm93SG9va01ha2VyLFxucGFyc2VyRm9yTGFuZ3VhZ2U6cGFyc2VyRm9yTGFuZ3VhZ2VPcHRpb249e30sXG5sYW5ndWFnZUZvckV4dGVuc2lvbjpsYW5ndWFnZUZvckV4dGVuc2lvbk9wdGlvbj17fSxcbmdsb2JhbHM9e30sXG50cmFuc2Zvcm1zPVtdLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zLFxuX19zaGltVHJhbnNmb3Jtc19fPVtdLFxuYXJjaGl2ZU9ubHk9ZmFsc2UsXG5Db21wYXJ0bWVudD1kZWZhdWx0Q29tcGFydG1lbnR9PVxub3B0aW9ucztcblxuY29uc3R7Y29tcGFydG1lbnQ6ZW50cnlDb21wYXJ0bWVudE5hbWV9PWVudHJ5O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbXBhcnRtZW50cz1jcmVhdGUobnVsbCk7XG5cbi8qXG5cbiAgICovXG5jb25zdCBhdHRlbnVhdG9ycz1tYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyKFxuY29tcGFydG1lbnRzLFxuY29tcGFydG1lbnREZXNjcmlwdG9ycyk7XG5cblxuY29uc3QgcGVuZGluZ0pvYnM9W107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0TGFuZ3VhZ2VGb3JFeHRlbnNpb249ZnJlZXplKFxuYXNzaWduKGNyZWF0ZShudWxsKSxsYW5ndWFnZUZvckV4dGVuc2lvbk9wdGlvbikpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGFyc2VyRm9yTGFuZ3VhZ2U9ZnJlZXplKFxuYXNzaWduKGNyZWF0ZShudWxsKSxwYXJzZXJGb3JMYW5ndWFnZU9wdGlvbikpO1xuXG5cbmNvbnN0IG1hcFBhcnNlcnM9bWFrZU1hcFBhcnNlcnMoe1xucGFyc2VyRm9yTGFuZ3VhZ2UsXG5tb2R1bGVUcmFuc2Zvcm1zLFxuc3luY01vZHVsZVRyYW5zZm9ybXN9KTtcblxuXG5mb3IoY29uc3RbY29tcGFydG1lbnROYW1lLGNvbXBhcnRtZW50RGVzY3JpcHRvcl1vZiBlbnRyaWVzKFxuY29tcGFydG1lbnREZXNjcmlwdG9ycykpXG57XG5jb25zdHtcbmxvY2F0aW9uLFxubmFtZSxcbnBhcnNlcnM6bGFuZ3VhZ2VGb3JFeHRlbnNpb25PdmVycmlkZXM9e30sXG50eXBlczpsYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllck92ZXJyaWRlcz17fX09XG5jb21wYXJ0bWVudERlc2NyaXB0b3I7XG5cbi8vXG4vL1xuY29uc3R7c2NvcGVzOl9zY29wZXMsbW9kdWxlczpfbW9kdWxlc309Y29tcGFydG1lbnREZXNjcmlwdG9yO1xuY29uc3QgbW9kdWxlcz1fbW9kdWxlc3x8Y3JlYXRlKG51bGwpO1xuY29uc3Qgc2NvcGVzPV9zY29wZXN8fGNyZWF0ZShudWxsKTtcblxuLy9cbi8vXG5jb21wYXJ0bWVudERlc2NyaXB0b3IubW9kdWxlcz1tb2R1bGVzO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBsYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcj1mcmVlemUoXG5hc3NpZ24oY3JlYXRlKG51bGwpLGxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyT3ZlcnJpZGVzKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBsYW5ndWFnZUZvckV4dGVuc2lvbj1mcmVlemUoXG5hc3NpZ24oXG5jcmVhdGUobnVsbCksXG5kZWZhdWx0TGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5sYW5ndWFnZUZvckV4dGVuc2lvbk92ZXJyaWRlcykpO1xuXG5cblxuLy9cbi8vXG5jb25zdCBwYXJzZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubWFwUGFyc2VycyhsYW5ndWFnZUZvckV4dGVuc2lvbixsYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcik7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2hvdWxkRGVmZXJFcnJvcj0obGFuZ3VhZ2UpPT57XG5pZihsYW5ndWFnZSYmaGFzKHBhcnNlckZvckxhbmd1YWdlLGxhbmd1YWdlKSl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcGFyc2VyRm9yTGFuZ3VhZ2VbbGFuZ3VhZ2VdLlxuaGV1cmlzdGljSW1wb3J0cyk7XG4gfWVsc2V7XG4vL1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfTtcblxuLy9cbi8vXG5jb25zdCByZXNvbHZlSG9vaz1yZXNvbHZlO1xuY29uc3QgaW1wb3J0SG9vaz1tYWtlSW1wb3J0SG9vayh7XG5wYWNrYWdlTG9jYXRpb246bG9jYXRpb24sXG5wYWNrYWdlTmFtZTpuYW1lLFxuYXR0ZW51YXRvcnMsXG5wYXJzZSxcbnNob3VsZERlZmVyRXJyb3IsXG5jb21wYXJ0bWVudHN9KTtcblxuXG5jb25zdCBpbXBvcnROb3dIb29rPW1ha2VJbXBvcnROb3dIb29rKHtcbnBhY2thZ2VMb2NhdGlvbjpsb2NhdGlvbixcbnBhY2thZ2VOYW1lOm5hbWUsXG5wYXJzZSxcbmNvbXBhcnRtZW50c30pO1xuXG5cbmNvbnN0IG1vZHVsZU1hcEhvb2s9bWFrZU1vZHVsZU1hcEhvb2soXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudHMsXG5jb21wYXJ0bWVudE5hbWUsXG5tb2R1bGVzLFxuc2NvcGVzKTtcblxuXG5jb25zdCBjb21wYXJ0bWVudD1uZXcgQ29tcGFydG1lbnQoe1xubmFtZTpsb2NhdGlvbixcbnJlc29sdmVIb29rLFxuaW1wb3J0SG9vayxcbmltcG9ydE5vd0hvb2ssXG5tb2R1bGVNYXBIb29rLFxudHJhbnNmb3Jtcyxcbl9fc2hpbVRyYW5zZm9ybXNfXyxcbl9fb3B0aW9uc19fOnRydWV9KTtcblxuXG5pZighYXJjaGl2ZU9ubHkpe1xuYXR0ZW51YXRlR2xvYmFscyhcbmNvbXBhcnRtZW50Lmdsb2JhbFRoaXMsXG5nbG9iYWxzLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLnBvbGljeSxcbmF0dGVudWF0b3JzLFxucGVuZGluZ0pvYnMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IubmFtZSk7XG5cbiB9XG5cbmNvbXBhcnRtZW50c1tjb21wYXJ0bWVudE5hbWVdPWNvbXBhcnRtZW50O1xuIH1cblxuY29uc3QgY29tcGFydG1lbnQ9Y29tcGFydG1lbnRzW2VudHJ5Q29tcGFydG1lbnROYW1lXTtcbmlmKGNvbXBhcnRtZW50PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgYXNzZW1ibGUgY29tcGFydG1lbnQgZ3JhcGggYmVjYXVzZSB0aGUgcm9vdCBjb21wYXJ0bWVudCBuYW1lZCAke3EoXG5lbnRyeUNvbXBhcnRtZW50TmFtZSlcbiB9IGlzIG1pc3NpbmcgZnJvbSB0aGUgY29tcGFydG1lbnQgbWFwYCk7XG5cbiB9XG5jb25zdCBhdHRlbnVhdG9yc0NvbXBhcnRtZW50PWNvbXBhcnRtZW50c1tBVFRFTlVBVE9SU19DT01QQVJUTUVOVF07XG5cbnJldHVybntcbmNvbXBhcnRtZW50LFxuY29tcGFydG1lbnRzLFxuYXR0ZW51YXRvcnNDb21wYXJ0bWVudCxcbnBlbmRpbmdKb2JzUHJvbWlzZTpwcm9taXNlQWxsU2V0dGxlZChwZW5kaW5nSm9icykudGhlbihcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8ocmVzdWx0cyk9PntcbmNvbnN0IGVycm9ycz1yZXN1bHRzLlxuZmlsdGVyKChyZXN1bHQpPT5yZXN1bHQuc3RhdHVzPT09J3JlamVjdGVkJykuXG5tYXAoXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyhyZXN1bHQpPT5cbnJlc3VsdC5yZWFzb24pO1xuXG5pZihlcnJvcnMubGVuZ3RoPjApe1xudGhyb3cgRXJyb3IoXG4gYEdsb2JhbHMgYXR0ZW51YXRpb24gZXJyb3JzOiAke2Vycm9ycy5cbm1hcCgoZXJyb3IpPT5lcnJvci5tZXNzYWdlKS5cbmpvaW4oJywgJykgfWApO1xuXG4gfVxuIH0pfTtcblxuXG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5saW5rKGxpbmspO1xuY29uc3QgICAgICAgIGFzc2VtYmxlPShjb21wYXJ0bWVudE1hcCxvcHRpb25zKT0+XG5saW5rKGNvbXBhcnRtZW50TWFwLG9wdGlvbnMpLmNvbXBhcnRtZW50OyRozY9fb25jZS5hc3NlbWJsZShhc3NlbWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJsaW5rIjpbImxpbmsiXSwiYXNzZW1ibGUiOlsiYXNzZW1ibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA/JqLIUQTAABEEwAAMQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL21hcC1wYXJzZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vdHJhbXBvbGluZSIsIi4vZXh0ZW5zaW9uLmpzIl0sImV4cG9ydHMiOlsibWFrZU1hcFBhcnNlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgc3luY1RyYW1wb2xpbmUsYXN5bmNUcmFtcG9saW5lLHBhcnNlRXh0ZW5zaW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vdHJhbXBvbGluZVwiLCBbW1wic3luY1RyYW1wb2xpbmVcIiwgWyRozY9fYSA9PiAoc3luY1RyYW1wb2xpbmUgPSAkaM2PX2EpXV0sW1wiYXN5bmNUcmFtcG9saW5lXCIsIFskaM2PX2EgPT4gKGFzeW5jVHJhbXBvbGluZSA9ICRozY9fYSldXV1dLFtcIi4vZXh0ZW5zaW9uLmpzXCIsIFtbXCJwYXJzZUV4dGVuc2lvblwiLCBbJGjNj19hID0+IChwYXJzZUV4dGVuc2lvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyxmcm9tRW50cmllcyxrZXlzLGhhc093blByb3BlcnR5LHZhbHVlc309T2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG4vL1xuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaGFzPShvYmplY3Qsa2V5KT0+YXBwbHkoaGFzT3duUHJvcGVydHksb2JqZWN0LFtrZXldKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBleHRlbnNpb25JbXBsaWVzTGFuZ3VhZ2U9KGV4dGVuc2lvbik9PmV4dGVuc2lvbiE9PSdqcyc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRXh0ZW5zaW9uUGFyc2VyPShcbnByZWZlclN5bmNocm9ub3VzLFxubGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zKT0+XG57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHRyYW5zZm9ybXM7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmZ1bmN0aW9uKmdldFBhcnNlckdlbmVyYXRvcihcbmJ5dGVzLFxuc3BlY2lmaWVyLFxubG9jYXRpb24sXG5wYWNrYWdlTG9jYXRpb24sXG5vcHRpb25zKVxue1xuLyogICAgICAgICAgICAgICAgICovXG5sZXQgbGFuZ3VhZ2U7XG5jb25zdCBleHRlbnNpb249cGFyc2VFeHRlbnNpb24obG9jYXRpb24pO1xuXG5pZihcbiFleHRlbnNpb25JbXBsaWVzTGFuZ3VhZ2UoZXh0ZW5zaW9uKSYmXG5oYXMobGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIsc3BlY2lmaWVyKSlcbntcbmxhbmd1YWdlPWxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyW3NwZWNpZmllcl07XG4gfWVsc2V7XG5sYW5ndWFnZT1sYW5ndWFnZUZvckV4dGVuc2lvbltleHRlbnNpb25dfHxleHRlbnNpb247XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgc291cmNlTWFwO1xuXG5pZihoYXModHJhbnNmb3JtcyxsYW5ndWFnZSkpe1xudHJ5e1xuKHtcbmJ5dGVzLFxucGFyc2VyOmxhbmd1YWdlLFxuc291cmNlTWFwfT1cbnlpZWxkIHRyYW5zZm9ybXNbbGFuZ3VhZ2VdKFxuYnl0ZXMsXG5zcGVjaWZpZXIsXG5sb2NhdGlvbixcbnBhY2thZ2VMb2NhdGlvbixcbntcbi8vXG4vL1xuLy9cbnNvdXJjZU1hcH0pKTtcblxuXG4gfWNhdGNoKGVycil7XG50aHJvdyBFcnJvcihcbiBgRXJyb3IgdHJhbnNmb3JtaW5nICR7cShsYW5ndWFnZSl9IHNvdXJjZSBpbiAke3EobG9jYXRpb24pfTogJHtlcnIubWVzc2FnZX1gLFxue2NhdXNlOmVycn0pO1xuXG4gfVxuIH1cbmlmKCFoYXMocGFyc2VyRm9yTGFuZ3VhZ2UsbGFuZ3VhZ2UpKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgcGFyc2UgbW9kdWxlICR7c3BlY2lmaWVyfSBhdCAke2xvY2F0aW9ufSwgbm8gcGFyc2VyIGNvbmZpZ3VyZWQgZm9yIHRoZSBsYW5ndWFnZSAke2xhbmd1YWdlfWApO1xuXG4gfVxuY29uc3R7cGFyc2V9PXBhcnNlckZvckxhbmd1YWdlW2xhbmd1YWdlXTtcbnJldHVybiBwYXJzZShieXRlcyxzcGVjaWZpZXIsbG9jYXRpb24scGFja2FnZUxvY2F0aW9uLHtcbnNvdXJjZU1hcCxcbi4uLm9wdGlvbnN9KTtcblxuIH1cblxuLypcblxuICAgKi9cbmNvbnN0IHN5bmNQYXJzZXI9KGJ5dGVzLHNwZWNpZmllcixsb2NhdGlvbixwYWNrYWdlTG9jYXRpb24sb3B0aW9ucyk9PntcbmNvbnN0IHJlc3VsdD1zeW5jVHJhbXBvbGluZShcbmdldFBhcnNlckdlbmVyYXRvcixcbmJ5dGVzLFxuc3BlY2lmaWVyLFxubG9jYXRpb24sXG5wYWNrYWdlTG9jYXRpb24sXG5vcHRpb25zKTtcblxuaWYoJ3RoZW4naW4gcmVzdWx0JiZ0eXBlb2YgcmVzdWx0LnRoZW49PT0nZnVuY3Rpb24nKXtcbnRocm93IG5ldyBUeXBlRXJyb3IoXG4nU3luYyBwYXJzZXIgY2Fubm90IHJldHVybiBhIFRoZW5hYmxlOyBlbnN1cmUgcGFyc2VyIGlzIGFjdHVhbGx5IHN5bmNocm9ub3VzJyk7XG5cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5zeW5jUGFyc2VyLmlzU3luY1BhcnNlcj10cnVlO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXN5bmNQYXJzZXI9YXN5bmMoXG5ieXRlcyxcbnNwZWNpZmllcixcbmxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxub3B0aW9ucyk9Plxue1xucmV0dXJuIGFzeW5jVHJhbXBvbGluZShcbmdldFBhcnNlckdlbmVyYXRvcixcbmJ5dGVzLFxuc3BlY2lmaWVyLFxubG9jYXRpb24sXG5wYWNrYWdlTG9jYXRpb24sXG5vcHRpb25zKTtcblxuIH07XG5cbi8vXG4vL1xuLy9cbmlmKHByZWZlclN5bmNocm9ub3VzKXtcbnRyYW5zZm9ybXM9c3luY01vZHVsZVRyYW5zZm9ybXM7XG5yZXR1cm4gc3luY1BhcnNlcjtcbiB9ZWxzZXtcbi8vXG4vL1xudHJhbnNmb3Jtcz17XG4uLi5zeW5jTW9kdWxlVHJhbnNmb3Jtcyxcbi4uLm1vZHVsZVRyYW5zZm9ybXN9O1xuXG5cbnJldHVybiBhc3luY1BhcnNlcjtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIG1hcFBhcnNlcnMoXG5sYW5ndWFnZUZvckV4dGVuc2lvbixcbmxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5tb2R1bGVUcmFuc2Zvcm1zPXt9LFxuc3luY01vZHVsZVRyYW5zZm9ybXM9e30sXG5wcmVmZXJTeW5jaHJvbm91cz1mYWxzZSlcbntcbmNvbnN0IGxhbmd1YWdlRm9yRXh0ZW5zaW9uRW50cmllcz1bXTtcbmNvbnN0IHByb2JsZW1zPVtdO1xuZm9yKGNvbnN0W2V4dGVuc2lvbixsYW5ndWFnZV1vZiBlbnRyaWVzKGxhbmd1YWdlRm9yRXh0ZW5zaW9uKSl7XG5pZihoYXMocGFyc2VyRm9yTGFuZ3VhZ2UsbGFuZ3VhZ2UpKXtcbmxhbmd1YWdlRm9yRXh0ZW5zaW9uRW50cmllcy5wdXNoKFtleHRlbnNpb24sbGFuZ3VhZ2VdKTtcbiB9ZWxzZXtcbnByb2JsZW1zLnB1c2goIGAke3EobGFuZ3VhZ2UpfSBmb3IgZXh0ZW5zaW9uICR7cShleHRlbnNpb24pfWApO1xuIH1cbiB9XG5pZihwcm9ibGVtcy5sZW5ndGg+MCl7XG50aHJvdyBFcnJvciggYE5vIHBhcnNlciBhdmFpbGFibGUgZm9yIGxhbmd1YWdlOiAke3Byb2JsZW1zLmpvaW4oJywgJyl9YCk7XG4gfVxucmV0dXJuIG1ha2VFeHRlbnNpb25QYXJzZXIoXG5wcmVmZXJTeW5jaHJvbm91cyxcbmZyb21FbnRyaWVzKGxhbmd1YWdlRm9yRXh0ZW5zaW9uRW50cmllcyksXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zKTtcblxuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXBQYXJzZXJzPSh7XG5wYXJzZXJGb3JMYW5ndWFnZSxcbm1vZHVsZVRyYW5zZm9ybXMsXG5zeW5jTW9kdWxlVHJhbnNmb3Jtc30pPT5cbntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBhc3luY1BhcnNlRm49KGxhbmd1YWdlRm9yRXh0ZW5zaW9uLGxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyKT0+XG5tYXBQYXJzZXJzKFxubGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zKTtcblxuXG5pZihtb2R1bGVUcmFuc2Zvcm1zJiZrZXlzKG1vZHVsZVRyYW5zZm9ybXMpLmxlbmd0aD4wKXtcbnJldHVybiBhc3luY1BhcnNlRm47XG4gfVxuXG4vL1xuLy9cbmlmKHZhbHVlcyhwYXJzZXJGb3JMYW5ndWFnZSkuc29tZSgoe3N5bmNocm9ub3VzfSk9PiFzeW5jaHJvbm91cykpe1xucmV0dXJuIGFzeW5jUGFyc2VGbjtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG5yZXR1cm4obGFuZ3VhZ2VGb3JFeHRlbnNpb24sbGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIpPT5cbm1hcFBhcnNlcnMoXG5sYW5ndWFnZUZvckV4dGVuc2lvbixcbmxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5tb2R1bGVUcmFuc2Zvcm1zLFxuc3luY01vZHVsZVRyYW5zZm9ybXMsXG50cnVlKTtcblxuIH07JGjNj19vbmNlLm1ha2VNYXBQYXJzZXJzKG1ha2VNYXBQYXJzZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNYXBQYXJzZXJzIjpbIm1ha2VNYXBQYXJzZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMa0YdV5CgAAeQoAADwAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImpvaW4iLCJyZWxhdGl2aXplIiwicmVzb2x2ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG4gKi9cblxuLy9cblxuLy9cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzb2x2ZT0oc29sdXRpb24scHJvYmxlbSk9PntcbmZvcihjb25zdCBwYXJ0IG9mIHByb2JsZW0pe1xuaWYocGFydD09PScuJ3x8cGFydD09PScnKXtcbi8vXG4gfWVsc2UgaWYocGFydD09PScuLicpe1xuaWYoc29sdXRpb24ubGVuZ3RoPT09MCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuc29sdXRpb24ucG9wKCk7XG4gfWVsc2V7XG5zb2x1dGlvbi5wdXNoKHBhcnQpO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICByZXNvbHZlPShzcGVjLHJlZmVycmVyKT0+e1xuc3BlYz1TdHJpbmcoc3BlY3x8JycpO1xucmVmZXJyZXI9U3RyaW5nKHJlZmVycmVyfHwnJyk7XG5cbmlmKHNwZWMuc3RhcnRzV2l0aCgnLycpKXtcbnRocm93IEVycm9yKCBgTW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IG11c3Qgbm90IGJlZ2luIHdpdGggXCIvXCJgKTtcbiB9XG5pZighcmVmZXJyZXIuc3RhcnRzV2l0aCgnLi8nKSl7XG50aHJvdyBFcnJvciggYE1vZHVsZSByZWZlcnJlciAke3EocmVmZXJyZXIpfSBtdXN0IGJlZ2luIHdpdGggXCIuL1wiYCk7XG4gfVxuXG5jb25zdCBzcGVjUGFydHM9c3BlYy5zcGxpdCgnLycpO1xuY29uc3Qgc29sdXRpb249W107XG5jb25zdCBwcm9ibGVtPVtdO1xuaWYoc3BlY1BhcnRzWzBdPT09Jy4nfHxzcGVjUGFydHNbMF09PT0nLi4nKXtcbmNvbnN0IHJlZmVycmVyUGFydHM9cmVmZXJyZXIuc3BsaXQoJy8nKTtcbnByb2JsZW0ucHVzaCguLi5yZWZlcnJlclBhcnRzKTtcbnByb2JsZW0ucG9wKCk7XG5zb2x1dGlvbi5wdXNoKCcuJyk7XG4gfVxucHJvYmxlbS5wdXNoKC4uLnNwZWNQYXJ0cyk7XG5cbmlmKCFzb2x2ZShzb2x1dGlvbixwcm9ibGVtKSl7XG50aHJvdyBFcnJvcihcbiBgTW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IHZpYSByZWZlcnJlciAke3EoXG5yZWZlcnJlcilcbiB9IG11c3Qgbm90IHRyYXZlcnNlIGJlaGluZCBhbiBlbXB0eSBwYXRoYCk7XG5cbiB9XG5cbnJldHVybiBzb2x1dGlvbi5qb2luKCcvJyk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UucmVzb2x2ZShyZXNvbHZlKTtcbmNvbnN0ICAgICAgICBqb2luPShiYXNlLHNwZWMpPT57XG5zcGVjPVN0cmluZyhzcGVjfHwnJyk7XG5iYXNlPVN0cmluZyhiYXNlfHwnJyk7XG5cbmNvbnN0IHNwZWNQYXJ0cz1zcGVjLnNwbGl0KCcvJyk7XG5jb25zdCBiYXNlUGFydHM9YmFzZS5zcGxpdCgnLycpO1xuXG5pZihzcGVjUGFydHMubGVuZ3RoPjEmJnNwZWNQYXJ0c1swXT09PScnKXtcbnRocm93IEVycm9yKCBgTW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IG11c3Qgbm90IHN0YXJ0IHdpdGggXCIvXCJgKTtcbiB9XG5pZihiYXNlUGFydHNbMF09PT0nLid8fGJhc2VQYXJ0c1swXT09PScuLicpe1xudGhyb3cgRXJyb3IoIGBFeHRlcm5hbCBtb2R1bGUgc3BlY2lmaWVyICR7cShiYXNlKX0gbXVzdCBiZSBhYnNvbHV0ZWApO1xuIH1cbmlmKHNwZWNQYXJ0c1swXSE9PScuJyl7XG50aHJvdyBFcnJvciggYEludGVybmFsIG1vZHVsZSBzcGVjaWZpZXIgJHtxKHNwZWMpfSBtdXN0IGJlIHJlbGF0aXZlYCk7XG4gfVxuXG5jb25zdCBzb2x1dGlvbj1bXTtcbmlmKCFzb2x2ZShzb2x1dGlvbixzcGVjUGFydHMpKXtcbnRocm93IEVycm9yKFxuIGBNb2R1bGUgc3BlY2lmaWVyICR7cShzcGVjKX0gdmlhIGJhc2UgJHtxKFxuYmFzZSlcbiB9IG11c3Qgbm90IHJlZmVyIHRvIGEgbW9kdWxlIG91dHNpZGUgb2YgdGhlIGJhc2VgKTtcblxuIH1cblxucmV0dXJuW2Jhc2UsLi4uc29sdXRpb25dLmpvaW4oJy8nKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmpvaW4oam9pbik7XG5jb25zdCAgICAgICAgcmVsYXRpdml6ZT0oc3BlYyk9PntcbnNwZWM9U3RyaW5nKHNwZWN8fCcnKTtcblxuY29uc3Qgc29sdXRpb249W107XG5pZighc29sdmUoc29sdXRpb24sc3BlYy5zcGxpdCgnLycpKSl7XG50aHJvdyBFcnJvcihcbiBgTW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IG11c3Qgbm90IHRyYXZlcnNlIGJlaGluZCBhbiBlbXB0eSBwYXRoYCk7XG5cbiB9XG5cbnJldHVyblsnLicsLi4uc29sdXRpb25dLmpvaW4oJy8nKTtcbiB9OyRozY9fb25jZS5yZWxhdGl2aXplKHJlbGF0aXZpemUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVzb2x2ZSI6WyJyZXNvbHZlIl0sImpvaW4iOlsiam9pbiJdLCJyZWxhdGl2aXplIjpbInJlbGF0aXZpemUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAoYSfdacEAACnBAAAMgAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL3BhcnNlLWJ5dGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJkZWZhdWx0IiwicGFyc2VCeXRlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuICovXG5cbi8vXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZnJlZXplPU9iamVjdC5mcmVlemU7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBwYXJzZUJ5dGVzPShieXRlcyxfc3BlY2lmaWVyLF9sb2NhdGlvbixfcGFja2FnZUxvY2F0aW9uKT0+e1xuLy9cbmNvbnN0IGJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIoYnl0ZXMubGVuZ3RoKTtcbmNvbnN0IGJ5dGVzVmlldz1uZXcgVWludDhBcnJheShidWZmZXIpO1xuYnl0ZXNWaWV3LnNldChieXRlcyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydHM9ZnJlZXplKFtdKTtcblxuLypcblxuICAgKi9cbmNvbnN0IGV4ZWN1dGU9KGV4cG9ydHMpPT57XG5leHBvcnRzLmRlZmF1bHQ9YnVmZmVyO1xuIH07XG5cbnJldHVybntcbnBhcnNlcjonYnl0ZXMnLFxuYnl0ZXMsXG5yZWNvcmQ6ZnJlZXplKHtcbmltcG9ydHMsXG5leHBvcnRzOmZyZWV6ZShbJ2RlZmF1bHQnXSksXG5leGVjdXRlOmZyZWV6ZShleGVjdXRlKX0pfTtcblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucGFyc2VCeXRlcyhwYXJzZUJ5dGVzKTtcbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDp7XG5wYXJzZTpwYXJzZUJ5dGVzLFxuaGV1cmlzdGljSW1wb3J0czpmYWxzZSxcbnN5bmNocm9ub3VzOnRydWV9fTskaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sInBhcnNlQnl0ZXMiOlsicGFyc2VCeXRlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABFPS7cGREAABkRAABGAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvcGFyc2UtY2pzLXNoYXJlZC1leHBvcnQtd3JhcHBlci5qc3siaW1wb3J0cyI6WyIuL3Bvd2Vycy5qcyJdLCJleHBvcnRzIjpbImdldE1vZHVsZVBhdGhzIiwid3JhcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyxpc1JlYWROb3dQb3dlcnM7JGjNj19pbXBvcnRzKFtbXCIuL3Bvd2Vycy5qc1wiLCBbW1wiZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHNcIiwgWyRozY9fYSA9PiAoZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMgPSAkaM2PX2EpXV0sW1wiaXNSZWFkTm93UG93ZXJzXCIsIFskaM2PX2EgPT4gKGlzUmVhZE5vd1Bvd2VycyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7ZnJlZXplLGtleXMsY3JlYXRlLGhhc093blByb3BlcnR5LGRlZmluZVByb3BlcnR5fT1PYmplY3Q7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGhhcz0ob2JqZWN0LGtleSk9PmFwcGx5KGhhc093blByb3BlcnR5LG9iamVjdCxba2V5XSk7XG5cbmNvbnN0IG5vVHJhaWxpbmdTbGFzaD0ocGF0aCk9PntcbmNvbnN0IGw9cGF0aC5sZW5ndGgtMTtcbnJldHVybiBwYXRoW2xdPT09J1xcXFwnfHxwYXRoW2xdPT09Jy8nP3BhdGguc2xpY2UoMCwtMSk6cGF0aDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNb2R1bGVQYXRocz0ocmVhZFBvd2Vycyxsb2NhdGlvbik9PntcbmlmKFxucmVhZFBvd2VycyYmXG50eXBlb2YgcmVhZFBvd2VycyE9PSdmdW5jdGlvbicmJlxucmVhZFBvd2Vycy5maWxlVVJMVG9QYXRoKVxue1xubGV0IGZpbGVuYW1lPWxvY2F0aW9uO1xubGV0IGRpcm5hbWU7XG50cnl7XG5kaXJuYW1lPW5ldyBVUkwoJy4vJyxmaWxlbmFtZSkuaHJlZjtcbiB9Y2F0Y2goXyl7XG5yZXR1cm57XG5maWxlbmFtZTpudWxsLFxuZGlybmFtZTpudWxsfTtcblxuIH1cblxuZmlsZW5hbWU9cmVhZFBvd2Vycy5maWxlVVJMVG9QYXRoKGZpbGVuYW1lKS50b1N0cmluZygpO1xuZGlybmFtZT1ub1RyYWlsaW5nU2xhc2gocmVhZFBvd2Vycy5maWxlVVJMVG9QYXRoKGRpcm5hbWUpLnRvU3RyaW5nKCkpO1xuXG5yZXR1cm57XG5maWxlbmFtZSxcbmRpcm5hbWV9O1xuXG4gfWVsc2V7XG5yZXR1cm57XG5maWxlbmFtZTpudWxsLFxuZGlybmFtZTpudWxsfTtcblxuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmdldE1vZHVsZVBhdGhzKGdldE1vZHVsZVBhdGhzKTtcbmNvbnN0ICAgICAgICB3cmFwPSh7XG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZCxcbmNvbXBhcnRtZW50LFxucmVzb2x2ZWRJbXBvcnRzLFxubG9jYXRpb24sXG5yZWFkUG93ZXJzfSk9Plxue1xuLy9cbm1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHQ9Y3JlYXRlKFxuY29tcGFydG1lbnQuZ2xvYmFsVGhpcy5PYmplY3QucHJvdG90eXBlKTtcblxuXG4vL1xuLy9cbmNvbnN0IHByb21vdGVUb05hbWVkRXhwb3J0PShwcm9wLHZhbHVlKT0+e1xuLy9cbmlmKHByb3AhPT0nZGVmYXVsdCcpe1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmRbcHJvcF09dmFsdWU7XG4gfVxuIH07XG5cbmNvbnN0IHJlZGVmaW5lZD1uZXcgU2V0KCk7XG5cbmNvbnN0IG9yaWdpbmFsRXhwb3J0cz1uZXcgUHJveHkobW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdCx7XG5zZXQoX3RhcmdldCxwcm9wLHZhbHVlKXtcbnByb21vdGVUb05hbWVkRXhwb3J0KHByb3AsdmFsdWUpO1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdFtwcm9wXT12YWx1ZTtcbnJldHVybiB0cnVlO1xuIH0sXG5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQscHJvcCxkZXNjcmlwdG9yKXtcbmlmKGhhcyhkZXNjcmlwdG9yLCd2YWx1ZScpKXtcbi8vXG4vL1xucHJvbW90ZVRvTmFtZWRFeHBvcnQocHJvcCxkZXNjcmlwdG9yLnZhbHVlKTtcbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlZmluZVByb3BlcnR5KHRhcmdldCxwcm9wLGRlc2NyaXB0b3IpO1xuLy9cbi8vXG5yZWRlZmluZWQuYWRkKHByb3ApO1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbmxldCBmaW5hbEV4cG9ydHM9b3JpZ2luYWxFeHBvcnRzO1xuXG5jb25zdCBtb2R1bGU9ZnJlZXplKHtcbmdldCBleHBvcnRzKCl7XG5yZXR1cm4gZmluYWxFeHBvcnRzO1xuIH0sXG5zZXQgZXhwb3J0cyh2YWx1ZSl7XG5maW5hbEV4cG9ydHM9dmFsdWU7XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXF1aXJlPShpbXBvcnRTcGVjaWZpZXIpPT57XG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBuYW1lc3BhY2U7XG5cbmlmKCFoYXMocmVzb2x2ZWRJbXBvcnRzLGltcG9ydFNwZWNpZmllcikpe1xuaWYoaXNSZWFkTm93UG93ZXJzKHJlYWRQb3dlcnMpKXtcbm5hbWVzcGFjZT1jb21wYXJ0bWVudC5pbXBvcnROb3coaW1wb3J0U3BlY2lmaWVyKTtcbiB9ZWxzZXtcbmNvbnN0IGludmFsaWRQcm9wcz1maW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyhyZWFkUG93ZXJzKS5zb3J0KCk7XG50aHJvdyBuZXcgRXJyb3IoXG4gYFN5bmNocm9ub3VzIHJlYWRQb3dlcnMgcmVxdWlyZWQgZm9yIGR5bmFtaWMgaW1wb3J0IG9mICR7YXNzZXJ0LnF1b3RlKGltcG9ydFNwZWNpZmllcil9OyBtaXNzaW5nIG9yIGludmFsaWQgcHJvcChzKTogJHtpbnZhbGlkUHJvcHMuam9pbignLCAnKX1gKTtcblxuIH1cbiB9ZWxzZXtcbm5hbWVzcGFjZT1jb21wYXJ0bWVudC5pbXBvcnROb3cocmVzb2x2ZWRJbXBvcnRzW2ltcG9ydFNwZWNpZmllcl0pO1xuIH1cblxuLy9cbi8vXG5pZihoYXMobmFtZXNwYWNlLCdkZWZhdWx0Jykpe1xucmV0dXJuIG5hbWVzcGFjZS5kZWZhdWx0O1xuIH1lbHNle1xucmV0dXJuIG5hbWVzcGFjZTtcbiB9XG4gfTtcbmlmKHR5cGVvZiByZWFkUG93ZXJzPT09J29iamVjdCcmJnJlYWRQb3dlcnMucmVxdWlyZVJlc29sdmUpe1xuY29uc3R7cmVxdWlyZVJlc29sdmV9PXJlYWRQb3dlcnM7XG5yZXF1aXJlLnJlc29sdmU9ZnJlZXplKChzcGVjaWZpZXIsb3B0aW9ucyk9PlxucmVxdWlyZVJlc29sdmUobG9jYXRpb24sc3BlY2lmaWVyLG9wdGlvbnMpKTtcblxuIH1lbHNle1xucmVxdWlyZS5yZXNvbHZlPWZyZWV6ZSgoc3BlY2lmaWVyKT0+e1xuY29uc3QgZXJyb3I9RXJyb3IoXG4gYENhbm5vdCBmaW5kIG1vZHVsZSAnJHtzcGVjaWZpZXJ9J1xcbkFkZCByZXF1aXJlUmVzb2x2ZSB0byBFbmRvIENvbXBhcnRtZW50IE1hcHBlciByZWFkUG93ZXJzLmApO1xuXG5kZWZpbmVQcm9wZXJ0eShlcnJvciwnY29kZScse3ZhbHVlOidNT0RVTEVfTk9UX0ZPVU5EJ30pO1xudGhyb3cgZXJyb3I7XG4gfSk7XG4gfVxuXG5mcmVlemUocmVxdWlyZSk7XG5cbmNvbnN0IGFmdGVyRXhlY3V0ZT0oKT0+e1xuY29uc3QgZXhwb3J0c0hhdmVCZWVuT3ZlcndyaXR0ZW49ZmluYWxFeHBvcnRzIT09b3JpZ2luYWxFeHBvcnRzO1xuLy9cbi8vXG4vL1xuaWYoZXhwb3J0c0hhdmVCZWVuT3ZlcndyaXR0ZW4pe1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdD1maW5hbEV4cG9ydHM7XG5mb3IoY29uc3QgcHJvcCBvZiBrZXlzKG1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHR8fHt9KSl7XG5pZihwcm9wIT09J2RlZmF1bHQnKXtcbm1vZHVsZUVudmlyb25tZW50UmVjb3JkW3Byb3BdPW1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHRbcHJvcF07XG4gfVxuIH1cbiB9ZWxzZXtcbmZvcihjb25zdCBwcm9wIG9mIHJlZGVmaW5lZCl7XG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZFtwcm9wXT1tb2R1bGVFbnZpcm9ubWVudFJlY29yZC5kZWZhdWx0W3Byb3BdO1xuIH1cbiB9XG4gfTtcblxucmV0dXJue1xubW9kdWxlLFxubW9kdWxlRXhwb3J0czpvcmlnaW5hbEV4cG9ydHMsXG5hZnRlckV4ZWN1dGUsXG5yZXF1aXJlfTtcblxuIH07JGjNj19vbmNlLndyYXAod3JhcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNb2R1bGVQYXRocyI6WyJnZXRNb2R1bGVQYXRocyJdLCJ3cmFwIjpbIndyYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8Fpe1cAEAADABAAAMQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL3BhcnNlLWpzb24uanN7ImltcG9ydHMiOlsiLi9qc29uLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCIsInBhcnNlSnNvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXJzZUxvY2F0ZWRKc29uOyRozY9faW1wb3J0cyhbW1wiLi9qc29uLmpzXCIsIFtbXCJwYXJzZUxvY2F0ZWRKc29uXCIsIFskaM2PX2EgPT4gKHBhcnNlTG9jYXRlZEpzb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBmcmVlemU9T2JqZWN0LmZyZWV6ZTtcblxuY29uc3QgdGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBwYXJzZUpzb249KGJ5dGVzLF9zcGVjaWZpZXIsbG9jYXRpb24sX3BhY2thZ2VMb2NhdGlvbik9PntcbmNvbnN0IHNvdXJjZT10ZXh0RGVjb2Rlci5kZWNvZGUoYnl0ZXMpO1xuY29uc3QgaW1wb3J0cz1mcmVlemUoW10pO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgZXhlY3V0ZT0oZXhwb3J0cyk9PntcbmV4cG9ydHMuZGVmYXVsdD1wYXJzZUxvY2F0ZWRKc29uKHNvdXJjZSxsb2NhdGlvbik7XG4gfTtcbnJldHVybntcbnBhcnNlcjonanNvbicsXG5ieXRlcyxcbnJlY29yZDpmcmVlemUoe1xuaW1wb3J0cyxcbmV4cG9ydHM6ZnJlZXplKFsnZGVmYXVsdCddKSxcbmV4ZWN1dGU6ZnJlZXplKGV4ZWN1dGUpfSl9O1xuXG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wYXJzZUpzb24ocGFyc2VKc29uKTtcbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDp7XG5wYXJzZTpwYXJzZUpzb24sXG5oZXVyaXN0aWNJbXBvcnRzOmZhbHNlLFxuc3luY2hyb25vdXM6dHJ1ZX19OyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXSwicGFyc2VKc29uIjpbInBhcnNlSnNvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA5ARHiFwcAABcHAAA0AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvcGFyc2UtcHJlLWNqcy5qc3siaW1wb3J0cyI6WyIuL2pzb24uanMiLCIuL3BhcnNlLWNqcy1zaGFyZWQtZXhwb3J0LXdyYXBwZXIuanMiXSwiZXhwb3J0cyI6WyJkZWZhdWx0IiwicGFyc2VQcmVDanMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFyc2VMb2NhdGVkSnNvbix3cmFwLGdldE1vZHVsZVBhdGhzOyRozY9faW1wb3J0cyhbW1wiLi9qc29uLmpzXCIsIFtbXCJwYXJzZUxvY2F0ZWRKc29uXCIsIFskaM2PX2EgPT4gKHBhcnNlTG9jYXRlZEpzb24gPSAkaM2PX2EpXV1dXSxbXCIuL3BhcnNlLWNqcy1zaGFyZWQtZXhwb3J0LXdyYXBwZXIuanNcIiwgW1tcIndyYXBcIiwgWyRozY9fYSA9PiAod3JhcCA9ICRozY9fYSldXSxbXCJnZXRNb2R1bGVQYXRoc1wiLCBbJGjNj19hID0+IChnZXRNb2R1bGVQYXRocyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0IHRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgcGFyc2VQcmVDanM9KFxuYnl0ZXMsXG5fc3BlY2lmaWVyLFxubG9jYXRpb24sXG5fcGFja2FnZUxvY2F0aW9uLFxue3JlYWRQb3dlcnN9PXt9KT0+XG57XG5jb25zdCB0ZXh0PXRleHREZWNvZGVyLmRlY29kZShieXRlcyk7XG5jb25zdHtzb3VyY2UsaW1wb3J0cyxleHBvcnRzLHJlZXhwb3J0c309cGFyc2VMb2NhdGVkSnNvbihcbnRleHQsXG5sb2NhdGlvbik7XG5cblxuY29uc3R7ZmlsZW5hbWUsZGlybmFtZX09Z2V0TW9kdWxlUGF0aHMocmVhZFBvd2Vycyxsb2NhdGlvbik7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgZXhlY3V0ZT0obW9kdWxlRW52aXJvbm1lbnRSZWNvcmQsY29tcGFydG1lbnQscmVzb2x2ZWRJbXBvcnRzKT0+e1xuY29uc3QgZnVuY3Rvcj1jb21wYXJ0bWVudC5ldmFsdWF0ZShzb3VyY2UpO1xuXG5jb25zdHtyZXF1aXJlLG1vZHVsZUV4cG9ydHMsbW9kdWxlLGFmdGVyRXhlY3V0ZX09d3JhcCh7XG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZCxcbmNvbXBhcnRtZW50LFxucmVzb2x2ZWRJbXBvcnRzLFxubG9jYXRpb24sXG5yZWFkUG93ZXJzfSk7XG5cblxuZnVuY3RvcihyZXF1aXJlLG1vZHVsZUV4cG9ydHMsbW9kdWxlLGZpbGVuYW1lLGRpcm5hbWUpO1xuXG5hZnRlckV4ZWN1dGUoKTtcbiB9O1xuXG5yZXR1cm57XG5wYXJzZXI6J3ByZS1janMtanNvbicsXG5ieXRlcyxcbnJlY29yZDp7XG5pbXBvcnRzLFxucmVleHBvcnRzLFxuZXhwb3J0cyxcbmV4ZWN1dGV9fTtcblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucGFyc2VQcmVDanMocGFyc2VQcmVDanMpO1xuY29uc3R7ZGVmYXVsdDokY82PX2RlZmF1bHR9PXtkZWZhdWx0OntcbnBhcnNlOnBhcnNlUHJlQ2pzLFxuaGV1cmlzdGljSW1wb3J0czp0cnVlLFxuc3luY2hyb25vdXM6dHJ1ZX19OyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXSwicGFyc2VQcmVDanMiOlsicGFyc2VQcmVDanMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAjun9oQEFAAABBQAANAAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL3BhcnNlLXByZS1tanMuanN7ImltcG9ydHMiOlsiLi9qc29uLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCIsInBhcnNlUHJlTWpzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlTG9jYXRlZEpzb247JGjNj19pbXBvcnRzKFtbXCIuL2pzb24uanNcIiwgW1tcInBhcnNlTG9jYXRlZEpzb25cIiwgWyRozY9fYSA9PiAocGFyc2VMb2NhdGVkSnNvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCB0ZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIHBhcnNlUHJlTWpzPShcbmJ5dGVzLFxuX3NwZWNpZmllcixcbmxvY2F0aW9uLFxuX3BhY2thZ2VMb2NhdGlvbixcbntzb3VyY2VNYXBVcmx9PXt9KT0+XG57XG5jb25zdCB0ZXh0PXRleHREZWNvZGVyLmRlY29kZShieXRlcyk7XG5jb25zdCByZWNvcmQ9cGFyc2VMb2NhdGVkSnNvbih0ZXh0LGxvY2F0aW9uKTtcbmlmKHNvdXJjZU1hcFVybCl7XG4vL1xucmVjb3JkLl9fc3luY01vZHVsZVByb2dyYW1fXys9IGAvLyMgc291cmNlTWFwcGluZ1VSTD0ke3NvdXJjZU1hcFVybH1cXG5gO1xuIH1lbHNle1xuLy9cbnJlY29yZC5fX3N5bmNNb2R1bGVQcm9ncmFtX18rPSBgLy8jIHNvdXJjZVVSTD0ke2xvY2F0aW9ufVxcbmA7XG4gfVxucmV0dXJue1xucGFyc2VyOidwcmUtbWpzLWpzb24nLFxuYnl0ZXMsXG5yZWNvcmR9O1xuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucGFyc2VQcmVNanMocGFyc2VQcmVNanMpO1xuY29uc3R7ZGVmYXVsdDokY82PX2RlZmF1bHR9PXtkZWZhdWx0OntcbnBhcnNlOnBhcnNlUHJlTWpzLFxuaGV1cmlzdGljSW1wb3J0czpmYWxzZSxcbnN5bmNocm9ub3VzOnRydWV9fTskaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sInBhcnNlUHJlTWpzIjpbInBhcnNlUHJlTWpzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAK1w4oR9BAAAfQQAADEAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9wYXJzZS10ZXh0LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJkZWZhdWx0IiwicGFyc2VUZXh0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGZyZWV6ZT1PYmplY3QuZnJlZXplO1xuXG5jb25zdCB0ZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIHBhcnNlVGV4dD0oYnl0ZXMsX3NwZWNpZmllcixfbG9jYXRpb24sX3BhY2thZ2VMb2NhdGlvbik9PntcbmNvbnN0IHRleHQ9dGV4dERlY29kZXIuZGVjb2RlKGJ5dGVzKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW1wb3J0cz1mcmVlemUoW10pO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgZXhlY3V0ZT0oZXhwb3J0cyk9PntcbmV4cG9ydHMuZGVmYXVsdD10ZXh0O1xuIH07XG5cbnJldHVybntcbnBhcnNlcjondGV4dCcsXG5ieXRlcyxcbnJlY29yZDpmcmVlemUoe1xuaW1wb3J0cyxcbmV4cG9ydHM6ZnJlZXplKFsnZGVmYXVsdCddKSxcbmV4ZWN1dGU6ZnJlZXplKGV4ZWN1dGUpfSl9O1xuXG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wYXJzZVRleHQocGFyc2VUZXh0KTtcbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDp7XG5wYXJzZTpwYXJzZVRleHQsXG5oZXVyaXN0aWNJbXBvcnRzOmZhbHNlLFxuc3luY2hyb25vdXM6dHJ1ZX19OyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXSwicGFyc2VUZXh0IjpbInBhcnNlVGV4dCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADF/csnVRYAAFUWAAA0AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvcG9saWN5LWZvcm1hdC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYXNzZXJ0UGFja2FnZVBvbGljeSIsImFzc2VydFBvbGljeSIsImdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbiIsImlzQWxsb3dpbmdFdmVyeXRoaW5nIiwiaXNBdHRlbnVhdGlvbkRlZmluaXRpb24iLCJwb2xpY3lMb29rdXBIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cbiAqL1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZW50cmllcyxrZXlzfT1PYmplY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbmNvbnN0IEFUVEVOVUFUT1JfS0VZPSdhdHRlbnVhdGUnO1xuY29uc3QgQVRURU5VQVRPUl9QQVJBTVNfS0VZPSdwYXJhbXMnO1xuY29uc3QgV0lMRENBUkRfUE9MSUNZX1ZBTFVFPSdhbnknO1xuY29uc3QgUE9MSUNZX0ZJRUxEU19MT09LVVA9LyogICAgICAgICAgICAgICAgKi9bXG4nYnVpbHRpbnMnLFxuJ2dsb2JhbHMnLFxuJ3BhY2thZ2VzJ107XG5cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwb2xpY3lMb29rdXBIZWxwZXI9KHBhY2thZ2VQb2xpY3ksZmllbGQsaXRlbU5hbWUpPT57XG5pZighUE9MSUNZX0ZJRUxEU19MT09LVVAuaW5jbHVkZXMoZmllbGQpKXtcbnRocm93IEVycm9yKCBgSW52YWxpZCBmaWVsZCAke3EoZmllbGQpfWApO1xuIH1cbmlmKFxudHlwZW9mIHBhY2thZ2VQb2xpY3khPT0nb2JqZWN0J3x8XG5wYWNrYWdlUG9saWN5PT09bnVsbHx8XG4hcGFja2FnZVBvbGljeVtmaWVsZF0pXG57XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5pZihwYWNrYWdlUG9saWN5W2ZpZWxkXT09PVdJTERDQVJEX1BPTElDWV9WQUxVRSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbmNvbnN0IHZhbHVlPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucGFja2FnZVBvbGljeVtmaWVsZF07XG5cbmlmKGl0ZW1OYW1lIGluIHZhbHVlKXtcbnJldHVybiB2YWx1ZVtpdGVtTmFtZV07XG4gfVxucmV0dXJuIGZhbHNlO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5wb2xpY3lMb29rdXBIZWxwZXIocG9saWN5TG9va3VwSGVscGVyKTtcbmNvbnN0ICAgICAgICBpc0FsbG93aW5nRXZlcnl0aGluZz0ocG9saWN5VmFsdWUpPT5cbnBvbGljeVZhbHVlPT09V0lMRENBUkRfUE9MSUNZX1ZBTFVFO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmlzQWxsb3dpbmdFdmVyeXRoaW5nKGlzQWxsb3dpbmdFdmVyeXRoaW5nKTtcbmNvbnN0ICAgICAgICBpc0F0dGVudWF0aW9uRGVmaW5pdGlvbj0oYWxsZWdlZERlZmluaXRpb24pPT57XG5yZXR1cm4gQm9vbGVhbihcbmFsbGVnZWREZWZpbml0aW9uJiZcbnR5cGVvZiBhbGxlZ2VkRGVmaW5pdGlvbj09PSdvYmplY3QnJiZcbnR5cGVvZiBhbGxlZ2VkRGVmaW5pdGlvbltBVFRFTlVBVE9SX0tFWV09PT0nc3RyaW5nJ3x8Ly9cbmlzQXJyYXkoYWxsZWdlZERlZmluaXRpb24pLy9cbik7XG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5pc0F0dGVudWF0aW9uRGVmaW5pdGlvbihpc0F0dGVudWF0aW9uRGVmaW5pdGlvbik7XG5jb25zdCAgICAgICAgZ2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uPShhdHRlbnVhdGlvbkRlZmluaXRpb24pPT57XG5pZighaXNBdHRlbnVhdGlvbkRlZmluaXRpb24oYXR0ZW51YXRpb25EZWZpbml0aW9uKSl7XG50aHJvdyBFcnJvcihcbiBgSW52YWxpZCBhdHRlbnVhdGlvbiAke3EoXG5hdHRlbnVhdGlvbkRlZmluaXRpb24pXG4gfSwgbXVzdCBiZSBhbiBhcnJheSBvZiBwYXJhbXMgZm9yIGRlZmF1bHQgYXR0ZW51YXRvciBvciBhbiBvYmplY3Qgd2l0aCBhbiBhdHRlbnVhdG9yIGtleWApO1xuXG4gfVxuaWYoaXNBcnJheShhdHRlbnVhdGlvbkRlZmluaXRpb24pKXtcbnJldHVybntcbmRpc3BsYXlOYW1lOic8ZGVmYXVsdCBhdHRlbnVhdG9yPicsXG5zcGVjaWZpZXI6bnVsbCxcbnBhcmFtczphdHRlbnVhdGlvbkRlZmluaXRpb259O1xuXG4gfWVsc2V7XG5yZXR1cm57XG5kaXNwbGF5TmFtZTphdHRlbnVhdGlvbkRlZmluaXRpb25bQVRURU5VQVRPUl9LRVldLFxuc3BlY2lmaWVyOmF0dGVudWF0aW9uRGVmaW5pdGlvbltBVFRFTlVBVE9SX0tFWV0sXG5wYXJhbXM6YXR0ZW51YXRpb25EZWZpbml0aW9uW0FUVEVOVUFUT1JfUEFSQU1TX0tFWV19O1xuXG4gfVxuIH07XG5cbi8vXG4kaM2PX29uY2UuZ2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uKGdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbik7Y29uc3QgaXNSZWNvcmRPZj0oaXRlbSxwcmVkaWNhdGUpPT57XG5pZih0eXBlb2YgaXRlbSE9PSdvYmplY3QnfHxpdGVtPT09bnVsbHx8aXNBcnJheShpdGVtKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxucmV0dXJuIGVudHJpZXMoaXRlbSkuZXZlcnkoKFtrZXksdmFsdWVdKT0+cHJlZGljYXRlKHZhbHVlLGtleSkpO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzQm9vbGVhbj0oaXRlbSk9PnR5cGVvZiBpdGVtPT09J2Jvb2xlYW4nO1xuXG4vL1xuY29uc3QgcHJlZGljYXRlT3I9XG4oLi4ucHJlZGljYXRlcyk9PlxuKGl0ZW0pPT5cbnByZWRpY2F0ZXMuc29tZSgocCk9PnAoaXRlbSkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgaXNQb2xpY3lJdGVtPShpdGVtKT0+XG5pdGVtPT09dW5kZWZpbmVkfHxcbml0ZW09PT1XSUxEQ0FSRF9QT0xJQ1lfVkFMVUV8fFxuaXNSZWNvcmRPZihpdGVtLGlzQm9vbGVhbik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0UGFja2FnZVBvbGljeT0oYWxsZWdlZFBhY2thZ2VQb2xpY3kscGF0aCx1cmwpPT57XG5pZihhbGxlZ2VkUGFja2FnZVBvbGljeT09PXVuZGVmaW5lZCl7XG5yZXR1cm47XG4gfVxuY29uc3QgaW5Vcmw9dXJsPyBgIGluICR7cSh1cmwpfWA6Jyc7XG5cbmNvbnN0IHBhY2thZ2VQb2xpY3k9T2JqZWN0KGFsbGVnZWRQYWNrYWdlUG9saWN5KTtcbmFzc2VydChcbmFsbGVnZWRQYWNrYWdlUG9saWN5PT09cGFja2FnZVBvbGljeSYmIWlzQXJyYXkoYWxsZWdlZFBhY2thZ2VQb2xpY3kpLFxuIGAke3BhdGh9IG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHtxKGFsbGVnZWRQYWNrYWdlUG9saWN5KX0ke2luVXJsfWApO1xuXG5jb25zdHtcbnBhY2thZ2VzLFxuYnVpbHRpbnMsXG5nbG9iYWxzLFxubm9HbG9iYWxGcmVlemUsXG5kZWZhdWx0QXR0ZW51YXRvcjpfaWdub3JlLC8vXG4vL1xub3B0aW9ucywvL1xuLi4uZXh0cmF9PVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9wYWNrYWdlUG9saWN5O1xuXG5hc3NlcnQoXG5rZXlzKGV4dHJhKS5sZW5ndGg9PT0wLFxuIGAke3BhdGh9IG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcywgZ290ICR7cShrZXlzKGV4dHJhKSl9JHtpblVybH1gKTtcblxuXG5hc3NlcnQoXG5ub0dsb2JhbEZyZWV6ZT09PXVuZGVmaW5lZHx8dHlwZW9mIG5vR2xvYmFsRnJlZXplPT09J2Jvb2xlYW4nLFxuIGAke3BhdGh9Lm5vR2xvYmFsRnJlZXplIG11c3QgYmUgYSBib29sZWFuLCBnb3QgJHtxKHtcbm5vR2xvYmFsRnJlZXplfSlcbiB9JHtpblVybH1gKTtcblxuXG5pc1BvbGljeUl0ZW0ocGFja2FnZXMpfHxcbmFzc2VydC5mYWlsKFxuIGAke3BhdGh9LnBhY2thZ2VzIG11c3QgYmUgYSByZWNvcmQgb2YgYm9vbGVhbnMsIGdvdCAke3Eoe1xucGFja2FnZXN9KVxuIH0ke2luVXJsfWApO1xuXG5cbmlzUG9saWN5SXRlbShnbG9iYWxzKXx8XG5pc0F0dGVudWF0aW9uRGVmaW5pdGlvbihnbG9iYWxzKXx8XG5hc3NlcnQuZmFpbChcbiBgJHtwYXRofS5nbG9iYWxzIG11c3QgYmUgYSByZWNvcmQgb2YgYm9vbGVhbnMgb3IgYSBzaW5nbGUgYXR0ZW51YXRpb24sIGdvdCAke3EoXG57XG5nbG9iYWxzfSlcblxuIH0ke2luVXJsfWApO1xuXG5cbmlzUG9saWN5SXRlbShidWlsdGlucyl8fFxuaXNSZWNvcmRPZihidWlsdGlucyxwcmVkaWNhdGVPcihpc0Jvb2xlYW4saXNBdHRlbnVhdGlvbkRlZmluaXRpb24pKXx8XG5hc3NlcnQuZmFpbChcbiBgJHtwYXRofS5idWlsdGlucyBtdXN0IGJlIGEgcmVjb3JkIG9mIGJvb2xlYW5zIG9yIGF0dGVudWF0aW9ucywgZ290ICR7cSh7XG5idWlsdGluc30pXG4gfSR7aW5Vcmx9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmFzc2VydFBhY2thZ2VQb2xpY3koYXNzZXJ0UGFja2FnZVBvbGljeSk7XG5jb25zdCAgICAgICAgYXNzZXJ0UG9saWN5PShhbGxlZ2VkUG9saWN5KT0+e1xuaWYoYWxsZWdlZFBvbGljeT09PXVuZGVmaW5lZCl7XG5yZXR1cm47XG4gfVxuY29uc3QgcG9saWN5PU9iamVjdChhbGxlZ2VkUG9saWN5KTtcbmFzc2VydChcbmFsbGVnZWRQb2xpY3k9PT1wb2xpY3kmJiFBcnJheS5pc0FycmF5KHBvbGljeSksXG4gYHBvbGljeSBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7YWxsZWdlZFBvbGljeX1gKTtcblxuXG5jb25zdHtyZXNvdXJjZXMsZW50cnksZGVmYXVsdEF0dGVudWF0b3IsLi4uZXh0cmF9PXBvbGljeTtcbmFzc2VydChcbmtleXMoZXh0cmEpLmxlbmd0aD09PTAsXG4gYHBvbGljeSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3Eoa2V5cyhleHRyYSkpfWApO1xuXG5cbmFzc2VydChcbnR5cGVvZiByZXNvdXJjZXM9PT0nb2JqZWN0JyYmcmVzb3VyY2VzIT09bnVsbCYmIWlzQXJyYXkocmVzb3VyY2VzKSxcbiBgcG9saWN5LnJlc291cmNlcyBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7cShyZXNvdXJjZXMpfWApO1xuXG5hc3NlcnQoXG4hZGVmYXVsdEF0dGVudWF0b3J8fHR5cGVvZiBkZWZhdWx0QXR0ZW51YXRvcj09PSdzdHJpbmcnLFxuIGBwb2xpY3kuZGVmYXVsdEF0dGVudWF0b3IgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShkZWZhdWx0QXR0ZW51YXRvcil9YCk7XG5cblxuYXNzZXJ0UGFja2FnZVBvbGljeShlbnRyeSwgYHBvbGljeS5lbnRyeWApO1xuXG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIGVudHJpZXMocmVzb3VyY2VzKSl7XG5hc3NlcnRQYWNrYWdlUG9saWN5KHZhbHVlLCBgcG9saWN5LnJlc291cmNlc1tcIiR7a2V5fVwiXWApO1xuIH1cbiB9OyRozY9fb25jZS5hc3NlcnRQb2xpY3koYXNzZXJ0UG9saWN5KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InBvbGljeUxvb2t1cEhlbHBlciI6WyJwb2xpY3lMb29rdXBIZWxwZXIiXSwiaXNBbGxvd2luZ0V2ZXJ5dGhpbmciOlsiaXNBbGxvd2luZ0V2ZXJ5dGhpbmciXSwiaXNBdHRlbnVhdGlvbkRlZmluaXRpb24iOlsiaXNBdHRlbnVhdGlvbkRlZmluaXRpb24iXSwiZ2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uIjpbImdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbiJdLCJhc3NlcnRQYWNrYWdlUG9saWN5IjpbImFzc2VydFBhY2thZ2VQb2xpY3kiXSwiYXNzZXJ0UG9saWN5IjpbImFzc2VydFBvbGljeSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAL923sDyUAAA8lAAAtAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvcG9saWN5LmpzeyJpbXBvcnRzIjpbIi4vcG9saWN5LWZvcm1hdC5qcyJdLCJleHBvcnRzIjpbIkFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UIiwiYXR0ZW51YXRlR2xvYmFscyIsImF0dGVudWF0ZU1vZHVsZUhvb2siLCJkZXBlbmRlbmN5QWxsb3dlZEJ5UG9saWN5IiwiZGV0ZWN0QXR0ZW51YXRvcnMiLCJlbmZvcmNlTW9kdWxlUG9saWN5IiwiZ2V0UG9saWN5Rm9yUGFja2FnZSIsIm1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uLGlzQWxsb3dpbmdFdmVyeXRoaW5nLGlzQXR0ZW51YXRpb25EZWZpbml0aW9uLHBvbGljeUxvb2t1cEhlbHBlcjskaM2PX2ltcG9ydHMoW1tcIi4vcG9saWN5LWZvcm1hdC5qc1wiLCBbW1wiZ2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uXCIsIFskaM2PX2EgPT4gKGdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbiA9ICRozY9fYSldXSxbXCJpc0FsbG93aW5nRXZlcnl0aGluZ1wiLCBbJGjNj19hID0+IChpc0FsbG93aW5nRXZlcnl0aGluZyA9ICRozY9fYSldXSxbXCJpc0F0dGVudWF0aW9uRGVmaW5pdGlvblwiLCBbJGjNj19hID0+IChpc0F0dGVudWF0aW9uRGVmaW5pdGlvbiA9ICRozY9fYSldXSxbXCJwb2xpY3lMb29rdXBIZWxwZXJcIiwgWyRozY9fYSA9PiAocG9saWN5TG9va3VwSGVscGVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2NyZWF0ZSxlbnRyaWVzLHZhbHVlcyxhc3NpZ24sZnJlZXplLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAgIEFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UPSc8QVRURU5VQVRPUlM+JztcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQoQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQpO1xuY29uc3Qgc2VsZWN0aXZlQ29weT0oZnJvbSx0byxsaXN0KT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBwcm9wcztcbmlmKCFsaXN0KXtcbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZnJvbSk7XG5wcm9wcz1vd25LZXlzKGZyb20pLmZpbHRlcigoa2V5KT0+ZGVzY3Nba2V5XS5lbnVtZXJhYmxlKTtcbiB9ZWxzZXtcbnByb3BzPWxpc3Q7XG4gfVxuZm9yKGxldCBpbmRleD0wO2luZGV4PHByb3BzLmxlbmd0aDtpbmRleCs9MSl7XG5jb25zdCBrZXk9cHJvcHNbaW5kZXhdO1xuLy9cbi8vXG50b1trZXldPWZyb21ba2V5XTtcbiB9XG5yZXR1cm4gdG87XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbGxlY3RBdHRlbnVhdG9ycz0oYXR0ZW51YXRvcnMscG9saWN5RnJhZ21lbnQpPT57XG5pZignYXR0ZW51YXRlJ2luIHBvbGljeUZyYWdtZW50KXtcbmF0dGVudWF0b3JzLnB1c2gocG9saWN5RnJhZ21lbnQuYXR0ZW51YXRlKTtcbiB9XG5mb3IoY29uc3QgdmFsdWUgb2YgdmFsdWVzKHBvbGljeUZyYWdtZW50KSl7XG5pZih0eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmdmFsdWUhPT1udWxsKXtcbmNvbGxlY3RBdHRlbnVhdG9ycyhhdHRlbnVhdG9ycyx2YWx1ZSk7XG4gfVxuIH1cbiB9O1xuXG5jb25zdCBhdHRlbnVhdG9yc0NhY2hlPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGV0ZWN0QXR0ZW51YXRvcnM9KHBvbGljeSk9PntcbmlmKCFwb2xpY3kpe1xucmV0dXJuW107XG4gfVxuaWYoIWF0dGVudWF0b3JzQ2FjaGUuaGFzKHBvbGljeSkpe1xuY29uc3QgYXR0ZW51YXRvcnM9W107XG5pZihwb2xpY3kuZGVmYXVsdEF0dGVudWF0b3Ipe1xuYXR0ZW51YXRvcnMucHVzaChwb2xpY3kuZGVmYXVsdEF0dGVudWF0b3IpO1xuIH1cbmNvbGxlY3RBdHRlbnVhdG9ycyhhdHRlbnVhdG9ycyxwb2xpY3kpO1xuYXR0ZW51YXRvcnNDYWNoZS5zZXQocG9saWN5LGF0dGVudWF0b3JzKTtcbiB9XG5yZXR1cm4gYXR0ZW51YXRvcnNDYWNoZS5nZXQocG9saWN5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGV0ZWN0QXR0ZW51YXRvcnMoZGV0ZWN0QXR0ZW51YXRvcnMpO1xuY29uc3QgZ2VuZXJhdGVDYW5vbmljYWxOYW1lPSh7aXNFbnRyeT1mYWxzZSxuYW1lLHBhdGh9KT0+e1xuaWYoaXNFbnRyeSl7XG50aHJvdyBFcnJvcignRW50cnkgbW9kdWxlIGNhbm5vdCBiZSBpZGVudGlmaWVkIHdpdGggYSBjYW5vbmljYWxOYW1lJyk7XG4gfVxuaWYobmFtZT09PUFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UKXtcbnJldHVybiBBVFRFTlVBVE9SU19DT01QQVJUTUVOVDtcbiB9XG5yZXR1cm4gcGF0aC5qb2luKCc+Jyk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlcGVuZGVuY3lBbGxvd2VkQnlQb2xpY3k9KG5hbWluZ0tpdCxwYWNrYWdlUG9saWN5KT0+e1xuaWYobmFtaW5nS2l0LmlzRW50cnkpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBjYW5vbmljYWxOYW1lPWdlbmVyYXRlQ2Fub25pY2FsTmFtZShuYW1pbmdLaXQpO1xucmV0dXJuISFwb2xpY3lMb29rdXBIZWxwZXIocGFja2FnZVBvbGljeSwncGFja2FnZXMnLGNhbm9uaWNhbE5hbWUpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVwZW5kZW5jeUFsbG93ZWRCeVBvbGljeShkZXBlbmRlbmN5QWxsb3dlZEJ5UG9saWN5KTtcbmNvbnN0ICAgICAgICBnZXRQb2xpY3lGb3JQYWNrYWdlPShuYW1pbmdLaXQscG9saWN5KT0+e1xuaWYoIXBvbGljeSl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmlmKG5hbWluZ0tpdC5pc0VudHJ5KXtcbnJldHVybiBwb2xpY3kuZW50cnk7XG4gfVxuY29uc3QgY2Fub25pY2FsTmFtZT1nZW5lcmF0ZUNhbm9uaWNhbE5hbWUobmFtaW5nS2l0KTtcbmlmKGNhbm9uaWNhbE5hbWU9PT1BVFRFTlVBVE9SU19DT01QQVJUTUVOVCl7XG5yZXR1cm57XG5kZWZhdWx0QXR0ZW51YXRvcjpwb2xpY3kuZGVmYXVsdEF0dGVudWF0b3IsXG5wYWNrYWdlczonYW55J307XG5cbiB9XG5pZihwb2xpY3kucmVzb3VyY2VzJiZwb2xpY3kucmVzb3VyY2VzW2Nhbm9uaWNhbE5hbWVdIT09dW5kZWZpbmVkKXtcbnJldHVybiBwb2xpY3kucmVzb3VyY2VzW2Nhbm9uaWNhbE5hbWVdO1xuIH1lbHNle1xuLy9cbnJldHVybiBjcmVhdGUobnVsbCk7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuZ2V0UG9saWN5Rm9yUGFja2FnZShnZXRQb2xpY3lGb3JQYWNrYWdlKTtcbmNvbnN0IGdldEdsb2JhbHNMaXN0PShwYWNrYWdlUG9saWN5KT0+e1xuaWYoIXBhY2thZ2VQb2xpY3l8fCFwYWNrYWdlUG9saWN5Lmdsb2JhbHMpe1xucmV0dXJuW107XG4gfVxucmV0dXJuIGVudHJpZXMocGFja2FnZVBvbGljeS5nbG9iYWxzKS5cbmZpbHRlcigoW19rZXksdmFsdWVdKT0+dmFsdWUpLlxubWFwKChba2V5LF92dmFsdWVdKT0+a2V5KTtcbiB9O1xuXG5jb25zdCBHTE9CQUxfQVRURU5VQVRPUj0nYXR0ZW51YXRlR2xvYmFscyc7XG5jb25zdCBNT0RVTEVfQVRURU5VQVRPUj0nYXR0ZW51YXRlTW9kdWxlJztcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGltcG9ydEF0dGVudWF0b3JGb3JEZWZpbml0aW9uPWFzeW5jKFxuYXR0ZW51YXRpb25EZWZpbml0aW9uLFxuYXR0ZW51YXRvcnNQcm92aWRlcixcbmF0dGVudWF0b3JFeHBvcnROYW1lKT0+XG57XG5pZighYXR0ZW51YXRvcnNQcm92aWRlcil7XG50aHJvdyBFcnJvciggYGF0dGVudWF0b3JzUHJvdmlkZXIgaXMgcmVxdWlyZWQgdG8gaW1wb3J0IGF0dGVudWF0b3JzYCk7XG4gfVxuY29uc3R7c3BlY2lmaWVyLHBhcmFtcyxkaXNwbGF5TmFtZX09Z2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uKFxuYXR0ZW51YXRpb25EZWZpbml0aW9uKTtcblxuY29uc3QgYXR0ZW51YXRvcj1hd2FpdCBhdHRlbnVhdG9yc1Byb3ZpZGVyLmltcG9ydChzcGVjaWZpZXIpO1xuaWYoIWF0dGVudWF0b3JbYXR0ZW51YXRvckV4cG9ydE5hbWVdKXtcbnRocm93IEVycm9yKFxuIGBBdHRlbnVhdG9yICR7cShkaXNwbGF5TmFtZSl9IGRvZXMgbm90IGV4cG9ydCAke3EoYXR0ZW51YXRvckV4cG9ydE5hbWUpfWApO1xuXG4gfVxuLy9cbmNvbnN0IGF0dGVudWF0ZT1hdHRlbnVhdG9yW2F0dGVudWF0b3JFeHBvcnROYW1lXS5iaW5kKGF0dGVudWF0b3IscGFyYW1zKTtcbnJldHVybiBhdHRlbnVhdGU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlcj0oXG5jb21wYXJ0bWVudHMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzKT0+XG57XG5sZXQgaW1wb3J0QXR0ZW51YXRvcjtcbmxldCBkZWZhdWx0QXR0ZW51YXRvcjtcbi8vXG4vL1xuaWYoIWNvbXBhcnRtZW50RGVzY3JpcHRvcnNbQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRdKXtcbmltcG9ydEF0dGVudWF0b3I9YXN5bmMoKT0+e1xudGhyb3cgRXJyb3IoIGBObyBhdHRlbnVhdG9ycyBzcGVjaWZpZWQgaW4gcG9saWN5YCk7XG4gfTtcbiB9ZWxzZXtcbmRlZmF1bHRBdHRlbnVhdG9yPVxuY29tcGFydG1lbnREZXNjcmlwdG9yc1tBVFRFTlVBVE9SU19DT01QQVJUTUVOVF0ucG9saWN5LmRlZmF1bHRBdHRlbnVhdG9yO1xuXG4vL1xuLy9cbi8vXG4vKlxuXG5cblxuICAgICAqL1xuaW1wb3J0QXR0ZW51YXRvcj1hc3luYyhhdHRlbnVhdG9yU3BlY2lmaWVyKT0+e1xuaWYoIWF0dGVudWF0b3JTcGVjaWZpZXIpe1xuaWYoIWRlZmF1bHRBdHRlbnVhdG9yKXtcbnRocm93IEVycm9yKCBgTm8gZGVmYXVsdCBhdHRlbnVhdG9yIHNwZWNpZmllZCBpbiBwb2xpY3lgKTtcbiB9XG5hdHRlbnVhdG9yU3BlY2lmaWVyPWRlZmF1bHRBdHRlbnVhdG9yO1xuIH1cbmNvbnN0e25hbWVzcGFjZX09XG5hd2FpdCBjb21wYXJ0bWVudHNbQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRdLmltcG9ydChhdHRlbnVhdG9yU3BlY2lmaWVyKTtcbnJldHVybiBuYW1lc3BhY2U7XG4gfTtcbiB9XG5cbnJldHVybntcbmltcG9ydDppbXBvcnRBdHRlbnVhdG9yfTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyKG1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXIpO1xuYXN5bmMgZnVuY3Rpb24gYXR0ZW51YXRlR2xvYmFsVGhpcyh7XG5hdHRlbnVhdG9ycyxcbmF0dGVudWF0aW9uRGVmaW5pdGlvbixcbmdsb2JhbFRoaXMsXG5nbG9iYWxzfSlcbntcbmNvbnN0IGF0dGVudWF0ZT1hd2FpdCBpbXBvcnRBdHRlbnVhdG9yRm9yRGVmaW5pdGlvbihcbmF0dGVudWF0aW9uRGVmaW5pdGlvbixcbmF0dGVudWF0b3JzLFxuR0xPQkFMX0FUVEVOVUFUT1IpO1xuXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbi8vXG5cbmNvbnN0IHJlc3VsdD0vKiAgICAgICAqL2F0dGVudWF0ZShnbG9iYWxzLGdsb2JhbFRoaXMpO1xuaWYodHlwZW9mIHJlc3VsdD09PSdvYmplY3QnJiZyZXN1bHQhPT1udWxsKXtcbmFzc2lnbihnbG9iYWxUaGlzLHJlc3VsdCk7XG4gfVxuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGF0dGVudWF0ZUdsb2JhbHM9KFxuZ2xvYmFsVGhpcyxcbmdsb2JhbHMsXG5wYWNrYWdlUG9saWN5LFxuYXR0ZW51YXRvcnMsXG5wZW5kaW5nSm9icyxcbm5hbWU9Jzx1bmtub3duPicpPT5cbntcbmxldCBmcmVlemVHbG9iYWxUaGlzVW5sZXNzT3B0ZWRPdXQ9KCk9PntcbmZyZWV6ZShnbG9iYWxUaGlzKTtcbiB9O1xuaWYocGFja2FnZVBvbGljeSYmcGFja2FnZVBvbGljeS5ub0dsb2JhbEZyZWV6ZSl7XG5mcmVlemVHbG9iYWxUaGlzVW5sZXNzT3B0ZWRPdXQ9KCk9PnsgfTtcbiB9XG5pZighcGFja2FnZVBvbGljeXx8aXNBbGxvd2luZ0V2ZXJ5dGhpbmcocGFja2FnZVBvbGljeS5nbG9iYWxzKSl7XG5zZWxlY3RpdmVDb3B5KGdsb2JhbHMsZ2xvYmFsVGhpcyk7XG5mcmVlemVHbG9iYWxUaGlzVW5sZXNzT3B0ZWRPdXQoKTtcbnJldHVybjtcbiB9XG5pZihpc0F0dGVudWF0aW9uRGVmaW5pdGlvbihwYWNrYWdlUG9saWN5Lmdsb2JhbHMpKXtcbmNvbnN0IGF0dGVudWF0aW9uRGVmaW5pdGlvbj1wYWNrYWdlUG9saWN5Lmdsb2JhbHM7XG5jb25zdHtkaXNwbGF5TmFtZX09Z2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uKGF0dGVudWF0aW9uRGVmaW5pdGlvbik7XG5jb25zdCBhdHRlbnVhdGlvblByb21pc2U9UHJvbWlzZS5yZXNvbHZlKCkvL1xuLnRoZW4oKCk9PlxuYXR0ZW51YXRlR2xvYmFsVGhpcyh7XG5hdHRlbnVhdG9ycyxcbmF0dGVudWF0aW9uRGVmaW5pdGlvbixcbmdsb2JhbFRoaXMsXG5nbG9iYWxzfSkpLlxuXG5cbnRoZW4oZnJlZXplR2xvYmFsVGhpc1VubGVzc09wdGVkT3V0LChlcnJvcik9PntcbmZyZWV6ZUdsb2JhbFRoaXNVbmxlc3NPcHRlZE91dCgpO1xudGhyb3cgRXJyb3IoXG4gYEVycm9yIHdoaWxlIGF0dGVudWF0aW5nIGdsb2JhbHMgZm9yICR7cShuYW1lKX0gd2l0aCAke3EoXG5kaXNwbGF5TmFtZSlcbiB9OiAke3EoZXJyb3IubWVzc2FnZSl9YC8vXG4pO1xuIH0pO1xucGVuZGluZ0pvYnMucHVzaChhdHRlbnVhdGlvblByb21pc2UpO1xuXG5yZXR1cm47XG4gfVxuY29uc3QgbGlzdD1nZXRHbG9iYWxzTGlzdChwYWNrYWdlUG9saWN5KTtcbnNlbGVjdGl2ZUNvcHkoZ2xvYmFscyxnbG9iYWxUaGlzLGxpc3QpO1xuZnJlZXplR2xvYmFsVGhpc1VubGVzc09wdGVkT3V0KCk7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuYXR0ZW51YXRlR2xvYmFscyhhdHRlbnVhdGVHbG9iYWxzKTtcbmNvbnN0IGRpYWdub3NlTW9kdWxlUG9saWN5PShlcnJvckhpbnQpPT57XG5pZighZXJyb3JIaW50KXtcbnJldHVybicnO1xuIH1cbnJldHVybiBgIChpbmZvOiAke2Vycm9ySGludH0pYDtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBlbmZvcmNlTW9kdWxlUG9saWN5PShcbnNwZWNpZmllcixcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbntleGl0LGVycm9ySGludH09e30pPT5cbntcbmNvbnN0e3BvbGljeSxtb2R1bGVzLGxhYmVsfT1jb21wYXJ0bWVudERlc2NyaXB0b3I7XG5pZighcG9saWN5KXtcbnJldHVybjtcbiB9XG5cbmlmKCFleGl0KXtcbmlmKCFtb2R1bGVzW3NwZWNpZmllcl0pe1xudGhyb3cgRXJyb3IoXG4gYEltcG9ydGluZyAke3Eoc3BlY2lmaWVyKX0gaW4gJHtxKFxubGFiZWwpXG4gfSB3YXMgbm90IGFsbG93ZWQgYnkgcGFja2FnZXMgcG9saWN5ICR7cShcbnBvbGljeS5wYWNrYWdlcylcbiB9JHtkaWFnbm9zZU1vZHVsZVBvbGljeShlcnJvckhpbnQpfWApO1xuXG4gfVxucmV0dXJuO1xuIH1cblxuaWYoIXBvbGljeUxvb2t1cEhlbHBlcihwb2xpY3ksJ2J1aWx0aW5zJyxzcGVjaWZpZXIpKXtcbnRocm93IEVycm9yKFxuIGBJbXBvcnRpbmcgJHtxKHNwZWNpZmllcil9IHdhcyBub3QgYWxsb3dlZCBieSBwb2xpY3kgYnVpbHRpbnM6JHtxKFxucG9saWN5LmJ1aWx0aW5zKVxuIH0ke2RpYWdub3NlTW9kdWxlUG9saWN5KGVycm9ySGludCl9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5lbmZvcmNlTW9kdWxlUG9saWN5KGVuZm9yY2VNb2R1bGVQb2xpY3kpO1xuYXN5bmMgZnVuY3Rpb24gYXR0ZW51YXRlTW9kdWxlKHtcbmF0dGVudWF0b3JzLFxuYXR0ZW51YXRpb25EZWZpbml0aW9uLFxub3JpZ2luYWxNb2R1bGVSZWNvcmR9KVxue1xuY29uc3QgYXR0ZW51YXRlPWF3YWl0IGltcG9ydEF0dGVudWF0b3JGb3JEZWZpbml0aW9uKFxuYXR0ZW51YXRpb25EZWZpbml0aW9uLFxuYXR0ZW51YXRvcnMsXG5NT0RVTEVfQVRURU5VQVRPUik7XG5cblxuLy9cbi8vXG5cbnJldHVybiBmcmVlemUoe1xuaW1wb3J0czpvcmlnaW5hbE1vZHVsZVJlY29yZC5pbXBvcnRzLFxuLy9cbi8vXG5leHBvcnRzOm9yaWdpbmFsTW9kdWxlUmVjb3JkLmV4cG9ydHMsXG5leGVjdXRlOihtb2R1bGVFeHBvcnRzLGNvbXBhcnRtZW50LHJlc29sdmVkSW1wb3J0cyk9PntcbmNvbnN0IG5zPXt9O1xub3JpZ2luYWxNb2R1bGVSZWNvcmQuZXhlY3V0ZShucyxjb21wYXJ0bWVudCxyZXNvbHZlZEltcG9ydHMpO1xuY29uc3QgYXR0ZW51YXRlZD1hdHRlbnVhdGUobnMpO1xubW9kdWxlRXhwb3J0cy5kZWZhdWx0PWF0dGVudWF0ZWQ7XG5hc3NpZ24obW9kdWxlRXhwb3J0cyxhdHRlbnVhdGVkKTtcbiB9fSk7XG5cbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGF0dGVudWF0ZU1vZHVsZUhvb2s9YXN5bmMoXG5zcGVjaWZpZXIsXG5vcmlnaW5hbE1vZHVsZVJlY29yZCxcbnBvbGljeSxcbmF0dGVudWF0b3JzKT0+XG57XG5jb25zdCBwb2xpY3lWYWx1ZT1wb2xpY3lMb29rdXBIZWxwZXIocG9saWN5LCdidWlsdGlucycsc3BlY2lmaWVyKTtcbmlmKCFwb2xpY3l8fHBvbGljeVZhbHVlPT09dHJ1ZSl7XG5yZXR1cm4gb3JpZ2luYWxNb2R1bGVSZWNvcmQ7XG4gfVxuXG5pZighcG9saWN5VmFsdWUpe1xudGhyb3cgRXJyb3IoXG4gYEF0dGVudWF0aW9uIGZhaWxlZCAnJHtzcGVjaWZpZXJ9JyB3YXMgbm90IGluIHBvbGljeSBidWlsdGluczoke3EoXG5wb2xpY3kuYnVpbHRpbnMpXG4gfWApO1xuXG4gfVxucmV0dXJuIGF0dGVudWF0ZU1vZHVsZSh7XG5hdHRlbnVhdG9ycyxcbmF0dGVudWF0aW9uRGVmaW5pdGlvbjpwb2xpY3lWYWx1ZSxcbm9yaWdpbmFsTW9kdWxlUmVjb3JkfSk7XG5cbiB9OyRozY9fb25jZS5hdHRlbnVhdGVNb2R1bGVIb29rKGF0dGVudWF0ZU1vZHVsZUhvb2spO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQiOlsiQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQiXSwiZGV0ZWN0QXR0ZW51YXRvcnMiOlsiZGV0ZWN0QXR0ZW51YXRvcnMiXSwiZGVwZW5kZW5jeUFsbG93ZWRCeVBvbGljeSI6WyJkZXBlbmRlbmN5QWxsb3dlZEJ5UG9saWN5Il0sImdldFBvbGljeUZvclBhY2thZ2UiOlsiZ2V0UG9saWN5Rm9yUGFja2FnZSJdLCJtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyIjpbIm1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXIiXSwiYXR0ZW51YXRlR2xvYmFscyI6WyJhdHRlbnVhdGVHbG9iYWxzIl0sImVuZm9yY2VNb2R1bGVQb2xpY3kiOlsiZW5mb3JjZU1vZHVsZVBvbGljeSJdLCJhdHRlbnVhdGVNb2R1bGVIb29rIjpbImF0dGVudWF0ZU1vZHVsZUhvb2siXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAI8TEZEwJAABMCQAALQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL3Bvd2Vycy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMiLCJpc1JlYWROb3dQb3dlcnMiLCJ1bnBhY2tSZWFkUG93ZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG4gKi9cblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtmcmVlemV9PU9iamVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNhbm9uaWNhbFNoaW09YXN5bmMocGF0aCk9PnBhdGg7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgdW5wYWNrUmVhZFBvd2Vycz0ocG93ZXJzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVhZDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgbWF5YmVSZWFkO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBjYW5vbmljYWw7XG5cbmlmKHR5cGVvZiBwb3dlcnM9PT0nZnVuY3Rpb24nKXtcbnJlYWQ9cG93ZXJzO1xuIH1lbHNle1xuKHtyZWFkLG1heWJlUmVhZCxjYW5vbmljYWx9PS8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Bvd2Vycyk7XG4gfVxuXG5pZihjYW5vbmljYWw9PT11bmRlZmluZWQpe1xuY2Fub25pY2FsPWNhbm9uaWNhbFNoaW07XG4gfVxuXG5pZihtYXliZVJlYWQ9PT11bmRlZmluZWQpe1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5tYXliZVJlYWQ9KHBhdGgpPT5cbi8qICAgICAgICAgICAgICAgICAqL3JlYWQocGF0aCkuY2F0Y2goKF9lcnJvcik9PnVuZGVmaW5lZCk7XG4gfVxuXG5yZXR1cm57XG4uLi5wb3dlcnMsXG5yZWFkLFxubWF5YmVSZWFkLFxuY2Fub25pY2FsfTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UudW5wYWNrUmVhZFBvd2Vycyh1bnBhY2tSZWFkUG93ZXJzKTtcbmNvbnN0IHJlcXVpcmVkUmVhZE5vd1Bvd2Vyc1Byb3BzPWZyZWV6ZShcbi8qICAgICAgICAgICAgICAgICovWydmaWxlVVJMVG9QYXRoJywnaXNBYnNvbHV0ZScsJ21heWJlUmVhZE5vdyddKTtcblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1JlYWROb3dQb3dlcnM9KHZhbHVlKT0+XG5Cb29sZWFuKFxudmFsdWUmJlxudHlwZW9mIHZhbHVlPT09J29iamVjdCcmJlxucmVxdWlyZWRSZWFkTm93UG93ZXJzUHJvcHMuZXZlcnkoXG4ocHJvcCk9PnByb3AgaW4gdmFsdWUmJnR5cGVvZiB2YWx1ZVtwcm9wXT09PSdmdW5jdGlvbicpKTtcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5pc1JlYWROb3dQb3dlcnMoaXNSZWFkTm93UG93ZXJzKTtcbmNvbnN0ICAgICAgICBmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcz0odmFsdWUpPT57XG5pZighdmFsdWV8fHR5cGVvZiB2YWx1ZT09PSdmdW5jdGlvbicpe1xucmV0dXJuWy4uLnJlcXVpcmVkUmVhZE5vd1Bvd2Vyc1Byb3BzXTtcbiB9XG5yZXR1cm4gcmVxdWlyZWRSZWFkTm93UG93ZXJzUHJvcHMuZmlsdGVyKFxuKHByb3ApPT4hKHByb3AgaW4gdmFsdWUpfHx0eXBlb2YgdmFsdWVbcHJvcF0hPT0nZnVuY3Rpb24nKTtcblxuIH07JGjNj19vbmNlLmZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzKGZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InVucGFja1JlYWRQb3dlcnMiOlsidW5wYWNrUmVhZFBvd2VycyJdLCJpc1JlYWROb3dQb3dlcnMiOlsiaXNSZWFkTm93UG93ZXJzIl0sImZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzIjpbImZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMUY5zqUAQAAlAEAACEAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW52LW9wdGlvbnMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkrdHfuwNAADsDQAAKwAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNy9zcmMvZW52LW9wdGlvbnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiLCJnZXRFbnZpcm9ubWVudE9wdGlvbiIsImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiLCJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuXG5jb25zdHtmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuXG4vL1xuLy9cbmNvbnN0IHVuY3VycnlUaGlzPVxuKGZuKT0+XG4ocmVjZWl2ZXIsLi4uYXJncyk9PlxuYXBwbHkoZm4scmVjZWl2ZXIsYXJncyk7XG5jb25zdCBhcnJheVB1c2g9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuY29uc3QgYXJyYXlJbmNsdWRlcz11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xuY29uc3Qgc3RyaW5nU3BsaXQ9dW5jdXJyeVRoaXMoU3RyaW5nLnByb3RvdHlwZS5zcGxpdCk7XG5cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbmNvbnN0IEZhaWw9KGxpdGVyYWxzLC4uLmFyZ3MpPT57XG5sZXQgbXNnPWxpdGVyYWxzWzBdO1xuZm9yKGxldCBpPTA7aTxhcmdzLmxlbmd0aDtpKz0xKXtcbm1zZz0gYCR7bXNnfSR7YXJnc1tpXX0ke2xpdGVyYWxzW2krMV19YDtcbiB9XG50aHJvdyBFcnJvcihtc2cpO1xuIH07XG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW52aXJvbm1lbnRDYXB0b3I9KGFHbG9iYWwsZHJvcE5hbWVzPWZhbHNlKT0+e1xuY29uc3QgY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPVtdO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbj0oXG5vcHRpb25OYW1lLFxuZGVmYXVsdFNldHRpbmcsXG5vcHRPdGhlclZhbHVlcz11bmRlZmluZWQpPT5cbntcbnR5cGVvZiBvcHRpb25OYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWUgJHtxKG9wdGlvbk5hbWUpfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG50eXBlb2YgZGVmYXVsdFNldHRpbmc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gZGVmYXVsdCBzZXR0aW5nICR7cShcbmRlZmF1bHRTZXR0aW5nKVxuIH0gbXVzdCBiZSBhIHN0cmluZy5gO1xuXG4vKiAgICAgICAgICAgICAgICAgKi9cbmxldCBzZXR0aW5nPWRlZmF1bHRTZXR0aW5nO1xuY29uc3QgZ2xvYmFsUHJvY2Vzcz1hR2xvYmFsLnByb2Nlc3N8fHVuZGVmaW5lZDtcbmNvbnN0IGdsb2JhbEVudj1cbnR5cGVvZiBnbG9iYWxQcm9jZXNzPT09J29iamVjdCcmJmdsb2JhbFByb2Nlc3MuZW52fHx1bmRlZmluZWQ7XG5pZih0eXBlb2YgZ2xvYmFsRW52PT09J29iamVjdCcpe1xuaWYob3B0aW9uTmFtZSBpbiBnbG9iYWxFbnYpe1xuaWYoIWRyb3BOYW1lcyl7XG5hcnJheVB1c2goY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzLG9wdGlvbk5hbWUpO1xuIH1cbmNvbnN0IG9wdGlvblZhbHVlPWdsb2JhbEVudltvcHRpb25OYW1lXTtcbi8vXG50eXBlb2Ygb3B0aW9uVmFsdWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZWQgJHtxKFxub3B0aW9uTmFtZSlcbiB9LCBpZiBwcmVzZW50LCBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHN0cmluZyB2YWx1ZSwgZ290ICR7cShcbm9wdGlvblZhbHVlKVxuIH1gO1xuc2V0dGluZz1vcHRpb25WYWx1ZTtcbiB9XG4gfVxub3B0T3RoZXJWYWx1ZXM9PT11bmRlZmluZWR8fFxuc2V0dGluZz09PWRlZmF1bHRTZXR0aW5nfHxcbmFycmF5SW5jbHVkZXMob3B0T3RoZXJWYWx1ZXMsc2V0dGluZyl8fFxuRmFpbCBgVW5yZWNvZ25pemVkICR7cShvcHRpb25OYW1lKX0gdmFsdWUgJHtxKFxuc2V0dGluZylcbiB9LiBFeHBlY3RlZCBvbmUgb2YgJHtxKFtkZWZhdWx0U2V0dGluZywuLi5vcHRPdGhlclZhbHVlc10pfWA7XG5yZXR1cm4gc2V0dGluZztcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdD0ob3B0aW9uTmFtZSk9PntcbmNvbnN0IG9wdGlvbj1nZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCcnKTtcbnJldHVybiBmcmVlemUob3B0aW9uPT09Jyc/W106c3RyaW5nU3BsaXQob3B0aW9uLCcsJykpO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7XG5cbmNvbnN0IGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXM9KG9wdGlvbk5hbWUsZWxlbWVudCk9PlxuYXJyYXlJbmNsdWRlcyhnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KG9wdGlvbk5hbWUpLGVsZW1lbnQpO1xuXG5jb25zdCBnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9KCk9PntcbnJldHVybiBmcmVlemUoWy4uLmNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc10pO1xuIH07XG5mcmVlemUoZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzKTtcblxucmV0dXJuIGZyZWV6ZSh7XG5nZXRFbnZpcm9ubWVudE9wdGlvbixcbmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QsXG5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLFxuZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRW52aXJvbm1lbnRDYXB0b3IobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcbmZyZWV6ZShtYWtlRW52aXJvbm1lbnRDYXB0b3IpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAge1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc309XG5tYWtlRW52aXJvbm1lbnRDYXB0b3IoZ2xvYmFsVGhpcyx0cnVlKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb24oZ2V0RW52aXJvbm1lbnRPcHRpb24pOyRozY9fb25jZS5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpOyRozY9fb25jZS5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVudmlyb25tZW50Q2FwdG9yIjpbIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbiI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbiJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IjpbImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiXSwiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPxwaTHfBwAA3wcAABwAAABAZW5kby9lcnJvcnMtdjEuMi43L2luZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJGYWlsIiwiWCIsImFubm90YXRlRXJyb3IiLCJhc3NlcnQiLCJiIiwiYmFyZSIsIm1ha2VFcnJvciIsIm5vdGUiLCJxIiwicXVvdGUiLCJyZWRhY3RlZCIsInRocm93UmVkYWN0ZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG5cbmNvbnN0IGdsb2JhbEFzc2VydD1nbG9iYWxUaGlzLmFzc2VydDtcblxuaWYoZ2xvYmFsQXNzZXJ0PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQsIGltcG9ydCAnc2VzJyBiZWZvcmUgJ0BlbmRvL2Vycm9ycydgKTtcblxuIH1cblxuY29uc3QgbWlzc2luZz0vKiAgICAgICAgICAgICAgICAqL1tcbid0eXBlb2YnLFxuJ2Vycm9yJyxcbidmYWlsJyxcbidlcXVhbCcsXG4nc3RyaW5nJyxcbidub3RlJyxcbidkZXRhaWxzJyxcbidGYWlsJyxcbidxdW90ZScsXG4vL1xuLy9cbi8vXG4vL1xuJ21ha2VBc3NlcnQnXS5cbmZpbHRlcigobmFtZSk9Pmdsb2JhbEFzc2VydFtuYW1lXT09PXVuZGVmaW5lZCk7XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQgbWV0aG9kcyAke21pc3Npbmcuam9pbihcbicsICcpXG4gfWApO1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5jb25zdHtcbmJhcmUsXG5kZXRhaWxzOnJlZGFjdGVkLFxuZXJyb3I6bWFrZUVycm9yLFxuRmFpbDp0aHJvd1JlZGFjdGVkLFxubWFrZUFzc2VydDpfb21pdHRlZE1ha2VBc3NlcnQsXG5ub3RlLFxucXVvdGUsXG4uLi5hc3NlcnRpb25zfT1cbmdsb2JhbEFzc2VydDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbiRozY9fb25jZS5yZWRhY3RlZChyZWRhY3RlZCk7JGjNj19vbmNlLm1ha2VFcnJvcihtYWtlRXJyb3IpOyRozY9fb25jZS50aHJvd1JlZGFjdGVkKHRocm93UmVkYWN0ZWQpOyRozY9fb25jZS5ub3RlKG5vdGUpOyRozY9fb25jZS5xdW90ZShxdW90ZSk7Y29uc3QgYXNzZXJ0PSh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk9PlxuZ2xvYmFsQXNzZXJ0KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKTskaM2PX29uY2UuYXNzZXJ0KGFzc2VydCk7XG5PYmplY3QuYXNzaWduKGFzc2VydCxhc3NlcnRpb25zKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgYmFyZU9yUXVvdGU9YmFyZXx8cXVvdGU7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYmFyZU9yUXVvdGUoYmFyZU9yUXVvdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVkYWN0ZWQiOlsicmVkYWN0ZWQiXSwiWCI6WyJyZWRhY3RlZCJdLCJtYWtlRXJyb3IiOlsibWFrZUVycm9yIl0sInRocm93UmVkYWN0ZWQiOlsidGhyb3dSZWRhY3RlZCJdLCJGYWlsIjpbInRocm93UmVkYWN0ZWQiXSwibm90ZSI6WyJub3RlIl0sImFubm90YXRlRXJyb3IiOlsibm90ZSJdLCJxdW90ZSI6WyJxdW90ZSJdLCJxIjpbInF1b3RlIl0sImFzc2VydCI6WyJhc3NlcnQiXSwiYmFyZSI6WyJiYXJlT3JRdW90ZSJdLCJiIjpbImJhcmVPclF1b3RlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH5dVSulEAAApRAAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvRS5qc3siaW1wb3J0cyI6WyIuL3RyYWNrLXR1cm5zLmpzIiwiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0cmFja1R1cm5zLG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcjskaM2PX2ltcG9ydHMoW1tcIi4vdHJhY2stdHVybnMuanNcIiwgW1tcInRyYWNrVHVybnNcIiwgWyRozY9fYSA9PiAodHJhY2tUdXJucyA9ICRozY9fYSldXV1dLFtcIi4vbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbW1wibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyXCIsIFskaM2PX2EgPT4gKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuY29uc3R7ZGV0YWlsczpYLHF1b3RlOnEsRmFpbCxlcnJvcjptYWtlRXJyb3J9PWFzc2VydDtcbmNvbnN0e2Fzc2lnbixjcmVhdGV9PU9iamVjdDtcblxuLypcblxuICovXG5cbmNvbnN0IG9uU2VuZD1tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIoJ0VORE9fU0VORF9CUkVBS1BPSU5UUycpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcj17XG5zZXQoX3RhcmdldCxfcHJvcCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5pc0V4dGVuc2libGUoX3RhcmdldCl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbnNldFByb3RvdHlwZU9mKF90YXJnZXQsX3ZhbHVlKXtcbnJldHVybiBmYWxzZTtcbiB9LFxuZGVsZXRlUHJvcGVydHkoX3RhcmdldCxfcHJvcCl7XG5yZXR1cm4gZmFsc2U7XG4gfX07XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVByb3h5SGFuZGxlcj0ocmVjaXBpZW50LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmdldDooX3RhcmdldCxwcm9wZXJ0eUtleSxyZWNlaXZlcik9PntcbnJldHVybiBoYXJkZW4oXG57XG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuaWYodGhpcyE9PXJlY2VpdmVyKXtcbi8vXG5yZXR1cm4gSGFuZGxlZFByb21pc2UucmVqZWN0KFxubWFrZUVycm9yKFxuWCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EocHJvcGVydHlLZXkpfVwiIG1ldGhvZCBvZiBFKCR7cShcbnJlY2lwaWVudClcbiB9KWApKTtcblxuXG4gfVxuXG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5hcHBseU1ldGhvZChyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG4gfVxuLy9cbn1bcHJvcGVydHlLZXldKTtcblxuIH0sXG5hcHBseTooX3RhcmdldCxfdGhpc0FyZyxhcmdBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ0FycmF5KTtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW3Byb3BlcnR5S2V5XSguLi5hcmdzKXtcbi8vXG50aGlzPT09cmVjZWl2ZXJ8fFxuRmFpbCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EoXG5wcm9wZXJ0eUtleSlcbiB9XCIgbWV0aG9kIG9mIEUuc2VuZE9ubHkoJHtxKHJlY2lwaWVudCl9KWA7XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbkhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kU2VuZE9ubHkocmVjaXBpZW50LHByb3BlcnR5S2V5LGFyZ3MpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ3NBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvblNlbmRPbmx5KHJlY2lwaWVudCxhcmdzQXJyYXkpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRUdldFByb3h5SGFuZGxlcj0oeCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5oYXM6KF90YXJnZXQsX3Byb3ApPT50cnVlLFxuZ2V0OihfdGFyZ2V0LHByb3ApPT5IYW5kbGVkUHJvbWlzZS5nZXQoeCxwcm9wKX0pO1xuXG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZUU9KEhhbmRsZWRQcm9taXNlKT0+e1xucmV0dXJuIGhhcmRlbihcbmFzc2lnbihcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuLy9cbih4KT0+aGFyZGVuKG5ldyBQcm94eSgoKT0+eyB9LG1ha2VFUHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldDooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eShjcmVhdGUobnVsbCksbWFrZUVHZXRQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xucmVzb2x2ZTpIYW5kbGVkUHJvbWlzZS5yZXNvbHZlLFxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuc2VuZE9ubHk6KHgpPT5cbi8vXG5oYXJkZW4oXG5uZXcgUHJveHkoKCk9PnsgfSxtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbndoZW46KHgsb25mdWxmaWxsZWQsb25yZWplY3RlZCk9PlxuSGFuZGxlZFByb21pc2UucmVzb2x2ZSh4KS50aGVuKFxuLi4udHJhY2tUdXJucyhbb25mdWxmaWxsZWQsb25yZWplY3RlZF0pKX0pKTtcblxuXG5cblxuIH07XG5cbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDptYWtlRX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9sb2NhbC5qc3siaW1wb3J0cyI6WyIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6WyJnZXRNZXRob2ROYW1lcyIsImxvY2FsQXBwbHlGdW5jdGlvbiIsImxvY2FsQXBwbHlNZXRob2QiLCJsb2NhbEdldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsZ2V0UHJvdG90eXBlT2YsZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCBudHlwZW9mPShzcGVjaW1lbik9PnNwZWNpbWVuPT09bnVsbD8nbnVsbCc6dHlwZW9mIHNwZWNpbWVuO1xuXG5jb25zdCBvbkRlbGl2ZXJ5PW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19ERUxJVkVSWV9CUkVBS1BPSU5UUycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzT2JqZWN0PSh2YWwpPT5PYmplY3QodmFsKT09PXZhbDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoZGVzY3MpKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTtcbi8vXG4vL1xuJGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5RnVuY3Rpb24obG9jYWxBcHBseUZ1bmN0aW9uKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlNZXRob2Q9KHJlY2lwaWVudCxtZXRob2ROYW1lLGFyZ3MpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGxvY2FsQXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJncyk7XG4gfVxuaWYocmVjaXBpZW50PT09dW5kZWZpbmVkfHxyZWNpcGllbnQ9PT1udWxsKXtcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGRlbGl2ZXIgJHtxKG1ldGhvZE5hbWUpfSB0byB0YXJnZXQ7IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZuPXJlY2lwaWVudFttZXRob2ROYW1lXTtcbmlmKGZuPT09dW5kZWZpbmVkKXtcbmFzc2VydC5mYWlsKFxuWCBgdGFyZ2V0IGhhcyBubyBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSwgaGFzICR7cShcbmdldE1ldGhvZE5hbWVzKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZnR5cGU9bnR5cGVvZihmbik7XG50eXBlb2YgZm49PT0nZnVuY3Rpb24nfHxcbkZhaWwgYGludm9rZWQgbWV0aG9kICR7cShtZXRob2ROYW1lKX0gaXMgbm90IGEgZnVuY3Rpb247IGl0IGlzIGEgJHtxKFxuZnR5cGUpXG4gfWA7XG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LG1ldGhvZE5hbWUpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkoZm4scmVjaXBpZW50LGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5TWV0aG9kKGxvY2FsQXBwbHlNZXRob2QpO1xuXG5jb25zdCAgICAgICAgbG9jYWxHZXQ9KHQsa2V5KT0+dFtrZXldOyRozY9fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAABjnBM6QwAAOkMAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRozY9fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7aGFzT3duLGZyZWV6ZSxlbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0IGlzSlNPTlJlY29yZD0odmFsKT0+XG50eXBlb2YgdmFsPT09J29iamVjdCcmJnZhbCE9PW51bGwmJiFBcnJheS5pc0FycmF5KHZhbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNpbXBsaWZ5VGFnPSh0YWcpPT57XG5mb3IoY29uc3QgcHJlZml4IG9mWydBbGxlZ2VkOiAnLCdEZWJ1Z05hbWU6ICddKXtcbmlmKHRhZy5zdGFydHNXaXRoKHByZWZpeCkpe1xucmV0dXJuIHRhZy5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiB9XG4gfVxucmV0dXJuIHRhZztcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcj0ob3B0aW9uTmFtZSk9PntcbmxldCBicmVha3BvaW50cz1KU09OLnBhcnNlKGdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJ251bGwnKSk7XG5cbmlmKGJyZWFrcG9pbnRzPT09bnVsbCl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgYnJlYWtwb2ludHNUYWJsZTtcblxuY29uc3QgZ2V0QnJlYWtwb2ludHM9KCk9PmJyZWFrcG9pbnRzO1xuZnJlZXplKGdldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2V0QnJlYWtwb2ludHM9KG5ld0JyZWFrcG9pbnRzPWJyZWFrcG9pbnRzKT0+e1xuaXNKU09OUmVjb3JkKG5ld0JyZWFrcG9pbnRzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbiB0byBiZSBhIEpTT04gYnJlYWtwb2ludHMgcmVjb3JkYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgbmV3QnJlYWtwb2ludHNUYWJsZT17X19wcm90b19fOm51bGx9O1xuXG5mb3IoY29uc3RbdGFnLG1ldGhvZEJQc11vZiBlbnRyaWVzKG5ld0JyZWFrcG9pbnRzKSl7XG50YWc9PT1zaW1wbGlmeVRhZyh0YWcpfHxcbkZhaWwgYEp1c3QgdXNlIHNpbXBsZSB0YWcgJHtxKHNpbXBsaWZ5VGFnKHRhZykpfSByYXRoZXIgdGhhbiAke3EodGFnKX1gO1xuaXNKU09OUmVjb3JkKG1ldGhvZEJQcyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EoXG50YWcpXG4gfSB0byBiZSBhIEpTT04gbWV0aG9kcyBicmVha3BvaW50cyByZWNvcmRgO1xuZm9yKGNvbnN0W21ldGhvZE5hbWUsY291bnRdb2YgZW50cmllcyhtZXRob2RCUHMpKXtcbmNvdW50PT09JyonfHxcbnR5cGVvZiBjb3VudD09PSdudW1iZXInJiZcbk51bWJlci5pc1NhZmVJbnRlZ2VyKGNvdW50KSYmXG5jb3VudD49MHx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cSh0YWcpfS4ke3EoXG5tZXRob2ROYW1lKVxuIH0gdG8gYmUgXCIqXCIgb3IgYSBub24tbmVnYXRpdmUgaW50ZWdlcmA7XG5cbmNvbnN0IGNsYXNzQlBzPWhhc093bihuZXdCcmVha3BvaW50c1RhYmxlLG1ldGhvZE5hbWUpP1xubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXTpcbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV09e1xuLy9cbl9fcHJvdG9fXzpudWxsfTtcblxuY2xhc3NCUHNbdGFnXT1jb3VudDtcbiB9XG4gfVxuYnJlYWtwb2ludHM9bmV3QnJlYWtwb2ludHM7XG5icmVha3BvaW50c1RhYmxlPW5ld0JyZWFrcG9pbnRzVGFibGU7XG4gfTtcbmZyZWV6ZShzZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNob3VsZEJyZWFrcG9pbnQ9KHJlY2lwaWVudCxtZXRob2ROYW1lKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBjbGFzc0JQcz1icmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdfHxicmVha3BvaW50c1RhYmxlWycqJ107XG5pZihjbGFzc0JQcz09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxubGV0IHRhZz1zaW1wbGlmeVRhZyhyZWNpcGllbnRbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG5sZXQgY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnRhZz0nKic7XG5jb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5pZihjb3VudD09PScqJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjb3VudD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuYXNzZXJ0KHR5cGVvZiBjb3VudD09PSdudW1iZXInJiZjb3VudD49MSk7XG5jbGFzc0JQc1t0YWddPWNvdW50LTE7XG5yZXR1cm4gZmFsc2U7XG4gfTtcbmZyZWV6ZShzaG91bGRCcmVha3BvaW50KTtcblxuY29uc3QgYnJlYWtwb2ludFRlc3Rlcj1mcmVlemUoe1xuZ2V0QnJlYWtwb2ludHMsXG5zZXRCcmVha3BvaW50cyxcbnNob3VsZEJyZWFrcG9pbnR9KTtcblxuYnJlYWtwb2ludFRlc3Rlci5zZXRCcmVha3BvaW50cygpO1xucmV0dXJuIGJyZWFrcG9pbnRUZXN0ZXI7XG4gfTskaM2PX29uY2UubWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcik7XG5mcmVlemUobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3NyYy9uby1zaGltLmpzeyJpbXBvcnRzIjpbIi4vRS5qcyIsIi4vZXhwb3J0cy5qcyJdLCJleHBvcnRzIjpbIkUiLCJIYW5kbGVkUHJvbWlzZSJdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VFOyRozY9faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKG1ha2VFID0gJGjNj19hKV1dXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgaHA9SGFuZGxlZFByb21pc2U7JGjNj19vbmNlLmhwKGhwKTtcbmNvbnN0ICAgICAgICBFPW1ha2VFKGhwKTskaM2PX29uY2UuRShFKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkhhbmRsZWRQcm9taXNlIjpbImhwIl0sIkUiOlsiRSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACGqKbHXwkAAF8JAAAtAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL3RyYWNrLXR1cm5zLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsidHJhY2tUdXJucyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IGhpZGRlblByaW9yRXJyb3I7XG5sZXQgaGlkZGVuQ3VycmVudFR1cm49MDtcbmxldCBoaWRkZW5DdXJyZW50RXZlbnQ9MDtcblxuLy9cbmNvbnN0IFZFUkJPU0U9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCd0cmFjay10dXJucycpO1xuXG4vL1xuLy9cbmNvbnN0IEVOQUJMRUQ9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignVFJBQ0tfVFVSTlMnLCdkaXNhYmxlZCcsWydlbmFibGVkJ10pPT09J2VuYWJsZWQnO1xuXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBhZGRSZWplY3Rpb25Ob3RlPShkZXRhaWxzTm90ZSk9PihyZWFzb24pPT57XG5pZihyZWFzb24gaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKHJlYXNvbixkZXRhaWxzTm90ZSk7XG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnUkVKRUNURUQgYXQgdG9wIG9mIGV2ZW50IGxvb3AnLHJlYXNvbik7XG4gfVxuIH07XG5cbmNvbnN0IHdyYXBGdW5jdGlvbj1cbihmdW5jLHNlbmRpbmdFcnJvcixYKT0+XG4oLi4uYXJncyk9PntcbmhpZGRlblByaW9yRXJyb3I9c2VuZGluZ0Vycm9yO1xuaGlkZGVuQ3VycmVudFR1cm4rPTE7XG5oaWRkZW5DdXJyZW50RXZlbnQ9MDtcbnRyeXtcbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbmlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUoXG5lcnIsXG5YIGBUaHJvd24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1RIUk9XTiB0byB0b3Agb2YgZXZlbnQgbG9vcCcsZXJyKTtcbiB9XG50aHJvdyBlcnI7XG4gfVxuLy9cbmNvbnN0IGRldGFpbHNOb3RlPVggYFJlamVjdGlvbiBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWA7XG5Qcm9taXNlLnJlc29sdmUocmVzdWx0KS5jYXRjaChhZGRSZWplY3Rpb25Ob3RlKGRldGFpbHNOb3RlKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH1maW5hbGx5e1xuaGlkZGVuUHJpb3JFcnJvcj11bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRyYWNrVHVybnM9KGZ1bmNzKT0+e1xuaWYoIUVOQUJMRUR8fHR5cGVvZiBnbG9iYWxUaGlzPT09J3VuZGVmaW5lZCd8fCFnbG9iYWxUaGlzLmFzc2VydCl7XG5yZXR1cm4gZnVuY3M7XG4gfVxuY29uc3R7ZGV0YWlsczpYLG5vdGU6YW5ub3RhdGVFcnJvcn09Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmhpZGRlbkN1cnJlbnRFdmVudCs9MTtcbmNvbnN0IHNlbmRpbmdFcnJvcj1FcnJvcihcbiBgRXZlbnQ6ICR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG5pZihoaWRkZW5QcmlvckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Ioc2VuZGluZ0Vycm9yLFggYENhdXNlZCBieTogJHtoaWRkZW5QcmlvckVycm9yfWApO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICovXG5mdW5jcy5tYXAoKGZ1bmMpPT5mdW5jJiZ3cmFwRnVuY3Rpb24oZnVuYyxzZW5kaW5nRXJyb3IsWCkpKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9sb2NhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2xvY2FsLmpzIjpbWyJnZXRNZXRob2ROYW1lcyIsImdldE1ldGhvZE5hbWVzIl1dLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjpbWyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiLCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGnwGZ8zCgAAMwoAADUAAABAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMS9zcmMvY29tcGFydG1lbnQtd3JhcHBlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsid3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCwgJ25hbWUnLCB7dmFsdWU6IFwid3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnRcIn0pOyRozY9fb25jZS53cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCh3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCk7ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgY29tcGFydG1lbnRPcHRpb25zPSguLi5hcmdzKT0+e1xuaWYoYXJncy5sZW5ndGg9PT0wKXtcbnJldHVybnt9O1xuIH1cbmlmKFxuYXJncy5sZW5ndGg9PT0xJiZcbnR5cGVvZiBhcmdzWzBdPT09J29iamVjdCcmJlxuYXJnc1swXSE9PW51bGwmJlxuJ19fb3B0aW9uc19fJ2luIGFyZ3NbMF0pXG57XG5jb25zdHtfX29wdGlvbnNfXywuLi5vcHRpb25zfT1hcmdzWzBdO1xuYXNzZXJ0KFxuX19vcHRpb25zX189PT10cnVlLFxuIGBDb21wYXJ0bWVudCBjb25zdHJ1Y3RvciBvbmx5IHN1cHBvcnRzIHRydWUgX19vcHRpb25zX18gc2lnaWwsIGdvdCAke19fb3B0aW9uc19ffWApO1xuXG5yZXR1cm4gb3B0aW9ucztcbiB9ZWxzZXtcbmNvbnN0W1xuZ2xvYmFscz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICove30sXG5tb2R1bGVzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICove30sXG5vcHRpb25zPXt9XT1cbmFyZ3M7XG5hc3NlcnQuZXF1YWwoXG5vcHRpb25zLm1vZHVsZXMsXG51bmRlZmluZWQsXG4gYENvbXBhcnRtZW50IGNvbnN0cnVjdG9yIG11c3QgcmVjZWl2ZSBlaXRoZXIgYSBtb2R1bGUgbWFwIGFyZ3VtZW50IG9yIG1vZHVsZXMgb3B0aW9uLCBub3QgYm90aGApO1xuXG5hc3NlcnQuZXF1YWwoXG5vcHRpb25zLmdsb2JhbHMsXG51bmRlZmluZWQsXG4gYENvbXBhcnRtZW50IGNvbnN0cnVjdG9yIG11c3QgcmVjZWl2ZSBlaXRoZXIgZ2xvYmFscyBhcmd1bWVudCBvciBvcHRpb24sIG5vdCBib3RoYCk7XG5cbnJldHVybntcbi4uLm9wdGlvbnMsXG5nbG9iYWxzLFxubW9kdWxlc307XG5cbiB9XG4gfTtcblxuZnVuY3Rpb24gICAgICAgIHdyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50KFxuT2xkQ29tcGFydG1lbnQsXG5pbmVzY2FwYWJsZVRyYW5zZm9ybXMsXG5pbmVzY2FwYWJsZUdsb2JhbFByb3BlcnRpZXMpXG57XG4vL1xuLy9cbi8vXG5jb25zdCBOZXdDb21wYXJ0bWVudD1mdW5jdGlvbiBDb21wYXJ0bWVudCguLi5hcmdzKXtcbmNvbnN0e3RyYW5zZm9ybXM6b2xkVHJhbnNmb3Jtcz1bXSwuLi5vdGhlck9wdGlvbnN9PVxuY29tcGFydG1lbnRPcHRpb25zKC4uLmFyZ3MpO1xuY29uc3QgbmV3VHJhbnNmb3Jtcz1bLi4ub2xkVHJhbnNmb3JtcywuLi5pbmVzY2FwYWJsZVRyYW5zZm9ybXNdO1xuY29uc3QgbmV3T3B0aW9ucz17XG4uLi5vdGhlck9wdGlvbnMsXG50cmFuc2Zvcm1zOm5ld1RyYW5zZm9ybXMsXG5fX29wdGlvbnNfXzp0cnVlfTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuaWYobmV3LnRhcmdldD09PXVuZGVmaW5lZCl7XG4vL1xudGhyb3cgRXJyb3IoJ0NvbXBhcnRtZW50IG11c3QgYmUgY2FsbGVkIGFzIGEgY29uc3RydWN0b3InKTtcbiB9XG5cbi8vXG5cbmNvbnN0IGM9UmVmbGVjdC5jb25zdHJ1Y3QoT2xkQ29tcGFydG1lbnQsW25ld09wdGlvbnNdLG5ldy50YXJnZXQpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYy5nbG9iYWxUaGlzLkNvbXBhcnRtZW50PU5ld0NvbXBhcnRtZW50O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5mb3IoY29uc3QgcHJvcCBvZiBSZWZsZWN0Lm93bktleXMoaW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzKSl7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoYy5nbG9iYWxUaGlzLHByb3Ase1xudmFsdWU6aW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzW3Byb3BdLFxud3JpdGFibGU6dHJ1ZSxcbi8vXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOnRydWV9KTtcblxuIH1cblxucmV0dXJuIGM7XG4gfTtcblxuLy9cbk5ld0NvbXBhcnRtZW50LnByb3RvdHlwZT1PbGRDb21wYXJ0bWVudC5wcm90b3R5cGU7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5yZXR1cm4gTmV3Q29tcGFydG1lbnQ7XG4gfVxuXG4vL1xuLy9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IndyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50IjpbIndyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABzGkF4jDAAAIwwAACcAAABAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1hcmNoaXZlLmpzIiwiQGVuZG8vYmFzZTY0IiwiQGVuZG8vZXJyb3JzIiwiLi9jb21wYXJ0bWVudC13cmFwcGVyLmpzIl0sImV4cG9ydHMiOlsiaW1wb3J0QnVuZGxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlQXJjaGl2ZSxkZWNvZGVCYXNlNjQsRmFpbCx3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtYXJjaGl2ZS5qc1wiLCBbW1wicGFyc2VBcmNoaXZlXCIsIFskaM2PX2EgPT4gKHBhcnNlQXJjaGl2ZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Jhc2U2NFwiLCBbW1wiZGVjb2RlQmFzZTY0XCIsIFskaM2PX2EgPT4gKGRlY29kZUJhc2U2NCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9jb21wYXJ0bWVudC13cmFwcGVyLmpzXCIsIFtbXCJ3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudFwiLCBbJGjNj19hID0+ICh3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGltcG9ydEJ1bmRsZSwgJ25hbWUnLCB7dmFsdWU6IFwiaW1wb3J0QnVuZGxlXCJ9KTskaM2PX29uY2UuaW1wb3J0QnVuZGxlKGltcG9ydEJ1bmRsZSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG5cbmFzeW5jIGZ1bmN0aW9uICAgICAgICBpbXBvcnRCdW5kbGUoYnVuZGxlLG9wdGlvbnM9e30scG93ZXJzPXt9KXtcbmF3YWl0IG51bGw7XG5jb25zdHtcbmJ1bmRsZVVybD11bmRlZmluZWQsXG5maWxlUHJlZml4LFxuZW5kb3dtZW50czpvcHRFbmRvd21lbnRzPXt9LFxuLy9cbi8vXG50cmFuc2Zvcm1zPVtdLFxuaW5lc2NhcGFibGVUcmFuc2Zvcm1zPVtdLFxuaW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzPXt9LFxuZXhwZWN0ZWRTaGE1MTI9dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdHtcbmNvbXB1dGVTaGE1MTI9dW5kZWZpbmVkLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uPXVuZGVmaW5lZCxcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbj11bmRlZmluZWR9PVxucG93ZXJzO1xuY29uc3QgZW5kb3dtZW50cz17XG5UZXh0RW5jb2RlcixcblRleHREZWNvZGVyLFxuVVJMOmdsb2JhbFRoaXMuVVJMLC8vXG5CYXNlNjQ6Z2xvYmFsVGhpcy5CYXNlNjQsLy9cbmF0b2I6Z2xvYmFsVGhpcy5hdG9iLFxuYnRvYTpnbG9iYWxUaGlzLmJ0b2EsXG4uLi5vcHRFbmRvd21lbnRzfTtcblxuXG5sZXQgQ29tcGFydG1lbnRUb1VzZT1Db21wYXJ0bWVudDtcbmlmKFxuaW5lc2NhcGFibGVUcmFuc2Zvcm1zLmxlbmd0aHx8XG5PYmplY3Qua2V5cyhpbmVzY2FwYWJsZUdsb2JhbFByb3BlcnRpZXMpLmxlbmd0aClcbntcbi8vXG5Db21wYXJ0bWVudFRvVXNlPXdyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50KFxuQ29tcGFydG1lbnQsXG5pbmVzY2FwYWJsZVRyYW5zZm9ybXMsXG5pbmVzY2FwYWJsZUdsb2JhbFByb3BlcnRpZXMpO1xuXG4gfVxuXG5sZXQgY29tcGFydG1lbnQ7XG5cbmNvbnN0e21vZHVsZUZvcm1hdH09YnVuZGxlO1xuaWYobW9kdWxlRm9ybWF0PT09J2VuZG9aaXBCYXNlNjQnKXtcbmNvbnN0e2VuZG9aaXBCYXNlNjR9PWJ1bmRsZTtcbmNvbnN0IGJ5dGVzPWRlY29kZUJhc2U2NChlbmRvWmlwQmFzZTY0KTtcbmNvbnN0IGFyY2hpdmU9YXdhaXQgcGFyc2VBcmNoaXZlKGJ5dGVzLGJ1bmRsZVVybCx7XG5jb21wdXRlU2hhNTEyLFxuZXhwZWN0ZWRTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb259KTtcblxuLy9cbi8vXG5jb25zdHtuYW1lc3BhY2V9PWF3YWl0IGFyY2hpdmVbJ2ltcG9ydCddKHtcbmdsb2JhbHM6ZW5kb3dtZW50cyxcbl9fc2hpbVRyYW5zZm9ybXNfXzp0cmFuc2Zvcm1zLFxuLy9cbkNvbXBhcnRtZW50OkNvbXBhcnRtZW50VG9Vc2V9KTtcblxuLy9cbnJldHVybiBuYW1lc3BhY2U7XG4gfVxuXG5sZXR7c291cmNlfT1idW5kbGU7XG5jb25zdHtzb3VyY2VNYXB9PWJ1bmRsZTtcbmlmKG1vZHVsZUZvcm1hdD09PSdnZXRFeHBvcnQnKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuc291cmNlPSBgKCR7c291cmNlfSlcXG4ke3NvdXJjZU1hcHx8Jyd9YDtcbiB9ZWxzZSBpZihtb2R1bGVGb3JtYXQ9PT0nbmVzdGVkRXZhbHVhdGUnKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5lbmRvd21lbnRzLm5lc3RlZEV2YWx1YXRlPShzcmMpPT5jb21wYXJ0bWVudC5ldmFsdWF0ZShzcmMpO1xuc291cmNlPSBgKCR7c291cmNlfSlcXG4ke3NvdXJjZU1hcHx8Jyd9YDtcbiB9ZWxzZSBpZihtb2R1bGVGb3JtYXQ9PT0nZW5kb1NjcmlwdCcpe1xuLy9cbiB9ZWxzZXtcbkZhaWwgYHVucmVjb2duaXplZCBtb2R1bGVGb3JtYXQgJyR7bW9kdWxlRm9ybWF0fSdgO1xuIH1cblxuY29tcGFydG1lbnQ9bmV3IENvbXBhcnRtZW50VG9Vc2UoZW5kb3dtZW50cyx7fSx7dHJhbnNmb3Jtc30pO1xuaGFyZGVuKGNvbXBhcnRtZW50Lmdsb2JhbFRoaXMpO1xuY29uc3QgcmVzdWx0PWNvbXBhcnRtZW50LmV2YWx1YXRlKHNvdXJjZSk7XG5pZihtb2R1bGVGb3JtYXQ9PT0nZW5kb1NjcmlwdCcpe1xuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH1lbHNle1xuLy9cbmNvbnN0IG5hbWVzcGFjZT1yZXN1bHQoZmlsZVByZWZpeCk7XG4vL1xucmV0dXJuIG5hbWVzcGFjZTtcbiB9XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuKi9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImltcG9ydEJ1bmRsZSI6WyJpbXBvcnRCdW5kbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuIFp8HQHAAB0BwAAHQAAAEBlbmRvL21hcnNoYWwtdjEuNi4xL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vc3JjL21hcnNoYWwuanMiLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIiwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiLCIuL3NyYy9yYW5rT3JkZXIuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsInBhcnNlIiwicGFyc2UiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1wiLCBbXV0sW1wiLi9zcmMvZW5jb2RlUGFzc2FibGUuanNcIiwgW11dLFtcIi4vc3JjL3JhbmtPcmRlci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOltbIlFDTEFTUyIsIlFDTEFTUyJdXSwiLi9zcmMvbWFyc2hhbC5qcyI6W1sibWFrZU1hcnNoYWwiLCJtYWtlTWFyc2hhbCJdXSwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOltbInN0cmluZ2lmeSIsInN0cmluZ2lmeSJdLFsicGFyc2UiLCJwYXJzZSJdXSwiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOltbImRlY29kZVRvSnVzdGluIiwiZGVjb2RlVG9KdXN0aW4iXV0sIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjpbWyJtYWtlUGFzc2FibGVLaXQiLCJtYWtlUGFzc2FibGVLaXQiXSxbIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSJdLFsibWFrZURlY29kZVBhc3NhYmxlIiwibWFrZURlY29kZVBhc3NhYmxlIl0sWyJpc0VuY29kZWRSZW1vdGFibGUiLCJpc0VuY29kZWRSZW1vdGFibGUiXSxbInplcm9QYWQiLCJ6ZXJvUGFkIl0sWyJyZWNvcmROYW1lcyIsInJlY29yZE5hbWVzIl0sWyJyZWNvcmRWYWx1ZXMiLCJyZWNvcmRWYWx1ZXMiXV0sIi4vc3JjL3JhbmtPcmRlci5qcyI6W1sidHJpdmlhbENvbXBhcmF0b3IiLCJ0cml2aWFsQ29tcGFyYXRvciJdLFsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiXSxbImNvbXBhcmVSYW5rIiwiY29tcGFyZVJhbmsiXSxbImlzUmFua1NvcnRlZCIsImlzUmFua1NvcnRlZCJdLFsic29ydEJ5UmFuayIsInNvcnRCeVJhbmsiXSxbImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVBbnRpUmFuayJdLFsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCJdLFsiZ2V0UGFzc1N0eWxlQ292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciJdLFsiaW50ZXJzZWN0UmFua0NvdmVycyIsImludGVyc2VjdFJhbmtDb3ZlcnMiXSxbInVuaW9uUmFua0NvdmVycyIsInVuaW9uUmFua0NvdmVycyJdXSwiQGVuZG8vcGFzcy1zdHlsZSI6W1siZGVlcGx5RnVsZmlsbGVkIiwiZGVlcGx5RnVsZmlsbGVkIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADXbFulWUMAAFlDAAAqAAAAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL2VuY29kZVBhc3NhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJpc0VuY29kZWRSZW1vdGFibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlUGFzc2FibGVLaXQiLCJwYXNzU3R5bGVQcmVmaXhlcyIsInJlY29yZE5hbWVzIiwicmVjb3JkVmFsdWVzIiwiemVyb1BhZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixhc3NlcnRSZWNvcmQsaXNFcnJvckxpa2UsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxiLHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImFzc2VydFJlY29yZFwiLCBbJGjNj19hID0+IChhc3NlcnRSZWNvcmQgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJiXCIsIFskaM2PX2EgPT4gKGIgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7ZnJvbUVudHJpZXMsaXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8vXG5jb25zdCByQzA9L1tcXHgwMC1cXHgxRl0vO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdldFN1ZmZpeD0oc3RyLGluZGV4KT0+aW5kZXg9PT0wP3N0cjpzdHIuc3Vic3RyaW5nKGluZGV4KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcmVjb3JkTmFtZXM9KHJlY29yZCk9PlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4oLyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlY29yZCkuc29ydCgpLnJldmVyc2UoKSk7JGjNj19vbmNlLnJlY29yZE5hbWVzKHJlY29yZE5hbWVzKTtcbmhhcmRlbihyZWNvcmROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZFZhbHVlcz0ocmVjb3JkLG5hbWVzKT0+XG5oYXJkZW4obmFtZXMubWFwKChuYW1lKT0+cmVjb3JkW25hbWVdKSk7JGjNj19vbmNlLnJlY29yZFZhbHVlcyhyZWNvcmRWYWx1ZXMpO1xuaGFyZGVuKHJlY29yZFZhbHVlcyk7XG5cbmNvbnN0IHplcm9lcz1BcnJheSgxNikuXG5maWxsKHVuZGVmaW5lZCkuXG5tYXAoKF8saSk9PicwJy5yZXBlYXQoaSkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgemVyb1BhZD0obixzaXplKT0+e1xuY29uc3QgblN0cj0gYCR7bn1gO1xuY29uc3QgZmlsbExlbj1zaXplLW5TdHIubGVuZ3RoO1xuaWYoZmlsbExlbj09PTApcmV0dXJuIG5TdHI7XG5hc3NlcnQoZmlsbExlbj4wJiZmaWxsTGVuPHplcm9lcy5sZW5ndGgpO1xucmV0dXJuIGAke3plcm9lc1tmaWxsTGVuXX0ke25TdHJ9YDtcbiB9OyRozY9fb25jZS56ZXJvUGFkKHplcm9QYWQpO1xuaGFyZGVuKHplcm9QYWQpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGFzTnVtYmVyPW5ldyBGbG9hdDY0QXJyYXkoMSk7XG5jb25zdCBhc0JpdHM9bmV3IEJpZ1VpbnQ2NEFycmF5KGFzTnVtYmVyLmJ1ZmZlcik7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbmNvbnN0IENhbm9uaWNhbE5hTkJpdHM9J2ZmZjgwMDAwMDAwMDAwMDAnO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmluYXJ5NjQ9KG4pPT57XG4vL1xuaWYoaXMobiwtMCkpe1xubj0wO1xuIH1lbHNlIGlmKGlzKG4sTmFOKSl7XG5yZXR1cm4gYGYke0Nhbm9uaWNhbE5hTkJpdHN9YDtcbiB9XG5hc051bWJlclswXT1uO1xubGV0IGJpdHM9YXNCaXRzWzBdO1xuaWYobjwwKXtcbmJpdHNePTB4ZmZmZmZmZmZmZmZmZmZmZm47XG4gfWVsc2V7XG5iaXRzXj0weDgwMDAwMDAwMDAwMDAwMDBuO1xuIH1cbnJldHVybiBgZiR7emVyb1BhZChiaXRzLnRvU3RyaW5nKDE2KSwxNil9YDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVCaW5hcnk2ND0oZW5jb2RlZCxza2lwPTApPT57XG5lbmNvZGVkLmNoYXJBdChza2lwKT09PSdmJ3x8RmFpbCBgRW5jb2RlZCBudW1iZXIgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IGJpdHM9QmlnSW50KCBgMHgke2dldFN1ZmZpeChlbmNvZGVkLHNraXArMSl9YCk7XG5pZihlbmNvZGVkLmNoYXJBdChza2lwKzEpPCc4Jyl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5hc0JpdHNbMF09Yml0cztcbmNvbnN0IHJlc3VsdD1hc051bWJlclswXTtcbiFpcyhyZXN1bHQsLTApfHxcbkZhaWwgYFVuZXhwZWN0ZWQgbmVnYXRpdmUgemVybzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVCaWdJbnQ9KG4pPT57XG5jb25zdCBhYnM9bjwwbj8tbjpuO1xuY29uc3QgbkRpZ2l0cz1hYnMudG9TdHJpbmcoKS5sZW5ndGg7XG5jb25zdCBsRGlnaXRzPW5EaWdpdHMudG9TdHJpbmcoKS5sZW5ndGg7XG5pZihuPDBuKXtcbnJldHVybiBgbiR7XG4vL1xuLy9cbicjJy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbigxMCoqbERpZ2l0cy1uRGlnaXRzKS50b1N0cmluZygpLnBhZFN0YXJ0KGxEaWdpdHMsJzAnKVxuIH06JHtcbi8vXG4oMTBuKipCaWdJbnQobkRpZ2l0cykrbikudG9TdHJpbmcoKS5wYWRTdGFydChuRGlnaXRzLCcwJylcbiB9YDtcbiB9ZWxzZXtcbnJldHVybiBgcCR7XG4vL1xuLy9cbid+Jy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbm5EaWdpdHNcbiB9OiR7XG4vL1xublxuIH1gO1xuIH1cbiB9O1xuXG5jb25zdCByQmlnSW50UGF5bG9hZD0vKFswLTldKykoOihbMC05XSskfCl8KS9zO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmlnSW50PShlbmNvZGVkKT0+e1xuY29uc3QgdHlwZVByZWZpeD1lbmNvZGVkLmNoYXJBdCgwKTsvL1xudHlwZVByZWZpeD09PSdwJ3x8XG50eXBlUHJlZml4PT09J24nfHxcbkZhaWwgYEVuY29kZWQgYmlnaW50IGV4cGVjdGVkOiAke2VuY29kZWR9YDtcblxuY29uc3R7XG5pbmRleDpsRGlnaXRzLFxuMTpzbkRpZ2l0cyxcbjI6dGFpbCxcbjM6ZGlnaXRzfT1cbmVuY29kZWQubWF0Y2gockJpZ0ludFBheWxvYWQpfHxGYWlsIGBEaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbnNuRGlnaXRzLmxlbmd0aD09PWxEaWdpdHN8fFxuRmFpbCBgVW5hcnktcHJlZml4ZWQgZGVjaW1hbCBkaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5sZXQgbkRpZ2l0cz1wYXJzZUludChzbkRpZ2l0cywxMCk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubkRpZ2l0cz0xMCoqLyogICAgICAgICAgICAgICAgICovbERpZ2l0cy1uRGlnaXRzO1xuIH1cblxudGFpbC5jaGFyQXQoMCk9PT0nOid8fEZhaWwgYFNlcGFyYXRvciBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5kaWdpdHMubGVuZ3RoPT09bkRpZ2l0c3x8XG5GYWlsIGBGaXhlZC1sZW5ndGggZGlnaXQgc2VxdWVuY2UgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG49QmlnSW50KGRpZ2l0cyk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubj0tKDEwbioqQmlnSW50KG5EaWdpdHMpLW4pO1xuIH1cblxucmV0dXJuIG47XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdHJpbmdFc2NhcGVzPUFycmF5KDB4MjIpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGNwKT0+e1xuc3dpdGNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApKXtcbmNhc2UnICc6XG5yZXR1cm4nIV8nO1xuY2FzZSchJzpcbnJldHVybichfCc7XG5kZWZhdWx0OlxucmV0dXJuIGAhJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKzB4MjEpfWA7fVxuXG4gfSk7XG5zdHJpbmdFc2NhcGVzWydeJy5jaGFyQ29kZUF0KDApXT0nX0AnO1xuc3RyaW5nRXNjYXBlc1snXycuY2hhckNvZGVBdCgwKV09J19fJztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeD0oc3RyKT0+XG5zdHIucmVwbGFjZSgvW1xcMC0hXl9dL2csKGNoKT0+c3RyaW5nRXNjYXBlc1tjaC5jaGFyQ29kZUF0KDApXSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT57XG5yZXR1cm4gZW5jb2RlZC5yZXBsYWNlKC8oW1xcMC0hX10pKC58XFxuKT8vZywoZXNjLHByZWZpeCxzdWZmaXgpPT57XG5zd2l0Y2goZXNjKXtcbmNhc2UnIV8nOlxucmV0dXJuJyAnO1xuY2FzZSchfCc6XG5yZXR1cm4nISc7XG5jYXNlJ19AJzpcbnJldHVybideJztcbmNhc2UnX18nOlxucmV0dXJuJ18nO1xuZGVmYXVsdDp7XG5jb25zdCBjaD0vKiAgICAgICAgICAgICAgICAgKi9zdWZmaXg7XG4vL1xuLy9cbnByZWZpeD09PSchJyYmc3VmZml4IT09dW5kZWZpbmVkJiZjaD49JyEnJiZjaDw9J0AnfHxcbkZhaWwgYGludmFsaWQgc3RyaW5nIGVzY2FwZTogJHtxKGVzYyl9YDtcbnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCktMHgyMSk7XG4gfX1cblxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeVN0cmluZ1N1ZmZpeD0oc3RyKT0+c3RyO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT5lbmNvZGVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ14nXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmNoYXJzLnB1c2goZW5jLCcgJyk7XG4gfVxucmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQ29tcGFjdEFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xubGV0IGRlcHRoPTA7XG4vL1xuLy9cbmxldCBuZXh0SW5kZXg9c2tpcCsxO1xubGV0IGN1cnJlbnRFbGVtZW50U3RhcnQ9c2tpcCsxO1xuZm9yKGNvbnN0ezA6Y2gsaW5kZXg6aX1vZiBlbmNvZGVkLm1hdGNoQWxsKC9bXFxeIF0vZykpe1xuY29uc3QgaW5kZXg9LyogICAgICAgICAgICAgICAgICovaTtcbmlmKGluZGV4PD1za2lwKXtcbmlmKGluZGV4PT09c2tpcCl7XG5jaD09PSdeJ3x8RmFpbCBgRW5jb2RlZCBhcnJheSBleHBlY3RlZDogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH1cbiB9ZWxzZSBpZihjaD09PSdeJyl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcHRoKz0xO1xuIH1lbHNle1xuLy9cbmlmKGluZGV4PT09bmV4dEluZGV4KXtcbi8vXG5kZXB0aC09MTtcbmRlcHRoPj0wfHxcbi8vXG5GYWlsIGB1bmV4cGVjdGVkIGFycmF5IGVsZW1lbnQgdGVybWluYXRvcjogJHtlbmNvZGVkLnNsaWNlKHNraXAsaW5kZXgrMil9YDtcbiB9XG5pZihkZXB0aD09PTApe1xuLy9cbmVsZW1lbnRzLnB1c2goXG5kZWNvZGVQYXNzYWJsZShlbmNvZGVkLnNsaWNlKGN1cnJlbnRFbGVtZW50U3RhcnQsaW5kZXgpKSk7XG5cbmN1cnJlbnRFbGVtZW50U3RhcnQ9aW5kZXgrMTtcbiB9XG4gfVxuLy9cbm5leHRJbmRleD1pbmRleCsxO1xuIH1cbmRlcHRoPT09MHx8RmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5uZXh0SW5kZXg9PT1lbmNvZGVkLmxlbmd0aHx8XG5GYWlsIGB1bnRlcm1pbmF0ZWQgYXJyYXkgZWxlbWVudDogJHtnZXRTdWZmaXgoXG5lbmNvZGVkLFxuY3VycmVudEVsZW1lbnRTdGFydClcbiB9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeUFycmF5PShhcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IGNoYXJzPVsnWyddO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpe1xuY29uc3QgZW5jPWVuY29kZVBhc3NhYmxlKGVsZW1lbnQpO1xuZm9yKGNvbnN0IGMgb2YgZW5jKXtcbmlmKGM9PT0nXFx1MDAwMCd8fGM9PT0nXFx1MDAwMScpe1xuY2hhcnMucHVzaCgnXFx1MDAwMScpO1xuIH1cbmNoYXJzLnB1c2goYyk7XG4gfVxuY2hhcnMucHVzaCgnXFx1MDAwMCcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUxlZ2FjeUFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xuY29uc3QgZWxlbUNoYXJzPVtdO1xuLy9cbi8vXG5sZXQgc3RpbGxUb1NraXA9c2tpcCsxO1xubGV0IGluRXNjYXBlPWZhbHNlO1xuZm9yKGNvbnN0IGMgb2YgZW5jb2RlZCl7XG5pZihzdGlsbFRvU2tpcD4wKXtcbnN0aWxsVG9Ta2lwLT0xO1xuaWYoc3RpbGxUb1NraXA9PT0wKXtcbmM9PT0nWyd8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoaW5Fc2NhcGUpe1xuYz09PSdcXHUwMDAwJ3x8XG5jPT09J1xcdTAwMDEnfHxcbkZhaWwgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHUwMDAxIGVzY2FwZTogJHtjfWA7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDAnKXtcbmNvbnN0IGVuY29kZWRFbGVtZW50PWVsZW1DaGFycy5qb2luKCcnKTtcbmVsZW1DaGFycy5sZW5ndGg9MDtcbmNvbnN0IGVsZW1lbnQ9ZGVjb2RlUGFzc2FibGUoZW5jb2RlZEVsZW1lbnQpO1xuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDEnKXtcbmluRXNjYXBlPXRydWU7XG4vL1xuY29udGludWU7XG4gfWVsc2V7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9XG5pbkVzY2FwZT1mYWxzZTtcbiB9XG4haW5Fc2NhcGV8fEZhaWwgYHVuZXhwZWN0ZWQgZW5kIG9mIGVuY29kaW5nICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmVsZW1DaGFycy5sZW5ndGg9PT0wfHxcbkZhaWwgYGVuY29kaW5nIHRlcm1pbmF0ZWQgZWFybHk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlY29yZD0ocmVjb3JkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgbmFtZXM9cmVjb3JkTmFtZXMocmVjb3JkKTtcbmNvbnN0IHZhbHVlcz1yZWNvcmRWYWx1ZXMocmVjb3JkLG5hbWVzKTtcbnJldHVybiBgKCR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtuYW1lcyx2YWx1ZXNdKSxlbmNvZGVQYXNzYWJsZSl9YDtcbiB9O1xuXG5jb25zdCBkZWNvZGVSZWNvcmQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JygnKTtcbi8vXG4vL1xuY29uc3QgdW56aXBwZWRFbnRyaWVzPWRlY29kZUFycmF5KGVuY29kZWQsZGVjb2RlUGFzc2FibGUsc2tpcCsxKTtcbnVuemlwcGVkRW50cmllcy5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIGtleXMsdmFsdWVzIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W2tleXMsdmFsc109dW56aXBwZWRFbnRyaWVzO1xuXG5wYXNzU3R5bGVPZihrZXlzKT09PSdjb3B5QXJyYXknJiZcbnBhc3NTdHlsZU9mKHZhbHMpPT09J2NvcHlBcnJheScmJlxua2V5cy5sZW5ndGg9PT12YWxzLmxlbmd0aCYmXG5rZXlzLmV2ZXJ5KChrZXkpPT50eXBlb2Yga2V5PT09J3N0cmluZycpfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHJlY29yZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3QgbWFwRW50cmllcz1rZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHNbaV1dKTtcbmNvbnN0IHJlY29yZD1oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cmllcykpO1xuYXNzZXJ0UmVjb3JkKHJlY29yZCwnZGVjb2RlZCByZWNvcmQnKTtcbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3QgZW5jb2RlVGFnZ2VkPSh0YWdnZWQsZW5jb2RlQXJyYXksZW5jb2RlUGFzc2FibGUpPT5cbiBgOiR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtnZXRUYWcodGFnZ2VkKSx0YWdnZWQucGF5bG9hZF0pLGVuY29kZVBhc3NhYmxlKX1gO1xuXG5jb25zdCBkZWNvZGVUYWdnZWQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JzonKTtcbi8vXG4vL1xuY29uc3QgdGFnZ2VkUGF5bG9hZD1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG50YWdnZWRQYXlsb2FkLmxlbmd0aD09PTJ8fFxuRmFpbCBgZXhwZWN0ZWQgdGFnLHBheWxvYWQgcGFpcjogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3RbdGFnLHBheWxvYWRdPXRhZ2dlZFBheWxvYWQ7XG5wYXNzU3R5bGVPZih0YWcpPT09J3N0cmluZyd8fFxuRmFpbCBgbm90IGEgdmFsaWQgdGFnZ2VkIGVuY29kaW5nOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVJlbW90YWJsZT0odW5zYWZlRW5jb2RlUmVtb3RhYmxlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPShyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUmVtb3RhYmxlKHIsaW5uZXJFbmNvZGUpO1xudHlwZW9mIGVuY29kaW5nPT09J3N0cmluZycmJmVuY29kaW5nLmNoYXJBdCgwKT09PSdyJ3x8XG5GYWlsIGBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiclwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUmVtb3RhYmxlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVSZW1vdGFibGU7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVByb21pc2U9KHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVQcm9taXNlPShwLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUHJvbWlzZShwLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nPyd8fFxuRmFpbCBgUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCI/XCI6ICR7ZW5jb2Rpbmd9YDtcbnZlcmlmeUVuY29kaW5nKGVuY29kaW5nLCdQcm9taXNlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVQcm9taXNlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVFcnJvcj0odW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVFcnJvcj0oZXJyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlRXJyb3IoZXJyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nISd8fFxuRmFpbCBgRXJyb3IgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiIVwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnRXJyb3InKTtcbnJldHVybiBlbmNvZGluZztcbiB9O1xucmV0dXJuIGVuY29kZUVycm9yO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRW5jb2RlPShlbmNvZGVTdHJpbmdTdWZmaXgsZW5jb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlOnVuc2FmZUVuY29kZVJlbW90YWJsZSxcbmVuY29kZVByb21pc2U6dW5zYWZlRW5jb2RlUHJvbWlzZSxcbmVuY29kZUVycm9yOnVuc2FmZUVuY29kZUVycm9yLFxudmVyaWZ5RW5jb2Rpbmc9KCk9PnsgfX09XG5vcHRpb25zO1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPW1ha2VFbmNvZGVSZW1vdGFibGUoXG51bnNhZmVFbmNvZGVSZW1vdGFibGUsXG52ZXJpZnlFbmNvZGluZyk7XG5cbmNvbnN0IGVuY29kZVByb21pc2U9bWFrZUVuY29kZVByb21pc2UodW5zYWZlRW5jb2RlUHJvbWlzZSx2ZXJpZnlFbmNvZGluZyk7XG5jb25zdCBlbmNvZGVFcnJvcj1tYWtlRW5jb2RlRXJyb3IodW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBpbm5lckVuY29kZT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBlbmNvZGVFcnJvcihwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzp7XG5yZXR1cm4ndic7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybid6JztcbiB9XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kZUJpbmFyeTY0KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xucmV0dXJuIGBzJHtlbmNvZGVTdHJpbmdTdWZmaXgocGFzc2FibGUpfWA7XG4gfVxuY2FzZSdib29sZWFuJzp7XG5yZXR1cm4gYGIke3Bhc3NhYmxlfWA7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybiBlbmNvZGVCaWdJbnQocGFzc2FibGUpO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGVuY29kZVByb21pc2UocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG4vL1xuY29uc3QgbmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbnJldHVybiBgeSR7ZW5jb2RlU3RyaW5nU3VmZml4KG5hbWUpfWA7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBlbmNvZGVBcnJheShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5yZXR1cm4gZW5jb2RlUmVjb3JkKHBhc3NhYmxlLGVuY29kZUFycmF5LGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJuIGVuY29kZVRhZ2dlZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBhICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbGxlY3Rpb24gcGFzc2FibGVgO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRW5jb2RlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBsaWJlcmFsRGVjb2RlcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgKi97XG5kZWNvZGVSZW1vdGFibGU6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWQsXG5kZWNvZGVQcm9taXNlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlRXJyb3I6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWR9O1xuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlSW5uZXJEZWNvZGU9KGRlY29kZVN0cmluZ1N1ZmZpeCxkZWNvZGVBcnJheSxvcHRpb25zKT0+e1xuY29uc3R7ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5uZXJEZWNvZGU9KGVuY29kZWQsc2tpcD0wKT0+e1xuc3dpdGNoKGVuY29kZWQuY2hhckF0KHNraXApKXtcbmNhc2Undic6e1xucmV0dXJuIG51bGw7XG4gfVxuY2FzZSd6Jzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnZic6e1xucmV0dXJuIGRlY29kZUJpbmFyeTY0KGVuY29kZWQsc2tpcCk7XG4gfVxuY2FzZSdzJzp7XG5yZXR1cm4gZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xuIH1cbmNhc2UnYic6e1xuY29uc3Qgc3Vic3RyaW5nPWdldFN1ZmZpeChlbmNvZGVkLHNraXArMSk7XG5pZihzdWJzdHJpbmc9PT0ndHJ1ZScpe1xucmV0dXJuIHRydWU7XG4gfWVsc2UgaWYoc3Vic3RyaW5nPT09J2ZhbHNlJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxudGhyb3cgRmFpbCBgZXhwZWN0ZWQgZW5jb2RlZCBib29sZWFuIHRvIGJlIFwiYnRydWVcIiBvciBcImJmYWxzZVwiOiAke3N1YnN0cmluZ31gO1xuIH1cbmNhc2Unbic6XG5jYXNlJ3AnOntcbnJldHVybiBkZWNvZGVCaWdJbnQoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCkpO1xuIH1cbmNhc2Uncic6e1xucmV0dXJuIGRlY29kZVJlbW90YWJsZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSc/Jzp7XG5yZXR1cm4gZGVjb2RlUHJvbWlzZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSchJzp7XG5yZXR1cm4gZGVjb2RlRXJyb3IoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UneSc6e1xuLy9cbmNvbnN0IG5hbWU9ZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ1snOlxuY2FzZSdeJzp7XG4vL1xucmV0dXJuIGRlY29kZUFycmF5KGVuY29kZWQsaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZScoJzp7XG5yZXR1cm4gZGVjb2RlUmVjb3JkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZSc6Jzp7XG5yZXR1cm4gZGVjb2RlVGFnZ2VkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGRhdGFiYXNlIGtleTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRGVjb2RlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFzc2FibGVLaXQ9KG9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZT0ocixfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cn1gLFxuZW5jb2RlUHJvbWlzZT0ocCxfKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3B9YCxcbmVuY29kZUVycm9yPShlcnIsXyk9PkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyfWAsXG5mb3JtYXQ9J2xlZ2FjeU9yZGVyZWQnLFxuXG5kZWNvZGVSZW1vdGFibGU9KGVuY29kaW5nLF8pPT5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlUHJvbWlzZT0oZW5jb2RpbmcsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlRXJyb3I9KGVuY29kaW5nLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWB9PVxub3B0aW9ucztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbmNvZGVQYXNzYWJsZTtcbmNvbnN0IGVuY29kZU9wdGlvbnM9e2VuY29kZVJlbW90YWJsZSxlbmNvZGVQcm9taXNlLGVuY29kZUVycm9yLGZvcm1hdH07XG5pZihmb3JtYXQ9PT0nY29tcGFjdE9yZGVyZWQnKXtcbmNvbnN0IGxpYmVyYWxEZWNvZGU9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmxpYmVyYWxEZWNvZGVycyk7XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCB2ZXJpZnlFbmNvZGluZz0oZW5jb2RpbmcsbGFiZWwpPT57XG4hZW5jb2RpbmcubWF0Y2gockMwKXx8XG5GYWlsIGAke2IoXG5sYWJlbClcbiB9IGVuY29kaW5nIG11c3Qgbm90IGNvbnRhaW4gYSBDMCBjb250cm9sIGNoYXJhY3RlcjogJHtlbmNvZGluZ31gO1xuY29uc3QgZGVjb2RlZD1kZWNvZGVDb21wYWN0QXJyYXkoIGBediAke2VuY29kaW5nfSB2IGAsbGliZXJhbERlY29kZSk7XG5pc0FycmF5KGRlY29kZWQpJiZcbmRlY29kZWQubGVuZ3RoPT09MyYmXG5kZWNvZGVkWzBdPT09bnVsbCYmXG5kZWNvZGVkWzJdPT09bnVsbHx8XG5GYWlsIGAke2IobGFiZWwpfSBlbmNvZGluZyBtdXN0IGJlIGVtYmVkZGFibGU6ICR7ZW5jb2Rpbmd9YDtcbiB9O1xuY29uc3QgZW5jb2RlQ29tcGFjdD1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZW5jb2RlQ29tcGFjdEFycmF5LFxuey4uLmVuY29kZU9wdGlvbnMsdmVyaWZ5RW5jb2Rpbmd9KTtcblxuZW5jb2RlUGFzc2FibGU9KHBhc3NhYmxlKT0+IGB+JHtlbmNvZGVDb21wYWN0KHBhc3NhYmxlKX1gO1xuIH1lbHNlIGlmKGZvcm1hdD09PSdsZWdhY3lPcmRlcmVkJyl7XG5lbmNvZGVQYXNzYWJsZT1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5lbmNvZGVMZWdhY3lBcnJheSxcbmVuY29kZU9wdGlvbnMpO1xuXG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZm9ybWF0OiAke3EoZm9ybWF0KX1gO1xuIH1cblxuY29uc3QgZGVjb2RlT3B0aW9ucz17ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9O1xuY29uc3QgZGVjb2RlQ29tcGFjdD1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZGVjb2RlQ29tcGFjdEFycmF5LFxuZGVjb2RlT3B0aW9ucyk7XG5cbmNvbnN0IGRlY29kZUxlZ2FjeT1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5kZWNvZGVMZWdhY3lBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVQYXNzYWJsZT0oZW5jb2RlZCk9Pntcbi8vXG4vL1xuLy9cbmlmKGVuY29kZWQuY2hhckF0KDApPT09J34nKXtcbnJldHVybiBkZWNvZGVDb21wYWN0KGVuY29kZWQsMSk7XG4gfVxucmV0dXJuIGRlY29kZUxlZ2FjeShlbmNvZGVkKTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtlbmNvZGVQYXNzYWJsZSxkZWNvZGVQYXNzYWJsZX0pO1xuIH07JGjNj19vbmNlLm1ha2VQYXNzYWJsZUtpdChtYWtlUGFzc2FibGVLaXQpO1xuaGFyZGVuKG1ha2VQYXNzYWJsZUtpdCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVBhc3NhYmxlPShlbmNvZGVPcHRpb25zKT0+e1xuY29uc3R7ZW5jb2RlUGFzc2FibGV9PW1ha2VQYXNzYWJsZUtpdChlbmNvZGVPcHRpb25zKTtcbnJldHVybiBlbmNvZGVQYXNzYWJsZTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlUGFzc2FibGUobWFrZUVuY29kZVBhc3NhYmxlKTtcbmhhcmRlbihtYWtlRW5jb2RlUGFzc2FibGUpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVQYXNzYWJsZT0oZGVjb2RlT3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZGVjb2RlT3B0aW9ucyk7XG5yZXR1cm4gZGVjb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZURlY29kZVBhc3NhYmxlKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZURlY29kZVBhc3NhYmxlKTtcblxuY29uc3QgICAgICAgIGlzRW5jb2RlZFJlbW90YWJsZT0oZW5jb2RlZCk9PmVuY29kZWQuY2hhckF0KDApPT09J3InOyRozY9fb25jZS5pc0VuY29kZWRSZW1vdGFibGUoaXNFbmNvZGVkUmVtb3RhYmxlKTtcbmhhcmRlbihpc0VuY29kZWRSZW1vdGFibGUpO1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc1N0eWxlUHJlZml4ZXM9e1xuZXJyb3I6JyEnLFxuY29weVJlY29yZDonKCcsXG50YWdnZWQ6JzonLFxucHJvbWlzZTonPycsXG5jb3B5QXJyYXk6J1teJyxcbmJvb2xlYW46J2InLFxubnVtYmVyOidmJyxcbmJpZ2ludDonbnAnLFxucmVtb3RhYmxlOidyJyxcbnN0cmluZzoncycsXG5udWxsOid2JyxcbnN5bWJvbDoneScsXG4vL1xuLy9cbi8vXG51bmRlZmluZWQ6J3onfTskaM2PX29uY2UucGFzc1N0eWxlUHJlZml4ZXMocGFzc1N0eWxlUHJlZml4ZXMpO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUHJlZml4ZXMsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUHJlZml4ZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVjb3JkTmFtZXMiOlsicmVjb3JkTmFtZXMiXSwicmVjb3JkVmFsdWVzIjpbInJlY29yZFZhbHVlcyJdLCJ6ZXJvUGFkIjpbInplcm9QYWQiXSwibWFrZVBhc3NhYmxlS2l0IjpbIm1ha2VQYXNzYWJsZUtpdCJdLCJtYWtlRW5jb2RlUGFzc2FibGUiOlsibWFrZUVuY29kZVBhc3NhYmxlIl0sIm1ha2VEZWNvZGVQYXNzYWJsZSI6WyJtYWtlRGVjb2RlUGFzc2FibGUiXSwiaXNFbmNvZGVkUmVtb3RhYmxlIjpbImlzRW5jb2RlZFJlbW90YWJsZSJdLCJwYXNzU3R5bGVQcmVmaXhlcyI6WyJwYXNzU3R5bGVQcmVmaXhlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABfnPAyUiIAAFIiAAArAAAAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiUUNMQVNTIiwibWFrZURlY29kZUZyb21DYXBEYXRhIiwibWFrZUVuY29kZVRvQ2FwRGF0YSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGlzT2JqZWN0LGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxcbmRlZmluZVByb3BlcnRpZXMsXG5pcyxcbmVudHJpZXMsXG5mcm9tRW50cmllcyxcbmZyZWV6ZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBRQ0xBU1M9J0BxY2xhc3MnOyRozY9fb25jZS5RQ0xBU1MoUUNMQVNTKTtcblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzUUNsYXNzPShlbmNvZGVkKT0+aGFzT3duUHJvcGVydHlPZihlbmNvZGVkLFFDTEFTUyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHFjbGFzc01hdGNoZXM9KGVuY29kZWQscWNsYXNzKT0+XG5pc09iamVjdChlbmNvZGVkKSYmXG4haXNBcnJheShlbmNvZGVkKSYmXG5oYXNRQ2xhc3MoZW5jb2RlZCkmJlxuZW5jb2RlZFtRQ0xBU1NdPT09cWNsYXNzO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT0ocmVtKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIpPT5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtlcnJ9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9DYXBEYXRhPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9ZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YSxcbmVuY29kZVByb21pc2VUb0NhcERhdGE9ZG9udEVuY29kZVByb21pc2VUb0NhcERhdGEsXG5lbmNvZGVFcnJvclRvQ2FwRGF0YT1kb250RW5jb2RlRXJyb3JUb0NhcERhdGF9PVxuZW5jb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvQ2FwRGF0YVJlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJue1tRQ0xBU1NdOid1bmRlZmluZWQnfTtcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJue1tRQ0xBU1NdOidOYU4nfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonSW5maW5pdHknfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106Jy1JbmZpbml0eSd9O1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybntcbltRQ0xBU1NdOidiaWdpbnQnLFxuZGlnaXRzOlN0cmluZyhwYXNzYWJsZSl9O1xuXG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybntcbltRQ0xBU1NdOidzeW1ib2wnLFxubmFtZX07XG5cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmlmKGhhc093blByb3BlcnR5T2YocGFzc2FibGUsUUNMQVNTKSl7XG4vL1xuY29uc3R7W1FDTEFTU106cWNsYXNzVmFsdWUsLi4ucmVzdH09cGFzc2FibGU7XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PXtcbltRQ0xBU1NdOidoaWxiZXJ0Jyxcbm9yaWdpbmFsOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHFjbGFzc1ZhbHVlKX07XG5cbmlmKG93bktleXMocmVzdCkubGVuZ3RoPj0xKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJlc3VsdC5yZXN0PWVuY29kZVRvQ2FwRGF0YVJlY3VyKGZyZWV6ZShyZXN0KSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb0NhcERhdGFSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbltRQ0xBU1NdOid0YWdnZWQnLFxudGFnOmdldFRhZyhwYXNzYWJsZSksXG5wYXlsb2FkOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YShcbnBhc3NhYmxlLFxuZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuXG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUylcbiB9ICR7cSgnc2xvdCcpfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVByb21pc2VUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nc2xvdCcpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ2Vycm9yJykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ2Vycm9yJylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvQ2FwRGF0YT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpKTtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9DYXBEYXRhKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShzbG90RW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSBvciBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7c2xvdEVuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0oZXJyb3JFbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlcnJvckVuY29kaW5nfWA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21DYXBEYXRhPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT1kb250RGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT1kb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YX09XG5kZWNvZGVPcHRpb25zO1xuXG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT09PWRlY29kZVByb21pc2VGcm9tQ2FwRGF0YXx8XG5GYWlsIGBBbiBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbiBmb3Igbm93OiBJZiBlaXRoZXIgZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEgb3IgZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhIGlzIHByb3ZpZGVkLCBib3RoIG11c3QgYmUgcHJvdmlkZWQgYW5kIHRoZXkgbXVzdCBiZSB0aGUgc2FtZTogJHtxKFxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEpXG4gfSB2cyAke3EoZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhKX1gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tQ2FwRGF0YT0oanNvbkVuY29kZWQpPT57XG5pZighaXNPYmplY3QoanNvbkVuY29kZWQpKXtcbi8vXG5yZXR1cm4ganNvbkVuY29kZWQ7XG4gfVxuaWYoaXNBcnJheShqc29uRW5jb2RlZCkpe1xucmV0dXJuIGpzb25FbmNvZGVkLm1hcCgoZW5jb2RlZFZhbCk9PmRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpKTtcbiB9ZWxzZSBpZihoYXNRQ2xhc3MoanNvbkVuY29kZWQpKXtcbmNvbnN0IHFjbGFzcz1qc29uRW5jb2RlZFtRQ0xBU1NdO1xudHlwZW9mIHFjbGFzcz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgJHtxKFFDTEFTUyl9IHR5cGVvZiAke3EodHlwZW9mIHFjbGFzcyl9YDtcbnN3aXRjaChxY2xhc3Mpe1xuLy9cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PWpzb25FbmNvZGVkO1xudHlwZW9mIGRpZ2l0cz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZGlnaXRzIHR5cGVvZiAke3EodHlwZW9mIGRpZ2l0cyl9YDtcbnJldHVybiBCaWdJbnQoZGlnaXRzKTtcbiB9XG5jYXNlJ0BAYXN5bmNJdGVyYXRvcic6e1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvcjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09anNvbkVuY29kZWQ7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09anNvbkVuY29kZWQ7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcsZGVjb2RlRnJvbUNhcERhdGEocGF5bG9hZCkpO1xuIH1cbmNhc2Unc2xvdCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlZD1kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGRlY29kZWQ7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZGVjb2RlZD1kZWNvZGVFcnJvckZyb21DYXBEYXRhKFxuanNvbkVuY29kZWQsXG5kZWNvZGVGcm9tQ2FwRGF0YSk7XG5cbmlmKHBhc3NTdHlsZU9mKGRlY29kZWQpPT09J2Vycm9yJyl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YSBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7ZGVjb2RlZH1gO1xuIH1cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09anNvbkVuY29kZWQ7XG5oYXNPd25Qcm9wZXJ0eU9mKGpzb25FbmNvZGVkLCdvcmlnaW5hbCcpfHxcbkZhaWwgYEludmFsaWQgSGlsYmVydCBIb3RlbCBlbmNvZGluZyAke2pzb25FbmNvZGVkfWA7XG4vL1xuY29uc3QgcmVzdWx0PXtbUUNMQVNTXTpkZWNvZGVGcm9tQ2FwRGF0YShvcmlnaW5hbCl9O1xuaWYoaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwncmVzdCcpKXtcbmNvbnN0IGlzTm9uRW1wdHlPYmplY3Q9XG50eXBlb2YgcmVzdD09PSdvYmplY3QnJiZcbnJlc3QhPT1udWxsJiZcbm93bktleXMocmVzdCkubGVuZ3RoPj0xO1xuaWYoIWlzTm9uRW1wdHlPYmplY3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyBtdXN0IGJlIGEgbm9uLWVtcHR5IG9iamVjdDogJHtyZXN0fWA7XG4gfVxuY29uc3QgcmVzdE9iaj1kZWNvZGVGcm9tQ2FwRGF0YShyZXN0KTtcbi8vXG4vL1xuLy9cbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RPYmosUUNMQVNTKXx8XG5GYWlsIGBSZXN0IG11c3Qgbm90IGNvbnRhaW4gaXRzIG93biBkZWZpbml0aW9uIG9mICR7cShRQ0xBU1MpfWA7XG5kZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHJlc3RPYmopKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG5jYXNlJ2liaWQnOntcbnRocm93IEZhaWwgYFRoZSBjYXBEYXRhIHByb3RvY29sIG5vIGxvbmdlciBzdXBwb3J0cyAke3EoUUNMQVNTKX0gJHtxKFxucWNsYXNzKVxuIH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1lbHNle1xuYXNzZXJ0KHR5cGVvZiBqc29uRW5jb2RlZD09PSdvYmplY3QnJiZqc29uRW5jb2RlZCE9PW51bGwpO1xuY29uc3QgZGVjb2RlRW50cnk9KFtuYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSAke3EobmFtZSl9IG9mICR7anNvbkVuY29kZWR9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbUNhcERhdGEoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGpzb25FbmNvZGVkKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbUNhcERhdGEpO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVGcm9tQ2FwRGF0YShtYWtlRGVjb2RlRnJvbUNhcERhdGEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUUNMQVNTIjpbIlFDTEFTUyJdLCJtYWtlRW5jb2RlVG9DYXBEYXRhIjpbIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwibWFrZURlY29kZUZyb21DYXBEYXRhIjpbIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAPShurLiIAAC4iAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyIsIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtpcyxlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbmNvbnN0IEJBTkc9JyEnLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBEQVNIPSctJy5jaGFyQ29kZUF0KDApO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdGFydHNTcGVjaWFsPShlbmNvZGVkU3RyKT0+e1xuaWYoZW5jb2RlZFN0cj09PScnKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuY29uc3QgY29kZT1lbmNvZGVkU3RyLmNoYXJDb2RlQXQoMCk7XG4vL1xucmV0dXJuIEJBTkc8PWNvZGUmJmNvZGU8PURBU0g7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtyZW19YDtcblxuY29uc3QgZG9udEVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbSk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwcm9tfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzPShlcnIpPT5cbkZhaWwgYGVycm9yIG9iamVjdCB1bmV4cGVjdGVkOiAke3EoZXJyKX1gO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVUb1NtYWxsY2Fwcz0oZW5jb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9ZG9udEVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMsXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzPWRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzfT1cbmVuY29kZU9wdGlvbnM7XG5cbmNvbnN0IGFzc2VydEVuY29kZWRFcnJvcj0oZW5jb2RpbmcpPT57XG50eXBlb2YgZW5jb2Rpbmc9PT0nb2JqZWN0JyYmaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI2Vycm9yJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBcIiNlcnJvclwiIHByb3BlcnR5OiAke3EoXG5lbmNvZGluZylcbiB9YDtcbi8vXG5jb25zdCBtZXNzYWdlPWVuY29kaW5nWycjZXJyb3InXTtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZycmJihcbiFzdGFydHNTcGVjaWFsKG1lc3NhZ2UpfHxtZXNzYWdlLmNoYXJBdCgwKT09PSchJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBzdHJpbmcgbWVzc2FnZTogJHtxKG1lc3NhZ2UpfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzUmVjdXI9KHBhc3NhYmxlKT0+e1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGFzc2FibGUpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzp7XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZihzdGFydHNTcGVjaWFsKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBgISR7cGFzc2FibGV9YDtcbiB9XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4nI3VuZGVmaW5lZCc7XG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4ocGFzc2FibGUpKXtcbnJldHVybicjTmFOJztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybicjSW5maW5pdHknO1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09LUluZmluaXR5KXtcbnJldHVybicjLUluZmluaXR5JztcbiB9XG4vL1xucmV0dXJuIGlzKHBhc3NhYmxlLC0wKT8wOnBhc3NhYmxlO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdCBzdHI9U3RyaW5nKHBhc3NhYmxlKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICovcGFzc2FibGU8MG4/c3RyOmArJHtzdHJ9YCk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybiBgJSR7bmFtZX1gO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgbmFtZXM9b3duS2V5cyhwYXNzYWJsZSkuc29ydCgpO1xucmV0dXJuIGZyb21FbnRyaWVzKFxubmFtZXMubWFwKChuYW1lKT0+W1xuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihuYW1lKSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGVbbmFtZV0pXSkpO1xuXG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJue1xuJyN0YWcnOmVuY29kZVRvU21hbGxjYXBzUmVjdXIoZ2V0VGFnKHBhc3NhYmxlKSksXG5wYXlsb2FkOmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUucGF5bG9hZCl9O1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyhcbnBhc3NhYmxlLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5cbmlmKHR5cGVvZiByZXN1bHQ9PT0nc3RyaW5nJyYmcmVzdWx0LmNoYXJBdCgwKT09PSckJyl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiRcIjogJHtyZXN1bHR9YDtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJicpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCImXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgcmVzdWx0PWVuY29kZUVycm9yVG9TbWFsbGNhcHMocGFzc2FibGUsZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5hc3NlcnRFbmNvZGVkRXJyb3IocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiBVbnJlY29nbml6ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwcz0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHJlc3VsdD1oYXJkZW4oXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpKTtcblxuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnJldHVybiBoYXJkZW4oZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZSkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9TbWFsbGNhcHMobWFrZUVuY29kZVRvU21hbGxjYXBzKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtxKGVuY29kaW5nKX1gO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9PVxuZGVjb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT57XG5zd2l0Y2godHlwZW9mIGVuY29kaW5nKXtcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZighc3RhcnRzU3BlY2lhbChlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNvbnN0IGM9ZW5jb2RpbmcuY2hhckF0KDApO1xuc3dpdGNoKGMpe1xuY2FzZSchJzp7XG4vL1xucmV0dXJuIGVuY29kaW5nLnNsaWNlKDEpO1xuIH1cbmNhc2UnJSc6e1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShlbmNvZGluZy5zbGljZSgxKSk7XG4gfVxuY2FzZScjJzp7XG5zd2l0Y2goZW5jb2Rpbmcpe1xuY2FzZScjdW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnI05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJyNJbmZpbml0eSc6e1xucmV0dXJuIEluZmluaXR5O1xuIH1cbmNhc2UnIy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bmtub3duIGNvbnN0YW50IFwiJHtxKGVuY29kaW5nKX1cImAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1cbmNhc2UnKyc6XG5jYXNlJy0nOntcbnJldHVybiBCaWdJbnQoZW5jb2RpbmcpO1xuIH1cbmNhc2UnJCc6e1xuY29uc3QgcmVzdWx0PWRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG4vL1xuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdyZW1vdGFibGUnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhIHJlbW90YWJsZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UnJic6e1xuY29uc3QgcmVzdWx0PWRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdwcm9taXNlJyl7XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgU3BlY2lhbCBjaGFyICR7cShcbmMpXG4gfSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTogJHtlbmNvZGluZ31gO1xuIH19XG5cbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoZW5jb2Rpbmc9PT1udWxsKXtcbnJldHVybiBlbmNvZGluZztcbiB9XG5cbmlmKGlzQXJyYXkoZW5jb2RpbmcpKXtcbnJldHVybiBlbmNvZGluZy5tYXAoKHZhbCk9PmRlY29kZUZyb21TbWFsbGNhcHModmFsKSk7XG4gfVxuXG5pZihoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjdGFnJykpe1xuY29uc3R7JyN0YWcnOnRhZyxwYXlsb2FkLC4uLnJlc3R9PWVuY29kaW5nO1xudHlwZW9mIHRhZz09PSdzdHJpbmcnfHxcbkZhaWwgYFZhbHVlIG9mIFwiI3RhZ1wiLCB0aGUgdGFnLCBtdXN0IGJlIGEgc3RyaW5nOiAke2VuY29kaW5nfWA7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgI3RhZyByZWNvcmQgdW5leHBlY3RlZCBwcm9wZXJ0aWVzOiAke3Eob3duS2V5cyhyZXN0KSl9YDtcbnJldHVybiBtYWtlVGFnZ2VkKFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyh0YWcpLFxuZGVjb2RlRnJvbVNtYWxsY2FwcyhwYXlsb2FkKSk7XG5cbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpKXtcbmNvbnN0IHJlc3VsdD1kZWNvZGVFcnJvckZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5wYXNzU3R5bGVPZihyZXN1bHQpPT09J2Vycm9yJ3x8XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhbiBlcnJvcjogJHtyZXN1bHR9YDtcbnJldHVybiByZXN1bHQ7XG4gfVxuXG5jb25zdCBkZWNvZGVFbnRyeT0oW2VuY29kZWROYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIGVuY29kZWROYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke3EoXG5lbmNvZGVkTmFtZSlcbiB9IG9mICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xuZW5jb2RlZE5hbWUuY2hhckF0KDApIT09JyMnfHxcbkZhaWwgYFVucmVjb2duaXplZCByZWNvcmQgdHlwZSAke3EoZW5jb2RlZE5hbWUpfTogJHtlbmNvZGluZ31gO1xuY29uc3QgbmFtZT1kZWNvZGVGcm9tU21hbGxjYXBzKGVuY29kZWROYW1lKTtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRGVjb2RlZCBwcm9wZXJ0eSBuYW1lICR7bmFtZX0gZnJvbSAke2VuY29kaW5nfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGVuY29kaW5nKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IHVucmVjb2duaXplZCBKU09OIHR5cGVvZiAke3EoXG50eXBlb2YgZW5jb2RpbmcpXG4gfTogJHtlbmNvZGluZ31gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xucmV0dXJuIGhhcmRlbihkZWNvZGVGcm9tU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyhtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiOlsibWFrZUVuY29kZVRvU21hbGxjYXBzIl0sIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIjpbIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEULMv0QIwAAECMAACoAAABAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvbWFyc2hhbC1qdXN0aW4uanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIl0sImV4cG9ydHMiOlsiZGVjb2RlVG9KdXN0aW4iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTmF0LGdldEVycm9yQ29uc3RydWN0b3IsaXNPYmplY3QscGFzc2FibGVTeW1ib2xGb3JOYW1lLHEsWCxGYWlsLFFDTEFTUzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtzdHJpbmdpZnk6cXVvdGV9PUpTT047XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVllc0luZGVudGVyPSgpPT57XG5jb25zdCBzdHJpbmdzPVtdO1xubGV0IGxldmVsPTA7XG5sZXQgbmVlZFNwYWNlPWZhbHNlO1xuY29uc3QgbGluZT0oKT0+e1xubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaCgnXFxuJywnICAnLnJlcGVhdChsZXZlbCkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHtcbm9wZW46KG9wZW5CcmFja2V0KT0+e1xubGV2ZWwrPTE7XG5pZihuZWVkU3BhY2Upe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaChvcGVuQnJhY2tldCk7XG4gfSxcbmxpbmUsXG5uZXh0Oih0b2tlbik9PntcbmlmKG5lZWRTcGFjZSYmdG9rZW4hPT0nLCcpe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPXRydWU7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKHRva2VuKTtcbiB9LFxuY2xvc2U6KGNsb3NlQnJhY2tldCk9PntcbmFzc2VydChsZXZlbD49MSk7XG5sZXZlbC09MTtcbmxpbmUoKTtcbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+e1xuYXNzZXJ0LmVxdWFsKGxldmVsLDApO1xucmV0dXJuIHN0cmluZ3Muam9pbignJyk7XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZFBhaXJQYXR0ZXJuPS9eKD86XFx3XFx3fDw8fD4+fFxcK1xcK3wtLXw8IXwtPikkLztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZU5vSW5kZW50ZXI9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdzPVtdO1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PnN0cmluZ3MucHVzaChvcGVuQnJhY2tldCksXG5saW5lOigpPT5zdHJpbmdzLmxlbmd0aCxcbm5leHQ6KHRva2VuKT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEpe1xuY29uc3QgbGFzdD1zdHJpbmdzW3N0cmluZ3MubGVuZ3RoLTFdO1xuLy9cbmlmKGxhc3QubGVuZ3RoPj0xJiZ0b2tlbi5sZW5ndGg+PTEpe1xuY29uc3QgcGFpcj0gYCR7bGFzdFtsYXN0Lmxlbmd0aC0xXX0ke3Rva2VuWzBdfWA7XG5pZihiYWRQYWlyUGF0dGVybi50ZXN0KHBhaXIpKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbiB9XG4gfVxucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5pZihzdHJpbmdzLmxlbmd0aD49MSYmc3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXT09PScsJyl7XG5zdHJpbmdzLnBvcCgpO1xuIH1cbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+c3RyaW5ncy5qb2luKCcnKX0pO1xuXG4gfTtcblxuY29uc3QgaWRlbnRQYXR0ZXJuPS9eW2EtekEtWl1cXHcqJC87XG5oYXJkZW4oaWRlbnRQYXR0ZXJuKTtcbmNvbnN0IEF0QXRQcmVmaXhQYXR0ZXJuPS9eQEAoLiopJC87XG5oYXJkZW4oQXRBdFByZWZpeFBhdHRlcm4pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZVRvSnVzdGluPShlbmNvZGluZyxzaG91bGRJbmRlbnQ9ZmFsc2Usc2xvdHM9W10pPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZT0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG5yZXR1cm47XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIHFjbGFzcyB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5hc3NlcnQoIWlzQXJyYXkocmF3VHJlZSkpO1xuc3dpdGNoKHJhd1RyZWVbJ0BxY2xhc3MnXSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG5yZXR1cm47XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm47XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbnJldHVybjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5jb25zdCBzeW09cGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuYXNzZXJ0LnR5cGVvZihzeW0sJ3N5bWJvbCcpO1xucmV0dXJuO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YodGFnLCdzdHJpbmcnKTtcbnByZXBhcmUocGF5bG9hZCk7XG5yZXR1cm47XG4gfVxuY2FzZSdzbG90Jzp7XG5jb25zdHtpbmRleCxpZmFjZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuTmF0KGluZGV4KTtcbmlmKGlmYWNlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoaWZhY2UsJ3N0cmluZycpO1xuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG4nb3JpZ2luYWwnaW4gcmF3VHJlZXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtyYXdUcmVlfWA7XG5wcmVwYXJlKG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuaWYodHlwZW9mIHJlc3QhPT0nb2JqZWN0Jyl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3RgO1xuIH1cbmlmKHJlc3Q9PT1udWxsKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBudWxsYDtcbiB9XG5pZihpc0FycmF5KHJlc3QpKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBhbiBhcnJheWA7XG4gfVxuaWYoUUNMQVNTIGluIHJlc3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyAke3Jlc3R9IG11c3Qgbm90IGNvbnRhaW4gJHtxKFFDTEFTUyl9YDtcbiB9XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnByZXBhcmUocmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdHtuYW1lLG1lc3NhZ2V9PXJhd1RyZWU7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBuYW1lKX1gO1xuIH1cbmdldEVycm9yQ29uc3RydWN0b3IobmFtZSkhPT11bmRlZmluZWR8fFxuRmFpbCBgTXVzdCBiZSB0aGUgbmFtZSBvZiBhbiBFcnJvciBjb25zdHJ1Y3RvciAke25hbWV9YDtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBlcnJvciBtZXNzYWdlIHR5cGVvZiAke3EodHlwZW9mIG1lc3NhZ2UpfWA7XG5yZXR1cm47XG4gfVxuXG5kZWZhdWx0OntcbmFzc2VydC5mYWlsKFggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xucHJlcGFyZShyYXdUcmVlW2ldKTtcbiB9XG4gfWVsc2V7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJhd1RyZWUpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbiB9XG5wcmVwYXJlKHJhd1RyZWVbbmFtZV0pO1xuIH1cbiB9XG4gfTtcblxuY29uc3QgbWFrZUluZGVudGVyPXNob3VsZEluZGVudD9tYWtlWWVzSW5kZW50ZXI6bWFrZU5vSW5kZW50ZXI7XG5sZXQgb3V0PW1ha2VJbmRlbnRlcigpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZT0ocmF3VHJlZSk9Pntcbi8vXG5yZXR1cm4gcmVjdXIocmF3VHJlZSk7XG4gfTtcblxuY29uc3QgZGVjb2RlUHJvcGVydHk9KG5hbWUsdmFsdWUpPT57XG5vdXQubGluZSgpO1xuaWYobmFtZT09PSdfX3Byb3RvX18nKXtcbi8vXG4vL1xuLy9cbi8vXG5vdXQubmV4dCggYFtcIl9fcHJvdG9fX1wiXTpgKTtcbiB9ZWxzZSBpZihpZGVudFBhdHRlcm4udGVzdChuYW1lKSl7XG5vdXQubmV4dCggYCR7bmFtZX06YCk7XG4gfWVsc2V7XG5vdXQubmV4dCggYCR7cXVvdGUobmFtZSl9OmApO1xuIH1cbmRlY29kZSh2YWx1ZSk7XG5vdXQubmV4dCgnLCcpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCByZWN1cj0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG4vL1xucmV0dXJuIG91dC5uZXh0KHF1b3RlKHJhd1RyZWUpKTtcbiB9XG4vL1xuYXNzZXJ0LnR5cGVvZihyYXdUcmVlLCdvYmplY3QnKTtcbmFzc2VydChyYXdUcmVlIT09bnVsbCk7XG5pZihRQ0xBU1MgaW4gcmF3VHJlZSl7XG5jb25zdCBxY2xhc3M9cmF3VHJlZVtRQ0xBU1NdO1xuYXNzZXJ0LnR5cGVvZihxY2xhc3MsJ3N0cmluZycpO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbi8vXG4vL1xuLy9cbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuLy9cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnTmFOJzpcbmNhc2UnSW5maW5pdHknOlxuY2FzZSctSW5maW5pdHknOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQocWNsYXNzKTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihkaWdpdHMsJ3N0cmluZycpO1xucmV0dXJuIG91dC5uZXh0KCBgJHtCaWdJbnQoZGlnaXRzKX1uYCk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQoJ1N5bWJvbC5hc3luY0l0ZXJhdG9yJyk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbmNvbnN0IHJlZ2lzdGVyZWROYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKHJlZ2lzdGVyZWROYW1lPT09dW5kZWZpbmVkKXtcbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5hc3NlcnQobWF0Y2ghPT1udWxsKTtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmFzc2VydChTeW1ib2xbc3VmZml4XT09PXN5bSk7XG5hc3NlcnQoaWRlbnRQYXR0ZXJuLnRlc3Qoc3VmZml4KSk7XG5yZXR1cm4gb3V0Lm5leHQoIGBTeW1ib2wuJHtzdWZmaXh9YCk7XG4gfVxucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLmZvcigke3F1b3RlKHJlZ2lzdGVyZWROYW1lKX0pYCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0e3RhZyxwYXlsb2FkfT1yYXdUcmVlO1xub3V0Lm5leHQoIGBtYWtlVGFnZ2VkKCR7cXVvdGUodGFnKX0sYCk7XG5kZWNvZGUocGF5bG9hZCk7XG5yZXR1cm4gb3V0Lm5leHQoJyknKTtcbiB9XG5cbmNhc2Unc2xvdCc6e1xubGV0e2lmYWNlfT1yYXdUcmVlO1xuY29uc3QgaW5kZXg9TnVtYmVyKE5hdChyYXdUcmVlLmluZGV4KSk7XG5jb25zdCBuZXN0ZWRSZW5kZXI9KGFyZyk9PntcbmNvbnN0IG9sZE91dD1vdXQ7XG50cnl7XG5vdXQ9bWFrZU5vSW5kZW50ZXIoKTtcbmRlY29kZShhcmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfWZpbmFsbHl7XG5vdXQ9b2xkT3V0O1xuIH1cbiB9O1xuaWYoaW5kZXg8c2xvdHMubGVuZ3RoKXtcbmNvbnN0IHNsb3Q9bmVzdGVkUmVuZGVyKHNsb3RzW2luZGV4XSk7XG5pZihpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gb3V0Lm5leHQoIGBzbG90VG9WYWwoJHtzbG90fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0sJHtpZmFjZX0pYCk7XG4gfWVsc2UgaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSwke2lmYWNlfSlgKTtcbiB9XG5cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09cmF3VHJlZTtcbm91dC5vcGVuKCd7Jyk7XG5kZWNvZGVQcm9wZXJ0eShRQ0xBU1Msb3JpZ2luYWwpO1xuaWYoJ3Jlc3QnaW4gcmF3VHJlZSl7XG5hc3NlcnQudHlwZW9mKHJlc3QsJ29iamVjdCcpO1xuYXNzZXJ0KHJlc3QhPT1udWxsKTtcbmNvbnN0IG5hbWVzPW93bktleXMocmVzdCk7XG5mb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxubmFtZSlcbiB9IG9mICR7cmVzdH0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxuZGVjb2RlUHJvcGVydHkobmFtZSxyZXN0W25hbWVdKTtcbiB9XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cblxuY2FzZSdlcnJvcic6e1xuY29uc3R7XG5uYW1lLFxubWVzc2FnZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWR9PVxucmF3VHJlZTtcbmNhdXNlPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGNhdXNlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xubmFtZSE9PSBgQWdncmVnYXRlRXJyb3JgfHxcbkZhaWwgYEFnZ3JlZ2F0ZUVycm9yIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xuZXJyb3JzPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGVycm9ycyBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbnJldHVybiBvdXQubmV4dCggYCR7bmFtZX0oJHtxdW90ZShtZXNzYWdlKX0pYCk7XG4gfVxuXG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCdbXScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ1snKTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xub3V0LmxpbmUoKTtcbmRlY29kZShyYXdUcmVlW2ldKTtcbm91dC5uZXh0KCcsJyk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnXScpO1xuIH1cbiB9ZWxzZXtcbi8vXG4vL1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJhd1RyZWUpO1xuaWYobmFtZXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gb3V0Lm5leHQoJ3t9Jyk7XG4gfWVsc2V7XG5vdXQub3BlbigneycpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuZGVjb2RlUHJvcGVydHkobmFtZSxyYXdUcmVlW25hbWVdKTtcbiB9XG5yZXR1cm4gb3V0LmNsb3NlKCd9Jyk7XG4gfVxuIH1cbiB9O1xucHJlcGFyZShlbmNvZGluZyk7XG5kZWNvZGUoZW5jb2RpbmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfTskaM2PX29uY2UuZGVjb2RlVG9KdXN0aW4oZGVjb2RlVG9KdXN0aW4pO1xuaGFyZGVuKGRlY29kZVRvSnVzdGluKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlY29kZVRvSnVzdGluIjpbImRlY29kZVRvSnVzdGluIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEQSpudcBgAAXAYAAC0AAABAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9tYXJzaGFsLmpzIl0sImV4cG9ydHMiOlsicGFyc2UiLCJzdHJpbmdpZnkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlTWFyc2hhbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRWYWxUb1Nsb3Q9KHZhbCk9PlxuRmFpbCBgTWFyc2hhbCdzIHN0cmluZ2lmeSByZWplY3RzIHByZXNlbmNlcyBhbmQgcHJvbWlzZXMgJHt2YWx9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRTbG90VG9WYWw9KHNsb3QsX2lmYWNlKT0+XG5GYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90cyAke3Nsb3R9YDtcblxuY29uc3QgYmFkQXJyYXlIYW5kbGVyPWhhcmRlbih7XG5nZXQ6KF90YXJnZXQsbmFtZSxfcmVjZWl2ZXIpPT57XG5pZihuYW1lPT09J2xlbmd0aCcpe1xucmV0dXJuIDA7XG4gfVxuLy9cbnRocm93IEZhaWwgYE1hcnNoYWwncyBwYXJzZSBtdXN0IG5vdCBlbmNvZGUgYW55IHNsb3QgcG9zaXRpb25zICR7bmFtZX1gO1xuIH19KTtcblxuXG5jb25zdCBiYWRBcnJheT1oYXJkZW4obmV3IFByb3h5KGhhcmRlbihbXSksYmFkQXJyYXlIYW5kbGVyKSk7XG5cbmNvbnN0e3NlcmlhbGl6ZSx1bnNlcmlhbGl6ZX09bWFrZU1hcnNoYWwoXG5kb05vdENvbnZlcnRWYWxUb1Nsb3QsXG5kb05vdENvbnZlcnRTbG90VG9WYWwsXG57XG5lcnJvclRhZ2dpbmc6J29mZicsXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdDonY2FwZGF0YSd9KTtcblxuXG5cbi8qXG5cblxuICovXG5jb25zdCBzdHJpbmdpZnk9KHZhbCk9PnNlcmlhbGl6ZSh2YWwpLmJvZHk7JGjNj19vbmNlLnN0cmluZ2lmeShzdHJpbmdpZnkpO1xuaGFyZGVuKHN0cmluZ2lmeSk7XG5cbi8qXG5cblxuICovXG5jb25zdCBwYXJzZT0oc3RyKT0+XG51bnNlcmlhbGl6ZShcbmhhcmRlbih7XG5ib2R5OnN0cixcbnNsb3RzOmJhZEFycmF5fSkpOyRozY9fb25jZS5wYXJzZShwYXJzZSk7XG5cblxuaGFyZGVuKHBhcnNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN0cmluZ2lmeSI6WyJzdHJpbmdpZnkiXSwicGFyc2UiOlsicGFyc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKcNSTionAAAqJwAAIwAAAEBlbmRvL21hcnNoYWwtdjEuNi4xL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIiwiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXJzaGFsIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxhc3NlcnRQYXNzYWJsZSxnZXRJbnRlcmZhY2VPZixnZXRFcnJvckNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5T2YsdG9QYXNzYWJsZUVycm9yLFgsRmFpbCxxLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLG9iamVjdE1hcCxRQ0xBU1MsbWFrZUVuY29kZVRvQ2FwRGF0YSxtYWtlRGVjb2RlRnJvbUNhcERhdGEsbWFrZURlY29kZUZyb21TbWFsbGNhcHMsbWFrZUVuY29kZVRvU21hbGxjYXBzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJ0b1Bhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAodG9QYXNzYWJsZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb0NhcERhdGEuanNcIiwgW1tcIlFDTEFTU1wiLCBbJGjNj19hID0+IChRQ0xBU1MgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRW5jb2RlVG9DYXBEYXRhID0gJGjNj19hKV1dLFtcIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbUNhcERhdGEgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvU21hbGxjYXBzLmpzXCIsIFtbXCJtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwc1wiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyA9ICRozY9fYSldXSxbXCJtYWtlRW5jb2RlVG9TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvU21hbGxjYXBzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e2RlZmluZVByb3BlcnRpZXN9PU9iamVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0VmFsVG9TbG90Rm49KHgpPT54O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0U2xvdFRvVmFsRm49KHgsXyk9Png7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXJzaGFsPShcbmNvbnZlcnRWYWxUb1Nsb3Q9ZGVmYXVsdFZhbFRvU2xvdEZuLFxuY29udmVydFNsb3RUb1ZhbD1kZWZhdWx0U2xvdFRvVmFsRm4sXG57XG5lcnJvclRhZ2dpbmc9J29uJyxcbm1hcnNoYWxOYW1lPSdhbm9uLW1hcnNoYWwnLFxuLy9cbi8vXG5lcnJvcklkTnVtPTEwMDAwLFxuLy9cbi8vXG5tYXJzaGFsU2F2ZUVycm9yPShlcnIpPT5cbmNvbnNvbGUubG9nKCdUZW1wb3JhcnkgbG9nZ2luZyBvZiBzZW50IGVycm9yJyxlcnIpLFxuLy9cbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0PSdjYXBkYXRhJ309XG57fSk9Plxue1xuYXNzZXJ0LnR5cGVvZihtYXJzaGFsTmFtZSwnc3RyaW5nJyk7XG5lcnJvclRhZ2dpbmc9PT0nb24nfHxcbmVycm9yVGFnZ2luZz09PSdvZmYnfHxcbkZhaWwgYFRoZSBlcnJvclRhZ2dpbmcgb3B0aW9uIGNhbiBvbmx5IGJlIFwib25cIiBvciBcIm9mZlwiICR7ZXJyb3JUYWdnaW5nfWA7XG5jb25zdCBuZXh0RXJyb3JJZD0oKT0+e1xuZXJyb3JJZE51bSs9MTtcbnJldHVybiBgZXJyb3I6JHttYXJzaGFsTmFtZX0jJHtlcnJvcklkTnVtfWA7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IHRvQ2FwRGF0YT0ocm9vdCk9PntcbmNvbnN0IHNsb3RzPVtdO1xuLy9cbmNvbnN0IHNsb3RNYXA9bmV3IE1hcCgpO1xuXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RDb21tb249KHBhc3NhYmxlKT0+e1xubGV0IGluZGV4PXNsb3RNYXAuZ2V0KHBhc3NhYmxlKTtcbmlmKGluZGV4IT09dW5kZWZpbmVkKXtcbi8vXG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDp0cnVlfSk7XG4gfVxuXG5pbmRleD1zbG90cy5sZW5ndGg7XG5jb25zdCBzbG90PWNvbnZlcnRWYWxUb1Nsb3QocGFzc2FibGUpO1xuc2xvdHMucHVzaChzbG90KTtcbnNsb3RNYXAuc2V0KHBhc3NhYmxlLGluZGV4KTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDpmYWxzZX0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAqL1xuY29uc3QgZW5jb2RlRXJyb3JDb21tb249KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IG1lc3NhZ2U9ZW5jb2RlUmVjdXIoIGAke2Vyci5tZXNzYWdlfWApO1xuYXNzZXJ0LnR5cGVvZihtZXNzYWdlLCdzdHJpbmcnKTtcbmNvbnN0IG5hbWU9ZW5jb2RlUmVjdXIoIGAke2Vyci5uYW1lfWApO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbi8vXG4vL1xuLy9cbmlmKGVycm9yVGFnZ2luZz09PSdvbicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGVycm9ySWQ9ZW5jb2RlUmVjdXIobmV4dEVycm9ySWQoKSk7XG5hc3NlcnQudHlwZW9mKGVycm9ySWQsJ3N0cmluZycpO1xuYW5ub3RhdGVFcnJvcihlcnIsWCBgU2VudCBhcyAke2Vycm9ySWR9YCk7XG5tYXJzaGFsU2F2ZUVycm9yKGVycik7XG5yZXR1cm4gaGFyZGVuKHtlcnJvcklkLG1lc3NhZ2UsbmFtZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7bWVzc2FnZSxuYW1lfSk7XG4gfVxuIH07XG5cbmlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nY2FwZGF0YScpe1xuLypcblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvQ2FwRGF0YT0ocGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuaWYocmVwZWF0PT09dHJ1ZXx8aWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGluZGV4fSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonc2xvdCcsaWZhY2UsaW5kZXh9KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHZhbCxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEodmFsLGdldEludGVyZmFjZU9mKHZhbCkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvQ2FwRGF0YShwcm9taXNlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBlcnJEYXRhPWVuY29kZUVycm9yQ29tbW9uKGVycixlbmNvZGVSZWN1cik7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonZXJyb3InLC4uLmVyckRhdGF9KTtcbiB9O1xuXG5jb25zdCBlbmNvZGVUb0NhcERhdGE9bWFrZUVuY29kZVRvQ2FwRGF0YSh7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGF9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvQ2FwRGF0YShyb290KTtcbmNvbnN0IGJvZHk9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5yZXR1cm4gaGFyZGVuKHtcbmJvZHksXG5zbG90c30pO1xuXG4gfWVsc2UgaWYoc2VyaWFsaXplQm9keUZvcm1hdD09PSdzbWFsbGNhcHMnKXtcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvU21hbGxjYXBzPShwcmVmaXgscGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuLy9cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH1gO1xuIH1cbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH0uJHtpZmFjZX1gO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW1vdGFibGUsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9TbWFsbGNhcHMoJyQnLHJlbW90YWJsZSxnZXRJbnRlcmZhY2VPZihyZW1vdGFibGUpKTtcblxuY29uc3QgZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCcmJyxwcm9taXNlKTtcblxuY29uc3QgZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xuY29uc3R7bWVzc2FnZSwuLi5yZXN0fT1lcnJEYXRhO1xucmV0dXJuIGhhcmRlbih7JyNlcnJvcic6bWVzc2FnZSwuLi5yZXN0fSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9bWFrZUVuY29kZVRvU21hbGxjYXBzKHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwc30pO1xuXG5cbmNvbnN0IGVuY29kZWQ9ZW5jb2RlVG9TbWFsbGNhcHMocm9vdCk7XG5jb25zdCBzbWFsbGNhcHNCb2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG4vL1xuLy9cbmJvZHk6IGAjJHtzbWFsbGNhcHNCb2R5fWAsXG5zbG90c30pO1xuXG4gfWVsc2V7XG4vL1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZUJvZHlGb3JtYXQ6ICR7cShzZXJpYWxpemVCb2R5Rm9ybWF0KX1gO1xuIH1cbiB9O1xuXG5jb25zdCBtYWtlRnVsbFJldml2ZT0oc2xvdHMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsTWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVTbG90Q29tbW9uPShzbG90RGF0YSk9PntcbmNvbnN0e2lmYWNlPXVuZGVmaW5lZCxpbmRleCwuLi5yZXN0fT1zbG90RGF0YTtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgc2xvdCBwcm9wZXJ0aWVzICR7cShvd25LZXlzKHJlc3QpKX1gO1xuY29uc3QgZXh0YW50PXZhbE1hcC5nZXQoaW5kZXgpO1xuaWYoZXh0YW50KXtcbnJldHVybiBleHRhbnQ7XG4gfVxuLy9cbi8vXG5jb25zdCBzbG90PXNsb3RzW051bWJlcihOYXQoaW5kZXgpKV07XG5jb25zdCB2YWw9Y29udmVydFNsb3RUb1ZhbChzbG90LGlmYWNlKTtcbnZhbE1hcC5zZXQoaW5kZXgsdmFsKTtcbnJldHVybiB2YWw7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGRlY29kZUVycm9yQ29tbW9uPShlcnJEYXRhLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7XG5lcnJvcklkPXVuZGVmaW5lZCxcbm1lc3NhZ2UsXG5uYW1lLFxuY2F1c2U9dW5kZWZpbmVkLFxuZXJyb3JzPXVuZGVmaW5lZCxcbi4uLnJlc3R9PVxuZXJyRGF0YTtcbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBkTmFtZT1kZWNvZGVSZWN1cihuYW1lKTtcbmNvbnN0IGRNZXNzYWdlPWRlY29kZVJlY3VyKG1lc3NhZ2UpO1xuLy9cbmNvbnN0IGRFcnJvcklkPS8qICAgICAgICAgICAgICAgICAqL2Vycm9ySWQmJmRlY29kZVJlY3VyKGVycm9ySWQpO1xuaWYodHlwZW9mIGROYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgaW52YWxpZCBlcnJvciBuYW1lIHR5cGVvZiAke3EodHlwZW9mIGROYW1lKX1gO1xuIH1cbmlmKHR5cGVvZiBkTWVzc2FnZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBkTWVzc2FnZSl9YDtcbiB9XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKGROYW1lKXx8RXJyb3I7XG5jb25zdCBlcnJvck5hbWU9XG5kRXJyb3JJZD09PXVuZGVmaW5lZD9cbiBgUmVtb3RlJHtlcnJDb25zdHJ1Y3Rvci5uYW1lfWA6XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX0oJHtkRXJyb3JJZH0pYDtcbmNvbnN0IG9wdGlvbnM9e1xuZXJyb3JOYW1lLFxuc2FuaXRpemU6ZmFsc2V9O1xuXG5pZihjYXVzZSl7XG5vcHRpb25zLmNhdXNlPWRlY29kZVJlY3VyKGNhdXNlKTtcbiB9XG5pZihlcnJvcnMpe1xub3B0aW9ucy5lcnJvcnM9ZGVjb2RlUmVjdXIoZXJyb3JzKTtcbiB9XG5jb25zdCByYXdFcnJvcj1tYWtlRXJyb3IoZE1lc3NhZ2UsZXJyQ29uc3RydWN0b3Isb3B0aW9ucyk7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVzY3M9b2JqZWN0TWFwKHJlc3QsKGRhdGEpPT4oe1xudmFsdWU6ZGVjb2RlUmVjdXIoZGF0YSksXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KSk7XG5cbmRlZmluZVByb3BlcnRpZXMocmF3RXJyb3IsZGVzY3MpO1xuaGFyZGVuKHJhd0Vycm9yKTtcbnJldHVybiB0b1Bhc3NhYmxlRXJyb3IocmF3RXJyb3IpO1xuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGE9KHJhd1RyZWUsX2RlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5zbG90RGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHNsb3REYXRhKTtcbiB9O1xuXG5jb25zdCBkZWNvZGVFcnJvckZyb21DYXBEYXRhPShyYXdUcmVlLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5lcnJEYXRhfT1yYXdUcmVlO1xucmV0dXJuIGRlY29kZUVycm9yQ29tbW9uKGVyckRhdGEsZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21DYXBEYXRhPW1ha2VEZWNvZGVGcm9tQ2FwRGF0YSh7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZVByb21pc2VGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGF9KTtcblxuXG5jb25zdCBtYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHM9KHByZWZpeCk9Pntcbi8qXG5cblxuXG4gICAgICAgKi9cbnJldHVybihzdHJpbmdFbmNvZGluZyxfZGVjb2RlUmVjdXIpPT57XG5hc3NlcnQoc3RyaW5nRW5jb2RpbmcuY2hhckF0KDApPT09cHJlZml4KTtcbi8vXG5jb25zdCBpPXN0cmluZ0VuY29kaW5nLmluZGV4T2YoJy4nKTtcbmNvbnN0IGluZGV4PU51bWJlcihzdHJpbmdFbmNvZGluZy5zbGljZSgxLGk8MD91bmRlZmluZWQ6aSkpO1xuLy9cbmNvbnN0IGlmYWNlPWk8MD91bmRlZmluZWQ6c3RyaW5nRW5jb2Rpbmcuc2xpY2UoaSsxKTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHtpZmFjZSxpbmRleH0pO1xuIH07XG4gfTtcbmNvbnN0IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCckJyk7XG5jb25zdCBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1tYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHMoJyYnKTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyxkZWNvZGVSZWN1cik9PntcbmNvbnN0eycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdEVyckRhdGF9PWVuY29kaW5nO1xuIWhhc093blByb3BlcnR5T2YocmVzdEVyckRhdGEsJ21lc3NhZ2UnKXx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgZXJyb3IgcHJvcGVydHkgJHtxKCdtZXNzYWdlJyl9YDtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbih7bWVzc2FnZSwuLi5yZXN0RXJyRGF0YX0sZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZUZyb21TbWFsbGNhcHMoe1xuLy9cbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG4vL1xuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtyZXZpdmVGcm9tQ2FwRGF0YSxyZXZpdmVGcm9tU21hbGxjYXBzfSk7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPShkYXRhKT0+e1xuY29uc3R7Ym9keSxzbG90c309ZGF0YTtcbnR5cGVvZiBib2R5PT09J3N0cmluZyd8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLmJvZHkgaXMgJHtib2R5fSwgbm90IHN0cmluZylgO1xuaXNBcnJheShkYXRhLnNsb3RzKXx8XG5GYWlsIGB1bnNlcmlhbGl6ZSgpIGdpdmVuIG5vbi1jYXBkYXRhICguc2xvdHMgYXJlIG5vdCBBcnJheSlgO1xuY29uc3R7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc309bWFrZUZ1bGxSZXZpdmUoc2xvdHMpO1xubGV0IHJlc3VsdDtcbi8vXG5pZihib2R5LmNoYXJBdCgwKT09PScjJyl7XG5jb25zdCBzbWFsbGNhcHNCb2R5PWJvZHkuc2xpY2UoMSk7XG5jb25zdCBlbmNvZGluZz1oYXJkZW4oSlNPTi5wYXJzZShzbWFsbGNhcHNCb2R5KSk7XG5yZXN1bHQ9aGFyZGVuKHJldml2ZUZyb21TbWFsbGNhcHMoZW5jb2RpbmcpKTtcbiB9ZWxzZXtcbmNvbnN0IHJhd1RyZWU9aGFyZGVuKEpTT04ucGFyc2UoYm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tQ2FwRGF0YShyYXdUcmVlKSk7XG4gfVxuLy9cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUocmVzdWx0KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHQpO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xudG9DYXBEYXRhLFxuZnJvbUNhcERhdGEsXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc2VyaWFsaXplOnRvQ2FwRGF0YSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVuc2VyaWFsaXplOmZyb21DYXBEYXRhfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTWFyc2hhbChtYWtlTWFyc2hhbCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFyc2hhbCI6WyJtYWtlTWFyc2hhbCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7402JnCcAAJwnAAAlAAAAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL3JhbmtPcmRlci5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiLi9lbmNvZGVQYXNzYWJsZS5qcyJdLCJleHBvcnRzIjpbIkZ1bGxSYW5rQ292ZXIiLCJhc3NlcnRSYW5rU29ydGVkIiwiY29tcGFyYXRvck1pcnJvckltYWdlIiwiY29tcGFyZUFudGlSYW5rIiwiY29tcGFyZVJhbmsiLCJjb3ZlcmVkRW50cmllcyIsImdldEluZGV4Q292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciIsImludGVyc2VjdFJhbmtDb3ZlcnMiLCJpc1JhbmtTb3J0ZWQiLCJtYWtlQ29tcGFyYXRvcktpdCIsIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Iiwic29ydEJ5UmFuayIsInRyaXZpYWxDb21wYXJhdG9yIiwidW5pb25SYW5rQ292ZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldFRhZyxwYXNzU3R5bGVPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsRmFpbCxxLHBhc3NTdHlsZVByZWZpeGVzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlUGFzc2FibGUuanNcIiwgW1tcInBhc3NTdHlsZVByZWZpeGVzXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZVByZWZpeGVzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzLHNldFByb3RvdHlwZU9mLGlzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNhbWVWYWx1ZVplcm89KHgseSk9Png9PT15fHxpcyh4LHkpO1xuXG5jb25zdCAgICAgICAgdHJpdmlhbENvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT5cbi8vXG5sZWZ0PHJpZ2h0Py0xOmxlZnQ9PT1yaWdodD8wOjE7XG5cbi8qXG5cbiAqLyRozY9fb25jZS50cml2aWFsQ29tcGFyYXRvcih0cml2aWFsQ29tcGFyYXRvcik7XG5cbmNvbnN0IHBhc3NTdHlsZVJhbmtzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbmVudHJpZXMocGFzc1N0eWxlUHJlZml4ZXMpXG4vL1xuLnNvcnQoKFtfbGVmdFN0eWxlLGxlZnRQcmVmaXhlc10sW19yaWdodFN0eWxlLHJpZ2h0UHJlZml4ZXNdKT0+e1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKGxlZnRQcmVmaXhlcyxyaWdodFByZWZpeGVzKTtcbiB9KS5cbm1hcCgoW3Bhc3NTdHlsZSxwcmVmaXhlc10saW5kZXgpPT57XG4vL1xuLy9cbi8vXG5wcmVmaXhlcz09PVsuLi5wcmVmaXhlc10uc29ydCgpLmpvaW4oJycpfHxcbkZhaWwgYHVuc29ydGVkIHByZWZpeGVzIGZvciBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3EocHJlZml4ZXMpfWA7XG5jb25zdCBjb3Zlcj1bXG5wcmVmaXhlcy5jaGFyQXQoMCksXG5TdHJpbmcuZnJvbUNoYXJDb2RlKHByZWZpeGVzLmNoYXJDb2RlQXQocHJlZml4ZXMubGVuZ3RoLTEpKzEpXTtcblxucmV0dXJuW3Bhc3NTdHlsZSx7aW5kZXgsY292ZXJ9XTtcbiB9KSk7XG5cblxuc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUmFua3MsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUmFua3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0UGFzc1N0eWxlQ292ZXI9KHBhc3NTdHlsZSk9PnBhc3NTdHlsZVJhbmtzW3Bhc3NTdHlsZV0uY292ZXI7JGjNj19vbmNlLmdldFBhc3NTdHlsZUNvdmVyKGdldFBhc3NTdHlsZUNvdmVyKTtcbmhhcmRlbihnZXRQYXNzU3R5bGVDb3Zlcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWVtb09mU29ydGVkPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgY29tcGFyYXRvck1pcnJvckltYWdlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29tcGFyYXRvcktpdD0oY29tcGFyZVJlbW90YWJsZXM9KF94LF95KT0+TmFOKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT57XG5pZihzYW1lVmFsdWVaZXJvKGxlZnQscmlnaHQpKXtcbnJldHVybiAwO1xuIH1cbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG5yZXR1cm4gdHJpdmlhbENvbXBhcmF0b3IoXG5wYXNzU3R5bGVSYW5rc1tsZWZ0U3R5bGVdLmluZGV4LFxucGFzc1N0eWxlUmFua3NbcmlnaHRTdHlsZV0uaW5kZXgpO1xuXG4gfVxuLypcblxuICAgICAqL1xuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGNvbXBhcmVSZW1vdGFibGVzKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xuLy9cbi8vXG5yZXR1cm4gMDtcbiB9XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOntcbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ3N5bWJvbCc6e1xucmV0dXJuIGNvbXBhcmF0b3IoXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wobGVmdCksXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wocmlnaHQpKTtcblxuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKGxlZnQpKXtcbmFzc2VydCghTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbnJldHVybi0xO1xuIH1cbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG5jb25zdCByZXN1bHQ9Y29tcGFyYXRvcihsZWZ0TmFtZXMscmlnaHROYW1lcyk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuY29uc3QgcmlnaHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpO1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdFZhbHVlcyxyaWdodFZhbHVlcyk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxhYmVsQ29tcD1jb21wYXJhdG9yKGdldFRhZyhsZWZ0KSxnZXRUYWcocmlnaHQpKTtcbmlmKGxhYmVsQ29tcCE9PTApe1xucmV0dXJuIGxhYmVsQ29tcDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihsZWZ0LnBheWxvYWQscmlnaHQucGF5bG9hZCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgcGFzc1N0eWxlOiAke3EobGVmdFN0eWxlKX1gO1xuIH19XG5cbi8qICAgICAgICAgICAgICAgKi9cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3V0ZXJDb21wYXJhdG9yPSh4LHkpPT5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NvbXBhcmF0b3IoeCx5KXx8MDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFudGlDb21wYXJhdG9yPSh4LHkpPT5vdXRlckNvbXBhcmF0b3IoeSx4KTtcblxubWVtb09mU29ydGVkLnNldChvdXRlckNvbXBhcmF0b3IsbmV3IFdlYWtTZXQoKSk7XG5tZW1vT2ZTb3J0ZWQuc2V0KGFudGlDb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xuY29tcGFyYXRvck1pcnJvckltYWdlcy5zZXQob3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGFudGlDb21wYXJhdG9yLG91dGVyQ29tcGFyYXRvcik7XG5cbnJldHVybiBoYXJkZW4oe2NvbXBhcmF0b3I6b3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yfSk7XG4gfTtcbi8qXG5cblxuICovJGjNj19vbmNlLm1ha2VDb21wYXJhdG9yS2l0KG1ha2VDb21wYXJhdG9yS2l0KTtcbmNvbnN0ICAgICAgICBjb21wYXJhdG9yTWlycm9ySW1hZ2U9KGNvbXBhcmF0b3IpPT5cbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuZ2V0KGNvbXBhcmF0b3IpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmNvbXBhcmF0b3JNaXJyb3JJbWFnZShjb21wYXJhdG9yTWlycm9ySW1hZ2UpO1xuY29uc3QgICAgICAgIGlzUmFua1NvcnRlZD0ocGFzc2FibGVzLGNvbXBhcmUpPT57XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuaWYoc3ViTWVtb09mU29ydGVkLmhhcyhwYXNzYWJsZXMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydChwYXNzU3R5bGVPZihwYXNzYWJsZXMpPT09J2NvcHlBcnJheScpO1xuZm9yKGxldCBpPTE7aTxwYXNzYWJsZXMubGVuZ3RoO2krPTEpe1xuaWYoY29tcGFyZShwYXNzYWJsZXNbaS0xXSxwYXNzYWJsZXNbaV0pPj0xKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuc3ViTWVtb09mU29ydGVkLmFkZChwYXNzYWJsZXMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuaXNSYW5rU29ydGVkKGlzUmFua1NvcnRlZCk7XG5oYXJkZW4oaXNSYW5rU29ydGVkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRSYW5rU29ydGVkPShzb3J0ZWQsY29tcGFyZSk9PlxuaXNSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKXx8XG4vL1xuLy9cbkZhaWwgYE11c3QgYmUgcmFuayBzb3J0ZWQ6ICR7c29ydGVkfSB2cyAke3NvcnRCeVJhbmsoc29ydGVkLGNvbXBhcmUpfWA7JGjNj19vbmNlLmFzc2VydFJhbmtTb3J0ZWQoYXNzZXJ0UmFua1NvcnRlZCk7XG5oYXJkZW4oYXNzZXJ0UmFua1NvcnRlZCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNvcnRCeVJhbms9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuaWYoQXJyYXkuaXNBcnJheShwYXNzYWJsZXMpKXtcbmhhcmRlbihwYXNzYWJsZXMpO1xuLy9cbi8vXG4vL1xuaWYoaXNSYW5rU29ydGVkKHBhc3NhYmxlcyxjb21wYXJlKSl7XG5yZXR1cm4gcGFzc2FibGVzO1xuIH1cbiB9XG5jb25zdCB1bnNvcnRlZD1bLi4ucGFzc2FibGVzXTtcbnVuc29ydGVkLmZvckVhY2goaGFyZGVuKTtcbmNvbnN0IHNvcnRlZD11bnNvcnRlZC5zb3J0KGNvbXBhcmUpO1xuLy9cbi8vXG4vL1xuaWYoY29tcGFyZSh0cnVlLHVuZGVmaW5lZCk+MCl7XG5sZXQgaT1zb3J0ZWQubGVuZ3RoLTE7XG53aGlsZShpPj0wJiZzb3J0ZWRbaV09PT11bmRlZmluZWQpaS09MTtcbmNvbnN0IG49c29ydGVkLmxlbmd0aC1pLTE7XG5pZihuPjAmJm48c29ydGVkLmxlbmd0aCl7XG5zb3J0ZWQuY29weVdpdGhpbihuLDApO1xuc29ydGVkLmZpbGwoLyogICAgICAgICAgICAqL3VuZGVmaW5lZCwwLG4pO1xuIH1cbiB9XG5oYXJkZW4oc29ydGVkKTtcbmNvbnN0IHN1Yk1lbW9PZlNvcnRlZD1tZW1vT2ZTb3J0ZWQuZ2V0KGNvbXBhcmUpO1xuYXNzZXJ0KHN1Yk1lbW9PZlNvcnRlZCE9PXVuZGVmaW5lZCk7XG5zdWJNZW1vT2ZTb3J0ZWQuYWRkKHNvcnRlZCk7XG5yZXR1cm4gc29ydGVkO1xuIH07JGjNj19vbmNlLnNvcnRCeVJhbmsoc29ydEJ5UmFuayk7XG5oYXJkZW4oc29ydEJ5UmFuayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByYW5rU2VhcmNoPShzb3J0ZWQsY29tcGFyZSxrZXksYmlhcz0nbGVmdE1vc3QnKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5sZXQgbGVmdD0wO1xubGV0IHJpZ2h0PXNvcnRlZC5sZW5ndGg7XG53aGlsZShsZWZ0PHJpZ2h0KXtcbmNvbnN0IG09TWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7XG5jb25zdCBjb21wPWNvbXBhcmUoc29ydGVkW21dLGtleSk7XG5pZihjb21wPD0tMXx8Y29tcD09PTAmJmJpYXM9PT0ncmlnaHRNb3N0Jyl7XG5sZWZ0PW0rMTtcbiB9ZWxzZXtcbmFzc2VydChjb21wPj0xfHxjb21wPT09MCYmYmlhcz09PSdsZWZ0TW9zdCcpO1xucmlnaHQ9bTtcbiB9XG4gfVxucmV0dXJuIGJpYXM9PT0nbGVmdE1vc3QnP2xlZnQ6cmlnaHQtMTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbmRleENvdmVyPShzb3J0ZWQsY29tcGFyZSxbbGVmdEtleSxyaWdodEtleV0pPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmNvbnN0IGxlZnRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLGxlZnRLZXksJ2xlZnRNb3N0Jyk7XG5jb25zdCByaWdodEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUscmlnaHRLZXksJ3JpZ2h0TW9zdCcpO1xucmV0dXJuW2xlZnRJbmRleCxyaWdodEluZGV4XTtcbiB9OyRozY9fb25jZS5nZXRJbmRleENvdmVyKGdldEluZGV4Q292ZXIpO1xuaGFyZGVuKGdldEluZGV4Q292ZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBGdWxsUmFua0NvdmVyPWhhcmRlbihbJycsJ3snXSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuRnVsbFJhbmtDb3ZlcihGdWxsUmFua0NvdmVyKTtcbmNvbnN0ICAgICAgICBjb3ZlcmVkRW50cmllcz0oc29ydGVkLFtsZWZ0SW5kZXgscmlnaHRJbmRleF0pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpdGVyYWJsZT1oYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPWxlZnRJbmRleDtcbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuaWYoaTw9cmlnaHRJbmRleCl7XG5jb25zdCBlbGVtZW50PXNvcnRlZFtpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTpbaSxlbGVtZW50XSxkb25lOmZhbHNlfSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTp1bmRlZmluZWQsZG9uZTp0cnVlfSk7XG4gfVxuIH19KTtcblxuIH19KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLmNvdmVyZWRFbnRyaWVzKGNvdmVyZWRFbnRyaWVzKTtcbmhhcmRlbihjb3ZlcmVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYXhSYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKT49MD9hOmI7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtaW5SYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKTw9MD9hOmI7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bmlvblJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCB1bmlvblJhbmtDb3ZlclBhaXI9KFtsZWZ0QSxyaWdodEFdLFtsZWZ0QixyaWdodEJdKT0+W1xubWluUmFuayhjb21wYXJlLGxlZnRBLGxlZnRCKSxcbm1heFJhbmsoY29tcGFyZSxyaWdodEEscmlnaHRCKV07XG5cbnJldHVybiBjb3ZlcnMucmVkdWNlKHVuaW9uUmFua0NvdmVyUGFpcixbJ3snLCcnXSk7XG4gfTskaM2PX29uY2UudW5pb25SYW5rQ292ZXJzKHVuaW9uUmFua0NvdmVycyk7XG5oYXJkZW4odW5pb25SYW5rQ292ZXJzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGludGVyc2VjdFJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBpbnRlcnNlY3RSYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1heFJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5taW5SYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZShpbnRlcnNlY3RSYW5rQ292ZXJQYWlyLFsnJywneyddKTtcbiB9OyRozY9fb25jZS5pbnRlcnNlY3RSYW5rQ292ZXJzKGludGVyc2VjdFJhbmtDb3ZlcnMpO1xuXG5jb25zdCAgICAgICB7Y29tcGFyYXRvcjpjb21wYXJlUmFuayxhbnRpQ29tcGFyYXRvcjpjb21wYXJlQW50aVJhbmt9PVxubWFrZUNvbXBhcmF0b3JLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJlUmFuayhjb21wYXJlUmFuayk7JGjNj19vbmNlLmNvbXBhcmVBbnRpUmFuayhjb21wYXJlQW50aVJhbmspO1xuY29uc3QgICAgICAgIG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0PShsb25nTGl2ZWQ9ZmFsc2UpPT57XG5sZXQgbnVtU2Vlbj0wO1xuLy9cbi8vXG4vL1xuY29uc3QgTWFwQ29uc3RydWN0b3I9bG9uZ0xpdmVkP1dlYWtNYXA6TWFwO1xuY29uc3Qgc2Vlbj1uZXcgTWFwQ29uc3RydWN0b3IoKTtcbmNvbnN0IHRhZz0ocik9PntcbmlmKHNlZW4uaGFzKHIpKXtcbnJldHVybiBzZWVuLmdldChyKTtcbiB9XG5udW1TZWVuKz0xO1xuc2Vlbi5zZXQocixudW1TZWVuKTtcbnJldHVybiBudW1TZWVuO1xuIH07XG5jb25zdCBjb21wYXJlUmVtb3RhYmxlcz0oeCx5KT0+Y29tcGFyZVJhbmsodGFnKHgpLHRhZyh5KSk7XG5yZXR1cm4gbWFrZUNvbXBhcmF0b3JLaXQoY29tcGFyZVJlbW90YWJsZXMpO1xuIH07JGjNj19vbmNlLm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KTtcbmhhcmRlbihtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0cml2aWFsQ29tcGFyYXRvciI6WyJ0cml2aWFsQ29tcGFyYXRvciJdLCJnZXRQYXNzU3R5bGVDb3ZlciI6WyJnZXRQYXNzU3R5bGVDb3ZlciJdLCJtYWtlQ29tcGFyYXRvcktpdCI6WyJtYWtlQ29tcGFyYXRvcktpdCJdLCJjb21wYXJhdG9yTWlycm9ySW1hZ2UiOlsiY29tcGFyYXRvck1pcnJvckltYWdlIl0sImlzUmFua1NvcnRlZCI6WyJpc1JhbmtTb3J0ZWQiXSwiYXNzZXJ0UmFua1NvcnRlZCI6WyJhc3NlcnRSYW5rU29ydGVkIl0sInNvcnRCeVJhbmsiOlsic29ydEJ5UmFuayJdLCJnZXRJbmRleENvdmVyIjpbImdldEluZGV4Q292ZXIiXSwiRnVsbFJhbmtDb3ZlciI6WyJGdWxsUmFua0NvdmVyIl0sImNvdmVyZWRFbnRyaWVzIjpbImNvdmVyZWRFbnRyaWVzIl0sInVuaW9uUmFua0NvdmVycyI6WyJ1bmlvblJhbmtDb3ZlcnMiXSwiaW50ZXJzZWN0UmFua0NvdmVycyI6WyJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sImNvbXBhcmVSYW5rIjpbImNvbXBhcmVSYW5rIl0sImNvbXBhcmVBbnRpUmFuayI6WyJjb21wYXJlQW50aVJhbmsiXSwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiOlsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAEBlbmRvL21hcnNoYWwtdjEuNi4xL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX+pOglkFAABZBQAAHgAAAEBlbmRvL25hdC12NS4wLjEyL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiTmF0IiwiaXNOYXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc05hdCwgJ25hbWUnLCB7dmFsdWU6IFwiaXNOYXRcIn0pOyRozY9fb25jZS5pc05hdChpc05hdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdCwgJ25hbWUnLCB7dmFsdWU6IFwiTmF0XCJ9KTskaM2PX29uY2UuTmF0KE5hdCk7ICAgLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGlzTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5yZXR1cm4gYWxsZWdlZE51bT49MDtcbiB9XG5pZih0eXBlb2YgYWxsZWdlZE51bSE9PSdudW1iZXInKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbnJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihhbGxlZ2VkTnVtKSYmYWxsZWdlZE51bT49MDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBOYXQoYWxsZWdlZE51bSl7XG5pZih0eXBlb2YgYWxsZWdlZE51bT09PSdiaWdpbnQnKXtcbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBhbGxlZ2VkTnVtO1xuIH1cblxuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nbnVtYmVyJyl7XG5pZighTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkpe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYCk7XG4gfVxuaWYoYWxsZWdlZE51bTwwKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5lZ2F0aXZlYCk7XG4gfVxucmV0dXJuIEJpZ0ludChhbGxlZ2VkTnVtKTtcbiB9XG5cbnRocm93IFR5cGVFcnJvcihcbiBgJHthbGxlZ2VkTnVtfSBpcyBhICR7dHlwZW9mIGFsbGVnZWROdW19IGJ1dCBtdXN0IGJlIGEgYmlnaW50IG9yIGEgbnVtYmVyYCk7XG5cbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc05hdCI6WyJpc05hdCJdLCJOYXQiOlsiTmF0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKEpqrw/CgAAPwoAACAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiLCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vc3JjL2Vycm9yLmpzIiwiLi9zcmMvcmVtb3RhYmxlLmpzIiwiLi9zcmMvc3ltYm9sLmpzIiwiLi9zcmMvc3RyaW5nLmpzIiwiLi9zcmMvcGFzc1N0eWxlT2YuanMiLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIiwiLi9zcmMvbWFrZS1mYXIuanMiLCIuL3NyYy90eXBlR3VhcmRzLmpzIiwiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJGYXIiLCJGYXIiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiLCJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIiwiaXNPYmplY3QiLCJpc09iamVjdCIsImlzUGFzc2FibGUiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJeovyVUBgAAVAYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxhc3NlcnRDaGVja2VyLGdldE93bkRhdGFEZXNjcmlwdG9yOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHtnZXRQcm90b3R5cGVPZn09T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXkscHJvdG90eXBlOmFycmF5UHJvdG90eXBlfT1BcnJheTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2FuQmVWYWxpZD0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PlxuaXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJmNoZWNrKGZhbHNlLFggYEFycmF5IGV4cGVjdGVkOiAke2NhbmRpZGF0ZX1gKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5QXJyYXlIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonY29weUFycmF5JyxcblxuY2FuQmVWYWxpZCxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09YXJyYXlQcm90b3R5cGV8fFxuYXNzZXJ0LmZhaWwoWCBgTWFsZm9ybWVkIGFycmF5OiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4vL1xuLy9cbmNvbnN0IGxlbj0vKiAgICAgICAgICAgICAgICAgKi9cbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwnbGVuZ3RoJyxmYWxzZSxhc3NlcnRDaGVja2VyKS52YWx1ZTtcblxuLy9cbi8vXG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbnBhc3NTdHlsZU9mUmVjdXIoXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsaSx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH1cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkubGVuZ3RoPT09bGVuKzF8fFxuYXNzZXJ0LmZhaWwoWCBgQXJyYXlzIG11c3Qgbm90IGhhdmUgbm9uLWluZGV4ZXM6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbiB9fSk7JGjNj19vbmNlLkNvcHlBcnJheUhlbHBlcihDb3B5QXJyYXlIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weUFycmF5SGVscGVyIjpbIkNvcHlBcnJheUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyz0q1KQgAACkIAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2NvcHlSZWNvcmQuanN7ImltcG9ydHMiOlsiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkNvcHlSZWNvcmRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxnZXRPd25EYXRhRGVzY3JpcHRvcixDWDskaM2PX2ltcG9ydHMoW1tcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRQcm90b3R5cGVPZixwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBjaGVja09iamVjdFByb3RvdHlwZT0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlY29yZHMgbXVzdCBpbmhlcml0IGZyb20gT2JqZWN0LnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJvcGVydHlDYW5CZVZhbGlkPShjYW5kaWRhdGUsa2V5LHZhbHVlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbih0eXBlb2Yga2V5PT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbiBvbmx5IGhhdmUgc3RyaW5nLW5hbWVkIHByb3BlcnRpZXM6ICR7Y2FuZGlkYXRlfWApJiYoXG4hY2FuQmVNZXRob2QodmFsdWUpfHxcbiEhY2hlY2smJlxuLy9cbkNYKFxuY2hlY2spXG4gYFJlY29yZHMgY2Fubm90IGNvbnRhaW4gbm9uLWZhciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IG1heSBiZSBtZXRob2RzIG9mIGFuIGltcGxpY2l0IFJlbW90YWJsZTogJHtjYW5kaWRhdGV9YCkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5UmVjb3JkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlSZWNvcmQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xucmV0dXJuKFxuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGNoZWNrKSYmXG4vL1xuLy9cbm93bktleXMoY2FuZGlkYXRlKS5ldmVyeSgoa2V5KT0+XG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsa2V5LGNhbmRpZGF0ZVtrZXldLGNoZWNrKSkpO1xuXG5cbiB9LFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja09iamVjdFByb3RvdHlwZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG4vL1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhjYW5kaWRhdGUpKXtcbmNvbnN0e3ZhbHVlfT1nZXRPd25EYXRhRGVzY3JpcHRvcihcbmNhbmRpZGF0ZSxcbm5hbWUsXG50cnVlLFxuYXNzZXJ0Q2hlY2tlcik7XG5cbmNoZWNrUHJvcGVydHlDYW5CZVZhbGlkKGNhbmRpZGF0ZSxuYW1lLHZhbHVlLGFzc2VydENoZWNrZXIpO1xucGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSk7XG4gfVxuIH19KTskaM2PX29uY2UuQ29weVJlY29yZEhlbHBlcihDb3B5UmVjb3JkSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlSZWNvcmRIZWxwZXIiOlsiQ29weVJlY29yZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABwIuV6VgoAAFYKAAAuAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyIsIi4vbWFrZVRhZ2dlZC5qcyJdLCJleHBvcnRzIjpbImRlZXBseUZ1bGZpbGxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkPWFzeW5jKHZhbCk9Pntcbi8vXG4vL1xuLy9cblxuaWYoIWlzT2JqZWN0KHZhbCkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsKTtcbiB9XG5pZihpc1Byb21pc2UodmFsKSl7XG5yZXR1cm4gRS53aGVuKHZhbCwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCBuYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMocmVjKTtcbmNvbnN0IHZhbFBzPW5hbWVzLm1hcCgobmFtZSk9PmRlZXBseUZ1bGZpbGxlZChyZWNbbmFtZV0pKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PlxuaGFyZGVuKGZyb21FbnRyaWVzKHZhbHMubWFwKChjLGkpPT5bbmFtZXNbaV0sY10pKSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGFycj0vKiAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB2YWxQcz1hcnIubWFwKChwKT0+ZGVlcGx5RnVsZmlsbGVkKHApKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PmhhcmRlbih2YWxzKSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnZD0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdGFnPWdldFRhZyh0Z2QpO1xuLy9cbnJldHVybiBFLndoZW4oZGVlcGx5RnVsZmlsbGVkKHRnZC5wYXlsb2FkKSwocGF5bG9hZCk9PlxubWFrZVRhZ2dlZCh0YWcscGF5bG9hZCkpO1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlbT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIHJlbTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlcnI9LyogICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIGVycjtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHByb209LyogICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdmFsO1xucmV0dXJuIEUud2hlbihwcm9tLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTskaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsYXNzZXJ0Q2hlY2tlcixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGhhc093bixlbnRyaWVzfT1PYmplY3Q7XG5cbi8vXG4vL1xuY29uc3QgZXJyb3JDb25zdHJ1Y3RvcnM9bmV3IE1hcChcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bXG5bJ0Vycm9yJyxFcnJvcl0sXG5bJ0V2YWxFcnJvcicsRXZhbEVycm9yXSxcblsnUmFuZ2VFcnJvcicsUmFuZ2VFcnJvcl0sXG5bJ1JlZmVyZW5jZUVycm9yJyxSZWZlcmVuY2VFcnJvcl0sXG5bJ1N5bnRheEVycm9yJyxTeW50YXhFcnJvcl0sXG5bJ1R5cGVFcnJvcicsVHlwZUVycm9yXSxcblsnVVJJRXJyb3InLFVSSUVycm9yXVxuXG4vL1xuLy9cbi8vXG4vL1xuXSk7XG5cblxuaWYodHlwZW9mIEFnZ3JlZ2F0ZUVycm9yIT09J3VuZGVmaW5lZCcpe1xuLy9cbmVycm9yQ29uc3RydWN0b3JzLnNldCgnQWdncmVnYXRlRXJyb3InLEFnZ3JlZ2F0ZUVycm9yKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0RXJyb3JDb25zdHJ1Y3Rvcj0obmFtZSk9PmVycm9yQ29uc3RydWN0b3JzLmdldChuYW1lKTskaM2PX29uY2UuZ2V0RXJyb3JDb25zdHJ1Y3RvcihnZXRFcnJvckNvbnN0cnVjdG9yKTtcbmhhcmRlbihnZXRFcnJvckNvbnN0cnVjdG9yKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tFcnJvckxpa2U9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuKFxuY2FuZGlkYXRlIGluc3RhbmNlb2YgRXJyb3J8fFxuISFjaGVjayYmQ1goY2hlY2spIGBFcnJvciBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrRXJyb3JMaWtlKTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzRXJyb3JMaWtlPShjYW5kaWRhdGUpPT5jaGVja0Vycm9yTGlrZShjYW5kaWRhdGUpOyRozY9fb25jZS5pc0Vycm9yTGlrZShpc0Vycm9yTGlrZSk7XG5oYXJkZW4oaXNFcnJvckxpa2UpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjPShcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKGRlc2MuZW51bWVyYWJsZSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtkZXNjfWApO1xuXG4gfVxuaWYoIWhhc093bihkZXNjLCd2YWx1ZScpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eTogJHtkZXNjfWApO1xuXG4gfVxuY29uc3R7dmFsdWV9PWRlc2M7XG5zd2l0Y2gocHJvcE5hbWUpe1xuY2FzZSdtZXNzYWdlJzpcbmNhc2Unc3RhY2snOntcbnJldHVybihcbnR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nOiAke3ZhbHVlfWApO1xuXG4gfVxuY2FzZSdjYXVzZSc6e1xuLy9cbnJldHVybiBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcih2YWx1ZSxwYXNzU3R5bGVPZlJlY3VyLGNoZWNrKTtcbiB9XG5jYXNlJ2Vycm9ycyc6e1xuaWYoIUFycmF5LmlzQXJyYXkodmFsdWUpfHxwYXNzU3R5bGVPZlJlY3VyKHZhbHVlKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgY29weUFycmF5OiAke3ZhbHVlfWApO1xuXG4gfVxucmV0dXJuIHZhbHVlLmV2ZXJ5KChlcnIpPT5cbi8vXG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2ZSZWN1cixjaGVjaykpO1xuXG4gfVxuZGVmYXVsdDp7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgaGFzIGV4dHJhIHVucGFzc2VkIHByb3BlcnR5ICR7cShwcm9wTmFtZSl9YCk7XG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcj0oXG5jYW5kaWRhdGUsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZighY2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKTtcbmNvbnN0e25hbWV9PXByb3RvO1xuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihuYW1lKTtcbmlmKGVyckNvbnN0cnVjdG9yPT09dW5kZWZpbmVkfHxlcnJDb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1wcm90byl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaW5oZXJpdCBmcm9tIGFuIGVycm9yIGNsYXNzIC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYoISgnbWVzc2FnZSdpbiBkZXNjcykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGhhdmUgYW4gb3duIFwibWVzc2FnZVwiIHN0cmluZyBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5cbnJldHVybiBlbnRyaWVzKGRlc2NzKS5ldmVyeSgoW3Byb3BOYW1lLGRlc2NdKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaykpO1xuXG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBFcnJvckhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidlcnJvcicsXG5cbmNhbkJlVmFsaWQ6Y2hlY2tFcnJvckxpa2UsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIsYXNzZXJ0Q2hlY2tlcil9KTskaM2PX29uY2UuRXJyb3JIZWxwZXIoRXJyb3JIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0RXJyb3JDb25zdHJ1Y3RvciI6WyJnZXRFcnJvckNvbnN0cnVjdG9yIl0sImlzRXJyb3JMaWtlIjpbImlzRXJyb3JMaWtlIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIl0sIkVycm9ySGVscGVyIjpbIkVycm9ySGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvaXRlci1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIi4vbWFrZS1mYXIuanMiXSwiZXhwb3J0cyI6WyJmaWx0ZXJJdGVyYWJsZSIsIm1hcEl0ZXJhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaM2PX2ltcG9ydHMoW1tcIi4vbWFrZS1mYXIuanNcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwSXRlcmFibGU9KGJhc2VJdGVyYWJsZSxmdW5jKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdtYXBwZWQgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBiYXNlSXRlcmF0b3I9YmFzZUl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBGYXIoJ21hcHBlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuY29uc3R7dmFsdWU6YmFzZVZhbHVlLGRvbmV9PWJhc2VJdGVyYXRvci5uZXh0KCk7XG5jb25zdCB2YWx1ZT1kb25lP2Jhc2VWYWx1ZTpmdW5jKGJhc2VWYWx1ZSk7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSxkb25lfSk7XG4gfX0pO1xuXG4gfX0pOyRozY9fb25jZS5tYXBJdGVyYWJsZShtYXBJdGVyYWJsZSk7XG5cbmhhcmRlbihtYXBJdGVyYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmaWx0ZXJJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLHByZWQpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ2ZpbHRlcmVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdmaWx0ZXJlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuZm9yKDs7KXtcbmNvbnN0IHJlc3VsdD1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3R7dmFsdWUsZG9uZX09cmVzdWx0O1xuaWYoZG9uZXx8cHJlZCh2YWx1ZSkpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuIH19KTtcblxuIH19KTskaM2PX29uY2UuZmlsdGVySXRlcmFibGUoZmlsdGVySXRlcmFibGUpO1xuXG5oYXJkZW4oZmlsdGVySXRlcmFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFwSXRlcmFibGUiOlsibWFwSXRlcmFibGUiXSwiZmlsdGVySXRlcmFibGUiOlsiZmlsdGVySXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9tYWtlLWZhci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcmVtb3RhYmxlLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiR0VUX01FVEhPRF9OQU1FUyIsIlJlbW90YWJsZSIsIlRvRmFyRnVuY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMscSxGYWlsLGFzc2VydENoZWNrZXIsUEFTU19TVFlMRSxhc3NlcnRJZmFjZSxnZXRJbnRlcmZhY2VPZixSZW1vdGFibGVIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiYXNzZXJ0SWZhY2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0SWZhY2UgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaM2PX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbnNldFByb3RvdHlwZU9mLFxuY3JlYXRlLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlUmVtb3RhYmxlUHJvdG89KHJlbW90YWJsZSxpZmFjZSk9PntcbmxldCBvbGRQcm90bz1nZXRQcm90b3R5cGVPZihyZW1vdGFibGUpO1xuaWYodHlwZW9mIHJlbW90YWJsZT09PSdvYmplY3QnKXtcbmlmKG9sZFByb3RvPT09bnVsbCl7XG5vbGRQcm90bz1vYmplY3RQcm90b3R5cGU7XG4gfVxub2xkUHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuRmFpbCBgRm9yIG5vdywgcmVtb3RhYmxlcyBjYW5ub3QgaW5oZXJpdCBmcm9tIGFueXRoaW5nIHVudXN1YWwsIGluICR7cmVtb3RhYmxlfWA7XG4gfWVsc2UgaWYodHlwZW9mIHJlbW90YWJsZT09PSdmdW5jdGlvbicpe1xub2xkUHJvdG8hPT1udWxsfHxcbkZhaWwgYE9yaWdpbmFsIGZ1bmN0aW9uIG11c3Qgbm90IGluaGVyaXQgZnJvbSBudWxsOiAke3JlbW90YWJsZX1gO1xub2xkUHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5nZXRQcm90b3R5cGVPZihvbGRQcm90byk9PT1mdW5jdGlvblByb3RvdHlwZXx8XG5GYWlsIGBGYXIgZnVuY3Rpb25zIG11c3Qgb3JpZ2luYWxseSBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNle1xuRmFpbCBgdW5yZWNvZ25pemVkIHR5cGVvZiAke3JlbW90YWJsZX1gO1xuIH1cbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2xkUHJvdG8se1xuW1BBU1NfU1RZTEVdOnt2YWx1ZToncmVtb3RhYmxlJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6aWZhY2V9fSkpO1xuXG5cbiB9O1xuXG5jb25zdCBhc3NlcnRDYW5CZVJlbW90YWJsZT0oY2FuZGlkYXRlKT0+XG5SZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGU9KFxuLy9cbmlmYWNlPSdSZW1vdGFibGUnLFxucHJvcHM9dW5kZWZpbmVkLFxucmVtb3RhYmxlPS8qICAgICAgICAgICAgKi97fSk9Plxue1xuYXNzZXJ0SWZhY2UoaWZhY2UpO1xuYXNzZXJ0KGlmYWNlKTtcbi8vXG4vL1xucHJvcHM9PT11bmRlZmluZWR8fEZhaWwgYFJlbW90YWJsZSBwcm9wcyBub3QgeWV0IGltcGxlbWVudGVkICR7cHJvcHN9YDtcblxuLy9cbmFzc2VydENhbkJlUmVtb3RhYmxlKHJlbW90YWJsZSk7XG5cbi8vXG4hKFBBU1NfU1RZTEUgaW4gcmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgbWFya2VkIGFzIGEgJHtxKFxucmVtb3RhYmxlW1BBU1NfU1RZTEVdKVxuIH1gO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4uaXNGYWtlfHxcbi8vXG4haXNGcm96ZW4ocmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgZnJvemVuYDtcbmNvbnN0IHJlbW90YWJsZVByb3RvPW1ha2VSZW1vdGFibGVQcm90byhyZW1vdGFibGUsaWZhY2UpO1xuXG4vL1xuLy9cbmNvbnN0IG11dGF0ZUhhcmRlbkFuZENoZWNrPSh0YXJnZXQpPT57XG4vL1xuc2V0UHJvdG90eXBlT2YodGFyZ2V0LHJlbW90YWJsZVByb3RvKTtcbmhhcmRlbih0YXJnZXQpO1xuYXNzZXJ0Q2FuQmVSZW1vdGFibGUodGFyZ2V0KTtcbiB9O1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2soe30pO1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2socmVtb3RhYmxlKTtcblxuLy9cbi8vXG5hc3NlcnQoaWZhY2UhPT11bmRlZmluZWQpOy8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAqL3JlbW90YWJsZSk7XG4gfTskaM2PX29uY2UuUmVtb3RhYmxlKFJlbW90YWJsZSk7XG5oYXJkZW4oUmVtb3RhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9NRVRIT0RfTkFNRVM9J19fZ2V0TWV0aG9kTmFtZXNfXyc7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaM2PX29uY2UuRmFyKEZhcik7XG5oYXJkZW4oRmFyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRvRmFyRnVuY3Rpb249KGZhck5hbWUsZnVuYyk9PntcbmlmKGdldEludGVyZmFjZU9mKGZ1bmMpIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gZnVuYztcbiB9XG4vL1xucmV0dXJuIEZhcihmYXJOYW1lLCguLi5hcmdzKT0+ZnVuYyguLi5hcmdzKSk7XG4gfTskaM2PX29uY2UuVG9GYXJGdW5jdGlvbihUb0ZhckZ1bmN0aW9uKTtcbmhhcmRlbihUb0ZhckZ1bmN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlJlbW90YWJsZSI6WyJSZW1vdGFibGUiXSwiR0VUX01FVEhPRF9OQU1FUyI6WyJHRVRfTUVUSE9EX05BTUVTIl0sIkZhciI6WyJGYXIiXSwiVG9GYXJGdW5jdGlvbiI6WyJUb0ZhckZ1bmN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvbWFrZVRhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbIm1ha2VUYWdnZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxQQVNTX1NUWUxFLGFzc2VydFBhc3NhYmxlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuY29uc3R7Y3JlYXRlLHByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVGFnZ2VkPSh0YWcscGF5bG9hZCk9PntcbnR5cGVvZiB0YWc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBUaGUgdGFnIG9mIGEgdGFnZ2VkIHJlY29yZCBtdXN0IGJlIGEgc3RyaW5nOiAke3RhZ31gO1xuYXNzZXJ0UGFzc2FibGUoaGFyZGVuKHBheWxvYWQpKTtcbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2JqZWN0UHJvdG90eXBlLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3RhZ2dlZCd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOnRhZ30sXG5wYXlsb2FkOnt2YWx1ZTpwYXlsb2FkLGVudW1lcmFibGU6dHJ1ZX19KSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VUYWdnZWQobWFrZVRhZ2dlZCk7XG5oYXJkZW4obWFrZVRhZ2dlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlVGFnZ2VkIjpbIm1ha2VUYWdnZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAADSKSdxQVAAAUFQAAMAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJDWCIsIlBBU1NfU1RZTEUiLCJhc3NlcnRDaGVja2VyIiwiY2FuQmVNZXRob2QiLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIiwiY2hlY2tQYXNzU3R5bGUiLCJjaGVja1RhZ1JlY29yZCIsImdldE93bkRhdGFEZXNjcmlwdG9yIiwiZ2V0VGFnIiwiaGFzT3duUHJvcGVydHlPZiIsImlzT2JqZWN0IiwiaXNUeXBlZEFycmF5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e3Byb3RvdHlwZTpmdW5jdGlvblByb3RvdHlwZX09RnVuY3Rpb247XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbmdldFByb3RvdHlwZU9mLFxuaGFzT3duUHJvcGVydHk6b2JqZWN0SGFzT3duUHJvcGVydHksXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PVxuT2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZzp0b1N0cmluZ1RhZ1N5bWJvbH09U3ltYm9sO1xuXG5jb25zdCB0eXBlZEFycmF5UHJvdG90eXBlPWdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkucHJvdG90eXBlKTtcbmNvbnN0IHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxudHlwZWRBcnJheVByb3RvdHlwZSxcbnRvU3RyaW5nVGFnU3ltYm9sKTtcblxuYXNzZXJ0KHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MpO1xuY29uc3QgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPXR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MuZ2V0O1xuYXNzZXJ0KHR5cGVvZiBnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWc9PT0nZnVuY3Rpb24nKTtcblxuY29uc3QgICAgICAgIGhhc093blByb3BlcnR5T2Y9KG9iaixwcm9wKT0+XG5hcHBseShvYmplY3RIYXNPd25Qcm9wZXJ0eSxvYmosW3Byb3BdKTskaM2PX29uY2UuaGFzT3duUHJvcGVydHlPZihoYXNPd25Qcm9wZXJ0eU9mKTtcbmhhcmRlbihoYXNPd25Qcm9wZXJ0eU9mKTtcblxuLy9cbmNvbnN0ICAgICAgICBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7JGjNj19vbmNlLmlzT2JqZWN0KGlzT2JqZWN0KTtcbmhhcmRlbihpc09iamVjdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1R5cGVkQXJyYXk9KG9iamVjdCk9Pntcbi8vXG5jb25zdCB0YWc9YXBwbHkoZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLG9iamVjdCxbXSk7XG5yZXR1cm4gdGFnIT09dW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmlzVHlwZWRBcnJheShpc1R5cGVkQXJyYXkpO1xuaGFyZGVuKGlzVHlwZWRBcnJheSk7XG5cbmNvbnN0ICAgICAgICBQQVNTX1NUWUxFPVN5bWJvbC5mb3IoJ3Bhc3NTdHlsZScpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5QQVNTX1NUWUxFKFBBU1NfU1RZTEUpO1xuY29uc3QgICAgICAgIGNhbkJlTWV0aG9kPShmdW5jKT0+XG50eXBlb2YgZnVuYz09PSdmdW5jdGlvbicmJiEoUEFTU19TVFlMRSBpbiBmdW5jKTskaM2PX29uY2UuY2FuQmVNZXRob2QoY2FuQmVNZXRob2QpO1xuaGFyZGVuKGNhbkJlTWV0aG9kKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydENoZWNrZXI9KGNvbmQsZGV0YWlscyk9PntcbmFzc2VydChjb25kLGRldGFpbHMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q2hlY2tlcihhc3NlcnRDaGVja2VyKTtcbmhhcmRlbihhc3NlcnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQ1g9KGNoZWNrKT0+e1xuY29uc3QgcmVqZWN0PShULC4uLnN1YnMpPT5jaGVjayhmYWxzZSxYKFQsLi4uc3VicykpO1xucmV0dXJuIHJlamVjdDtcbiB9OyRozY9fb25jZS5DWChDWCk7XG5oYXJkZW4oQ1gpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE93bkRhdGFEZXNjcmlwdG9yPShcbmNhbmRpZGF0ZSxcbnByb3BOYW1lLFxuc2hvdWxkQmVFbnVtZXJhYmxlLFxuY2hlY2spPT5cbntcbmNvbnN0IGRlc2M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY2FuZGlkYXRlLHByb3BOYW1lKTtcblxucmV0dXJuKGRlc2MhPT11bmRlZmluZWR8fFxuISFjaGVjayYmQ1goY2hlY2spIGAke3EocHJvcE5hbWUpfSBwcm9wZXJ0eSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCkmJihcbmhhc093blByb3BlcnR5T2YoZGVzYywndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGFjY2Vzc29yIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKSYmKFxuc2hvdWxkQmVFbnVtZXJhYmxlP1xuZGVzYy5lbnVtZXJhYmxlfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgJHtxKHByb3BOYW1lKX0gbXVzdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gOlxuIWRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGVudW1lcmFibGUgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApP1xuZGVzYzpcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmdldE93bkRhdGFEZXNjcmlwdG9yKGdldE93bkRhdGFEZXNjcmlwdG9yKTtcbmhhcmRlbihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRUYWc9KHRhZ1JlY29yZCk9PnRhZ1JlY29yZFtTeW1ib2wudG9TdHJpbmdUYWddOyRozY9fb25jZS5nZXRUYWcoZ2V0VGFnKTtcbmhhcmRlbihnZXRUYWcpO1xuXG5jb25zdCAgICAgICAgY2hlY2tQYXNzU3R5bGU9KG9iaixwYXNzU3R5bGUsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG5wYXNzU3R5bGU9PT1leHBlY3RlZFBhc3NTdHlsZXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRXhwZWN0ZWQgJHtxKGV4cGVjdGVkUGFzc1N0eWxlKX0sIG5vdCAke3EocGFzc1N0eWxlKX06ICR7b2JqfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tQYXNzU3R5bGUoY2hlY2tQYXNzU3R5bGUpO1xuaGFyZGVuKGNoZWNrUGFzc1N0eWxlKTtcblxuY29uc3QgbWFrZUNoZWNrVGFnUmVjb3JkPShjaGVja1Byb3RvKT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnUmVjb3JkPSh0YWdSZWNvcmQsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNPYmplY3QodGFnUmVjb3JkKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBub24tb2JqZWN0IGNhbm5vdCBiZSBhIHRhZ1JlY29yZDogJHt0YWdSZWNvcmR9YCkmJihcbmlzRnJvemVuKHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBIHRhZ1JlY29yZCBtdXN0IGJlIGZyb3plbjogJHt0YWdSZWNvcmR9YCkmJihcbiFpc0FycmF5KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBbiBhcnJheSBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUGFzc1N0eWxlKFxudGFnUmVjb3JkLFxuZ2V0T3duRGF0YURlc2NyaXB0b3IodGFnUmVjb3JkLFBBU1NfU1RZTEUsZmFsc2UsY2hlY2spLnZhbHVlLFxuZXhwZWN0ZWRQYXNzU3R5bGUsXG5jaGVjaykmJihcblxudHlwZW9mIGdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxTeW1ib2wudG9TdHJpbmdUYWcsZmFsc2UsY2hlY2spLlxudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEEgW1N5bWJvbC50b1N0cmluZ1RhZ10tbmFtZWQgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt0YWdSZWNvcmR9YCkmJlxuY2hlY2tQcm90byh0YWdSZWNvcmQsZ2V0UHJvdG90eXBlT2YodGFnUmVjb3JkKSxjaGVjaykpO1xuXG4gfTtcbnJldHVybiBoYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuIH07XG5cbmNvbnN0ICAgICAgICBjaGVja1RhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbmNoZWNrKGZhbHNlLFggYEEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7dmFsfWApKTskaM2PX29uY2UuY2hlY2tUYWdSZWNvcmQoY2hlY2tUYWdSZWNvcmQpO1xuXG5oYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuXG5jb25zdCAgICAgICAgY2hlY2tGdW5jdGlvblRhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbnByb3RvIT09bnVsbCYmZ2V0UHJvdG90eXBlT2YocHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhcbmZhbHNlLFxuWCBgRm9yIGZ1bmN0aW9ucywgYSB0YWdSZWNvcmQgbXVzdCBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrRnVuY3Rpb25UYWdSZWNvcmQoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCk7XG5cblxuaGFyZGVuKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaGFzT3duUHJvcGVydHlPZiI6WyJoYXNPd25Qcm9wZXJ0eU9mIl0sImlzT2JqZWN0IjpbImlzT2JqZWN0Il0sImlzVHlwZWRBcnJheSI6WyJpc1R5cGVkQXJyYXkiXSwiUEFTU19TVFlMRSI6WyJQQVNTX1NUWUxFIl0sImNhbkJlTWV0aG9kIjpbImNhbkJlTWV0aG9kIl0sImFzc2VydENoZWNrZXIiOlsiYXNzZXJ0Q2hlY2tlciJdLCJDWCI6WyJDWCJdLCJnZXRPd25EYXRhRGVzY3JpcHRvciI6WyJnZXRPd25EYXRhRGVzY3JpcHRvciJdLCJnZXRUYWciOlsiZ2V0VGFnIl0sImNoZWNrUGFzc1N0eWxlIjpbImNoZWNrUGFzc1N0eWxlIl0sImNoZWNrVGFnUmVjb3JkIjpbImNoZWNrVGFnUmVjb3JkIl0sImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiOlsiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3Bhc3NTdHlsZU9mLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vY29weUFycmF5LmpzIiwiLi9jb3B5UmVjb3JkLmpzIiwiLi90YWdnZWQuanMiLCIuL2Vycm9yLmpzIiwiLi9yZW1vdGFibGUuanMiLCIuL3N5bWJvbC5qcyIsIi4vc2FmZS1wcm9taXNlLmpzIiwiLi9zdHJpbmcuanMiXSwiZXhwb3J0cyI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCIsImFzc2VydFBhc3NhYmxlIiwiaXNQYXNzYWJsZSIsInBhc3NTdHlsZU9mIiwidG9QYXNzYWJsZUVycm9yIiwidG9UaHJvd2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjNj19hID0+IChpc1R5cGVkQXJyYXkgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5QXJyYXkuanNcIiwgW1tcIkNvcHlBcnJheUhlbHBlclwiLCBbJGjNj19hID0+IChDb3B5QXJyYXlIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weVJlY29yZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vdGFnZ2VkLmpzXCIsIFtbXCJUYWdnZWRIZWxwZXJcIiwgWyRozY9fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9lcnJvci5qc1wiLCBbW1wiRXJyb3JIZWxwZXJcIiwgWyRozY9fYSA9PiAoRXJyb3JIZWxwZXIgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N5bWJvbC5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2FmZVByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3N0cmluZy5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTdHJpbmdcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0Zyb3plbixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLHZhbHVlc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBtYWtlSGVscGVyVGFibGU9KHBhc3NTdHlsZUhlbHBlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEhlbHBlclRhYmxlPXtcbl9fcHJvdG9fXzpudWxsLFxuY29weUFycmF5OnVuZGVmaW5lZCxcbmNvcHlSZWNvcmQ6dW5kZWZpbmVkLFxudGFnZ2VkOnVuZGVmaW5lZCxcbmVycm9yOnVuZGVmaW5lZCxcbnJlbW90YWJsZTp1bmRlZmluZWR9O1xuXG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuY29uc3R7c3R5bGVOYW1lfT1oZWxwZXI7XG5zdHlsZU5hbWUgaW4gSGVscGVyVGFibGV8fEZhaWwgYFVucmVjb2duaXplZCBoZWxwZXI6ICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPT09dW5kZWZpbmVkfHxcbkZhaWwgYGNvbmZsaWN0aW5nIGhlbHBlcnMgZm9yICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPWhlbHBlcjtcbiB9XG5mb3IoY29uc3Qgc3R5bGVOYW1lIG9mIG93bktleXMoSGVscGVyVGFibGUpKXtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV0hPT11bmRlZmluZWR8fFxuRmFpbCBgbWlzc2luZyBoZWxwZXIgZm9yICR7cShzdHlsZU5hbWUpfWA7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKEhlbHBlclRhYmxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVBhc3NTdHlsZU9mPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuY29uc3QgSGVscGVyVGFibGU9bWFrZUhlbHBlclRhYmxlKHBhc3NTdHlsZUhlbHBlcnMpO1xuY29uc3QgcmVtb3RhYmxlSGVscGVyPUhlbHBlclRhYmxlLnJlbW90YWJsZTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGFzc1N0eWxlTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gICAqL1xuLy9cbmNvbnN0IHBhc3NTdHlsZU9mPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGluUHJvZ3Jlc3M9bmV3IFNldCgpO1xuXG5jb25zdCBwYXNzU3R5bGVPZlJlY3VyPShpbm5lcik9PntcbmNvbnN0IGlubmVySXNPYmplY3Q9aXNPYmplY3QoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5jb25zdCBpbm5lclN0eWxlPXBhc3NTdHlsZU1lbW8uZ2V0KGlubmVyKTtcbmlmKGlubmVyU3R5bGUpe1xucmV0dXJuIGlubmVyU3R5bGU7XG4gfVxuIWluUHJvZ3Jlc3MuaGFzKGlubmVyKXx8XG5GYWlsIGBQYXNzLWJ5LWNvcHkgZGF0YSBjYW5ub3QgYmUgY3ljbGljICR7aW5uZXJ9YDtcbmluUHJvZ3Jlc3MuYWRkKGlubmVyKTtcbiB9XG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mSW50ZXJuYWwoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5wYXNzU3R5bGVNZW1vLnNldChpbm5lcixwYXNzU3R5bGUpO1xuaW5Qcm9ncmVzcy5kZWxldGUoaW5uZXIpO1xuIH1cbnJldHVybiBwYXNzU3R5bGU7XG4gfTtcblxuY29uc3QgcGFzc1N0eWxlT2ZJbnRlcm5hbD0oaW5uZXIpPT57XG5jb25zdCB0eXBlc3RyPXR5cGVvZiBpbm5lcjtcbnN3aXRjaCh0eXBlc3RyKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJuIHR5cGVzdHI7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmFzc2VydFBhc3NhYmxlU3RyaW5nKGlubmVyKTtcbnJldHVybidzdHJpbmcnO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChpbm5lcik7XG5yZXR1cm4nc3ltYm9sJztcbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoaW5uZXI9PT1udWxsKXtcbnJldHVybidudWxsJztcbiB9XG5pZighaXNGcm96ZW4oaW5uZXIpKXtcbmFzc2VydC5mYWlsKFxuLy9cbi8vXG5pc1R5cGVkQXJyYXkoaW5uZXIpP1xuWCBgQ2Fubm90IHBhc3MgbXV0YWJsZSB0eXBlZCBhcnJheXMgbGlrZSAke2lubmVyfS5gOlxuWCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWApO1xuXG4gfVxuaWYoaXNQcm9taXNlKGlubmVyKSl7XG5hc3NlcnRTYWZlUHJvbWlzZShpbm5lcik7XG5yZXR1cm4ncHJvbWlzZSc7XG4gfVxudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5jb25zdCBwYXNzU3R5bGVUYWc9aW5uZXJbUEFTU19TVFlMRV07XG5pZihwYXNzU3R5bGVUYWchPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihwYXNzU3R5bGVUYWcsJ3N0cmluZycpO1xuY29uc3QgaGVscGVyPUhlbHBlclRhYmxlW3Bhc3NTdHlsZVRhZ107XG5oZWxwZXIhPT11bmRlZmluZWR8fFxuRmFpbCBgVW5yZWNvZ25pemVkIFBhc3NTdHlsZTogJHtxKHBhc3NTdHlsZVRhZyl9YDtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICovcGFzc1N0eWxlVGFnKTtcbiB9XG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuaWYoaGVscGVyLmNhbkJlVmFsaWQoaW5uZXIpKXtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiBoZWxwZXIuc3R5bGVOYW1lO1xuIH1cbiB9XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5jYXNlJ2Z1bmN0aW9uJzp7XG5pc0Zyb3plbihpbm5lcil8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWA7XG50eXBlb2YgaW5uZXIudGhlbiE9PSdmdW5jdGlvbid8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLXByb21pc2UgdGhlbmFibGVzYDtcbnJlbW90YWJsZUhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybidyZW1vdGFibGUnO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5yZWNvZ25pemVkIHR5cGVvZiAke3EodHlwZXN0cil9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9O1xuXG5yZXR1cm4gcGFzc1N0eWxlT2ZSZWN1cihwYXNzYWJsZSk7XG4gfTtcbnJldHVybiBoYXJkZW4ocGFzc1N0eWxlT2YpO1xuIH07XG5cbmNvbnN0ICAgICAgICBQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbD1TeW1ib2wuZm9yKCdAZW5kbyBwYXNzU3R5bGVPZicpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2woUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wpO1xuY29uc3QgICAgICAgIHBhc3NTdHlsZU9mPVxuZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc1tQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbF18fFxubWFrZVBhc3NTdHlsZU9mKFtcbkNvcHlBcnJheUhlbHBlcixcbkNvcHlSZWNvcmRIZWxwZXIsXG5UYWdnZWRIZWxwZXIsXG5FcnJvckhlbHBlcixcblJlbW90YWJsZUhlbHBlcl0pOyRozY9fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGUoYXNzZXJ0UGFzc2FibGUpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PntcbnRyeXtcbi8vXG4vL1xucmV0dXJuIHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PXVuZGVmaW5lZDtcbiB9Y2F0Y2goXyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG5oYXJkZW4oaXNQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0obmFtZSxkZXNjKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhuYW1lLGRlc2MscGFzc1N0eWxlT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvUGFzc2FibGVFcnJvcj0oZXJyKT0+e1xuaGFyZGVuKGVycik7XG5pZihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2YpKXtcbnJldHVybiBlcnI7XG4gfVxuY29uc3R7bmFtZSxtZXNzYWdlfT1lcnI7XG5jb25zdHtjYXVzZTpjYXVzZURlc2MsZXJyb3JzOmVycm9yc0Rlc2N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlcnIpO1xubGV0IGNhdXNlO1xubGV0IGVycm9ycztcbmlmKGNhdXNlRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdjYXVzZScsY2F1c2VEZXNjKSl7XG5jYXVzZT1jYXVzZURlc2MudmFsdWU7XG4gfVxuaWYoZXJyb3JzRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdlcnJvcnMnLGVycm9yc0Rlc2MpKXtcbmVycm9ycz1lcnJvcnNEZXNjLnZhbHVlO1xuIH1cblxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvciggYCR7bmFtZX1gKXx8RXJyb3I7XG5jb25zdCBuZXdFcnJvcj1tYWtlRXJyb3IoIGAke21lc3NhZ2V9YCxlcnJDb25zdHJ1Y3Rvcix7XG4vL1xuY2F1c2UsXG5lcnJvcnN9KTtcblxuLy9cbmhhcmRlbihuZXdFcnJvcik7XG4vL1xuLy9cbi8vXG5hbm5vdGF0ZUVycm9yKG5ld0Vycm9yLFggYGNvcGllZCBmcm9tIGVycm9yICR7ZXJyfWApO1xucGFzc1N0eWxlT2YobmV3RXJyb3IpPT09J2Vycm9yJ3x8XG5GYWlsIGBFeHBlY3RlZCAke25ld0Vycm9yfSB0byBiZSBhIHBhc3NhYmxlIGVycm9yYDtcbnJldHVybiBuZXdFcnJvcjtcbiB9OyRozY9fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaM2PX29uY2UudG9UaHJvd2FibGUodG9UaHJvd2FibGUpO1xuaGFyZGVuKHRvVGhyb3dhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIl0sInBhc3NTdHlsZU9mIjpbInBhc3NTdHlsZU9mIl0sImFzc2VydFBhc3NhYmxlIjpbImFzc2VydFBhc3NhYmxlIl0sImlzUGFzc2FibGUiOlsiaXNQYXNzYWJsZSJdLCJ0b1Bhc3NhYmxlRXJyb3IiOlsidG9QYXNzYWJsZUVycm9yIl0sInRvVGhyb3dhYmxlIjpbInRvVGhyb3dhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFKEe3qmFwAAphcAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvcmVtb3RhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJSZW1vdGFibGVIZWxwZXIiLCJhc3NlcnRJZmFjZSIsImdldEludGVyZmFjZU9mIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxhc3NlcnRDaGVja2VyLGNhbkJlTWV0aG9kLGhhc093blByb3BlcnR5T2YsUEFTU19TVFlMRSxjaGVja1RhZ1JlY29yZCxjaGVja0Z1bmN0aW9uVGFnUmVjb3JkLGlzT2JqZWN0LGdldFRhZyxDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcImNoZWNrRnVuY3Rpb25UYWdSZWNvcmRcIiwgWyRozY9fYSA9PiAoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZSxcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tJZmFjZT0oaWZhY2UsY2hlY2spPT57XG5yZXR1cm4oXG4vL1xuKHR5cGVvZiBpZmFjZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRm9yIG5vdywgaW50ZXJmYWNlICR7aWZhY2V9IG11c3QgYmUgYSBzdHJpbmc7IHVuaW1wbGVtZW50ZWRgKSYmKFxuaWZhY2U9PT0nUmVtb3RhYmxlJ3x8XG5pZmFjZS5zdGFydHNXaXRoKCdBbGxlZ2VkOiAnKXx8XG5pZmFjZS5zdGFydHNXaXRoKCdEZWJ1Z05hbWU6ICcpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBGb3Igbm93LCBpZmFjZSAke3EoXG5pZmFjZSlcbiB9IG11c3QgYmUgXCJSZW1vdGFibGVcIiBvciBiZWdpbiB3aXRoIFwiQWxsZWdlZDogXCIgb3IgXCJEZWJ1Z05hbWU6IFwiOyB1bmltcGxlbWVudGVkYCkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRJZmFjZT0oaWZhY2UpPT5jaGVja0lmYWNlKGlmYWNlLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRJZmFjZShhc3NlcnRJZmFjZSk7XG5oYXJkZW4oYXNzZXJ0SWZhY2UpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZVByb3RvT2Y9KG9yaWdpbmFsLGNoZWNrKT0+e1xuaXNPYmplY3Qob3JpZ2luYWwpfHxcbkZhaWwgYFJlbW90YWJsZXMgbXVzdCBiZSBvYmplY3RzIG9yIGZ1bmN0aW9uczogJHtvcmlnaW5hbH1gO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKG9yaWdpbmFsKTtcbmlmKFxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxucHJvdG89PT1udWxsfHxcbnByb3RvPT09RnVuY3Rpb24ucHJvdG90eXBlKVxue1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlbW90YWJsZXMgbXVzdCBiZSBleHBsaWNpdGx5IGRlY2xhcmVkOiAke3Eob3JpZ2luYWwpfWApO1xuXG4gfVxuXG5pZih0eXBlb2Ygb3JpZ2luYWw9PT0nb2JqZWN0Jyl7XG5jb25zdCBwcm90b1Byb3RvPWdldFByb3RvdHlwZU9mKHByb3RvKTtcbmlmKHByb3RvUHJvdG8hPT1vYmplY3RQcm90b3R5cGUmJnByb3RvUHJvdG8hPT1udWxsKXtcbi8vXG5yZXR1cm4gY2hlY2tSZW1vdGFibGUocHJvdG8sY2hlY2spO1xuIH1cbmlmKCFjaGVja1RhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9ZWxzZSBpZih0eXBlb2Ygb3JpZ2luYWw9PT0nZnVuY3Rpb24nKXtcbmlmKCFjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cblxuLy9cbmNvbnN0IHBhc3NTdHlsZUtleT0vKiAgICAgICAgICAgICAgICAgICovUEFTU19TVFlMRTtcbmNvbnN0IHRhZ0tleT0vKiAgICAgICAgICAgICAgICAgICovU3ltYm9sLnRvU3RyaW5nVGFnO1xuY29uc3R7XG4vL1xuWy8qICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZUtleV06X3Bhc3NTdHlsZURlc2MsXG5bLyogICAgICAgICAgICAgICAgICovdGFnS2V5XTp7dmFsdWU6aWZhY2V9LFxuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pO1xuXG5yZXR1cm4oXG4ob3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIHByb3BlcnRpZXMgb24gUmVtb3RhYmxlIFByb3RvICR7b3duS2V5cyhyZXN0RGVzY3MpfWApJiZcbmNoZWNrSWZhY2UoaWZhY2UsY2hlY2spKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29uZmlybWVkUmVtb3RhYmxlcz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZT0odmFsLGNoZWNrKT0+e1xuaWYoY29uZmlybWVkUmVtb3RhYmxlcy5oYXModmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighaXNGcm96ZW4odmFsKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZDWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHt2YWx9YCk7XG5cbiB9XG4vL1xuaWYoIVJlbW90YWJsZUhlbHBlci5jYW5CZVZhbGlkKHZhbCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHJlc3VsdD1jaGVja1JlbW90YWJsZVByb3RvT2YodmFsLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb25maXJtZWRSZW1vdGFibGVzLmFkZCh2YWwpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlT2Y9KHZhbCk9PntcbmlmKFxuIWlzT2JqZWN0KHZhbCl8fFxudmFsW1BBU1NfU1RZTEVdIT09J3JlbW90YWJsZSd8fFxuIWNoZWNrUmVtb3RhYmxlKHZhbCkpXG57XG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xucmV0dXJuIGdldFRhZyh2YWwpO1xuIH07JGjNj19vbmNlLmdldEludGVyZmFjZU9mKGdldEludGVyZmFjZU9mKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VPZik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3JlbW90YWJsZScsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5jb25zdCB2YWxpZFR5cGU9XG4oaXNPYmplY3QoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tb2JqZWN0cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCkmJihcbiFpc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgYXJyYXlzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKTtcbmlmKCF2YWxpZFR5cGUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdvYmplY3QnKXtcbi8vXG4vL1xucmV0dXJuIG93bktleXMoZGVzY3MpLmV2ZXJ5KChrZXkpPT57XG5yZXR1cm4oXG4vL1xuKGhhc093blByb3BlcnR5T2YoZGVzY3NbLyogICAgICAgICAgICAgICAgICova2V5XSwndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggYWNjZXNzb3JzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5PT09U3ltYm9sLnRvU3RyaW5nVGFnJiZjaGVja0lmYWNlKGNhbmRpZGF0ZVtrZXldLGNoZWNrKXx8XG4oY2FuQmVNZXRob2QoY2FuZGlkYXRlW2tleV0pfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBub24tbWV0aG9kcyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleSE9PVBBU1NfU1RZTEV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgcGFzcy1ieS1yZW1vdGUgY2Fubm90IHNoYWRvdyAke3EoUEFTU19TVFlMRSl9YCkpKTtcblxuIH0pO1xuIH1lbHNlIGlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nZnVuY3Rpb24nKXtcbi8vXG4vL1xuY29uc3R7XG5uYW1lOm5hbWVEZXNjLFxubGVuZ3RoOmxlbmd0aERlc2MsXG4vL1xuW1N5bWJvbC50b1N0cmluZ1RhZ106dG9TdHJpbmdUYWdEZXNjLFxuLi4ucmVzdERlc2NzfT1cbmRlc2NzO1xuY29uc3QgcmVzdEtleXM9b3duS2V5cyhyZXN0RGVzY3MpO1xucmV0dXJuKFxuKG5hbWVEZXNjJiZ0eXBlb2YgbmFtZURlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRmFyIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJihcbmxlbmd0aERlc2MmJnR5cGVvZiBsZW5ndGhEZXNjLnZhbHVlPT09J251bWJlcid8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gbGVuZ3RoIG11c3QgYmUgYSBudW1iZXIsIGluICR7Y2FuZGlkYXRlfWApJiYoXG50b1N0cmluZ1RhZ0Rlc2M9PT11bmRlZmluZWR8fFxuKHR5cGVvZiB0b1N0cmluZ1RhZ0Rlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBAQHRvU3RyaW5nVGFnIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiZcbmNoZWNrSWZhY2UodG9TdHJpbmdUYWdEZXNjLnZhbHVlLGNoZWNrKSkmJihcbnJlc3RLZXlzLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb25zIHVuZXhwZWN0ZWQgcHJvcGVydGllcyBiZXNpZGVzIC5uYW1lIGFuZCAubGVuZ3RoICR7cmVzdEtleXN9YCkpO1xuXG4gfVxucmV0dXJuISFjaGVjayYmQ1goY2hlY2spIGB1bnJlY29nbml6ZWQgdHlwZW9mICR7Y2FuZGlkYXRlfWA7XG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSk9PmNoZWNrUmVtb3RhYmxlKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKSxcblxuZXZlcnk6KF9wYXNzYWJsZSxfZm4pPT50cnVlfSk7JGjNj19vbmNlLlJlbW90YWJsZUhlbHBlcihSZW1vdGFibGVIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0SWZhY2UiOlsiYXNzZXJ0SWZhY2UiXSwiZ2V0SW50ZXJmYWNlT2YiOlsiZ2V0SW50ZXJmYWNlT2YiXSwiUmVtb3RhYmxlSGVscGVyIjpbIlJlbW90YWJsZUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3NhZmUtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRTYWZlUHJvbWlzZSIsImlzU2FmZVByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLHEsYXNzZXJ0Q2hlY2tlcixoYXNPd25Qcm9wZXJ0eU9mLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtpc0Zyb3plbixnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZ309U3ltYm9sO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb21pc2VPd25LZXlzPShwcixjaGVjayk9PntcbmNvbnN0IGtleXM9b3duS2V5cyhwcik7XG5cbmlmKGtleXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB1bmtub3duS2V5cz1rZXlzLmZpbHRlcihcbihrZXkpPT50eXBlb2Yga2V5IT09J3N5bWJvbCd8fCFoYXNPd25Qcm9wZXJ0eU9mKFByb21pc2UucHJvdG90eXBlLGtleSkpO1xuXG5cbmlmKHVua25vd25LZXlzLmxlbmd0aCE9PTApe1xucmV0dXJuIENYKFxuY2hlY2spXG4gYCR7cHJ9IC0gTXVzdCBub3QgaGF2ZSBhbnkgb3duIHByb3BlcnRpZXM6ICR7cSh1bmtub3duS2V5cyl9YDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1NhZmVPd25LZXk9KGtleSk9PntcbmlmKGtleT09PXRvU3RyaW5nVGFnKXtcbi8vXG4vL1xuY29uc3QgdGFnRGVzYz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHIsdG9TdHJpbmdUYWcpO1xuYXNzZXJ0KHRhZ0Rlc2MhPT11bmRlZmluZWQpO1xucmV0dXJuKFxuKGhhc093blByb3BlcnR5T2YodGFnRGVzYywndmFsdWUnKXx8XG5DWChcbmNoZWNrKVxuIGBPd24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eSwgbm90IGFuIGFjY2Vzc29yOiAke3EodGFnRGVzYyl9YCkmJihcbnR5cGVvZiB0YWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJHtxKHRhZ0Rlc2MudmFsdWUpfWApJiYoXG4hdGFnRGVzYy5lbnVtZXJhYmxlfHxcbkNYKGNoZWNrKSBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtxKHRhZ0Rlc2MpfWApKTtcblxuIH1cbmNvbnN0IHZhbD1wcltrZXldO1xuaWYodmFsPT09dW5kZWZpbmVkfHx0eXBlb2YgdmFsPT09J251bWJlcicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoXG50eXBlb2YgdmFsPT09J29iamVjdCcmJlxudmFsIT09bnVsbCYmXG5pc0Zyb3plbih2YWwpJiZcbmdldFByb3RvdHlwZU9mKHZhbCk9PT1PYmplY3QucHJvdG90eXBlKVxue1xuY29uc3Qgc3ViS2V5cz1vd25LZXlzKHZhbCk7XG5pZihzdWJLZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG5pZihcbnN1YktleXMubGVuZ3RoPT09MSYmXG5zdWJLZXlzWzBdPT09J2Rlc3Ryb3llZCcmJlxudmFsLmRlc3Ryb3llZD09PWZhbHNlKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBDWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIE5vZGUgYXN5bmNfaG9va3MgYWRkaXRpb25zIHRvIHByb21pc2U6ICR7cHJ9LiR7cShcblN0cmluZyhrZXkpKVxuIH0gaXMgJHt2YWx9YDtcbiB9O1xuXG5yZXR1cm4ga2V5cy5ldmVyeShjaGVja1NhZmVPd25LZXkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja1NhZmVQcm9taXNlPShwcixjaGVjayk9PntcbnJldHVybihcbihpc0Zyb3plbihwcil8fENYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGJlIGZyb3plbmApJiYoXG5pc1Byb21pc2UocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBhIHByb21pc2VgKSYmKFxuZ2V0UHJvdG90eXBlT2YocHIpPT09UHJvbWlzZS5wcm90b3R5cGV8fFxuQ1goY2hlY2spIGAke3ByfSAtIE11c3QgaW5oZXJpdCBmcm9tIFByb21pc2UucHJvdG90eXBlOiAke3EoXG5nZXRQcm90b3R5cGVPZihwcikpXG4gfWApJiZcbmNoZWNrUHJvbWlzZU93bktleXMoLyogICAgICAgICAgICAgICAgICAqL3ByLGNoZWNrKSk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrU2FmZVByb21pc2UpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsKHgpPT54KTskaM2PX29uY2UuaXNTYWZlUHJvbWlzZShpc1NhZmVQcm9taXNlKTtcbmhhcmRlbihpc1NhZmVQcm9taXNlKTtcblxuY29uc3QgICAgICAgIGFzc2VydFNhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsYXNzZXJ0Q2hlY2tlcik7JGjNj19vbmNlLmFzc2VydFNhZmVQcm9taXNlKGFzc2VydFNhZmVQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzU2FmZVByb21pc2UiOlsiaXNTYWZlUHJvbWlzZSJdLCJhc3NlcnRTYWZlUHJvbWlzZSI6WyJhc3NlcnRTYWZlUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACYl18ssgcAALIHAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3N0cmluZy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzV2VsbEZvcm1lZFN0cmluZyhpc1dlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGlzV2VsbEZvcm1lZFN0cmluZyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0V2VsbEZvcm1lZFN0cmluZz0oc3RyKT0+e1xuaXNXZWxsRm9ybWVkU3RyaW5nKHN0cil8fEZhaWwgYEV4cGVjdGVkIHdlbGwtZm9ybWVkIHVuaWNvZGUgc3RyaW5nOiAke3N0cn1gO1xuIH07JGjNj19vbmNlLmFzc2VydFdlbGxGb3JtZWRTdHJpbmcoYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5cbmNvbnN0IE9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRT1cbmdldEVudmlyb25tZW50T3B0aW9uKCdPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEUnLCdkaXNhYmxlZCcsW1xuJ2VuYWJsZWQnXSk9PT1cbidlbmFibGVkJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3RyaW5nPShzdHIpPT57XG50eXBlb2Ygc3RyPT09J3N0cmluZyd8fEZhaWwgYEV4cGVjdGVkIHN0cmluZyAke3N0cn1gO1xuIU9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRXx8YXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhzdHIpO1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABmP1mV/AkAAPwJAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCB3ZWxsS25vd25TeW1ib2xOYW1lcz1uZXcgTWFwKFxub3duS2V5cyhTeW1ib2wpLlxuZmlsdGVyKFxuKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnJiZ0eXBlb2YgU3ltYm9sW25hbWVdPT09J3N5bWJvbCcpLlxuXG5maWx0ZXIoKG5hbWUpPT57XG4vL1xuIW5hbWUuc3RhcnRzV2l0aCgnQEAnKXx8XG5GYWlsIGBEaWQgbm90IGV4cGVjdCBTeW1ib2wgdG8gaGF2ZSBhIHN5bWJvbC12YWx1ZWQgcHJvcGVydHkgbmFtZSBzdGFydGluZyB3aXRoIFwiQEBcIiAke3EoXG5uYW1lKVxuIH1gO1xucmV0dXJuIHRydWU7XG4gfSlcbi8vXG4ubWFwKChuYW1lKT0+W1N5bWJvbFtuYW1lXSwgYEBAJHtuYW1lfWBdKSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGVTeW1ib2w9KHN5bSk9PlxudHlwZW9mIHN5bT09PSdzeW1ib2wnJiYoXG50eXBlb2YgU3ltYm9sLmtleUZvcihzeW0pPT09J3N0cmluZyd8fHdlbGxLbm93blN5bWJvbE5hbWVzLmhhcyhzeW0pKTskaM2PX29uY2UuaXNQYXNzYWJsZVN5bWJvbChpc1Bhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihpc1Bhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3ltYm9sPShzeW0pPT5cbmlzUGFzc2FibGVTeW1ib2woc3ltKXx8XG5GYWlsIGBPbmx5IHJlZ2lzdGVyZWQgc3ltYm9scyBvciB3ZWxsLWtub3duIHN5bWJvbHMgYXJlIHBhc3NhYmxlOiAke3Eoc3ltKX1gOyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN5bWJvbChhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYW1lRm9yUGFzc2FibGVTeW1ib2w9KHN5bSk9PntcbmNvbnN0IG5hbWU9U3ltYm9sLmtleUZvcihzeW0pO1xuaWYobmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gd2VsbEtub3duU3ltYm9sTmFtZXMuZ2V0KHN5bSk7XG4gfVxuaWYobmFtZS5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBgQEAke25hbWV9YDtcbiB9XG5yZXR1cm4gbmFtZTtcbiB9OyRozY9fb25jZS5uYW1lRm9yUGFzc2FibGVTeW1ib2wobmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXNzYWJsZVN5bWJvbEZvck5hbWU9KG5hbWUpPT57XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY29uc3QgbWF0Y2g9QXRBdFByZWZpeFBhdHRlcm4uZXhlYyhuYW1lKTtcbmlmKG1hdGNoKXtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmlmKHN1ZmZpeC5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBTeW1ib2wuZm9yKHN1ZmZpeCk7XG4gfWVsc2V7XG5jb25zdCBzeW09U3ltYm9sW3N1ZmZpeF07XG5pZih0eXBlb2Ygc3ltPT09J3N5bWJvbCcpe1xucmV0dXJuIHN5bTtcbiB9XG5GYWlsIGBSZXNlcnZlZCBmb3Igd2VsbCBrbm93biBzeW1ib2wgJHtxKHN1ZmZpeCl9OiAke3EobmFtZSl9YDtcbiB9XG4gfVxucmV0dXJuIFN5bWJvbC5mb3IobmFtZSk7XG4gfTskaM2PX29uY2UucGFzc2FibGVTeW1ib2xGb3JOYW1lKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG5oYXJkZW4ocGFzc2FibGVTeW1ib2xGb3JOYW1lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUGFzc2FibGVTeW1ib2wiOlsiaXNQYXNzYWJsZVN5bWJvbCJdLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiOlsibmFtZUZvclBhc3NhYmxlU3ltYm9sIl0sInBhc3NhYmxlU3ltYm9sRm9yTmFtZSI6WyJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYNVjnhQHAAAUBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy90YWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIlRhZ2dlZEhlbHBlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLGFzc2VydENoZWNrZXIsY2hlY2tUYWdSZWNvcmQsUEFTU19TVFlMRSxnZXRPd25EYXRhRGVzY3JpcHRvcixjaGVja1Bhc3NTdHlsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJjaGVja1Bhc3NTdHlsZVwiLCBbJGjNj19hID0+IChjaGVja1Bhc3NTdHlsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgVGFnZ2VkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3RhZ2dlZCcsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmNoZWNrUGFzc1N0eWxlKGNhbmRpZGF0ZSxjYW5kaWRhdGVbUEFTU19TVFlMRV0sJ3RhZ2dlZCcsY2hlY2spLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja1RhZ1JlY29yZChjYW5kaWRhdGUsJ3RhZ2dlZCcsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06X2xhYmVsRGVzYyxcbnBheWxvYWQ6X3BheWxvYWREZXNjLC8vXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xub3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuRmFpbCBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIHRhZ2dlZCByZWNvcmQgJHtvd25LZXlzKHJlc3REZXNjcyl9YDtcblxuLy9cbi8vXG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdwYXlsb2FkJyx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH19KTskaM2PX29uY2UuVGFnZ2VkSGVscGVyKFRhZ2dlZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUYWdnZWRIZWxwZXIiOlsiVGFnZ2VkSGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZU9mLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0UmVjb3JkIiwiYXNzZXJ0UmVtb3RhYmxlIiwiaXNDb3B5QXJyYXkiLCJpc1JlY29yZCIsImlzUmVtb3RhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxwYXNzU3R5bGVPZjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaM2PX29uY2UuaXNDb3B5QXJyYXkoaXNDb3B5QXJyYXkpO1xuaGFyZGVuKGlzQ29weUFycmF5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVjb3JkPShyZWNvcmQpPT5wYXNzU3R5bGVPZihyZWNvcmQpPT09J2NvcHlSZWNvcmQnOyRozY9fb25jZS5pc1JlY29yZChpc1JlY29yZCk7XG5oYXJkZW4oaXNSZWNvcmQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVtb3RhYmxlPShyZW1vdGFibGUpPT5wYXNzU3R5bGVPZihyZW1vdGFibGUpPT09J3JlbW90YWJsZSc7JGjNj19vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyYXksb3B0TmFtZU9mQXJyYXk9J0FsbGVnZWQgYXJyYXknKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKGFycmF5KTtcbnBhc3NTdHlsZT09PSdjb3B5QXJyYXknfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZBcnJheSl9ICR7YXJyYXl9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weUFycmF5KGFzc2VydENvcHlBcnJheSk7XG5oYXJkZW4oYXNzZXJ0Q29weUFycmF5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVjb3JkPShyZWNvcmQsb3B0TmFtZU9mUmVjb3JkPSdBbGxlZ2VkIHJlY29yZCcpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVjb3JkKTtcbnBhc3NTdHlsZT09PSdjb3B5UmVjb3JkJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVjb3JkKX0gJHtyZWNvcmR9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgcmVjb3JkLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlY29yZChhc3NlcnRSZWNvcmQpO1xuaGFyZGVuKGFzc2VydFJlY29yZCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlbW90YWJsZT0oXG5yZW1vdGFibGUsXG5vcHROYW1lT2ZSZW1vdGFibGU9J0FsbGVnZWQgcmVtb3RhYmxlJyk9Plxue1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlbW90YWJsZSk7XG5wYXNzU3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVtb3RhYmxlKX0gJHtyZW1vdGFibGV9IG11c3QgYmUgYSByZW1vdGFibGUsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANIBosRCBgAAQgYAACEAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLCIuL3NyYy9tZW1vLXJhY2UuanMiLCIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlUHJvbWlzZUtpdCIsInJhY2VQcm9taXNlcyJdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCxtZW1vUmFjZTskaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzXCIsIFtbXCJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvbWVtby1yYWNlLmpzXCIsIFtbXCJtZW1vUmFjZVwiLCBbJGjNj19hID0+IChtZW1vUmFjZSA9ICRozY9fYSldXV1dLFtcIi4vc3JjL2lzLXByb21pc2UuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlUHJvbWlzZUtpdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVByb21pc2VLaXRcIn0pOyRozY9fb25jZS5tYWtlUHJvbWlzZUtpdChtYWtlUHJvbWlzZUtpdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJhY2VQcm9taXNlcywgJ25hbWUnLCB7dmFsdWU6IFwicmFjZVByb21pc2VzXCJ9KTskaM2PX29uY2UucmFjZVByb21pc2VzKHJhY2VQcm9taXNlcyk7ICAgXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBCZXN0UGlwZWxpbmFibGVQcm9taXNlPWdsb2JhbFRoaXMuSGFuZGxlZFByb21pc2V8fFByb21pc2U7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlUHJvbWlzZUtpdCgpe1xuY29uc3R7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9PW1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCgpO1xuXG5jb25zdCBwcm9taXNlPW5ldyBCZXN0UGlwZWxpbmFibGVQcm9taXNlKGV4ZWN1dG9yKTtcblxucmV0dXJuIGhhcmRlbih7cHJvbWlzZSxyZXNvbHZlLHJlamVjdH0pO1xuIH1cbmhhcmRlbihtYWtlUHJvbWlzZUtpdCk7XG5cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHJhY2VQcm9taXNlcyh2YWx1ZXMpe1xucmV0dXJuIGhhcmRlbihtZW1vUmFjZS5jYWxsKEJlc3RQaXBlbGluYWJsZVByb21pc2UsdmFsdWVzKSk7XG4gfVxuaGFyZGVuKHJhY2VQcm9taXNlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZUtpdCI6WyJtYWtlUHJvbWlzZUtpdCJdLCJyYWNlUHJvbWlzZXMiOlsicmFjZVByb21pc2VzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALNdW0ZVAgAAVQIAACoAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL2lzLXByb21pc2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImlzUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaM2PX29uY2UuaXNQcm9taXNlKGlzUHJvbWlzZSk7ICAgLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgaXNQcm9taXNlKG1heWJlUHJvbWlzZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSk9PT1tYXliZVByb21pc2U7XG4gfVxuaGFyZGVuKGlzUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Byb21pc2UiOlsiaXNQcm9taXNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPpm8JGcBwAAnAcAACkAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL21lbW8tcmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWVtb1JhY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4qL1xuXG5jb25zdCBpc09iamVjdD0odmFsdWUpPT5PYmplY3QodmFsdWUpPT09dmFsdWU7XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBrbm93blByb21pc2VzPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYXJrU2V0dGxlZD0ocmVjb3JkKT0+e1xuaWYoIXJlY29yZHx8cmVjb3JkLnNldHRsZWQpe1xucmV0dXJuIG5ldyBTZXQoKTtcbiB9XG5cbmNvbnN0e2RlZmVycmVkc309cmVjb3JkO1xuT2JqZWN0LmFzc2lnbihyZWNvcmQse1xuZGVmZXJyZWRzOnVuZGVmaW5lZCxcbnNldHRsZWQ6dHJ1ZX0pO1xuXG5PYmplY3QuZnJlZXplKHJlY29yZCk7XG5yZXR1cm4gZGVmZXJyZWRzO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGdldE1lbW9SZWNvcmQ9KHZhbHVlKT0+e1xuaWYoIWlzT2JqZWN0KHZhbHVlKSl7XG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7c2V0dGxlZDp0cnVlfSk7XG4gfVxuXG5sZXQgcmVjb3JkPWtub3duUHJvbWlzZXMuZ2V0KHZhbHVlKTtcblxuaWYoIXJlY29yZCl7XG5yZWNvcmQ9e2RlZmVycmVkczpuZXcgU2V0KCksc2V0dGxlZDpmYWxzZX07XG5rbm93blByb21pc2VzLnNldCh2YWx1ZSxyZWNvcmQpO1xuLy9cblByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihcbih2YWwpPT57XG5mb3IoY29uc3R7cmVzb2x2ZX1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlc29sdmUodmFsKTtcbiB9XG4gfSxcbihlcnIpPT57XG5mb3IoY29uc3R7cmVqZWN0fW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVqZWN0KGVycik7XG4gfVxuIH0pO1xuXG4gfVxucmV0dXJuIHJlY29yZDtcbiB9O1xuXG5jb25zdHtyYWNlfT17XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5yYWNlKHZhbHVlcyl7XG5sZXQgZGVmZXJyZWQ7XG4vKiAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBjYWNoZWRWYWx1ZXM9W107XG5jb25zdCBDPXRoaXM7XG5jb25zdCByZXN1bHQ9bmV3IEMoKHJlc29sdmUscmVqZWN0KT0+e1xuZGVmZXJyZWQ9e3Jlc29sdmUscmVqZWN0fTtcbmZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe1xuY2FjaGVkVmFsdWVzLnB1c2godmFsdWUpO1xuY29uc3R7c2V0dGxlZCxkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoc2V0dGxlZCl7XG4vL1xuLy9cbkMucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlLHJlamVjdCk7XG4gfWVsc2V7XG5kZWZlcnJlZHMuYWRkKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuXG4vL1xuLy9cbnJldHVybiByZXN1bHQuZmluYWxseSgoKT0+e1xuZm9yKGNvbnN0IHZhbHVlIG9mIGNhY2hlZFZhbHVlcyl7XG5jb25zdHtkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoZGVmZXJyZWRzKXtcbmRlZmVycmVkcy5kZWxldGUoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG4gfX07JGjNj19vbmNlLnJhY2UocmFjZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtZW1vUmFjZSI6WyJyYWNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJxtxLJ8BQAAfAUAADQAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlc29sdmU7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZWplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlPSh2YWx1ZSk9PntcbmlmKGludGVybmFsUmVzb2x2ZSl7XG5pbnRlcm5hbFJlc29sdmUodmFsdWUpO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PW51bGwpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlamVjdD0ocmVhc29uKT0+e1xuaWYoaW50ZXJuYWxSZWplY3Qpe1xuaW50ZXJuYWxSZWplY3QocmVhc29uKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlamVjdD09PW51bGwpO1xuIH1cbiB9O1xuXG5jb25zdCBleGVjdXRvcj0ocmVzLHJlaik9PntcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT11bmRlZmluZWQmJmludGVybmFsUmVqZWN0PT09dW5kZWZpbmVkKTtcbmludGVybmFsUmVzb2x2ZT1yZXM7XG5pbnRlcm5hbFJlamVjdD1yZWo7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9KTtcbiB9OyRozY9fb25jZS5tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbmhhcmRlbihtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0IjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAlAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKhDskZEBAACRAQAAIAAAAEBlbmRvL3RyYW1wb2xpbmUtdjEuMC4yL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3RyYW1wb2xpbmUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy90cmFtcG9saW5lLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy90cmFtcG9saW5lLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPJouaAgBwAAIAcAACkAAABAZW5kby90cmFtcG9saW5lLXYxLjAuMi9zcmMvdHJhbXBvbGluZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYXN5bmNUcmFtcG9saW5lIiwiZ2VuZXJhdG9yUHJvdG90eXBlIiwic3luY1RyYW1wb2xpbmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzeW5jVHJhbXBvbGluZSwgJ25hbWUnLCB7dmFsdWU6IFwic3luY1RyYW1wb2xpbmVcIn0pOyRozY9fb25jZS5zeW5jVHJhbXBvbGluZShzeW5jVHJhbXBvbGluZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFzeW5jVHJhbXBvbGluZSwgJ25hbWUnLCB7dmFsdWU6IFwiYXN5bmNUcmFtcG9saW5lXCJ9KTskaM2PX29uY2UuYXN5bmNUcmFtcG9saW5lKGFzeW5jVHJhbXBvbGluZSk7ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuICovXG5jb25zdHtnZXRQcm90b3R5cGVPZn09T2JqZWN0O1xuY29uc3R7YmluZH09RnVuY3Rpb24ucHJvdG90eXBlO1xuY29uc3QgdW5jdXJyeVRoaXM9YmluZC5iaW5kKGJpbmQuY2FsbCk7Ly9cbmNvbnN0ICAgICAgIHtwcm90b3R5cGU6Z2VuZXJhdG9yUHJvdG90eXBlfT1nZXRQcm90b3R5cGVPZihcbi8vXG5mdW5jdGlvbiooKXsgfSk7JGjNj19vbmNlLmdlbmVyYXRvclByb3RvdHlwZShnZW5lcmF0b3JQcm90b3R5cGUpO1xuXG5jb25zdCBnZW5lcmF0b3JOZXh0PXVuY3VycnlUaGlzKGdlbmVyYXRvclByb3RvdHlwZS5uZXh0KTtcbmNvbnN0IGdlbmVyYXRvclRocm93PXVuY3VycnlUaGlzKGdlbmVyYXRvclByb3RvdHlwZS50aHJvdyk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHN5bmNUcmFtcG9saW5lKGdlbmVyYXRvckZuLC4uLmFyZ3Mpe1xuY29uc3QgaXRlcmF0b3I9Z2VuZXJhdG9yRm4oLi4uYXJncyk7XG5sZXQgcmVzdWx0PWdlbmVyYXRvck5leHQoaXRlcmF0b3IpO1xud2hpbGUoIXJlc3VsdC5kb25lKXtcbnRyeXtcbnJlc3VsdD1nZW5lcmF0b3JOZXh0KGl0ZXJhdG9yLHJlc3VsdC52YWx1ZSk7XG4gfWNhdGNoKGVycil7XG5yZXN1bHQ9Z2VuZXJhdG9yVGhyb3coaXRlcmF0b3IsZXJyKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdC52YWx1ZTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gICAgICAgIGFzeW5jVHJhbXBvbGluZShnZW5lcmF0b3JGbiwuLi5hcmdzKXtcbmNvbnN0IGl0ZXJhdG9yPWdlbmVyYXRvckZuKC4uLmFyZ3MpO1xubGV0IHJlc3VsdD1nZW5lcmF0b3JOZXh0KGl0ZXJhdG9yKTtcbndoaWxlKCFyZXN1bHQuZG9uZSl7XG50cnl7XG4vL1xuY29uc3QgdmFsPWF3YWl0IHJlc3VsdC52YWx1ZTtcbnJlc3VsdD1nZW5lcmF0b3JOZXh0KGl0ZXJhdG9yLHZhbCk7XG4gfWNhdGNoKGVycil7XG5yZXN1bHQ9Z2VuZXJhdG9yVGhyb3coaXRlcmF0b3IsZXJyKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdC52YWx1ZTtcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZW5lcmF0b3JQcm90b3R5cGUiOlsiZ2VuZXJhdG9yUHJvdG90eXBlIl0sInN5bmNUcmFtcG9saW5lIjpbInN5bmNUcmFtcG9saW5lIl0sImFzeW5jVHJhbXBvbGluZSI6WyJhc3luY1RyYW1wb2xpbmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA1wBPs4wCAACMAgAAGQAAAEBlbmRvL3ppcC12MS4wLjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCIuL3NyYy9yZWFkZXIuanMiLCIuL3NyYy93cml0ZXIuanMiXSwiZXhwb3J0cyI6WyJyZWFkWmlwIiwicmVhZFppcCIsIndyaXRlWmlwIiwid3JpdGVaaXAiXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiLi9zcmMvcmVhZGVyLmpzXCIsIFtdXSxbXCIuL3NyYy93cml0ZXIuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9yZWFkZXIuanMiOltbIlppcFJlYWRlciIsIlppcFJlYWRlciJdLFsicmVhZFppcCIsInJlYWRaaXAiXV0sIi4vc3JjL3dyaXRlci5qcyI6W1siWmlwV3JpdGVyIiwiWmlwV3JpdGVyIl0sWyJ3cml0ZVppcCIsIndyaXRlWmlwIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABkqpIDQhIAAEISAAAlAAAAQGVuZG8vemlwLXYxLjAuOC9zcmMvYnVmZmVyLXJlYWRlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQnVmZmVyUmVhZGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwcml2YXRlRmllbGRzPW5ldyBXZWFrTWFwKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHByaXZhdGVGaWVsZHNHZXQ9cHJpdmF0ZUZpZWxkcy5nZXQuYmluZChwcml2YXRlRmllbGRzKTtcblxuY2xhc3MgICAgICAgIEJ1ZmZlclJlYWRlcntcbi8qXG5cbiAgICovXG4gICAgICAgICAgIGNvbnN0cnVjdG9yKGJ1ZmZlcil7XG5jb25zdCBieXRlcz1uZXcgVWludDhBcnJheShidWZmZXIpO1xuY29uc3QgZGF0YT1uZXcgRGF0YVZpZXcoYnl0ZXMuYnVmZmVyKTtcbnByaXZhdGVGaWVsZHMuc2V0KHRoaXMse1xuYnl0ZXMsXG5kYXRhLFxubGVuZ3RoOmJ5dGVzLmxlbmd0aCxcbmluZGV4OjAsXG5vZmZzZXQ6MH0pO1xuXG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgIGdldCBsZW5ndGgoKXtcbnJldHVybiBwcml2YXRlRmllbGRzR2V0KHRoaXMpLmxlbmd0aDtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICBnZXQgaW5kZXgoKXtcbnJldHVybiBwcml2YXRlRmllbGRzR2V0KHRoaXMpLmluZGV4O1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgIHNldCBpbmRleChpbmRleCl7XG50aGlzLnNlZWsoaW5kZXgpO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgICBzZXQgb2Zmc2V0KG9mZnNldCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbmlmKG9mZnNldD5maWVsZHMuZGF0YS5ieXRlTGVuZ3RoKXtcbnRocm93IEVycm9yKCdDYW5ub3Qgc2V0IG9mZnNldCBiZXlvbmQgbGVuZ3RoIG9mIHVuZGVybHlpbmcgZGF0YScpO1xuIH1cbmlmKG9mZnNldDwwKXtcbnRocm93IEVycm9yKCdDYW5ub3Qgc2V0IG5lZ2F0aXZlIG9mZnNldCcpO1xuIH1cbmZpZWxkcy5vZmZzZXQ9b2Zmc2V0O1xuZmllbGRzLmxlbmd0aD1maWVsZHMuZGF0YS5ieXRlTGVuZ3RoLWZpZWxkcy5vZmZzZXQ7XG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbiAgICAgICBjYW5TZWVrKGluZGV4KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xucmV0dXJuIGluZGV4Pj0wJiZmaWVsZHMub2Zmc2V0K2luZGV4PD1maWVsZHMubGVuZ3RoO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgICAgICAgIGFzc2VydENhblNlZWsoaW5kZXgpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5pZighdGhpcy5jYW5TZWVrKGluZGV4KSl7XG50aHJvdyBFcnJvcihcbiBgRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAke2ZpZWxkcy5sZW5ndGh9LCBhc2tlZCBpbmRleCAke2luZGV4fWApO1xuXG4gfVxuIH1cblxuLypcblxuXG4gICAqL1xuICAgIHNlZWsoaW5kZXgpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5jb25zdCByZXN0b3JlPWZpZWxkcy5pbmRleDtcbnRoaXMuYXNzZXJ0Q2FuU2VlayhpbmRleCk7XG5maWVsZHMuaW5kZXg9aW5kZXg7XG5yZXR1cm4gcmVzdG9yZTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICBwZWVrKHNpemUpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG4vL1xuc2l6ZT1NYXRoLm1heCgwLE1hdGgubWluKGZpZWxkcy5sZW5ndGgtZmllbGRzLmluZGV4LHNpemUpKTtcbmlmKHNpemU9PT0wKXtcbi8vXG5yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gfVxuY29uc3QgcmVzdWx0PWZpZWxkcy5ieXRlcy5zdWJhcnJheShcbmZpZWxkcy5vZmZzZXQrZmllbGRzLmluZGV4LFxuZmllbGRzLm9mZnNldCtmaWVsZHMuaW5kZXgrc2l6ZSk7XG5cbnJldHVybiByZXN1bHQ7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgIGNhblJlYWQob2Zmc2V0KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xucmV0dXJuIHRoaXMuY2FuU2VlayhmaWVsZHMuaW5kZXgrb2Zmc2V0KTtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG4gICAgICAgICAgICAgYXNzZXJ0Q2FuUmVhZChvZmZzZXQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLmFzc2VydENhblNlZWsoZmllbGRzLmluZGV4K29mZnNldCk7XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xuICAgIHJlYWQoc2l6ZSl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnRoaXMuYXNzZXJ0Q2FuUmVhZChzaXplKTtcbmNvbnN0IHJlc3VsdD10aGlzLnBlZWsoc2l6ZSk7XG5maWVsZHMuaW5kZXgrPXNpemU7XG5yZXR1cm4gcmVzdWx0O1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgIHJlYWRVaW50OCgpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLmFzc2VydENhblJlYWQoMSk7XG5jb25zdCBpbmRleD1maWVsZHMub2Zmc2V0K2ZpZWxkcy5pbmRleDtcbmNvbnN0IHZhbHVlPWZpZWxkcy5kYXRhLmdldFVpbnQ4KGluZGV4KTtcbmZpZWxkcy5pbmRleCs9MTtcbnJldHVybiB2YWx1ZTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgICAgICByZWFkVWludDE2KGxpdHRsZUVuZGlhbil7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnRoaXMuYXNzZXJ0Q2FuUmVhZCgyKTtcbmNvbnN0IGluZGV4PWZpZWxkcy5vZmZzZXQrZmllbGRzLmluZGV4O1xuY29uc3QgdmFsdWU9ZmllbGRzLmRhdGEuZ2V0VWludDE2KGluZGV4LGxpdHRsZUVuZGlhbik7XG5maWVsZHMuaW5kZXgrPTI7XG5yZXR1cm4gdmFsdWU7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgICAgcmVhZFVpbnQzMihsaXR0bGVFbmRpYW4pe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLmFzc2VydENhblJlYWQoNCk7XG5jb25zdCBpbmRleD1maWVsZHMub2Zmc2V0K2ZpZWxkcy5pbmRleDtcbmNvbnN0IHZhbHVlPWZpZWxkcy5kYXRhLmdldFVpbnQzMihpbmRleCxsaXR0bGVFbmRpYW4pO1xuZmllbGRzLmluZGV4Kz00O1xucmV0dXJuIHZhbHVlO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgYnl0ZUF0KGluZGV4KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xucmV0dXJuIGZpZWxkcy5ieXRlc1tmaWVsZHMub2Zmc2V0K2luZGV4XTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgc2tpcChvZmZzZXQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLnNlZWsoZmllbGRzLmluZGV4K29mZnNldCk7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICBleHBlY3QoZXhwZWN0ZWQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5pZighdGhpcy5tYXRjaEF0KGZpZWxkcy5pbmRleCxleHBlY3RlZCkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmZpZWxkcy5pbmRleCs9ZXhwZWN0ZWQubGVuZ3RoO1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbiAgICAgICBtYXRjaEF0KGluZGV4LGV4cGVjdGVkKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xuaWYoaW5kZXgrZXhwZWN0ZWQubGVuZ3RoPmZpZWxkcy5sZW5ndGh8fGluZGV4PDApe1xucmV0dXJuIGZhbHNlO1xuIH1cbmZvcihsZXQgaT0wO2k8ZXhwZWN0ZWQubGVuZ3RoO2krPTEpe1xuaWYoZXhwZWN0ZWRbaV0hPT10aGlzLmJ5dGVBdChpbmRleCtpKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgIGFzc2VydChleHBlY3RlZCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbmlmKCF0aGlzLmV4cGVjdChleHBlY3RlZCkpe1xudGhyb3cgRXJyb3IoXG4gYEV4cGVjdGVkICR7cShleHBlY3RlZCl9IGF0ICR7ZmllbGRzLmluZGV4fSwgZ290ICR7dGhpcy5wZWVrKFxuZXhwZWN0ZWQubGVuZ3RoKVxuIH1gKTtcblxuIH1cbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgICAgZmluZExhc3QoZXhwZWN0ZWQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5sZXQgaW5kZXg9ZmllbGRzLmxlbmd0aC1leHBlY3RlZC5sZW5ndGg7XG53aGlsZShpbmRleD49MCYmIXRoaXMubWF0Y2hBdChpbmRleCxleHBlY3RlZCkpe1xuaW5kZXgtPTE7XG4gfVxucmV0dXJuIGluZGV4O1xuIH19JGjNj19vbmNlLiBCdWZmZXJSZWFkZXIoQnVmZmVyUmVhZGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJ1ZmZlclJlYWRlciI6WyJCdWZmZXJSZWFkZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAORKVkEIOAABCDgAAJQAAAEBlbmRvL3ppcC12MS4wLjgvc3JjL2J1ZmZlci13cml0ZXIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkJ1ZmZlcldyaXRlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcHJpdmF0ZUZpZWxkcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IGdldFByaXZhdGVGaWVsZHM9KHNlbGYpPT57XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkcy5nZXQoc2VsZik7XG5pZighZmllbGRzKXtcbnRocm93IEVycm9yKCdCdWZmZXJXcml0ZXIgZmllbGRzIGFyZSBub3QgaW5pdGlhbGl6ZWQnKTtcbiB9XG5yZXR1cm4gZmllbGRzO1xuIH07XG5cbmNvbnN0IGFzc2VydE5hdE51bWJlcj0obik9PntcbmlmKE51bWJlci5pc1NhZmVJbnRlZ2VyKG4pJiYvKiAgICAgICAgICAgICAgICAgKi9uPj0wKXtcbnJldHVybjtcbiB9XG50aHJvdyBUeXBlRXJyb3IoIGBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIGdvdCAke259YCk7XG4gfTtcblxuY2xhc3MgICAgICAgIEJ1ZmZlcldyaXRlcntcbi8qXG5cbiAgICovXG4gICAgICAgICAgZ2V0IGxlbmd0aCgpe1xucmV0dXJuIGdldFByaXZhdGVGaWVsZHModGhpcykubGVuZ3RoO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgIGdldCBpbmRleCgpe1xucmV0dXJuIGdldFByaXZhdGVGaWVsZHModGhpcykuaW5kZXg7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgc2V0IGluZGV4KGluZGV4KXtcbnRoaXMuc2VlayhpbmRleCk7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgICBjb25zdHJ1Y3RvcihjYXBhY2l0eT0xNil7XG5jb25zdCBieXRlcz1uZXcgVWludDhBcnJheShjYXBhY2l0eSk7XG5jb25zdCBkYXRhPW5ldyBEYXRhVmlldyhieXRlcy5idWZmZXIpO1xucHJpdmF0ZUZpZWxkcy5zZXQodGhpcyx7XG5ieXRlcyxcbmRhdGEsXG5pbmRleDowLFxubGVuZ3RoOjAsXG5jYXBhY2l0eX0pO1xuXG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgICAgIGVuc3VyZUNhblNlZWsocmVxdWlyZWQpe1xuYXNzZXJ0TmF0TnVtYmVyKHJlcXVpcmVkKTtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xubGV0IGNhcGFjaXR5PWZpZWxkcy5jYXBhY2l0eTtcbndoaWxlKGNhcGFjaXR5PHJlcXVpcmVkKXtcbmNhcGFjaXR5Kj0yO1xuIH1cbmNvbnN0IGJ5dGVzPW5ldyBVaW50OEFycmF5KGNhcGFjaXR5KTtcbmNvbnN0IGRhdGE9bmV3IERhdGFWaWV3KGJ5dGVzLmJ1ZmZlcik7XG5ieXRlcy5zZXQoZmllbGRzLmJ5dGVzLnN1YmFycmF5KDAsZmllbGRzLmxlbmd0aCkpO1xuZmllbGRzLmJ5dGVzPWJ5dGVzO1xuZmllbGRzLmRhdGE9ZGF0YTtcbmZpZWxkcy5jYXBhY2l0eT1jYXBhY2l0eTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgc2VlayhpbmRleCl7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnRoaXMuZW5zdXJlQ2FuU2VlayhpbmRleCk7XG5maWVsZHMuaW5kZXg9aW5kZXg7XG5maWVsZHMubGVuZ3RoPU1hdGgubWF4KGZpZWxkcy5pbmRleCxmaWVsZHMubGVuZ3RoKTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICAgICAgIGVuc3VyZUNhbldyaXRlKHNpemUpe1xuYXNzZXJ0TmF0TnVtYmVyKHNpemUpO1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG50aGlzLmVuc3VyZUNhblNlZWsoZmllbGRzLmluZGV4K3NpemUpO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgd3JpdGUoYnl0ZXMpe1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG50aGlzLmVuc3VyZUNhbldyaXRlKGJ5dGVzLmJ5dGVMZW5ndGgpO1xuZmllbGRzLmJ5dGVzLnNldChieXRlcyxmaWVsZHMuaW5kZXgpO1xuZmllbGRzLmluZGV4Kz1ieXRlcy5ieXRlTGVuZ3RoO1xuZmllbGRzLmxlbmd0aD1NYXRoLm1heChmaWVsZHMuaW5kZXgsZmllbGRzLmxlbmd0aCk7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgICB3cml0ZUNvcHkoc3RhcnQsZW5kKXtcbmFzc2VydE5hdE51bWJlcihzdGFydCk7XG5hc3NlcnROYXROdW1iZXIoZW5kKTtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xuY29uc3Qgc2l6ZT1lbmQtc3RhcnQ7XG50aGlzLmVuc3VyZUNhbldyaXRlKHNpemUpO1xuZmllbGRzLmJ5dGVzLmNvcHlXaXRoaW4oZmllbGRzLmluZGV4LHN0YXJ0LGVuZCk7XG5maWVsZHMuaW5kZXgrPXNpemU7XG5maWVsZHMubGVuZ3RoPU1hdGgubWF4KGZpZWxkcy5pbmRleCxmaWVsZHMubGVuZ3RoKTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICAgd3JpdGVVaW50OCh2YWx1ZSl7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnRoaXMuZW5zdXJlQ2FuV3JpdGUoMSk7XG5maWVsZHMuZGF0YS5zZXRVaW50OChmaWVsZHMuaW5kZXgsdmFsdWUpO1xuZmllbGRzLmluZGV4Kz0xO1xuZmllbGRzLmxlbmd0aD1NYXRoLm1heChmaWVsZHMuaW5kZXgsZmllbGRzLmxlbmd0aCk7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgICAgIHdyaXRlVWludDE2KHZhbHVlLGxpdHRsZUVuZGlhbil7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnRoaXMuZW5zdXJlQ2FuV3JpdGUoMik7XG5jb25zdCBpbmRleD1maWVsZHMuaW5kZXg7XG5maWVsZHMuZGF0YS5zZXRVaW50MTYoaW5kZXgsdmFsdWUsbGl0dGxlRW5kaWFuKTtcbmZpZWxkcy5pbmRleCs9MjtcbmZpZWxkcy5sZW5ndGg9TWF0aC5tYXgoZmllbGRzLmluZGV4LGZpZWxkcy5sZW5ndGgpO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgICAgICB3cml0ZVVpbnQzMih2YWx1ZSxsaXR0bGVFbmRpYW4pe1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG50aGlzLmVuc3VyZUNhbldyaXRlKDQpO1xuY29uc3QgaW5kZXg9ZmllbGRzLmluZGV4O1xuZmllbGRzLmRhdGEuc2V0VWludDMyKGluZGV4LHZhbHVlLGxpdHRsZUVuZGlhbik7XG5maWVsZHMuaW5kZXgrPTQ7XG5maWVsZHMubGVuZ3RoPU1hdGgubWF4KGZpZWxkcy5pbmRleCxmaWVsZHMubGVuZ3RoKTtcbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuICAgICAgICBzdWJhcnJheShiZWdpbixlbmQpe1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG5yZXR1cm4gZmllbGRzLmJ5dGVzLnN1YmFycmF5KDAsZmllbGRzLmxlbmd0aCkuc3ViYXJyYXkoYmVnaW4sZW5kKTtcbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuICAgICBzbGljZShiZWdpbixlbmQpe1xucmV0dXJuIHRoaXMuc3ViYXJyYXkoYmVnaW4sZW5kKS5zbGljZSgpO1xuIH19JGjNj19vbmNlLiBCdWZmZXJXcml0ZXIoQnVmZmVyV3JpdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJ1ZmZlcldyaXRlciI6WyJCdWZmZXJXcml0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAsLLlbJgBAACYAQAAIwAAAEBlbmRvL3ppcC12MS4wLjgvc3JjL2NvbXByZXNzaW9uLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJTVE9SRSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLy9cbmNvbnN0ICAgICAgICBTVE9SRT0wOyRozY9fb25jZS5TVE9SRShTVE9SRSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJTVE9SRSI6WyJTVE9SRSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB3uLF1rAMAAKwDAAAdAAAAQGVuZG8vemlwLXYxLjAuOC9zcmMvY3JjMzIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImNyYzMyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JjMzIsICduYW1lJywge3ZhbHVlOiBcImNyYzMyXCJ9KTskaM2PX29uY2UuY3JjMzIoY3JjMzIpOyAgIC8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8vXG4vKlxuXG4gKi9cbmZ1bmN0aW9uIG1ha2VUYWJsZSgpe1xubGV0IGM7XG5jb25zdCB0YWJsZT1bXTtcblxuZm9yKGxldCBuPTA7bjwyNTY7bis9MSl7XG5jPW47XG5mb3IobGV0IGs9MDtrPDg7ays9MSl7XG5jPWMmMT8weGVkYjg4MzIwXmM+Pj4xOmM+Pj4xO1xuIH1cbnRhYmxlW25dPWM7XG4gfVxuXG5yZXR1cm4gdGFibGU7XG4gfVxuXG4vL1xuY29uc3QgdGFibGU9bWFrZVRhYmxlKCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIGNyYzMyKGJ5dGVzLGxlbmd0aD1ieXRlcy5sZW5ndGgsaW5kZXg9MCxjcmM9MCl7XG5jb25zdCBlbmQ9aW5kZXgrbGVuZ3RoO1xuXG5jcmNePS0xO1xuXG5mb3IobGV0IGk9aW5kZXg7aTxlbmQ7aSs9MSl7XG5jcmM9Y3JjPj4+OF50YWJsZVsoY3JjXmJ5dGVzW2ldKSYweGZmXTtcbiB9XG5cbnJldHVybihjcmNeLTEpPj4+MDtcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjcmMzMiI6WyJjcmMzMiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAaLaJ32SUAANklAAAlAAAAQGVuZG8vemlwLXYxLjAuOC9zcmMvZm9ybWF0LXJlYWRlci5qc3siaW1wb3J0cyI6WyIuL3R5cGVzLmpzIiwiLi9jcmMzMi5qcyIsIi4vc2lnbmF0dXJlLmpzIiwiLi9jb21wcmVzc2lvbi5qcyJdLCJleHBvcnRzIjpbInJlYWRaaXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgY3JjMzIsc2lnbmF0dXJlLGNvbXByZXNzaW9uOyRozY9faW1wb3J0cyhbW1wiLi90eXBlcy5qc1wiLCBbXV0sW1wiLi9jcmMzMi5qc1wiLCBbW1wiY3JjMzJcIiwgWyRozY9fYSA9PiAoY3JjMzIgPSAkaM2PX2EpXV1dXSxbXCIuL3NpZ25hdHVyZS5qc1wiLCBbW1wiKlwiLCBbJGjNj19hID0+IChzaWduYXR1cmUgPSAkaM2PX2EpXV1dXSxbXCIuL2NvbXByZXNzaW9uLmpzXCIsIFtbXCIqXCIsIFskaM2PX2EgPT4gKGNvbXByZXNzaW9uID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmVhZFppcCwgJ25hbWUnLCB7dmFsdWU6IFwicmVhZFppcFwifSk7JGjNj19vbmNlLnJlYWRaaXAocmVhZFppcCk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdCBNQVhfVkFMVUVfMTZCSVRTPTY1NTM1O1xuY29uc3QgTUFYX1ZBTFVFXzMyQklUUz00Mjk0OTY3Mjk1O1xuXG5jb25zdCB0ZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoKTtcblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIGlzRW5jcnlwdGVkKGJpdEZsYWcpe1xucmV0dXJuKGJpdEZsYWcmMHgwMDAxKT09PTB4MDAwMTtcbiB9XG5cbi8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZERvc0RhdGVUaW1lKHJlYWRlcil7XG5jb25zdCBkb3NUaW1lPXJlYWRlci5yZWFkVWludDMyKHRydWUpO1xucmV0dXJuIG5ldyBEYXRlKFxuRGF0ZS5VVEMoXG4oZG9zVGltZT4+MjUmMHg3ZikrMTk4MCwvL1xuKGRvc1RpbWU+PjIxJjB4MGYpLTEsLy9cbmRvc1RpbWU+PjE2JjB4MWYsLy9cbmRvc1RpbWU+PjExJjB4MWYsLy9cbmRvc1RpbWU+PjUmMHgzZiwvL1xuKGRvc1RpbWUmMHgxZik8PDEvL1xuKSk7XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiByZWFkSGVhZGVycyhyZWFkZXIpe1xucmV0dXJue1xudmVyc2lvbk5lZWRlZDpyZWFkZXIucmVhZFVpbnQxNih0cnVlKSxcbmJpdEZsYWc6cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSksXG5jb21wcmVzc2lvbk1ldGhvZDpyZWFkZXIucmVhZFVpbnQxNih0cnVlKSxcbmRhdGU6cmVhZERvc0RhdGVUaW1lKHJlYWRlciksXG5jcmMzMjpyZWFkZXIucmVhZFVpbnQzMih0cnVlKSxcbmNvbXByZXNzZWRMZW5ndGg6cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSksXG51bmNvbXByZXNzZWRMZW5ndGg6cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSl9O1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZENlbnRyYWxGaWxlSGVhZGVyKHJlYWRlcil7XG5jb25zdCB2ZXJzaW9uPXJlYWRlci5yZWFkVWludDgoKTtcbmNvbnN0IG1hZGVCeT1yZWFkZXIucmVhZFVpbnQ4KCk7XG5jb25zdCBoZWFkZXJzPXJlYWRIZWFkZXJzKHJlYWRlcik7XG5jb25zdCBuYW1lTGVuZ3RoPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgZXh0cmFGaWVsZHNMZW5ndGg9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBjb21tZW50TGVuZ3RoPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgZGlza051bWJlclN0YXJ0PXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSk7XG5jb25zdCBmaWxlU3RhcnQ9cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSk7XG5cbmNvbnN0IG5hbWU9cmVhZGVyLnJlYWQobmFtZUxlbmd0aCk7XG4vL1xucmVhZGVyLnNraXAoZXh0cmFGaWVsZHNMZW5ndGgpO1xuXG5pZihoZWFkZXJzLnVuY29tcHJlc3NlZExlbmd0aD09PU1BWF9WQUxVRV8zMkJJVFMpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCByZWFkIFppcDY0Jyk7XG4gfVxuaWYoaGVhZGVycy5jb21wcmVzc2VkTGVuZ3RoPT09TUFYX1ZBTFVFXzMyQklUUyl7XG50aHJvdyBFcnJvcignQ2Fubm90IHJlYWQgWmlwNjQnKTtcbiB9XG5pZihmaWxlU3RhcnQ9PT1NQVhfVkFMVUVfMzJCSVRTKXtcbnRocm93IEVycm9yKCdDYW5ub3QgcmVhZCBaaXA2NCcpO1xuIH1cbmlmKGRpc2tOdW1iZXJTdGFydD09PU1BWF9WQUxVRV8zMkJJVFMpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCByZWFkIFppcDY0Jyk7XG4gfVxuXG5jb25zdCBjb21tZW50PXJlYWRlci5yZWFkKGNvbW1lbnRMZW5ndGgpO1xuXG5yZXR1cm57XG5uYW1lLFxudmVyc2lvbixcbm1hZGVCeSxcbi4uLmhlYWRlcnMsXG5kaXNrTnVtYmVyU3RhcnQsXG5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzLFxuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyxcbmZpbGVTdGFydCxcbmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiByZWFkQ2VudHJhbERpcmVjdG9yeShyZWFkZXIsbG9jYXRvcil7XG5jb25zdHtjZW50cmFsRGlyZWN0b3J5T2Zmc2V0LGNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzfT1sb2NhdG9yO1xucmVhZGVyLnNlZWsoY2VudHJhbERpcmVjdG9yeU9mZnNldCk7XG5cbmNvbnN0IGVudHJpZXM9W107XG53aGlsZShyZWFkZXIuZXhwZWN0KHNpZ25hdHVyZS5DRU5UUkFMX0ZJTEVfSEVBREVSKSl7XG5jb25zdCBlbnRyeT1yZWFkQ2VudHJhbEZpbGVIZWFkZXIocmVhZGVyKTtcbmVudHJpZXMucHVzaChlbnRyeSk7XG4gfVxuXG5pZihjZW50cmFsRGlyZWN0b3J5UmVjb3JkcyE9PWVudHJpZXMubGVuZ3RoKXtcbi8vXG4vL1xudGhyb3cgRXJyb3IoXG4gYENvcnJ1cHRlZCB6aXAgb3IgYnVnOiBleHBlY3RlZCAke2NlbnRyYWxEaXJlY3RvcnlSZWNvcmRzfSByZWNvcmRzIGluIGNlbnRyYWwgZGlyLCBnb3QgJHtlbnRyaWVzLmxlbmd0aH1gKTtcblxuIH1cblxucmV0dXJuIGVudHJpZXM7XG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZEZpbGUocmVhZGVyKXtcbnJlYWRlci5leHBlY3Qoc2lnbmF0dXJlLkxPQ0FMX0ZJTEVfSEVBREVSKTtcbmNvbnN0IGhlYWRlcnM9cmVhZEhlYWRlcnMocmVhZGVyKTtcbmNvbnN0IG5hbWVMZW5ndGg9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBleHRyYUZpZWxkc0xlbmd0aD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IG5hbWU9cmVhZGVyLnJlYWQobmFtZUxlbmd0aCk7XG5yZWFkZXIuc2tpcChleHRyYUZpZWxkc0xlbmd0aCk7XG5jb25zdCBjb250ZW50PXJlYWRlci5yZWFkKGhlYWRlcnMuY29tcHJlc3NlZExlbmd0aCk7XG5yZXR1cm57bmFtZSwuLi5oZWFkZXJzLGNvbnRlbnR9O1xuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZExvY2FsRmlsZXMocmVhZGVyLHJlY29yZHMpe1xuY29uc3QgZmlsZXM9W107XG5mb3IoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpe1xucmVhZGVyLnNlZWsocmVjb3JkLmZpbGVTdGFydCk7XG5jb25zdCBmaWxlPXJlYWRGaWxlKHJlYWRlcik7XG5maWxlcy5wdXNoKGZpbGUpO1xuIH1cbnJldHVybiBmaWxlcztcbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiByZWFkQmxvY2tFbmRPZkNlbnRyYWwocmVhZGVyKXtcbmlmKCFyZWFkZXIuZXhwZWN0KHNpZ25hdHVyZS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpKXtcbnRocm93IEVycm9yKFxuJ0NvcnJ1cHQgemlwIGZpbGUsIG9yIHppcCBmaWxlIGNvbnRhaW5pbmcgYW4gdW5zdXBwb3J0ZWQgdmFyaWFibGUtd2lkdGggZW5kLW9mLWFyY2hpdmUgY29tbWVudCwgb3IgYW4gdW5zdXBwb3J0ZWQgemlwIGZpbGUgd2l0aCA2NCBiaXQgc2l6ZXMnKTtcblxuIH1cbmNvbnN0IGRpc2tOdW1iZXI9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBkaXNrV2l0aENlbnRyYWxEaXJTdGFydD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzT25UaGlzRGlzaz1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgY2VudHJhbERpcmVjdG9yeVNpemU9cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSk7XG5jb25zdCBjZW50cmFsRGlyZWN0b3J5T2Zmc2V0PXJlYWRlci5yZWFkVWludDMyKHRydWUpO1xuY29uc3QgY29tbWVudExlbmd0aD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBjb21tZW50PXRleHREZWNvZGVyLmRlY29kZShyZWFkZXIucmVhZChjb21tZW50TGVuZ3RoKSk7XG5yZXR1cm57XG5kaXNrTnVtYmVyLFxuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQsXG5jZW50cmFsRGlyZWN0b3J5UmVjb3Jkc09uVGhpc0Rpc2ssXG5jZW50cmFsRGlyZWN0b3J5UmVjb3JkcyxcbmNlbnRyYWxEaXJlY3RvcnlTaXplLFxuY2VudHJhbERpcmVjdG9yeU9mZnNldCxcbmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeVJlY29yZChyZWFkZXIpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBjZW50cmFsRGlyZWN0b3J5RW5kPXJlYWRlci5sZW5ndGgtMjI7XG5pZihjZW50cmFsRGlyZWN0b3J5RW5kPDApe1xudGhyb3cgRXJyb3IoJ0NvcnJ1cHRlZCB6aXA6IG5vdCBlbm91Z2ggY29udGVudCcpO1xuIH1cbnJlYWRlci5zZWVrKGNlbnRyYWxEaXJlY3RvcnlFbmQpO1xuY29uc3QgbG9jYXRvcj1yZWFkQmxvY2tFbmRPZkNlbnRyYWwocmVhZGVyKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgemlwNjQ9XG5sb2NhdG9yLmRpc2tOdW1iZXI9PT1NQVhfVkFMVUVfMTZCSVRTfHxcbmxvY2F0b3IuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1NQVhfVkFMVUVfMTZCSVRTfHxcbmxvY2F0b3IuY2VudHJhbERpcmVjdG9yeVJlY29yZHNPblRoaXNEaXNrPT09TUFYX1ZBTFVFXzE2QklUU3x8XG5sb2NhdG9yLmNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzPT09TUFYX1ZBTFVFXzE2QklUU3x8XG5sb2NhdG9yLmNlbnRyYWxEaXJlY3RvcnlTaXplPT09TUFYX1ZBTFVFXzMyQklUU3x8XG5sb2NhdG9yLmNlbnRyYWxEaXJlY3RvcnlPZmZzZXQ9PT1NQVhfVkFMVUVfMzJCSVRTO1xuXG5pZih6aXA2NCl7XG50aHJvdyBFcnJvcignQ2Fubm90IHJlYWQgWmlwNjQnKTtcbiB9XG5cbmNvbnN0e1xuY2VudHJhbERpcmVjdG9yeU9mZnNldCxcbmNlbnRyYWxEaXJlY3RvcnlTaXplXG4vL1xufT1sb2NhdG9yO1xuXG5jb25zdCBleHBlY3RlZENlbnRyYWxEaXJlY3RvcnlFbmQ9XG5jZW50cmFsRGlyZWN0b3J5T2Zmc2V0K2NlbnRyYWxEaXJlY3RvcnlTaXplO1xuY29uc3QgZXh0cmFCeXRlcz1jZW50cmFsRGlyZWN0b3J5RW5kLWV4cGVjdGVkQ2VudHJhbERpcmVjdG9yeUVuZDtcblxucmVhZGVyLm9mZnNldD1leHRyYUJ5dGVzO1xuXG5yZXR1cm4gbG9jYXRvcjtcbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUmVjb3JkcyhjZW50cmFsUmVjb3JkLGxvY2FsUmVjb3JkLGFyY2hpdmVOYW1lKXtcbmNvbnN0IGNlbnRyYWxOYW1lPXRleHREZWNvZGVyLmRlY29kZShjZW50cmFsUmVjb3JkLm5hbWUpO1xuY29uc3QgbG9jYWxOYW1lPXRleHREZWNvZGVyLmRlY29kZShsb2NhbFJlY29yZC5uYW1lKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuaWYoY2VudHJhbE5hbWUucmVwbGFjZSgvXFxcXC9nLCcvJykhPT1sb2NhbE5hbWUpe1xudGhyb3cgRXJyb3IoXG4gYFppcCBpbnRlZ3JpdHkgZXJyb3I6IGNlbnRyYWwgcmVjb3JkIGZpbGUgbmFtZSAke3EoXG5jZW50cmFsTmFtZSlcbiB9IG11c3QgbWF0Y2ggbG9jYWwgZmlsZSBuYW1lICR7cShsb2NhbE5hbWUpfSBpbiBhcmNoaXZlICR7cShcbmFyY2hpdmVOYW1lKVxuIH1gKTtcblxuIH1cblxuLypcblxuXG4gICAqL1xuZnVuY3Rpb24gY2hlY2sodmFsdWUsbWVzc2FnZSl7XG5pZighdmFsdWUpe1xudGhyb3cgRXJyb3IoXG4gYFppcCBpbnRlZ3JpdHkgZXJyb3I6ICR7bWVzc2FnZX0gZm9yIGZpbGUgJHtxKFxubG9jYWxOYW1lKVxuIH0gaW4gYXJjaGl2ZSAke3EoYXJjaGl2ZU5hbWUpfWApO1xuXG4gfVxuIH1cblxuY2hlY2soXG5jZW50cmFsUmVjb3JkLmJpdEZsYWc9PT1sb2NhbFJlY29yZC5iaXRGbGFnLFxuIGBDZW50cmFsIHJlY29yZCBiaXQgZmxhZyAke2NlbnRyYWxSZWNvcmQuYml0RmxhZy50b1N0cmluZyhcbjE2KVxuIH0gbXVzdCBtYXRjaCBsb2NhbCByZWNvcmQgYml0IGZsYWcgJHtsb2NhbFJlY29yZC5iaXRGbGFnLnRvU3RyaW5nKDE2KX1gKTtcblxuY2hlY2soXG5jZW50cmFsUmVjb3JkLmNvbXByZXNzaW9uTWV0aG9kPT09bG9jYWxSZWNvcmQuY29tcHJlc3Npb25NZXRob2QsXG4gYENlbnRyYWwgcmVjb3JkIGNvbXByZXNzaW9uIG1ldGhvZCAke3EoXG5jZW50cmFsUmVjb3JkLmNvbXByZXNzaW9uTWV0aG9kKVxuIH0gbXVzdCBtYXRjaCBsb2NhbCBjb21wcmVzc2lvbiBtZXRob2QgJHtxKGxvY2FsUmVjb3JkLmNvbXByZXNzaW9uTWV0aG9kKX1gKTtcblxuLy9cbi8vXG5jaGVjayhcbmNlbnRyYWxSZWNvcmQuY3JjMzI9PT1sb2NhbFJlY29yZC5jcmMzMixcbiBgQ2VudHJhbCByZWNvcmQgQ1JDLTMyIGNoZWNrc3VtICR7Y2VudHJhbFJlY29yZC5jcmMzMn0gbXVzdCBtYXRjaCBsb2NhbCBjaGVja3N1bSAke2xvY2FsUmVjb3JkLmNyYzMyfWApO1xuXG5jaGVjayhcbmNlbnRyYWxSZWNvcmQuY29tcHJlc3NlZExlbmd0aD09PWxvY2FsUmVjb3JkLmNvbXByZXNzZWRMZW5ndGgsXG4gYENlbnRyYWwgcmVjb3JkIGNvbXByZXNzZWQgc2l6ZSAke2NlbnRyYWxSZWNvcmQuY29tcHJlc3NlZExlbmd0aH0gbXVzdCBtYXRjaCBsb2NhbCAke2xvY2FsUmVjb3JkLmNvbXByZXNzZWRMZW5ndGh9YCk7XG5cbmNoZWNrKFxuY2VudHJhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGg9PT1sb2NhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGgsXG4gYENlbnRyYWwgcmVjb3JkIHVuY29tcHJlc3NlZCBzaXplICR7Y2VudHJhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGh9IG11c3QgbWF0Y2ggbG9jYWwgJHtsb2NhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGh9YCk7XG5cblxuY29uc3QgY2hlY2tzdW09Y3JjMzIobG9jYWxSZWNvcmQuY29udGVudCk7XG5jaGVjayhcbmNoZWNrc3VtPT09bG9jYWxSZWNvcmQuY3JjMzIsXG4gYENSQy0zMiBjaGVja3N1bSBtaXNtYXRjaCwgd2FudGVkICR7bG9jYWxSZWNvcmQuY3JjMzJ9IGJ1dCBhY3R1YWwgY29udGVudCBpcyAke2NoZWNrc3VtfWApO1xuXG4gfVxuXG4vKlxuXG4gKi9cbmZ1bmN0aW9uIG1vZGVGb3JFeHRlcm5hbEF0dHJpYnV0ZXMoZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyl7XG5yZXR1cm4gZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz4+MTYmMHhmZmZmO1xuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gcmVjb3JkVG9GaWxlKGNlbnRyYWxSZWNvcmQsbG9jYWxSZWNvcmQpe1xuY29uc3QgbW9kZT1tb2RlRm9yRXh0ZXJuYWxBdHRyaWJ1dGVzKGNlbnRyYWxSZWNvcmQuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyk7XG5yZXR1cm57XG5uYW1lOmNlbnRyYWxSZWNvcmQubmFtZSxcbm1vZGUsXG5kYXRlOmNlbnRyYWxSZWNvcmQuZGF0ZSxcbmNyYzMyOmNlbnRyYWxSZWNvcmQuY3JjMzIsXG5jb21wcmVzc2lvbk1ldGhvZDpjZW50cmFsUmVjb3JkLmNvbXByZXNzaW9uTWV0aG9kLFxuY29tcHJlc3NlZExlbmd0aDpjZW50cmFsUmVjb3JkLmNvbXByZXNzZWRMZW5ndGgsXG51bmNvbXByZXNzZWRMZW5ndGg6Y2VudHJhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGgsXG5jb250ZW50OmxvY2FsUmVjb3JkLmNvbnRlbnQsXG5jb21tZW50OmNlbnRyYWxSZWNvcmQuY29tbWVudH07XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBkZWNvbXByZXNzRmlsZShmaWxlKXtcbmlmKGZpbGUuY29tcHJlc3Npb25NZXRob2QhPT1jb21wcmVzc2lvbi5TVE9SRSl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGZpbmQgZGVjb21wcmVzc29yIGZvciBjb21wcmVzc2lvbiBtZXRob2QgJHtxKFxuZmlsZS5jb21wcmVzc2lvbk1ldGhvZClcbiB9IGZvciBmaWxlICR7ZmlsZS5uYW1lfWApO1xuXG4gfVxucmV0dXJue1xubmFtZTpmaWxlLm5hbWUsXG5tb2RlOmZpbGUubW9kZSxcbmRhdGU6ZmlsZS5kYXRlLFxuY29udGVudDpmaWxlLmNvbnRlbnQsXG5jb21tZW50OmZpbGUuY29tbWVudH07XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBkZWNvZGVGaWxlKGZpbGUpe1xuY29uc3QgbmFtZT10ZXh0RGVjb2Rlci5kZWNvZGUoZmlsZS5uYW1lKTtcbmNvbnN0IGNvbW1lbnQ9dGV4dERlY29kZXIuZGVjb2RlKGZpbGUuY29tbWVudCk7XG5yZXR1cm57XG5uYW1lLFxudHlwZTonZmlsZScsXG5tb2RlOmZpbGUubW9kZSYwbzc3NyxcbmRhdGU6ZmlsZS5kYXRlLFxuY29udGVudDpmaWxlLmNvbnRlbnQsXG5jb21tZW50fTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByZWFkWmlwKHJlYWRlcixuYW1lPSc8dW5rbm93bj4nKXtcbmNvbnN0IGxvY2F0b3I9cmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeVJlY29yZChyZWFkZXIpO1xuY29uc3QgY2VudHJhbFJlY29yZHM9cmVhZENlbnRyYWxEaXJlY3RvcnkocmVhZGVyLGxvY2F0b3IpO1xuY29uc3QgbG9jYWxSZWNvcmRzPXJlYWRMb2NhbEZpbGVzKHJlYWRlcixjZW50cmFsUmVjb3Jkcyk7XG5jb25zdCBmaWxlcz1uZXcgTWFwKCk7XG5cbmZvcihsZXQgaT0wO2k8Y2VudHJhbFJlY29yZHMubGVuZ3RoO2krPTEpe1xuY29uc3QgY2VudHJhbFJlY29yZD1jZW50cmFsUmVjb3Jkc1tpXTtcbmNvbnN0IGxvY2FsUmVjb3JkPWxvY2FsUmVjb3Jkc1tpXTtcblxuY2hlY2tSZWNvcmRzKGNlbnRyYWxSZWNvcmQsbG9jYWxSZWNvcmQsbmFtZSk7XG5cbmlmKGlzRW5jcnlwdGVkKGNlbnRyYWxSZWNvcmQuYml0RmxhZykpe1xudGhyb3cgRXJyb3IoJ0VuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQnKTtcbiB9XG5cbmNvbnN0IGlzRGlyPShjZW50cmFsUmVjb3JkLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMmMHgwMDEwKSE9PTA7XG5pZighaXNEaXIpe1xuY29uc3QgY29tcHJlc3NlZEZpbGU9cmVjb3JkVG9GaWxlKGNlbnRyYWxSZWNvcmQsbG9jYWxSZWNvcmQpO1xuY29uc3QgZGVjb21wcmVzc2VkRmlsZT1kZWNvbXByZXNzRmlsZShjb21wcmVzc2VkRmlsZSk7XG5jb25zdCBkZWNvZGVkRmlsZT1kZWNvZGVGaWxlKGRlY29tcHJlc3NlZEZpbGUpO1xuZmlsZXMuc2V0KGRlY29kZWRGaWxlLm5hbWUsZGVjb2RlZEZpbGUpO1xuIH1cbi8vXG4gfVxucmV0dXJuIGZpbGVzO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlYWRaaXAiOlsicmVhZFppcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACTyk3ZhRQAAIUUAAAlAAAAQGVuZG8vemlwLXYxLjAuOC9zcmMvZm9ybWF0LXdyaXRlci5qc3siaW1wb3J0cyI6WyIuL2NyYzMyLmpzIiwiLi9zaWduYXR1cmUuanMiLCIuL2NvbXByZXNzaW9uLmpzIl0sImV4cG9ydHMiOlsid3JpdGVaaXAiLCJ3cml0ZVppcFJlY29yZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgY3JjMzIsc2lnbmF0dXJlLGNvbXByZXNzaW9uOyRozY9faW1wb3J0cyhbW1wiLi9jcmMzMi5qc1wiLCBbW1wiY3JjMzJcIiwgWyRozY9fYSA9PiAoY3JjMzIgPSAkaM2PX2EpXV1dXSxbXCIuL3NpZ25hdHVyZS5qc1wiLCBbW1wiKlwiLCBbJGjNj19hID0+IChzaWduYXR1cmUgPSAkaM2PX2EpXV1dXSxbXCIuL2NvbXByZXNzaW9uLmpzXCIsIFtbXCIqXCIsIFskaM2PX2EgPT4gKGNvbXByZXNzaW9uID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkod3JpdGVaaXBSZWNvcmRzLCAnbmFtZScsIHt2YWx1ZTogXCJ3cml0ZVppcFJlY29yZHNcIn0pOyRozY9fb25jZS53cml0ZVppcFJlY29yZHMod3JpdGVaaXBSZWNvcmRzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkod3JpdGVaaXAsICduYW1lJywge3ZhbHVlOiBcIndyaXRlWmlwXCJ9KTskaM2PX29uY2Uud3JpdGVaaXAod3JpdGVaaXApOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3QgVU5JWD0zO1xuY29uc3QgVU5JWF9WRVJTSU9OPTMwO1xuXG5jb25zdCB0ZXh0RW5jb2Rlcj1uZXcgVGV4dEVuY29kZXIoKTtcblxuLypcblxuXG5cblxuICovXG5mdW5jdGlvbiB3cml0ZURvc0RhdGVUaW1lKHdyaXRlcixkYXRlKXtcbmNvbnN0IGRvc1RpbWU9XG5kYXRlIT09dW5kZWZpbmVkJiZkYXRlIT09bnVsbD9cbihkYXRlLmdldFVUQ0Z1bGxZZWFyKCktMTk4MCYweDdmKTw8MjV8Ly9cbmRhdGUuZ2V0VVRDTW9udGgoKSsxPDwyMXwvL1xuZGF0ZS5nZXRVVENEYXRlKCk8PDE2fC8vXG5kYXRlLmdldFVUQ0hvdXJzKCk8PDExfC8vXG5kYXRlLmdldFVUQ01pbnV0ZXMoKTw8NXwvL1xuZGF0ZS5nZXRVVENTZWNvbmRzKCk+PjEvL1xuOjA7Ly9cbndyaXRlci53cml0ZVVpbnQzMihkb3NUaW1lLHRydWUpO1xuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gd3JpdGVGaWxlKHdyaXRlcixmaWxlKXtcbi8vXG5jb25zdCBmaWxlU3RhcnQ9d3JpdGVyLmluZGV4O1xud3JpdGVyLndyaXRlKHNpZ25hdHVyZS5MT0NBTF9GSUxFX0hFQURFUik7XG5jb25zdCBoZWFkZXJTdGFydD13cml0ZXIuaW5kZXg7XG4vL1xud3JpdGVyLndyaXRlVWludDE2KDEwLHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGZpbGUuYml0RmxhZyx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLmNvbXByZXNzaW9uTWV0aG9kLHRydWUpO1xud3JpdGVEb3NEYXRlVGltZSh3cml0ZXIsZmlsZS5kYXRlKTtcbndyaXRlci53cml0ZVVpbnQzMihmaWxlLmNyYzMyLHRydWUpO1xud3JpdGVyLndyaXRlVWludDMyKGZpbGUuY29tcHJlc3NlZExlbmd0aCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQzMihmaWxlLnVuY29tcHJlc3NlZExlbmd0aCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLm5hbWUubGVuZ3RoLHRydWUpO1xuY29uc3QgaGVhZGVyRW5kPXdyaXRlci5sZW5ndGg7XG5cbi8vXG53cml0ZXIud3JpdGVVaW50MTYoMCx0cnVlKTtcbndyaXRlci53cml0ZShmaWxlLm5hbWUpO1xuLy9cbndyaXRlci53cml0ZShmaWxlLmNvbnRlbnQpO1xuXG5yZXR1cm57XG5maWxlU3RhcnQsXG5oZWFkZXJTdGFydCxcbmhlYWRlckVuZH07XG5cbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlQ2VudHJhbEZpbGVIZWFkZXIod3JpdGVyLGZpbGUsbG9jYXRvcil7XG53cml0ZXIud3JpdGUoc2lnbmF0dXJlLkNFTlRSQUxfRklMRV9IRUFERVIpO1xud3JpdGVyLndyaXRlVWludDgoZmlsZS52ZXJzaW9uKTtcbndyaXRlci53cml0ZVVpbnQ4KGZpbGUubWFkZUJ5KTtcbndyaXRlci53cml0ZUNvcHkobG9jYXRvci5oZWFkZXJTdGFydCxsb2NhdG9yLmhlYWRlckVuZCk7XG4vL1xud3JpdGVyLndyaXRlVWludDE2KDAsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZmlsZS5jb21tZW50Lmxlbmd0aCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLmRpc2tOdW1iZXJTdGFydCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLmludGVybmFsRmlsZUF0dHJpYnV0ZXMsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MzIoZmlsZS5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzLHRydWUpO1xud3JpdGVyLndyaXRlVWludDMyKGxvY2F0b3IuZmlsZVN0YXJ0LHRydWUpO1xud3JpdGVyLndyaXRlKGZpbGUuY2VudHJhbE5hbWUpO1xuLy9cbndyaXRlci53cml0ZShmaWxlLmNvbW1lbnQpO1xuIH1cblxuLypcblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlRW5kT2ZDZW50cmFsRGlyZWN0b3J5UmVjb3JkKFxud3JpdGVyLFxuZW50cmllc0NvdW50LFxuY2VudHJhbERpcmVjdG9yeVN0YXJ0LFxuY2VudHJhbERpcmVjdG9yeUxlbmd0aCxcbmNvbW1lbnRCeXRlcylcbntcbndyaXRlci53cml0ZShzaWduYXR1cmUuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtcbndyaXRlci53cml0ZVVpbnQxNigwLHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KDAsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZW50cmllc0NvdW50LHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGVudHJpZXNDb3VudCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQzMihjZW50cmFsRGlyZWN0b3J5TGVuZ3RoLHRydWUpO1xud3JpdGVyLndyaXRlVWludDMyKGNlbnRyYWxEaXJlY3RvcnlTdGFydCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihjb21tZW50Qnl0ZXMubGVuZ3RoLHRydWUpO1xud3JpdGVyLndyaXRlKGNvbW1lbnRCeXRlcyk7XG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgd3JpdGVaaXBSZWNvcmRzKHdyaXRlcixyZWNvcmRzLGNvbW1lbnQ9Jycpe1xuLy9cbmNvbnN0IGxvY2F0b3JzPVtdO1xuZm9yKGxldCBpPTA7aTxyZWNvcmRzLmxlbmd0aDtpKz0xKXtcbmxvY2F0b3JzLnB1c2god3JpdGVGaWxlKHdyaXRlcixyZWNvcmRzW2ldKSk7XG4gfVxuXG4vL1xuY29uc3QgY2VudHJhbERpcmVjdG9yeVN0YXJ0PXdyaXRlci5pbmRleDtcbmZvcihsZXQgaT0wO2k8bG9jYXRvcnMubGVuZ3RoO2krPTEpe1xud3JpdGVDZW50cmFsRmlsZUhlYWRlcih3cml0ZXIscmVjb3Jkc1tpXSxsb2NhdG9yc1tpXSk7XG4gfVxuY29uc3QgY2VudHJhbERpcmVjdG9yeUxlbmd0aD13cml0ZXIuaW5kZXgtY2VudHJhbERpcmVjdG9yeVN0YXJ0O1xuXG5jb25zdCBjb21tZW50Qnl0ZXM9dGV4dEVuY29kZXIuZW5jb2RlKGNvbW1lbnQpO1xuXG4vL1xud3JpdGVFbmRPZkNlbnRyYWxEaXJlY3RvcnlSZWNvcmQoXG53cml0ZXIsXG5yZWNvcmRzLmxlbmd0aCxcbmNlbnRyYWxEaXJlY3RvcnlTdGFydCxcbmNlbnRyYWxEaXJlY3RvcnlMZW5ndGgsXG5jb21tZW50Qnl0ZXMpO1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlRmlsZShmaWxlKXtcbmNvbnN0IG5hbWU9dGV4dEVuY29kZXIuZW5jb2RlKGZpbGUubmFtZS5yZXBsYWNlKC9cXFxcL2csJy8nKSk7XG5jb25zdCBjb21tZW50PXRleHRFbmNvZGVyLmVuY29kZShmaWxlLmNvbW1lbnQpO1xucmV0dXJue1xubmFtZSxcbm1vZGU6ZmlsZS5tb2RlLFxuZGF0ZTpmaWxlLmRhdGUsXG5jb250ZW50OmZpbGUuY29udGVudCxcbmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gY29tcHJlc3NGaWxlV2l0aFN0b3JlKGZpbGUpe1xucmV0dXJue1xubmFtZTpmaWxlLm5hbWUsXG5tb2RlOmZpbGUubW9kZSxcbmRhdGU6ZmlsZS5kYXRlLFxuY3JjMzI6Y3JjMzIoZmlsZS5jb250ZW50KSxcbmNvbXByZXNzaW9uTWV0aG9kOmNvbXByZXNzaW9uLlNUT1JFLFxuY29tcHJlc3NlZExlbmd0aDpmaWxlLmNvbnRlbnQubGVuZ3RoLFxudW5jb21wcmVzc2VkTGVuZ3RoOmZpbGUuY29udGVudC5sZW5ndGgsXG5jb250ZW50OmZpbGUuY29udGVudCxcbmNvbW1lbnQ6ZmlsZS5jb21tZW50fTtcblxuIH1cblxuLypcblxuXG5cblxuICovXG5mdW5jdGlvbiBleHRlcm5hbEZpbGVBdHRyaWJ1dGVzKG1vZGUpe1xucmV0dXJuKG1vZGUmMG83Nzd8MG8xMDAwMDApPDwxNjtcbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIG1ha2VGaWxlUmVjb3JkKGZpbGUpe1xucmV0dXJue1xubmFtZTpmaWxlLm5hbWUsXG5jZW50cmFsTmFtZTpmaWxlLm5hbWUsXG5tYWRlQnk6VU5JWCxcbnZlcnNpb246VU5JWF9WRVJTSU9OLFxudmVyc2lvbk5lZWRlZDowLC8vXG5iaXRGbGFnOjAsXG5jb21wcmVzc2lvbk1ldGhvZDpjb21wcmVzc2lvbi5TVE9SRSxcbmRhdGU6ZmlsZS5kYXRlLFxuY3JjMzI6ZmlsZS5jcmMzMixcbmNvbXByZXNzZWRMZW5ndGg6ZmlsZS5jb21wcmVzc2VkTGVuZ3RoLFxudW5jb21wcmVzc2VkTGVuZ3RoOmZpbGUudW5jb21wcmVzc2VkTGVuZ3RoLFxuZGlza051bWJlclN0YXJ0OjAsXG5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzOjAsXG5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzOmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMoZmlsZS5tb2RlKSxcbmNvbW1lbnQ6ZmlsZS5jb21tZW50LFxuY29udGVudDpmaWxlLmNvbnRlbnR9O1xuXG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgd3JpdGVaaXAod3JpdGVyLGZpbGVzLGNvbW1lbnQ9Jycpe1xuY29uc3QgZW5jb2RlZEZpbGVzPWZpbGVzLm1hcChlbmNvZGVGaWxlKTtcbmNvbnN0IGNvbXByZXNzZWRGaWxlcz1lbmNvZGVkRmlsZXMubWFwKGNvbXByZXNzRmlsZVdpdGhTdG9yZSk7XG4vL1xuY29uc3QgZmlsZVJlY29yZHM9Y29tcHJlc3NlZEZpbGVzLm1hcChtYWtlRmlsZVJlY29yZCk7XG53cml0ZVppcFJlY29yZHMod3JpdGVyLGZpbGVSZWNvcmRzLGNvbW1lbnQpO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IndyaXRlWmlwUmVjb3JkcyI6WyJ3cml0ZVppcFJlY29yZHMiXSwid3JpdGVaaXAiOlsid3JpdGVaaXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0fQWEvoFAAD6BQAAHgAAAEBlbmRvL3ppcC12MS4wLjgvc3JjL3JlYWRlci5qc3siaW1wb3J0cyI6WyIuL2J1ZmZlci1yZWFkZXIuanMiLCIuL2Zvcm1hdC1yZWFkZXIuanMiXSwiZXhwb3J0cyI6WyJaaXBSZWFkZXIiLCJyZWFkWmlwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEJ1ZmZlclJlYWRlcixyZWFkWmlwRm9ybWF0OyRozY9faW1wb3J0cyhbW1wiLi9idWZmZXItcmVhZGVyLmpzXCIsIFtbXCJCdWZmZXJSZWFkZXJcIiwgWyRozY9fYSA9PiAoQnVmZmVyUmVhZGVyID0gJGjNj19hKV1dXV0sW1wiLi9mb3JtYXQtcmVhZGVyLmpzXCIsIFtbXCJyZWFkWmlwXCIsIFskaM2PX2EgPT4gKHJlYWRaaXBGb3JtYXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jbGFzcyAgICAgICAgWmlwUmVhZGVye1xuLypcblxuXG5cbiAgICovXG4gICAgICAgICAgIGNvbnN0cnVjdG9yKGRhdGEsb3B0aW9ucz17fSl7XG5jb25zdHtuYW1lPSc8dW5rbm93bj4nfT1vcHRpb25zO1xuY29uc3QgcmVhZGVyPW5ldyBCdWZmZXJSZWFkZXIoZGF0YSk7XG50aGlzLmZpbGVzPXJlYWRaaXBGb3JtYXQocmVhZGVyKTtcbnRoaXMubmFtZT1uYW1lO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgIHJlYWQobmFtZSl7XG5jb25zdCBmaWxlPXRoaXMuZmlsZXMuZ2V0KG5hbWUpO1xuaWYoZmlsZT09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvciggYENhbm5vdCBmaW5kIGZpbGUgJHtuYW1lfSBpbiBaaXAgZmlsZSAke3RoaXMubmFtZX1gKTtcbiB9XG5yZXR1cm4gZmlsZS5jb250ZW50O1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgIHN0YXQobmFtZSl7XG5jb25zdCBmaWxlPXRoaXMuZmlsZXMuZ2V0KG5hbWUpO1xuaWYoZmlsZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbnJldHVybntcbnR5cGU6ZmlsZS50eXBlLFxubW9kZTpmaWxlLm1vZGUsXG5kYXRlOmZpbGUuZGF0ZSxcbmNvbW1lbnQ6ZmlsZS5jb21tZW50fTtcblxuIH19XG5cblxuLypcblxuXG5cbiAqLyRozY9fb25jZS4gWmlwUmVhZGVyKFppcFJlYWRlcik7XG5jb25zdCAgICAgICAgcmVhZFppcD1hc3luYyhkYXRhLGxvY2F0aW9uKT0+e1xuY29uc3QgcmVhZGVyPW5ldyBaaXBSZWFkZXIoZGF0YSx7bmFtZTpsb2NhdGlvbn0pO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWFkPWFzeW5jKHBhdGgpPT5yZWFkZXIucmVhZChwYXRoKTtcbnJldHVybntyZWFkfTtcbiB9OyRozY9fb25jZS5yZWFkWmlwKHJlYWRaaXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiWmlwUmVhZGVyIjpbIlppcFJlYWRlciJdLCJyZWFkWmlwIjpbInJlYWRaaXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA7N6vPoYGAACGBgAAIQAAAEBlbmRvL3ppcC12MS4wLjgvc3JjL3NpZ25hdHVyZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIiwiQ0VOVFJBTF9GSUxFX0hFQURFUiIsIkRBVEFfREVTQ1JJUFRPUiIsIkxPQ0FMX0ZJTEVfSEVBREVSIiwiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIiwiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiB1KHN0cmluZyl7XG5jb25zdCBhcnJheT1uZXcgVWludDhBcnJheShzdHJpbmcubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8c3RyaW5nLmxlbmd0aDtpKz0xKXtcbmFycmF5W2ldPXN0cmluZy5jaGFyQ29kZUF0KGkpJjB4ZmY7XG4gfVxucmV0dXJuIGFycmF5O1xuIH1cblxuY29uc3QgICAgICAgIExPQ0FMX0ZJTEVfSEVBREVSPXUoJ1BLXFx4MDNcXHgwNCcpOyRozY9fb25jZS5MT0NBTF9GSUxFX0hFQURFUihMT0NBTF9GSUxFX0hFQURFUik7XG5jb25zdCAgICAgICAgQ0VOVFJBTF9GSUxFX0hFQURFUj11KCdQS1xceDAxXFx4MDInKTskaM2PX29uY2UuQ0VOVFJBTF9GSUxFX0hFQURFUihDRU5UUkFMX0ZJTEVfSEVBREVSKTtcbmNvbnN0ICAgICAgICBDRU5UUkFMX0RJUkVDVE9SWV9FTkQ9dSgnUEtcXHgwNVxceDA2Jyk7JGjNj19vbmNlLkNFTlRSQUxfRElSRUNUT1JZX0VORChDRU5UUkFMX0RJUkVDVE9SWV9FTkQpO1xuY29uc3QgICAgICAgIFpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9dSgnUEtcXHgwNlxceDA3Jyk7JGjNj19vbmNlLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IoWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUik7XG5jb25zdCAgICAgICAgWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPXUoJ1BLXFx4MDZcXHgwNicpOyRozY9fb25jZS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQoWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtcbmNvbnN0ICAgICAgICBEQVRBX0RFU0NSSVBUT1I9dSgnUEtcXHgwN1xceDA4Jyk7JGjNj19vbmNlLkRBVEFfREVTQ1JJUFRPUihEQVRBX0RFU0NSSVBUT1IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiTE9DQUxfRklMRV9IRUFERVIiOlsiTE9DQUxfRklMRV9IRUFERVIiXSwiQ0VOVFJBTF9GSUxFX0hFQURFUiI6WyJDRU5UUkFMX0ZJTEVfSEVBREVSIl0sIkNFTlRSQUxfRElSRUNUT1JZX0VORCI6WyJDRU5UUkFMX0RJUkVDVE9SWV9FTkQiXSwiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiI6WyJaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SIl0sIlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCI6WyJaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQiXSwiREFUQV9ERVNDUklQVE9SIjpbIkRBVEFfREVTQ1JJUFRPUiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAdAAAAQGVuZG8vemlwLXYxLjAuOC9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJ8lB/FoBgAAaAYAAB4AAABAZW5kby96aXAtdjEuMC44L3NyYy93cml0ZXIuanN7ImltcG9ydHMiOlsiLi9idWZmZXItd3JpdGVyLmpzIiwiLi9mb3JtYXQtd3JpdGVyLmpzIl0sImV4cG9ydHMiOlsiWmlwV3JpdGVyIiwid3JpdGVaaXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQnVmZmVyV3JpdGVyLHdyaXRlWmlwRm9ybWF0OyRozY9faW1wb3J0cyhbW1wiLi9idWZmZXItd3JpdGVyLmpzXCIsIFtbXCJCdWZmZXJXcml0ZXJcIiwgWyRozY9fYSA9PiAoQnVmZmVyV3JpdGVyID0gJGjNj19hKV1dXV0sW1wiLi9mb3JtYXQtd3JpdGVyLmpzXCIsIFtbXCJ3cml0ZVppcFwiLCBbJGjNj19hID0+ICh3cml0ZVppcEZvcm1hdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNsYXNzICAgICAgICBaaXBXcml0ZXJ7XG4vKlxuXG5cblxuICAgKi9cbiAgICAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucz17ZGF0ZTpuZXcgRGF0ZSgpfSl7XG5jb25zdHtkYXRlfT1vcHRpb25zO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnRoaXMuZmlsZXM9bmV3IE1hcCgpO1xudGhpcy5kYXRlPWRhdGU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuICAgICB3cml0ZShuYW1lLGNvbnRlbnQsb3B0aW9ucz17fSl7XG5jb25zdHttb2RlPTBvNjQ0LGRhdGU9dW5kZWZpbmVkLGNvbW1lbnQ9Jyd9PW9wdGlvbnM7XG5pZighY29udGVudCl7XG50aHJvdyBFcnJvciggYFppcFdyaXRlciB3cml0ZSByZXF1aXJlcyBjb250ZW50IGZvciAke25hbWV9YCk7XG4gfVxudGhpcy5maWxlcy5zZXQobmFtZSx7XG5uYW1lLFxubW9kZSxcbmRhdGUsXG5jb250ZW50LFxuY29tbWVudH0pO1xuXG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICBzbmFwc2hvdCgpe1xuY29uc3Qgd3JpdGVyPW5ldyBCdWZmZXJXcml0ZXIoKTtcbndyaXRlWmlwRm9ybWF0KHdyaXRlcixBcnJheS5mcm9tKHRoaXMuZmlsZXMudmFsdWVzKCkpKTtcbnJldHVybiB3cml0ZXIuc3ViYXJyYXkoKTtcbiB9fVxuXG5cbi8qXG5cbiAqLyRozY9fb25jZS4gWmlwV3JpdGVyKFppcFdyaXRlcik7XG5jb25zdCAgICAgICAgd3JpdGVaaXA9KCk9PntcbmNvbnN0IHdyaXRlcj1uZXcgWmlwV3JpdGVyKCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3cml0ZT1hc3luYyhwYXRoLGRhdGEpPT57XG53cml0ZXIud3JpdGUocGF0aCxkYXRhKTtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc25hcHNob3Q9YXN5bmMoKT0+d3JpdGVyLnNuYXBzaG90KCk7XG5yZXR1cm57d3JpdGUsc25hcHNob3R9O1xuIH07JGjNj19vbmNlLndyaXRlWmlwKHdyaXRlWmlwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlppcFdyaXRlciI6WyJaaXBXcml0ZXIiXSwid3JpdGVaaXAiOlsid3JpdGVaaXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAQIeAwoAAAAAAAAAAAC2yVXQSs8AAErPAAAUAAAAAAAAAAAAAACkgQAAAABjb21wYXJ0bWVudC1tYXAuanNvblBLAQIeAwoAAAAAAAAAAAAuHORicwQAAHMEAAApAAAAAAAAAAAAAACkgXzPAABAYWdvcmljL3NwYXduZXItdjAuNi44L3NyYy92YXQtc3Bhd25lZC5qc1BLAQIeAwoAAAAAAAAAAACB6R2zYQIAAGECAAAbAAAAAAAAAAAAAACkgTbUAABAZW5kby9iYXNlNjQtdjEuMC44L2F0b2IuanNQSwECHgMKAAAAAAAAAAAAJlRd5gEDAAABAwAAGwAAAAAAAAAAAAAApIHQ1gAAQGVuZG8vYmFzZTY0LXYxLjAuOC9idG9hLmpzUEsBAh4DCgAAAAAAAAAAAHP6J4+rAQAAqwEAAB0AAAAAAAAAAAAAAKSBCtoAAEBlbmRvL2Jhc2U2NC12MS4wLjgvZGVjb2RlLmpzUEsBAh4DCgAAAAAAAAAAAPf3R0KrAQAAqwEAAB0AAAAAAAAAAAAAAKSB8NsAAEBlbmRvL2Jhc2U2NC12MS4wLjgvZW5jb2RlLmpzUEsBAh4DCgAAAAAAAAAAAGrmdmeWAgAAlgIAABwAAAAAAAAAAAAAAKSB1t0AAEBlbmRvL2Jhc2U2NC12MS4wLjgvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAXXMWJxEDAAARAwAAIQAAAAAAAAAAAAAApIGm4AAAQGVuZG8vYmFzZTY0LXYxLjAuOC9zcmMvY29tbW9uLmpzUEsBAh4DCgAAAAAAAAAAAOBOTL53BwAAdwcAACEAAAAAAAAAAAAAAKSB9uMAAEBlbmRvL2Jhc2U2NC12MS4wLjgvc3JjL2RlY29kZS5qc1BLAQIeAwoAAAAAAAAAAABHC8qpIAYAACAGAAAhAAAAAAAAAAAAAACkgazrAABAZW5kby9iYXNlNjQtdjEuMC44L3NyYy9lbmNvZGUuanNQSwECHgMKAAAAAAAAAAAArVcGfgIDAAACAwAAIQAAAAAAAAAAAAAApIEL8gAAQGVuZG8vY29tbW9uLXYxLjIuNy9vYmplY3QtbWFwLmpzUEsBAh4DCgAAAAAAAAAAAJSGznsaAgAAGgIAADEAAAAAAAAAAAAAAKSBTPUAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvaW1wb3J0LWFyY2hpdmUuanNQSwECHgMKAAAAAAAAAAAAO0XEAN4mAADeJgAANgAAAAAAAAAAAAAApIG19wAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvY29tcGFydG1lbnQtbWFwLmpzUEsBAh4DCgAAAAAAAAAAABVv/m7+AgAA/gIAADAAAAAAAAAAAAAAAKSB5x4BAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL2V4dGVuc2lvbi5qc1BLAQIeAwoAAAAAAAAAAADGTq0CXyUAAF8lAAA6AAAAAAAAAAAAAACkgTMiAQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9pbXBvcnQtYXJjaGl2ZS1saXRlLmpzUEsBAh4DCgAAAAAAAAAAAPmPhH0DBQAAAwUAAD0AAAAAAAAAAAAAAKSB6kcBAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanNQSwECHgMKAAAAAAAAAAAAuLMxViIKAAAiCgAANQAAAAAAAAAAAAAApIFITQEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvaW1wb3J0LWFyY2hpdmUuanNQSwECHgMKAAAAAAAAAAAAzF+IJkg4AABIOAAAMgAAAAAAAAAAAAAApIG9VwEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvaW1wb3J0LWhvb2suanNQSwECHgMKAAAAAAAAAAAAY0+yL/kCAAD5AgAAKwAAAAAAAAAAAAAApIFVkAEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvanNvbi5qc1BLAQIeAwoAAAAAAAAAAABz7dIxFCAAABQgAAArAAAAAAAAAAAAAACkgZeTAQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9saW5rLmpzUEsBAh4DCgAAAAAAAAAAAPyaiyFEEwAARBMAADEAAAAAAAAAAAAAAKSB9LMBAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL21hcC1wYXJzZXIuanNQSwECHgMKAAAAAAAAAAAAxrRh1XkKAAB5CgAAPAAAAAAAAAAAAAAApIGHxwEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzUEsBAh4DCgAAAAAAAAAAAKGEn3WnBAAApwQAADIAAAAAAAAAAAAAAKSBWtIBAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL3BhcnNlLWJ5dGVzLmpzUEsBAh4DCgAAAAAAAAAAAEU9LtwZEQAAGREAAEYAAAAAAAAAAAAAAKSBUdcBAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL3BhcnNlLWNqcy1zaGFyZWQtZXhwb3J0LXdyYXBwZXIuanNQSwECHgMKAAAAAAAAAAAA8Fpe1cAEAADABAAAMQAAAAAAAAAAAAAApIHO6AEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvcGFyc2UtanNvbi5qc1BLAQIeAwoAAAAAAAAAAAA5ARHiFwcAABcHAAA0AAAAAAAAAAAAAACkgd3tAQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9wYXJzZS1wcmUtY2pzLmpzUEsBAh4DCgAAAAAAAAAAAI7p/aEBBQAAAQUAADQAAAAAAAAAAAAAAKSBRvUBAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL3BhcnNlLXByZS1tanMuanNQSwECHgMKAAAAAAAAAAAArXDihH0EAAB9BAAAMQAAAAAAAAAAAAAApIGZ+gEAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjMuMS9zcmMvcGFyc2UtdGV4dC5qc1BLAQIeAwoAAAAAAAAAAADF/csnVRYAAFUWAAA0AAAAAAAAAAAAAACkgWX/AQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9wb2xpY3ktZm9ybWF0LmpzUEsBAh4DCgAAAAAAAAAAAAv3bewPJQAADyUAAC0AAAAAAAAAAAAAAKSBDBYCAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS4zLjEvc3JjL3BvbGljeS5qc1BLAQIeAwoAAAAAAAAAAAAjxMRkTAkAAEwJAAAtAAAAAAAAAAAAAACkgWY7AgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuMy4xL3NyYy9wb3dlcnMuanNQSwECHgMKAAAAAAAAAAAAxRjnOpQBAACUAQAAIQAAAAAAAAAAAAAApIH9RAIAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS43L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJK3R37sDQAA7A0AACsAAAAAAAAAAAAAAKSB0EYCAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNy9zcmMvZW52LW9wdGlvbnMuanNQSwECHgMKAAAAAAAAAAAA/HBpMd8HAADfBwAAHAAAAAAAAAAAAAAApIEFVQIAQGVuZG8vZXJyb3JzLXYxLjIuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAB+XVUrpRAAAKUQAAAjAAAAAAAAAAAAAACkgR5dAgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvRS5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAApAAAAAAAAAAAAAACkgQRuAgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAAAQIOOsqgwAAKoMAAAnAAAAAAAAAAAAAACkgZVvAgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNy9zcmMvbG9jYWwuanNQSwECHgMKAAAAAAAAAAAAAY5wTOkMAADpDAAANQAAAAAAAAAAAAAApIGEfAIAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanNQSwECHgMKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAAAAAAAAAAAApIHAiQIAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL25vLXNoaW0uanNQSwECHgMKAAAAAAAAAAAAhqimx18JAABfCQAALQAAAAAAAAAAAAAApIE6jQIAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjcvc3JjL3RyYWNrLXR1cm5zLmpzUEsBAh4DCgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAAAAAAAAAAAAAKSB5JYCAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi43L3V0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAGnwGZ8zCgAAMwoAADUAAAAAAAAAAAAAAKSBe5kCAEBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4xL3NyYy9jb21wYXJ0bWVudC13cmFwcGVyLmpzUEsBAh4DCgAAAAAAAAAAABzGkF4jDAAAIwwAACcAAAAAAAAAAAAAAKSBAaQCAEBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMy4xL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAC4gWnwdAcAAHQHAAAdAAAAAAAAAAAAAACkgWmwAgBAZW5kby9tYXJzaGFsLXYxLjYuMS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADXbFulWUMAAFlDAAAqAAAAAAAAAAAAAACkgRi4AgBAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvZW5jb2RlUGFzc2FibGUuanNQSwECHgMKAAAAAAAAAAAAX5zwMlIiAABSIgAAKwAAAAAAAAAAAAAApIG5+wIAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc1BLAQIeAwoAAAAAAAAAAAAPShurLiIAAC4iAAAtAAAAAAAAAAAAAACkgVQeAwBAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvZW5jb2RlVG9TbWFsbGNhcHMuanNQSwECHgMKAAAAAAAAAAAARQsy/RAjAAAQIwAAKgAAAAAAAAAAAAAApIHNQAMAQGVuZG8vbWFyc2hhbC12MS42LjEvc3JjL21hcnNoYWwtanVzdGluLmpzUEsBAh4DCgAAAAAAAAAAAEQSpudcBgAAXAYAAC0AAAAAAAAAAAAAAKSBJWQDAEBlbmRvL21hcnNoYWwtdjEuNi4xL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qc1BLAQIeAwoAAAAAAAAAAAApw1JOKicAAConAAAjAAAAAAAAAAAAAACkgcxqAwBAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvbWFyc2hhbC5qc1BLAQIeAwoAAAAAAAAAAAC7402JnCcAAJwnAAAlAAAAAAAAAAAAAACkgTeSAwBAZW5kby9tYXJzaGFsLXYxLjYuMS9zcmMvcmFua09yZGVyLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACEAAAAAAAAAAAAAAKSBFroDAEBlbmRvL21hcnNoYWwtdjEuNi4xL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAABf6k6CWQUAAFkFAAAeAAAAAAAAAAAAAACkgZ+7AwBAZW5kby9uYXQtdjUuMC4xMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAoSmqvD8KAAA/CgAAIAAAAAAAAAAAAAAApIE0wQMAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAl6i/JVQGAABUBgAAKAAAAAAAAAAAAAAApIGxywMAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL2NvcHlBcnJheS5qc1BLAQIeAwoAAAAAAAAAAAAyz0q1KQgAACkIAAApAAAAAAAAAAAAAACkgUvSAwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvY29weVJlY29yZC5qc1BLAQIeAwoAAAAAAAAAAABwIuV6VgoAAFYKAAAuAAAAAAAAAAAAAACkgbvaAwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzUEsBAh4DCgAAAAAAAAAAAEObiqg0EgAANBIAACQAAAAAAAAAAAAAAKSBXeUDAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9lcnJvci5qc1BLAQIeAwoAAAAAAAAAAABBT/xPjwUAAI8FAAArAAAAAAAAAAAAAACkgdP3AwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvaXRlci1oZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAGTP4m9BEQAAQREAACcAAAAAAAAAAAAAAKSBq/0DAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9tYWtlLWZhci5qc1BLAQIeAwoAAAAAAAAAAAAr0aC/gAQAAIAEAAApAAAAAAAAAAAAAACkgTEPBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvbWFrZVRhZ2dlZC5qc1BLAQIeAwoAAAAAAAAAAAANIpJ3FBUAABQVAAAwAAAAAAAAAAAAAACkgfgTBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAFAxNfrAkAACwJAAAKgAAAAAAAAAAAAAApIFaKQQAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3Bhc3NTdHlsZU9mLmpzUEsBAh4DCgAAAAAAAAAAAFKEe3qmFwAAphcAACgAAAAAAAAAAAAAAKSBUk4EAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9yZW1vdGFibGUuanNQSwECHgMKAAAAAAAAAAAAxRgAzIYMAACGDAAAKwAAAAAAAAAAAAAApIE+ZgQAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3NhZmUtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAACYl18ssgcAALIHAAAlAAAAAAAAAAAAAACkgQ1zBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvc3RyaW5nLmpzUEsBAh4DCgAAAAAAAAAAAGY/WZX8CQAA/AkAACUAAAAAAAAAAAAAAKSBAnsEAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC42L3NyYy9zeW1ib2wuanNQSwECHgMKAAAAAAAAAAAAYNVjnhQHAAAUBwAAJQAAAAAAAAAAAAAApIFBhQQAQGVuZG8vcGFzcy1zdHlsZS12MS40LjYvc3JjL3RhZ2dlZC5qc1BLAQIeAwoAAAAAAAAAAAAOvwkt/ggAAP4IAAApAAAAAAAAAAAAAACkgZiMBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAkAAAAAAAAAAAAAACkgd2VBABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNi9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAA0gGixEIGAABCBgAAIQAAAAAAAAAAAAAApIFplwQAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS43L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAALNdW0ZVAgAAVQIAACoAAAAAAAAAAAAAAKSB6p0EAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvaXMtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAAD6ZvCRnAcAAJwHAAApAAAAAAAAAAAAAACkgYegBABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL21lbW8tcmFjZS5qc1BLAQIeAwoAAAAAAAAAAACcbcSyfAUAAHwFAAA0AAAAAAAAAAAAAACkgWqoBABAZW5kby9wcm9taXNlLWtpdC12MS4xLjcvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACUAAAAAAAAAAAAAAKSBOK4EAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAKhDskZEBAACRAQAAIAAAAAAAAAAAAAAApIHFrwQAQGVuZG8vdHJhbXBvbGluZS12MS4wLjIvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA8mi5oCAHAAAgBwAAKQAAAAAAAAAAAAAApIGUsQQAQGVuZG8vdHJhbXBvbGluZS12MS4wLjIvc3JjL3RyYW1wb2xpbmUuanNQSwECHgMKAAAAAAAAAAAA1wBPs4wCAACMAgAAGQAAAAAAAAAAAAAApIH7uAQAQGVuZG8vemlwLXYxLjAuOC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABkqpIDQhIAAEISAAAlAAAAAAAAAAAAAACkgb67BABAZW5kby96aXAtdjEuMC44L3NyYy9idWZmZXItcmVhZGVyLmpzUEsBAh4DCgAAAAAAAAAAADkSlZBCDgAAQg4AACUAAAAAAAAAAAAAAKSBQ84EAEBlbmRvL3ppcC12MS4wLjgvc3JjL2J1ZmZlci13cml0ZXIuanNQSwECHgMKAAAAAAAAAAAAsLLlbJgBAACYAQAAIwAAAAAAAAAAAAAApIHI3AQAQGVuZG8vemlwLXYxLjAuOC9zcmMvY29tcHJlc3Npb24uanNQSwECHgMKAAAAAAAAAAAAd7ixdawDAACsAwAAHQAAAAAAAAAAAAAApIGh3gQAQGVuZG8vemlwLXYxLjAuOC9zcmMvY3JjMzIuanNQSwECHgMKAAAAAAAAAAAAGi2id9klAADZJQAAJQAAAAAAAAAAAAAApIGI4gQAQGVuZG8vemlwLXYxLjAuOC9zcmMvZm9ybWF0LXJlYWRlci5qc1BLAQIeAwoAAAAAAAAAAACTyk3ZhRQAAIUUAAAlAAAAAAAAAAAAAACkgaQIBQBAZW5kby96aXAtdjEuMC44L3NyYy9mb3JtYXQtd3JpdGVyLmpzUEsBAh4DCgAAAAAAAAAAANH0FhL6BQAA+gUAAB4AAAAAAAAAAAAAAKSBbB0FAEBlbmRvL3ppcC12MS4wLjgvc3JjL3JlYWRlci5qc1BLAQIeAwoAAAAAAAAAAADs3q8+hgYAAIYGAAAhAAAAAAAAAAAAAACkgaIjBQBAZW5kby96aXAtdjEuMC44L3NyYy9zaWduYXR1cmUuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAHQAAAAAAAAAAAAAApIFnKgUAQGVuZG8vemlwLXYxLjAuOC9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAnyUH8WgGAABoBgAAHgAAAAAAAAAAAAAApIHsKwUAQGVuZG8vemlwLXYxLjAuOC9zcmMvd3JpdGVyLmpzUEsFBgAAAABYAFgAqx0AAJAyBQAAAA==","endoZipBase64Sha512":"5d7f9dc3d40eaa556bad0b7a083e66f732c074f37ab2a0cf5b98deb10e0be1c1c5044b5289d5311282ee2b0e20216d060f75e33e4dfe4ffc8e465e93887c33a3"};
|