From 6ee0c168ba9b82f055ae9efa825a32bcef02e764 Mon Sep 17 00:00:00 2001 From: Brock Allen Date: Mon, 16 Dec 2019 09:14:33 -0500 Subject: [PATCH] 1.10.0 --- dist/oidc-client.d.ts | 10 +++++----- dist/oidc-client.js | 25 ++++++++++++++++++++++--- dist/oidc-client.min.js | 4 ++-- dist/oidc-client.rsa256.slim.js | 25 ++++++++++++++++++++++--- dist/oidc-client.rsa256.slim.min.js | 4 ++-- dist/oidc-client.slim.js | 25 ++++++++++++++++++++++--- dist/oidc-client.slim.min.js | 4 ++-- lib/oidc-client.js | 25 ++++++++++++++++++++++--- lib/oidc-client.min.js | 4 ++-- lib/oidc-client.rsa256.js | 25 ++++++++++++++++++++++--- lib/oidc-client.rsa256.min.js | 4 ++-- package-lock.json | 2 +- package.json | 2 +- version.js | 2 +- 14 files changed, 128 insertions(+), 33 deletions(-) diff --git a/dist/oidc-client.d.ts b/dist/oidc-client.d.ts index 1bbf3b8b..aa533d0d 100644 --- a/dist/oidc-client.d.ts +++ b/dist/oidc-client.d.ts @@ -38,11 +38,11 @@ export class InMemoryWebStorage { } export class Log { - static readonly NONE: number; - static readonly ERROR: number; - static readonly WARN: number; - static readonly INFO: number; - static readonly DEBUG: number; + static readonly NONE = 0; + static readonly ERROR = 1; + static readonly WARN = 2; + static readonly INFO = 3; + static readonly DEBUG = 4; static reset(): void; diff --git a/dist/oidc-client.js b/dist/oidc-client.js index 7c4ee6f7..89a9dcd9 100644 --- a/dist/oidc-client.js +++ b/dist/oidc-client.js @@ -19449,6 +19449,7 @@ var OidcClient = exports.OidcClient = function () { resource = resource || this._settings.resource; response_mode = response_mode || this._settings.response_mode; extraQueryParams = extraQueryParams || this._settings.extraQueryParams; + extraTokenParams = extraTokenParams || this._settings.extraTokenParams; var authority = this._settings.authority; @@ -19742,7 +19743,9 @@ var OidcClientSettings = exports.OidcClientSettings = function () { _ref$MetadataServiceC = _ref.MetadataServiceCtor, MetadataServiceCtor = _ref$MetadataServiceC === undefined ? _MetadataService.MetadataService : _ref$MetadataServiceC, _ref$extraQueryParams = _ref.extraQueryParams, - extraQueryParams = _ref$extraQueryParams === undefined ? {} : _ref$extraQueryParams; + extraQueryParams = _ref$extraQueryParams === undefined ? {} : _ref$extraQueryParams, + _ref$extraTokenParams = _ref.extraTokenParams, + extraTokenParams = _ref$extraTokenParams === undefined ? {} : _ref$extraTokenParams; _classCallCheck(this, OidcClientSettings); @@ -19777,6 +19780,7 @@ var OidcClientSettings = exports.OidcClientSettings = function () { this._metadataService = new MetadataServiceCtor(this); this._extraQueryParams = (typeof extraQueryParams === 'undefined' ? 'undefined' : _typeof(extraQueryParams)) === 'object' ? extraQueryParams : {}; + this._extraTokenParams = (typeof extraTokenParams === 'undefined' ? 'undefined' : _typeof(extraTokenParams)) === 'object' ? extraTokenParams : {}; } // client config @@ -19969,6 +19973,21 @@ var OidcClientSettings = exports.OidcClientSettings = function () { this._extraQueryParams = {}; } } + + // extra token params + + }, { + key: 'extraTokenParams', + get: function get() { + return this._extraTokenParams; + }, + set: function set(value) { + if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { + this._extraTokenParams = value; + } else { + this._extraTokenParams = {}; + } + } }]); return OidcClientSettings; @@ -23653,7 +23672,7 @@ module.exports = exports['default']; Object.defineProperty(exports, "__esModule", { value: true }); -var Version = "1.10.0-beta.2";exports.Version = Version; +var Version = "1.10.0";exports.Version = Version; /***/ }), @@ -23671,4 +23690,4 @@ module.exports = __webpack_require__(/*! ./index.js */"./index.js"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YUlGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0Vycm9yUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9FdmVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZVdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0luTWVtb3J5V2ViU3RvcmFnZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pvc2VVdGlsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSnNvblNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Mb2cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9NZXRhZGF0YVNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvT2lkY0NsaWVudFNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUG9wdXBOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1JlZGlyZWN0TmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVzcG9uc2VWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TZXNzaW9uTW9uaXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5SZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblN0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbm91dFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWxlbnRSZW5ld1NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TdGF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1RpbWVyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVG9rZW5DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlblJldm9jYXRpb25DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9VcmxVdGlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJJbmZvU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXJFdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlclNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9jcnlwdG8vanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvcmFuZG9tLmpzIiwid2VicGFjazovL09pZGMvLi92ZXJzaW9uLmpzIl0sIm5hbWVzIjpbIlZlcnNpb24iLCJMb2ciLCJPaWRjQ2xpZW50IiwiT2lkY0NsaWVudFNldHRpbmdzIiwiV2ViU3RvcmFnZVN0YXRlU3RvcmUiLCJJbk1lbW9yeVdlYlN0b3JhZ2UiLCJVc2VyTWFuYWdlciIsIkFjY2Vzc1Rva2VuRXZlbnRzIiwiTWV0YWRhdGFTZXJ2aWNlIiwiQ29yZG92YVBvcHVwTmF2aWdhdG9yIiwiQ29yZG92YUlGcmFtZU5hdmlnYXRvciIsIkNoZWNrU2Vzc2lvbklGcmFtZSIsIlRva2VuUmV2b2NhdGlvbkNsaWVudCIsIlNlc3Npb25Nb25pdG9yIiwiR2xvYmFsIiwiVXNlciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIndpbmRvdyIsIllBSE9PIiwidW5kZWZpbmVkIiwibGFuZyIsImV4dGVuZCIsImciLCJoIiwiZiIsIkVycm9yIiwiZCIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIiwic3VwZXJjbGFzcyIsIk9iamVjdCIsImIiLCJlIiwiYyIsInRlc3QiLCJqIiwiaSIsImxlbmd0aCIsImwiLCJrIiwiYSIsIkNyeXB0b0pTIiwibGliIiwiQmFzZSIsIm4iLCJwIiwibyIsIm1peEluIiwiaGFzT3duUHJvcGVydHkiLCJpbml0IiwiJHN1cGVyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjcmVhdGUiLCJ0b1N0cmluZyIsImNsb25lIiwiV29yZEFycmF5Iiwid29yZHMiLCJzaWdCeXRlcyIsInN0cmluZ2lmeSIsImNvbmNhdCIsInQiLCJxIiwicyIsImNsYW1wIiwiciIsImNlaWwiLCJjYWxsIiwic2xpY2UiLCJyYW5kb20iLCJwdXNoIiwibSIsImVuYyIsIkhleCIsImpvaW4iLCJwYXJzZSIsInBhcnNlSW50Iiwic3Vic3RyIiwiTGF0aW4xIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsIlV0ZjgiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0iLCJyZXNldCIsIl9kYXRhIiwiX25EYXRhQnl0ZXMiLCJfYXBwZW5kIiwiX3Byb2Nlc3MiLCJ3IiwieCIsImJsb2NrU2l6ZSIsInYiLCJ1IiwibWF4IiwiX21pbkJ1ZmZlclNpemUiLCJtaW4iLCJfZG9Qcm9jZXNzQmxvY2siLCJzcGxpY2UiLCJIYXNoZXIiLCJjZmciLCJfZG9SZXNldCIsInVwZGF0ZSIsImZpbmFsaXplIiwiX2RvRmluYWxpemUiLCJfY3JlYXRlSGVscGVyIiwiX2NyZWF0ZUhtYWNIZWxwZXIiLCJITUFDIiwiYWxnbyIsIk1hdGgiLCJ4NjQiLCJXb3JkIiwiaGlnaCIsImxvdyIsInRvWDMyIiwiQmFzZTY0IiwiX21hcCIsImNoYXJBdCIsImluZGV4T2YiLCJzcXJ0IiwicG93IiwiU0hBMjU2IiwiX2hhc2giLCJmbG9vciIsIkhtYWNTSEEyNTYiLCJUIiwiZWEiLCJTSEE1MTIiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIlgiLCJLIiwiWSIsIkwiLCJaIiwiTSIsIiQiLCJOIiwiYWEiLCJPIiwiYmEiLCJQIiwiY2EiLCJRIiwieiIsIkEiLCJ5IiwiVSIsIkIiLCJSIiwiQyIsIlMiLCJEIiwiViIsIkUiLCJXIiwiZmEiLCJkYSIsIkhtYWNTSEE1MTIiLCJTSEEzODQiLCJIbWFjU0hBMzg0IiwiYjY0bWFwIiwiYjY0cGFkIiwiaGV4MmI2NCIsInN1YnN0cmluZyIsImI2NHRvaGV4IiwiaW50MmNoYXIiLCJiNjR0b0JBIiwiQXJyYXkiLCJkYml0cyIsImNhbmFyeSIsImpfbG0iLCJCaWdJbnRlZ2VyIiwiZnJvbU51bWJlciIsImZyb21TdHJpbmciLCJuYmkiLCJhbTEiLCJhbTIiLCJhbTMiLCJhcHBOYW1lIiwiYW0iLCJEQiIsIkRNIiwiRFYiLCJCSV9GUCIsIkZWIiwiRjEiLCJGMiIsIkJJX1JNIiwiQklfUkMiLCJyciIsInZ2IiwiaW50QXQiLCJibnBDb3B5VG8iLCJibnBGcm9tSW50IiwibmJ2IiwiZnJvbUludCIsImJucEZyb21TdHJpbmciLCJmcm9tUmFkaXgiLCJaRVJPIiwic3ViVG8iLCJibnBDbGFtcCIsImJuVG9TdHJpbmciLCJuZWdhdGUiLCJ0b1JhZGl4IiwiYm5OZWdhdGUiLCJibkFicyIsImJuQ29tcGFyZVRvIiwibmJpdHMiLCJibkJpdExlbmd0aCIsImJucERMU2hpZnRUbyIsImJucERSU2hpZnRUbyIsImJucExTaGlmdFRvIiwiYm5wUlNoaWZ0VG8iLCJibnBTdWJUbyIsImJucE11bHRpcGx5VG8iLCJhYnMiLCJibnBTcXVhcmVUbyIsImJucERpdlJlbVRvIiwiY29weVRvIiwibFNoaWZ0VG8iLCJkbFNoaWZ0VG8iLCJjb21wYXJlVG8iLCJPTkUiLCJkclNoaWZ0VG8iLCJyU2hpZnRUbyIsImJuTW9kIiwiZGl2UmVtVG8iLCJDbGFzc2ljIiwiY0NvbnZlcnQiLCJtb2QiLCJjUmV2ZXJ0IiwiY1JlZHVjZSIsImNNdWxUbyIsIm11bHRpcGx5VG8iLCJyZWR1Y2UiLCJjU3FyVG8iLCJzcXVhcmVUbyIsImNvbnZlcnQiLCJyZXZlcnQiLCJtdWxUbyIsInNxclRvIiwiYm5wSW52RGlnaXQiLCJNb250Z29tZXJ5IiwibXAiLCJpbnZEaWdpdCIsIm1wbCIsIm1waCIsInVtIiwibXQyIiwibW9udENvbnZlcnQiLCJtb250UmV2ZXJ0IiwibW9udFJlZHVjZSIsIm1vbnRTcXJUbyIsIm1vbnRNdWxUbyIsImJucElzRXZlbiIsImJucEV4cCIsImJuTW9kUG93SW50IiwiaXNFdmVuIiwiZXhwIiwiYml0TGVuZ3RoIiwibW9kUG93SW50IiwiYm5DbG9uZSIsImJuSW50VmFsdWUiLCJibkJ5dGVWYWx1ZSIsImJuU2hvcnRWYWx1ZSIsImJucENodW5rU2l6ZSIsIkxOMiIsImxvZyIsImJuU2lnTnVtIiwiYm5wVG9SYWRpeCIsInNpZ251bSIsImNodW5rU2l6ZSIsImludFZhbHVlIiwiYm5wRnJvbVJhZGl4IiwiZE11bHRpcGx5IiwiZEFkZE9mZnNldCIsImJucEZyb21OdW1iZXIiLCJ0ZXN0Qml0IiwiYml0d2lzZVRvIiwic2hpZnRMZWZ0Iiwib3Bfb3IiLCJpc1Byb2JhYmxlUHJpbWUiLCJuZXh0Qnl0ZXMiLCJiblRvQnl0ZUFycmF5IiwiYm5FcXVhbHMiLCJibk1pbiIsImJuTWF4IiwiYm5wQml0d2lzZVRvIiwib3BfYW5kIiwiYm5BbmQiLCJibk9yIiwib3BfeG9yIiwiYm5Yb3IiLCJvcF9hbmRub3QiLCJibkFuZE5vdCIsImJuTm90IiwiYm5TaGlmdExlZnQiLCJiblNoaWZ0UmlnaHQiLCJsYml0IiwiYm5HZXRMb3dlc3RTZXRCaXQiLCJjYml0IiwiYm5CaXRDb3VudCIsImJuVGVzdEJpdCIsImJucENoYW5nZUJpdCIsImJuU2V0Qml0IiwiY2hhbmdlQml0IiwiYm5DbGVhckJpdCIsImJuRmxpcEJpdCIsImJucEFkZFRvIiwiYm5BZGQiLCJhZGRUbyIsImJuU3VidHJhY3QiLCJibk11bHRpcGx5IiwiYm5TcXVhcmUiLCJibkRpdmlkZSIsImJuUmVtYWluZGVyIiwiYm5EaXZpZGVBbmRSZW1haW5kZXIiLCJibnBETXVsdGlwbHkiLCJibnBEQWRkT2Zmc2V0IiwiTnVsbEV4cCIsIm5Ob3AiLCJuTXVsVG8iLCJuU3FyVG8iLCJiblBvdyIsImJucE11bHRpcGx5TG93ZXJUbyIsImJucE11bHRpcGx5VXBwZXJUbyIsIkJhcnJldHQiLCJyMiIsInEzIiwibXUiLCJkaXZpZGUiLCJiYXJyZXR0Q29udmVydCIsImJhcnJldHRSZXZlcnQiLCJiYXJyZXR0UmVkdWNlIiwibXVsdGlwbHlVcHBlclRvIiwibXVsdGlwbHlMb3dlclRvIiwiYmFycmV0dFNxclRvIiwiYmFycmV0dE11bFRvIiwiYm5Nb2RQb3ciLCJibkdDRCIsImdldExvd2VzdFNldEJpdCIsImJucE1vZEludCIsImJuTW9kSW52ZXJzZSIsInN1YnRyYWN0IiwiYWRkIiwibG93cHJpbWVzIiwibHBsaW0iLCJibklzUHJvYmFibGVQcmltZSIsIm1vZEludCIsIm1pbGxlclJhYmluIiwiYm5wTWlsbGVyUmFiaW4iLCJzaGlmdFJpZ2h0IiwibW9kUG93IiwiYnl0ZVZhbHVlIiwic2hvcnRWYWx1ZSIsInRvQnl0ZUFycmF5IiwiZXF1YWxzIiwiYW5kIiwib3IiLCJ4b3IiLCJhbmROb3QiLCJub3QiLCJiaXRDb3VudCIsInNldEJpdCIsImNsZWFyQml0IiwiZmxpcEJpdCIsIm11bHRpcGx5IiwicmVtYWluZGVyIiwiZGl2aWRlQW5kUmVtYWluZGVyIiwibW9kSW52ZXJzZSIsImdjZCIsInNxdWFyZSIsIkFyY2ZvdXIiLCJBUkM0aW5pdCIsIkFSQzRuZXh0IiwibmV4dCIsInBybmdfbmV3c3RhdGUiLCJybmdfcHNpemUiLCJybmdfc3RhdGUiLCJybmdfcG9vbCIsInJuZ19wcHRyIiwicm5nX3NlZWRfaW50Iiwicm5nX3NlZWRfdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwiY3J5cHRvIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJ1YSIsIlVpbnQ4QXJyYXkiLCJhcHBWZXJzaW9uIiwicm5nX2dldF9ieXRlIiwicm5nX2dldF9ieXRlcyIsIlNlY3VyZVJhbmRvbSIsInBhcnNlQmlnSW50IiwibGluZWJyayIsImJ5dGUySGV4IiwicGtjczFwYWQyIiwib2FlcF9tZ2YxX2FyciIsIm9hZXBfcGFkIiwiS0pVUiIsIk1lc3NhZ2VEaWdlc3QiLCJVdGlsIiwiZ2V0Q2Fub25pY2FsQWxnTmFtZSIsImdldEhhc2hMZW5ndGgiLCJoZXh0b3JzdHIiLCJoYXNoSGV4IiwicnN0cnRvaGV4IiwiUlNBS2V5IiwiZG1wMSIsImRtcTEiLCJjb2VmZiIsIlJTQVNldFB1YmxpYyIsImlzUHVibGljIiwiaXNQcml2YXRlIiwiUlNBRG9QdWJsaWMiLCJSU0FFbmNyeXB0IiwiZG9QdWJsaWMiLCJSU0FFbmNyeXB0T0FFUCIsInNldFB1YmxpYyIsImVuY3J5cHQiLCJlbmNyeXB0T0FFUCIsInR5cGUiLCJFQ0ZpZWxkRWxlbWVudEZwIiwiZmVGcEVxdWFscyIsImZlRnBUb0JpZ0ludGVnZXIiLCJmZUZwTmVnYXRlIiwiZmVGcEFkZCIsInRvQmlnSW50ZWdlciIsImZlRnBTdWJ0cmFjdCIsImZlRnBNdWx0aXBseSIsImZlRnBTcXVhcmUiLCJmZUZwRGl2aWRlIiwiRUNQb2ludEZwIiwiY3VydmUiLCJ6aW52IiwicG9pbnRGcEdldFgiLCJmcm9tQmlnSW50ZWdlciIsInBvaW50RnBHZXRZIiwicG9pbnRGcEVxdWFscyIsImlzSW5maW5pdHkiLCJwb2ludEZwSXNJbmZpbml0eSIsInBvaW50RnBOZWdhdGUiLCJwb2ludEZwQWRkIiwidHdpY2UiLCJnZXRJbmZpbml0eSIsInBvaW50RnBUd2ljZSIsInBvaW50RnBNdWx0aXBseSIsInBvaW50RnBNdWx0aXBseVR3byIsImdldFgiLCJnZXRZIiwibXVsdGlwbHlUd28iLCJFQ0N1cnZlRnAiLCJpbmZpbml0eSIsImN1cnZlRnBHZXRRIiwiY3VydmVGcEdldEEiLCJjdXJ2ZUZwR2V0QiIsImN1cnZlRnBFcXVhbHMiLCJjdXJ2ZUZwR2V0SW5maW5pdHkiLCJjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIiLCJjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgiLCJnZXRRIiwiZ2V0QSIsImdldEIiLCJkZWNvZGVQb2ludEhleCIsImdldEJ5dGVMZW5ndGgiLCJnZXRFbmNvZGVkIiwidG9CeXRlQXJyYXlVbnNpZ25lZCIsInVuc2hpZnQiLCJkZWNvZGVGcm9tIiwiZGVjb2RlRnJvbUhleCIsImFkZDJEIiwidHdpY2UyRCIsInZhbHVlT2YiLCJtdWx0aXBseTJEIiwiaXNPbkN1cnZlIiwidmFsaWRhdGUiLCJqc29uUGFyc2UiLCJSZWdFeHAiLCJtYXRjaCIsInJlcGxhY2UiLCJzaGlmdCIsImFzbjEiLCJBU04xVXRpbCIsImludGVnZXJUb0J5dGVIZXgiLCJiaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleCIsImdldFBFTVN0cmluZ0Zyb21IZXgiLCJoZXh0b3BlbSIsIm5ld09iamVjdCIsIkRFUkJvb2xlYW4iLCJERVJJbnRlZ2VyIiwiREVSQml0U3RyaW5nIiwiREVST2N0ZXRTdHJpbmciLCJERVJOdWxsIiwiREVST2JqZWN0SWRlbnRpZmllciIsIkRFUkVudW1lcmF0ZWQiLCJERVJVVEY4U3RyaW5nIiwiREVSTnVtZXJpY1N0cmluZyIsIkRFUlByaW50YWJsZVN0cmluZyIsIkRFUlRlbGV0ZXhTdHJpbmciLCJERVJJQTVTdHJpbmciLCJERVJVVENUaW1lIiwiREVSR2VuZXJhbGl6ZWRUaW1lIiwiREVSU2VxdWVuY2UiLCJERVJTZXQiLCJERVJUYWdnZWRPYmplY3QiLCJrZXlzIiwiYXJyYXkiLCJ0YWciLCJleHBsaWNpdCIsIm9iaiIsImpzb25Ub0FTTjFIRVgiLCJnZXRFbmNvZGVkSGV4Iiwib2lkSGV4VG9JbnQiLCJvaWRJbnRUb0hleCIsInNwbGl0IiwiQVNOMU9iamVjdCIsImdldExlbmd0aEhleEZyb21WYWx1ZSIsImhWIiwiaFRMViIsImlzTW9kaWZpZWQiLCJnZXRGcmVzaFZhbHVlSGV4IiwiaEwiLCJoVCIsImdldFZhbHVlSGV4IiwiREVSQWJzdHJhY3RTdHJpbmciLCJnZXRTdHJpbmciLCJzZXRTdHJpbmciLCJ1dGY4dG9oZXgiLCJ0b0xvd2VyQ2FzZSIsInNldFN0cmluZ0hleCIsInN0ciIsImhleCIsIkRFUkFic3RyYWN0VGltZSIsImxvY2FsRGF0ZVRvVVRDIiwidXRjIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJmb3JtYXREYXRlIiwiemVyb1BhZGRpbmciLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJzdG9oZXgiLCJzZXRCeURhdGVWYWx1ZSIsIlVUQyIsInNldEJ5RGF0ZSIsIkRFUkFic3RyYWN0U3RydWN0dXJlZCIsInNldEJ5QVNOMU9iamVjdEFycmF5IiwiYXNuMUFycmF5IiwiYXBwZW5kQVNOMU9iamVjdCIsInNldEJ5QmlnSW50ZWdlciIsInNldEJ5SW50ZWdlciIsInNldFZhbHVlSGV4IiwiYmlnaW50Iiwic2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzIiwic2V0VW51c2VkQml0c0FuZEhleFZhbHVlIiwic2V0QnlCaW5hcnlTdHJpbmciLCJzZXRCeUJvb2xlYW5BcnJheSIsIm5ld0ZhbHNlQXJyYXkiLCJiaW4iLCJzZXRWYWx1ZU9pZFN0cmluZyIsInNldFZhbHVlTmFtZSIsIng1MDkiLCJPSUQiLCJuYW1lMm9pZCIsIm9pZCIsIm5hbWUiLCJkYXRlIiwid2l0aE1pbGxpcyIsIm1pbGxpcyIsInNvcnRGbGFnIiwic29ydCIsInNvcnRmbGFnIiwiaXNFeHBsaWNpdCIsImFzbjFPYmplY3QiLCJzZXRBU04xT2JqZWN0IiwiQVNOMUhFWCIsImdldExibGVuIiwiZ2V0TCIsImdldFZibGVuIiwiZ2V0VmlkeCIsImdldFYiLCJnZXRUTFYiLCJnZXROZXh0U2libGluZ0lkeCIsImdldENoaWxkSWR4IiwiZ2V0TnRoQ2hpbGRJZHgiLCJnZXRJZHhieUxpc3QiLCJnZXRUTFZieUxpc3QiLCJnZXRWYnlMaXN0IiwiaGV4dG9vaWRzdHIiLCJkdW1wIiwib21taXRfbG9uZ19vY3RldCIsImlzQVNOMUhFWCIsIm9pZDJuYW1lIiwiaGV4dG91dGY4Iiwib2lkbmFtZSIsIkpTT04iLCJ4NTA5RXh0TmFtZSIsImlzSGV4IiwiQmFzZTY0eCIsInN0b0JBIiwiQkF0b3MiLCJCQXRvaGV4Iiwic3RvYjY0Iiwic3RvYjY0dSIsImI2NHRvYjY0dSIsImI2NHV0b3MiLCJiNjR1dG9iNjQiLCJoZXh0b2I2NHUiLCJiNjR1dG9oZXgiLCJ1dGY4dG9iNjR1IiwiYjY0dXRvdXRmOCIsIkJ1ZmZlciIsInVyaWNtcHRvaGV4IiwiZW5jb2RlVVJJQ29tcG9uZW50QWxsIiwiaGV4dG91cmljbXAiLCJ1dGY4dG9iNjQiLCJiNjR0b3V0ZjgiLCJoZXh0b2I2NCIsImhleHRvYjY0bmwiLCJiNjRubHRvaGV4IiwicGVtdG9oZXgiLCJoZXh0b0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJEYXRhVmlldyIsInNldFVpbnQ4IiwiQXJyYXlCdWZmZXJ0b2hleCIsImJ5dGVMZW5ndGgiLCJnZXRVaW50OCIsInp1bHV0b21zZWMiLCJ6dWx1dG9zZWMiLCJ6dWx1dG9kYXRlIiwiZGF0ZXRvenVsdSIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImlwdjZ0b2hleCIsInJlcGVhdCIsImhleHRvaXB2NiIsImhleHRvaXAiLCJpcHRvaGV4IiwibmV3bGluZV90b1VuaXgiLCJuZXdsaW5lX3RvRG9zIiwiaXNJbnRlZ2VyIiwiaXNCYXNlNjQiLCJpc0Jhc2U2NFVSTCIsImlzSW50ZWdlckFycmF5IiwiaGV4dG9wb3NoZXgiLCJpbnRhcnlzdHJ0b2hleCIsIm1hcCIsInN0cmRpZmZpZHgiLCJESUdFU1RJTkZPSEVBRCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJERUZBVUxUUFJPVklERVIiLCJobWFjbWQ1IiwiaG1hY3NoYTEiLCJobWFjc2hhMjI0IiwiaG1hY3NoYTI1NiIsImhtYWNzaGEzODQiLCJobWFjc2hhNTEyIiwiaG1hY3JpcGVtZDE2MCIsIk1ENXdpdGhSU0EiLCJTSEExd2l0aFJTQSIsIlNIQTIyNHdpdGhSU0EiLCJTSEEyNTZ3aXRoUlNBIiwiU0hBMzg0d2l0aFJTQSIsIlNIQTUxMndpdGhSU0EiLCJSSVBFTUQxNjB3aXRoUlNBIiwiTUQ1d2l0aEVDRFNBIiwiU0hBMXdpdGhFQ0RTQSIsIlNIQTIyNHdpdGhFQ0RTQSIsIlNIQTI1NndpdGhFQ0RTQSIsIlNIQTM4NHdpdGhFQ0RTQSIsIlNIQTUxMndpdGhFQ0RTQSIsIlJJUEVNRDE2MHdpdGhFQ0RTQSIsIlNIQTF3aXRoRFNBIiwiU0hBMjI0d2l0aERTQSIsIlNIQTI1NndpdGhEU0EiLCJNRDV3aXRoUlNBYW5kTUdGMSIsIlNIQTF3aXRoUlNBYW5kTUdGMSIsIlNIQTIyNHdpdGhSU0FhbmRNR0YxIiwiU0hBMjU2d2l0aFJTQWFuZE1HRjEiLCJTSEEzODR3aXRoUlNBYW5kTUdGMSIsIlNIQTUxMndpdGhSU0FhbmRNR0YxIiwiUklQRU1EMTYwd2l0aFJTQWFuZE1HRjEiLCJDUllQVE9KU01FU1NBR0VESUdFU1ROQU1FIiwiTUQ1IiwiU0hBMSIsIlNIQTIyNCIsIlJJUEVNRDE2MCIsImdldERpZ2VzdEluZm9IZXgiLCJnZXRQYWRkZWREaWdlc3RJbmZvSGV4IiwiaGFzaFN0cmluZyIsImFsZyIsImRpZ2VzdFN0cmluZyIsImRpZ2VzdEhleCIsInByb3YiLCJzaGEyNTZIZXgiLCJzaGE1MTJIZXgiLCJTRUNVUkVSQU5ET01HRU4iLCJnZXRSYW5kb21IZXhPZk5ieXRlcyIsImdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcyIsImdldFJhbmRvbUhleE9mTmJpdHMiLCJnZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyIsImdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgiLCJnZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXgiLCJzZXRBbGdBbmRQcm92aWRlciIsIm1kIiwidXBkYXRlU3RyaW5nIiwidXBkYXRlSGV4IiwiZGlnZXN0Iiwic2pjbCIsImhhc2giLCJjb2RlYyIsInRvQml0cyIsImZyb21CaXRzIiwiYWxnTmFtZSIsInByb3ZOYW1lIiwiSEFTSExFTkdUSCIsIk1hYyIsImFsZ1Byb3YiLCJtYWMiLCJwYXNzIiwiZG9GaW5hbCIsImRvRmluYWxTdHJpbmciLCJkb0ZpbmFsSGV4Iiwic2V0UGFzc3dvcmQiLCJ1dGY4IiwicnN0ciIsImI2NCIsImI2NHUiLCJTaWduYXR1cmUiLCJfc2V0QWxnTmFtZXMiLCJtZEFsZ05hbWUiLCJwdWJrZXlBbGdOYW1lIiwiX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUiLCJLRVlVVElMIiwiZ2V0S2V5IiwicHJ2S2V5Iiwic3RhdGUiLCJwdWJLZXkiLCJzaWduIiwic0hhc2hIZXgiLCJlY3BydmhleCIsImVjY3VydmVuYW1lIiwiRUNEU0EiLCJoU2lnbiIsInNpZ25IZXgiLCJzaWduV2l0aE1lc3NhZ2VIYXNoUFNTIiwicHNzU2FsdExlbiIsInNpZ25XaXRoTWVzc2FnZUhhc2giLCJEU0EiLCJzaWduU3RyaW5nIiwidmVyaWZ5IiwiZWNwdWJoZXgiLCJ2ZXJpZnlIZXgiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1MiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2giLCJhbGdQcm92TmFtZSIsImluaXRQYXJhbXMiLCJwc3NzYWx0bGVuIiwicHJ2a2V5cGVtIiwicHJ2a2V5cGFzIiwiQ2lwaGVyIiwiZ2V0QWxnQnlLZXlBbmROYW1lIiwiZGVjcnlwdCIsImRlY3J5cHRPQUVQIiwib2lkaGV4Mm5hbWUiLCJnZXRCaWdSYW5kb20iLCJzZXROYW1lZEN1cnZlIiwiZWNwYXJhbXMiLCJFQ1BhcmFtZXRlckRCIiwiZ2V0QnlOYW1lIiwicHJ2S2V5SGV4IiwicHViS2V5SGV4IiwiY3VydmVOYW1lIiwic2V0UHJpdmF0ZUtleUhleCIsInNldFB1YmxpY0tleUhleCIsImdldFB1YmxpY0tleVhZSGV4Iiwia2V5bGVuIiwiZ2V0U2hvcnROSVNUUEN1cnZlTmFtZSIsImdlbmVyYXRlS2V5UGFpckhleCIsImJpUlNTaWdUb0FTTjFTaWciLCJmcm9tQnl0ZUFycmF5VW5zaWduZWQiLCJzZXJpYWxpemVTaWciLCJwYXJzZVNpZ0hleCIsInZlcmlmeVJhdyIsIkJpdGNvaW4iLCJpc0FycmF5IiwicGFyc2VTaWciLCJ0b0J5dGVBcnJheVNpZ25lZCIsInBhcnNlU2lnQ29tcGFjdCIsInJlYWRQS0NTNVBydktleUhleCIsImdldE5hbWUiLCJyZWFkUEtDUzhQcnZLZXlIZXgiLCJyZWFkUEtDUzhQdWJLZXlIZXgiLCJyZWFkQ2VydFB1YktleUhleCIsInBydiIsInB1YiIsInBhcnNlU2lnSGV4SW5IZXhSUyIsImFzbjFTaWdUb0NvbmNhdFNpZyIsImNvbmNhdFNpZ1RvQVNOMVNpZyIsImhleFJTU2lnVG9BU04xU2lnIiwicmVnaXN0IiwiQUVTIiwiVHJpcGxlREVTIiwiREVTIiwia2V5IiwiaXYiLCJjaXBoZXJ0ZXh0IiwicHJvYyIsImVwcm9jIiwiaXZsZW4iLCJjaXBoZXIiLCJpdnNhbHQiLCJkYXRhIiwia2V5aGV4IiwiaXZoZXgiLCJ2ZXJzaW9uIiwicGFyc2VQS0NTNVBFTSIsImdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdCIsImRlY3J5cHRLZXlCNjQiLCJnZXREZWNyeXB0ZWRLZXlIZXgiLCJnZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgiLCJ0b1VwcGVyQ2FzZSIsInBhcnNlSGV4T2ZFbmNyeXB0ZWRQS0NTOCIsImVuY3J5cHRpb25TY2hlbWVBbGciLCJlbmNyeXB0aW9uU2NoZW1lSVYiLCJwYmtkZjJTYWx0IiwicGJrZGYySXRlciIsImdldFBCS0RGMktleUhleEZyb21QYXJhbSIsIlBCS0RGMiIsImtleVNpemUiLCJpdGVyYXRpb25zIiwiX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgiLCJwYXJzZVBsYWluUHJpdmF0ZVBLQ1M4SGV4IiwiYWxncGFyYW0iLCJhbGdvaWQiLCJrZXlpZHgiLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU0iLCJfZ2V0S2V5RnJvbVB1YmxpY1BLQ1M4SGV4IiwicGFyc2VQdWJsaWNSYXdSU0FLZXlIZXgiLCJwYXJzZVB1YmxpY1BLQ1M4SGV4IiwieHkiLCJrdHkiLCJkcCIsImRxIiwiY28iLCJxaSIsInNldFByaXZhdGVFeCIsInNldFByaXZhdGUiLCJjcnYiLCJYNTA5IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgiLCJnZXRQdWJsaWNLZXlGcm9tQ2VydFBFTSIsImdlbmVyYXRlS2V5cGFpciIsImdlbmVyYXRlIiwicHJ2S2V5T2JqIiwicHViS2V5T2JqIiwiZ2V0UEVNIiwiU3ViamVjdFB1YmxpY0tleUluZm8iLCJzZXEiLCJvY3RzdHIiLCJiaXRzdHIiLCJnZXRLZXlGcm9tQ1NSUEVNIiwiZ2V0S2V5RnJvbUNTUkhleCIsInBhcnNlQ1NSSGV4IiwicDhwdWJrZXloZXgiLCJnZXRKV0tGcm9tS2V5IiwiZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsImdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsInJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZyIsInJlYWRQS0NTNVB1YktleUhleCIsInJlYWRDZXJ0SGV4IiwiZ2V0UHVibGljS2V5SGV4IiwiX1JFX0hFWERFQ09OTFkiLCJjb21waWxlIiwiX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyIsImRvUHJpdmF0ZSIsInBzc19tZ2YxX3N0ciIsInNpZ25QU1MiLCJfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkiLCJfcnNhc2lnbl9nZXRIZXhEaWdlc3RJbmZvRnJvbVNpZyIsIl9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvIiwidmVyaWZ5UFNTIiwiU0FMVF9MRU5fSExFTiIsIlNBTFRfTEVOX01BWCIsIlNBTFRfTEVOX1JFQ09WRVIiLCJmb2Zmc2V0IiwiYUV4dEluZm8iLCJnZXRWZXJzaW9uIiwiZ2V0U2VyaWFsTnVtYmVySGV4IiwiZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQiLCJnZXRJc3N1ZXJIZXgiLCJnZXRJc3N1ZXJTdHJpbmciLCJoZXgyZG4iLCJnZXRTdWJqZWN0SGV4IiwiZ2V0U3ViamVjdFN0cmluZyIsImdldE5vdEJlZm9yZSIsImdldE5vdEFmdGVyIiwiZ2V0UHVibGljS2V5SWR4IiwiZ2V0UHVibGljS2V5Q29udGVudElkeCIsImdldFB1YmxpY0tleSIsImdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWUiLCJnZXRTaWduYXR1cmVWYWx1ZUhleCIsInZlcmlmeVNpZ25hdHVyZSIsInBhcnNlRXh0IiwiY3JpdGljYWwiLCJ2aWR4IiwiZ2V0RXh0SW5mbyIsImdldEV4dEJhc2ljQ29uc3RyYWludHMiLCJjQSIsInBhdGhMZW4iLCJnZXRFeHRLZXlVc2FnZUJpbiIsImdldEV4dEtleVVzYWdlU3RyaW5nIiwiS0VZVVNBR0VfTkFNRSIsImdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyIiwiZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllciIsImtpZCIsImdldEV4dEV4dEtleVVzYWdlTmFtZSIsImdldEV4dFN1YmplY3RBbHROYW1lIiwiZ2V0RXh0U3ViamVjdEFsdE5hbWUyIiwiZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJIiwiZ2V0RXh0QUlBSW5mbyIsIm9jc3AiLCJjYWlzc3VlciIsImdldEV4dENlcnRpZmljYXRlUG9saWNpZXMiLCJpZCIsImNwcyIsInVub3RpY2UiLCJyZWFkQ2VydFBFTSIsImdldEluZm8iLCJoZXgycmRuIiwiaGV4MmF0dHJUeXBlVmFsdWUiLCJvaWQyYXR5cGUiLCJnZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTSIsImp3cyIsIkpXUyIsImlzU2FmZUpTT05TdHJpbmciLCJwYXJzZUpXUyIsInBhcnNlZEpXUyIsInNpZ3ZhbEgiLCJoZWFkQjY0VSIsInBheWxvYWRCNjRVIiwic2lndmFsQjY0VSIsInNpIiwic2lndmFsQkkiLCJoZWFkUyIsInBheWxvYWRTIiwicmVhZFNhZmVKU09OU3RyaW5nIiwiandzYWxnMnNpZ2FsZyIsImhBU04xU2lnIiwiaGVhZGVyT2JqIiwicGF5bG9hZE9iaiIsImhlYWRlclBQIiwicGF5bG9hZFBQIiwic2lnSGV4IiwidmVyaWZ5SldUIiwiaW5BcnJheSIsImluY2x1ZGVkQXJyYXkiLCJpc3MiLCJzdWIiLCJhdWQiLCJJbnREYXRlIiwiZ2V0Tm93IiwidmVyaWZ5QXQiLCJncmFjZVBlcmlvZCIsIm5iZiIsImlhdCIsImp0aSIsIkhTMjU2IiwiSFMzODQiLCJIUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIkVTMjU2IiwiRVMzODQiLCJQUzI1NiIsIlBTMzg0IiwiUFM1MTIiLCJub25lIiwiZ2V0RW5jb2RlZFNpZ25hdHVyZVZhbHVlRnJvbUpXUyIsImdldEpXS3RodW1icHJpbnQiLCJnZXQiLCJnZXRadWx1IiwiaW50RGF0ZTJVVENTdHJpbmciLCJ0b1VUQ1N0cmluZyIsImludERhdGUyWnVsdSIsIkVEU0EiLCJfY3J5cHRvIiwiRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXIiLCJUaW1lciIsImFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmciLCJfYWNjZXNzVG9rZW5FeHBpcmVkIiwibG9hZCIsImNvbnRhaW5lciIsImFjY2Vzc190b2tlbiIsImV4cGlyZXNfaW4iLCJkdXJhdGlvbiIsImRlYnVnIiwiZXhwaXJpbmciLCJjYW5jZWwiLCJleHBpcmVkIiwidW5sb2FkIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmluZyIsImNiIiwiYWRkSGFuZGxlciIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmciLCJyZW1vdmVIYW5kbGVyIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmVkIiwicmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkIiwiRGVmYXVsdEludGVydmFsIiwiY2FsbGJhY2siLCJjbGllbnRfaWQiLCJ1cmwiLCJpbnRlcnZhbCIsInN0b3BPbkVycm9yIiwiX2NhbGxiYWNrIiwiX2NsaWVudF9pZCIsIl91cmwiLCJfaW50ZXJ2YWwiLCJfc3RvcE9uRXJyb3IiLCJpZHgiLCJfZnJhbWVfb3JpZ2luIiwiX2ZyYW1lIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwicG9zaXRpb24iLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJzcmMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9ubG9hZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIl9ib3VuZE1lc3NhZ2VFdmVudCIsIl9tZXNzYWdlIiwiYmluZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJvcmlnaW4iLCJzb3VyY2UiLCJjb250ZW50V2luZG93IiwiZXJyb3IiLCJzdG9wIiwic3RhcnQiLCJzZXNzaW9uX3N0YXRlIiwiX3Nlc3Npb25fc3RhdGUiLCJzZW5kIiwicG9zdE1lc3NhZ2UiLCJfdGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJwcmVwYXJlIiwicGFyYW1zIiwicG9wdXBXaW5kb3dGZWF0dXJlcyIsInBvcHVwIiwiQ29yZG92YVBvcHVwV2luZG93IiwiRGVmYXVsdFBvcHVwRmVhdHVyZXMiLCJEZWZhdWx0UG9wdXBUYXJnZXQiLCJfcHJvbWlzZSIsInJlamVjdCIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImZlYXR1cmVzIiwidGFyZ2V0IiwicG9wdXBXaW5kb3dUYXJnZXQiLCJyZWRpcmVjdF91cmkiLCJzdGFydFVybCIsIl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZCIsImNvcmRvdmFNZXRhZGF0YSIsInNvbWUiLCJuYXZpZ2F0ZSIsIl9lcnJvciIsImNvcmRvdmEiLCJyZXF1aXJlIiwibWV0YWRhdGEiLCJfcG9wdXAiLCJJbkFwcEJyb3dzZXIiLCJvcGVuIiwiX2V4aXRDYWxsYmFja0V2ZW50IiwiX2V4aXRDYWxsYmFjayIsIl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50IiwiX2xvYWRTdGFydENhbGxiYWNrIiwicHJvbWlzZSIsImV2ZW50IiwiX3N1Y2Nlc3MiLCJtZXNzYWdlIiwiX2NsZWFudXAiLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFcnJvclJlc3BvbnNlIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJlcnJvcl91cmkiLCJFdmVudCIsIl9uYW1lIiwiX2NhbGxiYWNrcyIsImZpbmRJbmRleCIsIml0ZW0iLCJyYWlzZSIsInRpbWVyIiwiaGFuZGxlIiwidGVzdGluZyIsInJlcXVlc3QiLCJfdGVzdGluZyIsInNldFhNTEh0dHBSZXF1ZXN0IiwibmV3UmVxdWVzdCIsImxvY2F0aW9uIiwibG9jYWxTdG9yYWdlIiwic2Vzc2lvblN0b3JhZ2UiLCJYTUxIdHRwUmVxdWVzdCIsIklGcmFtZU5hdmlnYXRvciIsImZyYW1lIiwiSUZyYW1lV2luZG93Iiwibm90aWZ5UGFyZW50IiwiRGVmYXVsdFRpbWVvdXQiLCJ0aW1lb3V0Iiwic2lsZW50UmVxdWVzdFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiX3RpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsIl9vcmlnaW4iLCJmcmFtZUVsZW1lbnQiLCJocmVmIiwicGFyZW50IiwicHJvdG9jb2wiLCJob3N0IiwiZ2V0SXRlbSIsInNldEl0ZW0iLCJ2YWx1ZSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsImdldE93blByb3BlcnR5TmFtZXMiLCJKb3NlVXRpbCIsIktleVV0aWwiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJnZXRKb3NlVXRpbCIsInBhcnNlSnd0Iiwiand0IiwidG9rZW4iLCJoZWFkZXIiLCJwYXlsb2FkIiwidmFsaWRhdGVKd3QiLCJpc3N1ZXIiLCJhdWRpZW5jZSIsImNsb2NrU2tldyIsIm5vdyIsInRpbWVJbnNlbnNpdGl2ZSIsIng1YyIsIl92YWxpZGF0ZUp3dCIsInZhbGlkYXRlSnd0QXR0cmlidXRlcyIsInZhbGlkQXVkaWVuY2UiLCJhenAiLCJsb3dlck5vdyIsInVwcGVyTm93IiwidGhlbiIsImhleFRvQmFzZTY0VXJsIiwiSnNvblNlcnZpY2UiLCJhZGRpdGlvbmFsQ29udGVudFR5cGVzIiwiWE1MSHR0cFJlcXVlc3RDdG9yIiwiand0SGFuZGxlciIsIl9jb250ZW50VHlwZXMiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsInNldFJlcXVlc3RIZWFkZXIiLCJwb3N0Rm9ybSIsIm5vcExvZ2dlciIsImluZm8iLCJ3YXJuIiwiTk9ORSIsIkVSUk9SIiwiV0FSTiIsIklORk8iLCJERUJVRyIsImxvZ2dlciIsImxldmVsIiwiYXJncyIsImZyb20iLCJPaWRjTWV0YWRhdGFVcmxQYXRoIiwic2V0dGluZ3MiLCJKc29uU2VydmljZUN0b3IiLCJfc2V0dGluZ3MiLCJfanNvblNlcnZpY2UiLCJnZXRNZXRhZGF0YSIsIm1ldGFkYXRhVXJsIiwiZ2V0SXNzdWVyIiwiX2dldE1ldGFkYXRhUHJvcGVydHkiLCJnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQiLCJnZXRVc2VySW5mb0VuZHBvaW50IiwiZ2V0VG9rZW5FbmRwb2ludCIsIm9wdGlvbmFsIiwiZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lIiwiZ2V0RW5kU2Vzc2lvbkVuZHBvaW50IiwiZ2V0UmV2b2NhdGlvbkVuZHBvaW50IiwiZ2V0S2V5c0VuZHBvaW50IiwiZ2V0U2lnbmluZ0tleXMiLCJzaWduaW5nS2V5cyIsImp3a3NfdXJpIiwia2V5U2V0IiwiX21ldGFkYXRhVXJsIiwiYXV0aG9yaXR5IiwiY3JlYXRlU2lnbmluUmVxdWVzdCIsInJlc3BvbnNlX3R5cGUiLCJzY29wZSIsInByb21wdCIsIm1heF9hZ2UiLCJ1aV9sb2NhbGVzIiwiaWRfdG9rZW5faGludCIsImxvZ2luX2hpbnQiLCJhY3JfdmFsdWVzIiwicmVzb3VyY2UiLCJyZXF1ZXN0X3VyaSIsInJlc3BvbnNlX21vZGUiLCJleHRyYVF1ZXJ5UGFyYW1zIiwiZXh0cmFUb2tlblBhcmFtcyIsInJlcXVlc3RfdHlwZSIsInNraXBVc2VySW5mbyIsInN0YXRlU3RvcmUiLCJTaWduaW5SZXF1ZXN0IiwiaXNDb2RlIiwiX21ldGFkYXRhU2VydmljZSIsInNpZ25pblJlcXVlc3QiLCJjbGllbnRfc2VjcmV0Iiwic2lnbmluU3RhdGUiLCJfc3RhdGVTdG9yZSIsInNldCIsInRvU3RvcmFnZVN0cmluZyIsInJlYWRTaWduaW5SZXNwb25zZVN0YXRlIiwicmVtb3ZlU3RhdGUiLCJ1c2VRdWVyeSIsImRlbGltaXRlciIsInJlc3BvbnNlIiwiU2lnbmluUmVzcG9uc2UiLCJzdGF0ZUFwaSIsInJlbW92ZSIsInN0b3JlZFN0YXRlU3RyaW5nIiwiU2lnbmluU3RhdGUiLCJmcm9tU3RvcmFnZVN0cmluZyIsInByb2Nlc3NTaWduaW5SZXNwb25zZSIsIl92YWxpZGF0b3IiLCJ2YWxpZGF0ZVNpZ25pblJlc3BvbnNlIiwiY3JlYXRlU2lnbm91dFJlcXVlc3QiLCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJTaWdub3V0UmVxdWVzdCIsInNpZ25vdXRTdGF0ZSIsInJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSIsIlNpZ25vdXRSZXNwb25zZSIsInN0YXRlS2V5IiwiU3RhdGUiLCJwcm9jZXNzU2lnbm91dFJlc3BvbnNlIiwidmFsaWRhdGVTaWdub3V0UmVzcG9uc2UiLCJjbGVhclN0YWxlU3RhdGUiLCJzdGFsZVN0YXRlQWdlIiwidmFsaWRhdG9yIiwibWV0YWRhdGFTZXJ2aWNlIiwiRGVmYXVsdFJlc3BvbnNlVHlwZSIsIkRlZmF1bHRTY29wZSIsIkRlZmF1bHRTdGFsZVN0YXRlQWdlIiwiRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyIsImZpbHRlclByb3RvY29sQ2xhaW1zIiwibG9hZFVzZXJJbmZvIiwidXNlckluZm9Kd3RJc3N1ZXIiLCJSZXNwb25zZVZhbGlkYXRvckN0b3IiLCJSZXNwb25zZVZhbGlkYXRvciIsIk1ldGFkYXRhU2VydmljZUN0b3IiLCJfYXV0aG9yaXR5IiwiX21ldGFkYXRhIiwiX3NpZ25pbmdLZXlzIiwiX2NsaWVudF9zZWNyZXQiLCJfcmVzcG9uc2VfdHlwZSIsIl9zY29wZSIsIl9yZWRpcmVjdF91cmkiLCJfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3Byb21wdCIsIl9kaXNwbGF5IiwiX21heF9hZ2UiLCJfdWlfbG9jYWxlcyIsIl9hY3JfdmFsdWVzIiwiX3Jlc291cmNlIiwiX3Jlc3BvbnNlX21vZGUiLCJfZmlsdGVyUHJvdG9jb2xDbGFpbXMiLCJfbG9hZFVzZXJJbmZvIiwiX3N0YWxlU3RhdGVBZ2UiLCJfY2xvY2tTa2V3IiwiX3VzZXJJbmZvSnd0SXNzdWVyIiwiX2V4dHJhUXVlcnlQYXJhbXMiLCJQb3B1cE5hdmlnYXRvciIsIlBvcHVwV2luZG93Iiwia2VlcE9wZW4iLCJub3RpZnlPcGVuZXIiLCJDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwiLCJfY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyIiwiX2NoZWNrRm9yUG9wdXBDbG9zZWQiLCJfaWQiLCJmb2N1cyIsImNsb3NlZCIsIm9wZW5lciIsIlVybFV0aWxpdHkiLCJwYXJzZVVybEZyYWdtZW50IiwiUmVkaXJlY3ROYXZpZ2F0b3IiLCJ1c2VSZXBsYWNlVG9OYXZpZ2F0ZSIsIlByb3RvY29sQ2xhaW1zIiwiVXNlckluZm9TZXJ2aWNlQ3RvciIsIlVzZXJJbmZvU2VydmljZSIsImpvc2VVdGlsIiwiVG9rZW5DbGllbnRDdG9yIiwiVG9rZW5DbGllbnQiLCJfdXNlckluZm9TZXJ2aWNlIiwiX2pvc2VVdGlsIiwiX3Rva2VuQ2xpZW50IiwiX3Byb2Nlc3NTaWduaW5QYXJhbXMiLCJfdmFsaWRhdGVUb2tlbnMiLCJfcHJvY2Vzc0NsYWltcyIsIm5vbmNlIiwiaWRfdG9rZW4iLCJjb2RlX3ZlcmlmaWVyIiwiY29kZSIsImlzT3BlbklkQ29ubmVjdCIsInByb2ZpbGUiLCJnZXRDbGFpbXMiLCJjbGFpbXMiLCJfbWVyZ2VDbGFpbXMiLCJjbGFpbXMxIiwiY2xhaW1zMiIsInJlc3VsdCIsImFzc2lnbiIsInZhbHVlcyIsImZvckVhY2giLCJfcHJvY2Vzc0NvZGUiLCJfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4iLCJfdmFsaWRhdGVJZFRva2VuIiwiZXhjaGFuZ2VDb2RlIiwidG9rZW5SZXNwb25zZSIsIl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzIiwiY2xvY2tTa2V3SW5TZWNvbmRzIiwiX3ZhbGlkYXRlQWNjZXNzVG9rZW4iLCJfZmlsdGVyQnlBbGciLCJmaWx0ZXIiLCJhdF9oYXNoIiwiaGFzaEFsZyIsImhhc2hCaXRzIiwic2hhIiwibGVmdCIsImxlZnRfYjY0dSIsInVzZXJNYW5hZ2VyIiwiQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciIsIl91c2VyTWFuYWdlciIsIl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yIiwiZXZlbnRzIiwiYWRkVXNlckxvYWRlZCIsIl9zdGFydCIsImFkZFVzZXJVbmxvYWRlZCIsIl9zdG9wIiwiZ2V0VXNlciIsInVzZXIiLCJtb25pdG9yQW5vbnltb3VzU2Vzc2lvbiIsInF1ZXJ5U2Vzc2lvblN0YXR1cyIsInRtcFVzZXIiLCJzZXNzaW9uIiwic2lkIiwiY2F0Y2giLCJlcnIiLCJfc3ViIiwiX3NpZCIsIl9jaGVja1Nlc3Npb25JRnJhbWUiLCJfY2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IiLCJ0aW1lckhhbmRsZSIsInJhaXNlRXZlbnQiLCJfcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQiLCJfcmFpc2VVc2VyU2lnbmVkT3V0IiwiX3JhaXNlVXNlclNpZ25lZEluIiwiY2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJzdG9wQ2hlY2tTZXNzaW9uT25FcnJvciIsIm9pZGMiLCJpc09pZGMiLCJhZGRRdWVyeVBhcmFtIiwiY29kZV9jaGFsbGVuZ2UiLCJpc09BdXRoIiwiT2lkY1Njb3BlIiwidG9rZW5fdHlwZSIsImV4cGlyZXNfYXQiLCJzY29wZXMiLCJfbm9uY2UiLCJfY29kZV92ZXJpZmllciIsIl9jb2RlX2NoYWxsZW5nZSIsIl9leHRyYVRva2VuUGFyYW1zIiwiX3NraXBVc2VySW5mbyIsImNyZWF0ZWQiLCJzdG9yYWdlU3RyaW5nIiwiU2lsZW50UmVuZXdTZXJ2aWNlIiwiX3Rva2VuRXhwaXJpbmciLCJzaWduaW5TaWxlbnQiLCJfcmFpc2VTaWxlbnRSZW5ld0Vycm9yIiwiX2NyZWF0ZWQiLCJfcmVxdWVzdF90eXBlIiwic3RvcmFnZSIsImFnZSIsImN1dG9mZiIsImdldEFsbEtleXMiLCJwcm9taXNlcyIsImFsbCIsIlRpbWVyRHVyYXRpb24iLCJub3dGdW5jIiwiX25vd0Z1bmMiLCJleHBpcmF0aW9uIiwiX3RpbWVySGFuZGxlIiwiX2V4cGlyYXRpb24iLCJ0aW1lckR1cmF0aW9uIiwiZGlmZiIsImdyYW50X3R5cGUiLCJleGNoYW5nZVJlZnJlc2hUb2tlbiIsInJlZnJlc2hfdG9rZW4iLCJBY2Nlc3NUb2tlblR5cGVIaW50IiwiUmVmcmVzaFRva2VuVHlwZUhpbnQiLCJfWE1MSHR0cFJlcXVlc3RDdG9yIiwicmV2b2tlIiwicmVxdWlyZWQiLCJfcmV2b2tlIiwieGhyIiwiZ2xvYmFsIiwibGFzdEluZGV4T2YiLCJyZWdleCIsImNvdW50ZXIiLCJleGVjIiwicHJvcCIsIl9nZXRDbGFpbXNGcm9tSnd0IiwiaXNzdWVyUHJvbWlzZSIsIlNpbGVudFJlbmV3U2VydmljZUN0b3IiLCJTZXNzaW9uTW9uaXRvckN0b3IiLCJUb2tlblJldm9jYXRpb25DbGllbnRDdG9yIiwiVXNlck1hbmFnZXJTZXR0aW5ncyIsIl9ldmVudHMiLCJVc2VyTWFuYWdlckV2ZW50cyIsIl9zaWxlbnRSZW5ld1NlcnZpY2UiLCJhdXRvbWF0aWNTaWxlbnRSZW5ldyIsInN0YXJ0U2lsZW50UmVuZXciLCJtb25pdG9yU2Vzc2lvbiIsIl9zZXNzaW9uTW9uaXRvciIsIl90b2tlblJldm9jYXRpb25DbGllbnQiLCJfbG9hZFVzZXIiLCJyZW1vdmVVc2VyIiwic3RvcmVVc2VyIiwic2lnbmluUmVkaXJlY3QiLCJuYXZQYXJhbXMiLCJfc2lnbmluU3RhcnQiLCJfcmVkaXJlY3ROYXZpZ2F0b3IiLCJzaWduaW5SZWRpcmVjdENhbGxiYWNrIiwiX3NpZ25pbkVuZCIsInNpZ25pblBvcHVwIiwicG9wdXBfcmVkaXJlY3RfdXJpIiwiX3NpZ25pbiIsIl9wb3B1cE5hdmlnYXRvciIsInNpZ25pblBvcHVwQ2FsbGJhY2siLCJfc2lnbmluQ2FsbGJhY2siLCJfdXNlUmVmcmVzaFRva2VuIiwiaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3IiwidmFsaWRhdGVTdWJPblNpbGVudFJlbmV3IiwiY3VycmVudF9zdWIiLCJfc2lnbmluU2lsZW50SWZyYW1lIiwiaWRUb2tlblZhbGlkYXRpb24iLCJfdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuIiwiYXV0aF90aW1lIiwic2lsZW50X3JlZGlyZWN0X3VyaSIsIl9pZnJhbWVOYXZpZ2F0b3IiLCJzaWduaW5TaWxlbnRDYWxsYmFjayIsInNpZ25pbkNhbGxiYWNrIiwic2lnbm91dENhbGxiYWNrIiwic2lnbm91dFJlZGlyZWN0Q2FsbGJhY2siLCJzaWdub3V0UG9wdXBDYWxsYmFjayIsInF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlIiwibmF2UmVzcG9uc2UiLCJzaWduaW5SZXNwb25zZSIsIm5hdmlnYXRvclBhcmFtcyIsInNpZ25vdXRSZWRpcmVjdCIsInBvc3RMb2dvdXRSZWRpcmVjdFVyaSIsIl9zaWdub3V0U3RhcnQiLCJfc2lnbm91dEVuZCIsInNpZ25vdXRQb3B1cCIsInBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9zaWdub3V0IiwicmV2b2tlUHJvbWlzZSIsInJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0IiwiX3Jldm9rZUludGVybmFsIiwic2lnbm91dFJlcXVlc3QiLCJzaWdub3V0UmVzcG9uc2UiLCJyZXZva2VBY2Nlc3NUb2tlbiIsInN1Y2Nlc3MiLCJfcmV2b2tlQWNjZXNzVG9rZW5JbnRlcm5hbCIsIl9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbCIsImF0U3VjY2VzcyIsInJ0U3VjY2VzcyIsInN0b3BTaWxlbnRSZW5ldyIsIl91c2VyU3RvcmUiLCJfdXNlclN0b3JlS2V5IiwicmVkaXJlY3ROYXZpZ2F0b3IiLCJwb3B1cE5hdmlnYXRvciIsImlmcmFtZU5hdmlnYXRvciIsInVzZXJTdG9yZSIsIl91c2VyTG9hZGVkIiwiX3VzZXJVbmxvYWRlZCIsIl9zaWxlbnRSZW5ld0Vycm9yIiwiX3VzZXJTaWduZWRJbiIsIl91c2VyU2lnbmVkT3V0IiwiX3VzZXJTZXNzaW9uQ2hhbmdlZCIsInJlbW92ZVVzZXJMb2FkZWQiLCJyZW1vdmVVc2VyVW5sb2FkZWQiLCJhZGRTaWxlbnRSZW5ld0Vycm9yIiwicmVtb3ZlU2lsZW50UmVuZXdFcnJvciIsImFkZFVzZXJTaWduZWRJbiIsInJlbW92ZVVzZXJTaWduZWRJbiIsImFkZFVzZXJTaWduZWRPdXQiLCJyZW1vdmVVc2VyU2lnbmVkT3V0IiwiYWRkVXNlclNlc3Npb25DaGFuZ2VkIiwicmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkIiwiRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsIiwic3RvcmUiLCJfcG9wdXBfcmVkaXJlY3RfdXJpIiwiX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9wb3B1cFdpbmRvd0ZlYXR1cmVzIiwiX3BvcHVwV2luZG93VGFyZ2V0IiwiX3NpbGVudF9yZWRpcmVjdF91cmkiLCJfc2lsZW50UmVxdWVzdFRpbWVvdXQiLCJfYXV0b21hdGljU2lsZW50UmVuZXciLCJfdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3IiwiX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsIl9tb25pdG9yU2Vzc2lvbiIsIl9tb25pdG9yQW5vbnltb3VzU2Vzc2lvbiIsIl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsInByZWZpeCIsIl9zdG9yZSIsIl9wcmVmaXgiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0VBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQW5CQTtBQUNBOztrQkFvQmU7QUFDWEEsNkJBRFc7QUFFWEMsaUJBRlc7QUFHWEMsc0NBSFc7QUFJWEMsOERBSlc7QUFLWEMsb0VBTFc7QUFNWEMsOERBTlc7QUFPWEMseUNBUFc7QUFRWEMsMkRBUlc7QUFTWEMscURBVFc7QUFVWEMsdUVBVlc7QUFXWEMsMEVBWFc7QUFZWEMsOERBWlc7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QUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQy90Qlk7O0FBRVo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyxTQUFTO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsVUFBVTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFWTs7QUFFWixhQUFhLG1CQUFPLENBQUMsb0RBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLGdEQUFTO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxvRUFBUzs7QUFFL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixtREFBbUQ7QUFDeEU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixVQUFVO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDLFNBQVM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsRUFBRTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZUFBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBLHFCQUFxQixlQUFlO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFF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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxtREFBbUQ7QUFDbkQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxvQ0FBb0M7QUFDcEM7QUFDQSxLQUFLO0FBQ0wsd0VBQXdFO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsOERBQThEO0FBQzlEO0FBQ0EsS0FBSztBQUNMLHdFQUF3RTtBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgseUJBQXlCLHNCQUFzQixFQUFFLEVBQUU7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDO0FBQzVDO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FB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QWtEO0FBQzFELG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsd0hBQTZDO0FBQ3JELG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsNEVBQXVCO0FBQy9CLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0hBQTBDO0FBQ2xELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsd0hBQTZDO0FBQ3JELG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1C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aGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vc3JjL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnQgfSBmcm9tICcuL3NyYy9PaWRjQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL3NyYy9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XHJcbmltcG9ydCB7IEluTWVtb3J5V2ViU3RvcmFnZSB9IGZyb20gJy4vc3JjL0luTWVtb3J5V2ViU3RvcmFnZS5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyIH0gZnJvbSAnLi9zcmMvVXNlck1hbmFnZXIuanMnO1xyXG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkV2ZW50cyB9IGZyb20gJy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9zcmMvTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwTmF2aWdhdG9yIH0gZnJvbSAnLi9zcmMvQ29yZG92YVBvcHVwTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFJRnJhbWVOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBDaGVja1Nlc3Npb25JRnJhbWUgfSBmcm9tICcuL3NyYy9DaGVja1Nlc3Npb25JRnJhbWUuanMnO1xyXG5pbXBvcnQgeyBUb2tlblJldm9jYXRpb25DbGllbnQgfSBmcm9tICcuL3NyYy9Ub2tlblJldm9jYXRpb25DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uTW9uaXRvciB9IGZyb20gJy4vc3JjL1Nlc3Npb25Nb25pdG9yLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9zcmMvR2xvYmFsLmpzJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vc3JjL1VzZXIuanMnO1xyXG5cclxuaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbi5qcyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBWZXJzaW9uLFxyXG4gICAgTG9nLFxyXG4gICAgT2lkY0NsaWVudCxcclxuICAgIE9pZGNDbGllbnRTZXR0aW5ncyxcclxuICAgIFdlYlN0b3JhZ2VTdGF0ZVN0b3JlLFxyXG4gICAgSW5NZW1vcnlXZWJTdG9yYWdlLFxyXG4gICAgVXNlck1hbmFnZXIsXHJcbiAgICBBY2Nlc3NUb2tlbkV2ZW50cyxcclxuICAgIE1ldGFkYXRhU2VydmljZSxcclxuICAgIENvcmRvdmFQb3B1cE5hdmlnYXRvcixcclxuICAgIENvcmRvdmFJRnJhbWVOYXZpZ2F0b3IsXHJcbiAgICBDaGVja1Nlc3Npb25JRnJhbWUsXHJcbiAgICBUb2tlblJldm9jYXRpb25DbGllbnQsXHJcbiAgICBTZXNzaW9uTW9uaXRvcixcclxuICAgIEdsb2JhbCxcclxuICAgIFVzZXJcclxufTtcclxuIiwiLypcclxuICoganNyc2FzaWduKGFsbCkgOC4wLjEyICgyMDE4LTA0LTIyKSAoYykgMjAxMC0yMDE4IEtlbmppIFVydXNoaW1hIHwga2p1ci5naXRodWIuY29tL2pzcnNhc2lnbi9saWNlbnNlXHJcbiAqL1xyXG5cclxudmFyIG5hdmlnYXRvciA9IHt9O1xyXG5uYXZpZ2F0b3IudXNlckFnZW50ID0gZmFsc2U7XHJcblxyXG52YXIgd2luZG93ID0ge307XHJcblxuLyohXHJcbkNvcHlyaWdodCAoYykgMjAxMSwgWWFob28hIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuQ29kZSBsaWNlbnNlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2U6XHJcbmh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS9saWNlbnNlLmh0bWxcclxudmVyc2lvbjogMi45LjBcclxuKi9cclxuaWYoWUFIT089PT11bmRlZmluZWQpe3ZhciBZQUhPTz17fX1ZQUhPTy5sYW5nPXtleHRlbmQ6ZnVuY3Rpb24oZyxoLGYpe2lmKCFofHwhZyl7dGhyb3cgbmV3IEVycm9yKFwiWUFIT08ubGFuZy5leHRlbmQgZmFpbGVkLCBwbGVhc2UgY2hlY2sgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBpbmNsdWRlZC5cIil9dmFyIGQ9ZnVuY3Rpb24oKXt9O2QucHJvdG90eXBlPWgucHJvdG90eXBlO2cucHJvdG90eXBlPW5ldyBkKCk7Zy5wcm90b3R5cGUuY29uc3RydWN0b3I9ZztnLnN1cGVyY2xhc3M9aC5wcm90b3R5cGU7aWYoaC5wcm90b3R5cGUuY29uc3RydWN0b3I9PU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3Ipe2gucHJvdG90eXBlLmNvbnN0cnVjdG9yPWh9aWYoZil7dmFyIGI7Zm9yKGIgaW4gZil7Zy5wcm90b3R5cGVbYl09ZltiXX12YXIgZT1mdW5jdGlvbigpe30sYz1bXCJ0b1N0cmluZ1wiLFwidmFsdWVPZlwiXTt0cnl7aWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2U9ZnVuY3Rpb24oaixpKXtmb3IoYj0wO2I8Yy5sZW5ndGg7Yj1iKzEpe3ZhciBsPWNbYl0saz1pW2xdO2lmKHR5cGVvZiBrPT09XCJmdW5jdGlvblwiJiZrIT1PYmplY3QucHJvdG90eXBlW2xdKXtqW2xdPWt9fX19fWNhdGNoKGEpe31lKGcucHJvdG90eXBlLGYpfX19O1xuLyohIENyeXB0b0pTIHYzLjEuMiBjb3JlLWZpeC5qc1xyXG4gKiBjb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuICogKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIGNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuICogVEhJUyBJUyBGSVggb2YgJ2NvcmUuanMnIHRvIGZpeCBIbWFjIGlzc3VlLlxyXG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy9pc3N1ZXMvZGV0YWlsP2lkPTg0XHJcbiAqIGh0dHBzOi8vY3J5cHRvLWpzLmdvb2dsZWNvZGUuY29tL3N2bi1oaXN0b3J5L3I2NjcvYnJhbmNoZXMvMy54L3NyYy9jb3JlLmpzXHJcbiAqL1xyXG52YXIgQ3J5cHRvSlM9Q3J5cHRvSlN8fChmdW5jdGlvbihlLGcpe3ZhciBhPXt9O3ZhciBiPWEubGliPXt9O3ZhciBqPWIuQmFzZT0oZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7fXJldHVybntleHRlbmQ6ZnVuY3Rpb24ocCl7bi5wcm90b3R5cGU9dGhpczt2YXIgbz1uZXcgbigpO2lmKHApe28ubWl4SW4ocCl9aWYoIW8uaGFzT3duUHJvcGVydHkoXCJpbml0XCIpKXtvLmluaXQ9ZnVuY3Rpb24oKXtvLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19by5pbml0LnByb3RvdHlwZT1vO28uJHN1cGVyPXRoaXM7cmV0dXJuIG99LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBvPXRoaXMuZXh0ZW5kKCk7by5pbml0LmFwcGx5KG8sYXJndW1lbnRzKTtyZXR1cm4gb30saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24ocCl7Zm9yKHZhciBvIGluIHApe2lmKHAuaGFzT3duUHJvcGVydHkobykpe3RoaXNbb109cFtvXX19aWYocC5oYXNPd25Qcm9wZXJ0eShcInRvU3RyaW5nXCIpKXt0aGlzLnRvU3RyaW5nPXAudG9TdHJpbmd9fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19fSgpKTt2YXIgbD1iLldvcmRBcnJheT1qLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihvLG4pe289dGhpcy53b3Jkcz1vfHxbXTtpZihuIT1nKXt0aGlzLnNpZ0J5dGVzPW59ZWxzZXt0aGlzLnNpZ0J5dGVzPW8ubGVuZ3RoKjR9fSx0b1N0cmluZzpmdW5jdGlvbihuKXtyZXR1cm4obnx8aCkuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24odCl7dmFyIHE9dGhpcy53b3Jkczt2YXIgcD10LndvcmRzO3ZhciBuPXRoaXMuc2lnQnl0ZXM7dmFyIHM9dC5zaWdCeXRlczt0aGlzLmNsYW1wKCk7aWYobiU0KXtmb3IodmFyIHI9MDtyPHM7cisrKXt2YXIgbz0ocFtyPj4+Ml0+Pj4oMjQtKHIlNCkqOCkpJjI1NTtxWyhuK3IpPj4+Ml18PW88PCgyNC0oKG4rciklNCkqOCl9fWVsc2V7Zm9yKHZhciByPTA7cjxzO3IrPTQpe3FbKG4rcik+Pj4yXT1wW3I+Pj4yXX19dGhpcy5zaWdCeXRlcys9cztyZXR1cm4gdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIgbz10aGlzLndvcmRzO3ZhciBuPXRoaXMuc2lnQnl0ZXM7b1tuPj4+Ml0mPTQyOTQ5NjcyOTU8PCgzMi0obiU0KSo4KTtvLmxlbmd0aD1lLmNlaWwobi80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgbj1qLmNsb25lLmNhbGwodGhpcyk7bi53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApO3JldHVybiBufSxyYW5kb206ZnVuY3Rpb24ocCl7dmFyIG89W107Zm9yKHZhciBuPTA7bjxwO24rPTQpe28ucHVzaCgoZS5yYW5kb20oKSo0Mjk0OTY3Mjk2KXwwKX1yZXR1cm4gbmV3IGwuaW5pdChvLHApfX0pO3ZhciBtPWEuZW5jPXt9O3ZhciBoPW0uSGV4PXtzdHJpbmdpZnk6ZnVuY3Rpb24ocCl7dmFyIHI9cC53b3Jkczt2YXIgbz1wLnNpZ0J5dGVzO3ZhciBxPVtdO2Zvcih2YXIgbj0wO248bztuKyspe3ZhciBzPShyW24+Pj4yXT4+PigyNC0obiU0KSo4KSkmMjU1O3EucHVzaCgocz4+PjQpLnRvU3RyaW5nKDE2KSk7cS5wdXNoKChzJjE1KS50b1N0cmluZygxNikpfXJldHVybiBxLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKHApe3ZhciBuPXAubGVuZ3RoO3ZhciBxPVtdO2Zvcih2YXIgbz0wO288bjtvKz0yKXtxW28+Pj4zXXw9cGFyc2VJbnQocC5zdWJzdHIobywyKSwxNik8PCgyNC0obyU4KSo0KX1yZXR1cm4gbmV3IGwuaW5pdChxLG4vMil9fTt2YXIgZD1tLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKHEpe3ZhciByPXEud29yZHM7dmFyIHA9cS5zaWdCeXRlczt2YXIgbj1bXTtmb3IodmFyIG89MDtvPHA7bysrKXt2YXIgcz0ocltvPj4+Ml0+Pj4oMjQtKG8lNCkqOCkpJjI1NTtuLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzKSl9cmV0dXJuIG4uam9pbihcIlwiKX0scGFyc2U6ZnVuY3Rpb24ocCl7dmFyIG49cC5sZW5ndGg7dmFyIHE9W107Zm9yKHZhciBvPTA7bzxuO28rKyl7cVtvPj4+Ml18PShwLmNoYXJDb2RlQXQobykmMjU1KTw8KDI0LShvJTQpKjgpfXJldHVybiBuZXcgbC5pbml0KHEsbil9fTt2YXIgYz1tLlV0Zjg9e3N0cmluZ2lmeTpmdW5jdGlvbihuKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZC5zdHJpbmdpZnkobikpKX1jYXRjaChvKXt0aHJvdyBuZXcgRXJyb3IoXCJNYWxmb3JtZWQgVVRGLTggZGF0YVwiKX19LHBhcnNlOmZ1bmN0aW9uKG4pe3JldHVybiBkLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChuKSkpfX07dmFyIGk9Yi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtPWouZXh0ZW5kKHtyZXNldDpmdW5jdGlvbigpe3RoaXMuX2RhdGE9bmV3IGwuaW5pdCgpO3RoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihuKXtpZih0eXBlb2Ygbj09XCJzdHJpbmdcIil7bj1jLnBhcnNlKG4pfXRoaXMuX2RhdGEuY29uY2F0KG4pO3RoaXMuX25EYXRhQnl0ZXMrPW4uc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9uKHcpe3ZhciBxPXRoaXMuX2RhdGE7dmFyIHg9cS53b3Jkczt2YXIgbj1xLnNpZ0J5dGVzO3ZhciB0PXRoaXMuYmxvY2tTaXplO3ZhciB2PXQqNDt2YXIgdT1uL3Y7aWYodyl7dT1lLmNlaWwodSl9ZWxzZXt1PWUubWF4KCh1fDApLXRoaXMuX21pbkJ1ZmZlclNpemUsMCl9dmFyIHM9dSp0O3ZhciByPWUubWluKHMqNCxuKTtpZihzKXtmb3IodmFyIHA9MDtwPHM7cCs9dCl7dGhpcy5fZG9Qcm9jZXNzQmxvY2soeCxwKX12YXIgbz14LnNwbGljZSgwLHMpO3Euc2lnQnl0ZXMtPXJ9cmV0dXJuIG5ldyBsLmluaXQobyxyKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgbj1qLmNsb25lLmNhbGwodGhpcyk7bi5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCk7cmV0dXJuIG59LF9taW5CdWZmZXJTaXplOjB9KTt2YXIgZj1iLkhhc2hlcj1pLmV4dGVuZCh7Y2ZnOmouZXh0ZW5kKCksaW5pdDpmdW5jdGlvbihuKXt0aGlzLmNmZz10aGlzLmNmZy5leHRlbmQobik7dGhpcy5yZXNldCgpfSxyZXNldDpmdW5jdGlvbigpe2kucmVzZXQuY2FsbCh0aGlzKTt0aGlzLl9kb1Jlc2V0KCl9LHVwZGF0ZTpmdW5jdGlvbihuKXt0aGlzLl9hcHBlbmQobik7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbihuKXtpZihuKXt0aGlzLl9hcHBlbmQobil9dmFyIG89dGhpcy5fZG9GaW5hbGl6ZSgpO3JldHVybiBvfSxibG9ja1NpemU6NTEyLzMyLF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHAsbyl7cmV0dXJuIG5ldyBuLmluaXQobykuZmluYWxpemUocCl9fSxfY3JlYXRlSG1hY0hlbHBlcjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24ocCxvKXtyZXR1cm4gbmV3IGsuSE1BQy5pbml0KG4sbykuZmluYWxpemUocCl9fX0pO3ZhciBrPWEuYWxnbz17fTtyZXR1cm4gYX0oTWF0aCkpO1xuLypcclxuQ3J5cHRvSlMgdjMuMS4yIHg2NC1jb3JlLW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKGcpe3ZhciBhPUNyeXB0b0pTLGY9YS5saWIsZT1mLkJhc2UsaD1mLldvcmRBcnJheSxhPWEueDY0PXt9O2EuV29yZD1lLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihiLGMpe3RoaXMuaGlnaD1iO3RoaXMubG93PWN9fSk7YS5Xb3JkQXJyYXk9ZS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oYixjKXtiPXRoaXMud29yZHM9Ynx8W107dGhpcy5zaWdCeXRlcz1jIT1nP2M6OCpiLmxlbmd0aH0sdG9YMzI6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy53b3JkcyxjPWIubGVuZ3RoLGE9W10sZD0wO2Q8YztkKyspe3ZhciBlPWJbZF07YS5wdXNoKGUuaGlnaCk7YS5wdXNoKGUubG93KX1yZXR1cm4gaC5jcmVhdGUoYSx0aGlzLnNpZ0J5dGVzKX0sY2xvbmU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9ZS5jbG9uZS5jYWxsKHRoaXMpLGM9Yi53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLGE9Yy5sZW5ndGgsZD0wO2Q8YTtkKyspY1tkXT1jW2RdLmNsb25lKCk7cmV0dXJuIGJ9fSl9KSgpO1xyXG5cbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiBlbmMtYmFzZTY0LmpzXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qc1xyXG4oYykgMjAwOS0yMDEzIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxyXG4qL1xyXG4oZnVuY3Rpb24oKXt2YXIgaD1DcnlwdG9KUyxqPWgubGliLldvcmRBcnJheTtoLmVuYy5CYXNlNjQ9e3N0cmluZ2lmeTpmdW5jdGlvbihiKXt2YXIgZT1iLndvcmRzLGY9Yi5zaWdCeXRlcyxjPXRoaXMuX21hcDtiLmNsYW1wKCk7Yj1bXTtmb3IodmFyIGE9MDthPGY7YSs9Mylmb3IodmFyIGQ9KGVbYT4+PjJdPj4+MjQtOCooYSU0KSYyNTUpPDwxNnwoZVthKzE+Pj4yXT4+PjI0LTgqKChhKzEpJTQpJjI1NSk8PDh8ZVthKzI+Pj4yXT4+PjI0LTgqKChhKzIpJTQpJjI1NSxnPTA7ND5nJiZhKzAuNzUqZzxmO2crKyliLnB1c2goYy5jaGFyQXQoZD4+PjYqKDMtZykmNjMpKTtpZihlPWMuY2hhckF0KDY0KSlmb3IoO2IubGVuZ3RoJTQ7KWIucHVzaChlKTtyZXR1cm4gYi5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihiKXt2YXIgZT1iLmxlbmd0aCxmPXRoaXMuX21hcCxjPWYuY2hhckF0KDY0KTtjJiYoYz1iLmluZGV4T2YoYyksLTEhPWMmJihlPWMpKTtmb3IodmFyIGM9W10sYT0wLGQ9MDtkPFxyXG5lO2QrKylpZihkJTQpe3ZhciBnPWYuaW5kZXhPZihiLmNoYXJBdChkLTEpKTw8MiooZCU0KSxoPWYuaW5kZXhPZihiLmNoYXJBdChkKSk+Pj42LTIqKGQlNCk7Y1thPj4+Ml18PShnfGgpPDwyNC04KihhJTQpO2ErK31yZXR1cm4gai5jcmVhdGUoYyxhKX0sX21hcDpcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCJ9fSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhMjU2LW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKGspe2Zvcih2YXIgZz1DcnlwdG9KUyxoPWcubGliLHY9aC5Xb3JkQXJyYXksaj1oLkhhc2hlcixoPWcuYWxnbyxzPVtdLHQ9W10sdT1mdW5jdGlvbihxKXtyZXR1cm4gNDI5NDk2NzI5NioocS0ocXwwKSl8MH0sbD0yLGI9MDs2ND5iOyl7dmFyIGQ7YTp7ZD1sO2Zvcih2YXIgdz1rLnNxcnQoZCkscj0yO3I8PXc7cisrKWlmKCEoZCVyKSl7ZD0hMTticmVhayBhfWQ9ITB9ZCYmKDg+YiYmKHNbYl09dShrLnBvdyhsLDAuNSkpKSx0W2JdPXUoay5wb3cobCwxLzMpKSxiKyspO2wrK312YXIgbj1bXSxoPWguU0hBMjU2PWouZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IHYuaW5pdChzLnNsaWNlKDApKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKHEsaCl7Zm9yKHZhciBhPXRoaXMuX2hhc2gud29yZHMsYz1hWzBdLGQ9YVsxXSxiPWFbMl0saz1hWzNdLGY9YVs0XSxnPWFbNV0saj1hWzZdLGw9YVs3XSxlPTA7NjQ+ZTtlKyspe2lmKDE2PmUpbltlXT1cclxucVtoK2VdfDA7ZWxzZXt2YXIgbT1uW2UtMTVdLHA9bltlLTJdO25bZV09KChtPDwyNXxtPj4+NyleKG08PDE0fG0+Pj4xOClebT4+PjMpK25bZS03XSsoKHA8PDE1fHA+Pj4xNyleKHA8PDEzfHA+Pj4xOSlecD4+PjEwKStuW2UtMTZdfW09bCsoKGY8PDI2fGY+Pj42KV4oZjw8MjF8Zj4+PjExKV4oZjw8N3xmPj4+MjUpKSsoZiZnXn5mJmopK3RbZV0rbltlXTtwPSgoYzw8MzB8Yz4+PjIpXihjPDwxOXxjPj4+MTMpXihjPDwxMHxjPj4+MjIpKSsoYyZkXmMmYl5kJmIpO2w9ajtqPWc7Zz1mO2Y9ayttfDA7az1iO2I9ZDtkPWM7Yz1tK3B8MH1hWzBdPWFbMF0rY3wwO2FbMV09YVsxXStkfDA7YVsyXT1hWzJdK2J8MDthWzNdPWFbM10ra3wwO2FbNF09YVs0XStmfDA7YVs1XT1hWzVdK2d8MDthWzZdPWFbNl0ranwwO2FbN109YVs3XStsfDB9LF9kb0ZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5fZGF0YSxiPWQud29yZHMsYT04KnRoaXMuX25EYXRhQnl0ZXMsYz04KmQuc2lnQnl0ZXM7XHJcbmJbYz4+PjVdfD0xMjg8PDI0LWMlMzI7YlsoYys2ND4+Pjk8PDQpKzE0XT1rLmZsb29yKGEvNDI5NDk2NzI5Nik7YlsoYys2ND4+Pjk8PDQpKzE1XT1hO2Quc2lnQnl0ZXM9NCpiLmxlbmd0aDt0aGlzLl9wcm9jZXNzKCk7cmV0dXJuIHRoaXMuX2hhc2h9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGI9ai5jbG9uZS5jYWxsKHRoaXMpO2IuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpO3JldHVybiBifX0pO2cuU0hBMjU2PWouX2NyZWF0ZUhlbHBlcihoKTtnLkhtYWNTSEEyNTY9ai5fY3JlYXRlSG1hY0hlbHBlcihoKX0pKE1hdGgpO1xyXG5cbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiBzaGE1MTItbWluLmpzXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qc1xyXG4oYykgMjAwOS0yMDEzIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxyXG4qL1xyXG4oZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7cmV0dXJuIGQuY3JlYXRlLmFwcGx5KGQsYXJndW1lbnRzKX1mb3IodmFyIG49Q3J5cHRvSlMscj1uLmxpYi5IYXNoZXIsZT1uLng2NCxkPWUuV29yZCxUPWUuV29yZEFycmF5LGU9bi5hbGdvLGVhPVthKDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksYSgxODk5NDQ3NDQxLDYwMjg5MTcyNSksYSgzMDQ5MzIzNDcxLDM5NjQ0ODQzOTkpLGEoMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxhKDk2MTk4NzE2Myw0MDgxNjI4NDcyKSxhKDE1MDg5NzA5OTMsMzA1MzgzNDI2NSksYSgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLGEoMjg3MDc2MzIyMSwzNjY0NjA5NTYwKSxhKDM2MjQzODEwODAsMjczNDg4MzM5NCksYSgzMTA1OTg0MDEsMTE2NDk5NjU0MiksYSg2MDcyMjUyNzgsMTMyMzYxMDc2NCksYSgxNDI2ODgxOTg3LDM1OTAzMDQ5OTQpLGEoMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxhKDIxNjIwNzgyMDYsOTkxMzM2MTEzKSxhKDI2MTQ4ODgxMDMsNjMzODAzMzE3KSxcclxuYSgzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgpLGEoMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxhKDQwMjIyMjQ3NzQsOTQ0NzExMTM5KSxhKDI2NDM0NzA3OCwyMzQxMjYyNzczKSxhKDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxhKDc3MDI1NTk4MywxNDk1OTkwOTAxKSxhKDEyNDkxNTAxMjIsMTg1NjQzMTIzNSksYSgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLGEoMTk5NjA2NDk4NiwyMTk4OTUwODM3KSxhKDI1NTQyMjA4ODIsMzk5OTcxOTMzOSksYSgyODIxODM0MzQ5LDc2Njc4NDAxNiksYSgyOTUyOTk2ODA4LDI1NjY1OTQ4NzkpLGEoMzIxMDMxMzY3MSwzMjAzMzM3OTU2KSxhKDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksYSgzNTg0NTI4NzExLDI0NjY5NDg5MDEpLGEoMTEzOTI2OTkzLDM3NTgzMjYzODMpLGEoMzM4MjQxODk1LDE2ODcxNzkzNiksYSg2NjYzMDcyMDUsMTE4ODE3OTk2NCksYSg3NzM1Mjk5MTIsMTU0NjA0NTczNCksYSgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLGEoMTM5NjE4MjI5MSxcclxuMjY0MzgzMzgyMyksYSgxNjk1MTgzNzAwLDIzNDM1MjczOTApLGEoMTk4NjY2MTA1MSwxMDE0NDc3NDgwKSxhKDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksYSgyNDU2OTU2MDM3LDM0NDA3NzYyNyksYSgyNzMwNDg1OTIxLDEyOTA4NjM0NjApLGEoMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxhKDMyNTk3MzA4MDAsMzUwNTk1MjY1NyksYSgzMzQ1NzY0NzcxLDEwNjIxNzAwOCksYSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLGEoMzYwMDM1MjgwNCwxNDMyNzI1Nzc2KSxhKDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCksYSgyNzU0MjMzNDQsODUxMTY5NzIwKSxhKDQzMDIyNzczNCwzMTAwODIzNzUyKSxhKDUwNjk0ODYxNiwxMzYzMjU4MTk1KSxhKDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxhKDg4Mzk5Nzg3NywzNzg1MDUwMjgwKSxhKDk1ODEzOTU3MSwzMzE4MzA3NDI3KSxhKDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksYSgxNTM3MDAyMDYzLDIwMDMwMzQ5OTUpLGEoMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5KSxcclxuYSgxOTU1NTYyMjIyLDE1NzU5OTAwMTIpLGEoMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxhKDIyMjc3MzA0NTIsMjcxNjkwNDMwNiksYSgyMzYxODUyNDI0LDQ0Mjc3NjA0NCksYSgyNDI4NDM2NDc0LDU5MzY5ODM0NCksYSgyNzU2NzM0MTg3LDM3MzMxMTAyNDkpLGEoMzIwNDAzMTQ3OSwyOTk5MzUxNTczKSxhKDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksYSgzMzkxNTY5NjE0LDM5MjgzODM5MDApLGEoMzUxNTI2NzI3MSw1NjYyODA3MTEpLGEoMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxhKDQxMTg2MzAyNzEsNDAwMDIzOTk5MiksYSgxMTY0MTg0NzQsMTkxNDEzODU1NCksYSgxNzQyOTI0MjEsMjczMTA1NTI3MCksYSgyODkzODAzNTYsMzIwMzk5MzAwNiksYSg0NjAzOTMyNjksMzIwNjIwMzE1KSxhKDY4NTQ3MTczMyw1ODc0OTY4MzYpLGEoODUyMTQyOTcxLDEwODY3OTI4NTEpLGEoMTAxNzAzNjI5OCwzNjU1NDMxMDApLGEoMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxhKDEyODgwMzM0NzAsXHJcbjM0MDk4NTUxNTgpLGEoMTUwMTUwNTk0OCw0MjM0NTA5ODY2KSxhKDE2MDcxNjc5MTUsOTg3MTY3NDY4KSxhKDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldLHY9W10sdz0wOzgwPnc7dysrKXZbd109YSgpO2U9ZS5TSEE1MTI9ci5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1uZXcgVC5pbml0KFtuZXcgZC5pbml0KDE3NzkwMzM3MDMsNDA4OTIzNTcyMCksbmV3IGQuaW5pdCgzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUpLG5ldyBkLmluaXQoMTAxMzkwNDI0Miw0MjcxMTc1NzIzKSxuZXcgZC5pbml0KDI3NzM0ODA3NjIsMTU5NTc1MDEyOSksbmV3IGQuaW5pdCgxMzU5ODkzMTE5LDI5MTc1NjUxMzcpLG5ldyBkLmluaXQoMjYwMDgyMjkyNCw3MjU1MTExOTkpLG5ldyBkLmluaXQoNTI4NzM0NjM1LDQyMTUzODk1NDcpLG5ldyBkLmluaXQoMTU0MTQ1OTIyNSwzMjcwMzMyMDkpXSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihhLGQpe2Zvcih2YXIgZj10aGlzLl9oYXNoLndvcmRzLFxyXG5GPWZbMF0sZT1mWzFdLG49ZlsyXSxyPWZbM10sRz1mWzRdLEg9Zls1XSxJPWZbNl0sZj1mWzddLHc9Ri5oaWdoLEo9Ri5sb3csWD1lLmhpZ2gsSz1lLmxvdyxZPW4uaGlnaCxMPW4ubG93LFo9ci5oaWdoLE09ci5sb3csJD1HLmhpZ2gsTj1HLmxvdyxhYT1ILmhpZ2gsTz1ILmxvdyxiYT1JLmhpZ2gsUD1JLmxvdyxjYT1mLmhpZ2gsUT1mLmxvdyxrPXcsZz1KLHo9WCx4PUssQT1ZLHk9TCxVPVosQj1NLGw9JCxoPU4sUj1hYSxDPU8sUz1iYSxEPVAsVj1jYSxFPVEsbT0wOzgwPm07bSsrKXt2YXIgcz12W21dO2lmKDE2Pm0pdmFyIGo9cy5oaWdoPWFbZCsyKm1dfDAsYj1zLmxvdz1hW2QrMiptKzFdfDA7ZWxzZXt2YXIgaj12W20tMTVdLGI9ai5oaWdoLHA9ai5sb3csaj0oYj4+PjF8cDw8MzEpXihiPj4+OHxwPDwyNCleYj4+PjcscD0ocD4+PjF8Yjw8MzEpXihwPj4+OHxiPDwyNCleKHA+Pj43fGI8PDI1KSx1PXZbbS0yXSxiPXUuaGlnaCxjPXUubG93LHU9KGI+Pj4xOXxjPDwxMyleKGI8PFxyXG4zfGM+Pj4yOSleYj4+PjYsYz0oYz4+PjE5fGI8PDEzKV4oYzw8M3xiPj4+MjkpXihjPj4+NnxiPDwyNiksYj12W20tN10sVz1iLmhpZ2gsdD12W20tMTZdLHE9dC5oaWdoLHQ9dC5sb3csYj1wK2IubG93LGo9aitXKyhiPj4+MDxwPj4+MD8xOjApLGI9YitjLGo9ait1KyhiPj4+MDxjPj4+MD8xOjApLGI9Yit0LGo9aitxKyhiPj4+MDx0Pj4+MD8xOjApO3MuaGlnaD1qO3MubG93PWJ9dmFyIFc9bCZSXn5sJlMsdD1oJkNefmgmRCxzPWsmel5rJkFeeiZBLFQ9ZyZ4XmcmeV54JnkscD0oaz4+PjI4fGc8PDQpXihrPDwzMHxnPj4+MileKGs8PDI1fGc+Pj43KSx1PShnPj4+Mjh8azw8NCleKGc8PDMwfGs+Pj4yKV4oZzw8MjV8az4+PjcpLGM9ZWFbbV0sZmE9Yy5oaWdoLGRhPWMubG93LGM9RSsoKGg+Pj4xNHxsPDwxOCleKGg+Pj4xOHxsPDwxNCleKGg8PDIzfGw+Pj45KSkscT1WKygobD4+PjE0fGg8PDE4KV4obD4+PjE4fGg8PDE0KV4obDw8MjN8aD4+PjkpKSsoYz4+PjA8RT4+PjA/MTpcclxuMCksYz1jK3QscT1xK1crKGM+Pj4wPHQ+Pj4wPzE6MCksYz1jK2RhLHE9cStmYSsoYz4+PjA8ZGE+Pj4wPzE6MCksYz1jK2IscT1xK2orKGM+Pj4wPGI+Pj4wPzE6MCksYj11K1Qscz1wK3MrKGI+Pj4wPHU+Pj4wPzE6MCksVj1TLEU9RCxTPVIsRD1DLFI9bCxDPWgsaD1CK2N8MCxsPVUrcSsoaD4+PjA8Qj4+PjA/MTowKXwwLFU9QSxCPXksQT16LHk9eCx6PWsseD1nLGc9YytifDAsaz1xK3MrKGc+Pj4wPGM+Pj4wPzE6MCl8MH1KPUYubG93PUorZztGLmhpZ2g9dytrKyhKPj4+MDxnPj4+MD8xOjApO0s9ZS5sb3c9Syt4O2UuaGlnaD1YK3orKEs+Pj4wPHg+Pj4wPzE6MCk7TD1uLmxvdz1MK3k7bi5oaWdoPVkrQSsoTD4+PjA8eT4+PjA/MTowKTtNPXIubG93PU0rQjtyLmhpZ2g9WitVKyhNPj4+MDxCPj4+MD8xOjApO049Ry5sb3c9TitoO0cuaGlnaD0kK2wrKE4+Pj4wPGg+Pj4wPzE6MCk7Tz1ILmxvdz1PK0M7SC5oaWdoPWFhK1IrKE8+Pj4wPEM+Pj4wPzE6MCk7UD1JLmxvdz1QK0Q7XHJcbkkuaGlnaD1iYStTKyhQPj4+MDxEPj4+MD8xOjApO1E9Zi5sb3c9UStFO2YuaGlnaD1jYStWKyhRPj4+MDxFPj4+MD8xOjApfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2RhdGEsZD1hLndvcmRzLGY9OCp0aGlzLl9uRGF0YUJ5dGVzLGU9OCphLnNpZ0J5dGVzO2RbZT4+PjVdfD0xMjg8PDI0LWUlMzI7ZFsoZSsxMjg+Pj4xMDw8NSkrMzBdPU1hdGguZmxvb3IoZi80Mjk0OTY3Mjk2KTtkWyhlKzEyOD4+PjEwPDw1KSszMV09ZjthLnNpZ0J5dGVzPTQqZC5sZW5ndGg7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzLl9oYXNoLnRvWDMyKCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGE9ci5jbG9uZS5jYWxsKHRoaXMpO2EuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpO3JldHVybiBhfSxibG9ja1NpemU6MzJ9KTtuLlNIQTUxMj1yLl9jcmVhdGVIZWxwZXIoZSk7bi5IbWFjU0hBNTEyPXIuX2NyZWF0ZUhtYWNIZWxwZXIoZSl9KSgpO1xyXG5cbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiBzaGEzODQtbWluLmpzXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qc1xyXG4oYykgMjAwOS0yMDEzIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxyXG4qL1xyXG4oZnVuY3Rpb24oKXt2YXIgYz1DcnlwdG9KUyxhPWMueDY0LGI9YS5Xb3JkLGU9YS5Xb3JkQXJyYXksYT1jLmFsZ28sZD1hLlNIQTUxMixhPWEuU0hBMzg0PWQuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IGUuaW5pdChbbmV3IGIuaW5pdCgzNDE4MDcwMzY1LDMyMzgzNzEwMzIpLG5ldyBiLmluaXQoMTY1NDI3MDI1MCw5MTQxNTA2NjMpLG5ldyBiLmluaXQoMjQzODUyOTM3MCw4MTI3MDI5OTkpLG5ldyBiLmluaXQoMzU1NDYyMzYwLDQxNDQ5MTI2OTcpLG5ldyBiLmluaXQoMTczMTQwNTQxNSw0MjkwNzc1ODU3KSxuZXcgYi5pbml0KDIzOTQxODAyMzEsMTc1MDYwMzAyNSksbmV3IGIuaW5pdCgzNjc1MDA4NTI1LDE2OTQwNzY4MzkpLG5ldyBiLmluaXQoMTIwMzA2MjgxMywzMjA0MDc1NDI4KV0pfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhPWQuX2RvRmluYWxpemUuY2FsbCh0aGlzKTthLnNpZ0J5dGVzLT0xNjtyZXR1cm4gYX19KTtjLlNIQTM4ND1cclxuZC5fY3JlYXRlSGVscGVyKGEpO2MuSG1hY1NIQTM4ND1kLl9jcmVhdGVIbWFjSGVscGVyKGEpfSkoKTtcclxuXG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBiNjRtYXA9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCI7dmFyIGI2NHBhZD1cIj1cIjtmdW5jdGlvbiBoZXgyYjY0KGQpe3ZhciBiO3ZhciBlO3ZhciBhPVwiXCI7Zm9yKGI9MDtiKzM8PWQubGVuZ3RoO2IrPTMpe2U9cGFyc2VJbnQoZC5zdWJzdHJpbmcoYixiKzMpLDE2KTthKz1iNjRtYXAuY2hhckF0KGU+PjYpK2I2NG1hcC5jaGFyQXQoZSY2Myl9aWYoYisxPT1kLmxlbmd0aCl7ZT1wYXJzZUludChkLnN1YnN0cmluZyhiLGIrMSksMTYpO2ErPWI2NG1hcC5jaGFyQXQoZTw8Mil9ZWxzZXtpZihiKzI9PWQubGVuZ3RoKXtlPXBhcnNlSW50KGQuc3Vic3RyaW5nKGIsYisyKSwxNik7YSs9YjY0bWFwLmNoYXJBdChlPj4yKStiNjRtYXAuY2hhckF0KChlJjMpPDw0KX19aWYoYjY0cGFkKXt3aGlsZSgoYS5sZW5ndGgmMyk+MCl7YSs9YjY0cGFkfX1yZXR1cm4gYX1mdW5jdGlvbiBiNjR0b2hleChmKXt2YXIgZD1cIlwiO3ZhciBlO3ZhciBiPTA7dmFyIGM7dmFyIGE7Zm9yKGU9MDtlPGYubGVuZ3RoOysrZSl7aWYoZi5jaGFyQXQoZSk9PWI2NHBhZCl7YnJlYWt9YT1iNjRtYXAuaW5kZXhPZihmLmNoYXJBdChlKSk7aWYoYTwwKXtjb250aW51ZX1pZihiPT0wKXtkKz1pbnQyY2hhcihhPj4yKTtjPWEmMztiPTF9ZWxzZXtpZihiPT0xKXtkKz1pbnQyY2hhcigoYzw8Mil8KGE+PjQpKTtjPWEmMTU7Yj0yfWVsc2V7aWYoYj09Mil7ZCs9aW50MmNoYXIoYyk7ZCs9aW50MmNoYXIoYT4+Mik7Yz1hJjM7Yj0zfWVsc2V7ZCs9aW50MmNoYXIoKGM8PDIpfChhPj40KSk7ZCs9aW50MmNoYXIoYSYxNSk7Yj0wfX19fWlmKGI9PTEpe2QrPWludDJjaGFyKGM8PDIpfXJldHVybiBkfWZ1bmN0aW9uIGI2NHRvQkEoZSl7dmFyIGQ9YjY0dG9oZXgoZSk7dmFyIGM7dmFyIGI9bmV3IEFycmF5KCk7Zm9yKGM9MDsyKmM8ZC5sZW5ndGg7KytjKXtiW2NdPXBhcnNlSW50KGQuc3Vic3RyaW5nKDIqYywyKmMrMiksMTYpfXJldHVybiBifTtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxudmFyIGRiaXRzO3ZhciBjYW5hcnk9MjQ0ODM3ODE0MDk0NTkwO3ZhciBqX2xtPSgoY2FuYXJ5JjE2Nzc3MjE1KT09MTU3MTUwNzApO2Z1bmN0aW9uIEJpZ0ludGVnZXIoZSxkLGYpe2lmKGUhPW51bGwpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXt0aGlzLmZyb21OdW1iZXIoZSxkLGYpfWVsc2V7aWYoZD09bnVsbCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpe3RoaXMuZnJvbVN0cmluZyhlLDI1Nil9ZWxzZXt0aGlzLmZyb21TdHJpbmcoZSxkKX19fX1mdW5jdGlvbiBuYmkoKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIobnVsbCl9ZnVuY3Rpb24gYW0xKGYsYSxiLGUsaCxnKXt3aGlsZSgtLWc+PTApe3ZhciBkPWEqdGhpc1tmKytdK2JbZV0raDtoPU1hdGguZmxvb3IoZC82NzEwODg2NCk7YltlKytdPWQmNjcxMDg4NjN9cmV0dXJuIGh9ZnVuY3Rpb24gYW0yKGYscSxyLGUsbyxhKXt2YXIgaz1xJjMyNzY3LHA9cT4+MTU7d2hpbGUoLS1hPj0wKXt2YXIgZD10aGlzW2ZdJjMyNzY3O3ZhciBnPXRoaXNbZisrXT4+MTU7dmFyIGI9cCpkK2cqaztkPWsqZCsoKGImMzI3NjcpPDwxNSkrcltlXSsobyYxMDczNzQxODIzKTtvPShkPj4+MzApKyhiPj4+MTUpK3AqZysobz4+PjMwKTtyW2UrK109ZCYxMDczNzQxODIzfXJldHVybiBvfWZ1bmN0aW9uIGFtMyhmLHEscixlLG8sYSl7dmFyIGs9cSYxNjM4MyxwPXE+PjE0O3doaWxlKC0tYT49MCl7dmFyIGQ9dGhpc1tmXSYxNjM4Mzt2YXIgZz10aGlzW2YrK10+PjE0O3ZhciBiPXAqZCtnKms7ZD1rKmQrKChiJjE2MzgzKTw8MTQpK3JbZV0rbztvPShkPj4yOCkrKGI+PjE0KStwKmc7cltlKytdPWQmMjY4NDM1NDU1fXJldHVybiBvfWlmKGpfbG0mJihuYXZpZ2F0b3IuYXBwTmFtZT09XCJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXJcIikpe0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMjtkYml0cz0zMH1lbHNle2lmKGpfbG0mJihuYXZpZ2F0b3IuYXBwTmFtZSE9XCJOZXRzY2FwZVwiKSl7QmlnSW50ZWdlci5wcm90b3R5cGUuYW09YW0xO2RiaXRzPTI2fWVsc2V7QmlnSW50ZWdlci5wcm90b3R5cGUuYW09YW0zO2RiaXRzPTI4fX1CaWdJbnRlZ2VyLnByb3RvdHlwZS5EQj1kYml0cztCaWdJbnRlZ2VyLnByb3RvdHlwZS5ETT0oKDE8PGRiaXRzKS0xKTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5EVj0oMTw8ZGJpdHMpO3ZhciBCSV9GUD01MjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5GVj1NYXRoLnBvdygyLEJJX0ZQKTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5GMT1CSV9GUC1kYml0cztCaWdJbnRlZ2VyLnByb3RvdHlwZS5GMj0yKmRiaXRzLUJJX0ZQO3ZhciBCSV9STT1cIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO3ZhciBCSV9SQz1uZXcgQXJyYXkoKTt2YXIgcnIsdnY7cnI9XCIwXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MDt2djw9OTsrK3Z2KXtCSV9SQ1tycisrXT12dn1ycj1cImFcIi5jaGFyQ29kZUF0KDApO2Zvcih2dj0xMDt2djwzNjsrK3Z2KXtCSV9SQ1tycisrXT12dn1ycj1cIkFcIi5jaGFyQ29kZUF0KDApO2Zvcih2dj0xMDt2djwzNjsrK3Z2KXtCSV9SQ1tycisrXT12dn1mdW5jdGlvbiBpbnQyY2hhcihhKXtyZXR1cm4gQklfUk0uY2hhckF0KGEpfWZ1bmN0aW9uIGludEF0KGIsYSl7dmFyIGQ9QklfUkNbYi5jaGFyQ29kZUF0KGEpXTtyZXR1cm4oZD09bnVsbCk/LTE6ZH1mdW5jdGlvbiBibnBDb3B5VG8oYil7Zm9yKHZhciBhPXRoaXMudC0xO2E+PTA7LS1hKXtiW2FdPXRoaXNbYV19Yi50PXRoaXMudDtiLnM9dGhpcy5zfWZ1bmN0aW9uIGJucEZyb21JbnQoYSl7dGhpcy50PTE7dGhpcy5zPShhPDApPy0xOjA7aWYoYT4wKXt0aGlzWzBdPWF9ZWxzZXtpZihhPC0xKXt0aGlzWzBdPWErdGhpcy5EVn1lbHNle3RoaXMudD0wfX19ZnVuY3Rpb24gbmJ2KGEpe3ZhciBiPW5iaSgpO2IuZnJvbUludChhKTtyZXR1cm4gYn1mdW5jdGlvbiBibnBGcm9tU3RyaW5nKGgsYyl7dmFyIGU7aWYoYz09MTYpe2U9NH1lbHNle2lmKGM9PTgpe2U9M31lbHNle2lmKGM9PTI1Nil7ZT04fWVsc2V7aWYoYz09Mil7ZT0xfWVsc2V7aWYoYz09MzIpe2U9NX1lbHNle2lmKGM9PTQpe2U9Mn1lbHNle3RoaXMuZnJvbVJhZGl4KGgsYyk7cmV0dXJufX19fX19dGhpcy50PTA7dGhpcy5zPTA7dmFyIGc9aC5sZW5ndGgsZD1mYWxzZSxmPTA7d2hpbGUoLS1nPj0wKXt2YXIgYT0oZT09OCk/aFtnXSYyNTU6aW50QXQoaCxnKTtpZihhPDApe2lmKGguY2hhckF0KGcpPT1cIi1cIil7ZD10cnVlfWNvbnRpbnVlfWQ9ZmFsc2U7aWYoZj09MCl7dGhpc1t0aGlzLnQrK109YX1lbHNle2lmKGYrZT50aGlzLkRCKXt0aGlzW3RoaXMudC0xXXw9KGEmKCgxPDwodGhpcy5EQi1mKSktMSkpPDxmO3RoaXNbdGhpcy50KytdPShhPj4odGhpcy5EQi1mKSl9ZWxzZXt0aGlzW3RoaXMudC0xXXw9YTw8Zn19Zis9ZTtpZihmPj10aGlzLkRCKXtmLT10aGlzLkRCfX1pZihlPT04JiYoaFswXSYxMjgpIT0wKXt0aGlzLnM9LTE7aWYoZj4wKXt0aGlzW3RoaXMudC0xXXw9KCgxPDwodGhpcy5EQi1mKSktMSk8PGZ9fXRoaXMuY2xhbXAoKTtpZihkKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKX19ZnVuY3Rpb24gYm5wQ2xhbXAoKXt2YXIgYT10aGlzLnMmdGhpcy5ETTt3aGlsZSh0aGlzLnQ+MCYmdGhpc1t0aGlzLnQtMV09PWEpey0tdGhpcy50fX1mdW5jdGlvbiBiblRvU3RyaW5nKGMpe2lmKHRoaXMuczwwKXtyZXR1cm5cIi1cIit0aGlzLm5lZ2F0ZSgpLnRvU3RyaW5nKGMpfXZhciBlO2lmKGM9PTE2KXtlPTR9ZWxzZXtpZihjPT04KXtlPTN9ZWxzZXtpZihjPT0yKXtlPTF9ZWxzZXtpZihjPT0zMil7ZT01fWVsc2V7aWYoYz09NCl7ZT0yfWVsc2V7cmV0dXJuIHRoaXMudG9SYWRpeChjKX19fX19dmFyIGc9KDE8PGUpLTEsbCxhPWZhbHNlLGg9XCJcIixmPXRoaXMudDt2YXIgaj10aGlzLkRCLShmKnRoaXMuREIpJWU7aWYoZi0tPjApe2lmKGo8dGhpcy5EQiYmKGw9dGhpc1tmXT4+aik+MCl7YT10cnVlO2g9aW50MmNoYXIobCl9d2hpbGUoZj49MCl7aWYoajxlKXtsPSh0aGlzW2ZdJigoMTw8aiktMSkpPDwoZS1qKTtsfD10aGlzWy0tZl0+PihqKz10aGlzLkRCLWUpfWVsc2V7bD0odGhpc1tmXT4+KGotPWUpKSZnO2lmKGo8PTApe2orPXRoaXMuREI7LS1mfX1pZihsPjApe2E9dHJ1ZX1pZihhKXtoKz1pbnQyY2hhcihsKX19fXJldHVybiBhP2g6XCIwXCJ9ZnVuY3Rpb24gYm5OZWdhdGUoKXt2YXIgYT1uYmkoKTtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyxhKTtyZXR1cm4gYX1mdW5jdGlvbiBibkFicygpe3JldHVybih0aGlzLnM8MCk/dGhpcy5uZWdhdGUoKTp0aGlzfWZ1bmN0aW9uIGJuQ29tcGFyZVRvKGIpe3ZhciBkPXRoaXMucy1iLnM7aWYoZCE9MCl7cmV0dXJuIGR9dmFyIGM9dGhpcy50O2Q9Yy1iLnQ7aWYoZCE9MCl7cmV0dXJuKHRoaXMuczwwKT8tZDpkfXdoaWxlKC0tYz49MCl7aWYoKGQ9dGhpc1tjXS1iW2NdKSE9MCl7cmV0dXJuIGR9fXJldHVybiAwfWZ1bmN0aW9uIG5iaXRzKGEpe3ZhciBjPTEsYjtpZigoYj1hPj4+MTYpIT0wKXthPWI7Yys9MTZ9aWYoKGI9YT4+OCkhPTApe2E9YjtjKz04fWlmKChiPWE+PjQpIT0wKXthPWI7Yys9NH1pZigoYj1hPj4yKSE9MCl7YT1iO2MrPTJ9aWYoKGI9YT4+MSkhPTApe2E9YjtjKz0xfXJldHVybiBjfWZ1bmN0aW9uIGJuQml0TGVuZ3RoKCl7aWYodGhpcy50PD0wKXtyZXR1cm4gMH1yZXR1cm4gdGhpcy5EQioodGhpcy50LTEpK25iaXRzKHRoaXNbdGhpcy50LTFdXih0aGlzLnMmdGhpcy5ETSkpfWZ1bmN0aW9uIGJucERMU2hpZnRUbyhjLGIpe3ZhciBhO2ZvcihhPXRoaXMudC0xO2E+PTA7LS1hKXtiW2ErY109dGhpc1thXX1mb3IoYT1jLTE7YT49MDstLWEpe2JbYV09MH1iLnQ9dGhpcy50K2M7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBEUlNoaWZ0VG8oYyxiKXtmb3IodmFyIGE9YzthPHRoaXMudDsrK2Epe2JbYS1jXT10aGlzW2FdfWIudD1NYXRoLm1heCh0aGlzLnQtYywwKTtiLnM9dGhpcy5zfWZ1bmN0aW9uIGJucExTaGlmdFRvKGosZSl7dmFyIGI9aiV0aGlzLkRCO3ZhciBhPXRoaXMuREItYjt2YXIgZz0oMTw8YSktMTt2YXIgZj1NYXRoLmZsb29yKGovdGhpcy5EQiksaD0odGhpcy5zPDxiKSZ0aGlzLkRNLGQ7Zm9yKGQ9dGhpcy50LTE7ZD49MDstLWQpe2VbZCtmKzFdPSh0aGlzW2RdPj5hKXxoO2g9KHRoaXNbZF0mZyk8PGJ9Zm9yKGQ9Zi0xO2Q+PTA7LS1kKXtlW2RdPTB9ZVtmXT1oO2UudD10aGlzLnQrZisxO2Uucz10aGlzLnM7ZS5jbGFtcCgpfWZ1bmN0aW9uIGJucFJTaGlmdFRvKGcsZCl7ZC5zPXRoaXMuczt2YXIgZT1NYXRoLmZsb29yKGcvdGhpcy5EQik7aWYoZT49dGhpcy50KXtkLnQ9MDtyZXR1cm59dmFyIGI9ZyV0aGlzLkRCO3ZhciBhPXRoaXMuREItYjt2YXIgZj0oMTw8YiktMTtkWzBdPXRoaXNbZV0+PmI7Zm9yKHZhciBjPWUrMTtjPHRoaXMudDsrK2Mpe2RbYy1lLTFdfD0odGhpc1tjXSZmKTw8YTtkW2MtZV09dGhpc1tjXT4+Yn1pZihiPjApe2RbdGhpcy50LWUtMV18PSh0aGlzLnMmZik8PGF9ZC50PXRoaXMudC1lO2QuY2xhbXAoKX1mdW5jdGlvbiBibnBTdWJUbyhkLGYpe3ZhciBlPTAsZz0wLGI9TWF0aC5taW4oZC50LHRoaXMudCk7d2hpbGUoZTxiKXtnKz10aGlzW2VdLWRbZV07ZltlKytdPWcmdGhpcy5ETTtnPj49dGhpcy5EQn1pZihkLnQ8dGhpcy50KXtnLT1kLnM7d2hpbGUoZTx0aGlzLnQpe2crPXRoaXNbZV07ZltlKytdPWcmdGhpcy5ETTtnPj49dGhpcy5EQn1nKz10aGlzLnN9ZWxzZXtnKz10aGlzLnM7d2hpbGUoZTxkLnQpe2ctPWRbZV07ZltlKytdPWcmdGhpcy5ETTtnPj49dGhpcy5EQn1nLT1kLnN9Zi5zPShnPDApPy0xOjA7aWYoZzwtMSl7ZltlKytdPXRoaXMuRFYrZ31lbHNle2lmKGc+MCl7ZltlKytdPWd9fWYudD1lO2YuY2xhbXAoKX1mdW5jdGlvbiBibnBNdWx0aXBseVRvKGMsZSl7dmFyIGI9dGhpcy5hYnMoKSxmPWMuYWJzKCk7dmFyIGQ9Yi50O2UudD1kK2YudDt3aGlsZSgtLWQ+PTApe2VbZF09MH1mb3IoZD0wO2Q8Zi50OysrZCl7ZVtkK2IudF09Yi5hbSgwLGZbZF0sZSxkLDAsYi50KX1lLnM9MDtlLmNsYW1wKCk7aWYodGhpcy5zIT1jLnMpe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyhlLGUpfX1mdW5jdGlvbiBibnBTcXVhcmVUbyhkKXt2YXIgYT10aGlzLmFicygpO3ZhciBiPWQudD0yKmEudDt3aGlsZSgtLWI+PTApe2RbYl09MH1mb3IoYj0wO2I8YS50LTE7KytiKXt2YXIgZT1hLmFtKGIsYVtiXSxkLDIqYiwwLDEpO2lmKChkW2IrYS50XSs9YS5hbShiKzEsMiphW2JdLGQsMipiKzEsZSxhLnQtYi0xKSk+PWEuRFYpe2RbYithLnRdLT1hLkRWO2RbYithLnQrMV09MX19aWYoZC50PjApe2RbZC50LTFdKz1hLmFtKGIsYVtiXSxkLDIqYiwwLDEpfWQucz0wO2QuY2xhbXAoKX1mdW5jdGlvbiBibnBEaXZSZW1UbyhuLGgsZyl7dmFyIHc9bi5hYnMoKTtpZih3LnQ8PTApe3JldHVybn12YXIgaz10aGlzLmFicygpO2lmKGsudDx3LnQpe2lmKGghPW51bGwpe2guZnJvbUludCgwKX1pZihnIT1udWxsKXt0aGlzLmNvcHlUbyhnKX1yZXR1cm59aWYoZz09bnVsbCl7Zz1uYmkoKX12YXIgZD1uYmkoKSxhPXRoaXMucyxsPW4uczt2YXIgdj10aGlzLkRCLW5iaXRzKHdbdy50LTFdKTtpZih2PjApe3cubFNoaWZ0VG8odixkKTtrLmxTaGlmdFRvKHYsZyl9ZWxzZXt3LmNvcHlUbyhkKTtrLmNvcHlUbyhnKX12YXIgcD1kLnQ7dmFyIGI9ZFtwLTFdO2lmKGI9PTApe3JldHVybn12YXIgbz1iKigxPDx0aGlzLkYxKSsoKHA+MSk/ZFtwLTJdPj50aGlzLkYyOjApO3ZhciBBPXRoaXMuRlYvbyx6PSgxPDx0aGlzLkYxKS9vLHg9MTw8dGhpcy5GMjt2YXIgdT1nLnQscz11LXAsZj0oaD09bnVsbCk/bmJpKCk6aDtkLmRsU2hpZnRUbyhzLGYpO2lmKGcuY29tcGFyZVRvKGYpPj0wKXtnW2cudCsrXT0xO2cuc3ViVG8oZixnKX1CaWdJbnRlZ2VyLk9ORS5kbFNoaWZ0VG8ocCxmKTtmLnN1YlRvKGQsZCk7d2hpbGUoZC50PHApe2RbZC50KytdPTB9d2hpbGUoLS1zPj0wKXt2YXIgYz0oZ1stLXVdPT1iKT90aGlzLkRNOk1hdGguZmxvb3IoZ1t1XSpBKyhnW3UtMV0reCkqeik7aWYoKGdbdV0rPWQuYW0oMCxjLGcscywwLHApKTxjKXtkLmRsU2hpZnRUbyhzLGYpO2cuc3ViVG8oZixnKTt3aGlsZShnW3VdPC0tYyl7Zy5zdWJUbyhmLGcpfX19aWYoaCE9bnVsbCl7Zy5kclNoaWZ0VG8ocCxoKTtpZihhIT1sKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8oaCxoKX19Zy50PXA7Zy5jbGFtcCgpO2lmKHY+MCl7Zy5yU2hpZnRUbyh2LGcpfWlmKGE8MCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKGcsZyl9fWZ1bmN0aW9uIGJuTW9kKGIpe3ZhciBjPW5iaSgpO3RoaXMuYWJzKCkuZGl2UmVtVG8oYixudWxsLGMpO2lmKHRoaXMuczwwJiZjLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pPjApe2Iuc3ViVG8oYyxjKX1yZXR1cm4gY31mdW5jdGlvbiBDbGFzc2ljKGEpe3RoaXMubT1hfWZ1bmN0aW9uIGNDb252ZXJ0KGEpe2lmKGEuczwwfHxhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXtyZXR1cm4gYS5tb2QodGhpcy5tKX1lbHNle3JldHVybiBhfX1mdW5jdGlvbiBjUmV2ZXJ0KGEpe3JldHVybiBhfWZ1bmN0aW9uIGNSZWR1Y2UoYSl7YS5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxhKX1mdW5jdGlvbiBjTXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfWZ1bmN0aW9uIGNTcXJUbyhhLGIpe2Euc3F1YXJlVG8oYik7dGhpcy5yZWR1Y2UoYil9Q2xhc3NpYy5wcm90b3R5cGUuY29udmVydD1jQ29udmVydDtDbGFzc2ljLnByb3RvdHlwZS5yZXZlcnQ9Y1JldmVydDtDbGFzc2ljLnByb3RvdHlwZS5yZWR1Y2U9Y1JlZHVjZTtDbGFzc2ljLnByb3RvdHlwZS5tdWxUbz1jTXVsVG87Q2xhc3NpYy5wcm90b3R5cGUuc3FyVG89Y1NxclRvO2Z1bmN0aW9uIGJucEludkRpZ2l0KCl7aWYodGhpcy50PDEpe3JldHVybiAwfXZhciBhPXRoaXNbMF07aWYoKGEmMSk9PTApe3JldHVybiAwfXZhciBiPWEmMztiPShiKigyLShhJjE1KSpiKSkmMTU7Yj0oYiooMi0oYSYyNTUpKmIpKSYyNTU7Yj0oYiooMi0oKChhJjY1NTM1KSpiKSY2NTUzNSkpKSY2NTUzNTtiPShiKigyLWEqYiV0aGlzLkRWKSkldGhpcy5EVjtyZXR1cm4oYj4wKT90aGlzLkRWLWI6LWJ9ZnVuY3Rpb24gTW9udGdvbWVyeShhKXt0aGlzLm09YTt0aGlzLm1wPWEuaW52RGlnaXQoKTt0aGlzLm1wbD10aGlzLm1wJjMyNzY3O3RoaXMubXBoPXRoaXMubXA+PjE1O3RoaXMudW09KDE8PChhLkRCLTE1KSktMTt0aGlzLm10Mj0yKmEudH1mdW5jdGlvbiBtb250Q29udmVydChhKXt2YXIgYj1uYmkoKTthLmFicygpLmRsU2hpZnRUbyh0aGlzLm0udCxiKTtiLmRpdlJlbVRvKHRoaXMubSxudWxsLGIpO2lmKGEuczwwJiZiLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pPjApe3RoaXMubS5zdWJUbyhiLGIpfXJldHVybiBifWZ1bmN0aW9uIG1vbnRSZXZlcnQoYSl7dmFyIGI9bmJpKCk7YS5jb3B5VG8oYik7dGhpcy5yZWR1Y2UoYik7cmV0dXJuIGJ9ZnVuY3Rpb24gbW9udFJlZHVjZShhKXt3aGlsZShhLnQ8PXRoaXMubXQyKXthW2EudCsrXT0wfWZvcih2YXIgYz0wO2M8dGhpcy5tLnQ7KytjKXt2YXIgYj1hW2NdJjMyNzY3O3ZhciBkPShiKnRoaXMubXBsKygoKGIqdGhpcy5tcGgrKGFbY10+PjE1KSp0aGlzLm1wbCkmdGhpcy51bSk8PDE1KSkmYS5ETTtiPWMrdGhpcy5tLnQ7YVtiXSs9dGhpcy5tLmFtKDAsZCxhLGMsMCx0aGlzLm0udCk7d2hpbGUoYVtiXT49YS5EVil7YVtiXS09YS5EVjthWysrYl0rK319YS5jbGFtcCgpO2EuZHJTaGlmdFRvKHRoaXMubS50LGEpO2lmKGEuY29tcGFyZVRvKHRoaXMubSk+PTApe2Euc3ViVG8odGhpcy5tLGEpfX1mdW5jdGlvbiBtb250U3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfWZ1bmN0aW9uIG1vbnRNdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYik7dGhpcy5yZWR1Y2UoYil9TW9udGdvbWVyeS5wcm90b3R5cGUuY29udmVydD1tb250Q29udmVydDtNb250Z29tZXJ5LnByb3RvdHlwZS5yZXZlcnQ9bW9udFJldmVydDtNb250Z29tZXJ5LnByb3RvdHlwZS5yZWR1Y2U9bW9udFJlZHVjZTtNb250Z29tZXJ5LnByb3RvdHlwZS5tdWxUbz1tb250TXVsVG87TW9udGdvbWVyeS5wcm90b3R5cGUuc3FyVG89bW9udFNxclRvO2Z1bmN0aW9uIGJucElzRXZlbigpe3JldHVybigodGhpcy50PjApPyh0aGlzWzBdJjEpOnRoaXMucyk9PTB9ZnVuY3Rpb24gYm5wRXhwKGgsail7aWYoaD40Mjk0OTY3Mjk1fHxoPDEpe3JldHVybiBCaWdJbnRlZ2VyLk9ORX12YXIgZj1uYmkoKSxhPW5iaSgpLGQ9ai5jb252ZXJ0KHRoaXMpLGM9bmJpdHMoaCktMTtkLmNvcHlUbyhmKTt3aGlsZSgtLWM+PTApe2ouc3FyVG8oZixhKTtpZigoaCYoMTw8YykpPjApe2oubXVsVG8oYSxkLGYpfWVsc2V7dmFyIGI9ZjtmPWE7YT1ifX1yZXR1cm4gai5yZXZlcnQoZil9ZnVuY3Rpb24gYm5Nb2RQb3dJbnQoYixhKXt2YXIgYztpZihiPDI1Nnx8YS5pc0V2ZW4oKSl7Yz1uZXcgQ2xhc3NpYyhhKX1lbHNle2M9bmV3IE1vbnRnb21lcnkoYSl9cmV0dXJuIHRoaXMuZXhwKGIsYyl9QmlnSW50ZWdlci5wcm90b3R5cGUuY29weVRvPWJucENvcHlUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tSW50PWJucEZyb21JbnQ7QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbVN0cmluZz1ibnBGcm9tU3RyaW5nO0JpZ0ludGVnZXIucHJvdG90eXBlLmNsYW1wPWJucENsYW1wO0JpZ0ludGVnZXIucHJvdG90eXBlLmRsU2hpZnRUbz1ibnBETFNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuZHJTaGlmdFRvPWJucERSU2hpZnRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5sU2hpZnRUbz1ibnBMU2hpZnRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5yU2hpZnRUbz1ibnBSU2hpZnRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5zdWJUbz1ibnBTdWJUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVRvPWJucE11bHRpcGx5VG87QmlnSW50ZWdlci5wcm90b3R5cGUuc3F1YXJlVG89Ym5wU3F1YXJlVG87QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2UmVtVG89Ym5wRGl2UmVtVG87QmlnSW50ZWdlci5wcm90b3R5cGUuaW52RGlnaXQ9Ym5wSW52RGlnaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuaXNFdmVuPWJucElzRXZlbjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5leHA9Ym5wRXhwO0JpZ0ludGVnZXIucHJvdG90eXBlLnRvU3RyaW5nPWJuVG9TdHJpbmc7QmlnSW50ZWdlci5wcm90b3R5cGUubmVnYXRlPWJuTmVnYXRlO0JpZ0ludGVnZXIucHJvdG90eXBlLmFicz1ibkFicztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jb21wYXJlVG89Ym5Db21wYXJlVG87QmlnSW50ZWdlci5wcm90b3R5cGUuYml0TGVuZ3RoPWJuQml0TGVuZ3RoO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZD1ibk1vZDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RQb3dJbnQ9Ym5Nb2RQb3dJbnQ7QmlnSW50ZWdlci5aRVJPPW5idigwKTtCaWdJbnRlZ2VyLk9ORT1uYnYoMSk7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbmZ1bmN0aW9uIGJuQ2xvbmUoKXt2YXIgYT1uYmkoKTt0aGlzLmNvcHlUbyhhKTtyZXR1cm4gYX1mdW5jdGlvbiBibkludFZhbHVlKCl7aWYodGhpcy5zPDApe2lmKHRoaXMudD09MSl7cmV0dXJuIHRoaXNbMF0tdGhpcy5EVn1lbHNle2lmKHRoaXMudD09MCl7cmV0dXJuIC0xfX19ZWxzZXtpZih0aGlzLnQ9PTEpe3JldHVybiB0aGlzWzBdfWVsc2V7aWYodGhpcy50PT0wKXtyZXR1cm4gMH19fXJldHVybigodGhpc1sxXSYoKDE8PCgzMi10aGlzLkRCKSktMSkpPDx0aGlzLkRCKXx0aGlzWzBdfWZ1bmN0aW9uIGJuQnl0ZVZhbHVlKCl7cmV0dXJuKHRoaXMudD09MCk/dGhpcy5zOih0aGlzWzBdPDwyNCk+PjI0fWZ1bmN0aW9uIGJuU2hvcnRWYWx1ZSgpe3JldHVybih0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MTYpPj4xNn1mdW5jdGlvbiBibnBDaHVua1NpemUoYSl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5MTjIqdGhpcy5EQi9NYXRoLmxvZyhhKSl9ZnVuY3Rpb24gYm5TaWdOdW0oKXtpZih0aGlzLnM8MCl7cmV0dXJuIC0xfWVsc2V7aWYodGhpcy50PD0wfHwodGhpcy50PT0xJiZ0aGlzWzBdPD0wKSl7cmV0dXJuIDB9ZWxzZXtyZXR1cm4gMX19fWZ1bmN0aW9uIGJucFRvUmFkaXgoYyl7aWYoYz09bnVsbCl7Yz0xMH1pZih0aGlzLnNpZ251bSgpPT0wfHxjPDJ8fGM+MzYpe3JldHVyblwiMFwifXZhciBmPXRoaXMuY2h1bmtTaXplKGMpO3ZhciBlPU1hdGgucG93KGMsZik7dmFyIGk9bmJ2KGUpLGo9bmJpKCksaD1uYmkoKSxnPVwiXCI7dGhpcy5kaXZSZW1UbyhpLGosaCk7d2hpbGUoai5zaWdudW0oKT4wKXtnPShlK2guaW50VmFsdWUoKSkudG9TdHJpbmcoYykuc3Vic3RyKDEpK2c7ai5kaXZSZW1UbyhpLGosaCl9cmV0dXJuIGguaW50VmFsdWUoKS50b1N0cmluZyhjKStnfWZ1bmN0aW9uIGJucEZyb21SYWRpeChtLGgpe3RoaXMuZnJvbUludCgwKTtpZihoPT1udWxsKXtoPTEwfXZhciBmPXRoaXMuY2h1bmtTaXplKGgpO3ZhciBnPU1hdGgucG93KGgsZiksZT1mYWxzZSxhPTAsbD0wO2Zvcih2YXIgYz0wO2M8bS5sZW5ndGg7KytjKXt2YXIgaz1pbnRBdChtLGMpO2lmKGs8MCl7aWYobS5jaGFyQXQoYyk9PVwiLVwiJiZ0aGlzLnNpZ251bSgpPT0wKXtlPXRydWV9Y29udGludWV9bD1oKmwraztpZigrK2E+PWYpe3RoaXMuZE11bHRpcGx5KGcpO3RoaXMuZEFkZE9mZnNldChsLDApO2E9MDtsPTB9fWlmKGE+MCl7dGhpcy5kTXVsdGlwbHkoTWF0aC5wb3coaCxhKSk7dGhpcy5kQWRkT2Zmc2V0KGwsMCl9aWYoZSl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIGJucEZyb21OdW1iZXIoZixlLGgpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXtpZihmPDIpe3RoaXMuZnJvbUludCgxKX1lbHNle3RoaXMuZnJvbU51bWJlcihmLGgpO2lmKCF0aGlzLnRlc3RCaXQoZi0xKSl7dGhpcy5iaXR3aXNlVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGYtMSksb3Bfb3IsdGhpcyl9aWYodGhpcy5pc0V2ZW4oKSl7dGhpcy5kQWRkT2Zmc2V0KDEsMCl9d2hpbGUoIXRoaXMuaXNQcm9iYWJsZVByaW1lKGUpKXt0aGlzLmRBZGRPZmZzZXQoMiwwKTtpZih0aGlzLmJpdExlbmd0aCgpPmYpe3RoaXMuc3ViVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGYtMSksdGhpcyl9fX19ZWxzZXt2YXIgZD1uZXcgQXJyYXkoKSxnPWYmNztkLmxlbmd0aD0oZj4+MykrMTtlLm5leHRCeXRlcyhkKTtpZihnPjApe2RbMF0mPSgoMTw8ZyktMSl9ZWxzZXtkWzBdPTB9dGhpcy5mcm9tU3RyaW5nKGQsMjU2KX19ZnVuY3Rpb24gYm5Ub0J5dGVBcnJheSgpe3ZhciBiPXRoaXMudCxjPW5ldyBBcnJheSgpO2NbMF09dGhpcy5zO3ZhciBlPXRoaXMuREItKGIqdGhpcy5EQiklOCxmLGE9MDtpZihiLS0+MCl7aWYoZTx0aGlzLkRCJiYoZj10aGlzW2JdPj5lKSE9KHRoaXMucyZ0aGlzLkRNKT4+ZSl7Y1thKytdPWZ8KHRoaXMuczw8KHRoaXMuREItZSkpfXdoaWxlKGI+PTApe2lmKGU8OCl7Zj0odGhpc1tiXSYoKDE8PGUpLTEpKTw8KDgtZSk7Znw9dGhpc1stLWJdPj4oZSs9dGhpcy5EQi04KX1lbHNle2Y9KHRoaXNbYl0+PihlLT04KSkmMjU1O2lmKGU8PTApe2UrPXRoaXMuREI7LS1ifX1pZigoZiYxMjgpIT0wKXtmfD0tMjU2fWlmKGE9PTAmJih0aGlzLnMmMTI4KSE9KGYmMTI4KSl7KythfWlmKGE+MHx8ZiE9dGhpcy5zKXtjW2ErK109Zn19fXJldHVybiBjfWZ1bmN0aW9uIGJuRXF1YWxzKGIpe3JldHVybih0aGlzLmNvbXBhcmVUbyhiKT09MCl9ZnVuY3Rpb24gYm5NaW4oYil7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGIpPDApP3RoaXM6Yn1mdW5jdGlvbiBibk1heChiKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYik+MCk/dGhpczpifWZ1bmN0aW9uIGJucEJpdHdpc2VUbyhjLGgsZSl7dmFyIGQsZyxiPU1hdGgubWluKGMudCx0aGlzLnQpO2ZvcihkPTA7ZDxiOysrZCl7ZVtkXT1oKHRoaXNbZF0sY1tkXSl9aWYoYy50PHRoaXMudCl7Zz1jLnMmdGhpcy5ETTtmb3IoZD1iO2Q8dGhpcy50OysrZCl7ZVtkXT1oKHRoaXNbZF0sZyl9ZS50PXRoaXMudH1lbHNle2c9dGhpcy5zJnRoaXMuRE07Zm9yKGQ9YjtkPGMudDsrK2Qpe2VbZF09aChnLGNbZF0pfWUudD1jLnR9ZS5zPWgodGhpcy5zLGMucyk7ZS5jbGFtcCgpfWZ1bmN0aW9uIG9wX2FuZChhLGIpe3JldHVybiBhJmJ9ZnVuY3Rpb24gYm5BbmQoYil7dmFyIGM9bmJpKCk7dGhpcy5iaXR3aXNlVG8oYixvcF9hbmQsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gb3Bfb3IoYSxiKXtyZXR1cm4gYXxifWZ1bmN0aW9uIGJuT3IoYil7dmFyIGM9bmJpKCk7dGhpcy5iaXR3aXNlVG8oYixvcF9vcixjKTtyZXR1cm4gY31mdW5jdGlvbiBvcF94b3IoYSxiKXtyZXR1cm4gYV5ifWZ1bmN0aW9uIGJuWG9yKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfeG9yLGMpO3JldHVybiBjfWZ1bmN0aW9uIG9wX2FuZG5vdChhLGIpe3JldHVybiBhJn5ifWZ1bmN0aW9uIGJuQW5kTm90KGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfYW5kbm90LGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuTm90KCl7dmFyIGI9bmJpKCk7Zm9yKHZhciBhPTA7YTx0aGlzLnQ7KythKXtiW2FdPXRoaXMuRE0mfnRoaXNbYV19Yi50PXRoaXMudDtiLnM9fnRoaXMucztyZXR1cm4gYn1mdW5jdGlvbiBiblNoaWZ0TGVmdChiKXt2YXIgYT1uYmkoKTtpZihiPDApe3RoaXMuclNoaWZ0VG8oLWIsYSl9ZWxzZXt0aGlzLmxTaGlmdFRvKGIsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gYm5TaGlmdFJpZ2h0KGIpe3ZhciBhPW5iaSgpO2lmKGI8MCl7dGhpcy5sU2hpZnRUbygtYixhKX1lbHNle3RoaXMuclNoaWZ0VG8oYixhKX1yZXR1cm4gYX1mdW5jdGlvbiBsYml0KGEpe2lmKGE9PTApe3JldHVybiAtMX12YXIgYj0wO2lmKChhJjY1NTM1KT09MCl7YT4+PTE2O2IrPTE2fWlmKChhJjI1NSk9PTApe2E+Pj04O2IrPTh9aWYoKGEmMTUpPT0wKXthPj49NDtiKz00fWlmKChhJjMpPT0wKXthPj49MjtiKz0yfWlmKChhJjEpPT0wKXsrK2J9cmV0dXJuIGJ9ZnVuY3Rpb24gYm5HZXRMb3dlc3RTZXRCaXQoKXtmb3IodmFyIGE9MDthPHRoaXMudDsrK2Epe2lmKHRoaXNbYV0hPTApe3JldHVybiBhKnRoaXMuREIrbGJpdCh0aGlzW2FdKX19aWYodGhpcy5zPDApe3JldHVybiB0aGlzLnQqdGhpcy5EQn1yZXR1cm4gLTF9ZnVuY3Rpb24gY2JpdChhKXt2YXIgYj0wO3doaWxlKGEhPTApe2EmPWEtMTsrK2J9cmV0dXJuIGJ9ZnVuY3Rpb24gYm5CaXRDb3VudCgpe3ZhciBjPTAsYT10aGlzLnMmdGhpcy5ETTtmb3IodmFyIGI9MDtiPHRoaXMudDsrK2Ipe2MrPWNiaXQodGhpc1tiXV5hKX1yZXR1cm4gY31mdW5jdGlvbiBiblRlc3RCaXQoYil7dmFyIGE9TWF0aC5mbG9vcihiL3RoaXMuREIpO2lmKGE+PXRoaXMudCl7cmV0dXJuKHRoaXMucyE9MCl9cmV0dXJuKCh0aGlzW2FdJigxPDwoYiV0aGlzLkRCKSkpIT0wKX1mdW5jdGlvbiBibnBDaGFuZ2VCaXQoYyxiKXt2YXIgYT1CaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQoYyk7dGhpcy5iaXR3aXNlVG8oYSxiLGEpO3JldHVybiBhfWZ1bmN0aW9uIGJuU2V0Qml0KGEpe3JldHVybiB0aGlzLmNoYW5nZUJpdChhLG9wX29yKX1mdW5jdGlvbiBibkNsZWFyQml0KGEpe3JldHVybiB0aGlzLmNoYW5nZUJpdChhLG9wX2FuZG5vdCl9ZnVuY3Rpb24gYm5GbGlwQml0KGEpe3JldHVybiB0aGlzLmNoYW5nZUJpdChhLG9wX3hvcil9ZnVuY3Rpb24gYm5wQWRkVG8oZCxmKXt2YXIgZT0wLGc9MCxiPU1hdGgubWluKGQudCx0aGlzLnQpO3doaWxlKGU8Yil7Zys9dGhpc1tlXStkW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9aWYoZC50PHRoaXMudCl7Zys9ZC5zO3doaWxlKGU8dGhpcy50KXtnKz10aGlzW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9dGhpcy5zfWVsc2V7Zys9dGhpcy5zO3doaWxlKGU8ZC50KXtnKz1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9ZC5zfWYucz0oZzwwKT8tMTowO2lmKGc+MCl7ZltlKytdPWd9ZWxzZXtpZihnPC0xKXtmW2UrK109dGhpcy5EVitnfX1mLnQ9ZTtmLmNsYW1wKCl9ZnVuY3Rpb24gYm5BZGQoYil7dmFyIGM9bmJpKCk7dGhpcy5hZGRUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuU3VidHJhY3QoYil7dmFyIGM9bmJpKCk7dGhpcy5zdWJUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuTXVsdGlwbHkoYil7dmFyIGM9bmJpKCk7dGhpcy5tdWx0aXBseVRvKGIsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gYm5TcXVhcmUoKXt2YXIgYT1uYmkoKTt0aGlzLnNxdWFyZVRvKGEpO3JldHVybiBhfWZ1bmN0aW9uIGJuRGl2aWRlKGIpe3ZhciBjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixjLG51bGwpO3JldHVybiBjfWZ1bmN0aW9uIGJuUmVtYWluZGVyKGIpe3ZhciBjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixudWxsLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuRGl2aWRlQW5kUmVtYWluZGVyKGIpe3ZhciBkPW5iaSgpLGM9bmJpKCk7dGhpcy5kaXZSZW1UbyhiLGQsYyk7cmV0dXJuIG5ldyBBcnJheShkLGMpfWZ1bmN0aW9uIGJucERNdWx0aXBseShhKXt0aGlzW3RoaXMudF09dGhpcy5hbSgwLGEtMSx0aGlzLDAsMCx0aGlzLnQpOysrdGhpcy50O3RoaXMuY2xhbXAoKX1mdW5jdGlvbiBibnBEQWRkT2Zmc2V0KGIsYSl7aWYoYj09MCl7cmV0dXJufXdoaWxlKHRoaXMudDw9YSl7dGhpc1t0aGlzLnQrK109MH10aGlzW2FdKz1iO3doaWxlKHRoaXNbYV0+PXRoaXMuRFYpe3RoaXNbYV0tPXRoaXMuRFY7aWYoKythPj10aGlzLnQpe3RoaXNbdGhpcy50KytdPTB9Kyt0aGlzW2FdfX1mdW5jdGlvbiBOdWxsRXhwKCl7fWZ1bmN0aW9uIG5Ob3AoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gbk11bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKX1mdW5jdGlvbiBuU3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpfU51bGxFeHAucHJvdG90eXBlLmNvbnZlcnQ9bk5vcDtOdWxsRXhwLnByb3RvdHlwZS5yZXZlcnQ9bk5vcDtOdWxsRXhwLnByb3RvdHlwZS5tdWxUbz1uTXVsVG87TnVsbEV4cC5wcm90b3R5cGUuc3FyVG89blNxclRvO2Z1bmN0aW9uIGJuUG93KGEpe3JldHVybiB0aGlzLmV4cChhLG5ldyBOdWxsRXhwKCkpfWZ1bmN0aW9uIGJucE11bHRpcGx5TG93ZXJUbyhiLGYsZSl7dmFyIGQ9TWF0aC5taW4odGhpcy50K2IudCxmKTtlLnM9MDtlLnQ9ZDt3aGlsZShkPjApe2VbLS1kXT0wfXZhciBjO2ZvcihjPWUudC10aGlzLnQ7ZDxjOysrZCl7ZVtkK3RoaXMudF09dGhpcy5hbSgwLGJbZF0sZSxkLDAsdGhpcy50KX1mb3IoYz1NYXRoLm1pbihiLnQsZik7ZDxjOysrZCl7dGhpcy5hbSgwLGJbZF0sZSxkLDAsZi1kKX1lLmNsYW1wKCl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlVcHBlclRvKGIsZSxkKXstLWU7dmFyIGM9ZC50PXRoaXMudCtiLnQtZTtkLnM9MDt3aGlsZSgtLWM+PTApe2RbY109MH1mb3IoYz1NYXRoLm1heChlLXRoaXMudCwwKTtjPGIudDsrK2Mpe2RbdGhpcy50K2MtZV09dGhpcy5hbShlLWMsYltjXSxkLDAsMCx0aGlzLnQrYy1lKX1kLmNsYW1wKCk7ZC5kclNoaWZ0VG8oMSxkKX1mdW5jdGlvbiBCYXJyZXR0KGEpe3RoaXMucjI9bmJpKCk7dGhpcy5xMz1uYmkoKTtCaWdJbnRlZ2VyLk9ORS5kbFNoaWZ0VG8oMiphLnQsdGhpcy5yMik7dGhpcy5tdT10aGlzLnIyLmRpdmlkZShhKTt0aGlzLm09YX1mdW5jdGlvbiBiYXJyZXR0Q29udmVydChhKXtpZihhLnM8MHx8YS50PjIqdGhpcy5tLnQpe3JldHVybiBhLm1vZCh0aGlzLm0pfWVsc2V7aWYoYS5jb21wYXJlVG8odGhpcy5tKTwwKXtyZXR1cm4gYX1lbHNle3ZhciBiPW5iaSgpO2EuY29weVRvKGIpO3RoaXMucmVkdWNlKGIpO3JldHVybiBifX19ZnVuY3Rpb24gYmFycmV0dFJldmVydChhKXtyZXR1cm4gYX1mdW5jdGlvbiBiYXJyZXR0UmVkdWNlKGEpe2EuZHJTaGlmdFRvKHRoaXMubS50LTEsdGhpcy5yMik7aWYoYS50PnRoaXMubS50KzEpe2EudD10aGlzLm0udCsxO2EuY2xhbXAoKX10aGlzLm11Lm11bHRpcGx5VXBwZXJUbyh0aGlzLnIyLHRoaXMubS50KzEsdGhpcy5xMyk7dGhpcy5tLm11bHRpcGx5TG93ZXJUbyh0aGlzLnEzLHRoaXMubS50KzEsdGhpcy5yMik7d2hpbGUoYS5jb21wYXJlVG8odGhpcy5yMik8MCl7YS5kQWRkT2Zmc2V0KDEsdGhpcy5tLnQrMSl9YS5zdWJUbyh0aGlzLnIyLGEpO3doaWxlKGEuY29tcGFyZVRvKHRoaXMubSk+PTApe2Euc3ViVG8odGhpcy5tLGEpfX1mdW5jdGlvbiBiYXJyZXR0U3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfWZ1bmN0aW9uIGJhcnJldHRNdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYik7dGhpcy5yZWR1Y2UoYil9QmFycmV0dC5wcm90b3R5cGUuY29udmVydD1iYXJyZXR0Q29udmVydDtCYXJyZXR0LnByb3RvdHlwZS5yZXZlcnQ9YmFycmV0dFJldmVydDtCYXJyZXR0LnByb3RvdHlwZS5yZWR1Y2U9YmFycmV0dFJlZHVjZTtCYXJyZXR0LnByb3RvdHlwZS5tdWxUbz1iYXJyZXR0TXVsVG87QmFycmV0dC5wcm90b3R5cGUuc3FyVG89YmFycmV0dFNxclRvO2Z1bmN0aW9uIGJuTW9kUG93KHEsZil7dmFyIG89cS5iaXRMZW5ndGgoKSxoLGI9bmJ2KDEpLHY7aWYobzw9MCl7cmV0dXJuIGJ9ZWxzZXtpZihvPDE4KXtoPTF9ZWxzZXtpZihvPDQ4KXtoPTN9ZWxzZXtpZihvPDE0NCl7aD00fWVsc2V7aWYobzw3Njgpe2g9NX1lbHNle2g9Nn19fX19aWYobzw4KXt2PW5ldyBDbGFzc2ljKGYpfWVsc2V7aWYoZi5pc0V2ZW4oKSl7dj1uZXcgQmFycmV0dChmKX1lbHNle3Y9bmV3IE1vbnRnb21lcnkoZil9fXZhciBwPW5ldyBBcnJheSgpLGQ9MyxzPWgtMSxhPSgxPDxoKS0xO3BbMV09di5jb252ZXJ0KHRoaXMpO2lmKGg+MSl7dmFyIEE9bmJpKCk7di5zcXJUbyhwWzFdLEEpO3doaWxlKGQ8PWEpe3BbZF09bmJpKCk7di5tdWxUbyhBLHBbZC0yXSxwW2RdKTtkKz0yfX12YXIgbD1xLnQtMSx4LHU9dHJ1ZSxjPW5iaSgpLHk7bz1uYml0cyhxW2xdKS0xO3doaWxlKGw+PTApe2lmKG8+PXMpe3g9KHFbbF0+PihvLXMpKSZhfWVsc2V7eD0ocVtsXSYoKDE8PChvKzEpKS0xKSk8PChzLW8pO2lmKGw+MCl7eHw9cVtsLTFdPj4odGhpcy5EQitvLXMpfX1kPWg7d2hpbGUoKHgmMSk9PTApe3g+Pj0xOy0tZH1pZigoby09ZCk8MCl7bys9dGhpcy5EQjstLWx9aWYodSl7cFt4XS5jb3B5VG8oYik7dT1mYWxzZX1lbHNle3doaWxlKGQ+MSl7di5zcXJUbyhiLGMpO3Yuc3FyVG8oYyxiKTtkLT0yfWlmKGQ+MCl7di5zcXJUbyhiLGMpfWVsc2V7eT1iO2I9YztjPXl9di5tdWxUbyhjLHBbeF0sYil9d2hpbGUobD49MCYmKHFbbF0mKDE8PG8pKT09MCl7di5zcXJUbyhiLGMpO3k9YjtiPWM7Yz15O2lmKC0tbzwwKXtvPXRoaXMuREItMTstLWx9fX1yZXR1cm4gdi5yZXZlcnQoYil9ZnVuY3Rpb24gYm5HQ0QoYyl7dmFyIGI9KHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXMuY2xvbmUoKTt2YXIgaD0oYy5zPDApP2MubmVnYXRlKCk6Yy5jbG9uZSgpO2lmKGIuY29tcGFyZVRvKGgpPDApe3ZhciBlPWI7Yj1oO2g9ZX12YXIgZD1iLmdldExvd2VzdFNldEJpdCgpLGY9aC5nZXRMb3dlc3RTZXRCaXQoKTtpZihmPDApe3JldHVybiBifWlmKGQ8Zil7Zj1kfWlmKGY+MCl7Yi5yU2hpZnRUbyhmLGIpO2guclNoaWZ0VG8oZixoKX13aGlsZShiLnNpZ251bSgpPjApe2lmKChkPWIuZ2V0TG93ZXN0U2V0Qml0KCkpPjApe2IuclNoaWZ0VG8oZCxiKX1pZigoZD1oLmdldExvd2VzdFNldEJpdCgpKT4wKXtoLnJTaGlmdFRvKGQsaCl9aWYoYi5jb21wYXJlVG8oaCk+PTApe2Iuc3ViVG8oaCxiKTtiLnJTaGlmdFRvKDEsYil9ZWxzZXtoLnN1YlRvKGIsaCk7aC5yU2hpZnRUbygxLGgpfX1pZihmPjApe2gubFNoaWZ0VG8oZixoKX1yZXR1cm4gaH1mdW5jdGlvbiBibnBNb2RJbnQoZSl7aWYoZTw9MCl7cmV0dXJuIDB9dmFyIGM9dGhpcy5EViVlLGI9KHRoaXMuczwwKT9lLTE6MDtpZih0aGlzLnQ+MCl7aWYoYz09MCl7Yj10aGlzWzBdJWV9ZWxzZXtmb3IodmFyIGE9dGhpcy50LTE7YT49MDstLWEpe2I9KGMqYit0aGlzW2FdKSVlfX19cmV0dXJuIGJ9ZnVuY3Rpb24gYm5Nb2RJbnZlcnNlKGYpe3ZhciBqPWYuaXNFdmVuKCk7aWYoKHRoaXMuaXNFdmVuKCkmJmopfHxmLnNpZ251bSgpPT0wKXtyZXR1cm4gQmlnSW50ZWdlci5aRVJPfXZhciBpPWYuY2xvbmUoKSxoPXRoaXMuY2xvbmUoKTt2YXIgZz1uYnYoMSksZT1uYnYoMCksbD1uYnYoMCksaz1uYnYoMSk7d2hpbGUoaS5zaWdudW0oKSE9MCl7d2hpbGUoaS5pc0V2ZW4oKSl7aS5yU2hpZnRUbygxLGkpO2lmKGope2lmKCFnLmlzRXZlbigpfHwhZS5pc0V2ZW4oKSl7Zy5hZGRUbyh0aGlzLGcpO2Uuc3ViVG8oZixlKX1nLnJTaGlmdFRvKDEsZyl9ZWxzZXtpZighZS5pc0V2ZW4oKSl7ZS5zdWJUbyhmLGUpfX1lLnJTaGlmdFRvKDEsZSl9d2hpbGUoaC5pc0V2ZW4oKSl7aC5yU2hpZnRUbygxLGgpO2lmKGope2lmKCFsLmlzRXZlbigpfHwhay5pc0V2ZW4oKSl7bC5hZGRUbyh0aGlzLGwpO2suc3ViVG8oZixrKX1sLnJTaGlmdFRvKDEsbCl9ZWxzZXtpZighay5pc0V2ZW4oKSl7ay5zdWJUbyhmLGspfX1rLnJTaGlmdFRvKDEsayl9aWYoaS5jb21wYXJlVG8oaCk+PTApe2kuc3ViVG8oaCxpKTtpZihqKXtnLnN1YlRvKGwsZyl9ZS5zdWJUbyhrLGUpfWVsc2V7aC5zdWJUbyhpLGgpO2lmKGope2wuc3ViVG8oZyxsKX1rLnN1YlRvKGUsayl9fWlmKGguY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSE9MCl7cmV0dXJuIEJpZ0ludGVnZXIuWkVST31pZihrLmNvbXBhcmVUbyhmKT49MCl7cmV0dXJuIGsuc3VidHJhY3QoZil9aWYoay5zaWdudW0oKTwwKXtrLmFkZFRvKGYsayl9ZWxzZXtyZXR1cm4ga31pZihrLnNpZ251bSgpPDApe3JldHVybiBrLmFkZChmKX1lbHNle3JldHVybiBrfX12YXIgbG93cHJpbWVzPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTddO3ZhciBscGxpbT0oMTw8MjYpL2xvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdO2Z1bmN0aW9uIGJuSXNQcm9iYWJsZVByaW1lKGUpe3ZhciBkLGI9dGhpcy5hYnMoKTtpZihiLnQ9PTEmJmJbMF08PWxvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdKXtmb3IoZD0wO2Q8bG93cHJpbWVzLmxlbmd0aDsrK2Qpe2lmKGJbMF09PWxvd3ByaW1lc1tkXSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX1pZihiLmlzRXZlbigpKXtyZXR1cm4gZmFsc2V9ZD0xO3doaWxlKGQ8bG93cHJpbWVzLmxlbmd0aCl7dmFyIGE9bG93cHJpbWVzW2RdLGM9ZCsxO3doaWxlKGM8bG93cHJpbWVzLmxlbmd0aCYmYTxscGxpbSl7YSo9bG93cHJpbWVzW2MrK119YT1iLm1vZEludChhKTt3aGlsZShkPGMpe2lmKGElbG93cHJpbWVzW2QrK109PTApe3JldHVybiBmYWxzZX19fXJldHVybiBiLm1pbGxlclJhYmluKGUpfWZ1bmN0aW9uIGJucE1pbGxlclJhYmluKGYpe3ZhciBnPXRoaXMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO3ZhciBjPWcuZ2V0TG93ZXN0U2V0Qml0KCk7aWYoYzw9MCl7cmV0dXJuIGZhbHNlfXZhciBoPWcuc2hpZnRSaWdodChjKTtmPShmKzEpPj4xO2lmKGY+bG93cHJpbWVzLmxlbmd0aCl7Zj1sb3dwcmltZXMubGVuZ3RofXZhciBiPW5iaSgpO2Zvcih2YXIgZT0wO2U8ZjsrK2Upe2IuZnJvbUludChsb3dwcmltZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxvd3ByaW1lcy5sZW5ndGgpXSk7dmFyIGw9Yi5tb2RQb3coaCx0aGlzKTtpZihsLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTAmJmwuY29tcGFyZVRvKGcpIT0wKXt2YXIgZD0xO3doaWxlKGQrKzxjJiZsLmNvbXBhcmVUbyhnKSE9MCl7bD1sLm1vZFBvd0ludCgyLHRoaXMpO2lmKGwuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKT09MCl7cmV0dXJuIGZhbHNlfX1pZihsLmNvbXBhcmVUbyhnKSE9MCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9QmlnSW50ZWdlci5wcm90b3R5cGUuY2h1bmtTaXplPWJucENodW5rU2l6ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1JhZGl4PWJucFRvUmFkaXg7QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbVJhZGl4PWJucEZyb21SYWRpeDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tTnVtYmVyPWJucEZyb21OdW1iZXI7QmlnSW50ZWdlci5wcm90b3R5cGUuYml0d2lzZVRvPWJucEJpdHdpc2VUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jaGFuZ2VCaXQ9Ym5wQ2hhbmdlQml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmFkZFRvPWJucEFkZFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRNdWx0aXBseT1ibnBETXVsdGlwbHk7QmlnSW50ZWdlci5wcm90b3R5cGUuZEFkZE9mZnNldD1ibnBEQWRkT2Zmc2V0O0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5TG93ZXJUbz1ibnBNdWx0aXBseUxvd2VyVG87QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlVcHBlclRvPWJucE11bHRpcGx5VXBwZXJUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnQ9Ym5wTW9kSW50O0JpZ0ludGVnZXIucHJvdG90eXBlLm1pbGxlclJhYmluPWJucE1pbGxlclJhYmluO0JpZ0ludGVnZXIucHJvdG90eXBlLmNsb25lPWJuQ2xvbmU7QmlnSW50ZWdlci5wcm90b3R5cGUuaW50VmFsdWU9Ym5JbnRWYWx1ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5ieXRlVmFsdWU9Ym5CeXRlVmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuc2hvcnRWYWx1ZT1iblNob3J0VmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuc2lnbnVtPWJuU2lnTnVtO0JpZ0ludGVnZXIucHJvdG90eXBlLnRvQnl0ZUFycmF5PWJuVG9CeXRlQXJyYXk7QmlnSW50ZWdlci5wcm90b3R5cGUuZXF1YWxzPWJuRXF1YWxzO0JpZ0ludGVnZXIucHJvdG90eXBlLm1pbj1ibk1pbjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tYXg9Ym5NYXg7QmlnSW50ZWdlci5wcm90b3R5cGUuYW5kPWJuQW5kO0JpZ0ludGVnZXIucHJvdG90eXBlLm9yPWJuT3I7QmlnSW50ZWdlci5wcm90b3R5cGUueG9yPWJuWG9yO0JpZ0ludGVnZXIucHJvdG90eXBlLmFuZE5vdD1ibkFuZE5vdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5ub3Q9Ym5Ob3Q7QmlnSW50ZWdlci5wcm90b3R5cGUuc2hpZnRMZWZ0PWJuU2hpZnRMZWZ0O0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0UmlnaHQ9Ym5TaGlmdFJpZ2h0O0JpZ0ludGVnZXIucHJvdG90eXBlLmdldExvd2VzdFNldEJpdD1ibkdldExvd2VzdFNldEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXRDb3VudD1ibkJpdENvdW50O0JpZ0ludGVnZXIucHJvdG90eXBlLnRlc3RCaXQ9Ym5UZXN0Qml0O0JpZ0ludGVnZXIucHJvdG90eXBlLnNldEJpdD1iblNldEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGVhckJpdD1ibkNsZWFyQml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmZsaXBCaXQ9Ym5GbGlwQml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmFkZD1ibkFkZDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zdWJ0cmFjdD1iblN1YnRyYWN0O0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5PWJuTXVsdGlwbHk7QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlPWJuRGl2aWRlO0JpZ0ludGVnZXIucHJvdG90eXBlLnJlbWFpbmRlcj1iblJlbWFpbmRlcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGVBbmRSZW1haW5kZXI9Ym5EaXZpZGVBbmRSZW1haW5kZXI7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93PWJuTW9kUG93O0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZEludmVyc2U9Ym5Nb2RJbnZlcnNlO0JpZ0ludGVnZXIucHJvdG90eXBlLnBvdz1iblBvdztCaWdJbnRlZ2VyLnByb3RvdHlwZS5nY2Q9Ym5HQ0Q7QmlnSW50ZWdlci5wcm90b3R5cGUuaXNQcm9iYWJsZVByaW1lPWJuSXNQcm9iYWJsZVByaW1lO0JpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZT1iblNxdWFyZTtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxuZnVuY3Rpb24gQXJjZm91cigpe3RoaXMuaT0wO3RoaXMuaj0wO3RoaXMuUz1uZXcgQXJyYXkoKX1mdW5jdGlvbiBBUkM0aW5pdChkKXt2YXIgYyxhLGI7Zm9yKGM9MDtjPDI1NjsrK2Mpe3RoaXMuU1tjXT1jfWE9MDtmb3IoYz0wO2M8MjU2OysrYyl7YT0oYSt0aGlzLlNbY10rZFtjJWQubGVuZ3RoXSkmMjU1O2I9dGhpcy5TW2NdO3RoaXMuU1tjXT10aGlzLlNbYV07dGhpcy5TW2FdPWJ9dGhpcy5pPTA7dGhpcy5qPTB9ZnVuY3Rpb24gQVJDNG5leHQoKXt2YXIgYTt0aGlzLmk9KHRoaXMuaSsxKSYyNTU7dGhpcy5qPSh0aGlzLmordGhpcy5TW3RoaXMuaV0pJjI1NTthPXRoaXMuU1t0aGlzLmldO3RoaXMuU1t0aGlzLmldPXRoaXMuU1t0aGlzLmpdO3RoaXMuU1t0aGlzLmpdPWE7cmV0dXJuIHRoaXMuU1soYSt0aGlzLlNbdGhpcy5pXSkmMjU1XX1BcmNmb3VyLnByb3RvdHlwZS5pbml0PUFSQzRpbml0O0FyY2ZvdXIucHJvdG90eXBlLm5leHQ9QVJDNG5leHQ7ZnVuY3Rpb24gcHJuZ19uZXdzdGF0ZSgpe3JldHVybiBuZXcgQXJjZm91cigpfXZhciBybmdfcHNpemU9MjU2O1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG52YXIgcm5nX3N0YXRlO3ZhciBybmdfcG9vbDt2YXIgcm5nX3BwdHI7ZnVuY3Rpb24gcm5nX3NlZWRfaW50KGEpe3JuZ19wb29sW3JuZ19wcHRyKytdXj1hJjI1NTtybmdfcG9vbFtybmdfcHB0cisrXV49KGE+PjgpJjI1NTtybmdfcG9vbFtybmdfcHB0cisrXV49KGE+PjE2KSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj4yNCkmMjU1O2lmKHJuZ19wcHRyPj1ybmdfcHNpemUpe3JuZ19wcHRyLT1ybmdfcHNpemV9fWZ1bmN0aW9uIHJuZ19zZWVkX3RpbWUoKXtybmdfc2VlZF9pbnQobmV3IERhdGUoKS5nZXRUaW1lKCkpfWlmKHJuZ19wb29sPT1udWxsKXtybmdfcG9vbD1uZXcgQXJyYXkoKTtybmdfcHB0cj0wO3ZhciB0O2lmKHdpbmRvdyE9PXVuZGVmaW5lZCYmKHdpbmRvdy5jcnlwdG8hPT11bmRlZmluZWR8fHdpbmRvdy5tc0NyeXB0byE9PXVuZGVmaW5lZCkpe3ZhciBjcnlwdG89d2luZG93LmNyeXB0b3x8d2luZG93Lm1zQ3J5cHRvO2lmKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpe3ZhciB1YT1uZXcgVWludDhBcnJheSgzMik7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyh1YSk7Zm9yKHQ9MDt0PDMyOysrdCl7cm5nX3Bvb2xbcm5nX3BwdHIrK109dWFbdF19fWVsc2V7aWYobmF2aWdhdG9yLmFwcE5hbWU9PVwiTmV0c2NhcGVcIiYmbmF2aWdhdG9yLmFwcFZlcnNpb248XCI1XCIpe3ZhciB6PXdpbmRvdy5jcnlwdG8ucmFuZG9tKDMyKTtmb3IodD0wO3Q8ei5sZW5ndGg7Kyt0KXtybmdfcG9vbFtybmdfcHB0cisrXT16LmNoYXJDb2RlQXQodCkmMjU1fX19fXdoaWxlKHJuZ19wcHRyPHJuZ19wc2l6ZSl7dD1NYXRoLmZsb29yKDY1NTM2Kk1hdGgucmFuZG9tKCkpO3JuZ19wb29sW3JuZ19wcHRyKytdPXQ+Pj44O3JuZ19wb29sW3JuZ19wcHRyKytdPXQmMjU1fXJuZ19wcHRyPTA7cm5nX3NlZWRfdGltZSgpfWZ1bmN0aW9uIHJuZ19nZXRfYnl0ZSgpe2lmKHJuZ19zdGF0ZT09bnVsbCl7cm5nX3NlZWRfdGltZSgpO3JuZ19zdGF0ZT1wcm5nX25ld3N0YXRlKCk7cm5nX3N0YXRlLmluaXQocm5nX3Bvb2wpO2ZvcihybmdfcHB0cj0wO3JuZ19wcHRyPHJuZ19wb29sLmxlbmd0aDsrK3JuZ19wcHRyKXtybmdfcG9vbFtybmdfcHB0cl09MH1ybmdfcHB0cj0wfXJldHVybiBybmdfc3RhdGUubmV4dCgpfWZ1bmN0aW9uIHJuZ19nZXRfYnl0ZXMoYil7dmFyIGE7Zm9yKGE9MDthPGIubGVuZ3RoOysrYSl7YlthXT1ybmdfZ2V0X2J5dGUoKX19ZnVuY3Rpb24gU2VjdXJlUmFuZG9tKCl7fVNlY3VyZVJhbmRvbS5wcm90b3R5cGUubmV4dEJ5dGVzPXJuZ19nZXRfYnl0ZXM7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlQmlnSW50KGIsYSl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGIsYSl9ZnVuY3Rpb24gbGluZWJyayhjLGQpe3ZhciBhPVwiXCI7dmFyIGI9MDt3aGlsZShiK2Q8Yy5sZW5ndGgpe2ErPWMuc3Vic3RyaW5nKGIsYitkKStcIlxcblwiO2IrPWR9cmV0dXJuIGErYy5zdWJzdHJpbmcoYixjLmxlbmd0aCl9ZnVuY3Rpb24gYnl0ZTJIZXgoYSl7aWYoYTwxNil7cmV0dXJuXCIwXCIrYS50b1N0cmluZygxNil9ZWxzZXtyZXR1cm4gYS50b1N0cmluZygxNil9fWZ1bmN0aW9uIHBrY3MxcGFkMihlLGgpe2lmKGg8ZS5sZW5ndGgrMTEpe3Rocm93XCJNZXNzYWdlIHRvbyBsb25nIGZvciBSU0FcIjtyZXR1cm4gbnVsbH12YXIgZz1uZXcgQXJyYXkoKTt2YXIgZD1lLmxlbmd0aC0xO3doaWxlKGQ+PTAmJmg+MCl7dmFyIGY9ZS5jaGFyQ29kZUF0KGQtLSk7aWYoZjwxMjgpe2dbLS1oXT1mfWVsc2V7aWYoKGY+MTI3KSYmKGY8MjA0OCkpe2dbLS1oXT0oZiY2Myl8MTI4O2dbLS1oXT0oZj4+Nil8MTkyfWVsc2V7Z1stLWhdPShmJjYzKXwxMjg7Z1stLWhdPSgoZj4+NikmNjMpfDEyODtnWy0taF09KGY+PjEyKXwyMjR9fX1nWy0taF09MDt2YXIgYj1uZXcgU2VjdXJlUmFuZG9tKCk7dmFyIGE9bmV3IEFycmF5KCk7d2hpbGUoaD4yKXthWzBdPTA7d2hpbGUoYVswXT09MCl7Yi5uZXh0Qnl0ZXMoYSl9Z1stLWhdPWFbMF19Z1stLWhdPTI7Z1stLWhdPTA7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGcpfWZ1bmN0aW9uIG9hZXBfbWdmMV9hcnIoYyxhLGUpe3ZhciBiPVwiXCIsZD0wO3doaWxlKGIubGVuZ3RoPGEpe2IrPWUoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsYy5jb25jYXQoWyhkJjQyNzgxOTAwODApPj4yNCwoZCYxNjcxMTY4MCk+PjE2LChkJjY1MjgwKT4+OCxkJjI1NV0pKSk7ZCs9MX1yZXR1cm4gYn1mdW5jdGlvbiBvYWVwX3BhZChxLGEsZixsKXt2YXIgYz1LSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0O3ZhciBvPUtKVVIuY3J5cHRvLlV0aWw7dmFyIGI9bnVsbDtpZighZil7Zj1cInNoYTFcIn1pZih0eXBlb2YgZj09PVwic3RyaW5nXCIpe2I9Yy5nZXRDYW5vbmljYWxBbGdOYW1lKGYpO2w9Yy5nZXRIYXNoTGVuZ3RoKGIpO2Y9ZnVuY3Rpb24oaSl7cmV0dXJuIGhleHRvcnN0cihvLmhhc2hIZXgocnN0cnRvaGV4KGkpLGIpKX19aWYocS5sZW5ndGgrMipsKzI+YSl7dGhyb3dcIk1lc3NhZ2UgdG9vIGxvbmcgZm9yIFJTQVwifXZhciBrPVwiXCIsZTtmb3IoZT0wO2U8YS1xLmxlbmd0aC0yKmwtMjtlKz0xKXtrKz1cIlxceDAwXCJ9dmFyIGg9ZihcIlwiKStrK1wiXFx4MDFcIitxO3ZhciBnPW5ldyBBcnJheShsKTtuZXcgU2VjdXJlUmFuZG9tKCkubmV4dEJ5dGVzKGcpO3ZhciBqPW9hZXBfbWdmMV9hcnIoZyxoLmxlbmd0aCxmKTt2YXIgcD1bXTtmb3IoZT0wO2U8aC5sZW5ndGg7ZSs9MSl7cFtlXT1oLmNoYXJDb2RlQXQoZSleai5jaGFyQ29kZUF0KGUpfXZhciBtPW9hZXBfbWdmMV9hcnIocCxnLmxlbmd0aCxmKTt2YXIgZD1bMF07Zm9yKGU9MDtlPGcubGVuZ3RoO2UrPTEpe2RbZSsxXT1nW2VdXm0uY2hhckNvZGVBdChlKX1yZXR1cm4gbmV3IEJpZ0ludGVnZXIoZC5jb25jYXQocCkpfWZ1bmN0aW9uIFJTQUtleSgpe3RoaXMubj1udWxsO3RoaXMuZT0wO3RoaXMuZD1udWxsO3RoaXMucD1udWxsO3RoaXMucT1udWxsO3RoaXMuZG1wMT1udWxsO3RoaXMuZG1xMT1udWxsO3RoaXMuY29lZmY9bnVsbH1mdW5jdGlvbiBSU0FTZXRQdWJsaWMoYixhKXt0aGlzLmlzUHVibGljPXRydWU7dGhpcy5pc1ByaXZhdGU9ZmFsc2U7aWYodHlwZW9mIGIhPT1cInN0cmluZ1wiKXt0aGlzLm49Yjt0aGlzLmU9YX1lbHNle2lmKGIhPW51bGwmJmEhPW51bGwmJmIubGVuZ3RoPjAmJmEubGVuZ3RoPjApe3RoaXMubj1wYXJzZUJpZ0ludChiLDE2KTt0aGlzLmU9cGFyc2VJbnQoYSwxNil9ZWxzZXt0aHJvd1wiSW52YWxpZCBSU0EgcHVibGljIGtleVwifX19ZnVuY3Rpb24gUlNBRG9QdWJsaWMoYSl7cmV0dXJuIGEubW9kUG93SW50KHRoaXMuZSx0aGlzLm4pfWZ1bmN0aW9uIFJTQUVuY3J5cHQoZCl7dmFyIGE9cGtjczFwYWQyKGQsKHRoaXMubi5iaXRMZW5ndGgoKSs3KT4+Myk7aWYoYT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGU9dGhpcy5kb1B1YmxpYyhhKTtpZihlPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgYj1lLnRvU3RyaW5nKDE2KTtpZigoYi5sZW5ndGgmMSk9PTApe3JldHVybiBifWVsc2V7cmV0dXJuXCIwXCIrYn19ZnVuY3Rpb24gUlNBRW5jcnlwdE9BRVAoZixlLGIpe3ZhciBhPW9hZXBfcGFkKGYsKHRoaXMubi5iaXRMZW5ndGgoKSs3KT4+MyxlLGIpO2lmKGE9PW51bGwpe3JldHVybiBudWxsfXZhciBnPXRoaXMuZG9QdWJsaWMoYSk7aWYoZz09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGQ9Zy50b1N0cmluZygxNik7aWYoKGQubGVuZ3RoJjEpPT0wKXtyZXR1cm4gZH1lbHNle3JldHVyblwiMFwiK2R9fVJTQUtleS5wcm90b3R5cGUuZG9QdWJsaWM9UlNBRG9QdWJsaWM7UlNBS2V5LnByb3RvdHlwZS5zZXRQdWJsaWM9UlNBU2V0UHVibGljO1JTQUtleS5wcm90b3R5cGUuZW5jcnlwdD1SU0FFbmNyeXB0O1JTQUtleS5wcm90b3R5cGUuZW5jcnlwdE9BRVA9UlNBRW5jcnlwdE9BRVA7UlNBS2V5LnByb3RvdHlwZS50eXBlPVwiUlNBXCI7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbmZ1bmN0aW9uIEVDRmllbGRFbGVtZW50RnAoYixhKXt0aGlzLng9YTt0aGlzLnE9Yn1mdW5jdGlvbiBmZUZwRXF1YWxzKGEpe2lmKGE9PXRoaXMpe3JldHVybiB0cnVlfXJldHVybih0aGlzLnEuZXF1YWxzKGEucSkmJnRoaXMueC5lcXVhbHMoYS54KSl9ZnVuY3Rpb24gZmVGcFRvQmlnSW50ZWdlcigpe3JldHVybiB0aGlzLnh9ZnVuY3Rpb24gZmVGcE5lZ2F0ZSgpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54Lm5lZ2F0ZSgpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwQWRkKGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54LmFkZChhLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcFN1YnRyYWN0KGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54LnN1YnRyYWN0KGEudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwTXVsdGlwbHkoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubXVsdGlwbHkoYS50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBTcXVhcmUoKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5zcXVhcmUoKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcERpdmlkZShhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5tdWx0aXBseShhLnRvQmlnSW50ZWdlcigpLm1vZEludmVyc2UodGhpcy5xKSkubW9kKHRoaXMucSkpfUVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmVxdWFscz1mZUZwRXF1YWxzO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnRvQmlnSW50ZWdlcj1mZUZwVG9CaWdJbnRlZ2VyO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLm5lZ2F0ZT1mZUZwTmVnYXRlO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmFkZD1mZUZwQWRkO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnN1YnRyYWN0PWZlRnBTdWJ0cmFjdDtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5tdWx0aXBseT1mZUZwTXVsdGlwbHk7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuc3F1YXJlPWZlRnBTcXVhcmU7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZGl2aWRlPWZlRnBEaXZpZGU7ZnVuY3Rpb24gRUNQb2ludEZwKGMsYSxkLGIpe3RoaXMuY3VydmU9Yzt0aGlzLng9YTt0aGlzLnk9ZDtpZihiPT1udWxsKXt0aGlzLno9QmlnSW50ZWdlci5PTkV9ZWxzZXt0aGlzLno9Yn10aGlzLnppbnY9bnVsbH1mdW5jdGlvbiBwb2ludEZwR2V0WCgpe2lmKHRoaXMuemludj09bnVsbCl7dGhpcy56aW52PXRoaXMuei5tb2RJbnZlcnNlKHRoaXMuY3VydmUucSl9cmV0dXJuIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIodGhpcy54LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMuemludikubW9kKHRoaXMuY3VydmUucSkpfWZ1bmN0aW9uIHBvaW50RnBHZXRZKCl7aWYodGhpcy56aW52PT1udWxsKXt0aGlzLnppbnY9dGhpcy56Lm1vZEludmVyc2UodGhpcy5jdXJ2ZS5xKX1yZXR1cm4gdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcih0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56aW52KS5tb2QodGhpcy5jdXJ2ZS5xKSl9ZnVuY3Rpb24gcG9pbnRGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1pZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGEuaXNJbmZpbml0eSgpfWlmKGEuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCl9dmFyIGMsYjtjPWEueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShhLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtpZighYy5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSl7cmV0dXJuIGZhbHNlfWI9YS54LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMueikuc3VidHJhY3QodGhpcy54LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KGEueikpLm1vZCh0aGlzLmN1cnZlLnEpO3JldHVybiBiLmVxdWFscyhCaWdJbnRlZ2VyLlpFUk8pfWZ1bmN0aW9uIHBvaW50RnBJc0luZmluaXR5KCl7aWYoKHRoaXMueD09bnVsbCkmJih0aGlzLnk9PW51bGwpKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gdGhpcy56LmVxdWFscyhCaWdJbnRlZ2VyLlpFUk8pJiYhdGhpcy55LnRvQmlnSW50ZWdlcigpLmVxdWFscyhCaWdJbnRlZ2VyLlpFUk8pfWZ1bmN0aW9uIHBvaW50RnBOZWdhdGUoKXtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLHRoaXMueCx0aGlzLnkubmVnYXRlKCksdGhpcy56KX1mdW5jdGlvbiBwb2ludEZwQWRkKGwpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gbH1pZihsLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9dmFyIHA9bC55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMueikuc3VidHJhY3QodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KGwueikpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBvPWwueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShsLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtpZihCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKG8pKXtpZihCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKHApKXtyZXR1cm4gdGhpcy50d2ljZSgpfXJldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGo9bmV3IEJpZ0ludGVnZXIoXCIzXCIpO3ZhciBlPXRoaXMueC50b0JpZ0ludGVnZXIoKTt2YXIgbj10aGlzLnkudG9CaWdJbnRlZ2VyKCk7dmFyIGM9bC54LnRvQmlnSW50ZWdlcigpO3ZhciBrPWwueS50b0JpZ0ludGVnZXIoKTt2YXIgbT1vLnNxdWFyZSgpO3ZhciBpPW0ubXVsdGlwbHkobyk7dmFyIGQ9ZS5tdWx0aXBseShtKTt2YXIgZz1wLnNxdWFyZSgpLm11bHRpcGx5KHRoaXMueik7dmFyIGE9Zy5zdWJ0cmFjdChkLnNoaWZ0TGVmdCgxKSkubXVsdGlwbHkobC56KS5zdWJ0cmFjdChpKS5tdWx0aXBseShvKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgaD1kLm11bHRpcGx5KGopLm11bHRpcGx5KHApLnN1YnRyYWN0KG4ubXVsdGlwbHkoaSkpLnN1YnRyYWN0KGcubXVsdGlwbHkocCkpLm11bHRpcGx5KGwueikuYWRkKHAubXVsdGlwbHkoaSkpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBmPWkubXVsdGlwbHkodGhpcy56KS5tdWx0aXBseShsLnopLm1vZCh0aGlzLmN1cnZlLnEpO3JldHVybiBuZXcgRUNQb2ludEZwKHRoaXMuY3VydmUsdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihhKSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGgpLGYpfWZ1bmN0aW9uIHBvaW50RnBUd2ljZSgpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZih0aGlzLnkudG9CaWdJbnRlZ2VyKCkuc2lnbnVtKCk9PTApe3JldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9bmV3IEJpZ0ludGVnZXIoXCIzXCIpO3ZhciBjPXRoaXMueC50b0JpZ0ludGVnZXIoKTt2YXIgaD10aGlzLnkudG9CaWdJbnRlZ2VyKCk7dmFyIGU9aC5tdWx0aXBseSh0aGlzLnopO3ZhciBqPWUubXVsdGlwbHkoaCkubW9kKHRoaXMuY3VydmUucSk7dmFyIGk9dGhpcy5jdXJ2ZS5hLnRvQmlnSW50ZWdlcigpO3ZhciBrPWMuc3F1YXJlKCkubXVsdGlwbHkoZyk7aWYoIUJpZ0ludGVnZXIuWkVSTy5lcXVhbHMoaSkpe2s9ay5hZGQodGhpcy56LnNxdWFyZSgpLm11bHRpcGx5KGkpKX1rPWsubW9kKHRoaXMuY3VydmUucSk7dmFyIGI9ay5zcXVhcmUoKS5zdWJ0cmFjdChjLnNoaWZ0TGVmdCgzKS5tdWx0aXBseShqKSkuc2hpZnRMZWZ0KDEpLm11bHRpcGx5KGUpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBmPWsubXVsdGlwbHkoZykubXVsdGlwbHkoYykuc3VidHJhY3Qoai5zaGlmdExlZnQoMSkpLnNoaWZ0TGVmdCgyKS5tdWx0aXBseShqKS5zdWJ0cmFjdChrLnNxdWFyZSgpLm11bHRpcGx5KGspKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZD1lLnNxdWFyZSgpLm11bHRpcGx5KGUpLnNoaWZ0TGVmdCgzKS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoYiksdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihmKSxkKX1mdW5jdGlvbiBwb2ludEZwTXVsdGlwbHkoYil7aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKGIuc2lnbnVtKCk9PTApe3JldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9Yjt2YXIgZj1nLm11bHRpcGx5KG5ldyBCaWdJbnRlZ2VyKFwiM1wiKSk7dmFyIGw9dGhpcy5uZWdhdGUoKTt2YXIgZD10aGlzO3ZhciBjO2ZvcihjPWYuYml0TGVuZ3RoKCktMjtjPjA7LS1jKXtkPWQudHdpY2UoKTt2YXIgYT1mLnRlc3RCaXQoYyk7dmFyIGo9Zy50ZXN0Qml0KGMpO2lmKGEhPWope2Q9ZC5hZGQoYT90aGlzOmwpfX1yZXR1cm4gZH1mdW5jdGlvbiBwb2ludEZwTXVsdGlwbHlUd28oYyxhLGIpe3ZhciBkO2lmKGMuYml0TGVuZ3RoKCk+Yi5iaXRMZW5ndGgoKSl7ZD1jLmJpdExlbmd0aCgpLTF9ZWxzZXtkPWIuYml0TGVuZ3RoKCktMX12YXIgZj10aGlzLmN1cnZlLmdldEluZmluaXR5KCk7dmFyIGU9dGhpcy5hZGQoYSk7d2hpbGUoZD49MCl7Zj1mLnR3aWNlKCk7aWYoYy50ZXN0Qml0KGQpKXtpZihiLnRlc3RCaXQoZCkpe2Y9Zi5hZGQoZSl9ZWxzZXtmPWYuYWRkKHRoaXMpfX1lbHNle2lmKGIudGVzdEJpdChkKSl7Zj1mLmFkZChhKX19LS1kfXJldHVybiBmfUVDUG9pbnRGcC5wcm90b3R5cGUuZ2V0WD1wb2ludEZwR2V0WDtFQ1BvaW50RnAucHJvdG90eXBlLmdldFk9cG9pbnRGcEdldFk7RUNQb2ludEZwLnByb3RvdHlwZS5lcXVhbHM9cG9pbnRGcEVxdWFscztFQ1BvaW50RnAucHJvdG90eXBlLmlzSW5maW5pdHk9cG9pbnRGcElzSW5maW5pdHk7RUNQb2ludEZwLnByb3RvdHlwZS5uZWdhdGU9cG9pbnRGcE5lZ2F0ZTtFQ1BvaW50RnAucHJvdG90eXBlLmFkZD1wb2ludEZwQWRkO0VDUG9pbnRGcC5wcm90b3R5cGUudHdpY2U9cG9pbnRGcFR3aWNlO0VDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHk9cG9pbnRGcE11bHRpcGx5O0VDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHlUd289cG9pbnRGcE11bHRpcGx5VHdvO2Z1bmN0aW9uIEVDQ3VydmVGcChlLGQsYyl7dGhpcy5xPWU7dGhpcy5hPXRoaXMuZnJvbUJpZ0ludGVnZXIoZCk7dGhpcy5iPXRoaXMuZnJvbUJpZ0ludGVnZXIoYyk7dGhpcy5pbmZpbml0eT1uZXcgRUNQb2ludEZwKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBjdXJ2ZUZwR2V0USgpe3JldHVybiB0aGlzLnF9ZnVuY3Rpb24gY3VydmVGcEdldEEoKXtyZXR1cm4gdGhpcy5hfWZ1bmN0aW9uIGN1cnZlRnBHZXRCKCl7cmV0dXJuIHRoaXMuYn1mdW5jdGlvbiBjdXJ2ZUZwRXF1YWxzKGEpe2lmKGE9PXRoaXMpe3JldHVybiB0cnVlfXJldHVybih0aGlzLnEuZXF1YWxzKGEucSkmJnRoaXMuYS5lcXVhbHMoYS5hKSYmdGhpcy5iLmVxdWFscyhhLmIpKX1mdW5jdGlvbiBjdXJ2ZUZwR2V0SW5maW5pdHkoKXtyZXR1cm4gdGhpcy5pbmZpbml0eX1mdW5jdGlvbiBjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSxhKX1mdW5jdGlvbiBjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgoZCl7c3dpdGNoKHBhcnNlSW50KGQuc3Vic3RyKDAsMiksMTYpKXtjYXNlIDA6cmV0dXJuIHRoaXMuaW5maW5pdHk7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gbnVsbDtjYXNlIDQ6Y2FzZSA2OmNhc2UgNzp2YXIgYT0oZC5sZW5ndGgtMikvMjt2YXIgYz1kLnN1YnN0cigyLGEpO3ZhciBiPWQuc3Vic3RyKGErMixhKTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLHRoaXMuZnJvbUJpZ0ludGVnZXIobmV3IEJpZ0ludGVnZXIoYywxNikpLHRoaXMuZnJvbUJpZ0ludGVnZXIobmV3IEJpZ0ludGVnZXIoYiwxNikpKTtkZWZhdWx0OnJldHVybiBudWxsfX1FQ0N1cnZlRnAucHJvdG90eXBlLmdldFE9Y3VydmVGcEdldFE7RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRBPWN1cnZlRnBHZXRBO0VDQ3VydmVGcC5wcm90b3R5cGUuZ2V0Qj1jdXJ2ZUZwR2V0QjtFQ0N1cnZlRnAucHJvdG90eXBlLmVxdWFscz1jdXJ2ZUZwRXF1YWxzO0VDQ3VydmVGcC5wcm90b3R5cGUuZ2V0SW5maW5pdHk9Y3VydmVGcEdldEluZmluaXR5O0VDQ3VydmVGcC5wcm90b3R5cGUuZnJvbUJpZ0ludGVnZXI9Y3VydmVGcEZyb21CaWdJbnRlZ2VyO0VDQ3VydmVGcC5wcm90b3R5cGUuZGVjb2RlUG9pbnRIZXg9Y3VydmVGcERlY29kZVBvaW50SGV4O1xuLyohIChjKSBTdGVmYW4gVGhvbWFzIHwgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW5qcy9iaXRjb2luanMtbGliXHJcbiAqL1xyXG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5nZXRCeXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoKHRoaXMudG9CaWdJbnRlZ2VyKCkuYml0TGVuZ3RoKCkrNykvOCl9O0VDUG9pbnRGcC5wcm90b3R5cGUuZ2V0RW5jb2RlZD1mdW5jdGlvbihjKXt2YXIgZD1mdW5jdGlvbihoLGYpe3ZhciBnPWgudG9CeXRlQXJyYXlVbnNpZ25lZCgpO2lmKGY8Zy5sZW5ndGgpe2c9Zy5zbGljZShnLmxlbmd0aC1mKX1lbHNle3doaWxlKGY+Zy5sZW5ndGgpe2cudW5zaGlmdCgwKX19cmV0dXJuIGd9O3ZhciBhPXRoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBlPXRoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO3ZhciBiPWQoYSwzMik7aWYoYyl7aWYoZS5pc0V2ZW4oKSl7Yi51bnNoaWZ0KDIpfWVsc2V7Yi51bnNoaWZ0KDMpfX1lbHNle2IudW5zaGlmdCg0KTtiPWIuY29uY2F0KGQoZSwzMikpfXJldHVybiBifTtFQ1BvaW50RnAuZGVjb2RlRnJvbT1mdW5jdGlvbihnLGMpe3ZhciBmPWNbMF07dmFyIGU9Yy5sZW5ndGgtMTt2YXIgZD1jLnNsaWNlKDEsMStlLzIpO3ZhciBiPWMuc2xpY2UoMStlLzIsMStlKTtkLnVuc2hpZnQoMCk7Yi51bnNoaWZ0KDApO3ZhciBhPW5ldyBCaWdJbnRlZ2VyKGQpO3ZhciBoPW5ldyBCaWdJbnRlZ2VyKGIpO3JldHVybiBuZXcgRUNQb2ludEZwKGcsZy5mcm9tQmlnSW50ZWdlcihhKSxnLmZyb21CaWdJbnRlZ2VyKGgpKX07RUNQb2ludEZwLmRlY29kZUZyb21IZXg9ZnVuY3Rpb24oZyxjKXt2YXIgZj1jLnN1YnN0cigwLDIpO3ZhciBlPWMubGVuZ3RoLTI7dmFyIGQ9Yy5zdWJzdHIoMixlLzIpO3ZhciBiPWMuc3Vic3RyKDIrZS8yLGUvMik7dmFyIGE9bmV3IEJpZ0ludGVnZXIoZCwxNik7dmFyIGg9bmV3IEJpZ0ludGVnZXIoYiwxNik7cmV0dXJuIG5ldyBFQ1BvaW50RnAoZyxnLmZyb21CaWdJbnRlZ2VyKGEpLGcuZnJvbUJpZ0ludGVnZXIoaCkpfTtFQ1BvaW50RnAucHJvdG90eXBlLmFkZDJEPWZ1bmN0aW9uKGMpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gY31pZihjLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy54LmVxdWFscyhjLngpKXtpZih0aGlzLnkuZXF1YWxzKGMueSkpe3JldHVybiB0aGlzLnR3aWNlKCl9cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1jLnguc3VidHJhY3QodGhpcy54KTt2YXIgZT1jLnkuc3VidHJhY3QodGhpcy55KTt2YXIgYT1lLmRpdmlkZShnKTt2YXIgZD1hLnNxdWFyZSgpLnN1YnRyYWN0KHRoaXMueCkuc3VidHJhY3QoYy54KTt2YXIgZj1hLm11bHRpcGx5KHRoaXMueC5zdWJ0cmFjdChkKSkuc3VidHJhY3QodGhpcy55KTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLGQsZil9O0VDUG9pbnRGcC5wcm90b3R5cGUudHdpY2UyRD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZih0aGlzLnkudG9CaWdJbnRlZ2VyKCkuc2lnbnVtKCk9PTApe3JldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGI9dGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoMikpO3ZhciBlPXRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKDMpKTt2YXIgYT10aGlzLnguc3F1YXJlKCkubXVsdGlwbHkoZSkuYWRkKHRoaXMuY3VydmUuYSkuZGl2aWRlKHRoaXMueS5tdWx0aXBseShiKSk7dmFyIGM9YS5zcXVhcmUoKS5zdWJ0cmFjdCh0aGlzLngubXVsdGlwbHkoYikpO3ZhciBkPWEubXVsdGlwbHkodGhpcy54LnN1YnRyYWN0KGMpKS5zdWJ0cmFjdCh0aGlzLnkpO3JldHVybiBuZXcgRUNQb2ludEZwKHRoaXMuY3VydmUsYyxkKX07RUNQb2ludEZwLnByb3RvdHlwZS5tdWx0aXBseTJEPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZihiLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPWI7dmFyIGY9Zy5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBsPXRoaXMubmVnYXRlKCk7dmFyIGQ9dGhpczt2YXIgYztmb3IoYz1mLmJpdExlbmd0aCgpLTI7Yz4wOy0tYyl7ZD1kLnR3aWNlKCk7dmFyIGE9Zi50ZXN0Qml0KGMpO3ZhciBqPWcudGVzdEJpdChjKTtpZihhIT1qKXtkPWQuYWRkMkQoYT90aGlzOmwpfX1yZXR1cm4gZH07RUNQb2ludEZwLnByb3RvdHlwZS5pc09uQ3VydmU9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgaT10aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgZj10aGlzLmN1cnZlLmdldEEoKS50b0JpZ0ludGVnZXIoKTt2YXIgYz10aGlzLmN1cnZlLmdldEIoKS50b0JpZ0ludGVnZXIoKTt2YXIgaD10aGlzLmN1cnZlLmdldFEoKTt2YXIgZT1pLm11bHRpcGx5KGkpLm1vZChoKTt2YXIgZz1kLm11bHRpcGx5KGQpLm11bHRpcGx5KGQpLmFkZChmLm11bHRpcGx5KGQpKS5hZGQoYykubW9kKGgpO3JldHVybiBlLmVxdWFscyhnKX07RUNQb2ludEZwLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiKFwiK3RoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkrXCIsXCIrdGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKStcIilcIn07RUNQb2ludEZwLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBjPXRoaXMuY3VydmUuZ2V0USgpO2lmKHRoaXMuaXNJbmZpbml0eSgpKXt0aHJvdyBuZXcgRXJyb3IoXCJQb2ludCBpcyBhdCBpbmZpbml0eS5cIil9dmFyIGE9dGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGI9dGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7aWYoYS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGEuY29tcGFyZVRvKGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKT4wKXt0aHJvdyBuZXcgRXJyb3IoXCJ4IGNvb3JkaW5hdGUgb3V0IG9mIGJvdW5kc1wiKX1pZihiLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk8MHx8Yi5jb21wYXJlVG8oYy5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkpPjApe3Rocm93IG5ldyBFcnJvcihcInkgY29vcmRpbmF0ZSBvdXQgb2YgYm91bmRzXCIpfWlmKCF0aGlzLmlzT25DdXJ2ZSgpKXt0aHJvdyBuZXcgRXJyb3IoXCJQb2ludCBpcyBub3Qgb24gdGhlIGN1cnZlLlwiKX1pZih0aGlzLm11bHRpcGx5KGMpLmlzSW5maW5pdHkoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgbm90IGEgc2NhbGFyIG11bHRpcGxlIG9mIEcuXCIpfXJldHVybiB0cnVlfTtcbi8qISBNaWtlIFNhbXVlbCAoYykgMjAwOSB8IGNvZGUuZ29vZ2xlLmNvbS9wL2pzb24tc2Fucy1ldmFsXHJcbiAqL1xyXG52YXIganNvblBhcnNlPShmdW5jdGlvbigpe3ZhciBlPVwiKD86LT9cXFxcYig/OjB8WzEtOV1bMC05XSopKD86XFxcXC5bMC05XSspPyg/OltlRV1bKy1dP1swLTldKyk/XFxcXGIpXCI7dmFyIGo9Jyg/OlteXFxcXDAtXFxcXHgwOFxcXFx4MGEtXFxcXHgxZlwiXFxcXFxcXFxdfFxcXFxcXFxcKD86W1wiL1xcXFxcXFxcYmZucnRdfHVbMC05QS1GYS1mXXs0fSkpJzt2YXIgaT0nKD86XCInK2orJypcIiknO3ZhciBkPW5ldyBSZWdFeHAoXCIoPzpmYWxzZXx0cnVlfG51bGx8W1xcXFx7XFxcXH1cXFxcW1xcXFxdXXxcIitlK1wifFwiK2krXCIpXCIsXCJnXCIpO3ZhciBrPW5ldyBSZWdFeHAoXCJcXFxcXFxcXCg/OihbXnVdKXx1KC57NH0pKVwiLFwiZ1wiKTt2YXIgZz17J1wiJzonXCInLFwiL1wiOlwiL1wiLFwiXFxcXFwiOlwiXFxcXFwiLGI6XCJcXGJcIixmOlwiXFxmXCIsbjpcIlxcblwiLHI6XCJcXHJcIix0OlwiXFx0XCJ9O2Z1bmN0aW9uIGgobCxtLG4pe3JldHVybiBtP2dbbV06U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChuLDE2KSl9dmFyIGM9bmV3IFN0cmluZyhcIlwiKTt2YXIgYT1cIlxcXFxcIjt2YXIgZj17XCJ7XCI6T2JqZWN0LFwiW1wiOkFycmF5fTt2YXIgYj1PYmplY3QuaGFzT3duUHJvcGVydHk7cmV0dXJuIGZ1bmN0aW9uKHUscSl7dmFyIHA9dS5tYXRjaChkKTt2YXIgeDt2YXIgdj1wWzBdO3ZhciBsPWZhbHNlO2lmKFwie1wiPT09dil7eD17fX1lbHNle2lmKFwiW1wiPT09dil7eD1bXX1lbHNle3g9W107bD10cnVlfX12YXIgdDt2YXIgcj1beF07Zm9yKHZhciBvPTEtbCxtPXAubGVuZ3RoO288bTsrK28pe3Y9cFtvXTt2YXIgdztzd2l0Y2godi5jaGFyQ29kZUF0KDApKXtkZWZhdWx0Onc9clswXTt3W3R8fHcubGVuZ3RoXT0rKHYpO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMzQ6dj12LnN1YnN0cmluZygxLHYubGVuZ3RoLTEpO2lmKHYuaW5kZXhPZihhKSE9PS0xKXt2PXYucmVwbGFjZShrLGgpfXc9clswXTtpZighdCl7aWYodyBpbnN0YW5jZW9mIEFycmF5KXt0PXcubGVuZ3RofWVsc2V7dD12fHxjO2JyZWFrfX13W3RdPXY7dD12b2lkIDA7YnJlYWs7Y2FzZSA5MTp3PXJbMF07ci51bnNoaWZ0KHdbdHx8dy5sZW5ndGhdPVtdKTt0PXZvaWQgMDticmVhaztjYXNlIDkzOnIuc2hpZnQoKTticmVhaztjYXNlIDEwMjp3PXJbMF07d1t0fHx3Lmxlbmd0aF09ZmFsc2U7dD12b2lkIDA7YnJlYWs7Y2FzZSAxMTA6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPW51bGw7dD12b2lkIDA7YnJlYWs7Y2FzZSAxMTY6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPXRydWU7dD12b2lkIDA7YnJlYWs7Y2FzZSAxMjM6dz1yWzBdO3IudW5zaGlmdCh3W3R8fHcubGVuZ3RoXT17fSk7dD12b2lkIDA7YnJlYWs7Y2FzZSAxMjU6ci5zaGlmdCgpO2JyZWFrfX1pZihsKXtpZihyLmxlbmd0aCE9PTEpe3Rocm93IG5ldyBFcnJvcigpfXg9eFswXX1lbHNle2lmKHIubGVuZ3RoKXt0aHJvdyBuZXcgRXJyb3IoKX19aWYocSl7dmFyIHM9ZnVuY3Rpb24oQyxCKXt2YXIgRD1DW0JdO2lmKEQmJnR5cGVvZiBEPT09XCJvYmplY3RcIil7dmFyIG49bnVsbDtmb3IodmFyIHogaW4gRCl7aWYoYi5jYWxsKEQseikmJkQhPT1DKXt2YXIgeT1zKEQseik7aWYoeSE9PXZvaWQgMCl7RFt6XT15fWVsc2V7aWYoIW4pe249W119bi5wdXNoKHopfX19aWYobil7Zm9yKHZhciBBPW4ubGVuZ3RoOy0tQT49MDspe2RlbGV0ZSBEW25bQV1dfX19cmV0dXJuIHEuY2FsbChDLEIsRCl9O3g9cyh7XCJcIjp4fSxcIlwiKX1yZXR1cm4geH19KSgpO1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmFzbjE9PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmFzbjEpe0tKVVIuYXNuMT17fX1LSlVSLmFzbjEuQVNOMVV0aWw9bmV3IGZ1bmN0aW9uKCl7dGhpcy5pbnRlZ2VyVG9CeXRlSGV4PWZ1bmN0aW9uKGEpe3ZhciBiPWEudG9TdHJpbmcoMTYpO2lmKChiLmxlbmd0aCUyKT09MSl7Yj1cIjBcIitifXJldHVybiBifTt0aGlzLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4PWZ1bmN0aW9uKGope3ZhciBmPWoudG9TdHJpbmcoMTYpO2lmKGYuc3Vic3RyKDAsMSkhPVwiLVwiKXtpZihmLmxlbmd0aCUyPT0xKXtmPVwiMFwiK2Z9ZWxzZXtpZighZi5tYXRjaCgvXlswLTddLykpe2Y9XCIwMFwiK2Z9fX1lbHNle3ZhciBhPWYuc3Vic3RyKDEpO3ZhciBlPWEubGVuZ3RoO2lmKGUlMj09MSl7ZSs9MX1lbHNle2lmKCFmLm1hdGNoKC9eWzAtN10vKSl7ZSs9Mn19dmFyIGc9XCJcIjtmb3IodmFyIGQ9MDtkPGU7ZCsrKXtnKz1cImZcIn12YXIgYz1uZXcgQmlnSW50ZWdlcihnLDE2KTt2YXIgYj1jLnhvcihqKS5hZGQoQmlnSW50ZWdlci5PTkUpO2Y9Yi50b1N0cmluZygxNikucmVwbGFjZSgvXi0vLFwiXCIpfXJldHVybiBmfTt0aGlzLmdldFBFTVN0cmluZ0Zyb21IZXg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaGV4dG9wZW0oYSxiKX07dGhpcy5uZXdPYmplY3Q9ZnVuY3Rpb24oayl7dmFyIEQ9S0pVUixuPUQuYXNuMSx6PW4uREVSQm9vbGVhbixlPW4uREVSSW50ZWdlcixzPW4uREVSQml0U3RyaW5nLGg9bi5ERVJPY3RldFN0cmluZyx2PW4uREVSTnVsbCx3PW4uREVST2JqZWN0SWRlbnRpZmllcixsPW4uREVSRW51bWVyYXRlZCxnPW4uREVSVVRGOFN0cmluZyxmPW4uREVSTnVtZXJpY1N0cmluZyx5PW4uREVSUHJpbnRhYmxlU3RyaW5nLHU9bi5ERVJUZWxldGV4U3RyaW5nLHA9bi5ERVJJQTVTdHJpbmcsQz1uLkRFUlVUQ1RpbWUsaj1uLkRFUkdlbmVyYWxpemVkVGltZSxtPW4uREVSU2VxdWVuY2UsYz1uLkRFUlNldCxyPW4uREVSVGFnZ2VkT2JqZWN0LG89bi5BU04xVXRpbC5uZXdPYmplY3Q7dmFyIHQ9T2JqZWN0LmtleXMoayk7aWYodC5sZW5ndGghPTEpe3Rocm93XCJrZXkgb2YgcGFyYW0gc2hhbGwgYmUgb25seSBvbmUuXCJ9dmFyIEY9dFswXTtpZihcIjpib29sOmludDpiaXRzdHI6b2N0c3RyOm51bGw6b2lkOmVudW06dXRmOHN0cjpudW1zdHI6cHJuc3RyOnRlbHN0cjppYTVzdHI6dXRjdGltZTpnZW50aW1lOnNlcTpzZXQ6dGFnOlwiLmluZGV4T2YoXCI6XCIrRitcIjpcIik9PS0xKXt0aHJvd1widW5kZWZpbmVkIGtleTogXCIrRn1pZihGPT1cImJvb2xcIil7cmV0dXJuIG5ldyB6KGtbRl0pfWlmKEY9PVwiaW50XCIpe3JldHVybiBuZXcgZShrW0ZdKX1pZihGPT1cImJpdHN0clwiKXtyZXR1cm4gbmV3IHMoa1tGXSl9aWYoRj09XCJvY3RzdHJcIil7cmV0dXJuIG5ldyBoKGtbRl0pfWlmKEY9PVwibnVsbFwiKXtyZXR1cm4gbmV3IHYoa1tGXSl9aWYoRj09XCJvaWRcIil7cmV0dXJuIG5ldyB3KGtbRl0pfWlmKEY9PVwiZW51bVwiKXtyZXR1cm4gbmV3IGwoa1tGXSl9aWYoRj09XCJ1dGY4c3RyXCIpe3JldHVybiBuZXcgZyhrW0ZdKX1pZihGPT1cIm51bXN0clwiKXtyZXR1cm4gbmV3IGYoa1tGXSl9aWYoRj09XCJwcm5zdHJcIil7cmV0dXJuIG5ldyB5KGtbRl0pfWlmKEY9PVwidGVsc3RyXCIpe3JldHVybiBuZXcgdShrW0ZdKX1pZihGPT1cImlhNXN0clwiKXtyZXR1cm4gbmV3IHAoa1tGXSl9aWYoRj09XCJ1dGN0aW1lXCIpe3JldHVybiBuZXcgQyhrW0ZdKX1pZihGPT1cImdlbnRpbWVcIil7cmV0dXJuIG5ldyBqKGtbRl0pfWlmKEY9PVwic2VxXCIpe3ZhciBkPWtbRl07dmFyIEU9W107Zm9yKHZhciB4PTA7eDxkLmxlbmd0aDt4Kyspe3ZhciBCPW8oZFt4XSk7RS5wdXNoKEIpfXJldHVybiBuZXcgbSh7YXJyYXk6RX0pfWlmKEY9PVwic2V0XCIpe3ZhciBkPWtbRl07dmFyIEU9W107Zm9yKHZhciB4PTA7eDxkLmxlbmd0aDt4Kyspe3ZhciBCPW8oZFt4XSk7RS5wdXNoKEIpfXJldHVybiBuZXcgYyh7YXJyYXk6RX0pfWlmKEY9PVwidGFnXCIpe3ZhciBBPWtbRl07aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEEpPT09XCJbb2JqZWN0IEFycmF5XVwiJiZBLmxlbmd0aD09Myl7dmFyIHE9byhBWzJdKTtyZXR1cm4gbmV3IHIoe3RhZzpBWzBdLGV4cGxpY2l0OkFbMV0sb2JqOnF9KX1lbHNle3ZhciBiPXt9O2lmKEEuZXhwbGljaXQhPT11bmRlZmluZWQpe2IuZXhwbGljaXQ9QS5leHBsaWNpdH1pZihBLnRhZyE9PXVuZGVmaW5lZCl7Yi50YWc9QS50YWd9aWYoQS5vYmo9PT11bmRlZmluZWQpe3Rocm93XCJvYmogc2hhbGwgYmUgc3BlY2lmaWVkIGZvciAndGFnJy5cIn1iLm9iaj1vKEEub2JqKTtyZXR1cm4gbmV3IHIoYil9fX07dGhpcy5qc29uVG9BU04xSEVYPWZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMubmV3T2JqZWN0KGIpO3JldHVybiBhLmdldEVuY29kZWRIZXgoKX19O0tKVVIuYXNuMS5BU04xVXRpbC5vaWRIZXhUb0ludD1mdW5jdGlvbihhKXt2YXIgaj1cIlwiO3ZhciBrPXBhcnNlSW50KGEuc3Vic3RyKDAsMiksMTYpO3ZhciBkPU1hdGguZmxvb3Ioay80MCk7dmFyIGM9ayU0MDt2YXIgaj1kK1wiLlwiK2M7dmFyIGU9XCJcIjtmb3IodmFyIGY9MjtmPGEubGVuZ3RoO2YrPTIpe3ZhciBnPXBhcnNlSW50KGEuc3Vic3RyKGYsMiksMTYpO3ZhciBoPShcIjAwMDAwMDAwXCIrZy50b1N0cmluZygyKSkuc2xpY2UoLTgpO2U9ZStoLnN1YnN0cigxLDcpO2lmKGguc3Vic3RyKDAsMSk9PVwiMFwiKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihlLDIpO2o9aitcIi5cIitiLnRvU3RyaW5nKDEwKTtlPVwiXCJ9fXJldHVybiBqfTtLSlVSLmFzbjEuQVNOMVV0aWwub2lkSW50VG9IZXg9ZnVuY3Rpb24oZil7dmFyIGU9ZnVuY3Rpb24oYSl7dmFyIGs9YS50b1N0cmluZygxNik7aWYoay5sZW5ndGg9PTEpe2s9XCIwXCIra31yZXR1cm4ga307dmFyIGQ9ZnVuY3Rpb24obyl7dmFyIG49XCJcIjt2YXIgaz1uZXcgQmlnSW50ZWdlcihvLDEwKTt2YXIgYT1rLnRvU3RyaW5nKDIpO3ZhciBsPTctYS5sZW5ndGglNztpZihsPT03KXtsPTB9dmFyIHE9XCJcIjtmb3IodmFyIG09MDttPGw7bSsrKXtxKz1cIjBcIn1hPXErYTtmb3IodmFyIG09MDttPGEubGVuZ3RoLTE7bSs9Nyl7dmFyIHA9YS5zdWJzdHIobSw3KTtpZihtIT1hLmxlbmd0aC03KXtwPVwiMVwiK3B9bis9ZShwYXJzZUludChwLDIpKX1yZXR1cm4gbn07aWYoIWYubWF0Y2goL15bMC05Ll0rJC8pKXt0aHJvd1wibWFsZm9ybWVkIG9pZCBzdHJpbmc6IFwiK2Z9dmFyIGc9XCJcIjt2YXIgYj1mLnNwbGl0KFwiLlwiKTt2YXIgaj1wYXJzZUludChiWzBdKSo0MCtwYXJzZUludChiWzFdKTtnKz1lKGopO2Iuc3BsaWNlKDAsMik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2crPWQoYltjXSl9cmV0dXJuIGd9O0tKVVIuYXNuMS5BU04xT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIGM9dHJ1ZTt2YXIgYj1udWxsO3ZhciBkPVwiMDBcIjt2YXIgZT1cIjAwXCI7dmFyIGE9XCJcIjt0aGlzLmdldExlbmd0aEhleEZyb21WYWx1ZT1mdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzLmhWPT1cInVuZGVmaW5lZFwifHx0aGlzLmhWPT1udWxsKXt0aHJvd1widGhpcy5oViBpcyBudWxsIG9yIHVuZGVmaW5lZC5cIn1pZih0aGlzLmhWLmxlbmd0aCUyPT0xKXt0aHJvd1widmFsdWUgaGV4IG11c3QgYmUgZXZlbiBsZW5ndGg6IG49XCIrYS5sZW5ndGgrXCIsdj1cIit0aGlzLmhWfXZhciBpPXRoaXMuaFYubGVuZ3RoLzI7dmFyIGg9aS50b1N0cmluZygxNik7aWYoaC5sZW5ndGglMj09MSl7aD1cIjBcIitofWlmKGk8MTI4KXtyZXR1cm4gaH1lbHNle3ZhciBnPWgubGVuZ3RoLzI7aWYoZz4xNSl7dGhyb3dcIkFTTi4xIGxlbmd0aCB0b28gbG9uZyB0byByZXByZXNlbnQgYnkgOHg6IG4gPSBcIitpLnRvU3RyaW5nKDE2KX12YXIgZj0xMjgrZztyZXR1cm4gZi50b1N0cmluZygxNikraH19O3RoaXMuZ2V0RW5jb2RlZEhleD1mdW5jdGlvbigpe2lmKHRoaXMuaFRMVj09bnVsbHx8dGhpcy5pc01vZGlmaWVkKXt0aGlzLmhWPXRoaXMuZ2V0RnJlc2hWYWx1ZUhleCgpO3RoaXMuaEw9dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWUoKTt0aGlzLmhUTFY9dGhpcy5oVCt0aGlzLmhMK3RoaXMuaFY7dGhpcy5pc01vZGlmaWVkPWZhbHNlfXJldHVybiB0aGlzLmhUTFZ9O3RoaXMuZ2V0VmFsdWVIZXg9ZnVuY3Rpb24oKXt0aGlzLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gdGhpcy5oVn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn19O0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZz1mdW5jdGlvbihjKXtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt0aGlzLmdldFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN9O3RoaXMuc2V0U3RyaW5nPWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1kO3RoaXMuaFY9dXRmOHRvaGV4KHRoaXMucykudG9Mb3dlckNhc2UoKX07dGhpcy5zZXRTdHJpbmdIZXg9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPW51bGw7dGhpcy5oVj1kfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGMhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBjPT1cInN0cmluZ1wiKXt0aGlzLnNldFN0cmluZyhjKX1lbHNle2lmKHR5cGVvZiBjLnN0ciE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRTdHJpbmcoYy5zdHIpfWVsc2V7aWYodHlwZW9mIGMuaGV4IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldFN0cmluZ0hleChjLmhleCl9fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWU9ZnVuY3Rpb24oYyl7S0pVUi5hc24xLkRFUkFic3RyYWN0VGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dmFyIGI9bnVsbDt2YXIgYT1udWxsO3RoaXMubG9jYWxEYXRlVG9VVEM9ZnVuY3Rpb24oZil7dXRjPWYuZ2V0VGltZSgpKyhmLmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDApO3ZhciBlPW5ldyBEYXRlKHV0Yyk7cmV0dXJuIGV9O3RoaXMuZm9ybWF0RGF0ZT1mdW5jdGlvbihtLG8sZSl7dmFyIGc9dGhpcy56ZXJvUGFkZGluZzt2YXIgbj10aGlzLmxvY2FsRGF0ZVRvVVRDKG0pO3ZhciBwPVN0cmluZyhuLmdldEZ1bGxZZWFyKCkpO2lmKG89PVwidXRjXCIpe3A9cC5zdWJzdHIoMiwyKX12YXIgbD1nKFN0cmluZyhuLmdldE1vbnRoKCkrMSksMik7dmFyIHE9ZyhTdHJpbmcobi5nZXREYXRlKCkpLDIpO3ZhciBoPWcoU3RyaW5nKG4uZ2V0SG91cnMoKSksMik7dmFyIGk9ZyhTdHJpbmcobi5nZXRNaW51dGVzKCkpLDIpO3ZhciBqPWcoU3RyaW5nKG4uZ2V0U2Vjb25kcygpKSwyKTt2YXIgcj1wK2wrcStoK2krajtpZihlPT09dHJ1ZSl7dmFyIGY9bi5nZXRNaWxsaXNlY29uZHMoKTtpZihmIT0wKXt2YXIgaz1nKFN0cmluZyhmKSwzKTtrPWsucmVwbGFjZSgvWzBdKyQvLFwiXCIpO3I9citcIi5cIitrfX1yZXR1cm4gcitcIlpcIn07dGhpcy56ZXJvUGFkZGluZz1mdW5jdGlvbihlLGQpe2lmKGUubGVuZ3RoPj1kKXtyZXR1cm4gZX1yZXR1cm4gbmV3IEFycmF5KGQtZS5sZW5ndGgrMSkuam9pbihcIjBcIikrZX07dGhpcy5nZXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfTt0aGlzLnNldFN0cmluZz1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9ZDt0aGlzLmhWPXN0b2hleChkKX07dGhpcy5zZXRCeURhdGVWYWx1ZT1mdW5jdGlvbihoLGosZSxkLGYsZyl7dmFyIGk9bmV3IERhdGUoRGF0ZS5VVEMoaCxqLTEsZSxkLGYsZywwKSk7dGhpcy5zZXRCeURhdGUoaSl9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkFic3RyYWN0VGltZSxLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZD1mdW5jdGlvbihiKXtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBhPW51bGw7dGhpcy5zZXRCeUFTTjFPYmplY3RBcnJheT1mdW5jdGlvbihjKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmFzbjFBcnJheT1jfTt0aGlzLmFwcGVuZEFTTjFPYmplY3Q9ZnVuY3Rpb24oYyl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5hc24xQXJyYXkucHVzaChjKX07dGhpcy5hc24xQXJyYXk9bmV3IEFycmF5KCk7aWYodHlwZW9mIGIhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBiLmFycmF5IT1cInVuZGVmaW5lZFwiKXt0aGlzLmFzbjFBcnJheT1iLmFycmF5fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJCb29sZWFuPWZ1bmN0aW9uKCl7S0pVUi5hc24xLkRFUkJvb2xlYW4uc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwMVwiO3RoaXMuaFRMVj1cIjAxMDFmZlwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQm9vbGVhbixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkludGVnZXI9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkludGVnZXIuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwMlwiO3RoaXMuc2V0QnlCaWdJbnRlZ2VyPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9S0pVUi5hc24xLkFTTjFVdGlsLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4KGIpfTt0aGlzLnNldEJ5SW50ZWdlcj1mdW5jdGlvbihjKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihTdHJpbmcoYyksMTApO3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGIpfTt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFY9Yn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5iaWdpbnQhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGEuYmlnaW50KX1lbHNle2lmKHR5cGVvZiBhW1wiaW50XCJdIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5SW50ZWdlcihhW1wiaW50XCJdKX1lbHNle2lmKHR5cGVvZiBhPT1cIm51bWJlclwiKXt0aGlzLnNldEJ5SW50ZWdlcihhKX1lbHNle2lmKHR5cGVvZiBhLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRWYWx1ZUhleChhLmhleCl9fX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkludGVnZXIsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJCaXRTdHJpbmc9ZnVuY3Rpb24oYil7aWYoYiE9PXVuZGVmaW5lZCYmdHlwZW9mIGIub2JqIT09XCJ1bmRlZmluZWRcIil7dmFyIGE9S0pVUi5hc24xLkFTTjFVdGlsLm5ld09iamVjdChiLm9iaik7Yi5oZXg9XCIwMFwiK2EuZ2V0RW5jb2RlZEhleCgpfUtKVVIuYXNuMS5ERVJCaXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwM1wiO3RoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzPWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9Y307dGhpcy5zZXRVbnVzZWRCaXRzQW5kSGV4VmFsdWU9ZnVuY3Rpb24oYyxlKXtpZihjPDB8fDc8Yyl7dGhyb3dcInVudXNlZCBiaXRzIHNoYWxsIGJlIGZyb20gMCB0byA3OiB1ID0gXCIrY312YXIgZD1cIjBcIitjO3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9ZCtlfTt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nPWZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKC8wKyQvLFwiXCIpO3ZhciBmPTgtZS5sZW5ndGglODtpZihmPT04KXtmPTB9Zm9yKHZhciBnPTA7Zzw9ZjtnKyspe2UrPVwiMFwifXZhciBqPVwiXCI7Zm9yKHZhciBnPTA7ZzxlLmxlbmd0aC0xO2crPTgpe3ZhciBkPWUuc3Vic3RyKGcsOCk7dmFyIGM9cGFyc2VJbnQoZCwyKS50b1N0cmluZygxNik7aWYoYy5sZW5ndGg9PTEpe2M9XCIwXCIrY31qKz1jfXRoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9XCIwXCIrZitqfTt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5PWZ1bmN0aW9uKGUpe3ZhciBkPVwiXCI7Zm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe2lmKGVbY109PXRydWUpe2QrPVwiMVwifWVsc2V7ZCs9XCIwXCJ9fXRoaXMuc2V0QnlCaW5hcnlTdHJpbmcoZCl9O3RoaXMubmV3RmFsc2VBcnJheT1mdW5jdGlvbihlKXt2YXIgYz1uZXcgQXJyYXkoZSk7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Y1tkXT1mYWxzZX1yZXR1cm4gY307dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYj09XCJzdHJpbmdcIiYmYi50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eWzAtOWEtZl0rJC8pKXt0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyhiKX1lbHNle2lmKHR5cGVvZiBiLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHMoYi5oZXgpfWVsc2V7aWYodHlwZW9mIGIuYmluIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nKGIuYmluKX1lbHNle2lmKHR5cGVvZiBiLmFycmF5IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5KGIuYXJyYXkpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPY3RldFN0cmluZz1mdW5jdGlvbihiKXtpZihiIT09dW5kZWZpbmVkJiZ0eXBlb2YgYi5vYmohPT1cInVuZGVmaW5lZFwiKXt2YXIgYT1LSlVSLmFzbjEuQVNOMVV0aWwubmV3T2JqZWN0KGIub2JqKTtiLmhleD1hLmdldEVuY29kZWRIZXgoKX1LSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYik7dGhpcy5oVD1cIjA0XCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJPY3RldFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJOdWxsPWZ1bmN0aW9uKCl7S0pVUi5hc24xLkRFUk51bGwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwNVwiO3RoaXMuaFRMVj1cIjA1MDBcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk51bGwsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyPWZ1bmN0aW9uKGMpe3ZhciBiPWZ1bmN0aW9uKGQpe3ZhciBlPWQudG9TdHJpbmcoMTYpO2lmKGUubGVuZ3RoPT0xKXtlPVwiMFwiK2V9cmV0dXJuIGV9O3ZhciBhPWZ1bmN0aW9uKGspe3ZhciBqPVwiXCI7dmFyIGU9bmV3IEJpZ0ludGVnZXIoaywxMCk7dmFyIGQ9ZS50b1N0cmluZygyKTt2YXIgZj03LWQubGVuZ3RoJTc7aWYoZj09Nyl7Zj0wfXZhciBtPVwiXCI7Zm9yKHZhciBnPTA7ZzxmO2crKyl7bSs9XCIwXCJ9ZD1tK2Q7Zm9yKHZhciBnPTA7ZzxkLmxlbmd0aC0xO2crPTcpe3ZhciBsPWQuc3Vic3RyKGcsNyk7aWYoZyE9ZC5sZW5ndGgtNyl7bD1cIjFcIitsfWorPWIocGFyc2VJbnQobCwyKSl9cmV0dXJuIGp9O0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDZcIjt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9ZH07dGhpcy5zZXRWYWx1ZU9pZFN0cmluZz1mdW5jdGlvbihmKXtpZighZi5tYXRjaCgvXlswLTkuXSskLykpe3Rocm93XCJtYWxmb3JtZWQgb2lkIHN0cmluZzogXCIrZn12YXIgZz1cIlwiO3ZhciBkPWYuc3BsaXQoXCIuXCIpO3ZhciBqPXBhcnNlSW50KGRbMF0pKjQwK3BhcnNlSW50KGRbMV0pO2crPWIoaik7ZC5zcGxpY2UoMCwyKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyl7Zys9YShkW2VdKX10aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9bnVsbDt0aGlzLmhWPWd9O3RoaXMuc2V0VmFsdWVOYW1lPWZ1bmN0aW9uKGUpe3ZhciBkPUtKVVIuYXNuMS54NTA5Lk9JRC5uYW1lMm9pZChlKTtpZihkIT09XCJcIil7dGhpcy5zZXRWYWx1ZU9pZFN0cmluZyhkKX1lbHNle3Rocm93XCJERVJPYmplY3RJZGVudGlmaWVyIG9pZE5hbWUgdW5kZWZpbmVkOiBcIitlfX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKGMhPT11bmRlZmluZWQpe2lmKHR5cGVvZiBjPT09XCJzdHJpbmdcIil7aWYoYy5tYXRjaCgvXlswLTJdLlswLTkuXSskLykpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYyl9ZWxzZXt0aGlzLnNldFZhbHVlTmFtZShjKX19ZWxzZXtpZihjLm9pZCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRWYWx1ZU9pZFN0cmluZyhjLm9pZCl9ZWxzZXtpZihjLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRWYWx1ZUhleChjLmhleCl9ZWxzZXtpZihjLm5hbWUhPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVOYW1lKGMubmFtZSl9fX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk9iamVjdElkZW50aWZpZXIsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJFbnVtZXJhdGVkPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJFbnVtZXJhdGVkLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMGFcIjt0aGlzLnNldEJ5QmlnSW50ZWdlcj1mdW5jdGlvbihiKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPUtKVVIuYXNuMS5BU04xVXRpbC5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleChiKX07dGhpcy5zZXRCeUludGVnZXI9ZnVuY3Rpb24oYyl7dmFyIGI9bmV3IEJpZ0ludGVnZXIoU3RyaW5nKGMpLDEwKTt0aGlzLnNldEJ5QmlnSW50ZWdlcihiKX07dGhpcy5zZXRWYWx1ZUhleD1mdW5jdGlvbihiKXt0aGlzLmhWPWJ9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYSE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGFbXCJpbnRcIl0hPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlJbnRlZ2VyKGFbXCJpbnRcIl0pfWVsc2V7aWYodHlwZW9mIGE9PVwibnVtYmVyXCIpe3RoaXMuc2V0QnlJbnRlZ2VyKGEpfWVsc2V7aWYodHlwZW9mIGEuaGV4IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldFZhbHVlSGV4KGEuaGV4KX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJFbnVtZXJhdGVkLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSVVRGOFN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSVVRGOFN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMGNcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlVURjhTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSTnVtZXJpY1N0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSTnVtZXJpY1N0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTJcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjEzXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTRcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSSUE1U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJJQTVTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE2XCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJJQTVTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSVVRDVGltZT1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSVVRDVGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTdcIjt0aGlzLnNldEJ5RGF0ZT1mdW5jdGlvbihiKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmRhdGU9Yjt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcInV0Y1wiKTt0aGlzLmhWPXN0b2hleCh0aGlzLnMpfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5kYXRlPT1cInVuZGVmaW5lZFwiJiZ0eXBlb2YgdGhpcy5zPT1cInVuZGVmaW5lZFwiKXt0aGlzLmRhdGU9bmV3IERhdGUoKTt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcInV0Y1wiKTt0aGlzLmhWPXN0b2hleCh0aGlzLnMpfXJldHVybiB0aGlzLmhWfTtpZihhIT09dW5kZWZpbmVkKXtpZihhLnN0ciE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmcoYS5zdHIpfWVsc2V7aWYodHlwZW9mIGE9PVwic3RyaW5nXCImJmEubWF0Y2goL15bMC05XXsxMn1aJC8pKXt0aGlzLnNldFN0cmluZyhhKX1lbHNle2lmKGEuaGV4IT09dW5kZWZpbmVkKXt0aGlzLnNldFN0cmluZ0hleChhLmhleCl9ZWxzZXtpZihhLmRhdGUhPT11bmRlZmluZWQpe3RoaXMuc2V0QnlEYXRlKGEuZGF0ZSl9fX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlVUQ1RpbWUsS0pVUi5hc24xLkRFUkFic3RyYWN0VGltZSk7S0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZT1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSR2VuZXJhbGl6ZWRUaW1lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxOFwiO3RoaXMud2l0aE1pbGxpcz1mYWxzZTt0aGlzLnNldEJ5RGF0ZT1mdW5jdGlvbihiKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmRhdGU9Yjt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcImdlblwiLHRoaXMud2l0aE1pbGxpcyk7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7aWYodGhpcy5kYXRlPT09dW5kZWZpbmVkJiZ0aGlzLnM9PT11bmRlZmluZWQpe3RoaXMuZGF0ZT1uZXcgRGF0ZSgpO3RoaXMucz10aGlzLmZvcm1hdERhdGUodGhpcy5kYXRlLFwiZ2VuXCIsdGhpcy53aXRoTWlsbGlzKTt0aGlzLmhWPXN0b2hleCh0aGlzLnMpfXJldHVybiB0aGlzLmhWfTtpZihhIT09dW5kZWZpbmVkKXtpZihhLnN0ciE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmcoYS5zdHIpfWVsc2V7aWYodHlwZW9mIGE9PVwic3RyaW5nXCImJmEubWF0Y2goL15bMC05XXsxNH1aJC8pKXt0aGlzLnNldFN0cmluZyhhKX1lbHNle2lmKGEuaGV4IT09dW5kZWZpbmVkKXt0aGlzLnNldFN0cmluZ0hleChhLmhleCl9ZWxzZXtpZihhLmRhdGUhPT11bmRlZmluZWQpe3RoaXMuc2V0QnlEYXRlKGEuZGF0ZSl9fX19aWYoYS5taWxsaXM9PT10cnVlKXt0aGlzLndpdGhNaWxsaXM9dHJ1ZX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSR2VuZXJhbGl6ZWRUaW1lLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUpO0tKVVIuYXNuMS5ERVJTZXF1ZW5jZT1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSU2VxdWVuY2Uuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjMwXCI7dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7dmFyIGM9XCJcIjtmb3IodmFyIGI9MDtiPHRoaXMuYXNuMUFycmF5Lmxlbmd0aDtiKyspe3ZhciBkPXRoaXMuYXNuMUFycmF5W2JdO2MrPWQuZ2V0RW5jb2RlZEhleCgpfXRoaXMuaFY9YztyZXR1cm4gdGhpcy5oVn19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJTZXF1ZW5jZSxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtLSlVSLmFzbjEuREVSU2V0PWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJTZXQuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjMxXCI7dGhpcy5zb3J0RmxhZz10cnVlO3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3ZhciBiPW5ldyBBcnJheSgpO2Zvcih2YXIgYz0wO2M8dGhpcy5hc24xQXJyYXkubGVuZ3RoO2MrKyl7dmFyIGQ9dGhpcy5hc24xQXJyYXlbY107Yi5wdXNoKGQuZ2V0RW5jb2RlZEhleCgpKX1pZih0aGlzLnNvcnRGbGFnPT10cnVlKXtiLnNvcnQoKX10aGlzLmhWPWIuam9pbihcIlwiKTtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGEhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBhLnNvcnRmbGFnIT1cInVuZGVmaW5lZFwiJiZhLnNvcnRmbGFnPT1mYWxzZSl7dGhpcy5zb3J0RmxhZz1mYWxzZX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSU2V0LEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQpO0tKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3Q9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlRhZ2dlZE9iamVjdC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cImEwXCI7dGhpcy5oVj1cIlwiO3RoaXMuaXNFeHBsaWNpdD10cnVlO3RoaXMuYXNuMU9iamVjdD1udWxsO3RoaXMuc2V0QVNOMU9iamVjdD1mdW5jdGlvbihiLGMsZCl7dGhpcy5oVD1jO3RoaXMuaXNFeHBsaWNpdD1iO3RoaXMuYXNuMU9iamVjdD1kO2lmKHRoaXMuaXNFeHBsaWNpdCl7dGhpcy5oVj10aGlzLmFzbjFPYmplY3QuZ2V0RW5jb2RlZEhleCgpO3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlfWVsc2V7dGhpcy5oVj1udWxsO3RoaXMuaFRMVj1kLmdldEVuY29kZWRIZXgoKTt0aGlzLmhUTFY9dGhpcy5oVExWLnJlcGxhY2UoL14uLi8sYyk7dGhpcy5pc01vZGlmaWVkPWZhbHNlfX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS50YWchPVwidW5kZWZpbmVkXCIpe3RoaXMuaFQ9YS50YWd9aWYodHlwZW9mIGEuZXhwbGljaXQhPVwidW5kZWZpbmVkXCIpe3RoaXMuaXNFeHBsaWNpdD1hLmV4cGxpY2l0fWlmKHR5cGVvZiBhLm9iaiE9XCJ1bmRlZmluZWRcIil7dGhpcy5hc24xT2JqZWN0PWEub2JqO3RoaXMuc2V0QVNOMU9iamVjdCh0aGlzLmlzRXhwbGljaXQsdGhpcy5oVCx0aGlzLmFzbjFPYmplY3QpfX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3QsS0pVUi5hc24xLkFTTjFPYmplY3QpO1xudmFyIEFTTjFIRVg9bmV3IGZ1bmN0aW9uKCl7fTtBU04xSEVYLmdldExibGVuPWZ1bmN0aW9uKGMsYSl7aWYoYy5zdWJzdHIoYSsyLDEpIT1cIjhcIil7cmV0dXJuIDF9dmFyIGI9cGFyc2VJbnQoYy5zdWJzdHIoYSszLDEpKTtpZihiPT0wKXtyZXR1cm4gLTF9aWYoMDxiJiZiPDEwKXtyZXR1cm4gYisxfXJldHVybiAtMn07QVNOMUhFWC5nZXRMPWZ1bmN0aW9uKGMsYil7dmFyIGE9QVNOMUhFWC5nZXRMYmxlbihjLGIpO2lmKGE8MSl7cmV0dXJuXCJcIn1yZXR1cm4gYy5zdWJzdHIoYisyLGEqMil9O0FTTjFIRVguZ2V0VmJsZW49ZnVuY3Rpb24oZCxhKXt2YXIgYyxiO2M9QVNOMUhFWC5nZXRMKGQsYSk7aWYoYz09XCJcIil7cmV0dXJuIC0xfWlmKGMuc3Vic3RyKDAsMSk9PT1cIjhcIil7Yj1uZXcgQmlnSW50ZWdlcihjLnN1YnN0cigyKSwxNil9ZWxzZXtiPW5ldyBCaWdJbnRlZ2VyKGMsMTYpfXJldHVybiBiLmludFZhbHVlKCl9O0FTTjFIRVguZ2V0VmlkeD1mdW5jdGlvbihjLGIpe3ZhciBhPUFTTjFIRVguZ2V0TGJsZW4oYyxiKTtpZihhPDApe3JldHVybiBhfXJldHVybiBiKyhhKzEpKjJ9O0FTTjFIRVguZ2V0Vj1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gZC5zdWJzdHIoYyxiKjIpfTtBU04xSEVYLmdldFRMVj1mdW5jdGlvbihiLGEpe3JldHVybiBiLnN1YnN0cihhLDIpK0FTTjFIRVguZ2V0TChiLGEpK0FTTjFIRVguZ2V0VihiLGEpfTtBU04xSEVYLmdldE5leHRTaWJsaW5nSWR4PWZ1bmN0aW9uKGQsYSl7dmFyIGM9QVNOMUhFWC5nZXRWaWR4KGQsYSk7dmFyIGI9QVNOMUhFWC5nZXRWYmxlbihkLGEpO3JldHVybiBjK2IqMn07QVNOMUhFWC5nZXRDaGlsZElkeD1mdW5jdGlvbihlLGYpe3ZhciBqPUFTTjFIRVg7dmFyIGc9bmV3IEFycmF5KCk7dmFyIGk9ai5nZXRWaWR4KGUsZik7aWYoZS5zdWJzdHIoZiwyKT09XCIwM1wiKXtnLnB1c2goaSsyKX1lbHNle2cucHVzaChpKX12YXIgbD1qLmdldFZibGVuKGUsZik7dmFyIGM9aTt2YXIgZD0wO3doaWxlKDEpe3ZhciBiPWouZ2V0TmV4dFNpYmxpbmdJZHgoZSxjKTtpZihiPT1udWxsfHwoYi1pPj0obCoyKSkpe2JyZWFrfWlmKGQ+PTIwMCl7YnJlYWt9Zy5wdXNoKGIpO2M9YjtkKyt9cmV0dXJuIGd9O0FTTjFIRVguZ2V0TnRoQ2hpbGRJZHg9ZnVuY3Rpb24oZCxiLGUpe3ZhciBjPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZCxiKTtyZXR1cm4gY1tlXX07QVNOMUhFWC5nZXRJZHhieUxpc3Q9ZnVuY3Rpb24oZSxkLGMsaSl7dmFyIGc9QVNOMUhFWDt2YXIgZixiO2lmKGMubGVuZ3RoPT0wKXtpZihpIT09dW5kZWZpbmVkKXtpZihlLnN1YnN0cihkLDIpIT09aSl7dGhyb3dcImNoZWNraW5nIHRhZyBkb2Vzbid0IG1hdGNoOiBcIitlLnN1YnN0cihkLDIpK1wiIT1cIitpfX1yZXR1cm4gZH1mPWMuc2hpZnQoKTtiPWcuZ2V0Q2hpbGRJZHgoZSxkKTtyZXR1cm4gZy5nZXRJZHhieUxpc3QoZSxiW2ZdLGMsaSl9O0FTTjFIRVguZ2V0VExWYnlMaXN0PWZ1bmN0aW9uKGQsYyxiLGYpe3ZhciBlPUFTTjFIRVg7dmFyIGE9ZS5nZXRJZHhieUxpc3QoZCxjLGIpO2lmKGE9PT11bmRlZmluZWQpe3Rocm93XCJjYW4ndCBmaW5kIG50aExpc3Qgb2JqZWN0XCJ9aWYoZiE9PXVuZGVmaW5lZCl7aWYoZC5zdWJzdHIoYSwyKSE9Zil7dGhyb3dcImNoZWNraW5nIHRhZyBkb2Vzbid0IG1hdGNoOiBcIitkLnN1YnN0cihhLDIpK1wiIT1cIitmfX1yZXR1cm4gZS5nZXRUTFYoZCxhKX07QVNOMUhFWC5nZXRWYnlMaXN0PWZ1bmN0aW9uKGUsYyxiLGcsaSl7dmFyIGY9QVNOMUhFWDt2YXIgYSxkO2E9Zi5nZXRJZHhieUxpc3QoZSxjLGIsZyk7aWYoYT09PXVuZGVmaW5lZCl7dGhyb3dcImNhbid0IGZpbmQgbnRoTGlzdCBvYmplY3RcIn1kPWYuZ2V0VihlLGEpO2lmKGk9PT10cnVlKXtkPWQuc3Vic3RyKDIpfXJldHVybiBkfTtBU04xSEVYLmhleHRvb2lkc3RyPWZ1bmN0aW9uKGUpe3ZhciBoPWZ1bmN0aW9uKGIsYSl7aWYoYi5sZW5ndGg+PWEpe3JldHVybiBifXJldHVybiBuZXcgQXJyYXkoYS1iLmxlbmd0aCsxKS5qb2luKFwiMFwiKStifTt2YXIgbD1bXTt2YXIgbz1lLnN1YnN0cigwLDIpO3ZhciBmPXBhcnNlSW50KG8sMTYpO2xbMF09bmV3IFN0cmluZyhNYXRoLmZsb29yKGYvNDApKTtsWzFdPW5ldyBTdHJpbmcoZiU0MCk7dmFyIG09ZS5zdWJzdHIoMik7dmFyIGs9W107Zm9yKHZhciBnPTA7ZzxtLmxlbmd0aC8yO2crKyl7ay5wdXNoKHBhcnNlSW50KG0uc3Vic3RyKGcqMiwyKSwxNikpfXZhciBqPVtdO3ZhciBkPVwiXCI7Zm9yKHZhciBnPTA7ZzxrLmxlbmd0aDtnKyspe2lmKGtbZ10mMTI4KXtkPWQraCgoa1tnXSYxMjcpLnRvU3RyaW5nKDIpLDcpfWVsc2V7ZD1kK2goKGtbZ10mMTI3KS50b1N0cmluZygyKSw3KTtqLnB1c2gobmV3IFN0cmluZyhwYXJzZUludChkLDIpKSk7ZD1cIlwifX12YXIgbj1sLmpvaW4oXCIuXCIpO2lmKGoubGVuZ3RoPjApe249bitcIi5cIitqLmpvaW4oXCIuXCIpfXJldHVybiBufTtBU04xSEVYLmR1bXA9ZnVuY3Rpb24odCxjLGwsZyl7dmFyIHA9QVNOMUhFWDt2YXIgaj1wLmdldFY7dmFyIHk9cC5kdW1wO3ZhciB3PXAuZ2V0Q2hpbGRJZHg7dmFyIGU9dDtpZih0IGluc3RhbmNlb2YgS0pVUi5hc24xLkFTTjFPYmplY3Qpe2U9dC5nZXRFbmNvZGVkSGV4KCl9dmFyIHE9ZnVuY3Rpb24oQSxpKXtpZihBLmxlbmd0aDw9aSoyKXtyZXR1cm4gQX1lbHNle3ZhciB2PUEuc3Vic3RyKDAsaSkrXCIuLih0b3RhbCBcIitBLmxlbmd0aC8yK1wiYnl0ZXMpLi5cIitBLnN1YnN0cihBLmxlbmd0aC1pLGkpO3JldHVybiB2fX07aWYoYz09PXVuZGVmaW5lZCl7Yz17b21taXRfbG9uZ19vY3RldDozMn19aWYobD09PXVuZGVmaW5lZCl7bD0wfWlmKGc9PT11bmRlZmluZWQpe2c9XCJcIn12YXIgeD1jLm9tbWl0X2xvbmdfb2N0ZXQ7aWYoZS5zdWJzdHIobCwyKT09XCIwMVwiKXt2YXIgaD1qKGUsbCk7aWYoaD09XCIwMFwiKXtyZXR1cm4gZytcIkJPT0xFQU4gRkFMU0VcXG5cIn1lbHNle3JldHVybiBnK1wiQk9PTEVBTiBUUlVFXFxuXCJ9fWlmKGUuc3Vic3RyKGwsMik9PVwiMDJcIil7dmFyIGg9aihlLGwpO3JldHVybiBnK1wiSU5URUdFUiBcIitxKGgseCkrXCJcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjAzXCIpe3ZhciBoPWooZSxsKTtyZXR1cm4gZytcIkJJVFNUUklORyBcIitxKGgseCkrXCJcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjA0XCIpe3ZhciBoPWooZSxsKTtpZihwLmlzQVNOMUhFWChoKSl7dmFyIGs9ZytcIk9DVEVUU1RSSU5HLCBlbmNhcHN1bGF0ZXNcXG5cIjtrPWsreShoLGMsMCxnK1wiICBcIik7cmV0dXJuIGt9ZWxzZXtyZXR1cm4gZytcIk9DVEVUU1RSSU5HIFwiK3EoaCx4KStcIlxcblwifX1pZihlLnN1YnN0cihsLDIpPT1cIjA1XCIpe3JldHVybiBnK1wiTlVMTFxcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMDZcIil7dmFyIG09aihlLGwpO3ZhciBhPUtKVVIuYXNuMS5BU04xVXRpbC5vaWRIZXhUb0ludChtKTt2YXIgbz1LSlVSLmFzbjEueDUwOS5PSUQub2lkMm5hbWUoYSk7dmFyIGI9YS5yZXBsYWNlKC9cXC4vZyxcIiBcIik7aWYobyE9XCJcIil7cmV0dXJuIGcrXCJPYmplY3RJZGVudGlmaWVyIFwiK28rXCIgKFwiK2IrXCIpXFxuXCJ9ZWxzZXtyZXR1cm4gZytcIk9iamVjdElkZW50aWZpZXIgKFwiK2IrXCIpXFxuXCJ9fWlmKGUuc3Vic3RyKGwsMik9PVwiMGNcIil7cmV0dXJuIGcrXCJVVEY4U3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjEzXCIpe3JldHVybiBnK1wiUHJpbnRhYmxlU3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjE0XCIpe3JldHVybiBnK1wiVGVsZXRleFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxNlwiKXtyZXR1cm4gZytcIklBNVN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxN1wiKXtyZXR1cm4gZytcIlVUQ1RpbWUgXCIraGV4dG91dGY4KGooZSxsKSkrXCJcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjE4XCIpe3JldHVybiBnK1wiR2VuZXJhbGl6ZWRUaW1lIFwiK2hleHRvdXRmOChqKGUsbCkpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIzMFwiKXtpZihlLnN1YnN0cihsLDQpPT1cIjMwMDBcIil7cmV0dXJuIGcrXCJTRVFVRU5DRSB7fVxcblwifXZhciBrPWcrXCJTRVFVRU5DRVxcblwiO3ZhciBkPXcoZSxsKTt2YXIgZj1jO2lmKChkLmxlbmd0aD09Mnx8ZC5sZW5ndGg9PTMpJiZlLnN1YnN0cihkWzBdLDIpPT1cIjA2XCImJmUuc3Vic3RyKGRbZC5sZW5ndGgtMV0sMik9PVwiMDRcIil7dmFyIG89cC5vaWRuYW1lKGooZSxkWzBdKSk7dmFyIHI9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSk7ci54NTA5RXh0TmFtZT1vO2Y9cn1mb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxmLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfWlmKGUuc3Vic3RyKGwsMik9PVwiMzFcIil7dmFyIGs9ZytcIlNFVFxcblwiO3ZhciBkPXcoZSxsKTtmb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxjLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfXZhciB6PXBhcnNlSW50KGUuc3Vic3RyKGwsMiksMTYpO2lmKCh6JjEyOCkhPTApe3ZhciBuPXomMzE7aWYoKHomMzIpIT0wKXt2YXIgaz1nK1wiW1wiK24rXCJdXFxuXCI7dmFyIGQ9dyhlLGwpO2Zvcih2YXIgdT0wO3U8ZC5sZW5ndGg7dSsrKXtrPWsreShlLGMsZFt1XSxnK1wiICBcIil9cmV0dXJuIGt9ZWxzZXt2YXIgaD1qKGUsbCk7aWYoaC5zdWJzdHIoMCw4KT09XCI2ODc0NzQ3MFwiKXtoPWhleHRvdXRmOChoKX1pZihjLng1MDlFeHROYW1lPT09XCJzdWJqZWN0QWx0TmFtZVwiJiZuPT0yKXtoPWhleHRvdXRmOChoKX12YXIgaz1nK1wiW1wiK24rXCJdIFwiK2grXCJcXG5cIjtyZXR1cm4ga319cmV0dXJuIGcrXCJVTktOT1dOKFwiK2Uuc3Vic3RyKGwsMikrXCIpIFwiK2ooZSxsKStcIlxcblwifTtBU04xSEVYLmlzQVNOMUhFWD1mdW5jdGlvbihlKXt2YXIgZD1BU04xSEVYO2lmKGUubGVuZ3RoJTI9PTEpe3JldHVybiBmYWxzZX12YXIgYz1kLmdldFZibGVuKGUsMCk7dmFyIGI9ZS5zdWJzdHIoMCwyKTt2YXIgZj1kLmdldEwoZSwwKTt2YXIgYT1lLmxlbmd0aC1iLmxlbmd0aC1mLmxlbmd0aDtpZihhPT1jKjIpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07QVNOMUhFWC5vaWRuYW1lPWZ1bmN0aW9uKGEpe3ZhciBjPUtKVVIuYXNuMTtpZihLSlVSLmxhbmcuU3RyaW5nLmlzSGV4KGEpKXthPWMuQVNOMVV0aWwub2lkSGV4VG9JbnQoYSl9dmFyIGI9Yy54NTA5Lk9JRC5vaWQybmFtZShhKTtpZihiPT09XCJcIil7Yj1hfXJldHVybiBifTtcbnZhciBLSlVSO2lmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5sYW5nPT1cInVuZGVmaW5lZFwifHwhS0pVUi5sYW5nKXtLSlVSLmxhbmc9e319S0pVUi5sYW5nLlN0cmluZz1mdW5jdGlvbigpe307ZnVuY3Rpb24gQmFzZTY0eCgpe31mdW5jdGlvbiBzdG9CQShkKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPGQubGVuZ3RoO2MrKyl7YltjXT1kLmNoYXJDb2RlQXQoYyl9cmV0dXJuIGJ9ZnVuY3Rpb24gQkF0b3MoYil7dmFyIGQ9XCJcIjtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7ZD1kK1N0cmluZy5mcm9tQ2hhckNvZGUoYltjXSl9cmV0dXJuIGR9ZnVuY3Rpb24gQkF0b2hleChiKXt2YXIgZT1cIlwiO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgYz1iW2RdLnRvU3RyaW5nKDE2KTtpZihjLmxlbmd0aD09MSl7Yz1cIjBcIitjfWU9ZStjfXJldHVybiBlfWZ1bmN0aW9uIHN0b2hleChhKXtyZXR1cm4gQkF0b2hleChzdG9CQShhKSl9ZnVuY3Rpb24gc3RvYjY0KGEpe3JldHVybiBoZXgyYjY0KHN0b2hleChhKSl9ZnVuY3Rpb24gc3RvYjY0dShhKXtyZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoc3RvaGV4KGEpKSl9ZnVuY3Rpb24gYjY0dXRvcyhhKXtyZXR1cm4gQkF0b3MoYjY0dG9CQShiNjR1dG9iNjQoYSkpKX1mdW5jdGlvbiBiNjR0b2I2NHUoYSl7YT1hLnJlcGxhY2UoL1xcPS9nLFwiXCIpO2E9YS5yZXBsYWNlKC9cXCsvZyxcIi1cIik7YT1hLnJlcGxhY2UoL1xcLy9nLFwiX1wiKTtyZXR1cm4gYX1mdW5jdGlvbiBiNjR1dG9iNjQoYSl7aWYoYS5sZW5ndGglND09Mil7YT1hK1wiPT1cIn1lbHNle2lmKGEubGVuZ3RoJTQ9PTMpe2E9YStcIj1cIn19YT1hLnJlcGxhY2UoLy0vZyxcIitcIik7YT1hLnJlcGxhY2UoL18vZyxcIi9cIik7cmV0dXJuIGF9ZnVuY3Rpb24gaGV4dG9iNjR1KGEpe2lmKGEubGVuZ3RoJTI9PTEpe2E9XCIwXCIrYX1yZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoYSkpfWZ1bmN0aW9uIGI2NHV0b2hleChhKXtyZXR1cm4gYjY0dG9oZXgoYjY0dXRvYjY0KGEpKX12YXIgdXRmOHRvYjY0dSxiNjR1dG91dGY4O2lmKHR5cGVvZiBCdWZmZXI9PT1cImZ1bmN0aW9uXCIpe3V0Zjh0b2I2NHU9ZnVuY3Rpb24oYSl7cmV0dXJuIGI2NHRvYjY0dShuZXcgQnVmZmVyKGEsXCJ1dGY4XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpKX07YjY0dXRvdXRmOD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJ1ZmZlcihiNjR1dG9iNjQoYSksXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpfX1lbHNle3V0Zjh0b2I2NHU9ZnVuY3Rpb24oYSl7cmV0dXJuIGhleHRvYjY0dSh1cmljbXB0b2hleChlbmNvZGVVUklDb21wb25lbnRBbGwoYSkpKX07YjY0dXRvdXRmOD1mdW5jdGlvbihhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGhleHRvdXJpY21wKGI2NHV0b2hleChhKSkpfX1mdW5jdGlvbiB1dGY4dG9iNjQoYSl7cmV0dXJuIGhleDJiNjQodXJpY21wdG9oZXgoZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpKSl9ZnVuY3Rpb24gYjY0dG91dGY4KGEpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoaGV4dG91cmljbXAoYjY0dG9oZXgoYSkpKX1mdW5jdGlvbiB1dGY4dG9oZXgoYSl7cmV0dXJuIHVyaWNtcHRvaGV4KGVuY29kZVVSSUNvbXBvbmVudEFsbChhKSl9ZnVuY3Rpb24gaGV4dG91dGY4KGEpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoaGV4dG91cmljbXAoYSkpfWZ1bmN0aW9uIGhleHRvcnN0cihjKXt2YXIgYj1cIlwiO2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGgtMTthKz0yKXtiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMuc3Vic3RyKGEsMiksMTYpKX1yZXR1cm4gYn1mdW5jdGlvbiByc3RydG9oZXgoYyl7dmFyIGE9XCJcIjtmb3IodmFyIGI9MDtiPGMubGVuZ3RoO2IrKyl7YSs9KFwiMFwiK2MuY2hhckNvZGVBdChiKS50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gYX1mdW5jdGlvbiBoZXh0b2I2NChhKXtyZXR1cm4gaGV4MmI2NChhKX1mdW5jdGlvbiBoZXh0b2I2NG5sKGIpe3ZhciBhPWhleHRvYjY0KGIpO3ZhciBjPWEucmVwbGFjZSgvKC57NjR9KS9nLFwiJDFcXHJcXG5cIik7Yz1jLnJlcGxhY2UoL1xcclxcbiQvLFwiXCIpO3JldHVybiBjfWZ1bmN0aW9uIGI2NG5sdG9oZXgoYil7dmFyIGE9Yi5yZXBsYWNlKC9bXjAtOUEtWmEtelxcLys9XSovZyxcIlwiKTt2YXIgYz1iNjR0b2hleChhKTtyZXR1cm4gY31mdW5jdGlvbiBoZXh0b3BlbShhLGIpe3ZhciBjPWhleHRvYjY0bmwoYSk7cmV0dXJuXCItLS0tLUJFR0lOIFwiK2IrXCItLS0tLVxcclxcblwiK2MrXCJcXHJcXG4tLS0tLUVORCBcIitiK1wiLS0tLS1cXHJcXG5cIn1mdW5jdGlvbiBwZW10b2hleChhLGIpe2lmKGEuaW5kZXhPZihcIi0tLS0tQkVHSU4gXCIpPT0tMSl7dGhyb3dcImNhbid0IGZpbmQgUEVNIGhlYWRlcjogXCIrYn1pZihiIT09dW5kZWZpbmVkKXthPWEucmVwbGFjZShcIi0tLS0tQkVHSU4gXCIrYitcIi0tLS0tXCIsXCJcIik7YT1hLnJlcGxhY2UoXCItLS0tLUVORCBcIitiK1wiLS0tLS1cIixcIlwiKX1lbHNle2E9YS5yZXBsYWNlKC8tLS0tLUJFR0lOIFteLV0rLS0tLS0vLFwiXCIpO2E9YS5yZXBsYWNlKC8tLS0tLUVORCBbXi1dKy0tLS0tLyxcIlwiKX1yZXR1cm4gYjY0bmx0b2hleChhKX1mdW5jdGlvbiBoZXh0b0FycmF5QnVmZmVyKGQpe2lmKGQubGVuZ3RoJTIhPTApe3Rocm93XCJpbnB1dCBpcyBub3QgZXZlbiBsZW5ndGhcIn1pZihkLm1hdGNoKC9eWzAtOUEtRmEtZl0rJC8pPT1udWxsKXt0aHJvd1wiaW5wdXQgaXMgbm90IGhleGFkZWNpbWFsXCJ9dmFyIGI9bmV3IEFycmF5QnVmZmVyKGQubGVuZ3RoLzIpO3ZhciBhPW5ldyBEYXRhVmlldyhiKTtmb3IodmFyIGM9MDtjPGQubGVuZ3RoLzI7YysrKXthLnNldFVpbnQ4KGMscGFyc2VJbnQoZC5zdWJzdHIoYyoyLDIpLDE2KSl9cmV0dXJuIGJ9ZnVuY3Rpb24gQXJyYXlCdWZmZXJ0b2hleChiKXt2YXIgZD1cIlwiO3ZhciBhPW5ldyBEYXRhVmlldyhiKTtmb3IodmFyIGM9MDtjPGIuYnl0ZUxlbmd0aDtjKyspe2QrPShcIjAwXCIrYS5nZXRVaW50OChjKS50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gZH1mdW5jdGlvbiB6dWx1dG9tc2VjKG4pe3ZhciBsLGosbSxlLGYsaSxiLGs7dmFyIGEsaCxnLGM7Yz1uLm1hdGNoKC9eKFxcZHsyfXxcXGR7NH0pKFxcZFxcZCkoXFxkXFxkKShcXGRcXGQpKFxcZFxcZCkoXFxkXFxkKSh8XFwuXFxkKylaJC8pO2lmKGMpe2E9Y1sxXTtsPXBhcnNlSW50KGEpO2lmKGEubGVuZ3RoPT09Mil7aWYoNTA8PWwmJmw8MTAwKXtsPTE5MDArbH1lbHNle2lmKDA8PWwmJmw8NTApe2w9MjAwMCtsfX19aj1wYXJzZUludChjWzJdKS0xO209cGFyc2VJbnQoY1szXSk7ZT1wYXJzZUludChjWzRdKTtmPXBhcnNlSW50KGNbNV0pO2k9cGFyc2VJbnQoY1s2XSk7Yj0wO2g9Y1s3XTtpZihoIT09XCJcIil7Zz0oaC5zdWJzdHIoMSkrXCIwMFwiKS5zdWJzdHIoMCwzKTtiPXBhcnNlSW50KGcpfXJldHVybiBEYXRlLlVUQyhsLGosbSxlLGYsaSxiKX10aHJvd1widW5zdXBwb3J0ZWQgenVsdSBmb3JtYXQ6IFwiK259ZnVuY3Rpb24genVsdXRvc2VjKGEpe3ZhciBiPXp1bHV0b21zZWMoYSk7cmV0dXJuIH5+KGIvMTAwMCl9ZnVuY3Rpb24genVsdXRvZGF0ZShhKXtyZXR1cm4gbmV3IERhdGUoenVsdXRvbXNlYyhhKSl9ZnVuY3Rpb24gZGF0ZXRvenVsdShnLGUsZil7dmFyIGI7dmFyIGE9Zy5nZXRVVENGdWxsWWVhcigpO2lmKGUpe2lmKGE8MTk1MHx8MjA0OTxhKXt0aHJvd1wibm90IHByb3BlciB5ZWFyIGZvciBVVENUaW1lOiBcIithfWI9KFwiXCIrYSkuc2xpY2UoLTIpfWVsc2V7Yj0oXCIwMDBcIithKS5zbGljZSgtNCl9Yis9KFwiMFwiKyhnLmdldFVUQ01vbnRoKCkrMSkpLnNsaWNlKC0yKTtiKz0oXCIwXCIrZy5nZXRVVENEYXRlKCkpLnNsaWNlKC0yKTtiKz0oXCIwXCIrZy5nZXRVVENIb3VycygpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDTWludXRlcygpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDU2Vjb25kcygpKS5zbGljZSgtMik7aWYoZil7dmFyIGM9Zy5nZXRVVENNaWxsaXNlY29uZHMoKTtpZihjIT09MCl7Yz0oXCIwMFwiK2MpLnNsaWNlKC0zKTtjPWMucmVwbGFjZSgvMCskL2csXCJcIik7Yis9XCIuXCIrY319Yis9XCJaXCI7cmV0dXJuIGJ9ZnVuY3Rpb24gdXJpY21wdG9oZXgoYSl7cmV0dXJuIGEucmVwbGFjZSgvJS9nLFwiXCIpfWZ1bmN0aW9uIGhleHRvdXJpY21wKGEpe3JldHVybiBhLnJlcGxhY2UoLyguLikvZyxcIiUkMVwiKX1mdW5jdGlvbiBpcHY2dG9oZXgoZyl7dmFyIGI9XCJtYWxmb3JtZWQgSVB2NiBhZGRyZXNzXCI7aWYoIWcubWF0Y2goL15bMC05QS1GYS1mOl0rJC8pKXt0aHJvdyBifWc9Zy50b0xvd2VyQ2FzZSgpO3ZhciBkPWcuc3BsaXQoXCI6XCIpLmxlbmd0aC0xO2lmKGQ8Mil7dGhyb3cgYn12YXIgZT1cIjpcIi5yZXBlYXQoNy1kKzIpO2c9Zy5yZXBsYWNlKFwiOjpcIixlKTt2YXIgYz1nLnNwbGl0KFwiOlwiKTtpZihjLmxlbmd0aCE9OCl7dGhyb3cgYn1mb3IodmFyIGY9MDtmPDg7ZisrKXtjW2ZdPShcIjAwMDBcIitjW2ZdKS5zbGljZSgtNCl9cmV0dXJuIGMuam9pbihcIlwiKX1mdW5jdGlvbiBoZXh0b2lwdjYoZSl7aWYoIWUubWF0Y2goL15bMC05QS1GYS1mXXszMn0kLykpe3Rocm93XCJtYWxmb3JtZWQgSVB2NiBhZGRyZXNzIG9jdGV0XCJ9ZT1lLnRvTG93ZXJDYXNlKCk7dmFyIGI9ZS5tYXRjaCgvLnsxLDR9L2cpO2Zvcih2YXIgZD0wO2Q8ODtkKyspe2JbZF09YltkXS5yZXBsYWNlKC9eMCsvLFwiXCIpO2lmKGJbZF09PVwiXCIpe2JbZF09XCIwXCJ9fWU9XCI6XCIrYi5qb2luKFwiOlwiKStcIjpcIjt2YXIgYz1lLm1hdGNoKC86KDA6KXsyLH0vZyk7aWYoYz09PW51bGwpe3JldHVybiBlLnNsaWNlKDEsLTEpfXZhciBmPVwiXCI7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe2lmKGNbZF0ubGVuZ3RoPmYubGVuZ3RoKXtmPWNbZF19fWU9ZS5yZXBsYWNlKGYsXCI6OlwiKTtyZXR1cm4gZS5zbGljZSgxLC0xKX1mdW5jdGlvbiBoZXh0b2lwKGIpe3ZhciBkPVwibWFsZm9ybWVkIGhleCB2YWx1ZVwiO2lmKCFiLm1hdGNoKC9eKFswLTlBLUZhLWZdWzAtOUEtRmEtZl0pezEsfSQvKSl7dGhyb3cgZH1pZihiLmxlbmd0aD09OCl7dmFyIGM7dHJ5e2M9cGFyc2VJbnQoYi5zdWJzdHIoMCwyKSwxNikrXCIuXCIrcGFyc2VJbnQoYi5zdWJzdHIoMiwyKSwxNikrXCIuXCIrcGFyc2VJbnQoYi5zdWJzdHIoNCwyKSwxNikrXCIuXCIrcGFyc2VJbnQoYi5zdWJzdHIoNiwyKSwxNik7cmV0dXJuIGN9Y2F0Y2goYSl7dGhyb3cgZH19ZWxzZXtpZihiLmxlbmd0aD09MzIpe3JldHVybiBoZXh0b2lwdjYoYil9ZWxzZXtyZXR1cm4gYn19fWZ1bmN0aW9uIGlwdG9oZXgoZil7dmFyIGo9XCJtYWxmb3JtZWQgSVAgYWRkcmVzc1wiO2Y9Zi50b0xvd2VyQ2FzZShmKTtpZihmLm1hdGNoKC9eWzAtOS5dKyQvKSl7dmFyIGI9Zi5zcGxpdChcIi5cIik7aWYoYi5sZW5ndGghPT00KXt0aHJvdyBqfXZhciBnPVwiXCI7dHJ5e2Zvcih2YXIgZT0wO2U8NDtlKyspe3ZhciBoPXBhcnNlSW50KGJbZV0pO2crPShcIjBcIitoLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfXJldHVybiBnfWNhdGNoKGMpe3Rocm93IGp9fWVsc2V7aWYoZi5tYXRjaCgvXlswLTlhLWY6XSskLykmJmYuaW5kZXhPZihcIjpcIikhPT0tMSl7cmV0dXJuIGlwdjZ0b2hleChmKX1lbHNle3Rocm93IGp9fX1mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRBbGwoYSl7dmFyIGQ9ZW5jb2RlVVJJQ29tcG9uZW50KGEpO3ZhciBiPVwiXCI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGRbY109PVwiJVwiKXtiPWIrZC5zdWJzdHIoYywzKTtjPWMrMn1lbHNle2I9YitcIiVcIitzdG9oZXgoZFtjXSl9fXJldHVybiBifWZ1bmN0aW9uIG5ld2xpbmVfdG9Vbml4KGEpe2E9YS5yZXBsYWNlKC9cXHJcXG4vbWcsXCJcXG5cIik7cmV0dXJuIGF9ZnVuY3Rpb24gbmV3bGluZV90b0RvcyhhKXthPWEucmVwbGFjZSgvXFxyXFxuL21nLFwiXFxuXCIpO2E9YS5yZXBsYWNlKC9cXG4vbWcsXCJcXHJcXG5cIik7cmV0dXJuIGF9S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXI9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXlswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtpZihhLm1hdGNoKC9eLVswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX07S0pVUi5sYW5nLlN0cmluZy5pc0hleD1mdW5jdGlvbihhKXtpZihhLmxlbmd0aCUyPT0wJiYoYS5tYXRjaCgvXlswLTlhLWZdKyQvKXx8YS5tYXRjaCgvXlswLTlBLUZdKyQvKSkpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX07S0pVUi5sYW5nLlN0cmluZy5pc0Jhc2U2ND1mdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzKy9nLFwiXCIpO2lmKGEubWF0Y2goL15bMC05QS1aYS16K1xcL10rPXswLDN9JC8pJiZhLmxlbmd0aCU0PT0wKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0tKVVIubGFuZy5TdHJpbmcuaXNCYXNlNjRVUkw9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvWysvPV0vKSl7cmV0dXJuIGZhbHNlfWE9YjY0dXRvYjY0KGEpO3JldHVybiBLSlVSLmxhbmcuU3RyaW5nLmlzQmFzZTY0KGEpfTtLSlVSLmxhbmcuU3RyaW5nLmlzSW50ZWdlckFycmF5PWZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC9cXHMrL2csXCJcIik7aWYoYS5tYXRjaCgvXlxcW1swLTksXStcXF0kLykpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX07ZnVuY3Rpb24gaGV4dG9wb3NoZXgoYSl7aWYoYS5sZW5ndGglMj09MSl7cmV0dXJuXCIwXCIrYX1pZihhLnN1YnN0cigwLDEpPlwiN1wiKXtyZXR1cm5cIjAwXCIrYX1yZXR1cm4gYX1mdW5jdGlvbiBpbnRhcnlzdHJ0b2hleChiKXtiPWIucmVwbGFjZSgvXlxccypcXFtcXHMqLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKlxcXVxccyokLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKi9nLFwiXCIpO3RyeXt2YXIgYz1iLnNwbGl0KC8sLykubWFwKGZ1bmN0aW9uKGcsZSxoKXt2YXIgZj1wYXJzZUludChnKTtpZihmPDB8fDI1NTxmKXt0aHJvd1wiaW50ZWdlciBub3QgaW4gcmFuZ2UgMC0yNTVcIn12YXIgZD0oXCIwMFwiK2YudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7cmV0dXJuIGR9KS5qb2luKFwiXCIpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93XCJtYWxmb3JtZWQgaW50ZWdlciBhcnJheSBzdHJpbmc6IFwiK2F9fXZhciBzdHJkaWZmaWR4PWZ1bmN0aW9uKGMsYSl7dmFyIGQ9Yy5sZW5ndGg7aWYoYy5sZW5ndGg+YS5sZW5ndGgpe2Q9YS5sZW5ndGh9Zm9yKHZhciBiPTA7YjxkO2IrKyl7aWYoYy5jaGFyQ29kZUF0KGIpIT1hLmNoYXJDb2RlQXQoYikpe3JldHVybiBifX1pZihjLmxlbmd0aCE9YS5sZW5ndGgpe3JldHVybiBkfXJldHVybiAtMX07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuY3J5cHRvPT1cInVuZGVmaW5lZFwifHwhS0pVUi5jcnlwdG8pe0tKVVIuY3J5cHRvPXt9fUtKVVIuY3J5cHRvLlV0aWw9bmV3IGZ1bmN0aW9uKCl7dGhpcy5ESUdFU1RJTkZPSEVBRD17c2hhMTpcIjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNFwiLHNoYTIyNDpcIjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjXCIsc2hhMjU2OlwiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjBcIixzaGEzODQ6XCIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMFwiLHNoYTUxMjpcIjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwXCIsbWQyOlwiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwMjA1MDAwNDEwXCIsbWQ1OlwiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwXCIscmlwZW1kMTYwOlwiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0XCIsfTt0aGlzLkRFRkFVTFRQUk9WSURFUj17bWQ1OlwiY3J5cHRvanNcIixzaGExOlwiY3J5cHRvanNcIixzaGEyMjQ6XCJjcnlwdG9qc1wiLHNoYTI1NjpcImNyeXB0b2pzXCIsc2hhMzg0OlwiY3J5cHRvanNcIixzaGE1MTI6XCJjcnlwdG9qc1wiLHJpcGVtZDE2MDpcImNyeXB0b2pzXCIsaG1hY21kNTpcImNyeXB0b2pzXCIsaG1hY3NoYTE6XCJjcnlwdG9qc1wiLGhtYWNzaGEyMjQ6XCJjcnlwdG9qc1wiLGhtYWNzaGEyNTY6XCJjcnlwdG9qc1wiLGhtYWNzaGEzODQ6XCJjcnlwdG9qc1wiLGhtYWNzaGE1MTI6XCJjcnlwdG9qc1wiLGhtYWNyaXBlbWQxNjA6XCJjcnlwdG9qc1wiLE1ENXdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEzODR3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEE1MTJ3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixSSVBFTUQxNjB3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixNRDV3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjU2d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEzODR3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTUxMndpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsUklQRU1EMTYwd2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aERTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aERTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjU2d2l0aERTQTpcImNyeXB0b2pzL2pzcnNhXCIsTUQ1d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEEzODR3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIix9O3RoaXMuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRT17bWQ1OkNyeXB0b0pTLmFsZ28uTUQ1LHNoYTE6Q3J5cHRvSlMuYWxnby5TSEExLHNoYTIyNDpDcnlwdG9KUy5hbGdvLlNIQTIyNCxzaGEyNTY6Q3J5cHRvSlMuYWxnby5TSEEyNTYsc2hhMzg0OkNyeXB0b0pTLmFsZ28uU0hBMzg0LHNoYTUxMjpDcnlwdG9KUy5hbGdvLlNIQTUxMixyaXBlbWQxNjA6Q3J5cHRvSlMuYWxnby5SSVBFTUQxNjB9O3RoaXMuZ2V0RGlnZXN0SW5mb0hleD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiB0aGlzLkRJR0VTVElORk9IRUFEW2JdPT1cInVuZGVmaW5lZFwiKXt0aHJvd1wiYWxnIG5vdCBzdXBwb3J0ZWQgaW4gVXRpbC5ESUdFU1RJTkZPSEVBRDogXCIrYn1yZXR1cm4gdGhpcy5ESUdFU1RJTkZPSEVBRFtiXSthfTt0aGlzLmdldFBhZGRlZERpZ2VzdEluZm9IZXg9ZnVuY3Rpb24oaCxhLGope3ZhciBjPXRoaXMuZ2V0RGlnZXN0SW5mb0hleChoLGEpO3ZhciBkPWovNDtpZihjLmxlbmd0aCsyMj5kKXt0aHJvd1wia2V5IGlzIHRvbyBzaG9ydCBmb3IgU2lnQWxnOiBrZXlsZW49XCIraitcIixcIithfXZhciBiPVwiMDAwMVwiO3ZhciBrPVwiMDBcIitjO3ZhciBnPVwiXCI7dmFyIGw9ZC1iLmxlbmd0aC1rLmxlbmd0aDtmb3IodmFyIGY9MDtmPGw7Zis9Mil7Zys9XCJmZlwifXZhciBlPWIrZytrO3JldHVybiBlfTt0aGlzLmhhc2hTdHJpbmc9ZnVuY3Rpb24oYSxjKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOmN9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuaGFzaEhleD1mdW5jdGlvbihiLGMpe3ZhciBhPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6Y30pO3JldHVybiBhLmRpZ2VzdEhleChiKX07dGhpcy5zaGExPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGExXCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuc2hhMjU2PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGEyNTZcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07dGhpcy5zaGEyNTZIZXg9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInNoYTI1NlwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0SGV4KGEpfTt0aGlzLnNoYTUxMj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhNTEyXCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuc2hhNTEySGV4PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGE1MTJcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdEhleChhKX19O0tKVVIuY3J5cHRvLlV0aWwubWQ1PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJtZDVcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07S0pVUi5jcnlwdG8uVXRpbC5yaXBlbWQxNjA9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInJpcGVtZDE2MFwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTj1uZXcgU2VjdXJlUmFuZG9tKCk7S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcz1mdW5jdGlvbihiKXt2YXIgYT1uZXcgQXJyYXkoYik7S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU4ubmV4dEJ5dGVzKGEpO3JldHVybiBCQXRvaGV4KGEpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoS0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcyhhKSwxNil9O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYml0cz1mdW5jdGlvbihkKXt2YXIgYz1kJTg7dmFyIGE9KGQtYykvODt2YXIgYj1uZXcgQXJyYXkoYSsxKTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTi5uZXh0Qnl0ZXMoYik7YlswXT0oKCgyNTU8PGMpJjI1NSleMjU1KSZiWzBdO3JldHVybiBCQXRvaGV4KGIpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJpdHMoYSksMTYpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXg9ZnVuY3Rpb24oYil7dmFyIGE9Yi5iaXRMZW5ndGgoKTt3aGlsZSgxKXt2YXIgYz1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzKGEpO2lmKGIuY29tcGFyZVRvKGMpIT0tMSl7cmV0dXJuIGN9fX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXg9ZnVuY3Rpb24oZSxiKXt2YXIgYz1lLmNvbXBhcmVUbyhiKTtpZihjPT0xKXt0aHJvd1wiYmlNaW4gaXMgZ3JlYXRlciB0aGFuIGJpTWF4XCJ9aWYoYz09MCl7cmV0dXJuIGV9dmFyIGE9Yi5zdWJ0cmFjdChlKTt2YXIgZD1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgoYSk7cmV0dXJuIGQuYWRkKGUpfTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0PWZ1bmN0aW9uKGMpe3ZhciBiPW51bGw7dmFyIGE9bnVsbDt2YXIgZD1udWxsO3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24oZyxmKXtnPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZShnKTtpZihnIT09bnVsbCYmZj09PXVuZGVmaW5lZCl7Zj1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUltnXX1pZihcIjptZDU6c2hhMTpzaGEyMjQ6c2hhMjU2OnNoYTM4NDpzaGE1MTI6cmlwZW1kMTYwOlwiLmluZGV4T2YoZykhPS0xJiZmPT1cImNyeXB0b2pzXCIpe3RyeXt0aGlzLm1kPUtKVVIuY3J5cHRvLlV0aWwuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRVtnXS5jcmVhdGUoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaCl7dmFyIGk9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShoKTt0aGlzLm1kLnVwZGF0ZShpKX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLm1kLmZpbmFsaXplKCk7cmV0dXJuIGgudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19aWYoXCI6c2hhMjU2OlwiLmluZGV4T2YoZykhPS0xJiZmPT1cInNqY2xcIil7dHJ5e3RoaXMubWQ9bmV3IHNqY2wuaGFzaC5zaGEyNTYoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaSl7dmFyIGg9c2pjbC5jb2RlYy5oZXgudG9CaXRzKGkpO3RoaXMubWQudXBkYXRlKGgpfTt0aGlzLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBoPXRoaXMubWQuZmluYWxpemUoKTtyZXR1cm4gc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoaCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihlKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGUpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvd1wiZGlnZXN0KCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGUpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oZSl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTtpZihjIT09dW5kZWZpbmVkKXtpZihjLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPWMuYWxnO2lmKGMucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfXRoaXMuc2V0QWxnQW5kUHJvdmlkZXIodGhpcy5hbGdOYW1lLHRoaXMucHJvdk5hbWUpfX19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZT1mdW5jdGlvbihhKXtpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpe2E9YS50b0xvd2VyQ2FzZSgpO2E9YS5yZXBsYWNlKC8tLyxcIlwiKX1yZXR1cm4gYX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdC5nZXRIYXNoTGVuZ3RoPWZ1bmN0aW9uKGMpe3ZhciBiPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Q7dmFyIGE9Yi5nZXRDYW5vbmljYWxBbGdOYW1lKGMpO2lmKGIuSEFTSExFTkdUSFthXT09PXVuZGVmaW5lZCl7dGhyb3dcIm5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIitjfXJldHVybiBiLkhBU0hMRU5HVEhbYV19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuSEFTSExFTkdUSD17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJpcGVtZDE2MDoyMH07S0pVUi5jcnlwdG8uTWFjPWZ1bmN0aW9uKGQpe3ZhciBmPW51bGw7dmFyIGM9bnVsbDt2YXIgYT1udWxsO3ZhciBlPW51bGw7dmFyIGI9bnVsbDt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKGssaSl7az1rLnRvTG93ZXJDYXNlKCk7aWYoaz09bnVsbCl7az1cImhtYWNzaGExXCJ9az1rLnRvTG93ZXJDYXNlKCk7aWYoay5zdWJzdHIoMCw0KSE9XCJobWFjXCIpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciB1bnN1cHBvcnRlZCBITUFDIGFsZzogXCIra31pZihpPT09dW5kZWZpbmVkKXtpPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW2tdfXRoaXMuYWxnUHJvdj1rK1wiL1wiK2k7dmFyIGc9ay5zdWJzdHIoNCk7aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKGcpIT0tMSYmaT09XCJjcnlwdG9qc1wiKXt0cnl7dmFyIGo9S0pVUi5jcnlwdG8uVXRpbC5DUllQVE9KU01FU1NBR0VESUdFU1ROQU1FW2ddO3RoaXMubWFjPUNyeXB0b0pTLmFsZ28uSE1BQy5jcmVhdGUoaix0aGlzLnBhc3MpfWNhdGNoKGgpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBoYXNoQWxnPVwiK2crXCIvXCIraH10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihsKXt0aGlzLm1hYy51cGRhdGUobCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGwpe3ZhciBtPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UobCk7dGhpcy5tYWMudXBkYXRlKG0pfTt0aGlzLmRvRmluYWw9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLm1hYy5maW5hbGl6ZSgpO3JldHVybiBsLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpfTt0aGlzLmRvRmluYWxTdHJpbmc9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVTdHJpbmcobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVIZXgobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfX19O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbD1mdW5jdGlvbigpe3Rocm93XCJkaWdlc3QoKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbFN0cmluZz1mdW5jdGlvbihnKXt0aHJvd1wiZGlnZXN0U3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24oZyl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5zZXRQYXNzd29yZD1mdW5jdGlvbihoKXtpZih0eXBlb2YgaD09XCJzdHJpbmdcIil7dmFyIGc9aDtpZihoLmxlbmd0aCUyPT0xfHwhaC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7Zz1yc3RydG9oZXgoaCl9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyk7cmV0dXJufWlmKHR5cGVvZiBoIT1cIm9iamVjdFwiKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dmFyIGc9bnVsbDtpZihoLmhleCE9PXVuZGVmaW5lZCl7aWYoaC5oZXgubGVuZ3RoJTIhPTB8fCFoLmhleC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7dGhyb3dcIk1hYzogd3JvbmcgaGV4IHBhc3N3b3JkOiBcIitoLmhleH1nPWguaGV4fWlmKGgudXRmOCE9PXVuZGVmaW5lZCl7Zz11dGY4dG9oZXgoaC51dGY4KX1pZihoLnJzdHIhPT11bmRlZmluZWQpe2c9cnN0cnRvaGV4KGgucnN0cil9aWYoaC5iNjQhPT11bmRlZmluZWQpe2c9YjY0dG9oZXgoaC5iNjQpfWlmKGguYjY0dSE9PXVuZGVmaW5lZCl7Zz1iNjR1dG9oZXgoaC5iNjR1KX1pZihnPT1udWxsKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyl9O2lmKGQhPT11bmRlZmluZWQpe2lmKGQucGFzcyE9PXVuZGVmaW5lZCl7dGhpcy5zZXRQYXNzd29yZChkLnBhc3MpfWlmKGQuYWxnIT09dW5kZWZpbmVkKXt0aGlzLmFsZ05hbWU9ZC5hbGc7aWYoZC5wcm92PT09dW5kZWZpbmVkKXt0aGlzLnByb3ZOYW1lPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW3RoaXMuYWxnTmFtZV19dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSl9fX07S0pVUi5jcnlwdG8uU2lnbmF0dXJlPWZ1bmN0aW9uKG8pe3ZhciBxPW51bGw7dmFyIG49bnVsbDt2YXIgcj1udWxsO3ZhciBjPW51bGw7dmFyIGw9bnVsbDt2YXIgZD1udWxsO3ZhciBrPW51bGw7dmFyIGg9bnVsbDt2YXIgcD1udWxsO3ZhciBlPW51bGw7dmFyIGI9LTE7dmFyIGc9bnVsbDt2YXIgaj1udWxsO3ZhciBhPW51bGw7dmFyIGk9bnVsbDt2YXIgZj1udWxsO3RoaXMuX3NldEFsZ05hbWVzPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5hbGdOYW1lLm1hdGNoKC9eKC4rKXdpdGgoLispJC8pO2lmKHMpe3RoaXMubWRBbGdOYW1lPXNbMV0udG9Mb3dlckNhc2UoKTt0aGlzLnB1YmtleUFsZ05hbWU9c1syXS50b0xvd2VyQ2FzZSgpfX07dGhpcy5femVyb1BhZGRpbmdPZlNpZ25hdHVyZT1mdW5jdGlvbih4LHcpe3ZhciB2PVwiXCI7dmFyIHQ9dy80LXgubGVuZ3RoO2Zvcih2YXIgdT0wO3U8dDt1Kyspe3Y9ditcIjBcIn1yZXR1cm4gdit4fTt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKHUsdCl7dGhpcy5fc2V0QWxnTmFtZXMoKTtpZih0IT1cImNyeXB0b2pzL2pzcnNhXCIpe3Rocm93XCJwcm92aWRlciBub3Qgc3VwcG9ydGVkOiBcIit0fWlmKFwiOm1kNTpzaGExOnNoYTIyNDpzaGEyNTY6c2hhMzg0OnNoYTUxMjpyaXBlbWQxNjA6XCIuaW5kZXhPZih0aGlzLm1kQWxnTmFtZSkhPS0xKXt0cnl7dGhpcy5tZD1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOnRoaXMubWRBbGdOYW1lfSl9Y2F0Y2gocyl7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIGhhc2ggYWxnIHNldCBmYWlsIGFsZz1cIit0aGlzLm1kQWxnTmFtZStcIi9cIitzfXRoaXMuaW5pdD1mdW5jdGlvbih3LHgpe3ZhciB5PW51bGw7dHJ5e2lmKHg9PT11bmRlZmluZWQpe3k9S0VZVVRJTC5nZXRLZXkodyl9ZWxzZXt5PUtFWVVUSUwuZ2V0S2V5KHcseCl9fWNhdGNoKHYpe3Rocm93XCJpbml0IGZhaWxlZDpcIit2fWlmKHkuaXNQcml2YXRlPT09dHJ1ZSl7dGhpcy5wcnZLZXk9eTt0aGlzLnN0YXRlPVwiU0lHTlwifWVsc2V7aWYoeS5pc1B1YmxpYz09PXRydWUpe3RoaXMucHViS2V5PXk7dGhpcy5zdGF0ZT1cIlZFUklGWVwifWVsc2V7dGhyb3dcImluaXQgZmFpbGVkLjpcIit5fX19O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKHYpe3RoaXMubWQudXBkYXRlU3RyaW5nKHYpfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbih2KXt0aGlzLm1kLnVwZGF0ZUhleCh2KX07dGhpcy5zaWduPWZ1bmN0aW9uKCl7dGhpcy5zSGFzaEhleD10aGlzLm1kLmRpZ2VzdCgpO2lmKHR5cGVvZiB0aGlzLmVjcHJ2aGV4IT1cInVuZGVmaW5lZFwiJiZ0eXBlb2YgdGhpcy5lY2N1cnZlbmFtZSE9XCJ1bmRlZmluZWRcIil7dmFyIHY9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTp0aGlzLmVjY3VydmVuYW1lfSk7dGhpcy5oU2lnbj12LnNpZ25IZXgodGhpcy5zSGFzaEhleCx0aGlzLmVjcHJ2aGV4KX1lbHNle2lmKHRoaXMucHJ2S2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYWFuZG1nZjFcIil7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoUFNTKHRoaXMuc0hhc2hIZXgsdGhpcy5tZEFsZ05hbWUsdGhpcy5wc3NTYWx0TGVuKX1lbHNle2lmKHRoaXMucHJ2S2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYVwiKXt0aGlzLmhTaWduPXRoaXMucHJ2S2V5LnNpZ25XaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx0aGlzLm1kQWxnTmFtZSl9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBKXt0aGlzLmhTaWduPXRoaXMucHJ2S2V5LnNpZ25XaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCl9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkRTQSl7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgpfWVsc2V7dGhyb3dcIlNpZ25hdHVyZTogdW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXkgYWxnOiBcIit0aGlzLnB1YmtleUFsZ05hbWV9fX19fXJldHVybiB0aGlzLmhTaWdufTt0aGlzLnNpZ25TdHJpbmc9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVTdHJpbmcodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnNpZ25IZXg9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVIZXgodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnZlcmlmeT1mdW5jdGlvbih2KXt0aGlzLnNIYXNoSGV4PXRoaXMubWQuZGlnZXN0KCk7aWYodHlwZW9mIHRoaXMuZWNwdWJoZXghPVwidW5kZWZpbmVkXCImJnR5cGVvZiB0aGlzLmVjY3VydmVuYW1lIT1cInVuZGVmaW5lZFwiKXt2YXIgdz1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOnRoaXMuZWNjdXJ2ZW5hbWV9KTtyZXR1cm4gdy52ZXJpZnlIZXgodGhpcy5zSGFzaEhleCx2LHRoaXMuZWNwdWJoZXgpfWVsc2V7aWYodGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBSU0FLZXkmJnRoaXMucHVia2V5QWxnTmFtZT09PVwicnNhYW5kbWdmMVwiKXtyZXR1cm4gdGhpcy5wdWJLZXkudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTKHRoaXMuc0hhc2hIZXgsdix0aGlzLm1kQWxnTmFtZSx0aGlzLnBzc1NhbHRMZW4pfWVsc2V7aWYodGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBSU0FLZXkmJnRoaXMucHVia2V5QWxnTmFtZT09PVwicnNhXCIpe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle2lmKEtKVVIuY3J5cHRvLkVDRFNBIT09dW5kZWZpbmVkJiZ0aGlzLnB1YktleSBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBKXtyZXR1cm4gdGhpcy5wdWJLZXkudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdil9ZWxzZXtpZihLSlVSLmNyeXB0by5EU0EhPT11bmRlZmluZWQmJnRoaXMucHViS2V5IGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRFNBKXtyZXR1cm4gdGhpcy5wdWJLZXkudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdil9ZWxzZXt0aHJvd1wiU2lnbmF0dXJlOiB1bnN1cHBvcnRlZCBwdWJsaWMga2V5IGFsZzogXCIrdGhpcy5wdWJrZXlBbGdOYW1lfX19fX19fX07dGhpcy5pbml0PWZ1bmN0aW9uKHMsdCl7dGhyb3dcImluaXQoa2V5LCBwYXNzKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKHMpe3Rocm93XCJ1cGRhdGVTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKHMpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuc2lnbj1mdW5jdGlvbigpe3Rocm93XCJzaWduKCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnNpZ25TdHJpbmc9ZnVuY3Rpb24ocyl7dGhyb3dcImRpZ2VzdFN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5zaWduSGV4PWZ1bmN0aW9uKHMpe3Rocm93XCJkaWdlc3RIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMudmVyaWZ5PWZ1bmN0aW9uKHMpe3Rocm93XCJ2ZXJpZnkoaFNpZ1ZhbCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLmluaXRQYXJhbXM9bztpZihvIT09dW5kZWZpbmVkKXtpZihvLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPW8uYWxnO2lmKG8ucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfWVsc2V7dGhpcy5wcm92TmFtZT1vLnByb3Z9dGhpcy5hbGdQcm92TmFtZT10aGlzLmFsZ05hbWUrXCI6XCIrdGhpcy5wcm92TmFtZTt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyKHRoaXMuYWxnTmFtZSx0aGlzLnByb3ZOYW1lKTt0aGlzLl9zZXRBbGdOYW1lcygpfWlmKG8ucHNzc2FsdGxlbiE9PXVuZGVmaW5lZCl7dGhpcy5wc3NTYWx0TGVuPW8ucHNzc2FsdGxlbn1pZihvLnBydmtleXBlbSE9PXVuZGVmaW5lZCl7aWYoby5wcnZrZXlwYXMhPT11bmRlZmluZWQpe3Rocm93XCJib3RoIHBydmtleXBlbSBhbmQgcHJ2a2V5cGFzIHBhcmFtZXRlcnMgbm90IHN1cHBvcnRlZFwifWVsc2V7dHJ5e3ZhciBxPUtFWVVUSUwuZ2V0S2V5KG8ucHJ2a2V5cGVtKTt0aGlzLmluaXQocSl9Y2F0Y2gobSl7dGhyb3dcImZhdGFsIGVycm9yIHRvIGxvYWQgcGVtIHByaXZhdGUga2V5OiBcIittfX19fX07S0pVUi5jcnlwdG8uQ2lwaGVyPWZ1bmN0aW9uKGEpe307S0pVUi5jcnlwdG8uQ2lwaGVyLmVuY3J5cHQ9ZnVuY3Rpb24oZSxmLGQpe2lmKGYgaW5zdGFuY2VvZiBSU0FLZXkmJmYuaXNQdWJsaWMpe3ZhciBjPUtKVVIuY3J5cHRvLkNpcGhlci5nZXRBbGdCeUtleUFuZE5hbWUoZixkKTtpZihjPT09XCJSU0FcIil7cmV0dXJuIGYuZW5jcnlwdChlKX1pZihjPT09XCJSU0FPQUVQXCIpe3JldHVybiBmLmVuY3J5cHRPQUVQKGUsXCJzaGExXCIpfXZhciBiPWMubWF0Y2goL15SU0FPQUVQKFxcZCspJC8pO2lmKGIhPT1udWxsKXtyZXR1cm4gZi5lbmNyeXB0T0FFUChlLFwic2hhXCIrYlsxXSl9dGhyb3dcIkNpcGhlci5lbmNyeXB0OiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gZm9yIFJTQUtleTogXCIrZH1lbHNle3Rocm93XCJDaXBoZXIuZW5jcnlwdDogdW5zdXBwb3J0ZWQga2V5IG9yIGFsZ29yaXRobVwifX07S0pVUi5jcnlwdG8uQ2lwaGVyLmRlY3J5cHQ9ZnVuY3Rpb24oZSxmLGQpe2lmKGYgaW5zdGFuY2VvZiBSU0FLZXkmJmYuaXNQcml2YXRlKXt2YXIgYz1LSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lKGYsZCk7aWYoYz09PVwiUlNBXCIpe3JldHVybiBmLmRlY3J5cHQoZSl9aWYoYz09PVwiUlNBT0FFUFwiKXtyZXR1cm4gZi5kZWNyeXB0T0FFUChlLFwic2hhMVwiKX12YXIgYj1jLm1hdGNoKC9eUlNBT0FFUChcXGQrKSQvKTtpZihiIT09bnVsbCl7cmV0dXJuIGYuZGVjcnlwdE9BRVAoZSxcInNoYVwiK2JbMV0pfXRocm93XCJDaXBoZXIuZGVjcnlwdDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBSU0FLZXk6IFwiK2R9ZWxzZXt0aHJvd1wiQ2lwaGVyLmRlY3J5cHQ6IHVuc3VwcG9ydGVkIGtleSBvciBhbGdvcml0aG1cIn19O0tKVVIuY3J5cHRvLkNpcGhlci5nZXRBbGdCeUtleUFuZE5hbWU9ZnVuY3Rpb24oYixhKXtpZihiIGluc3RhbmNlb2YgUlNBS2V5KXtpZihcIjpSU0E6UlNBT0FFUDpSU0FPQUVQMjI0OlJTQU9BRVAyNTY6UlNBT0FFUDM4NDpSU0FPQUVQNTEyOlwiLmluZGV4T2YoYSkhPS0xKXtyZXR1cm4gYX1pZihhPT09bnVsbHx8YT09PXVuZGVmaW5lZCl7cmV0dXJuXCJSU0FcIn10aHJvd1wiZ2V0QWxnQnlLZXlBbmROYW1lOiBub3Qgc3VwcG9ydGVkIGFsZ29yaXRobSBuYW1lIGZvciBSU0FLZXk6IFwiK2F9dGhyb3dcImdldEFsZ0J5S2V5QW5kTmFtZTogbm90IHN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZTogXCIrYX07S0pVUi5jcnlwdG8uT0lEPW5ldyBmdW5jdGlvbigpe3RoaXMub2lkaGV4Mm5hbWU9e1wiMmE4NjQ4ODZmNzBkMDEwMTAxXCI6XCJyc2FFbmNyeXB0aW9uXCIsXCIyYTg2NDhjZTNkMDIwMVwiOlwiZWNQdWJsaWNLZXlcIixcIjJhODY0OGNlMzgwNDAxXCI6XCJkc2FcIixcIjJhODY0OGNlM2QwMzAxMDdcIjpcInNlY3AyNTZyMVwiLFwiMmI4MTA0MDAxZlwiOlwic2VjcDE5MmsxXCIsXCIyYjgxMDQwMDIxXCI6XCJzZWNwMjI0cjFcIixcIjJiODEwNDAwMGFcIjpcInNlY3AyNTZrMVwiLFwiMmI4MTA0MDAyM1wiOlwic2VjcDUyMXIxXCIsXCIyYjgxMDQwMDIyXCI6XCJzZWNwMzg0cjFcIixcIjJhODY0OGNlMzgwNDAzXCI6XCJTSEExd2l0aERTQVwiLFwiNjA4NjQ4MDE2NTAzMDQwMzAxXCI6XCJTSEEyMjR3aXRoRFNBXCIsXCI2MDg2NDgwMTY1MDMwNDAzMDJcIjpcIlNIQTI1NndpdGhEU0FcIix9fTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uRUNEU0E9ZnVuY3Rpb24oaCl7dmFyIGU9XCJzZWNwMjU2cjFcIjt2YXIgZz1udWxsO3ZhciBiPW51bGw7dmFyIGY9bnVsbDt2YXIgYT1uZXcgU2VjdXJlUmFuZG9tKCk7dmFyIGQ9bnVsbDt0aGlzLnR5cGU9XCJFQ1wiO3RoaXMuaXNQcml2YXRlPWZhbHNlO3RoaXMuaXNQdWJsaWM9ZmFsc2U7ZnVuY3Rpb24gYyhzLG8scixuKXt2YXIgaj1NYXRoLm1heChvLmJpdExlbmd0aCgpLG4uYml0TGVuZ3RoKCkpO3ZhciB0PXMuYWRkMkQocik7dmFyIHE9cy5jdXJ2ZS5nZXRJbmZpbml0eSgpO2Zvcih2YXIgcD1qLTE7cD49MDstLXApe3E9cS50d2ljZTJEKCk7cS56PUJpZ0ludGVnZXIuT05FO2lmKG8udGVzdEJpdChwKSl7aWYobi50ZXN0Qml0KHApKXtxPXEuYWRkMkQodCl9ZWxzZXtxPXEuYWRkMkQocyl9fWVsc2V7aWYobi50ZXN0Qml0KHApKXtxPXEuYWRkMkQocil9fX1yZXR1cm4gcX10aGlzLmdldEJpZ1JhbmRvbT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoaS5iaXRMZW5ndGgoKSxhKS5tb2QoaS5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkpLmFkZChCaWdJbnRlZ2VyLk9ORSl9O3RoaXMuc2V0TmFtZWRDdXJ2ZT1mdW5jdGlvbihpKXt0aGlzLmVjcGFyYW1zPUtKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIuZ2V0QnlOYW1lKGkpO3RoaXMucHJ2S2V5SGV4PW51bGw7dGhpcy5wdWJLZXlIZXg9bnVsbDt0aGlzLmN1cnZlTmFtZT1pfTt0aGlzLnNldFByaXZhdGVLZXlIZXg9ZnVuY3Rpb24oaSl7dGhpcy5pc1ByaXZhdGU9dHJ1ZTt0aGlzLnBydktleUhleD1pfTt0aGlzLnNldFB1YmxpY0tleUhleD1mdW5jdGlvbihpKXt0aGlzLmlzUHVibGljPXRydWU7dGhpcy5wdWJLZXlIZXg9aX07dGhpcy5nZXRQdWJsaWNLZXlYWUhleD1mdW5jdGlvbigpe3ZhciBrPXRoaXMucHViS2V5SGV4O2lmKGsuc3Vic3RyKDAsMikhPT1cIjA0XCIpe3Rocm93XCJ0aGlzIG1ldGhvZCBzdXBwb3J0cyB1bmNvbXByZXNzZWQgZm9ybWF0KDA0KSBvbmx5XCJ9dmFyIGo9dGhpcy5lY3BhcmFtcy5rZXlsZW4vNDtpZihrLmxlbmd0aCE9PTIraioyKXt0aHJvd1wibWFsZm9ybWVkIHB1YmxpYyBrZXkgaGV4IGxlbmd0aFwifXZhciBpPXt9O2kueD1rLnN1YnN0cigyLGopO2kueT1rLnN1YnN0cigyK2opO3JldHVybiBpfTt0aGlzLmdldFNob3J0TklTVFBDdXJ2ZU5hbWU9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmN1cnZlTmFtZTtpZihpPT09XCJzZWNwMjU2cjFcInx8aT09PVwiTklTVCBQLTI1NlwifHxpPT09XCJQLTI1NlwifHxpPT09XCJwcmltZTI1NnYxXCIpe3JldHVyblwiUC0yNTZcIn1pZihpPT09XCJzZWNwMzg0cjFcInx8aT09PVwiTklTVCBQLTM4NFwifHxpPT09XCJQLTM4NFwiKXtyZXR1cm5cIlAtMzg0XCJ9cmV0dXJuIG51bGx9O3RoaXMuZ2VuZXJhdGVLZXlQYWlySGV4PWZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5lY3BhcmFtcy5uO3ZhciBuPXRoaXMuZ2V0QmlnUmFuZG9tKGspO3ZhciBsPXRoaXMuZWNwYXJhbXMuRy5tdWx0aXBseShuKTt2YXIgcT1sLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgbz1sLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgaT10aGlzLmVjcGFyYW1zLmtleWxlbi80O3ZhciBtPShcIjAwMDAwMDAwMDBcIituLnRvU3RyaW5nKDE2KSkuc2xpY2UoLWkpO3ZhciByPShcIjAwMDAwMDAwMDBcIitxLnRvU3RyaW5nKDE2KSkuc2xpY2UoLWkpO3ZhciBwPShcIjAwMDAwMDAwMDBcIitvLnRvU3RyaW5nKDE2KSkuc2xpY2UoLWkpO3ZhciBqPVwiMDRcIityK3A7dGhpcy5zZXRQcml2YXRlS2V5SGV4KG0pO3RoaXMuc2V0UHVibGljS2V5SGV4KGopO3JldHVybntlY3BydmhleDptLGVjcHViaGV4Omp9fTt0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2g9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuc2lnbkhleChpLHRoaXMucHJ2S2V5SGV4KX07dGhpcy5zaWduSGV4PWZ1bmN0aW9uKG8sail7dmFyIHQ9bmV3IEJpZ0ludGVnZXIoaiwxNik7dmFyIGw9dGhpcy5lY3BhcmFtcy5uO3ZhciBxPW5ldyBCaWdJbnRlZ2VyKG8sMTYpO2Rve3ZhciBtPXRoaXMuZ2V0QmlnUmFuZG9tKGwpO3ZhciB1PXRoaXMuZWNwYXJhbXMuRzt2YXIgcD11Lm11bHRpcGx5KG0pO3ZhciBpPXAuZ2V0WCgpLnRvQmlnSW50ZWdlcigpLm1vZChsKX13aGlsZShpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pPD0wKTt2YXIgdj1tLm1vZEludmVyc2UobCkubXVsdGlwbHkocS5hZGQodC5tdWx0aXBseShpKSkpLm1vZChsKTtyZXR1cm4gS0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZyhpLHYpfTt0aGlzLnNpZ249ZnVuY3Rpb24obSx1KXt2YXIgcT11O3ZhciBqPXRoaXMuZWNwYXJhbXMubjt2YXIgcD1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChtKTtkb3t2YXIgbD10aGlzLmdldEJpZ1JhbmRvbShqKTt2YXIgdD10aGlzLmVjcGFyYW1zLkc7dmFyIG89dC5tdWx0aXBseShsKTt2YXIgaT1vLmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2Qoail9d2hpbGUoaS5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKTw9MCk7dmFyIHY9bC5tb2RJbnZlcnNlKGopLm11bHRpcGx5KHAuYWRkKHEubXVsdGlwbHkoaSkpKS5tb2Qoaik7cmV0dXJuIHRoaXMuc2VyaWFsaXplU2lnKGksdil9O3RoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGosaSl7cmV0dXJuIHRoaXMudmVyaWZ5SGV4KGosaSx0aGlzLnB1YktleUhleCl9O3RoaXMudmVyaWZ5SGV4PWZ1bmN0aW9uKG0saSxwKXt2YXIgbCxqO3ZhciBvPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4KGkpO2w9by5yO2o9by5zO3ZhciBrO2s9RUNQb2ludEZwLmRlY29kZUZyb21IZXgodGhpcy5lY3BhcmFtcy5jdXJ2ZSxwKTt2YXIgbj1uZXcgQmlnSW50ZWdlcihtLDE2KTtyZXR1cm4gdGhpcy52ZXJpZnlSYXcobixsLGosayl9O3RoaXMudmVyaWZ5PWZ1bmN0aW9uKG8scCxqKXt2YXIgbCxpO2lmKEJpdGNvaW4uVXRpbC5pc0FycmF5KHApKXt2YXIgbj10aGlzLnBhcnNlU2lnKHApO2w9bi5yO2k9bi5zfWVsc2V7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBwJiZwLnImJnAucyl7bD1wLnI7aT1wLnN9ZWxzZXt0aHJvd1wiSW52YWxpZCB2YWx1ZSBmb3Igc2lnbmF0dXJlXCJ9fXZhciBrO2lmKGogaW5zdGFuY2VvZiBFQ1BvaW50RnApe2s9an1lbHNle2lmKEJpdGNvaW4uVXRpbC5pc0FycmF5KGopKXtrPUVDUG9pbnRGcC5kZWNvZGVGcm9tKHRoaXMuZWNwYXJhbXMuY3VydmUsail9ZWxzZXt0aHJvd1wiSW52YWxpZCBmb3JtYXQgZm9yIHB1YmtleSB2YWx1ZSwgbXVzdCBiZSBieXRlIGFycmF5IG9yIEVDUG9pbnRGcFwifX12YXIgbT1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChvKTtyZXR1cm4gdGhpcy52ZXJpZnlSYXcobSxsLGksayl9O3RoaXMudmVyaWZ5UmF3PWZ1bmN0aW9uKG8saSx3LG0pe3ZhciBsPXRoaXMuZWNwYXJhbXMubjt2YXIgdT10aGlzLmVjcGFyYW1zLkc7aWYoaS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGkuY29tcGFyZVRvKGwpPj0wKXtyZXR1cm4gZmFsc2V9aWYody5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fHcuY29tcGFyZVRvKGwpPj0wKXtyZXR1cm4gZmFsc2V9dmFyIHA9dy5tb2RJbnZlcnNlKGwpO3ZhciBrPW8ubXVsdGlwbHkocCkubW9kKGwpO3ZhciBqPWkubXVsdGlwbHkocCkubW9kKGwpO3ZhciBxPXUubXVsdGlwbHkoaykuYWRkKG0ubXVsdGlwbHkoaikpO3ZhciB0PXEuZ2V0WCgpLnRvQmlnSW50ZWdlcigpLm1vZChsKTtyZXR1cm4gdC5lcXVhbHMoaSl9O3RoaXMuc2VyaWFsaXplU2lnPWZ1bmN0aW9uKGssail7dmFyIGw9ay50b0J5dGVBcnJheVNpZ25lZCgpO3ZhciBpPWoudG9CeXRlQXJyYXlTaWduZWQoKTt2YXIgbT1bXTttLnB1c2goMik7bS5wdXNoKGwubGVuZ3RoKTttPW0uY29uY2F0KGwpO20ucHVzaCgyKTttLnB1c2goaS5sZW5ndGgpO209bS5jb25jYXQoaSk7bS51bnNoaWZ0KG0ubGVuZ3RoKTttLnVuc2hpZnQoNDgpO3JldHVybiBtfTt0aGlzLnBhcnNlU2lnPWZ1bmN0aW9uKG4pe3ZhciBtO2lmKG5bMF0hPTQ4KXt0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IGEgdmFsaWQgREVSU2VxdWVuY2VcIil9bT0yO2lmKG5bbV0hPTIpe3Rocm93IG5ldyBFcnJvcihcIkZpcnN0IGVsZW1lbnQgaW4gc2lnbmF0dXJlIG11c3QgYmUgYSBERVJJbnRlZ2VyXCIpfXZhciBsPW4uc2xpY2UobSsyLG0rMituW20rMV0pO20rPTIrblttKzFdO2lmKG5bbV0hPTIpe3Rocm93IG5ldyBFcnJvcihcIlNlY29uZCBlbGVtZW50IGluIHNpZ25hdHVyZSBtdXN0IGJlIGEgREVSSW50ZWdlclwiKX12YXIgaT1uLnNsaWNlKG0rMixtKzIrblttKzFdKTttKz0yK25bbSsxXTt2YXIgaz1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChsKTt2YXIgaj1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChpKTtyZXR1cm57cjprLHM6an19O3RoaXMucGFyc2VTaWdDb21wYWN0PWZ1bmN0aW9uKG0pe2lmKG0ubGVuZ3RoIT09NjUpe3Rocm93XCJTaWduYXR1cmUgaGFzIHRoZSB3cm9uZyBsZW5ndGhcIn12YXIgaj1tWzBdLTI3O2lmKGo8MHx8aj43KXt0aHJvd1wiSW52YWxpZCBzaWduYXR1cmUgdHlwZVwifXZhciBvPXRoaXMuZWNwYXJhbXMubjt2YXIgbD1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChtLnNsaWNlKDEsMzMpKS5tb2Qobyk7dmFyIGs9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobS5zbGljZSgzMyw2NSkpLm1vZChvKTtyZXR1cm57cjpsLHM6ayxpOmp9fTt0aGlzLnJlYWRQS0NTNVBydktleUhleD1mdW5jdGlvbihsKXt2YXIgbj1BU04xSEVYO3ZhciBtPUtKVVIuY3J5cHRvLkVDRFNBLmdldE5hbWU7dmFyIHA9bi5nZXRWYnlMaXN0O2lmKG4uaXNBU04xSEVYKGwpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXZhciBpLGssbzt0cnl7aT1wKGwsMCxbMiwwXSxcIjA2XCIpO2s9cChsLDAsWzFdLFwiMDRcIik7dHJ5e289cChsLDAsWzMsMF0sXCIwM1wiKS5zdWJzdHIoMil9Y2F0Y2goail7fX1jYXRjaChqKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjMS81IHBsYWluIEVDQyBwcml2YXRlIGtleVwifXRoaXMuY3VydmVOYW1lPW0oaSk7aWYodGhpcy5jdXJ2ZU5hbWU9PT11bmRlZmluZWQpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCJ9dGhpcy5zZXROYW1lZEN1cnZlKHRoaXMuY3VydmVOYW1lKTt0aGlzLnNldFB1YmxpY0tleUhleChvKTt0aGlzLnNldFByaXZhdGVLZXlIZXgoayk7dGhpcy5pc1B1YmxpYz1mYWxzZX07dGhpcy5yZWFkUEtDUzhQcnZLZXlIZXg9ZnVuY3Rpb24obCl7dmFyIHE9QVNOMUhFWDt2YXIgaT1LSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lO3ZhciBuPXEuZ2V0VmJ5TGlzdDtpZihxLmlzQVNOMUhFWChsKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgaixwLG0sazt0cnl7aj1uKGwsMCxbMSwwXSxcIjA2XCIpO3A9bihsLDAsWzEsMV0sXCIwNlwiKTttPW4obCwwLFsyLDAsMV0sXCIwNFwiKTt0cnl7az1uKGwsMCxbMiwwLDIsMF0sXCIwM1wiKS5zdWJzdHIoMil9Y2F0Y2gobyl7fX1jYXRjaChvKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjOCBwbGFpbiBFQ0MgcHJpdmF0ZSBrZXlcIn10aGlzLmN1cnZlTmFtZT1pKHApO2lmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgoayk7dGhpcy5zZXRQcml2YXRlS2V5SGV4KG0pO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKGwpe3ZhciBuPUFTTjFIRVg7dmFyIG09S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZTt2YXIgcD1uLmdldFZieUxpc3Q7aWYobi5pc0FTTjFIRVgobCk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGssaSxvO3RyeXtrPXAobCwwLFswLDBdLFwiMDZcIik7aT1wKGwsMCxbMCwxXSxcIjA2XCIpO289cChsLDAsWzFdLFwiMDNcIikuc3Vic3RyKDIpfWNhdGNoKGope3Rocm93XCJtYWxmb3JtZWQgUEtDUyM4IEVDQyBwdWJsaWMga2V5XCJ9dGhpcy5jdXJ2ZU5hbWU9bShpKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCJ9dGhpcy5zZXROYW1lZEN1cnZlKHRoaXMuY3VydmVOYW1lKTt0aGlzLnNldFB1YmxpY0tleUhleChvKX07dGhpcy5yZWFkQ2VydFB1YktleUhleD1mdW5jdGlvbihrLHApe2lmKHAhPT01KXtwPTZ9dmFyIG09QVNOMUhFWDt2YXIgbD1LSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lO3ZhciBvPW0uZ2V0VmJ5TGlzdDtpZihtLmlzQVNOMUhFWChrKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgaSxuO3RyeXtpPW8oaywwLFswLHAsMCwxXSxcIjA2XCIpO249byhrLDAsWzAscCwxXSxcIjAzXCIpLnN1YnN0cigyKX1jYXRjaChqKXt0aHJvd1wibWFsZm9ybWVkIFguNTA5IGNlcnRpZmljYXRlIEVDQyBwdWJsaWMga2V5XCJ9dGhpcy5jdXJ2ZU5hbWU9bChpKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCJ9dGhpcy5zZXROYW1lZEN1cnZlKHRoaXMuY3VydmVOYW1lKTt0aGlzLnNldFB1YmxpY0tleUhleChuKX07aWYoaCE9PXVuZGVmaW5lZCl7aWYoaC5jdXJ2ZSE9PXVuZGVmaW5lZCl7dGhpcy5jdXJ2ZU5hbWU9aC5jdXJ2ZX19aWYodGhpcy5jdXJ2ZU5hbWU9PT11bmRlZmluZWQpe3RoaXMuY3VydmVOYW1lPWV9dGhpcy5zZXROYW1lZEN1cnZlKHRoaXMuY3VydmVOYW1lKTtpZihoIT09dW5kZWZpbmVkKXtpZihoLnBydiE9PXVuZGVmaW5lZCl7dGhpcy5zZXRQcml2YXRlS2V5SGV4KGgucHJ2KX1pZihoLnB1YiE9PXVuZGVmaW5lZCl7dGhpcy5zZXRQdWJsaWNLZXlIZXgoaC5wdWIpfX19O0tKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4PWZ1bmN0aW9uKGEpe3ZhciBiPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUyhhKTt2YXIgZD1uZXcgQmlnSW50ZWdlcihiLnIsMTYpO3ZhciBjPW5ldyBCaWdJbnRlZ2VyKGIucywxNik7cmV0dXJue3I6ZCxzOmN9fTtLSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleEluSGV4UlM9ZnVuY3Rpb24oZil7dmFyIGo9QVNOMUhFWDt2YXIgaT1qLmdldENoaWxkSWR4O3ZhciBnPWouZ2V0VjtpZihmLnN1YnN0cigwLDIpIT1cIjMwXCIpe3Rocm93XCJzaWduYXR1cmUgaXMgbm90IGEgQVNOLjEgc2VxdWVuY2VcIn12YXIgaD1pKGYsMCk7aWYoaC5sZW5ndGghPTIpe3Rocm93XCJudW1iZXIgb2Ygc2lnbmF0dXJlIEFTTi4xIHNlcXVlbmNlIGVsZW1lbnRzIHNlZW0gd3JvbmdcIn12YXIgZT1oWzBdO3ZhciBkPWhbMV07aWYoZi5zdWJzdHIoZSwyKSE9XCIwMlwiKXt0aHJvd1wiMXN0IGl0ZW0gb2Ygc2VxdWVuZSBvZiBzaWduYXR1cmUgaXMgbm90IEFTTi4xIGludGVnZXJcIn1pZihmLnN1YnN0cihkLDIpIT1cIjAyXCIpe3Rocm93XCIybmQgaXRlbSBvZiBzZXF1ZW5lIG9mIHNpZ25hdHVyZSBpcyBub3QgQVNOLjEgaW50ZWdlclwifXZhciBjPWcoZixlKTt2YXIgYj1nKGYsZCk7cmV0dXJue3I6YyxzOmJ9fTtLSlVSLmNyeXB0by5FQ0RTQS5hc24xU2lnVG9Db25jYXRTaWc9ZnVuY3Rpb24oYyl7dmFyIGQ9S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXhJbkhleFJTKGMpO3ZhciBiPWQucjt2YXIgYT1kLnM7aWYoYi5zdWJzdHIoMCwyKT09XCIwMFwiJiYoYi5sZW5ndGglMzIpPT0yKXtiPWIuc3Vic3RyKDIpfWlmKGEuc3Vic3RyKDAsMik9PVwiMDBcIiYmKGEubGVuZ3RoJTMyKT09Mil7YT1hLnN1YnN0cigyKX1pZigoYi5sZW5ndGglMzIpPT0zMCl7Yj1cIjAwXCIrYn1pZigoYS5sZW5ndGglMzIpPT0zMCl7YT1cIjAwXCIrYX1pZihiLmxlbmd0aCUzMiE9MCl7dGhyb3dcInVua25vd24gRUNEU0Egc2lnIHIgbGVuZ3RoIGVycm9yXCJ9aWYoYS5sZW5ndGglMzIhPTApe3Rocm93XCJ1bmtub3duIEVDRFNBIHNpZyBzIGxlbmd0aCBlcnJvclwifXJldHVybiBiK2F9O0tKVVIuY3J5cHRvLkVDRFNBLmNvbmNhdFNpZ1RvQVNOMVNpZz1mdW5jdGlvbihhKXtpZigoKChhLmxlbmd0aC8yKSo4KSUoMTYqOCkpIT0wKXt0aHJvd1widW5rbm93biBFQ0RTQSBjb25jYXRpbmF0ZWQgci1zIHNpZyAgbGVuZ3RoIGVycm9yXCJ9dmFyIGM9YS5zdWJzdHIoMCxhLmxlbmd0aC8yKTt2YXIgYj1hLnN1YnN0cihhLmxlbmd0aC8yKTtyZXR1cm4gS0pVUi5jcnlwdG8uRUNEU0EuaGV4UlNTaWdUb0FTTjFTaWcoYyxiKX07S0pVUi5jcnlwdG8uRUNEU0EuaGV4UlNTaWdUb0FTTjFTaWc9ZnVuY3Rpb24oYixhKXt2YXIgZD1uZXcgQmlnSW50ZWdlcihiLDE2KTt2YXIgYz1uZXcgQmlnSW50ZWdlcihhLDE2KTtyZXR1cm4gS0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZyhkLGMpfTtLSlVSLmNyeXB0by5FQ0RTQS5iaVJTU2lnVG9BU04xU2lnPWZ1bmN0aW9uKGYsZCl7dmFyIGM9S0pVUi5hc24xO3ZhciBiPW5ldyBjLkRFUkludGVnZXIoe2JpZ2ludDpmfSk7dmFyIGE9bmV3IGMuREVSSW50ZWdlcih7YmlnaW50OmR9KTt2YXIgZT1uZXcgYy5ERVJTZXF1ZW5jZSh7YXJyYXk6W2IsYV19KTtyZXR1cm4gZS5nZXRFbmNvZGVkSGV4KCl9O0tKVVIuY3J5cHRvLkVDRFNBLmdldE5hbWU9ZnVuY3Rpb24oYSl7aWYoYT09PVwiMmE4NjQ4Y2UzZDAzMDEwN1wiKXtyZXR1cm5cInNlY3AyNTZyMVwifWlmKGE9PT1cIjJiODEwNDAwMGFcIil7cmV0dXJuXCJzZWNwMjU2azFcIn1pZihhPT09XCIyYjgxMDQwMDIyXCIpe3JldHVyblwic2VjcDM4NHIxXCJ9aWYoXCJ8c2VjcDI1NnIxfE5JU1QgUC0yNTZ8UC0yNTZ8cHJpbWUyNTZ2MXxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDI1NnIxXCJ9aWYoXCJ8c2VjcDI1NmsxfFwiLmluZGV4T2YoYSkhPT0tMSl7cmV0dXJuXCJzZWNwMjU2azFcIn1pZihcInxzZWNwMzg0cjF8TklTVCBQLTM4NHxQLTM4NHxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDM4NHIxXCJ9cmV0dXJuIG51bGx9O1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmNyeXB0bz09XCJ1bmRlZmluZWRcInx8IUtKVVIuY3J5cHRvKXtLSlVSLmNyeXB0bz17fX1LSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCPW5ldyBmdW5jdGlvbigpe3ZhciBiPXt9O3ZhciBjPXt9O2Z1bmN0aW9uIGEoZCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGQsMTYpfXRoaXMuZ2V0QnlOYW1lPWZ1bmN0aW9uKGUpe3ZhciBkPWU7aWYodHlwZW9mIGNbZF0hPVwidW5kZWZpbmVkXCIpe2Q9Y1tlXX1pZih0eXBlb2YgYltkXSE9XCJ1bmRlZmluZWRcIil7cmV0dXJuIGJbZF19dGhyb3dcInVucmVnaXN0ZXJlZCBFQyBjdXJ2ZSBuYW1lOiBcIitkfTt0aGlzLnJlZ2lzdD1mdW5jdGlvbihBLGwsbyxnLG0sZSxqLGYsayx1LGQseCl7YltBXT17fTt2YXIgcz1hKG8pO3ZhciB6PWEoZyk7dmFyIHk9YShtKTt2YXIgdD1hKGUpO3ZhciB3PWEoaik7dmFyIHI9bmV3IEVDQ3VydmVGcChzLHoseSk7dmFyIHE9ci5kZWNvZGVQb2ludEhleChcIjA0XCIrZitrKTtiW0FdW1wibmFtZVwiXT1BO2JbQV1bXCJrZXlsZW5cIl09bDtiW0FdW1wiY3VydmVcIl09cjtiW0FdW1wiR1wiXT1xO2JbQV1bXCJuXCJdPXQ7YltBXVtcImhcIl09dztiW0FdW1wib2lkXCJdPWQ7YltBXVtcImluZm9cIl09eDtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7Y1t1W3ZdXT1BfX19O0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDEyOHIxXCIsMTI4LFwiRkZGRkZGRkRGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCJFODc1NzlDMTEwNzlGNDNERDgyNDk5M0MyQ0VFNUVEM1wiLFwiRkZGRkZGRkUwMDAwMDAwMDc1QTMwRDFCOTAzOEExMTVcIixcIjFcIixcIjE2MUZGNzUyOEI4OTlCMkQwQzI4NjA3Q0E1MkM1Qjg2XCIsXCJDRjVBQzgzOTVCQUZFQjEzQzAyREEyOTJEREVEN0E4M1wiLFtdLFwiXCIsXCJzZWNwMTI4cjEgOiBTRUNHIGN1cnZlIG92ZXIgYSAxMjggYml0IHByaW1lIGZpZWxkXCIpO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE2MGsxXCIsMTYwLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGQUM3M1wiLFwiMFwiLFwiN1wiLFwiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUI4RkExNkRGQUI5QUNBMTZCNkIzXCIsXCIxXCIsXCIzQjRDMzgyQ0UzN0FBMTkyQTQwMTlFNzYzMDM2RjRGNURENEQ3RUJCXCIsXCI5MzhDRjkzNTMxOEZEQ0VENkJDMjgyODY1MzE3MzNDM0YwM0M0RkVFXCIsW10sXCJcIixcInNlY3AxNjBrMSA6IFNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGRcIik7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTYwcjFcIiwxNjAsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdGRkZGRkZGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdGRkZGRkZDXCIsXCIxQzk3QkVGQzU0QkQ3QThCNjVBQ0Y4OUY4MUQ0RDRBREM1NjVGQTQ1XCIsXCIwMTAwMDAwMDAwMDAwMDAwMDAwMDAxRjRDOEY5MjdBRUQzQ0E3NTIyNTdcIixcIjFcIixcIjRBOTZCNTY4OEVGNTczMjg0NjY0Njk4OTY4QzM4QkI5MTNDQkZDODJcIixcIjIzQTYyODU1MzE2ODk0N0Q1OURDQzkxMjA0MjM1MTM3N0FDNUZCMzJcIixbXSxcIlwiLFwic2VjcDE2MHIxIDogU0VDRyBjdXJ2ZSBvdmVyIGEgMTYwIGJpdCBwcmltZSBmaWVsZFwiKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxOTJrMVwiLDE5MixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRUUzN1wiLFwiMFwiLFwiM1wiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFMjZGMkZDMTcwRjY5NDY2QTc0REVGRDhEXCIsXCIxXCIsXCJEQjRGRjEwRUMwNTdFOUFFMjZCMDdEMDI4MEI3RjQzNDFEQTVEMUIxRUFFMDZDN0RcIixcIjlCMkYyRjZEOUM1NjI4QTc4NDQxNjNEMDE1QkU4NjM0NDA4MkFBODhEOTVFMkY5RFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxOTJyMVwiLDE5MixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZDXCIsXCI2NDIxMDUxOUU1OUM4MEU3MEZBN0U5QUI3MjI0MzA0OUZFQjhERUVDQzE0NkI5QjFcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk5REVGODM2MTQ2QkM5QjFCNEQyMjgzMVwiLFwiMVwiLFwiMTg4REE4MEVCMDMwOTBGNjdDQkYyMEVCNDNBMTg4MDBGNEZGMEFGRDgyRkYxMDEyXCIsXCIwNzE5MkI5NUZGQzhEQTc4NjMxMDExRUQ2QjI0Q0RENTczRjk3N0ExMUU3OTQ4MTFcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMjI0cjFcIiwyMjQsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMVwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVcIixcIkI0MDUwQTg1MEMwNEIzQUJGNTQxMzI1NjUwNDRCMEI3RDdCRkQ4QkEyNzBCMzk0MzIzNTVGRkI0XCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTZBMkUwQjhGMDNFMTNERDI5NDU1QzVDMkEzRFwiLFwiMVwiLFwiQjcwRTBDQkQ2QkI0QkY3RjMyMTM5MEI5NEEwM0MxRDM1NkMyMTEyMjM0MzI4MEQ2MTE1QzFEMjFcIixcIkJEMzc2Mzg4QjVGNzIzRkI0QzIyREZFNkNENDM3NUEwNUEwNzQ3NjQ0NEQ1ODE5OTg1MDA3RTM0XCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDI1NmsxXCIsMjU2LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkMyRlwiLFwiMFwiLFwiN1wiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVCQUFFRENFNkFGNDhBMDNCQkZEMjVFOENEMDM2NDE0MVwiLFwiMVwiLFwiNzlCRTY2N0VGOURDQkJBQzU1QTA2Mjk1Q0U4NzBCMDcwMjlCRkNEQjJEQ0UyOEQ5NTlGMjgxNUIxNkY4MTc5OFwiLFwiNDgzQURBNzcyNkEzQzQ2NTVEQTRGQkZDMEUxMTA4QThGRDE3QjQ0OEE2ODU1NDE5OUM0N0QwOEZGQjEwRDRCOFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AyNTZyMVwiLDI1NixcIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNcIixcIjVBQzYzNUQ4QUEzQTkzRTdCM0VCQkQ1NTc2OTg4NkJDNjUxRDA2QjBDQzUzQjBGNjNCQ0UzQzNFMjdEMjYwNEJcIixcIkZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQkNFNkZBQURBNzE3OUU4NEYzQjlDQUMyRkM2MzI1NTFcIixcIjFcIixcIjZCMTdEMUYyRTEyQzQyNDdGOEJDRTZFNTYzQTQ0MEYyNzcwMzdEODEyREVCMzNBMEY0QTEzOTQ1RDg5OEMyOTZcIixcIjRGRTM0MkUyRkUxQTdGOUI4RUU3RUI0QTdDMEY5RTE2MkJDRTMzNTc2QjMxNUVDRUNCQjY0MDY4MzdCRjUxRjVcIixbXCJOSVNUIFAtMjU2XCIsXCJQLTI1NlwiLFwicHJpbWUyNTZ2MVwiXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMzg0cjFcIiwzODQsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGQ1wiLFwiQjMzMTJGQTdFMjNFRTdFNDk4OEUwNTZCRTNGODJEMTkxODFEOUM2RUZFODE0MTEyMDMxNDA4OEY1MDEzODc1QUM2NTYzOThEOEEyRUQxOUQyQTg1QzhFREQzRUMyQUVGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDNzYzNEQ4MUY0MzcyRERGNTgxQTBEQjI0OEIwQTc3QUVDRUMxOTZBQ0NDNTI5NzNcIixcIjFcIixcIkFBODdDQTIyQkU4QjA1Mzc4RUIxQzcxRUYzMjBBRDc0NkUxRDNCNjI4QkE3OUI5ODU5Rjc0MUUwODI1NDJBMzg1NTAyRjI1REJGNTUyOTZDM0E1NDVFMzg3Mjc2MEFCN1wiLFwiMzYxN2RlNGE5NjI2MmM2ZjVkOWU5OGJmOTI5MmRjMjlmOGY0MWRiZDI4OWExNDdjZTlkYTMxMTNiNWYwYjhjMDBhNjBiMWNlMWQ3ZTgxOWQ3YTQzMWQ3YzkwZWEwZTVmXCIsW1wiTklTVCBQLTM4NFwiLFwiUC0zODRcIl0pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDUyMXIxXCIsNTIxLFwiMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZcIixcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCIwNTE5NTNFQjk2MThFMUM5QTFGOTI5QTIxQTBCNjg1NDBFRUEyREE3MjVCOTlCMzE1RjNCOEI0ODk5MThFRjEwOUUxNTYxOTM5NTFFQzdFOTM3QjE2NTJDMEJEM0JCMUJGMDczNTczREY4ODNEMkMzNEYxRUY0NTFGRDQ2QjUwM0YwMFwiLFwiMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTUxODY4NzgzQkYyRjk2NkI3RkNDMDE0OEY3MDlBNUQwM0JCNUM5Qjg4OTlDNDdBRUJCNkZCNzFFOTEzODY0MDlcIixcIjFcIixcIkM2ODU4RTA2QjcwNDA0RTlDRDlFM0VDQjY2MjM5NUI0NDI5QzY0ODEzOTA1M0ZCNTIxRjgyOEFGNjA2QjREM0RCQUExNEI1RTc3RUZFNzU5MjhGRTFEQzEyN0EyRkZBOERFMzM0OEIzQzE4NTZBNDI5QkY5N0U3RTMxQzJFNUJENjZcIixcIjAxMTgzOTI5NmE3ODlhM2JjMDA0NWM4YTVmYjQyYzdkMWJkOTk4ZjU0NDQ5NTc5YjQ0NjgxN2FmYmQxNzI3M2U2NjJjOTdlZTcyOTk1ZWY0MjY0MGM1NTBiOTAxM2ZhZDA3NjEzNTNjNzA4NmEyNzJjMjQwODhiZTk0NzY5ZmQxNjY1MFwiLFtcIk5JU1QgUC01MjFcIixcIlAtNTIxXCJdKTtcbnZhciBLRVlVVElMPWZ1bmN0aW9uKCl7dmFyIGQ9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBrKENyeXB0b0pTLkFFUyxwLHIscSl9O3ZhciBlPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gayhDcnlwdG9KUy5UcmlwbGVERVMscCxyLHEpfTt2YXIgYT1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGsoQ3J5cHRvSlMuREVTLHAscixxKX07dmFyIGs9ZnVuY3Rpb24ocyx4LHUscSl7dmFyIHI9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh4KTt2YXIgdz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUpO3ZhciBwPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocSk7dmFyIHQ9e307dC5rZXk9dzt0Lml2PXA7dC5jaXBoZXJ0ZXh0PXI7dmFyIHY9cy5kZWNyeXB0KHQsdyx7aXY6cH0pO3JldHVybiBDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh2KX07dmFyIGw9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBnKENyeXB0b0pTLkFFUyxwLHIscSl9O3ZhciBvPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gZyhDcnlwdG9KUy5UcmlwbGVERVMscCxyLHEpfTt2YXIgZj1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGcoQ3J5cHRvSlMuREVTLHAscixxKX07dmFyIGc9ZnVuY3Rpb24odCx5LHYscSl7dmFyIHM9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh5KTt2YXIgeD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHYpO3ZhciBwPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocSk7dmFyIHc9dC5lbmNyeXB0KHMseCx7aXY6cH0pO3ZhciByPUNyeXB0b0pTLmVuYy5IZXgucGFyc2Uody50b1N0cmluZygpKTt2YXIgdT1DcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShyKTtyZXR1cm4gdX07dmFyIGk9e1wiQUVTLTI1Ni1DQkNcIjp7cHJvYzpkLGVwcm9jOmwsa2V5bGVuOjMyLGl2bGVuOjE2fSxcIkFFUy0xOTItQ0JDXCI6e3Byb2M6ZCxlcHJvYzpsLGtleWxlbjoyNCxpdmxlbjoxNn0sXCJBRVMtMTI4LUNCQ1wiOntwcm9jOmQsZXByb2M6bCxrZXlsZW46MTYsaXZsZW46MTZ9LFwiREVTLUVERTMtQ0JDXCI6e3Byb2M6ZSxlcHJvYzpvLGtleWxlbjoyNCxpdmxlbjo4fSxcIkRFUy1DQkNcIjp7cHJvYzphLGVwcm9jOmYsa2V5bGVuOjgsaXZsZW46OH19O3ZhciBjPWZ1bmN0aW9uKHApe3JldHVybiBpW3BdW1wicHJvY1wiXX07dmFyIG09ZnVuY3Rpb24ocCl7dmFyIHI9Q3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20ocCk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocik7cmV0dXJuIHF9O3ZhciBuPWZ1bmN0aW9uKHYpe3ZhciB3PXt9O3ZhciBxPXYubWF0Y2gobmV3IFJlZ0V4cChcIkRFSy1JbmZvOiAoW14sXSspLChbMC05QS1GYS1mXSspXCIsXCJtXCIpKTtpZihxKXt3LmNpcGhlcj1xWzFdO3cuaXZzYWx0PXFbMl19dmFyIHA9di5tYXRjaChuZXcgUmVnRXhwKFwiLS0tLS1CRUdJTiAoW0EtWl0rKSBQUklWQVRFIEtFWS0tLS0tXCIpKTtpZihwKXt3LnR5cGU9cFsxXX12YXIgdT0tMTt2YXIgeD0wO2lmKHYuaW5kZXhPZihcIlxcclxcblxcclxcblwiKSE9LTEpe3U9di5pbmRleE9mKFwiXFxyXFxuXFxyXFxuXCIpO3g9Mn1pZih2LmluZGV4T2YoXCJcXG5cXG5cIikhPS0xKXt1PXYuaW5kZXhPZihcIlxcblxcblwiKTt4PTF9dmFyIHQ9di5pbmRleE9mKFwiLS0tLS1FTkRcIik7aWYodSE9LTEmJnQhPS0xKXt2YXIgcj12LnN1YnN0cmluZyh1K3gqMix0LXgpO3I9ci5yZXBsYWNlKC9cXHMrL2csXCJcIik7dy5kYXRhPXJ9cmV0dXJuIHd9O3ZhciBqPWZ1bmN0aW9uKHEseSxwKXt2YXIgdj1wLnN1YnN0cmluZygwLDE2KTt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHYpO3ZhciByPUNyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHkpO3ZhciB1PWlbcV1bXCJrZXlsZW5cIl0raVtxXVtcIml2bGVuXCJdO3ZhciB4PVwiXCI7dmFyIHc9bnVsbDtmb3IoOzspe3ZhciBzPUNyeXB0b0pTLmFsZ28uTUQ1LmNyZWF0ZSgpO2lmKHchPW51bGwpe3MudXBkYXRlKHcpfXMudXBkYXRlKHIpO3MudXBkYXRlKHQpO3c9cy5maW5hbGl6ZSgpO3g9eCtDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh3KTtpZih4Lmxlbmd0aD49dSoyKXticmVha319dmFyIHo9e307ei5rZXloZXg9eC5zdWJzdHIoMCxpW3FdW1wia2V5bGVuXCJdKjIpO3ouaXZoZXg9eC5zdWJzdHIoaVtxXVtcImtleWxlblwiXSoyLGlbcV1bXCJpdmxlblwiXSoyKTtyZXR1cm4gen07dmFyIGI9ZnVuY3Rpb24ocCx2LHIsdyl7dmFyIHM9Q3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZShwKTt2YXIgcT1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTt2YXIgdT1pW3ZdW1wicHJvY1wiXTt2YXIgdD11KHEscix3KTtyZXR1cm4gdH07dmFyIGg9ZnVuY3Rpb24ocCxzLHEsdSl7dmFyIHI9aVtzXVtcImVwcm9jXCJdO3ZhciB0PXIocCxxLHUpO3JldHVybiB0fTtyZXR1cm57dmVyc2lvbjpcIjEuMC4wXCIscGFyc2VQS0NTNVBFTTpmdW5jdGlvbihwKXtyZXR1cm4gbihwKX0sZ2V0S2V5QW5kVW51c2VkSXZCeVBhc3Njb2RlQW5kSXZzYWx0OmZ1bmN0aW9uKHEscCxyKXtyZXR1cm4gaihxLHAscil9LGRlY3J5cHRLZXlCNjQ6ZnVuY3Rpb24ocCxyLHEscyl7cmV0dXJuIGIocCxyLHEscyl9LGdldERlY3J5cHRlZEtleUhleDpmdW5jdGlvbih5LHgpe3ZhciBxPW4oeSk7dmFyIHQ9cS50eXBlO3ZhciByPXEuY2lwaGVyO3ZhciBwPXEuaXZzYWx0O3ZhciBzPXEuZGF0YTt2YXIgdz1qKHIseCxwKTt2YXIgdj13LmtleWhleDt2YXIgdT1iKHMscix2LHApO3JldHVybiB1fSxnZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXg6ZnVuY3Rpb24oeCxzLEEsdCxyKXt2YXIgcD1cIlwiO2lmKHR5cGVvZiB0PT1cInVuZGVmaW5lZFwifHx0PT1udWxsKXt0PVwiQUVTLTI1Ni1DQkNcIn1pZih0eXBlb2YgaVt0XT09XCJ1bmRlZmluZWRcIil7dGhyb3dcIktFWVVUSUwgdW5zdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIit0fWlmKHR5cGVvZiByPT1cInVuZGVmaW5lZFwifHxyPT1udWxsKXt2YXIgdj1pW3RdW1wiaXZsZW5cIl07dmFyIHU9bSh2KTtyPXUudG9VcHBlckNhc2UoKX12YXIgej1qKHQsQSxyKTt2YXIgeT16LmtleWhleDt2YXIgdz1oKHMsdCx5LHIpO3ZhciBxPXcucmVwbGFjZSgvKC57NjR9KS9nLFwiJDFcXHJcXG5cIik7dmFyIHA9XCItLS0tLUJFR0lOIFwiK3grXCIgUFJJVkFURSBLRVktLS0tLVxcclxcblwiO3ArPVwiUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxcclxcblwiO3ArPVwiREVLLUluZm86IFwiK3QrXCIsXCIrcitcIlxcclxcblwiO3ArPVwiXFxyXFxuXCI7cCs9cTtwKz1cIlxcclxcbi0tLS0tRU5EIFwiK3grXCIgUFJJVkFURSBLRVktLS0tLVxcclxcblwiO3JldHVybiBwfSxwYXJzZUhleE9mRW5jcnlwdGVkUEtDUzg6ZnVuY3Rpb24oeSl7dmFyIEI9QVNOMUhFWDt2YXIgej1CLmdldENoaWxkSWR4O3ZhciB3PUIuZ2V0Vjt2YXIgdD17fTt2YXIgcj16KHksMCk7aWYoci5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwKS5pdGVtcyAhPSAyOiBcIityLmxlbmd0aH10LmNpcGhlcnRleHQ9dyh5LHJbMV0pO3ZhciBBPXooeSxyWzBdKTtpZihBLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMCkuaXRlbXMgIT0gMjogXCIrQS5sZW5ndGh9aWYodyh5LEFbMF0pIT1cIjJhODY0ODg2ZjcwZDAxMDUwZFwiKXt0aHJvd1widGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJFUzJcIn12YXIgcD16KHksQVsxXSk7aWYoQS5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMSkuaXRlbXMgIT0gMjogXCIrcC5sZW5ndGh9dmFyIHE9eih5LHBbMV0pO2lmKHEubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMSkuaXRlbXMgIT0gMjogXCIrcS5sZW5ndGh9aWYodyh5LHFbMF0pIT1cIjJhODY0ODg2ZjcwZDAzMDdcIil7dGhyb3dcInRoaXMgb25seSBzdXBwb3J0cyBUcmlwbGVERVNcIn10LmVuY3J5cHRpb25TY2hlbWVBbGc9XCJUcmlwbGVERVNcIjt0LmVuY3J5cHRpb25TY2hlbWVJVj13KHkscVsxXSk7dmFyIHM9eih5LHBbMF0pO2lmKHMubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMCkuaXRlbXMgIT0gMjogXCIrcy5sZW5ndGh9aWYodyh5LHNbMF0pIT1cIjJhODY0ODg2ZjcwZDAxMDUwY1wiKXt0aHJvd1widGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJLREYyXCJ9dmFyIHg9eih5LHNbMV0pO2lmKHgubGVuZ3RoPDIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMS4wLjEpLml0ZW1zIDwgMjogXCIreC5sZW5ndGh9dC5wYmtkZjJTYWx0PXcoeSx4WzBdKTt2YXIgdT13KHkseFsxXSk7dHJ5e3QucGJrZGYySXRlcj1wYXJzZUludCh1LDE2KX1jYXRjaCh2KXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdCBwYmtkZjJJdGVyOiBcIit1fXJldHVybiB0fSxnZXRQQktERjJLZXlIZXhGcm9tUGFyYW06ZnVuY3Rpb24odSxwKXt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUucGJrZGYyU2FsdCk7dmFyIHE9dS5wYmtkZjJJdGVyO3ZhciBzPUNyeXB0b0pTLlBCS0RGMihwLHQse2tleVNpemU6MTkyLzMyLGl0ZXJhdGlvbnM6cX0pO3ZhciByPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHMpO3JldHVybiByfSxfZ2V0UGxhaW5QS0NTOEhleEZyb21FbmNyeXB0ZWRQS0NTOFBFTTpmdW5jdGlvbih4LHkpe3ZhciByPXBlbXRvaGV4KHgsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIik7dmFyIHA9dGhpcy5wYXJzZUhleE9mRW5jcnlwdGVkUEtDUzgocik7dmFyIHU9S0VZVVRJTC5nZXRQQktERjJLZXlIZXhGcm9tUGFyYW0ocCx5KTt2YXIgdj17fTt2LmNpcGhlcnRleHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShwLmNpcGhlcnRleHQpO3ZhciB0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UodSk7dmFyIHM9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShwLmVuY3J5cHRpb25TY2hlbWVJVik7dmFyIHc9Q3J5cHRvSlMuVHJpcGxlREVTLmRlY3J5cHQodix0LHtpdjpzfSk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodyk7cmV0dXJuIHF9LGdldEtleUZyb21FbmNyeXB0ZWRQS0NTOFBFTTpmdW5jdGlvbihzLHEpe3ZhciBwPXRoaXMuX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU0ocyxxKTt2YXIgcj10aGlzLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleChwKTtyZXR1cm4gcn0scGFyc2VQbGFpblByaXZhdGVQS0NTOEhleDpmdW5jdGlvbihzKXt2YXIgdj1BU04xSEVYO3ZhciB1PXYuZ2V0Q2hpbGRJZHg7dmFyIHQ9di5nZXRWO3ZhciBxPXt9O3EuYWxncGFyYW09bnVsbDtpZihzLnN1YnN0cigwLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgcGxhaW4gUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDEpXCJ9dmFyIHI9dShzLDApO2lmKHIubGVuZ3RoIT0zKXt0aHJvd1wibWFsZm9ybWVkIHBsYWluIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDAyKVwifWlmKHMuc3Vic3RyKHJbMV0sMikhPVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwMylcIn12YXIgcD11KHMsclsxXSk7aWYocC5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDQpXCJ9aWYocy5zdWJzdHIocFswXSwyKSE9XCIwNlwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDA1KVwifXEuYWxnb2lkPXQocyxwWzBdKTtpZihzLnN1YnN0cihwWzFdLDIpPT1cIjA2XCIpe3EuYWxncGFyYW09dChzLHBbMV0pfWlmKHMuc3Vic3RyKHJbMl0sMikhPVwiMDRcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwNilcIn1xLmtleWlkeD12LmdldFZpZHgocyxyWzJdKTtyZXR1cm4gcX0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNOmZ1bmN0aW9uKHEpe3ZhciBwPXBlbXRvaGV4KHEsXCJQUklWQVRFIEtFWVwiKTt2YXIgcj10aGlzLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleChwKTtyZXR1cm4gcn0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4OmZ1bmN0aW9uKHApe3ZhciBxPXRoaXMucGFyc2VQbGFpblByaXZhdGVQS0NTOEhleChwKTt2YXIgcjtpZihxLmFsZ29pZD09XCIyYTg2NDg4NmY3MGQwMTAxMDFcIil7cj1uZXcgUlNBS2V5KCl9ZWxzZXtpZihxLmFsZ29pZD09XCIyYTg2NDhjZTM4MDQwMVwiKXtyPW5ldyBLSlVSLmNyeXB0by5EU0EoKX1lbHNle2lmKHEuYWxnb2lkPT1cIjJhODY0OGNlM2QwMjAxXCIpe3I9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKCl9ZWxzZXt0aHJvd1widW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXkgYWxnb3JpdGhtXCJ9fX1yLnJlYWRQS0NTOFBydktleUhleChwKTtyZXR1cm4gcn0sX2dldEtleUZyb21QdWJsaWNQS0NTOEhleDpmdW5jdGlvbihxKXt2YXIgcDt2YXIgcj1BU04xSEVYLmdldFZieUxpc3QocSwwLFswLDBdLFwiMDZcIik7aWYocj09PVwiMmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3A9bmV3IFJTQUtleSgpfWVsc2V7aWYocj09PVwiMmE4NjQ4Y2UzODA0MDFcIil7cD1uZXcgS0pVUi5jcnlwdG8uRFNBKCl9ZWxzZXtpZihyPT09XCIyYTg2NDhjZTNkMDIwMVwiKXtwPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSgpfWVsc2V7dGhyb3dcInVuc3VwcG9ydGVkIFBLQ1MjOCBwdWJsaWMga2V5IGhleFwifX19cC5yZWFkUEtDUzhQdWJLZXlIZXgocSk7cmV0dXJuIHB9LHBhcnNlUHVibGljUmF3UlNBS2V5SGV4OmZ1bmN0aW9uKHIpe3ZhciB1PUFTTjFIRVg7dmFyIHQ9dS5nZXRDaGlsZElkeDt2YXIgcz11LmdldFY7dmFyIHA9e307aWYoci5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIFJTQSBrZXkoY29kZTowMDEpXCJ9dmFyIHE9dChyLDApO2lmKHEubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIFJTQSBrZXkoY29kZTowMDIpXCJ9aWYoci5zdWJzdHIocVswXSwyKSE9XCIwMlwiKXt0aHJvd1wibWFsZm9ybWVkIFJTQSBrZXkoY29kZTowMDMpXCJ9cC5uPXMocixxWzBdKTtpZihyLnN1YnN0cihxWzFdLDIpIT1cIjAyXCIpe3Rocm93XCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwNClcIn1wLmU9cyhyLHFbMV0pO3JldHVybiBwfSxwYXJzZVB1YmxpY1BLQ1M4SGV4OmZ1bmN0aW9uKHQpe3ZhciB2PUFTTjFIRVg7dmFyIHU9di5nZXRDaGlsZElkeDt2YXIgcz12LmdldFY7dmFyIHE9e307cS5hbGdwYXJhbT1udWxsO3ZhciByPXUodCwwKTtpZihyLmxlbmd0aCE9Mil7dGhyb3dcIm91dGVyIERFUlNlcXVlbmNlIHNoYWxsIGhhdmUgMiBlbGVtZW50czogXCIrci5sZW5ndGh9dmFyIHc9clswXTtpZih0LnN1YnN0cih3LDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwMSlcIn12YXIgcD11KHQsdyk7aWYocC5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwMilcIn1pZih0LnN1YnN0cihwWzBdLDIpIT1cIjA2XCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwMylcIn1xLmFsZ29pZD1zKHQscFswXSk7aWYodC5zdWJzdHIocFsxXSwyKT09XCIwNlwiKXtxLmFsZ3BhcmFtPXModCxwWzFdKX1lbHNle2lmKHQuc3Vic3RyKHBbMV0sMik9PVwiMzBcIil7cS5hbGdwYXJhbT17fTtxLmFsZ3BhcmFtLnA9di5nZXRWYnlMaXN0KHQscFsxXSxbMF0sXCIwMlwiKTtxLmFsZ3BhcmFtLnE9di5nZXRWYnlMaXN0KHQscFsxXSxbMV0sXCIwMlwiKTtxLmFsZ3BhcmFtLmc9di5nZXRWYnlMaXN0KHQscFsxXSxbMl0sXCIwMlwiKX19aWYodC5zdWJzdHIoclsxXSwyKSE9XCIwM1wiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDQpXCJ9cS5rZXk9cyh0LHJbMV0pLnN1YnN0cigyKTtyZXR1cm4gcX0sfX0oKTtLRVlVVElMLmdldEtleT1mdW5jdGlvbihsLGssbil7dmFyIEc9QVNOMUhFWCxMPUcuZ2V0Q2hpbGRJZHgsdj1HLmdldFYsZD1HLmdldFZieUxpc3QsYz1LSlVSLmNyeXB0byxpPWMuRUNEU0EsQz1jLkRTQSx3PVJTQUtleSxNPXBlbXRvaGV4LEY9S0VZVVRJTDtpZih0eXBlb2YgdyE9XCJ1bmRlZmluZWRcIiYmbCBpbnN0YW5jZW9mIHcpe3JldHVybiBsfWlmKHR5cGVvZiBpIT1cInVuZGVmaW5lZFwiJiZsIGluc3RhbmNlb2YgaSl7cmV0dXJuIGx9aWYodHlwZW9mIEMhPVwidW5kZWZpbmVkXCImJmwgaW5zdGFuY2VvZiBDKXtyZXR1cm4gbH1pZihsLmN1cnZlIT09dW5kZWZpbmVkJiZsLnh5IT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3JldHVybiBuZXcgaSh7cHViOmwueHksY3VydmU6bC5jdXJ2ZX0pfWlmKGwuY3VydmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7cmV0dXJuIG5ldyBpKHtwcnY6bC5kLGN1cnZlOmwuY3VydmV9KX1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhsLm4sbC5lKTtyZXR1cm4gUH1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCYmbC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZHAhPT11bmRlZmluZWQmJmwuZHEhPT11bmRlZmluZWQmJmwuY28hPT11bmRlZmluZWQmJmwucWk9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlRXgobC5uLGwuZSxsLmQsbC5wLGwucSxsLmRwLGwuZHEsbC5jbyk7cmV0dXJuIFB9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQmJmwucD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGUobC5uLGwuZSxsLmQpO3JldHVybiBQfWlmKGwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmchPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC54PT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgQygpO1Auc2V0UHVibGljKGwucCxsLnEsbC5nLGwueSk7cmV0dXJuIFB9aWYobC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZyE9PXVuZGVmaW5lZCYmbC55IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQpe3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKGwucCxsLnEsbC5nLGwueSxsLngpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkJiZsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5kcCE9PXVuZGVmaW5lZCYmbC5kcSE9PXVuZGVmaW5lZCYmbC5xaSE9PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGVFeChiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSxiNjR1dG9oZXgobC5wKSxiNjR1dG9oZXgobC5xKSxiNjR1dG9oZXgobC5kcCksYjY0dXRvaGV4KGwuZHEpLGI2NHV0b2hleChsLnFpKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZShiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7ai5zZXRQdWJsaWNLZXlIZXgodSk7cmV0dXJuIGp9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7dmFyIGI9KFwiMDAwMDAwMDAwMFwiK2I2NHV0b2hleChsLmQpKS5zbGljZSgtdCk7ai5zZXRQdWJsaWNLZXlIZXgodSk7ai5zZXRQcml2YXRlS2V5SGV4KGIpO3JldHVybiBqfWlmKG49PT1cInBrY3M1cHJ2XCIpe3ZhciBKPWwsRz1BU04xSEVYLE4sUDtOPUwoSiwwKTtpZihOLmxlbmd0aD09PTkpe1A9bmV3IHcoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle2lmKE4ubGVuZ3RoPT09Nil7UD1uZXcgQygpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7aWYoTi5sZW5ndGg+MiYmSi5zdWJzdHIoTlsxXSwyKT09PVwiMDRcIil7UD1uZXcgaSgpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7dGhyb3dcInVuc3VwcG9ydGVkIFBLQ1MjMS81IGhleGFkZWNpbWFsIGtleVwifX19cmV0dXJuIFB9aWYobj09PVwicGtjczhwcnZcIil7dmFyIFA9Ri5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgobCk7cmV0dXJuIFB9aWYobj09PVwicGtjczhwdWJcIil7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChsKX1pZihuPT09XCJ4NTA5cHViXCIpe3JldHVybiBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGwpfWlmKGwuaW5kZXhPZihcIi1FTkQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFg1MDkgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFRSVVNURUQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xKXtyZXR1cm4gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydFBFTShsKX1pZihsLmluZGV4T2YoXCItRU5EIFBVQkxJQyBLRVktXCIpIT0tMSl7dmFyIE89cGVtdG9oZXgobCxcIlBVQkxJQyBLRVlcIik7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChPKX1pZihsLmluZGV4T2YoXCItRU5EIFJTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKT09LTEpe3ZhciBtPU0obCxcIlJTQSBQUklWQVRFIEtFWVwiKTtyZXR1cm4gRi5nZXRLZXkobSxudWxsLFwicGtjczVwcnZcIil9aWYobC5pbmRleE9mKFwiLUVORCBEU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgST1NKGwsXCJEU0EgUFJJVkFURSBLRVlcIik7dmFyIEU9ZChJLDAsWzFdLFwiMDJcIik7dmFyIEQ9ZChJLDAsWzJdLFwiMDJcIik7dmFyIEs9ZChJLDAsWzNdLFwiMDJcIik7dmFyIHI9ZChJLDAsWzRdLFwiMDJcIik7dmFyIHM9ZChJLDAsWzVdLFwiMDJcIik7dmFyIFA9bmV3IEMoKTtQLnNldFByaXZhdGUobmV3IEJpZ0ludGVnZXIoRSwxNiksbmV3IEJpZ0ludGVnZXIoRCwxNiksbmV3IEJpZ0ludGVnZXIoSywxNiksbmV3IEJpZ0ludGVnZXIociwxNiksbmV3IEJpZ0ludGVnZXIocywxNikpO3JldHVybiBQfWlmKGwuaW5kZXhPZihcIi1FTkQgUFJJVkFURSBLRVktXCIpIT0tMSl7cmV0dXJuIEYuZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNKGwpfWlmKGwuaW5kZXhPZihcIi1FTkQgUlNBIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpIT0tMSl7dmFyIG89Ri5nZXREZWNyeXB0ZWRLZXlIZXgobCxrKTt2YXIgSD1uZXcgUlNBS2V5KCk7SC5yZWFkUEtDUzVQcnZLZXlIZXgobyk7cmV0dXJuIEh9aWYobC5pbmRleE9mKFwiLUVORCBFQyBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKSE9LTEpe3ZhciBJPUYuZ2V0RGVjcnlwdGVkS2V5SGV4KGwsayk7dmFyIFA9ZChJLDAsWzFdLFwiMDRcIik7dmFyIGY9ZChJLDAsWzIsMF0sXCIwNlwiKTt2YXIgQT1kKEksMCxbMywwXSxcIjAzXCIpLnN1YnN0cigyKTt2YXIgZT1cIlwiO2lmKEtKVVIuY3J5cHRvLk9JRC5vaWRoZXgybmFtZVtmXSE9PXVuZGVmaW5lZCl7ZT1LSlVSLmNyeXB0by5PSUQub2lkaGV4Mm5hbWVbZl19ZWxzZXt0aHJvd1widW5kZWZpbmVkIE9JRChoZXgpIGluIEtKVVIuY3J5cHRvLk9JRDogXCIrZn12YXIgaj1uZXcgaSh7Y3VydmU6ZX0pO2ouc2V0UHVibGljS2V5SGV4KEEpO2ouc2V0UHJpdmF0ZUtleUhleChQKTtqLmlzUHVibGljPWZhbHNlO3JldHVybiBqfWlmKGwuaW5kZXhPZihcIi1FTkQgRFNBIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpIT0tMSl7dmFyIEk9Ri5nZXREZWNyeXB0ZWRLZXlIZXgobCxrKTt2YXIgRT1kKEksMCxbMV0sXCIwMlwiKTt2YXIgRD1kKEksMCxbMl0sXCIwMlwiKTt2YXIgSz1kKEksMCxbM10sXCIwMlwiKTt2YXIgcj1kKEksMCxbNF0sXCIwMlwiKTt2YXIgcz1kKEksMCxbNV0sXCIwMlwiKTt2YXIgUD1uZXcgQygpO1Auc2V0UHJpdmF0ZShuZXcgQmlnSW50ZWdlcihFLDE2KSxuZXcgQmlnSW50ZWdlcihELDE2KSxuZXcgQmlnSW50ZWdlcihLLDE2KSxuZXcgQmlnSW50ZWdlcihyLDE2KSxuZXcgQmlnSW50ZWdlcihzLDE2KSk7cmV0dXJuIFB9aWYobC5pbmRleE9mKFwiLUVORCBFTkNSWVBURUQgUFJJVkFURSBLRVktXCIpIT0tMSl7cmV0dXJuIEYuZ2V0S2V5RnJvbUVuY3J5cHRlZFBLQ1M4UEVNKGwsayl9dGhyb3dcIm5vdCBzdXBwb3J0ZWQgYXJndW1lbnRcIn07S0VZVVRJTC5nZW5lcmF0ZUtleXBhaXI9ZnVuY3Rpb24oYSxjKXtpZihhPT1cIlJTQVwiKXt2YXIgYj1jO3ZhciBoPW5ldyBSU0FLZXkoKTtoLmdlbmVyYXRlKGIsXCIxMDAwMVwiKTtoLmlzUHJpdmF0ZT10cnVlO2guaXNQdWJsaWM9dHJ1ZTt2YXIgZj1uZXcgUlNBS2V5KCk7dmFyIGU9aC5uLnRvU3RyaW5nKDE2KTt2YXIgaT1oLmUudG9TdHJpbmcoMTYpO2Yuc2V0UHVibGljKGUsaSk7Zi5pc1ByaXZhdGU9ZmFsc2U7Zi5pc1B1YmxpYz10cnVlO3ZhciBrPXt9O2sucHJ2S2V5T2JqPWg7ay5wdWJLZXlPYmo9ZjtyZXR1cm4ga31lbHNle2lmKGE9PVwiRUNcIil7dmFyIGQ9Yzt2YXIgZz1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOmR9KTt2YXIgaj1nLmdlbmVyYXRlS2V5UGFpckhleCgpO3ZhciBoPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6ZH0pO2guc2V0UHVibGljS2V5SGV4KGouZWNwdWJoZXgpO2guc2V0UHJpdmF0ZUtleUhleChqLmVjcHJ2aGV4KTtoLmlzUHJpdmF0ZT10cnVlO2guaXNQdWJsaWM9ZmFsc2U7dmFyIGY9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTpkfSk7Zi5zZXRQdWJsaWNLZXlIZXgoai5lY3B1YmhleCk7Zi5pc1ByaXZhdGU9ZmFsc2U7Zi5pc1B1YmxpYz10cnVlO3ZhciBrPXt9O2sucHJ2S2V5T2JqPWg7ay5wdWJLZXlPYmo9ZjtyZXR1cm4ga31lbHNle3Rocm93XCJ1bmtub3duIGFsZ29yaXRobTogXCIrYX19fTtLRVlVVElMLmdldFBFTT1mdW5jdGlvbihiLEQseSxtLHEsail7dmFyIEY9S0pVUixrPUYuYXNuMSx6PWsuREVST2JqZWN0SWRlbnRpZmllcixmPWsuREVSSW50ZWdlcixsPWsuQVNOMVV0aWwubmV3T2JqZWN0LGE9ay54NTA5LEM9YS5TdWJqZWN0UHVibGljS2V5SW5mbyxlPUYuY3J5cHRvLHU9ZS5EU0Escj1lLkVDRFNBLG49UlNBS2V5O2Z1bmN0aW9uIEEocyl7dmFyIEc9bCh7c2VxOlt7XCJpbnRcIjowfSx7XCJpbnRcIjp7YmlnaW50OnMubn19LHtcImludFwiOnMuZX0se1wiaW50XCI6e2JpZ2ludDpzLmR9fSx7XCJpbnRcIjp7YmlnaW50OnMucH19LHtcImludFwiOntiaWdpbnQ6cy5xfX0se1wiaW50XCI6e2JpZ2ludDpzLmRtcDF9fSx7XCJpbnRcIjp7YmlnaW50OnMuZG1xMX19LHtcImludFwiOntiaWdpbnQ6cy5jb2VmZn19XX0pO3JldHVybiBHfWZ1bmN0aW9uIEIoRyl7dmFyIHM9bCh7c2VxOlt7XCJpbnRcIjoxfSx7b2N0c3RyOntoZXg6Ry5wcnZLZXlIZXh9fSx7dGFnOltcImEwXCIsdHJ1ZSx7b2lkOntuYW1lOkcuY3VydmVOYW1lfX1dfSx7dGFnOltcImExXCIsdHJ1ZSx7Yml0c3RyOntoZXg6XCIwMFwiK0cucHViS2V5SGV4fX1dfV19KTtyZXR1cm4gc31mdW5jdGlvbiB4KHMpe3ZhciBHPWwoe3NlcTpbe1wiaW50XCI6MH0se1wiaW50XCI6e2JpZ2ludDpzLnB9fSx7XCJpbnRcIjp7YmlnaW50OnMucX19LHtcImludFwiOntiaWdpbnQ6cy5nfX0se1wiaW50XCI6e2JpZ2ludDpzLnl9fSx7XCJpbnRcIjp7YmlnaW50OnMueH19XX0pO3JldHVybiBHfWlmKCgobiE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4pfHwodSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUpfHwociE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHIpKSYmYi5pc1B1YmxpYz09dHJ1ZSYmKEQ9PT11bmRlZmluZWR8fEQ9PVwiUEtDUzhQVUJcIikpe3ZhciBFPW5ldyBDKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO3JldHVybiBoZXh0b3BlbSh3LFwiUFVCTElDIEtFWVwiKX1pZihEPT1cIlBLQ1MxUFJWXCImJm4hPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuJiYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT1BKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO3JldHVybiBoZXh0b3BlbSh3LFwiUlNBIFBSSVZBVEUgS0VZXCIpfWlmKEQ9PVwiUEtDUzFQUlZcIiYmciE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHImJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBpPW5ldyB6KHtuYW1lOmIuY3VydmVOYW1lfSk7dmFyIHY9aS5nZXRFbmNvZGVkSGV4KCk7dmFyIGg9QihiKTt2YXIgdD1oLmdldEVuY29kZWRIZXgoKTt2YXIgcD1cIlwiO3ArPWhleHRvcGVtKHYsXCJFQyBQQVJBTUVURVJTXCIpO3ArPWhleHRvcGVtKHQsXCJFQyBQUklWQVRFIEtFWVwiKTtyZXR1cm4gcH1pZihEPT1cIlBLQ1MxUFJWXCImJnUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1JiYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT14KGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO3JldHVybiBoZXh0b3BlbSh3LFwiRFNBIFBSSVZBVEUgS0VZXCIpfWlmKEQ9PVwiUEtDUzVQUlZcIiYmbiE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJih5IT09dW5kZWZpbmVkJiZ5IT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPUEoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYobT09PXVuZGVmaW5lZCl7bT1cIkRFUy1FREUzLUNCQ1wifXJldHVybiB0aGlzLmdldEVuY3J5cHRlZFBLQ1M1UEVNRnJvbVBydktleUhleChcIlJTQVwiLHcseSxtLGopfWlmKEQ9PVwiUEtDUzVQUlZcIiYmciE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHImJih5IT09dW5kZWZpbmVkJiZ5IT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPUIoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYobT09PXVuZGVmaW5lZCl7bT1cIkRFUy1FREUzLUNCQ1wifXJldHVybiB0aGlzLmdldEVuY3J5cHRlZFBLQ1M1UEVNRnJvbVBydktleUhleChcIkVDXCIsdyx5LG0sail9aWYoRD09XCJQS0NTNVBSVlwiJiZ1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9eChiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiRFNBXCIsdyx5LG0sail9dmFyIG89ZnVuY3Rpb24oRyxzKXt2YXIgST1jKEcscyk7dmFyIEg9bmV3IGwoe3NlcTpbe3NlcTpbe29pZDp7bmFtZTpcInBrY3M1UEJFUzJcIn19LHtzZXE6W3tzZXE6W3tvaWQ6e25hbWU6XCJwa2NzNVBCS0RGMlwifX0se3NlcTpbe29jdHN0cjp7aGV4OkkucGJrZGYyU2FsdH19LHtcImludFwiOkkucGJrZGYySXRlcn1dfV19LHtzZXE6W3tvaWQ6e25hbWU6XCJkZXMtRURFMy1DQkNcIn19LHtvY3RzdHI6e2hleDpJLmVuY3J5cHRpb25TY2hlbWVJVn19XX1dfV19LHtvY3RzdHI6e2hleDpJLmNpcGhlcnRleHR9fV19KTtyZXR1cm4gSC5nZXRFbmNvZGVkSGV4KCl9O3ZhciBjPWZ1bmN0aW9uKE4sTyl7dmFyIEg9MTAwO3ZhciBNPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDgpO3ZhciBMPVwiREVTLUVERTMtQ0JDXCI7dmFyIHM9Q3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oOCk7dmFyIEk9Q3J5cHRvSlMuUEJLREYyKE8sTSx7a2V5U2l6ZToxOTIvMzIsaXRlcmF0aW9uczpIfSk7dmFyIEo9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShOKTt2YXIgSz1DcnlwdG9KUy5UcmlwbGVERVMuZW5jcnlwdChKLEkse2l2OnN9KStcIlwiO3ZhciBHPXt9O0cuY2lwaGVydGV4dD1LO0cucGJrZGYyU2FsdD1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShNKTtHLnBia2RmMkl0ZXI9SDtHLmVuY3J5cHRpb25TY2hlbWVBbGc9TDtHLmVuY3J5cHRpb25TY2hlbWVJVj1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTtyZXR1cm4gR307aWYoRD09XCJQS0NTOFBSVlwiJiZuIT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGc9QShiKTt2YXIgZD1nLmdldEVuY29kZWRIZXgoKTt2YXIgRT1sKHtzZXE6W3tcImludFwiOjB9LHtzZXE6W3tvaWQ6e25hbWU6XCJyc2FFbmNyeXB0aW9uXCJ9fSx7XCJudWxsXCI6dHJ1ZX1dfSx7b2N0c3RyOntoZXg6ZH19XX0pO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpe3JldHVybiBoZXh0b3BlbSh3LFwiUFJJVkFURSBLRVlcIil9ZWxzZXt2YXIgdD1vKHcseSk7cmV0dXJuIGhleHRvcGVtKHQsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIil9fWlmKEQ9PVwiUEtDUzhQUlZcIiYmciE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHImJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1uZXcgbCh7c2VxOlt7XCJpbnRcIjoxfSx7b2N0c3RyOntoZXg6Yi5wcnZLZXlIZXh9fSx7dGFnOltcImExXCIsdHJ1ZSx7Yml0c3RyOntoZXg6XCIwMFwiK2IucHViS2V5SGV4fX1dfV19KTt2YXIgZD1nLmdldEVuY29kZWRIZXgoKTt2YXIgRT1sKHtzZXE6W3tcImludFwiOjB9LHtzZXE6W3tvaWQ6e25hbWU6XCJlY1B1YmxpY0tleVwifX0se29pZDp7bmFtZTpiLmN1cnZlTmFtZX19XX0se29jdHN0cjp7aGV4OmR9fV19KTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZih5PT09dW5kZWZpbmVkfHx5PT1udWxsKXtyZXR1cm4gaGV4dG9wZW0odyxcIlBSSVZBVEUgS0VZXCIpfWVsc2V7dmFyIHQ9byh3LHkpO3JldHVybiBoZXh0b3BlbSh0LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpfX1pZihEPT1cIlBLQ1M4UFJWXCImJnUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1JiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGc9bmV3IGYoe2JpZ2ludDpiLnh9KTt2YXIgZD1nLmdldEVuY29kZWRIZXgoKTt2YXIgRT1sKHtzZXE6W3tcImludFwiOjB9LHtzZXE6W3tvaWQ6e25hbWU6XCJkc2FcIn19LHtzZXE6W3tcImludFwiOntiaWdpbnQ6Yi5wfX0se1wiaW50XCI6e2JpZ2ludDpiLnF9fSx7XCJpbnRcIjp7YmlnaW50OmIuZ319XX1dfSx7b2N0c3RyOntoZXg6ZH19XX0pO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpe3JldHVybiBoZXh0b3BlbSh3LFwiUFJJVkFURSBLRVlcIil9ZWxzZXt2YXIgdD1vKHcseSk7cmV0dXJuIGhleHRvcGVtKHQsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIil9fXRocm93XCJ1bnN1cHBvcnRlZCBvYmplY3Qgbm9yIGZvcm1hdFwifTtLRVlVVElMLmdldEtleUZyb21DU1JQRU09ZnVuY3Rpb24oYil7dmFyIGE9cGVtdG9oZXgoYixcIkNFUlRJRklDQVRFIFJFUVVFU1RcIik7dmFyIGM9S0VZVVRJTC5nZXRLZXlGcm9tQ1NSSGV4KGEpO3JldHVybiBjfTtLRVlVVElMLmdldEtleUZyb21DU1JIZXg9ZnVuY3Rpb24oYSl7dmFyIGM9S0VZVVRJTC5wYXJzZUNTUkhleChhKTt2YXIgYj1LRVlVVElMLmdldEtleShjLnA4cHVia2V5aGV4LG51bGwsXCJwa2NzOHB1YlwiKTtyZXR1cm4gYn07S0VZVVRJTC5wYXJzZUNTUkhleD1mdW5jdGlvbihkKXt2YXIgaT1BU04xSEVYO3ZhciBmPWkuZ2V0Q2hpbGRJZHg7dmFyIGM9aS5nZXRUTFY7dmFyIGI9e307dmFyIGc9ZDtpZihnLnN1YnN0cigwLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgQ1NSKGNvZGU6MDAxKVwifXZhciBlPWYoZywwKTtpZihlLmxlbmd0aDwxKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwMilcIn1pZihnLnN1YnN0cihlWzBdLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgQ1NSKGNvZGU6MDAzKVwifXZhciBhPWYoZyxlWzBdKTtpZihhLmxlbmd0aDwzKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwNClcIn1iLnA4cHVia2V5aGV4PWMoZyxhWzJdKTtyZXR1cm4gYn07S0VZVVRJTC5nZXRKV0tGcm9tS2V5PWZ1bmN0aW9uKGQpe3ZhciBiPXt9O2lmKGQgaW5zdGFuY2VvZiBSU0FLZXkmJmQuaXNQcml2YXRlKXtiLmt0eT1cIlJTQVwiO2Iubj1oZXh0b2I2NHUoZC5uLnRvU3RyaW5nKDE2KSk7Yi5lPWhleHRvYjY0dShkLmUudG9TdHJpbmcoMTYpKTtiLmQ9aGV4dG9iNjR1KGQuZC50b1N0cmluZygxNikpO2IucD1oZXh0b2I2NHUoZC5wLnRvU3RyaW5nKDE2KSk7Yi5xPWhleHRvYjY0dShkLnEudG9TdHJpbmcoMTYpKTtiLmRwPWhleHRvYjY0dShkLmRtcDEudG9TdHJpbmcoMTYpKTtiLmRxPWhleHRvYjY0dShkLmRtcTEudG9TdHJpbmcoMTYpKTtiLnFpPWhleHRvYjY0dShkLmNvZWZmLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGJ9ZWxzZXtpZihkIGluc3RhbmNlb2YgUlNBS2V5JiZkLmlzUHVibGljKXtiLmt0eT1cIlJTQVwiO2Iubj1oZXh0b2I2NHUoZC5uLnRvU3RyaW5nKDE2KSk7Yi5lPWhleHRvYjY0dShkLmUudG9TdHJpbmcoMTYpKTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSYmZC5pc1ByaXZhdGUpe3ZhciBhPWQuZ2V0U2hvcnROSVNUUEN1cnZlTmFtZSgpO2lmKGEhPT1cIlAtMjU2XCImJmEhPT1cIlAtMzg0XCIpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lIGZvciBKV1Q6IFwiK2F9dmFyIGM9ZC5nZXRQdWJsaWNLZXlYWUhleCgpO2Iua3R5PVwiRUNcIjtiLmNydj1hO2IueD1oZXh0b2I2NHUoYy54KTtiLnk9aGV4dG9iNjR1KGMueSk7Yi5kPWhleHRvYjY0dShkLnBydktleUhleCk7cmV0dXJuIGJ9ZWxzZXtpZihkIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0EmJmQuaXNQdWJsaWMpe3ZhciBhPWQuZ2V0U2hvcnROSVNUUEN1cnZlTmFtZSgpO2lmKGEhPT1cIlAtMjU2XCImJmEhPT1cIlAtMzg0XCIpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lIGZvciBKV1Q6IFwiK2F9dmFyIGM9ZC5nZXRQdWJsaWNLZXlYWUhleCgpO2Iua3R5PVwiRUNcIjtiLmNydj1hO2IueD1oZXh0b2I2NHUoYy54KTtiLnk9aGV4dG9iNjR1KGMueSk7cmV0dXJuIGJ9fX19dGhyb3dcIm5vdCBzdXBwb3J0ZWQga2V5IG9iamVjdFwifTtcblJTQUtleS5nZXRQb3NBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4PWZ1bmN0aW9uKGEpe3JldHVybiBBU04xSEVYLmdldENoaWxkSWR4KGEsMCl9O1JTQUtleS5nZXRIZXhWYWx1ZUFycmF5T2ZDaGlsZHJlbkZyb21IZXg9ZnVuY3Rpb24oZil7dmFyIG49QVNOMUhFWDt2YXIgaT1uLmdldFY7dmFyIGs9UlNBS2V5LmdldFBvc0FycmF5T2ZDaGlsZHJlbkZyb21IZXgoZik7dmFyIGU9aShmLGtbMF0pO3ZhciBqPWkoZixrWzFdKTt2YXIgYj1pKGYsa1syXSk7dmFyIGM9aShmLGtbM10pO3ZhciBoPWkoZixrWzRdKTt2YXIgZz1pKGYsa1s1XSk7dmFyIG09aShmLGtbNl0pO3ZhciBsPWkoZixrWzddKTt2YXIgZD1pKGYsa1s4XSk7dmFyIGs9bmV3IEFycmF5KCk7ay5wdXNoKGUsaixiLGMsaCxnLG0sbCxkKTtyZXR1cm4ga307UlNBS2V5LnByb3RvdHlwZS5yZWFkUHJpdmF0ZUtleUZyb21QRU1TdHJpbmc9ZnVuY3Rpb24oZCl7dmFyIGM9cGVtdG9oZXgoZCk7dmFyIGI9UlNBS2V5LmdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleChjKTt0aGlzLnNldFByaXZhdGVFeChiWzFdLGJbMl0sYlszXSxiWzRdLGJbNV0sYls2XSxiWzddLGJbOF0pfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTNVBydktleUhleD1mdW5jdGlvbihjKXt2YXIgYj1SU0FLZXkuZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4KGMpO3RoaXMuc2V0UHJpdmF0ZUV4KGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10sYls4XSl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M4UHJ2S2V5SGV4PWZ1bmN0aW9uKGUpe3ZhciBjLGosbCxiLGEsZixkLGs7dmFyIG09QVNOMUhFWDt2YXIgZz1tLmdldFZieUxpc3Q7aWYobS5pc0FTTjFIRVgoZSk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dHJ5e2M9ZyhlLDAsWzIsMCwxXSxcIjAyXCIpO2o9ZyhlLDAsWzIsMCwyXSxcIjAyXCIpO2w9ZyhlLDAsWzIsMCwzXSxcIjAyXCIpO2I9ZyhlLDAsWzIsMCw0XSxcIjAyXCIpO2E9ZyhlLDAsWzIsMCw1XSxcIjAyXCIpO2Y9ZyhlLDAsWzIsMCw2XSxcIjAyXCIpO2Q9ZyhlLDAsWzIsMCw3XSxcIjAyXCIpO2s9ZyhlLDAsWzIsMCw4XSxcIjAyXCIpfWNhdGNoKGkpe3Rocm93XCJtYWxmb3JtZWQgUEtDUyM4IHBsYWluIFJTQSBwcml2YXRlIGtleVwifXRoaXMuc2V0UHJpdmF0ZUV4KGMsaixsLGIsYSxmLGQsayl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M1UHViS2V5SGV4PWZ1bmN0aW9uKGMpe3ZhciBlPUFTTjFIRVg7dmFyIGI9ZS5nZXRWO2lmKGUuaXNBU04xSEVYKGMpPT09ZmFsc2Upe3Rocm93XCJrZXlIZXggaXMgbm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgYT1lLmdldENoaWxkSWR4KGMsMCk7aWYoYS5sZW5ndGghPT0yfHxjLnN1YnN0cihhWzBdLDIpIT09XCIwMlwifHxjLnN1YnN0cihhWzFdLDIpIT09XCIwMlwiKXt0aHJvd1wid3JvbmcgaGV4IGZvciBQS0NTIzUgcHVibGljIGtleVwifXZhciBmPWIoYyxhWzBdKTt2YXIgZD1iKGMsYVsxXSk7dGhpcy5zZXRQdWJsaWMoZixkKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzhQdWJLZXlIZXg9ZnVuY3Rpb24oYil7dmFyIGM9QVNOMUhFWDtpZihjLmlzQVNOMUhFWChiKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn1pZihjLmdldFRMVmJ5TGlzdChiLDAsWzAsMF0pIT09XCIwNjA5MmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3Rocm93XCJub3QgUEtDUzggUlNBIHB1YmxpYyBrZXlcIn12YXIgYT1jLmdldFRMVmJ5TGlzdChiLDAsWzEsMF0pO3RoaXMucmVhZFBLQ1M1UHViS2V5SGV4KGEpfTtSU0FLZXkucHJvdG90eXBlLnJlYWRDZXJ0UHViS2V5SGV4PWZ1bmN0aW9uKGIsZCl7dmFyIGEsYzthPW5ldyBYNTA5KCk7YS5yZWFkQ2VydEhleChiKTtjPWEuZ2V0UHVibGljS2V5SGV4KCk7dGhpcy5yZWFkUEtDUzhQdWJLZXlIZXgoYyl9O1xudmFyIF9SRV9IRVhERUNPTkxZPW5ldyBSZWdFeHAoXCJcIik7X1JFX0hFWERFQ09OTFkuY29tcGlsZShcIlteMC05YS1mXVwiLFwiZ2lcIik7ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyhkLGUsYSl7dmFyIGI9ZnVuY3Rpb24oZil7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhmLGEpfTt2YXIgYz1iKGQpO3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmdldFBhZGRlZERpZ2VzdEluZm9IZXgoYyxhLGUpfWZ1bmN0aW9uIF96ZXJvUGFkZGluZ09mU2lnbmF0dXJlKGUsZCl7dmFyIGM9XCJcIjt2YXIgYT1kLzQtZS5sZW5ndGg7Zm9yKHZhciBiPTA7YjxhO2IrKyl7Yz1jK1wiMFwifXJldHVybiBjK2V9UlNBS2V5LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGQsYSl7dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhlLGEpfTt2YXIgYz1iKGQpO3JldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2goYyxhKX07UlNBS2V5LnByb3RvdHlwZS5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGUsYyl7dmFyIGY9S0pVUi5jcnlwdG8uVXRpbC5nZXRQYWRkZWREaWdlc3RJbmZvSGV4KGUsYyx0aGlzLm4uYml0TGVuZ3RoKCkpO3ZhciBiPXBhcnNlQmlnSW50KGYsMTYpO3ZhciBkPXRoaXMuZG9Qcml2YXRlKGIpO3ZhciBhPWQudG9TdHJpbmcoMTYpO3JldHVybiBfemVyb1BhZGRpbmdPZlNpZ25hdHVyZShhLHRoaXMubi5iaXRMZW5ndGgoKSl9O2Z1bmN0aW9uIHBzc19tZ2YxX3N0cihjLGEsZSl7dmFyIGI9XCJcIixkPTA7d2hpbGUoYi5sZW5ndGg8YSl7Yis9aGV4dG9yc3RyKGUocnN0cnRvaGV4KGMrU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsWyhkJjQyNzgxOTAwODApPj4yNCwoZCYxNjcxMTY4MCk+PjE2LChkJjY1MjgwKT4+OCxkJjI1NV0pKSkpO2QrPTF9cmV0dXJuIGJ9UlNBS2V5LnByb3RvdHlwZS5zaWduUFNTPWZ1bmN0aW9uKGUsYSxkKXt2YXIgYz1mdW5jdGlvbihmKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGYsYSl9O3ZhciBiPWMocnN0cnRvaGV4KGUpKTtpZihkPT09dW5kZWZpbmVkKXtkPS0xfXJldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1MoYixhLGQpfTtSU0FLZXkucHJvdG90eXBlLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1M9ZnVuY3Rpb24obCxhLGspe3ZhciBiPWhleHRvcnN0cihsKTt2YXIgZz1iLmxlbmd0aDt2YXIgbT10aGlzLm4uYml0TGVuZ3RoKCktMTt2YXIgYz1NYXRoLmNlaWwobS84KTt2YXIgZDt2YXIgbz1mdW5jdGlvbihpKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGksYSl9O2lmKGs9PT0tMXx8az09PXVuZGVmaW5lZCl7az1nfWVsc2V7aWYoaz09PS0yKXtrPWMtZy0yfWVsc2V7aWYoazwtMil7dGhyb3dcImludmFsaWQgc2FsdCBsZW5ndGhcIn19fWlmKGM8KGcraysyKSl7dGhyb3dcImRhdGEgdG9vIGxvbmdcIn12YXIgZj1cIlwiO2lmKGs+MCl7Zj1uZXcgQXJyYXkoayk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhmKTtmPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGYpfXZhciBuPWhleHRvcnN0cihvKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitiK2YpKSk7dmFyIGo9W107Zm9yKGQ9MDtkPGMtay1nLTI7ZCs9MSl7altkXT0wfXZhciBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGopK1wiXFx4MDFcIitmO3ZhciBoPXBzc19tZ2YxX3N0cihuLGUubGVuZ3RoLG8pO3ZhciBxPVtdO2ZvcihkPTA7ZDxlLmxlbmd0aDtkKz0xKXtxW2RdPWUuY2hhckNvZGVBdChkKV5oLmNoYXJDb2RlQXQoZCl9dmFyIHA9KDY1MjgwPj4oOCpjLW0pKSYyNTU7cVswXSY9fnA7Zm9yKGQ9MDtkPGc7ZCsrKXtxLnB1c2gobi5jaGFyQ29kZUF0KGQpKX1xLnB1c2goMTg4KTtyZXR1cm4gX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUodGhpcy5kb1ByaXZhdGUobmV3IEJpZ0ludGVnZXIocSkpLnRvU3RyaW5nKDE2KSx0aGlzLm4uYml0TGVuZ3RoKCkpfTtmdW5jdGlvbiBfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkoYSxkLGMpe3ZhciBiPW5ldyBSU0FLZXkoKTtiLnNldFB1YmxpYyhkLGMpO3ZhciBlPWIuZG9QdWJsaWMoYSk7cmV0dXJuIGV9ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4RGlnZXN0SW5mb0Zyb21TaWcoYSxjLGIpe3ZhciBlPV9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSShhLGMsYik7dmFyIGQ9ZS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTtyZXR1cm4gZH1mdW5jdGlvbiBfcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhmKXtmb3IodmFyIGUgaW4gS0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRCl7dmFyIGQ9S0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRFtlXTt2YXIgYj1kLmxlbmd0aDtpZihmLnN1YnN0cmluZygwLGIpPT1kKXt2YXIgYz1bZSxmLnN1YnN0cmluZyhiKV07cmV0dXJuIGN9fXJldHVybltdfVJTQUtleS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGYsail7aj1qLnJlcGxhY2UoX1JFX0hFWERFQ09OTFksXCJcIik7aj1qLnJlcGxhY2UoL1sgXFxuXSsvZyxcIlwiKTt2YXIgYj1wYXJzZUJpZ0ludChqLDE2KTtpZihiLmJpdExlbmd0aCgpPnRoaXMubi5iaXRMZW5ndGgoKSl7cmV0dXJuIDB9dmFyIGk9dGhpcy5kb1B1YmxpYyhiKTt2YXIgZT1pLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLFwiXCIpO3ZhciBnPV9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvKGUpO2lmKGcubGVuZ3RoPT0wKXtyZXR1cm4gZmFsc2V9dmFyIGQ9Z1swXTt2YXIgaD1nWzFdO3ZhciBhPWZ1bmN0aW9uKGspe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcoayxkKX07dmFyIGM9YShmKTtyZXR1cm4oaD09Yyl9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGUsYSl7YT1hLnJlcGxhY2UoX1JFX0hFWERFQ09OTFksXCJcIik7YT1hLnJlcGxhY2UoL1sgXFxuXSsvZyxcIlwiKTt2YXIgYj1wYXJzZUJpZ0ludChhLDE2KTtpZihiLmJpdExlbmd0aCgpPnRoaXMubi5iaXRMZW5ndGgoKSl7cmV0dXJuIDB9dmFyIGg9dGhpcy5kb1B1YmxpYyhiKTt2YXIgZz1oLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLFwiXCIpO3ZhciBjPV9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvKGcpO2lmKGMubGVuZ3RoPT0wKXtyZXR1cm4gZmFsc2V9dmFyIGQ9Y1swXTt2YXIgZj1jWzFdO3JldHVybihmPT1lKX07UlNBS2V5LnByb3RvdHlwZS52ZXJpZnlQU1M9ZnVuY3Rpb24oYyxiLGEsZil7dmFyIGU9ZnVuY3Rpb24oZyl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChnLGEpfTt2YXIgZD1lKHJzdHJ0b2hleChjKSk7aWYoZj09PXVuZGVmaW5lZCl7Zj0tMX1yZXR1cm4gdGhpcy52ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1MoZCxiLGEsZil9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTPWZ1bmN0aW9uKGYscyxsLGMpe3ZhciBrPW5ldyBCaWdJbnRlZ2VyKHMsMTYpO2lmKGsuYml0TGVuZ3RoKCk+dGhpcy5uLmJpdExlbmd0aCgpKXtyZXR1cm4gZmFsc2V9dmFyIHI9ZnVuY3Rpb24oaSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChpLGwpfTt2YXIgaj1oZXh0b3JzdHIoZik7dmFyIGg9ai5sZW5ndGg7dmFyIGc9dGhpcy5uLmJpdExlbmd0aCgpLTE7dmFyIG09TWF0aC5jZWlsKGcvOCk7dmFyIHE7aWYoYz09PS0xfHxjPT09dW5kZWZpbmVkKXtjPWh9ZWxzZXtpZihjPT09LTIpe2M9bS1oLTJ9ZWxzZXtpZihjPC0yKXt0aHJvd1wiaW52YWxpZCBzYWx0IGxlbmd0aFwifX19aWYobTwoaCtjKzIpKXt0aHJvd1wiZGF0YSB0b28gbG9uZ1wifXZhciBhPXRoaXMuZG9QdWJsaWMoaykudG9CeXRlQXJyYXkoKTtmb3IocT0wO3E8YS5sZW5ndGg7cSs9MSl7YVtxXSY9MjU1fXdoaWxlKGEubGVuZ3RoPG0pe2EudW5zaGlmdCgwKX1pZihhW20tMV0hPT0xODgpe3Rocm93XCJlbmNvZGVkIG1lc3NhZ2UgZG9lcyBub3QgZW5kIGluIDB4YmNcIn1hPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEpO3ZhciBkPWEuc3Vic3RyKDAsbS1oLTEpO3ZhciBlPWEuc3Vic3RyKGQubGVuZ3RoLGgpO3ZhciBwPSg2NTI4MD4+KDgqbS1nKSkmMjU1O2lmKChkLmNoYXJDb2RlQXQoMCkmcCkhPT0wKXt0aHJvd1wiYml0cyBiZXlvbmQga2V5c2l6ZSBub3QgemVyb1wifXZhciBuPXBzc19tZ2YxX3N0cihlLGQubGVuZ3RoLHIpO3ZhciBvPVtdO2ZvcihxPTA7cTxkLmxlbmd0aDtxKz0xKXtvW3FdPWQuY2hhckNvZGVBdChxKV5uLmNoYXJDb2RlQXQocSl9b1swXSY9fnA7dmFyIGI9bS1oLWMtMjtmb3IocT0wO3E8YjtxKz0xKXtpZihvW3FdIT09MCl7dGhyb3dcImxlZnRtb3N0IG9jdGV0cyBub3QgemVyb1wifX1pZihvW2JdIT09MSl7dGhyb3dcIjB4MDEgbWFya2VyIG5vdCBmb3VuZFwifXJldHVybiBlPT09aGV4dG9yc3RyKHIocnN0cnRvaGV4KFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFwiK2orU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsby5zbGljZSgtYykpKSkpfTtSU0FLZXkuU0FMVF9MRU5fSExFTj0tMTtSU0FLZXkuU0FMVF9MRU5fTUFYPS0yO1JTQUtleS5TQUxUX0xFTl9SRUNPVkVSPS0yO1xuZnVuY3Rpb24gWDUwOSgpe3ZhciBrPUFTTjFIRVgsaj1rLmdldENoaWxkSWR4LGg9ay5nZXRWLGI9ay5nZXRUTFYsZj1rLmdldFZieUxpc3QsYz1rLmdldFRMVmJ5TGlzdCxnPWsuZ2V0SWR4YnlMaXN0LGQ9ay5nZXRWaWR4LGk9ay5vaWRuYW1lLGE9WDUwOSxlPXBlbXRvaGV4O3RoaXMuaGV4PW51bGw7dGhpcy52ZXJzaW9uPTA7dGhpcy5mb2Zmc2V0PTA7dGhpcy5hRXh0SW5mbz1udWxsO3RoaXMuZ2V0VmVyc2lvbj1mdW5jdGlvbigpe2lmKHRoaXMuaGV4PT09bnVsbHx8dGhpcy52ZXJzaW9uIT09MCl7cmV0dXJuIHRoaXMudmVyc2lvbn1pZihjKHRoaXMuaGV4LDAsWzAsMF0pIT09XCJhMDAzMDIwMTAyXCIpe3RoaXMudmVyc2lvbj0xO3RoaXMuZm9mZnNldD0tMTtyZXR1cm4gMX10aGlzLnZlcnNpb249MztyZXR1cm4gM307dGhpcy5nZXRTZXJpYWxOdW1iZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzLmhleCwwLFswLDErdGhpcy5mb2Zmc2V0XSxcIjAyXCIpfTt0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobUZpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuIGkoZih0aGlzLmhleCwwLFswLDIrdGhpcy5mb2Zmc2V0LDBdLFwiMDZcIikpfTt0aGlzLmdldElzc3VlckhleD1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMuaGV4LDAsWzAsMyt0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0SXNzdWVyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGEuaGV4MmRuKHRoaXMuZ2V0SXNzdWVySGV4KCkpfTt0aGlzLmdldFN1YmplY3RIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLmhleCwwLFswLDUrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldFN1YmplY3RTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5oZXgyZG4odGhpcy5nZXRTdWJqZWN0SGV4KCkpfTt0aGlzLmdldE5vdEJlZm9yZT1mdW5jdGlvbigpe3ZhciBsPWYodGhpcy5oZXgsMCxbMCw0K3RoaXMuZm9mZnNldCwwXSk7bD1sLnJlcGxhY2UoLyguLikvZyxcIiUkMVwiKTtsPWRlY29kZVVSSUNvbXBvbmVudChsKTtyZXR1cm4gbH07dGhpcy5nZXROb3RBZnRlcj1mdW5jdGlvbigpe3ZhciBsPWYodGhpcy5oZXgsMCxbMCw0K3RoaXMuZm9mZnNldCwxXSk7bD1sLnJlcGxhY2UoLyguLikvZyxcIiUkMVwiKTtsPWRlY29kZVVSSUNvbXBvbmVudChsKTtyZXR1cm4gbH07dGhpcy5nZXRQdWJsaWNLZXlIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gay5nZXRUTFZieUxpc3QodGhpcy5oZXgsMCxbMCw2K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXlJZHg9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLmhleCwwLFswLDYrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldFB1YmxpY0tleUNvbnRlbnRJZHg9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLmdldFB1YmxpY0tleUlkeCgpO3JldHVybiBnKHRoaXMuaGV4LGwsWzEsMF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gS0VZVVRJTC5nZXRLZXkodGhpcy5nZXRQdWJsaWNLZXlIZXgoKSxudWxsLFwicGtjczhwdWJcIil9O3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZT1mdW5jdGlvbigpe3JldHVybiBpKGYodGhpcy5oZXgsMCxbMSwwXSxcIjA2XCIpKX07dGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiBmKHRoaXMuaGV4LDAsWzJdLFwiMDNcIix0cnVlKX07dGhpcy52ZXJpZnlTaWduYXR1cmU9ZnVuY3Rpb24obil7dmFyIG89dGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1OYW1lKCk7dmFyIGw9dGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleCgpO3ZhciBtPWModGhpcy5oZXgsMCxbMF0sXCIzMFwiKTt2YXIgcD1uZXcgS0pVUi5jcnlwdG8uU2lnbmF0dXJlKHthbGc6b30pO3AuaW5pdChuKTtwLnVwZGF0ZUhleChtKTtyZXR1cm4gcC52ZXJpZnkobCl9O3RoaXMucGFyc2VFeHQ9ZnVuY3Rpb24oKXtpZih0aGlzLnZlcnNpb24hPT0zKXtyZXR1cm4gLTF9dmFyIHA9Zyh0aGlzLmhleCwwLFswLDcsMF0sXCIzMFwiKTt2YXIgbT1qKHRoaXMuaGV4LHApO3RoaXMuYUV4dEluZm89bmV3IEFycmF5KCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe3ZhciBxPXt9O3EuY3JpdGljYWw9ZmFsc2U7dmFyIGw9aih0aGlzLmhleCxtW25dKTt2YXIgcj0wO2lmKGwubGVuZ3RoPT09Myl7cS5jcml0aWNhbD10cnVlO3I9MX1xLm9pZD1rLmhleHRvb2lkc3RyKGYodGhpcy5oZXgsbVtuXSxbMF0sXCIwNlwiKSk7dmFyIG89Zyh0aGlzLmhleCxtW25dLFsxK3JdKTtxLnZpZHg9ZCh0aGlzLmhleCxvKTt0aGlzLmFFeHRJbmZvLnB1c2gocSl9fTt0aGlzLmdldEV4dEluZm89ZnVuY3Rpb24obil7dmFyIGw9dGhpcy5hRXh0SW5mbzt2YXIgbz1uO2lmKCFuLm1hdGNoKC9eWzAtOS5dKyQvKSl7bz1LSlVSLmFzbjEueDUwOS5PSUQubmFtZTJvaWQobil9aWYobz09PVwiXCIpe3JldHVybiB1bmRlZmluZWR9Zm9yKHZhciBtPTA7bTxsLmxlbmd0aDttKyspe2lmKGxbbV0ub2lkPT09byl7cmV0dXJuIGxbbV19fXJldHVybiB1bmRlZmluZWR9O3RoaXMuZ2V0RXh0QmFzaWNDb25zdHJhaW50cz1mdW5jdGlvbigpe3ZhciBuPXRoaXMuZ2V0RXh0SW5mbyhcImJhc2ljQ29uc3RyYWludHNcIik7aWYobj09PXVuZGVmaW5lZCl7cmV0dXJuIG59dmFyIGw9aCh0aGlzLmhleCxuLnZpZHgpO2lmKGw9PT1cIlwiKXtyZXR1cm57fX1pZihsPT09XCIwMTAxZmZcIil7cmV0dXJue2NBOnRydWV9fWlmKGwuc3Vic3RyKDAsOCk9PT1cIjAxMDFmZjAyXCIpe3ZhciBvPWgobCw2KTt2YXIgbT1wYXJzZUludChvLDE2KTtyZXR1cm57Y0E6dHJ1ZSxwYXRoTGVuOm19fXRocm93XCJiYXNpY0NvbnN0cmFpbnRzIHBhcnNlIGVycm9yXCJ9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VCaW49ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEV4dEluZm8oXCJrZXlVc2FnZVwiKTtpZihvPT09dW5kZWZpbmVkKXtyZXR1cm5cIlwifXZhciBtPWgodGhpcy5oZXgsby52aWR4KTtpZihtLmxlbmd0aCUyIT0wfHxtLmxlbmd0aDw9Mil7dGhyb3dcIm1hbGZvcm1lZCBrZXkgdXNhZ2UgdmFsdWVcIn12YXIgbD1wYXJzZUludChtLnN1YnN0cigwLDIpKTt2YXIgbj1wYXJzZUludChtLnN1YnN0cigyKSwxNikudG9TdHJpbmcoMik7cmV0dXJuIG4uc3Vic3RyKDAsbi5sZW5ndGgtbCl9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLmdldEV4dEtleVVzYWdlQmluKCk7dmFyIGw9bmV3IEFycmF5KCk7Zm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspe2lmKG4uc3Vic3RyKG0sMSk9PVwiMVwiKXtsLnB1c2goWDUwOS5LRVlVU0FHRV9OQU1FW21dKX19cmV0dXJuIGwuam9pbihcIixcIil9O3RoaXMuZ2V0RXh0U3ViamVjdEtleUlkZW50aWZpZXI9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLmdldEV4dEluZm8oXCJzdWJqZWN0S2V5SWRlbnRpZmllclwiKTtpZihsPT09dW5kZWZpbmVkKXtyZXR1cm4gbH1yZXR1cm4gaCh0aGlzLmhleCxsLnZpZHgpfTt0aGlzLmdldEV4dEF1dGhvcml0eUtleUlkZW50aWZpZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdldEV4dEluZm8oXCJhdXRob3JpdHlLZXlJZGVudGlmaWVyXCIpO2lmKHA9PT11bmRlZmluZWQpe3JldHVybiBwfXZhciBsPXt9O3ZhciBvPWIodGhpcy5oZXgscC52aWR4KTt2YXIgbT1qKG8sMCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe2lmKG8uc3Vic3RyKG1bbl0sMik9PT1cIjgwXCIpe2wua2lkPWgobyxtW25dKX19cmV0dXJuIGx9O3RoaXMuZ2V0RXh0RXh0S2V5VXNhZ2VOYW1lPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5nZXRFeHRJbmZvKFwiZXh0S2V5VXNhZ2VcIik7aWYocD09PXVuZGVmaW5lZCl7cmV0dXJuIHB9dmFyIGw9bmV3IEFycmF5KCk7dmFyIG89Yih0aGlzLmhleCxwLnZpZHgpO2lmKG89PT1cIlwiKXtyZXR1cm4gbH12YXIgbT1qKG8sMCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe2wucHVzaChpKGgobyxtW25dKSkpfXJldHVybiBsfTt0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lPWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5nZXRFeHRTdWJqZWN0QWx0TmFtZTIoKTt2YXIgbD1uZXcgQXJyYXkoKTtmb3IodmFyIG49MDtuPG0ubGVuZ3RoO24rKyl7aWYobVtuXVswXT09PVwiRE5TXCIpe2wucHVzaChtW25dWzFdKX19cmV0dXJuIGx9O3RoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyPWZ1bmN0aW9uKCl7dmFyIHAscyxyO3ZhciBxPXRoaXMuZ2V0RXh0SW5mbyhcInN1YmplY3RBbHROYW1lXCIpO2lmKHE9PT11bmRlZmluZWQpe3JldHVybiBxfXZhciBsPW5ldyBBcnJheSgpO3ZhciBvPWIodGhpcy5oZXgscS52aWR4KTt2YXIgbT1qKG8sMCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe3I9by5zdWJzdHIobVtuXSwyKTtwPWgobyxtW25dKTtpZihyPT09XCI4MVwiKXtzPWhleHRvdXRmOChwKTtsLnB1c2goW1wiTUFJTFwiLHNdKX1pZihyPT09XCI4MlwiKXtzPWhleHRvdXRmOChwKTtsLnB1c2goW1wiRE5TXCIsc10pfWlmKHI9PT1cIjg0XCIpe3M9WDUwOS5oZXgyZG4ocCwwKTtsLnB1c2goW1wiRE5cIixzXSl9aWYocj09PVwiODZcIil7cz1oZXh0b3V0ZjgocCk7bC5wdXNoKFtcIlVSSVwiLHNdKX1pZihyPT09XCI4N1wiKXtzPWhleHRvaXAocCk7bC5wdXNoKFtcIklQXCIsc10pfX1yZXR1cm4gbH07dGhpcy5nZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkk9ZnVuY3Rpb24oKXt2YXIgcT10aGlzLmdldEV4dEluZm8oXCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIik7aWYocT09PXVuZGVmaW5lZCl7cmV0dXJuIHF9dmFyIGw9bmV3IEFycmF5KCk7dmFyIG09aih0aGlzLmhleCxxLnZpZHgpO2Zvcih2YXIgbz0wO288bS5sZW5ndGg7bysrKXt0cnl7dmFyIHI9Zih0aGlzLmhleCxtW29dLFswLDAsMF0sXCI4NlwiKTt2YXIgcD1oZXh0b3V0Zjgocik7bC5wdXNoKHApfWNhdGNoKG4pe319cmV0dXJuIGx9O3RoaXMuZ2V0RXh0QUlBSW5mbz1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ2V0RXh0SW5mbyhcImF1dGhvcml0eUluZm9BY2Nlc3NcIik7aWYocD09PXVuZGVmaW5lZCl7cmV0dXJuIHB9dmFyIGw9e29jc3A6W10sY2Fpc3N1ZXI6W119O3ZhciBtPWoodGhpcy5oZXgscC52aWR4KTtmb3IodmFyIG49MDtuPG0ubGVuZ3RoO24rKyl7dmFyIHE9Zih0aGlzLmhleCxtW25dLFswXSxcIjA2XCIpO3ZhciBvPWYodGhpcy5oZXgsbVtuXSxbMV0sXCI4NlwiKTtpZihxPT09XCIyYjA2MDEwNTA1MDczMDAxXCIpe2wub2NzcC5wdXNoKGhleHRvdXRmOChvKSl9aWYocT09PVwiMmIwNjAxMDUwNTA3MzAwMlwiKXtsLmNhaXNzdWVyLnB1c2goaGV4dG91dGY4KG8pKX19cmV0dXJuIGx9O3RoaXMuZ2V0RXh0Q2VydGlmaWNhdGVQb2xpY2llcz1mdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0RXh0SW5mbyhcImNlcnRpZmljYXRlUG9saWNpZXNcIik7aWYobz09PXVuZGVmaW5lZCl7cmV0dXJuIG99dmFyIGw9Yih0aGlzLmhleCxvLnZpZHgpO3ZhciB1PVtdO3ZhciBzPWoobCwwKTtmb3IodmFyIHI9MDtyPHMubGVuZ3RoO3IrKyl7dmFyIHQ9e307dmFyIG49aihsLHNbcl0pO3QuaWQ9aShoKGwsblswXSkpO2lmKG4ubGVuZ3RoPT09Mil7dmFyIG09aihsLG5bMV0pO2Zvcih2YXIgcT0wO3E8bS5sZW5ndGg7cSsrKXt2YXIgcD1mKGwsbVtxXSxbMF0sXCIwNlwiKTtpZihwPT09XCIyYjA2MDEwNTA1MDcwMjAxXCIpe3QuY3BzPWhleHRvdXRmOChmKGwsbVtxXSxbMV0pKX1lbHNle2lmKHA9PT1cIjJiMDYwMTA1MDUwNzAyMDJcIil7dC51bm90aWNlPWhleHRvdXRmOChmKGwsbVtxXSxbMSwwXSkpfX19fXUucHVzaCh0KX1yZXR1cm4gdX07dGhpcy5yZWFkQ2VydFBFTT1mdW5jdGlvbihsKXt0aGlzLnJlYWRDZXJ0SGV4KGUobCkpfTt0aGlzLnJlYWRDZXJ0SGV4PWZ1bmN0aW9uKGwpe3RoaXMuaGV4PWw7dGhpcy5nZXRWZXJzaW9uKCk7dHJ5e2codGhpcy5oZXgsMCxbMCw3XSxcImEzXCIpO3RoaXMucGFyc2VFeHQoKX1jYXRjaChtKXt9fTt0aGlzLmdldEluZm89ZnVuY3Rpb24oKXt2YXIgbT1YNTA5O3ZhciBCLHUsejtCPVwiQmFzaWMgRmllbGRzXFxuXCI7Qis9XCIgIHNlcmlhbCBudW1iZXI6IFwiK3RoaXMuZ2V0U2VyaWFsTnVtYmVySGV4KCkrXCJcXG5cIjtCKz1cIiAgc2lnbmF0dXJlIGFsZ29yaXRobTogXCIrdGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCgpK1wiXFxuXCI7Qis9XCIgIGlzc3VlcjogXCIrdGhpcy5nZXRJc3N1ZXJTdHJpbmcoKStcIlxcblwiO0IrPVwiICBub3RCZWZvcmU6IFwiK3RoaXMuZ2V0Tm90QmVmb3JlKCkrXCJcXG5cIjtCKz1cIiAgbm90QWZ0ZXI6IFwiK3RoaXMuZ2V0Tm90QWZ0ZXIoKStcIlxcblwiO0IrPVwiICBzdWJqZWN0OiBcIit0aGlzLmdldFN1YmplY3RTdHJpbmcoKStcIlxcblwiO0IrPVwiICBzdWJqZWN0IHB1YmxpYyBrZXkgaW5mbzogXFxuXCI7dT10aGlzLmdldFB1YmxpY0tleSgpO0IrPVwiICAgIGtleSBhbGdvcml0aG06IFwiK3UudHlwZStcIlxcblwiO2lmKHUudHlwZT09PVwiUlNBXCIpe0IrPVwiICAgIG49XCIraGV4dG9wb3NoZXgodS5uLnRvU3RyaW5nKDE2KSkuc3Vic3RyKDAsMTYpK1wiLi4uXFxuXCI7Qis9XCIgICAgZT1cIitoZXh0b3Bvc2hleCh1LmUudG9TdHJpbmcoMTYpKStcIlxcblwifXo9dGhpcy5hRXh0SW5mbztpZih6IT09dW5kZWZpbmVkJiZ6IT09bnVsbCl7Qis9XCJYNTA5djMgRXh0ZW5zaW9uczpcXG5cIjtmb3IodmFyIHI9MDtyPHoubGVuZ3RoO3IrKyl7dmFyIG49eltyXTt2YXIgQT1LSlVSLmFzbjEueDUwOS5PSUQub2lkMm5hbWUobi5vaWQpO2lmKEE9PT1cIlwiKXtBPW4ub2lkfXZhciB4PVwiXCI7aWYobi5jcml0aWNhbD09PXRydWUpe3g9XCJDUklUSUNBTFwifUIrPVwiICBcIitBK1wiIFwiK3grXCI6XFxuXCI7aWYoQT09PVwiYmFzaWNDb25zdHJhaW50c1wiKXt2YXIgdj10aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHMoKTtpZih2LmNBPT09dW5kZWZpbmVkKXtCKz1cIiAgICB7fVxcblwifWVsc2V7Qis9XCIgICAgY0E9dHJ1ZVwiO2lmKHYucGF0aExlbiE9PXVuZGVmaW5lZCl7Qis9XCIsIHBhdGhMZW49XCIrdi5wYXRoTGVufUIrPVwiXFxuXCJ9fWVsc2V7aWYoQT09PVwia2V5VXNhZ2VcIil7Qis9XCIgICAgXCIrdGhpcy5nZXRFeHRLZXlVc2FnZVN0cmluZygpK1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJzdWJqZWN0S2V5SWRlbnRpZmllclwiKXtCKz1cIiAgICBcIit0aGlzLmdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyKCkrXCJcXG5cIn1lbHNle2lmKEE9PT1cImF1dGhvcml0eUtleUlkZW50aWZpZXJcIil7dmFyIGw9dGhpcy5nZXRFeHRBdXRob3JpdHlLZXlJZGVudGlmaWVyKCk7aWYobC5raWQhPT11bmRlZmluZWQpe0IrPVwiICAgIGtpZD1cIitsLmtpZCtcIlxcblwifX1lbHNle2lmKEE9PT1cImV4dEtleVVzYWdlXCIpe3ZhciB3PXRoaXMuZ2V0RXh0RXh0S2V5VXNhZ2VOYW1lKCk7Qis9XCIgICAgXCIrdy5qb2luKFwiLCBcIikrXCJcXG5cIn1lbHNle2lmKEE9PT1cInN1YmplY3RBbHROYW1lXCIpe3ZhciB0PXRoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyKCk7Qis9XCIgICAgXCIrdCtcIlxcblwifWVsc2V7aWYoQT09PVwiY1JMRGlzdHJpYnV0aW9uUG9pbnRzXCIpe3ZhciB5PXRoaXMuZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJKCk7Qis9XCIgICAgXCIreStcIlxcblwifWVsc2V7aWYoQT09PVwiYXV0aG9yaXR5SW5mb0FjY2Vzc1wiKXt2YXIgcD10aGlzLmdldEV4dEFJQUluZm8oKTtpZihwLm9jc3AhPT11bmRlZmluZWQpe0IrPVwiICAgIG9jc3A6IFwiK3Aub2NzcC5qb2luKFwiLFwiKStcIlxcblwifWlmKHAuY2Fpc3N1ZXIhPT11bmRlZmluZWQpe0IrPVwiICAgIGNhaXNzdWVyOiBcIitwLmNhaXNzdWVyLmpvaW4oXCIsXCIpK1wiXFxuXCJ9fWVsc2V7aWYoQT09PVwiY2VydGlmaWNhdGVQb2xpY2llc1wiKXt2YXIgbz10aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXMoKTtmb3IodmFyIHE9MDtxPG8ubGVuZ3RoO3ErKyl7aWYob1txXS5pZCE9PXVuZGVmaW5lZCl7Qis9XCIgICAgcG9saWN5IG9pZDogXCIrb1txXS5pZCtcIlxcblwifWlmKG9bcV0uY3BzIT09dW5kZWZpbmVkKXtCKz1cIiAgICBjcHM6IFwiK29bcV0uY3BzK1wiXFxuXCJ9fX19fX19fX19fX19Qis9XCJzaWduYXR1cmUgYWxnb3JpdGhtOiBcIit0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWUoKStcIlxcblwiO0IrPVwic2lnbmF0dXJlOiBcIit0aGlzLmdldFNpZ25hdHVyZVZhbHVlSGV4KCkuc3Vic3RyKDAsMTYpK1wiLi4uXFxuXCI7cmV0dXJuIEJ9fVg1MDkuaGV4MmRuPWZ1bmN0aW9uKGYsYil7aWYoYj09PXVuZGVmaW5lZCl7Yj0wfWlmKGYuc3Vic3RyKGIsMikhPT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgRE5cIn12YXIgYz1uZXcgQXJyYXkoKTt2YXIgZD1BU04xSEVYLmdldENoaWxkSWR4KGYsYik7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe2MucHVzaChYNTA5LmhleDJyZG4oZixkW2VdKSl9Yz1jLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKFwiL1wiLFwiXFxcXC9cIil9KTtyZXR1cm5cIi9cIitjLmpvaW4oXCIvXCIpfTtYNTA5LmhleDJyZG49ZnVuY3Rpb24oZixiKXtpZihiPT09dW5kZWZpbmVkKXtiPTB9aWYoZi5zdWJzdHIoYiwyKSE9PVwiMzFcIil7dGhyb3dcIm1hbGZvcm1lZCBSRE5cIn12YXIgYz1uZXcgQXJyYXkoKTt2YXIgZD1BU04xSEVYLmdldENoaWxkSWR4KGYsYik7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe2MucHVzaChYNTA5LmhleDJhdHRyVHlwZVZhbHVlKGYsZFtlXSkpfWM9Yy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShcIitcIixcIlxcXFwrXCIpfSk7cmV0dXJuIGMuam9pbihcIitcIil9O1g1MDkuaGV4MmF0dHJUeXBlVmFsdWU9ZnVuY3Rpb24oZCxpKXt2YXIgaj1BU04xSEVYO3ZhciBoPWouZ2V0VjtpZihpPT09dW5kZWZpbmVkKXtpPTB9aWYoZC5zdWJzdHIoaSwyKSE9PVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBhdHRyaWJ1dGUgdHlwZSBhbmQgdmFsdWVcIn12YXIgZz1qLmdldENoaWxkSWR4KGQsaSk7aWYoZy5sZW5ndGghPT0yfHxkLnN1YnN0cihnWzBdLDIpIT09XCIwNlwiKXtcIm1hbGZvcm1lZCBhdHRyaWJ1dGUgdHlwZSBhbmQgdmFsdWVcIn12YXIgYj1oKGQsZ1swXSk7dmFyIGY9S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50KGIpO3ZhciBlPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQyYXR5cGUoZik7dmFyIGE9aChkLGdbMV0pO3ZhciBjPWhleHRvcnN0cihhKTtyZXR1cm4gZStcIj1cIitjfTtYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4PWZ1bmN0aW9uKGIpe3ZhciBhPW5ldyBYNTA5KCk7YS5yZWFkQ2VydEhleChiKTtyZXR1cm4gYS5nZXRQdWJsaWNLZXkoKX07WDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydFBFTT1mdW5jdGlvbihiKXt2YXIgYT1uZXcgWDUwOSgpO2EucmVhZENlcnRQRU0oYik7cmV0dXJuIGEuZ2V0UHVibGljS2V5KCl9O1g1MDkuZ2V0UHVibGljS2V5SW5mb1Byb3BPZkNlcnRQRU09ZnVuY3Rpb24oYyl7dmFyIGU9QVNOMUhFWDt2YXIgZz1lLmdldFZieUxpc3Q7dmFyIGI9e307dmFyIGEsZixkO2IuYWxncGFyYW09bnVsbDthPW5ldyBYNTA5KCk7YS5yZWFkQ2VydFBFTShjKTtmPWEuZ2V0UHVibGljS2V5SGV4KCk7Yi5rZXloZXg9ZyhmLDAsWzFdLFwiMDNcIikuc3Vic3RyKDIpO2IuYWxnb2lkPWcoZiwwLFswLDBdLFwiMDZcIik7aWYoYi5hbGdvaWQ9PT1cIjJhODY0OGNlM2QwMjAxXCIpe2IuYWxncGFyYW09ZyhmLDAsWzAsMV0sXCIwNlwiKX1yZXR1cm4gYn07WDUwOS5LRVlVU0FHRV9OQU1FPVtcImRpZ2l0YWxTaWduYXR1cmVcIixcIm5vblJlcHVkaWF0aW9uXCIsXCJrZXlFbmNpcGhlcm1lbnRcIixcImRhdGFFbmNpcGhlcm1lbnRcIixcImtleUFncmVlbWVudFwiLFwia2V5Q2VydFNpZ25cIixcImNSTFNpZ25cIixcImVuY2lwaGVyT25seVwiLFwiZGVjaXBoZXJPbmx5XCJdO1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmp3cz09XCJ1bmRlZmluZWRcInx8IUtKVVIuandzKXtLSlVSLmp3cz17fX1LSlVSLmp3cy5KV1M9ZnVuY3Rpb24oKXt2YXIgYj1LSlVSLGE9Yi5qd3MuSldTLGM9YS5pc1NhZmVKU09OU3RyaW5nO3RoaXMucGFyc2VKV1M9ZnVuY3Rpb24oZyxqKXtpZigodGhpcy5wYXJzZWRKV1MhPT11bmRlZmluZWQpJiYoanx8KHRoaXMucGFyc2VkSldTLnNpZ3ZhbEghPT11bmRlZmluZWQpKSl7cmV0dXJufXZhciBpPWcubWF0Y2goL14oW14uXSspXFwuKFteLl0rKVxcLihbXi5dKykkLyk7aWYoaT09bnVsbCl7dGhyb3dcIkpXUyBzaWduYXR1cmUgaXMgbm90IGEgZm9ybSBvZiAnSGVhZC5QYXlsb2FkLlNpZ1ZhbHVlJy5cIn12YXIgaz1pWzFdO3ZhciBlPWlbMl07dmFyIGw9aVszXTt2YXIgbj1rK1wiLlwiK2U7dGhpcy5wYXJzZWRKV1M9e307dGhpcy5wYXJzZWRKV1MuaGVhZEI2NFU9azt0aGlzLnBhcnNlZEpXUy5wYXlsb2FkQjY0VT1lO3RoaXMucGFyc2VkSldTLnNpZ3ZhbEI2NFU9bDt0aGlzLnBhcnNlZEpXUy5zaT1uO2lmKCFqKXt2YXIgaD1iNjR1dG9oZXgobCk7dmFyIGY9cGFyc2VCaWdJbnQoaCwxNik7dGhpcy5wYXJzZWRKV1Muc2lndmFsSD1oO3RoaXMucGFyc2VkSldTLnNpZ3ZhbEJJPWZ9dmFyIGQ9YjY0dXRvdXRmOChrKTt2YXIgbT1iNjR1dG91dGY4KGUpO3RoaXMucGFyc2VkSldTLmhlYWRTPWQ7dGhpcy5wYXJzZWRKV1MucGF5bG9hZFM9bTtpZighYyhkLHRoaXMucGFyc2VkSldTLFwiaGVhZFBcIikpe3Rocm93XCJtYWxmb3JtZWQgSlNPTiBzdHJpbmcgZm9yIEpXUyBIZWFkOiBcIitkfX19O0tKVVIuandzLkpXUy5zaWduPWZ1bmN0aW9uKGksdix5LHosYSl7dmFyIHc9S0pVUixtPXcuandzLHE9bS5KV1MsZz1xLnJlYWRTYWZlSlNPTlN0cmluZyxwPXEuaXNTYWZlSlNPTlN0cmluZyxkPXcuY3J5cHRvLGs9ZC5FQ0RTQSxvPWQuTWFjLGM9ZC5TaWduYXR1cmUsdD1KU09OO3ZhciBzLGosbjtpZih0eXBlb2YgdiE9XCJzdHJpbmdcIiYmdHlwZW9mIHYhPVwib2JqZWN0XCIpe3Rocm93XCJzcEhlYWRlciBtdXN0IGJlIEpTT04gc3RyaW5nIG9yIG9iamVjdDogXCIrdn1pZih0eXBlb2Ygdj09XCJvYmplY3RcIil7aj12O3M9dC5zdHJpbmdpZnkoail9aWYodHlwZW9mIHY9PVwic3RyaW5nXCIpe3M9djtpZighcChzKSl7dGhyb3dcIkpXUyBIZWFkIGlzIG5vdCBzYWZlIEpTT04gc3RyaW5nOiBcIitzfWo9ZyhzKX1uPXk7aWYodHlwZW9mIHk9PVwib2JqZWN0XCIpe249dC5zdHJpbmdpZnkoeSl9aWYoKGk9PVwiXCJ8fGk9PW51bGwpJiZqLmFsZyE9PXVuZGVmaW5lZCl7aT1qLmFsZ31pZigoaSE9XCJcIiYmaSE9bnVsbCkmJmouYWxnPT09dW5kZWZpbmVkKXtqLmFsZz1pO3M9dC5zdHJpbmdpZnkoail9aWYoaSE9PWouYWxnKXt0aHJvd1wiYWxnIGFuZCBzSGVhZGVyLmFsZyBkb2Vzbid0IG1hdGNoOiBcIitpK1wiIT1cIitqLmFsZ312YXIgcj1udWxsO2lmKHEuandzYWxnMnNpZ2FsZ1tpXT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGFsZyBuYW1lOiBcIitpfWVsc2V7cj1xLmp3c2FsZzJzaWdhbGdbaV19dmFyIGU9dXRmOHRvYjY0dShzKTt2YXIgbD11dGY4dG9iNjR1KG4pO3ZhciBiPWUrXCIuXCIrbDt2YXIgeD1cIlwiO2lmKHIuc3Vic3RyKDAsNCk9PVwiSG1hY1wiKXtpZih6PT09dW5kZWZpbmVkKXt0aHJvd1wibWFjIGtleSBzaGFsbCBiZSBzcGVjaWZpZWQgZm9yIEhTKiBhbGdcIn12YXIgaD1uZXcgbyh7YWxnOnIscHJvdjpcImNyeXB0b2pzXCIscGFzczp6fSk7aC51cGRhdGVTdHJpbmcoYik7eD1oLmRvRmluYWwoKX1lbHNle2lmKHIuaW5kZXhPZihcIndpdGhFQ0RTQVwiKSE9LTEpe3ZhciBmPW5ldyBjKHthbGc6cn0pO2YuaW5pdCh6LGEpO2YudXBkYXRlU3RyaW5nKGIpO2hBU04xU2lnPWYuc2lnbigpO3g9S0pVUi5jcnlwdG8uRUNEU0EuYXNuMVNpZ1RvQ29uY2F0U2lnKGhBU04xU2lnKX1lbHNle2lmKHIhPVwibm9uZVwiKXt2YXIgZj1uZXcgYyh7YWxnOnJ9KTtmLmluaXQoeixhKTtmLnVwZGF0ZVN0cmluZyhiKTt4PWYuc2lnbigpfX19dmFyIHU9aGV4dG9iNjR1KHgpO3JldHVybiBiK1wiLlwiK3V9O0tKVVIuandzLkpXUy52ZXJpZnk9ZnVuY3Rpb24odyxCLG4pe3ZhciB4PUtKVVIscT14Lmp3cyx0PXEuSldTLGk9dC5yZWFkU2FmZUpTT05TdHJpbmcsZT14LmNyeXB0byxwPWUuRUNEU0Escz1lLk1hYyxkPWUuU2lnbmF0dXJlLG07aWYodHlwZW9mIFJTQUtleSE9PXVuZGVmaW5lZCl7bT1SU0FLZXl9dmFyIHk9dy5zcGxpdChcIi5cIik7aWYoeS5sZW5ndGghPT0zKXtyZXR1cm4gZmFsc2V9dmFyIGY9eVswXTt2YXIgcj15WzFdO3ZhciBjPWYrXCIuXCIrcjt2YXIgQT1iNjR1dG9oZXgoeVsyXSk7dmFyIGw9aShiNjR1dG91dGY4KHlbMF0pKTt2YXIgaz1udWxsO3ZhciB6PW51bGw7aWYobC5hbGc9PT11bmRlZmluZWQpe3Rocm93XCJhbGdvcml0aG0gbm90IHNwZWNpZmllZCBpbiBoZWFkZXJcIn1lbHNle2s9bC5hbGc7ej1rLnN1YnN0cigwLDIpfWlmKG4hPW51bGwmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PVwiW29iamVjdCBBcnJheV1cIiYmbi5sZW5ndGg+MCl7dmFyIGI9XCI6XCIrbi5qb2luKFwiOlwiKStcIjpcIjtpZihiLmluZGV4T2YoXCI6XCIraytcIjpcIik9PS0xKXt0aHJvd1wiYWxnb3JpdGhtICdcIitrK1wiJyBub3QgYWNjZXB0ZWQgaW4gdGhlIGxpc3RcIn19aWYoayE9XCJub25lXCImJkI9PT1udWxsKXt0aHJvd1wia2V5IHNoYWxsIGJlIHNwZWNpZmllZCB0byB2ZXJpZnkuXCJ9aWYodHlwZW9mIEI9PVwic3RyaW5nXCImJkIuaW5kZXhPZihcIi0tLS0tQkVHSU4gXCIpIT0tMSl7Qj1LRVlVVElMLmdldEtleShCKX1pZih6PT1cIlJTXCJ8fHo9PVwiUFNcIil7aWYoIShCIGluc3RhbmNlb2YgbSkpe3Rocm93XCJrZXkgc2hhbGwgYmUgYSBSU0FLZXkgb2JqIGZvciBSUyogYW5kIFBTKiBhbGdzXCJ9fWlmKHo9PVwiRVNcIil7aWYoIShCIGluc3RhbmNlb2YgcCkpe3Rocm93XCJrZXkgc2hhbGwgYmUgYSBFQ0RTQSBvYmogZm9yIEVTKiBhbGdzXCJ9fWlmKGs9PVwibm9uZVwiKXt9dmFyIHU9bnVsbDtpZih0Lmp3c2FsZzJzaWdhbGdbbC5hbGddPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgYWxnIG5hbWU6IFwiK2t9ZWxzZXt1PXQuandzYWxnMnNpZ2FsZ1trXX1pZih1PT1cIm5vbmVcIil7dGhyb3dcIm5vdCBzdXBwb3J0ZWRcIn1lbHNle2lmKHUuc3Vic3RyKDAsNCk9PVwiSG1hY1wiKXt2YXIgbz1udWxsO2lmKEI9PT11bmRlZmluZWQpe3Rocm93XCJoZXhhZGVjaW1hbCBrZXkgc2hhbGwgYmUgc3BlY2lmaWVkIGZvciBITUFDXCJ9dmFyIGo9bmV3IHMoe2FsZzp1LHBhc3M6Qn0pO2oudXBkYXRlU3RyaW5nKGMpO289ai5kb0ZpbmFsKCk7cmV0dXJuIEE9PW99ZWxzZXtpZih1LmluZGV4T2YoXCJ3aXRoRUNEU0FcIikhPS0xKXt2YXIgaD1udWxsO3RyeXtoPXAuY29uY2F0U2lnVG9BU04xU2lnKEEpfWNhdGNoKHYpe3JldHVybiBmYWxzZX12YXIgZz1uZXcgZCh7YWxnOnV9KTtnLmluaXQoQik7Zy51cGRhdGVTdHJpbmcoYyk7cmV0dXJuIGcudmVyaWZ5KGgpfWVsc2V7dmFyIGc9bmV3IGQoe2FsZzp1fSk7Zy5pbml0KEIpO2cudXBkYXRlU3RyaW5nKGMpO3JldHVybiBnLnZlcmlmeShBKX19fX07S0pVUi5qd3MuSldTLnBhcnNlPWZ1bmN0aW9uKGcpe3ZhciBjPWcuc3BsaXQoXCIuXCIpO3ZhciBiPXt9O3ZhciBmLGUsZDtpZihjLmxlbmd0aCE9MiYmYy5sZW5ndGghPTMpe3Rocm93XCJtYWxmb3JtZWQgc0pXUzogd3JvbmcgbnVtYmVyIG9mICcuJyBzcGxpdHRlZCBlbGVtZW50c1wifWY9Y1swXTtlPWNbMV07aWYoYy5sZW5ndGg9PTMpe2Q9Y1syXX1iLmhlYWRlck9iaj1LSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nKGI2NHV0b3V0ZjgoZikpO2IucGF5bG9hZE9iaj1LSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nKGI2NHV0b3V0ZjgoZSkpO2IuaGVhZGVyUFA9SlNPTi5zdHJpbmdpZnkoYi5oZWFkZXJPYmosbnVsbCxcIiAgXCIpO2lmKGIucGF5bG9hZE9iaj09bnVsbCl7Yi5wYXlsb2FkUFA9YjY0dXRvdXRmOChlKX1lbHNle2IucGF5bG9hZFBQPUpTT04uc3RyaW5naWZ5KGIucGF5bG9hZE9iaixudWxsLFwiICBcIil9aWYoZCE9PXVuZGVmaW5lZCl7Yi5zaWdIZXg9YjY0dXRvaGV4KGQpfXJldHVybiBifTtLSlVSLmp3cy5KV1MudmVyaWZ5SldUPWZ1bmN0aW9uKGUsbCxyKXt2YXIgZD1LSlVSLGo9ZC5qd3Msbz1qLkpXUyxuPW8ucmVhZFNhZmVKU09OU3RyaW5nLHA9by5pbkFycmF5LGY9by5pbmNsdWRlZEFycmF5O3ZhciBrPWUuc3BsaXQoXCIuXCIpO3ZhciBjPWtbMF07dmFyIGk9a1sxXTt2YXIgcT1jK1wiLlwiK2k7dmFyIG09YjY0dXRvaGV4KGtbMl0pO3ZhciBoPW4oYjY0dXRvdXRmOChjKSk7dmFyIGc9bihiNjR1dG91dGY4KGkpKTtpZihoLmFsZz09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlfWlmKHIuYWxnPT09dW5kZWZpbmVkKXt0aHJvd1wiYWNjZXB0RmllbGQuYWxnIHNoYWxsIGJlIHNwZWNpZmllZFwifWlmKCFwKGguYWxnLHIuYWxnKSl7cmV0dXJuIGZhbHNlfWlmKGcuaXNzIT09dW5kZWZpbmVkJiZ0eXBlb2Ygci5pc3M9PT1cIm9iamVjdFwiKXtpZighcChnLmlzcyxyLmlzcykpe3JldHVybiBmYWxzZX19aWYoZy5zdWIhPT11bmRlZmluZWQmJnR5cGVvZiByLnN1Yj09PVwib2JqZWN0XCIpe2lmKCFwKGcuc3ViLHIuc3ViKSl7cmV0dXJuIGZhbHNlfX1pZihnLmF1ZCE9PXVuZGVmaW5lZCYmdHlwZW9mIHIuYXVkPT09XCJvYmplY3RcIil7aWYodHlwZW9mIGcuYXVkPT1cInN0cmluZ1wiKXtpZighcChnLmF1ZCxyLmF1ZCkpe3JldHVybiBmYWxzZX19ZWxzZXtpZih0eXBlb2YgZy5hdWQ9PVwib2JqZWN0XCIpe2lmKCFmKGcuYXVkLHIuYXVkKSl7cmV0dXJuIGZhbHNlfX19fXZhciBiPWouSW50RGF0ZS5nZXROb3coKTtpZihyLnZlcmlmeUF0IT09dW5kZWZpbmVkJiZ0eXBlb2Ygci52ZXJpZnlBdD09PVwibnVtYmVyXCIpe2I9ci52ZXJpZnlBdH1pZihyLmdyYWNlUGVyaW9kPT09dW5kZWZpbmVkfHx0eXBlb2Ygci5ncmFjZVBlcmlvZCE9PVwibnVtYmVyXCIpe3IuZ3JhY2VQZXJpb2Q9MH1pZihnLmV4cCE9PXVuZGVmaW5lZCYmdHlwZW9mIGcuZXhwPT1cIm51bWJlclwiKXtpZihnLmV4cCtyLmdyYWNlUGVyaW9kPGIpe3JldHVybiBmYWxzZX19aWYoZy5uYmYhPT11bmRlZmluZWQmJnR5cGVvZiBnLm5iZj09XCJudW1iZXJcIil7aWYoYjxnLm5iZi1yLmdyYWNlUGVyaW9kKXtyZXR1cm4gZmFsc2V9fWlmKGcuaWF0IT09dW5kZWZpbmVkJiZ0eXBlb2YgZy5pYXQ9PVwibnVtYmVyXCIpe2lmKGI8Zy5pYXQtci5ncmFjZVBlcmlvZCl7cmV0dXJuIGZhbHNlfX1pZihnLmp0aSE9PXVuZGVmaW5lZCYmci5qdGkhPT11bmRlZmluZWQpe2lmKGcuanRpIT09ci5qdGkpe3JldHVybiBmYWxzZX19aWYoIW8udmVyaWZ5KGUsbCxyLmFsZykpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX07S0pVUi5qd3MuSldTLmluY2x1ZGVkQXJyYXk9ZnVuY3Rpb24oYixhKXt2YXIgYz1LSlVSLmp3cy5KV1MuaW5BcnJheTtpZihiPT09bnVsbCl7cmV0dXJuIGZhbHNlfWlmKHR5cGVvZiBiIT09XCJvYmplY3RcIil7cmV0dXJuIGZhbHNlfWlmKHR5cGVvZiBiLmxlbmd0aCE9PVwibnVtYmVyXCIpe3JldHVybiBmYWxzZX1mb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyl7aWYoIWMoYltkXSxhKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX07S0pVUi5qd3MuSldTLmluQXJyYXk9ZnVuY3Rpb24oZCxiKXtpZihiPT09bnVsbCl7cmV0dXJuIGZhbHNlfWlmKHR5cGVvZiBiIT09XCJvYmplY3RcIil7cmV0dXJuIGZhbHNlfWlmKHR5cGVvZiBiLmxlbmd0aCE9PVwibnVtYmVyXCIpe3JldHVybiBmYWxzZX1mb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7aWYoYltjXT09ZCl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX07S0pVUi5qd3MuSldTLmp3c2FsZzJzaWdhbGc9e0hTMjU2OlwiSG1hY1NIQTI1NlwiLEhTMzg0OlwiSG1hY1NIQTM4NFwiLEhTNTEyOlwiSG1hY1NIQTUxMlwiLFJTMjU2OlwiU0hBMjU2d2l0aFJTQVwiLFJTMzg0OlwiU0hBMzg0d2l0aFJTQVwiLFJTNTEyOlwiU0hBNTEyd2l0aFJTQVwiLEVTMjU2OlwiU0hBMjU2d2l0aEVDRFNBXCIsRVMzODQ6XCJTSEEzODR3aXRoRUNEU0FcIixQUzI1NjpcIlNIQTI1NndpdGhSU0FhbmRNR0YxXCIsUFMzODQ6XCJTSEEzODR3aXRoUlNBYW5kTUdGMVwiLFBTNTEyOlwiU0hBNTEyd2l0aFJTQWFuZE1HRjFcIixub25lOlwibm9uZVwiLH07S0pVUi5qd3MuSldTLmlzU2FmZUpTT05TdHJpbmc9ZnVuY3Rpb24oYyxiLGQpe3ZhciBlPW51bGw7dHJ5e2U9anNvblBhcnNlKGMpO2lmKHR5cGVvZiBlIT1cIm9iamVjdFwiKXtyZXR1cm4gMH1pZihlLmNvbnN0cnVjdG9yPT09QXJyYXkpe3JldHVybiAwfWlmKGIpe2JbZF09ZX1yZXR1cm4gMX1jYXRjaChhKXtyZXR1cm4gMH19O0tKVVIuandzLkpXUy5yZWFkU2FmZUpTT05TdHJpbmc9ZnVuY3Rpb24oYil7dmFyIGM9bnVsbDt0cnl7Yz1qc29uUGFyc2UoYik7aWYodHlwZW9mIGMhPVwib2JqZWN0XCIpe3JldHVybiBudWxsfWlmKGMuY29uc3RydWN0b3I9PT1BcnJheSl7cmV0dXJuIG51bGx9cmV0dXJuIGN9Y2F0Y2goYSl7cmV0dXJuIG51bGx9fTtLSlVSLmp3cy5KV1MuZ2V0RW5jb2RlZFNpZ25hdHVyZVZhbHVlRnJvbUpXUz1mdW5jdGlvbihiKXt2YXIgYT1iLm1hdGNoKC9eW14uXStcXC5bXi5dK1xcLihbXi5dKykkLyk7aWYoYT09bnVsbCl7dGhyb3dcIkpXUyBzaWduYXR1cmUgaXMgbm90IGEgZm9ybSBvZiAnSGVhZC5QYXlsb2FkLlNpZ1ZhbHVlJy5cIn1yZXR1cm4gYVsxXX07S0pVUi5qd3MuSldTLmdldEpXS3RodW1icHJpbnQ9ZnVuY3Rpb24oZCl7aWYoZC5rdHkhPT1cIlJTQVwiJiZkLmt0eSE9PVwiRUNcIiYmZC5rdHkhPT1cIm9jdFwiKXt0aHJvd1widW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBKV0sgVGh1bXByaW50XCJ9dmFyIGE9XCJ7XCI7aWYoZC5rdHk9PT1cIlJTQVwiKXtpZih0eXBlb2YgZC5uIT1cInN0cmluZ1wifHx0eXBlb2YgZC5lIT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgbiBhbmQgZSB2YWx1ZSBmb3IgUlNBIGtleVwifWErPSdcImVcIjpcIicrZC5lKydcIiwnO2ErPSdcImt0eVwiOlwiJytkLmt0eSsnXCIsJzthKz0nXCJuXCI6XCInK2QubisnXCJ9J31lbHNle2lmKGQua3R5PT09XCJFQ1wiKXtpZih0eXBlb2YgZC5jcnYhPVwic3RyaW5nXCJ8fHR5cGVvZiBkLnghPVwic3RyaW5nXCJ8fHR5cGVvZiBkLnkhPVwic3RyaW5nXCIpe3Rocm93XCJ3cm9uZyBjcnYsIHggYW5kIHkgdmFsdWUgZm9yIEVDIGtleVwifWErPSdcImNydlwiOlwiJytkLmNydisnXCIsJzthKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wieFwiOlwiJytkLngrJ1wiLCc7YSs9J1wieVwiOlwiJytkLnkrJ1wifSd9ZWxzZXtpZihkLmt0eT09PVwib2N0XCIpe2lmKHR5cGVvZiBkLmshPVwic3RyaW5nXCIpe3Rocm93XCJ3cm9uZyBrIHZhbHVlIGZvciBvY3Qoc3ltbWV0cmljKSBrZXlcIn1hKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wia1wiOlwiJytkLmsrJ1wifSd9fX12YXIgYj1yc3RydG9oZXgoYSk7dmFyIGM9S0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGIsXCJzaGEyNTZcIik7dmFyIGU9aGV4dG9iNjR1KGMpO3JldHVybiBlfTtLSlVSLmp3cy5JbnREYXRlPXt9O0tKVVIuandzLkludERhdGUuZ2V0PWZ1bmN0aW9uKGMpe3ZhciBiPUtKVVIuandzLkludERhdGUsZD1iLmdldE5vdyxhPWIuZ2V0WnVsdTtpZihjPT1cIm5vd1wiKXtyZXR1cm4gZCgpfWVsc2V7aWYoYz09XCJub3cgKyAxaG91clwiKXtyZXR1cm4gZCgpKzYwKjYwfWVsc2V7aWYoYz09XCJub3cgKyAxZGF5XCIpe3JldHVybiBkKCkrNjAqNjAqMjR9ZWxzZXtpZihjPT1cIm5vdyArIDFtb250aFwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0KjMwfWVsc2V7aWYoYz09XCJub3cgKyAxeWVhclwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0KjM2NX1lbHNle2lmKGMubWF0Y2goL1okLykpe3JldHVybiBhKGMpfWVsc2V7aWYoYy5tYXRjaCgvXlswLTldKyQvKSl7cmV0dXJuIHBhcnNlSW50KGMpfX19fX19fXRocm93XCJ1bnN1cHBvcnRlZCBmb3JtYXQ6IFwiK2N9O0tKVVIuandzLkludERhdGUuZ2V0WnVsdT1mdW5jdGlvbihhKXtyZXR1cm4genVsdXRvc2VjKGEpfTtLSlVSLmp3cy5JbnREYXRlLmdldE5vdz1mdW5jdGlvbigpe3ZhciBhPX5+KG5ldyBEYXRlKCkvMTAwMCk7cmV0dXJuIGF9O0tKVVIuandzLkludERhdGUuaW50RGF0ZTJVVENTdHJpbmc9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IERhdGUoYSoxMDAwKTtyZXR1cm4gYi50b1VUQ1N0cmluZygpfTtLSlVSLmp3cy5JbnREYXRlLmludERhdGUyWnVsdT1mdW5jdGlvbihlKXt2YXIgaT1uZXcgRGF0ZShlKjEwMDApLGg9KFwiMDAwMFwiK2kuZ2V0VVRDRnVsbFllYXIoKSkuc2xpY2UoLTQpLGc9KFwiMDBcIisoaS5nZXRVVENNb250aCgpKzEpKS5zbGljZSgtMiksYj0oXCIwMFwiK2kuZ2V0VVRDRGF0ZSgpKS5zbGljZSgtMiksYT0oXCIwMFwiK2kuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpLGM9KFwiMDBcIitpLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpLGY9KFwiMDBcIitpLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpO3JldHVybiBoK2crYithK2MrZitcIlpcIn07XG5leHBvcnQgeyBTZWN1cmVSYW5kb20gfTtcclxuZXhwb3J0IHsgcm5nX3NlZWRfdGltZSB9O1xyXG5cclxuZXhwb3J0IHsgQmlnSW50ZWdlciB9O1xyXG5leHBvcnQgeyBSU0FLZXkgfTtcclxuZXhwb3J0IGNvbnN0IHsgRURTQSB9ID0gS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IERTQSB9ID0gS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IFNpZ25hdHVyZSB9ID0gS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IE1lc3NhZ2VEaWdlc3QgfSA9ICBLSlVSLmNyeXB0bztcclxuZXhwb3J0IGNvbnN0IHsgTWFjIH0gPSBLSlVSLmNyeXB0bztcclxuZXhwb3J0IGNvbnN0IHsgQ2lwaGVyIH0gPSAgS0pVUi5jcnlwdG87XHJcbmV4cG9ydCB7IEtFWVVUSUwgfTtcclxuZXhwb3J0IHsgQVNOMUhFWCB9O1xyXG5leHBvcnQgeyBYNTA5IH07XHJcbmV4cG9ydCB7IENyeXB0b0pTIH07XHJcblxyXG4vLyBleHQvYmFzZTY0LmpzXHJcbmV4cG9ydCB7IGI2NHRvaGV4IH07XHJcbmV4cG9ydCB7IGI2NHRvQkEgfTtcclxuXHJcbi8vIGJhc2U2NHguanNcclxuZXhwb3J0IHsgc3RvQkEgfTtcclxuZXhwb3J0IHsgQkF0b3MgfTtcclxuZXhwb3J0IHsgQkF0b2hleCB9O1xyXG5leHBvcnQgeyBzdG9oZXggfTtcclxuZXhwb3J0IHsgc3RvYjY0IH07XHJcbmV4cG9ydCB7IHN0b2I2NHUgfTtcclxuZXhwb3J0IHsgYjY0dXRvcyB9O1xyXG5leHBvcnQgeyBiNjR0b2I2NHUgfTtcclxuZXhwb3J0IHsgYjY0dXRvYjY0IH07XHJcbmV4cG9ydCB7IGhleDJiNjQgfTtcclxuZXhwb3J0IHsgaGV4dG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b2hleCB9O1xyXG5leHBvcnQgeyB1dGY4dG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b3V0ZjggfTtcclxuZXhwb3J0IHsgdXRmOHRvYjY0IH07XHJcbmV4cG9ydCB7IGI2NHRvdXRmOCB9O1xyXG5leHBvcnQgeyB1dGY4dG9oZXggfTtcclxuZXhwb3J0IHsgaGV4dG91dGY4IH07XHJcbmV4cG9ydCB7IGhleHRvcnN0ciB9O1xyXG5leHBvcnQgeyByc3RydG9oZXggfTtcclxuZXhwb3J0IHsgaGV4dG9iNjQgfTtcclxuZXhwb3J0IHsgaGV4dG9iNjRubCB9O1xyXG5leHBvcnQgeyBiNjRubHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvcGVtIH07XHJcbmV4cG9ydCB7IHBlbXRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvQXJyYXlCdWZmZXIgfTtcclxuZXhwb3J0IHsgQXJyYXlCdWZmZXJ0b2hleCB9O1xyXG5leHBvcnQgeyB6dWx1dG9tc2VjIH07XHJcbmV4cG9ydCB7IHp1bHV0b3NlYyB9O1xyXG5leHBvcnQgeyB6dWx1dG9kYXRlIH07XHJcbmV4cG9ydCB7IGRhdGV0b3p1bHUgfTtcclxuZXhwb3J0IHsgdXJpY21wdG9oZXggfTtcclxuZXhwb3J0IHsgaGV4dG91cmljbXAgfTtcclxuZXhwb3J0IHsgaXB2NnRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvaXB2NiB9O1xyXG5leHBvcnQgeyBoZXh0b2lwIH07XHJcbmV4cG9ydCB7IGlwdG9oZXggfTtcclxuZXhwb3J0IHsgZW5jb2RlVVJJQ29tcG9uZW50QWxsIH07XHJcbmV4cG9ydCB7IG5ld2xpbmVfdG9Vbml4IH07XHJcbmV4cG9ydCB7IG5ld2xpbmVfdG9Eb3MgfTtcclxuZXhwb3J0IHsgaGV4dG9wb3NoZXggfTtcclxuZXhwb3J0IHsgaW50YXJ5c3RydG9oZXggfTtcclxuZXhwb3J0IHsgc3RyZGlmZmlkeCB9O1xyXG5cclxuLy8gbmFtZSBzcGFjZXNcclxuZXhwb3J0IHsgS0pVUiB9O1xyXG5jb25zdCBfY3J5cHRvID0gIEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgeyBfY3J5cHRvIGFzIGNyeXB0byB9O1xyXG5leHBvcnQgY29uc3QgeyBhc24xIH0gPSBLSlVSO1xyXG5leHBvcnQgY29uc3QgeyBqd3MgfSA9IEtKVVI7XHJcbmV4cG9ydCBjb25zdCB7IGxhbmcgfSA9IEtKVVI7XHJcblxyXG5cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL3NoaW1cIik7XG5cbnJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWVcIik7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGVcIik7XG5cbmlmIChnbG9iYWwuX2JhYmVsUG9seWZpbGwpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgaW5zdGFuY2Ugb2YgYmFiZWwtcG9seWZpbGwgaXMgYWxsb3dlZFwiKTtcbn1cbmdsb2JhbC5fYmFiZWxQb2x5ZmlsbCA9IHRydWU7XG5cbnZhciBERUZJTkVfUFJPUEVSVFkgPSBcImRlZmluZVByb3BlcnR5XCI7XG5mdW5jdGlvbiBkZWZpbmUoTywga2V5LCB2YWx1ZSkge1xuICBPW2tleV0gfHwgT2JqZWN0W0RFRklORV9QUk9QRVJUWV0oTywga2V5LCB7XG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkTGVmdFwiLCBcIlwiLnBhZFN0YXJ0KTtcbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZFJpZ2h0XCIsIFwiXCIucGFkRW5kKTtcblxuXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzLGluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXMsam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIi5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIFtdW2tleV0gJiYgZGVmaW5lKEFycmF5LCBrZXksIEZ1bmN0aW9uLmNhbGwuYmluZChbXVtrZXldKSk7XG59KTsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsoXG4gICAgICB1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpXG4gICAgKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbi8qXG4gKiBFeHBvcnQga01heExlbmd0aCBhZnRlciB0eXBlZCBhcnJheSBzdXBwb3J0IGlzIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydHMua01heExlbmd0aCA9IGtNYXhMZW5ndGgoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKGtNYXhMZW5ndGgoKSA8IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgaWYgKHRoYXQgPT09IG51bGwpIHtcbiAgICAgIHRoYXQgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgICB9XG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmICEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKHRoaXMsIGFyZylcbiAgfVxuICByZXR1cm4gZnJvbSh0aGlzLCBhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbi8vIFRPRE86IExlZ2FjeSwgbm90IG5lZWRlZCBhbnltb3JlLiBSZW1vdmUgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLlxuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICByZXR1cm4gZnJvbU9iamVjdCh0aGF0LCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbShudWxsLCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICAgIC8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHRoYXQsIHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKG51bGwsIHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAodGhhdCwgc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nICh0aGF0LCBzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgdGhhdCA9IHRoYXQuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBhcnJheS5ieXRlTGVuZ3RoIC8vIHRoaXMgdGhyb3dzIGlmIGBhcnJheWAgaXMgbm90IGEgdmFsaWQgQXJyYXlCdWZmZXJcblxuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IGFycmF5XG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tQXJyYXlMaWtlKHRoYXQsIGFycmF5KVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbilcblxuICAgIGlmICh0aGF0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoYXRcbiAgICB9XG5cbiAgICBvYmouY29weSh0aGF0LCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIHRoYXRcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgb2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgaXNuYW4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCAwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwga01heExlbmd0aCgpYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGUgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCBhbmQgYGlzLWJ1ZmZlcmAgKGluIFNhZmFyaSA1LTcpIHRvIGRldGVjdFxuLy8gQnVmZmVyIGluc3RhbmNlcy5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKGlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggfCAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgLy8gbGVnYWN5IHdyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKSAtIHJlbW92ZSBpbiB2MC4xM1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gICAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyArK2kpIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdXRmOFRvQnl0ZXMobmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBpc25hbiAodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHZhbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjQnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gIGlmIChpbmRleCBpbiBvYmplY3QpICRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59O1xuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ2V0VGltZSA9IERhdGUucHJvdG90eXBlLmdldFRpbWU7XG52YXIgJHRvSVNPU3RyaW5nID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBseiA9IGZ1bmN0aW9uIChudW0pIHtcbiAgcmV0dXJuIG51bSA+IDkgPyBudW0gOiAnMCcgKyBudW07XG59O1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbm1vZHVsZS5leHBvcnRzID0gKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKC01ZTEzIC0gMSkpICE9ICcwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVonO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoTmFOKSk7XG59KSkgPyBmdW5jdGlvbiB0b0lTT1N0cmluZygpIHtcbiAgaWYgKCFpc0Zpbml0ZShnZXRUaW1lLmNhbGwodGhpcykpKSB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgdmFyIGQgPSB0aGlzO1xuICB2YXIgeSA9IGQuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIG0gPSBkLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICB2YXIgcyA9IHkgPCAwID8gJy0nIDogeSA+IDk5OTkgPyAnKycgOiAnJztcbiAgcmV0dXJuIHMgKyAoJzAwMDAwJyArIE1hdGguYWJzKHkpKS5zbGljZShzID8gLTYgOiAtNCkgK1xuICAgICctJyArIGx6KGQuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICsgbHooZC5nZXRVVENEYXRlKCkpICtcbiAgICAnVCcgKyBseihkLmdldFVUQ0hvdXJzKCkpICsgJzonICsgbHooZC5nZXRVVENNaW51dGVzKCkpICtcbiAgICAnOicgKyBseihkLmdldFVUQ1NlY29uZHMoKSkgKyAnLicgKyAobSA+IDk5ID8gbSA6ICcwJyArIGx6KG0pKSArICdaJztcbn0gOiAkdG9JU09TdHJpbmc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIE5VTUJFUiA9ICdudW1iZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGlmIChoaW50ICE9PSAnc3RyaW5nJyAmJiBoaW50ICE9PSBOVU1CRVIgJiYgaGludCAhPT0gJ2RlZmF1bHQnKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBoaW50Jyk7XG4gIHJldHVybiB0b1ByaW1pdGl2ZShhbk9iamVjdCh0aGlzKSwgaGludCAhPSBOVU1CRVIpO1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwidmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1GbGF0dGVuSW50b0FycmF5XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG5mdW5jdGlvbiBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gY3R4KG1hcHBlciwgdGhpc0FyZywgMykgOiBmYWxzZTtcbiAgdmFyIGVsZW1lbnQsIHNwcmVhZGFibGU7XG5cbiAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc291cmNlTGVuKSB7XG4gICAgaWYgKHNvdXJjZUluZGV4IGluIHNvdXJjZSkge1xuICAgICAgZWxlbWVudCA9IG1hcEZuID8gbWFwRm4oc291cmNlW3NvdXJjZUluZGV4XSwgc291cmNlSW5kZXgsIG9yaWdpbmFsKSA6IHNvdXJjZVtzb3VyY2VJbmRleF07XG5cbiAgICAgIHNwcmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmIChpc09iamVjdChlbGVtZW50KSkge1xuICAgICAgICBzcHJlYWRhYmxlID0gZWxlbWVudFtJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gICAgICAgIHNwcmVhZGFibGUgPSBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3ByZWFkYWJsZSAmJiBkZXB0aCA+IDApIHtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIGVsZW1lbnQsIHRvTGVuZ3RoKGVsZW1lbnQubGVuZ3RoKSwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4ID49IDB4MWZmZmZmZmZmZmZmZmYpIHRocm93IFR5cGVFcnJvcigpO1xuICAgICAgICB0YXJnZXRbdGFyZ2V0SW5kZXhdID0gZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgc291cmNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gdGFyZ2V0SW5kZXg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyIHNpZ24gPSByZXF1aXJlKCcuL19tYXRoLXNpZ24nKTtcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBFUFNJTE9OID0gcG93KDIsIC01Mik7XG52YXIgRVBTSUxPTjMyID0gcG93KDIsIC0yMyk7XG52YXIgTUFYMzIgPSBwb3coMiwgMTI3KSAqICgyIC0gRVBTSUxPTjMyKTtcbnZhciBNSU4zMiA9IHBvdygyLCAtMTI2KTtcblxudmFyIHJvdW5kVGllc1RvRXZlbiA9IGZ1bmN0aW9uIChuKSB7XG4gIHJldHVybiBuICsgMSAvIEVQU0lMT04gLSAxIC8gRVBTSUxPTjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5mcm91bmQgfHwgZnVuY3Rpb24gZnJvdW5kKHgpIHtcbiAgdmFyICRhYnMgPSBNYXRoLmFicyh4KTtcbiAgdmFyICRzaWduID0gc2lnbih4KTtcbiAgdmFyIGEsIHJlc3VsdDtcbiAgaWYgKCRhYnMgPCBNSU4zMikgcmV0dXJuICRzaWduICogcm91bmRUaWVzVG9FdmVuKCRhYnMgLyBNSU4zMiAvIEVQU0lMT04zMikgKiBNSU4zMiAqIEVQU0lMT04zMjtcbiAgYSA9ICgxICsgRVBTSUxPTjMyIC8gRVBTSUxPTikgKiAkYWJzO1xuICByZXN1bHQgPSBhIC0gKGEgLSAkYWJzKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAocmVzdWx0ID4gTUFYMzIgfHwgcmVzdWx0ICE9IHJlc3VsdCkgcmV0dXJuICRzaWduICogSW5maW5pdHk7XG4gIHJldHVybiAkc2lnbiAqIHJlc3VsdDtcbn07XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmxvZzFwIHx8IGZ1bmN0aW9uIGxvZzFwKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID4gLTFlLTggJiYgeCA8IDFlLTggPyB4IC0geCAqIHggLyAyIDogTWF0aC5sb2coMSArIHgpO1xufTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zY2FsZSB8fCBmdW5jdGlvbiBzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgaWYgKFxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDBcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IHggIT0geFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5Mb3cgIT0gaW5Mb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluSGlnaCAhPSBpbkhpZ2hcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IG91dExvdyAhPSBvdXRMb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IG91dEhpZ2ggIT0gb3V0SGlnaFxuICApIHJldHVybiBOYU47XG4gIGlmICh4ID09PSBJbmZpbml0eSB8fCB4ID09PSAtSW5maW5pdHkpIHJldHVybiB4O1xuICByZXR1cm4gKHggLSBpbkxvdykgKiAob3V0SGlnaCAtIG91dExvdykgLyAoaW5IaWdoIC0gaW5Mb3cpICsgb3V0TG93O1xufTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iLCJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iLCJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikgaWYgKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpIFRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEZvcmNlZCByZXBsYWNlbWVudCBwcm90b3R5cGUgYWNjZXNzb3JzIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fbGlicmFyeScpIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEsgPSBNYXRoLnJhbmRvbSgpO1xuICAvLyBJbiBGRiB0aHJvd3Mgb25seSBkZWZpbmUgbWV0aG9kc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYsIG5vLXVzZWxlc3MtY2FsbFxuICBfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCwgSywgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgZGVsZXRlIHJlcXVpcmUoJy4vX2dsb2JhbCcpW0tdO1xufSk7XG4iLCJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iLCJ2YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChPLCBrZXkgPSBrZXlzW2krK10pKSB7XG4gICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIiwiLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgUmVmbGVjdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlZmxlY3QgJiYgUmVmbGVjdC5vd25LZXlzIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnT1BOLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHJldHVybiBnZXRTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUZsb2F0O1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xuXG5tb2R1bGUuZXhwb3J0cyA9IDEgLyAkcGFyc2VGbG9hdChyZXF1aXJlKCcuL19zdHJpbmctd3MnKSArICctMCcpICE9PSAtSW5maW5pdHkgPyBmdW5jdGlvbiBwYXJzZUZsb2F0KHN0cikge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICB2YXIgcmVzdWx0ID0gJHBhcnNlRmxvYXQoc3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiBzdHJpbmcuY2hhckF0KDApID09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuIiwidmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlSW50O1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgaGV4ID0gL15bLStdPzBbeFhdLztcblxubW9kdWxlLmV4cG9ydHMgPSAkcGFyc2VJbnQod3MgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod3MgKyAnMHgxNicpICE9PSAyMiA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0ciwgcmFkaXgpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgcmV0dXJuICRwYXJzZUludChzdHJpbmcsIChyYWRpeCA+Pj4gMCkgfHwgKGhleC50ZXN0KHN0cmluZykgPyAxNiA6IDEwKSk7XG59IDogJHBhcnNlSW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgc2FmZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlZ0V4cCwgcmVwbGFjZSkge1xuICB2YXIgcmVwbGFjZXIgPSByZXBsYWNlID09PSBPYmplY3QocmVwbGFjZSkgPyBmdW5jdGlvbiAocGFydCkge1xuICAgIHJldHVybiByZXBsYWNlW3BhcnRdO1xuICB9IDogcmVwbGFjZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBTdHJpbmcoaXQpLnJlcGxhY2UocmVnRXhwLCByZXBsYWNlcik7XG4gIH07XG59O1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsIi8vIGhlbHBlciBmb3IgU3RyaW5nI3tzdGFydHNXaXRoLCBlbmRzV2l0aCwgaW5jbHVkZXN9XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBzZWFyY2hTdHJpbmcsIE5BTUUpIHtcbiAgaWYgKGlzUmVnRXhwKHNlYXJjaFN0cmluZykpIHRocm93IFR5cGVFcnJvcignU3RyaW5nIycgKyBOQU1FICsgXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO1xuICByZXR1cm4gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgcXVvdCA9IC9cIi9nO1xuLy8gQi4yLjMuMi4xIENyZWF0ZUhUTUwoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpXG52YXIgY3JlYXRlSFRNTCA9IGZ1bmN0aW9uIChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIFN0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCBleGVjKSB7XG4gIHZhciBPID0ge307XG4gIE9bTkFNRV0gPSBleGVjKGNyZWF0ZUhUTUwpO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KSwgJ1N0cmluZycsIE8pO1xufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSAnXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDMnICtcbiAgJ1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2luZGV4XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHZhciBudW1iZXIgPSB0b0ludGVnZXIoaXQpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgobnVtYmVyKTtcbiAgaWYgKG51bWJlciAhPT0gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBsZW5ndGghJyk7XG4gIHJldHVybiBsZW5ndGg7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpKSB7XG4gIHZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xuICB2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG4gIHZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG4gIHZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4gIHZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xuICB2YXIgJGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xuICB2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG4gIHZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbiAgdmFyIHByb3BlcnR5RGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbiAgdmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG4gIHZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xuICB2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xuICB2YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbiAgdmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xuICB2YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbiAgdmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbiAgdmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG4gIHZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuICB2YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbiAgdmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xuICB2YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xuICB2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG4gIHZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xuICB2YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbiAgdmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xuICB2YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4gIHZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbiAgdmFyIGNyZWF0ZUFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpO1xuICB2YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuICB2YXIgQXJyYXlJdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xuICB2YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG4gIHZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG4gIHZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbiAgdmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbiAgdmFyIGFycmF5Q29weVdpdGhpbiA9IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJyk7XG4gIHZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbiAgdmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbiAgdmFyIGRQID0gJERQLmY7XG4gIHZhciBnT1BEID0gJEdPUEQuZjtcbiAgdmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbiAgdmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG4gIHZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG4gIHZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuICB2YXIgU0hBUkVEX0JVRkZFUiA9ICdTaGFyZWQnICsgQVJSQVlfQlVGRkVSO1xuICB2YXIgQllURVNfUEVSX0VMRU1FTlQgPSAnQllURVNfUEVSX0VMRU1FTlQnO1xuICB2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXlbUFJPVE9UWVBFXTtcbiAgdmFyICRBcnJheUJ1ZmZlciA9ICRidWZmZXIuQXJyYXlCdWZmZXI7XG4gIHZhciAkRGF0YVZpZXcgPSAkYnVmZmVyLkRhdGFWaWV3O1xuICB2YXIgYXJyYXlGb3JFYWNoID0gY3JlYXRlQXJyYXlNZXRob2QoMCk7XG4gIHZhciBhcnJheUZpbHRlciA9IGNyZWF0ZUFycmF5TWV0aG9kKDIpO1xuICB2YXIgYXJyYXlTb21lID0gY3JlYXRlQXJyYXlNZXRob2QoMyk7XG4gIHZhciBhcnJheUV2ZXJ5ID0gY3JlYXRlQXJyYXlNZXRob2QoNCk7XG4gIHZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbiAgdmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG4gIHZhciBhcnJheUluY2x1ZGVzID0gY3JlYXRlQXJyYXlJbmNsdWRlcyh0cnVlKTtcbiAgdmFyIGFycmF5SW5kZXhPZiA9IGNyZWF0ZUFycmF5SW5jbHVkZXMoZmFsc2UpO1xuICB2YXIgYXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9ycy52YWx1ZXM7XG4gIHZhciBhcnJheUtleXMgPSBBcnJheUl0ZXJhdG9ycy5rZXlzO1xuICB2YXIgYXJyYXlFbnRyaWVzID0gQXJyYXlJdGVyYXRvcnMuZW50cmllcztcbiAgdmFyIGFycmF5TGFzdEluZGV4T2YgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mO1xuICB2YXIgYXJyYXlSZWR1Y2UgPSBBcnJheVByb3RvLnJlZHVjZTtcbiAgdmFyIGFycmF5UmVkdWNlUmlnaHQgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0O1xuICB2YXIgYXJyYXlKb2luID0gQXJyYXlQcm90by5qb2luO1xuICB2YXIgYXJyYXlTb3J0ID0gQXJyYXlQcm90by5zb3J0O1xuICB2YXIgYXJyYXlTbGljZSA9IEFycmF5UHJvdG8uc2xpY2U7XG4gIHZhciBhcnJheVRvU3RyaW5nID0gQXJyYXlQcm90by50b1N0cmluZztcbiAgdmFyIGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBBcnJheVByb3RvLnRvTG9jYWxlU3RyaW5nO1xuICB2YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG4gIHZhciBUQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG4gIHZhciBUWVBFRF9DT05TVFJVQ1RPUiA9IHVpZCgndHlwZWRfY29uc3RydWN0b3InKTtcbiAgdmFyIERFRl9DT05TVFJVQ1RPUiA9IHVpZCgnZGVmX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBBTExfQ09OU1RSVUNUT1JTID0gJHR5cGVkLkNPTlNUUjtcbiAgdmFyIFRZUEVEX0FSUkFZID0gJHR5cGVkLlRZUEVEO1xuICB2YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xuICB2YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xuXG4gIHZhciAkbWFwID0gY3JlYXRlQXJyYXlNZXRob2QoMSwgZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICAgIHJldHVybiBhbGxvY2F0ZShzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGVuZ3RoKTtcbiAgfSk7XG5cbiAgdmFyIExJVFRMRV9FTkRJQU4gPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG5ldyBVaW50MTZBcnJheShbMV0pLmJ1ZmZlcilbMF0gPT09IDE7XG4gIH0pO1xuXG4gIHZhciBGT1JDRURfU0VUID0gISFVaW50OEFycmF5ICYmICEhVWludDhBcnJheVtQUk9UT1RZUEVdLnNldCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IFVpbnQ4QXJyYXkoMSkuc2V0KHt9KTtcbiAgfSk7XG5cbiAgdmFyIHRvT2Zmc2V0ID0gZnVuY3Rpb24gKGl0LCBCWVRFUykge1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoaXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfTtcblxuICB2YXIgdmFsaWRhdGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICBpZiAoaXNPYmplY3QoaXQpICYmIFRZUEVEX0FSUkFZIGluIGl0KSByZXR1cm4gaXQ7XG4gICAgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSB0eXBlZCBhcnJheSEnKTtcbiAgfTtcblxuICB2YXIgYWxsb2NhdGUgPSBmdW5jdGlvbiAoQywgbGVuZ3RoKSB7XG4gICAgaWYgKCEoaXNPYmplY3QoQykgJiYgVFlQRURfQ09OU1RSVUNUT1IgaW4gQykpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSXQgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IhJyk7XG4gICAgfSByZXR1cm4gbmV3IEMobGVuZ3RoKTtcbiAgfTtcblxuICB2YXIgc3BlY2llc0Zyb21MaXN0ID0gZnVuY3Rpb24gKE8sIGxpc3QpIHtcbiAgICByZXR1cm4gZnJvbUxpc3Qoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxpc3QpO1xuICB9O1xuXG4gIHZhciBmcm9tTGlzdCA9IGZ1bmN0aW9uIChDLCBsaXN0KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKEMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoaXQsIGtleSwgaW50ZXJuYWwpIHtcbiAgICBkUChpdCwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZFtpbnRlcm5hbF07IH0gfSk7XG4gIH07XG5cbiAgdmFyICRmcm9tID0gZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBmbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3Qoc291cmNlKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGksIGxlbmd0aCwgdmFsdWVzLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICFpc0FycmF5SXRlcihpdGVyRm4pKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHZhbHVlcyA9IFtdLCBpID0gMDsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpKyspIHtcbiAgICAgICAgdmFsdWVzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgICB9IE8gPSB2YWx1ZXM7XG4gICAgfVxuICAgIGlmIChtYXBwaW5nICYmIGFMZW4gPiAyKSBtYXBmbiA9IGN0eChtYXBmbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCksIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7IGxlbmd0aCA+IGk7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gbWFwcGluZyA/IG1hcGZuKE9baV0sIGkpIDogT1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgJG9mID0gZnVuY3Rpb24gb2YoLyogLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIGlPUyBTYWZhcmkgNi54IGZhaWxzIGhlcmVcbiAgdmFyIFRPX0xPQ0FMRV9CVUcgPSAhIVVpbnQ4QXJyYXkgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvTG9jYWxlU3RyaW5nLmNhbGwobmV3IFVpbnQ4QXJyYXkoMSkpOyB9KTtcblxuICB2YXIgJHRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9Mb2NhbGVTdHJpbmcoKSB7XG4gICAgcmV0dXJuIGFycmF5VG9Mb2NhbGVTdHJpbmcuYXBwbHkoVE9fTE9DQUxFX0JVRyA/IGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSkgOiB2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgfTtcblxuICB2YXIgcHJvdG8gPSB7XG4gICAgY29weVdpdGhpbjogZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0IC8qICwgZW5kICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlDb3B5V2l0aGluLmNhbGwodmFsaWRhdGUodGhpcyksIHRhcmdldCwgc3RhcnQsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RXZlcnkodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbGw6IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCwgZW5kICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUZpbGwuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheUZpbHRlcih2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbixcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpKTtcbiAgICB9LFxuICAgIGZpbmQ6IGZ1bmN0aW9uIGZpbmQocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kSW5kZXgodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgYXJyYXlGb3JFYWNoKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluZGV4T2YodmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmNsdWRlcyh2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUxhc3RJbmRleE9mLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbWFwOiBmdW5jdGlvbiBtYXAobWFwZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gJG1hcCh2YWxpZGF0ZSh0aGlzKSwgbWFwZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlUmlnaHQuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlKHRoYXQpLmxlbmd0aDtcbiAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmZsb29yKGxlbmd0aCAvIDIpO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHdoaWxlIChpbmRleCA8IG1pZGRsZSkge1xuICAgICAgICB2YWx1ZSA9IHRoYXRbaW5kZXhdO1xuICAgICAgICB0aGF0W2luZGV4KytdID0gdGhhdFstLWxlbmd0aF07XG4gICAgICAgIHRoYXRbbGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9LFxuICAgIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheVNvbWUodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb3J0LmNhbGwodmFsaWRhdGUodGhpcyksIGNvbXBhcmVmbik7XG4gICAgfSxcbiAgICBzdWJhcnJheTogZnVuY3Rpb24gc3ViYXJyYXkoYmVnaW4sIGVuZCkge1xuICAgICAgdmFyIE8gPSB2YWxpZGF0ZSh0aGlzKTtcbiAgICAgIHZhciBsZW5ndGggPSBPLmxlbmd0aDtcbiAgICAgIHZhciAkYmVnaW4gPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbmd0aCk7XG4gICAgICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSkoXG4gICAgICAgIE8uYnVmZmVyLFxuICAgICAgICBPLmJ5dGVPZmZzZXQgKyAkYmVnaW4gKiBPLkJZVEVTX1BFUl9FTEVNRU5ULFxuICAgICAgICB0b0xlbmd0aCgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpKSAtICRiZWdpbilcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIHZhciAkc2xpY2UgPSBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcyksIHN0YXJ0LCBlbmQpKTtcbiAgfTtcblxuICB2YXIgJHNldCA9IGZ1bmN0aW9uIHNldChhcnJheUxpa2UgLyogLCBvZmZzZXQgKi8pIHtcbiAgICB2YWxpZGF0ZSh0aGlzKTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9PZmZzZXQoYXJndW1lbnRzWzFdLCAxKTtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdmFyIHNyYyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHNyYy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgaWYgKGxlbiArIG9mZnNldCA+IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbikgdGhpc1tvZmZzZXQgKyBpbmRleF0gPSBzcmNbaW5kZXgrK107XG4gIH07XG5cbiAgdmFyICRpdGVyYXRvcnMgPSB7XG4gICAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICAgIHJldHVybiBhcnJheUVudHJpZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgICAgcmV0dXJuIGFycmF5S2V5cy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5VmFsdWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgaXNUQUluZGV4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRhcmdldClcbiAgICAgICYmIHRhcmdldFtUWVBFRF9BUlJBWV1cbiAgICAgICYmIHR5cGVvZiBrZXkgIT0gJ3N5bWJvbCdcbiAgICAgICYmIGtleSBpbiB0YXJnZXRcbiAgICAgICYmIFN0cmluZygra2V5KSA9PSBTdHJpbmcoa2V5KTtcbiAgfTtcbiAgdmFyICRnZXREZXNjID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICA/IHByb3BlcnR5RGVzYygyLCB0YXJnZXRba2V5XSlcbiAgICAgIDogZ09QRCh0YXJnZXQsIGtleSk7XG4gIH07XG4gIHZhciAkc2V0RGVzYyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgaWYgKGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICAmJiBpc09iamVjdChkZXNjKVxuICAgICAgJiYgaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgICAmJiAhaGFzKGRlc2MsICdnZXQnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnc2V0JylcbiAgICAgIC8vIFRPRE86IGFkZCB2YWxpZGF0aW9uIGRlc2NyaXB0b3Igdy9vIGNhbGxpbmcgYWNjZXNzb3JzXG4gICAgICAmJiAhZGVzYy5jb25maWd1cmFibGVcbiAgICAgICYmICghaGFzKGRlc2MsICd3cml0YWJsZScpIHx8IGRlc2Mud3JpdGFibGUpXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnZW51bWVyYWJsZScpIHx8IGRlc2MuZW51bWVyYWJsZSlcbiAgICApIHtcbiAgICAgIHRhcmdldFtrZXldID0gZGVzYy52YWx1ZTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSByZXR1cm4gZFAodGFyZ2V0LCBrZXksIGRlc2MpO1xuICB9O1xuXG4gIGlmICghQUxMX0NPTlNUUlVDVE9SUykge1xuICAgICRHT1BELmYgPSAkZ2V0RGVzYztcbiAgICAkRFAuZiA9ICRzZXREZXNjO1xuICB9XG5cbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhQUxMX0NPTlNUUlVDVE9SUywgJ09iamVjdCcsIHtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXREZXNjLFxuICAgIGRlZmluZVByb3BlcnR5OiAkc2V0RGVzY1xuICB9KTtcblxuICBpZiAoZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvU3RyaW5nLmNhbGwoe30pOyB9KSkge1xuICAgIGFycmF5VG9TdHJpbmcgPSBhcnJheVRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQgPSByZWRlZmluZUFsbCh7fSwgcHJvdG8pO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsICRpdGVyYXRvcnMpO1xuICBoaWRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgSVRFUkFUT1IsICRpdGVyYXRvcnMudmFsdWVzKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCB7XG4gICAgc2xpY2U6ICRzbGljZSxcbiAgICBzZXQ6ICRzZXQsXG4gICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpIHsgLyogbm9vcCAqLyB9LFxuICAgIHRvU3RyaW5nOiBhcnJheVRvU3RyaW5nLFxuICAgIHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmdcbiAgfSk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdidWZmZXInLCAnYicpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZU9mZnNldCcsICdvJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlTGVuZ3RoJywgJ2wnKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2xlbmd0aCcsICdlJyk7XG4gIGRQKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgVEFHLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW1RZUEVEX0FSUkFZXTsgfVxuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBCWVRFUywgd3JhcHBlciwgQ0xBTVBFRCkge1xuICAgIENMQU1QRUQgPSAhIUNMQU1QRUQ7XG4gICAgdmFyIE5BTUUgPSBLRVkgKyAoQ0xBTVBFRCA/ICdDbGFtcGVkJyA6ICcnKSArICdBcnJheSc7XG4gICAgdmFyIEdFVFRFUiA9ICdnZXQnICsgS0VZO1xuICAgIHZhciBTRVRURVIgPSAnc2V0JyArIEtFWTtcbiAgICB2YXIgVHlwZWRBcnJheSA9IGdsb2JhbFtOQU1FXTtcbiAgICB2YXIgQmFzZSA9IFR5cGVkQXJyYXkgfHwge307XG4gICAgdmFyIFRBQyA9IFR5cGVkQXJyYXkgJiYgZ2V0UHJvdG90eXBlT2YoVHlwZWRBcnJheSk7XG4gICAgdmFyIEZPUkNFRCA9ICFUeXBlZEFycmF5IHx8ICEkdHlwZWQuQUJWO1xuICAgIHZhciBPID0ge307XG4gICAgdmFyIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5ICYmIFR5cGVkQXJyYXlbUFJPVE9UWVBFXTtcbiAgICB2YXIgZ2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICByZXR1cm4gZGF0YS52W0dFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgaWYgKENMQU1QRUQpIHZhbHVlID0gKHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSkpIDwgMCA/IDAgOiB2YWx1ZSA+IDB4ZmYgPyAweGZmIDogdmFsdWUgJiAweGZmO1xuICAgICAgZGF0YS52W1NFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgdmFsdWUsIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIGFkZEVsZW1lbnQgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIGRQKHRoYXQsIGluZGV4LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXR0ZXIodGhpcywgaW5kZXgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBzZXR0ZXIodGhpcywgaW5kZXgsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUsICdfZCcpO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIGJ1ZmZlciwgYnl0ZUxlbmd0aCwgbGVuZ3RoLCBrbGFzcztcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgIGxlbmd0aCA9IHRvSW5kZXgoZGF0YSk7XG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IGxlbmd0aCAqIEJZVEVTO1xuICAgICAgICAgIGJ1ZmZlciA9IG5ldyAkQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIGJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgb2Zmc2V0ID0gdG9PZmZzZXQoJG9mZnNldCwgQllURVMpO1xuICAgICAgICAgIHZhciAkbGVuID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGlmICgkbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICgkbGVuICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSAkbGVuIC0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggPCAwKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSB0b0xlbmd0aCgkbGVuZ3RoKSAqIEJZVEVTO1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggKyBvZmZzZXQgPiAkbGVuKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGggLyBCWVRFUztcbiAgICAgICAgfSBlbHNlIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGhpZGUodGhhdCwgJ19kJywge1xuICAgICAgICAgIGI6IGJ1ZmZlcixcbiAgICAgICAgICBvOiBvZmZzZXQsXG4gICAgICAgICAgbDogYnl0ZUxlbmd0aCxcbiAgICAgICAgICBlOiBsZW5ndGgsXG4gICAgICAgICAgdjogbmV3ICREYXRhVmlldyhidWZmZXIpXG4gICAgICAgIH0pO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIGFkZEVsZW1lbnQodGhhdCwgaW5kZXgrKyk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBjcmVhdGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkKTtcbiAgICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgVHlwZWRBcnJheSk7XG4gICAgfSBlbHNlIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheSgxKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0pIHx8ICEkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KG51bGwpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KGl0ZXIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0sIHRydWUpKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUpO1xuICAgICAgICB2YXIga2xhc3M7XG4gICAgICAgIC8vIGB3c2AgbW9kdWxlIGJ1ZywgdGVtcG9yYXJpbHkgcmVtb3ZlIHZhbGlkYXRpb24gbGVuZ3RoIGZvciBVaW50OEFycmF5XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJzb2NrZXRzL3dzL3B1bGwvNjQ1XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHJldHVybiBuZXcgQmFzZSh0b0luZGV4KGRhdGEpKTtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICByZXR1cm4gJGxlbmd0aCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSwgJGxlbmd0aClcbiAgICAgICAgICAgIDogJG9mZnNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpKVxuICAgICAgICAgICAgICA6IG5ldyBCYXNlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBhcnJheUZvckVhY2goVEFDICE9PSBGdW5jdGlvbi5wcm90b3R5cGUgPyBnT1BOKEJhc2UpLmNvbmNhdChnT1BOKFRBQykpIDogZ09QTihCYXNlKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gVHlwZWRBcnJheSkpIGhpZGUoVHlwZWRBcnJheSwga2V5LCBCYXNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBUeXBlZEFycmF5UHJvdG90eXBlO1xuICAgICAgaWYgKCFMSUJSQVJZKSBUeXBlZEFycmF5UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHlwZWRBcnJheTtcbiAgICB9XG4gICAgdmFyICRuYXRpdmVJdGVyYXRvciA9IFR5cGVkQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdO1xuICAgIHZhciBDT1JSRUNUX0lURVJfTkFNRSA9ICEhJG5hdGl2ZUl0ZXJhdG9yXG4gICAgICAmJiAoJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gJ3ZhbHVlcycgfHwgJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gdW5kZWZpbmVkKTtcbiAgICB2YXIgJGl0ZXJhdG9yID0gJGl0ZXJhdG9ycy52YWx1ZXM7XG4gICAgaGlkZShUeXBlZEFycmF5LCBUWVBFRF9DT05TVFJVQ1RPUiwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBUWVBFRF9BUlJBWSwgTkFNRSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIERFRl9DT05TVFJVQ1RPUiwgVHlwZWRBcnJheSk7XG5cbiAgICBpZiAoQ0xBTVBFRCA/IG5ldyBUeXBlZEFycmF5KDEpW1RBR10gIT0gTkFNRSA6ICEoVEFHIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSB7XG4gICAgICBkUChUeXBlZEFycmF5UHJvdG90eXBlLCBUQUcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOQU1FOyB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBPW05BTUVdID0gVHlwZWRBcnJheTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKFR5cGVkQXJyYXkgIT0gQmFzZSksIE8pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMsIE5BTUUsIHtcbiAgICAgIEJZVEVTX1BFUl9FTEVNRU5UOiBCWVRFU1xuICAgIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IEJhc2Uub2YuY2FsbChUeXBlZEFycmF5LCAxKTsgfSksIE5BTUUsIHtcbiAgICAgIGZyb206ICRmcm9tLFxuICAgICAgb2Y6ICRvZlxuICAgIH0pO1xuXG4gICAgaWYgKCEoQllURVNfUEVSX0VMRU1FTlQgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgQllURVNfUEVSX0VMRU1FTlQsIEJZVEVTKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QLCBOQU1FLCBwcm90byk7XG5cbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRURfU0VULCBOQU1FLCB7IHNldDogJHNldCB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIUNPUlJFQ1RfSVRFUl9OQU1FLCBOQU1FLCAkaXRlcmF0b3JzKTtcblxuICAgIGlmICghTElCUkFSWSAmJiBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nICE9IGFycmF5VG9TdHJpbmcpIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgPSBhcnJheVRvU3RyaW5nO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgxKS5zbGljZSgpO1xuICAgIH0pLCBOQU1FLCB7IHNsaWNlOiAkc2xpY2UgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gWzEsIDJdLnRvTG9jYWxlU3RyaW5nKCkgIT0gbmV3IFR5cGVkQXJyYXkoWzEsIDJdKS50b0xvY2FsZVN0cmluZygpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsIDJdKTtcbiAgICB9KSksIE5BTUUsIHsgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZyB9KTtcblxuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IENPUlJFQ1RfSVRFUl9OQU1FID8gJG5hdGl2ZUl0ZXJhdG9yIDogJGl0ZXJhdG9yO1xuICAgIGlmICghTElCUkFSWSAmJiAhQ09SUkVDVF9JVEVSX05BTUUpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgSVRFUkFUT1IsICRpdGVyYXRvcik7XG4gIH07XG59IGVsc2UgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFRZUEVEID0gdWlkKCd0eXBlZF9hcnJheScpO1xudmFyIFZJRVcgPSB1aWQoJ3ZpZXcnKTtcbnZhciBBQlYgPSAhIShnbG9iYWwuQXJyYXlCdWZmZXIgJiYgZ2xvYmFsLkRhdGFWaWV3KTtcbnZhciBDT05TVFIgPSBBQlY7XG52YXIgaSA9IDA7XG52YXIgbCA9IDk7XG52YXIgVHlwZWQ7XG5cbnZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JzID0gKFxuICAnSW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXknXG4pLnNwbGl0KCcsJyk7XG5cbndoaWxlIChpIDwgbCkge1xuICBpZiAoVHlwZWQgPSBnbG9iYWxbVHlwZWRBcnJheUNvbnN0cnVjdG9yc1tpKytdXSkge1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBUWVBFRCwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICB9IGVsc2UgQ09OU1RSID0gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBQlY6IEFCVixcbiAgQ09OU1RSOiBDT05TVFIsXG4gIFRZUEVEOiBUWVBFRCxcbiAgVklFVzogVklFV1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXZlcnkgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5ldmVyeSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjUgLyAxNS40LjQuMTYgQXJyYXkucHJvdG90eXBlLmV2ZXJ5KGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGZpbGw6IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZpbGwnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgyKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZpbHRlciwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjcgLyAxNS40LjQuMjAgQXJyYXkucHJvdG90eXBlLmZpbHRlcihjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyICRuYXRpdmUgPSBbXS5pbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhISRuYXRpdmUgJiYgMSAvIFsxXS5pbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjExIC8gMTUuNC40LjE0IEFycmF5LnByb3RvdHlwZS5pbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/ICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4yLjIgLyAxNS40LjMuMiBBcnJheS5pc0FycmF5KGFyZylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnQXJyYXknLCB7IGlzQXJyYXk6IHJlcXVpcmUoJy4vX2lzLWFycmF5JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5qb2luKHNlcGFyYXRvcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5Sm9pbiA9IFtdLmpvaW47XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBzdHJpbmdzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChyZXF1aXJlKCcuL19pb2JqZWN0JykgIT0gT2JqZWN0IHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoYXJyYXlKb2luKSksICdBcnJheScsIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodG9JT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgJG5hdGl2ZSA9IFtdLmxhc3RJbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhISRuYXRpdmUgJiYgMSAvIFsxXS5sYXN0SW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNCAvIDE1LjQuNC4xNSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICAgIHZhciBPID0gdG9JT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTtcbiAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPKSBpZiAoT1tpbmRleF0gPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBpbmRleCB8fCAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIFdlYktpdCBBcnJheS5vZiBpc24ndCBnZW5lcmljXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKEFycmF5Lm9mLmNhbGwoRikgaW5zdGFuY2VvZiBGKTtcbn0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4zIEFycmF5Lm9mKCAuLi5pdGVtcylcbiAgb2Y6IGZ1bmN0aW9uIG9mKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gbmV3ICh0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5KShhTGVuKTtcbiAgICB3aGlsZSAoYUxlbiA+IGluZGV4KSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBhTGVuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2VSaWdodCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE5IC8gMTUuNC40LjIyIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodChjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5zb21lLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjMgLyAxNS40LjQuMTcgQXJyYXkucHJvdG90eXBlLnNvbWUoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkc29tZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiIsInJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ0FycmF5Jyk7XG4iLCIvLyAyMC4zLjMuMSAvIDE1LjkuNC40IERhdGUubm93KClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRGF0ZScsIHsgbm93OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfSB9KTtcbiIsIi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSVNPU3RyaW5nID0gcmVxdWlyZSgnLi9fZGF0ZS10by1pc28tc3RyaW5nJyk7XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgIT09IHRvSVNPU3RyaW5nKSwgJ0RhdGUnLCB7XG4gIHRvSVNPU3RyaW5nOiB0b0lTT1N0cmluZ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE5hTikudG9KU09OKCkgIT09IG51bGxcbiAgICB8fCBEYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7IHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9IH0pICE9PSAxO1xufSksICdEYXRlJywge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgcHYgPSB0b1ByaW1pdGl2ZShPKTtcbiAgICByZXR1cm4gdHlwZW9mIHB2ID09ICdudW1iZXInICYmICFpc0Zpbml0ZShwdikgPyBudWxsIDogTy50b0lTT1N0cmluZygpO1xuICB9XG59KTtcbiIsInZhciBUT19QUklNSVRJVkUgPSByZXF1aXJlKCcuL193a3MnKSgndG9QcmltaXRpdmUnKTtcbnZhciBwcm90byA9IERhdGUucHJvdG90eXBlO1xuXG5pZiAoIShUT19QUklNSVRJVkUgaW4gcHJvdG8pKSByZXF1aXJlKCcuL19oaWRlJykocHJvdG8sIFRPX1BSSU1JVElWRSwgcmVxdWlyZSgnLi9fZGF0ZS10by1wcmltaXRpdmUnKSk7XG4iLCJ2YXIgRGF0ZVByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG52YXIgSU5WQUxJRF9EQVRFID0gJ0ludmFsaWQgRGF0ZSc7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSBEYXRlUHJvdG9bVE9fU1RSSU5HXTtcbnZhciBnZXRUaW1lID0gRGF0ZVByb3RvLmdldFRpbWU7XG5pZiAobmV3IERhdGUoTmFOKSArICcnICE9IElOVkFMSURfREFURSkge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKERhdGVQcm90bywgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgdmFsdWUgPSBnZXRUaW1lLmNhbGwodGhpcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyAkdG9TdHJpbmcuY2FsbCh0aGlzKSA6IElOVkFMSURfREFURTtcbiAgfSk7XG59XG4iLCIvLyAxOS4yLjMuMiAvIDE1LjMuNC41IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKHRoaXNBcmcsIGFyZ3MuLi4pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0Z1bmN0aW9uJywgeyBiaW5kOiByZXF1aXJlKCcuL19iaW5kJykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBIQVNfSU5TVEFOQ0UgPSByZXF1aXJlKCcuL193a3MnKSgnaGFzSW5zdGFuY2UnKTtcbnZhciBGdW5jdGlvblByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gMTkuMi4zLjYgRnVuY3Rpb24ucHJvdG90eXBlW0BAaGFzSW5zdGFuY2VdKFYpXG5pZiAoIShIQVNfSU5TVEFOQ0UgaW4gRnVuY3Rpb25Qcm90bykpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoRnVuY3Rpb25Qcm90bywgSEFTX0lOU1RBTkNFLCB7IHZhbHVlOiBmdW5jdGlvbiAoTykge1xuICBpZiAodHlwZW9mIHRoaXMgIT0gJ2Z1bmN0aW9uJyB8fCAhaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFpc09iamVjdCh0aGlzLnByb3RvdHlwZSkpIHJldHVybiBPIGluc3RhbmNlb2YgdGhpcztcbiAgLy8gZm9yIGVudmlyb25tZW50IHcvbyBuYXRpdmUgYEBAaGFzSW5zdGFuY2VgIGxvZ2ljIGVub3VnaCBgaW5zdGFuY2VvZmAsIGJ1dCBhZGQgdGhpczpcbiAgd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSkgaWYgKHRoaXMucHJvdG90eXBlID09PSBPKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufSB9KTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgRlByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyAxOS4yLjQuMiBuYW1lXG5OQU1FIGluIEZQcm90byB8fCByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIGRQKEZQcm90bywgTkFNRSwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKCcnICsgdGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE1BUCA9ICdNYXAnO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShNQVAsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7XG4iLCIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiIsIi8vIDIwLjIuMi43IE1hdGguYXRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0YW5oID0gTWF0aC5hdGFuaDtcblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmF0YW5oKC0wKSAtPiAwXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGF0YW5oICYmIDEgLyAkYXRhbmgoLTApIDwgMCksICdNYXRoJywge1xuICBhdGFuaDogZnVuY3Rpb24gYXRhbmgoeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IE1hdGgubG9nKCgxICsgeCkgLyAoMSAtIHgpKSAvIDI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjkgTWF0aC5jYnJ0KHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNpZ24gPSByZXF1aXJlKCcuL19tYXRoLXNpZ24nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjYnJ0OiBmdW5jdGlvbiBjYnJ0KHgpIHtcbiAgICByZXR1cm4gc2lnbih4ID0gK3gpICogTWF0aC5wb3coTWF0aC5hYnMoeCksIDEgLyAzKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTIgTWF0aC5jb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNvc2g6IGZ1bmN0aW9uIGNvc2goeCkge1xuICAgIHJldHVybiAoZXhwKHggPSAreCkgKyBleHAoLXgpKSAvIDI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiIsIi8vIDIwLjIuMi4xNyBNYXRoLmh5cG90KFt2YWx1ZTFbLCB2YWx1ZTJbLCDigKYgXV1dKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBoeXBvdDogZnVuY3Rpb24gaHlwb3QodmFsdWUxLCB2YWx1ZTIpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogTWF0aC5zcXJ0KHN1bSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMSBNYXRoLmxvZzEwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzEwOiBmdW5jdGlvbiBsb2cxMCh4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpICogTWF0aC5MT0cxMEU7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgbG9nMXA6IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKSB9KTtcbiIsIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiIsIi8vIDIwLjIuMi4zMCBNYXRoLnNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbi8vIFY4IG5lYXIgQ2hyb21pdW0gMzggaGFzIGEgcHJvYmxlbSB3aXRoIHZlcnkgc21hbGwgbnVtYmVyc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFNYXRoLnNpbmgoLTJlLTE3KSAhPSAtMmUtMTc7XG59KSwgJ01hdGgnLCB7XG4gIHNpbmg6IGZ1bmN0aW9uIHNpbmgoeCkge1xuICAgIHJldHVybiBNYXRoLmFicyh4ID0gK3gpIDwgMVxuICAgICAgPyAoZXhwbTEoeCkgLSBleHBtMSgteCkpIC8gMlxuICAgICAgOiAoZXhwKHggLSAxKSAtIGV4cCgteCAtIDEpKSAqIChNYXRoLkUgLyAyKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzMgTWF0aC50YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHRhbmg6IGZ1bmN0aW9uIHRhbmgoeCkge1xuICAgIHZhciBhID0gZXhwbTEoeCA9ICt4KTtcbiAgICB2YXIgYiA9IGV4cG0xKC14KTtcbiAgICByZXR1cm4gYSA9PSBJbmZpbml0eSA/IDEgOiBiID09IEluZmluaXR5ID8gLTEgOiAoYSAtIGIpIC8gKGV4cCh4KSArIGV4cCgteCkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zNCBNYXRoLnRydW5jKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHRydW5jOiBmdW5jdGlvbiB0cnVuYyhpdCkge1xuICAgIHJldHVybiAoaXQgPiAwID8gTWF0aC5mbG9vciA6IE1hdGguY2VpbCkoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIE5VTUJFUiA9ICdOdW1iZXInO1xudmFyICROdW1iZXIgPSBnbG9iYWxbTlVNQkVSXTtcbnZhciBCYXNlID0gJE51bWJlcjtcbnZhciBwcm90byA9ICROdW1iZXIucHJvdG90eXBlO1xuLy8gT3BlcmEgfjEyIGhhcyBicm9rZW4gT2JqZWN0I3RvU3RyaW5nXG52YXIgQlJPS0VOX0NPRiA9IGNvZihyZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykocHJvdG8pKSA9PSBOVU1CRVI7XG52YXIgVFJJTSA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgZmFsc2UpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IFRSSU0gPyBpdC50cmltKCkgOiAkdHJpbShpdCwgMyk7XG4gICAgdmFyIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgdGhpcmQsIHJhZGl4LCBtYXhDb2RlO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBkaWdpdHMgPSBpdC5zbGljZSgyKSwgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoLCBjb2RlOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbmlmICghJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpIHtcbiAgJE51bWJlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IHByb3RvLnZhbHVlT2YuY2FsbCh0aGF0KTsgfSkgOiBjb2YodGhhdCkgIT0gTlVNQkVSKVxuICAgICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKHRvTnVtYmVyKGl0KSksIHRoYXQsICROdW1iZXIpIDogdG9OdW1iZXIoaXQpO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhcyhCYXNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKCROdW1iZXIsIGtleSkpIHtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgTlVNQkVSLCAkTnVtYmVyKTtcbn1cbiIsIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiIsIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IGlzSW50ZWdlcjogcmVxdWlyZSgnLi9faXMtaW50ZWdlcicpIH0pO1xuIiwiLy8gMjAuMS4yLjQgTnVtYmVyLmlzTmFOKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc05hTjogZnVuY3Rpb24gaXNOYU4obnVtYmVyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi41IE51bWJlci5pc1NhZmVJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNJbnRlZ2VyID0gcmVxdWlyZSgnLi9faXMtaW50ZWdlcicpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNTYWZlSW50ZWdlcjogZnVuY3Rpb24gaXNTYWZlSW50ZWdlcihudW1iZXIpIHtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKG51bWJlcikgJiYgYWJzKG51bWJlcikgPD0gMHgxZmZmZmZmZmZmZmZmZjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1BWF9TQUZFX0lOVEVHRVI6IDB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCIvLyAyMC4xLjIuMTAgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNSU5fU0FGRV9JTlRFR0VSOiAtMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX3BhcnNlLWludCcpO1xuLy8gMjAuMS4yLjEzIE51bWJlci5wYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlSW50ICE9ICRwYXJzZUludCksICdOdW1iZXInLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHsgYXNzaWduOiByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgY3JlYXRlOiByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSU9iamVjdChpdCksIGtleSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5TmFtZXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKS5mO1xufSk7XG4iLCIvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRQcm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEzIE9iamVjdC5pc1NlYWxlZChPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNTZWFsZWQnLCBmdW5jdGlvbiAoJGlzU2VhbGVkKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc1NlYWxlZChpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNTZWFsZWQgPyAkaXNTZWFsZWQoaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE1IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdwcmV2ZW50RXh0ZW5zaW9ucycsIGZ1bmN0aW9uICgkcHJldmVudEV4dGVuc2lvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKGl0KSB7XG4gICAgcmV0dXJuICRwcmV2ZW50RXh0ZW5zaW9ucyAmJiBpc09iamVjdChpdCkgPyAkcHJldmVudEV4dGVuc2lvbnMobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNyBPYmplY3Quc2VhbChPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdzZWFsJywgZnVuY3Rpb24gKCRzZWFsKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzZWFsKGl0KSB7XG4gICAgcmV0dXJuICRzZWFsICYmIGlzT2JqZWN0KGl0KSA/ICRzZWFsKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMTguMi40IHBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX3BhcnNlLWludCcpO1xuLy8gMTguMi41IHBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUludCAhPSAkcGFyc2VJbnQpLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4IHx8ICcnO1xudmFyICRQcm9taXNlID0gZ2xvYmFsW1BST01JU0VdO1xudmFyIGlzTm9kZSA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xudmFyIGVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIEludGVybmFsLCBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHksIE93blByb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcblxudmFyIFVTRV9OQVRJVkUgPSAhIWZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgIH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZVxuICAgICAgLy8gdjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgICAvLyB3ZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgICAgJiYgdjguaW5kZXhPZignNi42JykgIT09IDBcbiAgICAgICYmIHVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUvNjYnKSA9PT0gLTE7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbiAocHJvbWlzZSwgaXNSZWplY3QpIHtcbiAgaWYgKHByb21pc2UuX24pIHJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbiAocmVhY3Rpb24pIHtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHByb21pc2UuX2ggPT0gMikgb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gbWF5IHRocm93XG4gICAgICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSBydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgdW5oYW5kbGVkID0gaXNVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZiAodW5oYW5kbGVkKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICB2YXIgJCRyZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyICRpbmRleCA9IGluZGV4Kys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMSBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciByQXBwbHkgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuYXBwbHk7XG52YXIgZkFwcGx5ID0gRnVuY3Rpb24uYXBwbHk7XG4vLyBNUyBFZGdlIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByQXBwbHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgYXBwbHk6IGZ1bmN0aW9uIGFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KSB7XG4gICAgdmFyIFQgPSBhRnVuY3Rpb24odGFyZ2V0KTtcbiAgICB2YXIgTCA9IGFuT2JqZWN0KGFyZ3VtZW50c0xpc3QpO1xuICAgIHJldHVybiByQXBwbHkgPyByQXBwbHkoVCwgdGhpc0FyZ3VtZW50LCBMKSA6IGZBcHBseS5jYWxsKFQsIHRoaXNBcmd1bWVudCwgTCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4zIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcylcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbi8vIE1TIEVkZ2UgaGFzIGJyb2tlbiBSZWZsZWN0LmRlZmluZVByb3BlcnR5IC0gdGhyb3dpbmcgaW5zdGVhZCBvZiByZXR1cm5pbmcgZmFsc2VcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGRQLmYoe30sIDEsIHsgdmFsdWU6IDEgfSksIDEsIHsgdmFsdWU6IDIgfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICBwcm9wZXJ0eUtleSA9IHRvUHJpbWl0aXZlKHByb3BlcnR5S2V5LCB0cnVlKTtcbiAgICBhbk9iamVjdChhdHRyaWJ1dGVzKTtcbiAgICB0cnkge1xuICAgICAgZFAuZih0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI2LjEuNSBSZWZsZWN0LmVudW1lcmF0ZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgRW51bWVyYXRlID0gZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBhbk9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHZhciBrZXlzID0gdGhpcy5fayA9IFtdOyAgICAgIC8vIGtleXNcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gaXRlcmF0ZWQpIGtleXMucHVzaChrZXkpO1xufTtcbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoRW51bWVyYXRlLCAnT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IHRoaXM7XG4gIHZhciBrZXlzID0gdGhhdC5faztcbiAgdmFyIGtleTtcbiAgZG8ge1xuICAgIGlmICh0aGF0Ll9pID49IGtleXMubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH0gd2hpbGUgKCEoKGtleSA9IGtleXNbdGhhdC5faSsrXSkgaW4gdGhhdC5fdCkpO1xuICByZXR1cm4geyB2YWx1ZToga2V5LCBkb25lOiBmYWxzZSB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZW51bWVyYXRlOiBmdW5jdGlvbiBlbnVtZXJhdGUodGFyZ2V0KSB7XG4gICAgcmV0dXJuIG5ldyBFbnVtZXJhdGUodGFyZ2V0KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjcgUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgcmV0dXJuIGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS44IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnZXRQcm90byA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZih0YXJnZXQpIHtcbiAgICByZXR1cm4gZ2V0UHJvdG8oYW5PYmplY3QodGFyZ2V0KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS42IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgWywgcmVjZWl2ZXJdKVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjLCBwcm90bztcbiAgaWYgKGFuT2JqZWN0KHRhcmdldCkgPT09IHJlY2VpdmVyKSByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgaWYgKGRlc2MgPSBnT1BELmYodGFyZ2V0LCBwcm9wZXJ0eUtleSkpIHJldHVybiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICA/IGRlc2MudmFsdWVcbiAgICA6IGRlc2MuZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVzYy5nZXQuY2FsbChyZWNlaXZlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkgcmV0dXJuIGdldChwcm90bywgcHJvcGVydHlLZXksIHJlY2VpdmVyKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBnZXQ6IGdldCB9KTtcbiIsIi8vIDI2LjEuOSBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBoYXM6IGZ1bmN0aW9uIGhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgcmV0dXJuIHByb3BlcnR5S2V5IGluIHRhcmdldDtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjExIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IG93bktleXM6IHJlcXVpcmUoJy4vX293bi1rZXlzJykgfSk7XG4iLCIvLyAyNi4xLjEyIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRwcmV2ZW50RXh0ZW5zaW9ucyA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBwcmV2ZW50RXh0ZW5zaW9uczogZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICB0cnkge1xuICAgICAgaWYgKCRwcmV2ZW50RXh0ZW5zaW9ucykgJHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTQgUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzZXRQcm90byA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpO1xuXG5pZiAoc2V0UHJvdG8pICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgc2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pIHtcbiAgICBzZXRQcm90by5jaGVjayh0YXJnZXQsIHByb3RvKTtcbiAgICB0cnkge1xuICAgICAgc2V0UHJvdG8uc2V0KHRhcmdldCwgcHJvdG8pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcbnZhciBCYXNlID0gJFJlZ0V4cDtcbnZhciBwcm90byA9ICRSZWdFeHAucHJvdG90eXBlO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcbi8vIFwibmV3XCIgY3JlYXRlcyBhIG5ldyBvYmplY3QsIG9sZCB3ZWJraXQgYnVnZ3kgaGVyZVxudmFyIENPUlJFQ1RfTkVXID0gbmV3ICRSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAoIUNPUlJFQ1RfTkVXIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZTJbcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyldID0gZmFsc2U7XG4gIC8vIFJlZ0V4cCBjb25zdHJ1Y3RvciBjYW4gYWx0ZXIgZmxhZ3MgYW5kIElzUmVnRXhwIHdvcmtzIGNvcnJlY3Qgd2l0aCBAQG1hdGNoXG4gIHJldHVybiAkUmVnRXhwKHJlMSkgIT0gcmUxIHx8ICRSZWdFeHAocmUyKSA9PSByZTIgfHwgJFJlZ0V4cChyZTEsICdpJykgIT0gJy9hL2knO1xufSkpKSB7XG4gICRSZWdFeHAgPSBmdW5jdGlvbiBSZWdFeHAocCwgZikge1xuICAgIHZhciB0aVJFID0gdGhpcyBpbnN0YW5jZW9mICRSZWdFeHA7XG4gICAgdmFyIHBpUkUgPSBpc1JlZ0V4cChwKTtcbiAgICB2YXIgZmlVID0gZiA9PT0gdW5kZWZpbmVkO1xuICAgIHJldHVybiAhdGlSRSAmJiBwaVJFICYmIHAuY29uc3RydWN0b3IgPT09ICRSZWdFeHAgJiYgZmlVID8gcFxuICAgICAgOiBpbmhlcml0SWZSZXF1aXJlZChDT1JSRUNUX05FV1xuICAgICAgICA/IG5ldyBCYXNlKHBpUkUgJiYgIWZpVSA/IHAuc291cmNlIDogcCwgZilcbiAgICAgICAgOiBCYXNlKChwaVJFID0gcCBpbnN0YW5jZW9mICRSZWdFeHApID8gcC5zb3VyY2UgOiBwLCBwaVJFICYmIGZpVSA/ICRmbGFncy5jYWxsKHApIDogZilcbiAgICAgICwgdGlSRSA/IHRoaXMgOiBwcm90bywgJFJlZ0V4cCk7XG4gIH07XG4gIHZhciBwcm94eSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgaW4gJFJlZ0V4cCB8fCBkUCgkUmVnRXhwLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQmFzZVtrZXldOyB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAoaXQpIHsgQmFzZVtrZXldID0gaXQ7IH1cbiAgICB9KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZSksIGkgPSAwOyBrZXlzLmxlbmd0aCA+IGk7KSBwcm94eShrZXlzW2krK10pO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICRSZWdFeHA7XG4gICRSZWdFeHAucHJvdG90eXBlID0gcHJvdG87XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCAnUmVnRXhwJywgJFJlZ0V4cCk7XG59XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ1JlZ0V4cCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xucmVxdWlyZSgnLi9fZXhwb3J0Jykoe1xuICB0YXJnZXQ6ICdSZWdFeHAnLFxuICBwcm90bzogdHJ1ZSxcbiAgZm9yY2VkOiByZWdleHBFeGVjICE9PSAvLi8uZXhlY1xufSwge1xuICBleGVjOiByZWdleHBFeGVjXG59KTtcbiIsIi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzKClcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIC8uL2cuZmxhZ3MgIT0gJ2cnKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlcXVpcmUoJy4vX2ZsYWdzJylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnbWF0Y2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgTUFUQ0gsICRtYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkbWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTRVQgPSAnU2V0JztcblxuLy8gMjMuMiBTZXQgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4yLjMuMSBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBTRVQpLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4yIFN0cmluZy5wcm90b3R5cGUuYW5jaG9yKG5hbWUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdhbmNob3InLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYW5jaG9yKG5hbWUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICduYW1lJywgbmFtZSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjMgU3RyaW5nLnByb3RvdHlwZS5iaWcoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmlnJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJpZygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmlnJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNCBTdHJpbmcucHJvdG90eXBlLmJsaW5rKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJsaW5rKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdibGluaycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy42IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgoc2VhcmNoU3RyaW5nIFssIGVuZFBvc2l0aW9uXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBFTkRTX1dJVEggPSAnZW5kc1dpdGgnO1xudmFyICRlbmRzV2l0aCA9ICcnW0VORFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoRU5EU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIGVuZFBvc2l0aW9uID0gQGxlbmd0aCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIEVORFNfV0lUSCk7XG4gICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoYXQubGVuZ3RoKTtcbiAgICB2YXIgZW5kID0gZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IGxlbiA6IE1hdGgubWluKHRvTGVuZ3RoKGVuZFBvc2l0aW9uKSwgbGVuKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRlbmRzV2l0aFxuICAgICAgPyAkZW5kc1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNiBTdHJpbmcucHJvdG90eXBlLmZpeGVkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZpeGVkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZpeGVkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICd0dCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjcgU3RyaW5nLnByb3RvdHlwZS5mb250Y29sb3IoY29sb3IpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250Y29sb3InLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9udGNvbG9yKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnY29sb3InLCBjb2xvcik7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjggU3RyaW5nLnByb3RvdHlwZS5mb250c2l6ZShzaXplKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udHNpemUnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9udHNpemUoc2l6ZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ3NpemUnLCBzaXplKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcblxuLy8gbGVuZ3RoIHNob3VsZCBiZSAxLCBvbGQgRkYgcHJvYmxlbVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi4yIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGFMZW4gPiBpKSB7XG4gICAgICBjb2RlID0gK2FyZ3VtZW50c1tpKytdO1xuICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwZmZmZikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgcmVzLnB1c2goY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMCwgY29kZSAlIDB4NDAwICsgMHhkYzAwKVxuICAgICAgKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy45IFN0cmluZy5wcm90b3R5cGUuaXRhbGljcygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdpdGFsaWNzJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGl0YWxpY3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2knLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQoY291bnQpXG4gIHJlcGVhdDogcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjExIFN0cmluZy5wcm90b3R5cGUuc21hbGwoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc21hbGwnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc21hbGwoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3NtYWxsJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiLy8gMjEuMS4zLjE4IFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgWywgcG9zaXRpb24gXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbnZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgU1RBUlRTX1dJVEgpO1xuICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMS4zLjI1IFN0cmluZy5wcm90b3R5cGUudHJpbSgpXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltJywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAzKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIE1FVEEgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciB3a3NEZWZpbmUgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJyk7XG52YXIgZW51bUtleXMgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIEFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuQXJyYXlCdWZmZXI7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbik7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRBcnJheUJ1ZmZlcikpKHRvTGVuZ3RoKGZpbiAtIGZpcnN0KSk7XG4gICAgdmFyIHZpZXdTID0gbmV3ICREYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1QgPSBuZXcgJERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKEFSUkFZX0JVRkZFUik7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0NjQnLCA4LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgV0VBS19NQVAgPSAnV2Vha01hcCc7XG52YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSB3ZWFrLnVmc3RvcmU7XG52YXIgSW50ZXJuYWxNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbnZhciBtZXRob2RzID0ge1xuICAvLyAyMy4zLjMuMyBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgV0VBS19NQVApKS5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sXG4gIC8vIDIzLjMuMy41IFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8vIDIzLjMgV2Vha01hcCBPYmplY3RzXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbmlmIChOQVRJVkVfV0VBS19NQVAgJiYgSVNfSUUxMSkge1xuICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgIHZhciBtZXRob2QgPSBwcm90b1trZXldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBXRUFLX1NFVCA9ICdXZWFrU2V0JztcblxuLy8gMjMuNCBXZWFrU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX1NFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjQuMy4xIFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gIH1cbn0sIHdlYWssIGZhbHNlLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0TWFwXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4sIEE7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXRNYXAnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0dGVuXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXR0ZW46IGZ1bmN0aW9uIGZsYXR0ZW4oLyogZGVwdGhBcmcgPSAxICovKSB7XG4gICAgdmFyIGRlcHRoQXJnID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgZGVwdGhBcmcgPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGhBcmcpKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0dGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJykgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHA6Ly9qZmJhc3RpZW4uZ2l0aHViLmlvL3BhcGVycy9NYXRoLnNpZ25iaXQuaHRtbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgIT0geCA/IHggOiB4ID09IDAgPyAxIC8geCA9PSBJbmZpbml0eSA6IHggPiAwO1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZVNldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IHNldDogYUZ1bmN0aW9uKHNldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoaXQpIHtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuL19vd24ta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXREZXNjID0gZ09QRC5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXksIGRlc2M7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaSkge1xuICAgICAgZGVzYyA9IGdldERlc2MoTywga2V5ID0ga2V5c1tpKytdKTtcbiAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjQgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBHZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBHZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5nZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjUgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIiwidmFyIFNldCA9IHJlcXVpcmUoJy4vZXM2LnNldCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG52YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5TWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KSwgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gIHBhZFN0YXJ0OiBmdW5jdGlvbiBwYWRTdGFydChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnb2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N5c3RlbScsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iLCIvLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuIiwicmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNlYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jYnJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2x6MzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5mcm91bmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5oeXBvdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmltdWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxMCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRydW5jJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJhdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ibGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdHJpa2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1YicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUubm93Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5qb2luJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb21lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmNsYW1wJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaWFkZGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pc3ViaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmltdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC51bXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UudHJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFzYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuaW1tZWRpYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL21vZHVsZXMvX2NvcmUnKTtcbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xudmFyIGJ5dGVUb0hleCA9IFtdO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXhbaV0gPSAoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvVXVpZChidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xuICB2YXIgYnRoID0gYnl0ZVRvSGV4O1xuICAvLyBqb2luIHVzZWQgdG8gZml4IG1lbW9yeSBpc3N1ZSBjYXVzZWQgYnkgY29uY2F0ZW5hdGlvbjogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzE3NSNjNFxuICByZXR1cm4gKFtidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCBcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dXSkuam9pbignJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnl0ZXNUb1V1aWQ7XG4iLCIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiAgSW4gdGhlXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXG4vLyBhbmQgaW5jb25zaXN0ZW50IHN1cHBvcnQgZm9yIHRoZSBgY3J5cHRvYCBBUEkuICBXZSBkbyB0aGUgYmVzdCB3ZSBjYW4gdmlhXG4vLyBmZWF0dXJlLWRldGVjdGlvblxuXG4vLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG9cbi8vIGltcGxlbWVudGF0aW9uLiBBbHNvLCBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gb24gSUUxMS5cbnZhciBnZXRSYW5kb21WYWx1ZXMgPSAodHlwZW9mKGNyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSk7XG5cbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcbiAgLy8gV0hBVFdHIGNyeXB0byBSTkcgLSBodHRwOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3J5cHRvXG4gIHZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2hhdHdnUk5HKCkge1xuICAgIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG4gICAgcmV0dXJuIHJuZHM4O1xuICB9O1xufSBlbHNlIHtcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxuICAvL1xuICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdXNlIE1hdGgucmFuZG9tKCkuICBJdCdzIGZhc3QsIGJ1dCBpcyBvZiB1bnNwZWNpZmllZFxuICAvLyBxdWFsaXR5LlxuICB2YXIgcm5kcyA9IG5ldyBBcnJheSgxNik7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCByOyBpIDwgMTY7IGkrKykge1xuICAgICAgaWYgKChpICYgMHgwMykgPT09IDApIHIgPSBNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwMDA7XG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xuICAgIH1cblxuICAgIHJldHVybiBybmRzO1xuICB9O1xufVxuIiwidmFyIHJuZyA9IHJlcXVpcmUoJy4vbGliL3JuZycpO1xudmFyIGJ5dGVzVG9VdWlkID0gcmVxdWlyZSgnLi9saWIvYnl0ZXNUb1V1aWQnKTtcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG5cbiAgaWYgKHR5cGVvZihvcHRpb25zKSA9PSAnc3RyaW5nJykge1xuICAgIGJ1ZiA9IG9wdGlvbnMgPT09ICdiaW5hcnknID8gbmV3IEFycmF5KDE2KSA6IG51bGw7XG4gICAgb3B0aW9ucyA9IG51bGw7XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgcm5nKSgpO1xuXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcbiAgcm5kc1s2XSA9IChybmRzWzZdICYgMHgwZikgfCAweDQwO1xuICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XG5cbiAgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG4gIGlmIChidWYpIHtcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcbiAgICAgIGJ1ZltpICsgaWldID0gcm5kc1tpaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBieXRlc1RvVXVpZChybmRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2NDtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVGltZXIgfSBmcm9tICcuL1RpbWVyLmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IDYwOyAvLyBzZWNvbmRzXHJcblxyXG5leHBvcnQgY2xhc3MgQWNjZXNzVG9rZW5FdmVudHMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSxcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXIgPSBuZXcgVGltZXIoXCJBY2Nlc3MgdG9rZW4gZXhwaXJpbmdcIiksXHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmVkVGltZXIgPSBuZXcgVGltZXIoXCJBY2Nlc3MgdG9rZW4gZXhwaXJlZFwiKVxyXG4gICAgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZyA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdUaW1lcjtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQgPSBhY2Nlc3NUb2tlbkV4cGlyZWRUaW1lcjtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkKGNvbnRhaW5lcikge1xyXG4gICAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZXZlbnRzIGlmIHRoZXJlJ3MgYW4gYWNjZXNzIHRva2VuIGFuZCBpdCBoYXMgYW4gZXhwaXJhdGlvblxyXG4gICAgICAgIGlmIChjb250YWluZXIuYWNjZXNzX3Rva2VuICYmIGNvbnRhaW5lci5leHBpcmVzX2luICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbGV0IGR1cmF0aW9uID0gY29udGFpbmVyLmV4cGlyZXNfaW47XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IGFjY2VzcyB0b2tlbiBwcmVzZW50LCByZW1haW5pbmcgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkdXJhdGlvbiA+IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZXhwaXJpbmcgaWYgd2Ugc3RpbGwgaGF2ZSB0aW1lXHJcbiAgICAgICAgICAgICAgICBsZXQgZXhwaXJpbmcgPSBkdXJhdGlvbiAtIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4cGlyaW5nIDw9IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cGlyaW5nID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogcmVnaXN0ZXJpbmcgZXhwaXJpbmcgdGltZXIgaW46XCIsIGV4cGlyaW5nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuaW5pdChleHBpcmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiBjYW5jZWxpbmcgZXhpc3RpbmcgZXhwaXJpbmcgdGltZXIgYmVjYXNlIHdlJ3JlIHBhc3QgZXhwaXJhdGlvbi5cIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiBpdCdzIG5lZ2F0aXZlLCBpdCB3aWxsIHN0aWxsIGZpcmVcclxuICAgICAgICAgICAgbGV0IGV4cGlyZWQgPSBkdXJhdGlvbiArIDE7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IHJlZ2lzdGVyaW5nIGV4cGlyZWQgdGltZXIgaW46XCIsIGV4cGlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuaW5pdChleHBpcmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5jYW5jZWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5sb2FkKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLnVubG9hZDogY2FuY2VsaW5nIGV4aXN0aW5nIGFjY2VzcyB0b2tlbiB0aW1lcnNcIik7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWNjZXNzVG9rZW5FeHBpcmluZyhjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBY2Nlc3NUb2tlbkV4cGlyZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVBY2Nlc3NUb2tlbkV4cGlyZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEludGVydmFsID0gMjAwMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGVja1Nlc3Npb25JRnJhbWUge1xyXG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IgPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSBjbGllbnRfaWQ7XHJcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gaW50ZXJ2YWwgfHwgRGVmYXVsdEludGVydmFsO1xyXG4gICAgICAgIHRoaXMuX3N0b3BPbkVycm9yID0gc3RvcE9uRXJyb3I7XHJcblxyXG4gICAgICAgIHZhciBpZHggPSB1cmwuaW5kZXhPZihcIi9cIiwgdXJsLmluZGV4T2YoXCIvL1wiKSArIDIpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lX29yaWdpbiA9IHVybC5zdWJzdHIoMCwgaWR4KTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWUgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuXHJcbiAgICAgICAgLy8gc2hvdGd1biBhcHByb2FjaFxyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS53aWR0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuaGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3JjID0gdXJsO1xyXG4gICAgfVxyXG4gICAgbG9hZCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWUub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9mcmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gdGhpcy5fbWVzc2FnZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9tZXNzYWdlKGUpIHtcclxuICAgICAgICBpZiAoZS5vcmlnaW4gPT09IHRoaXMuX2ZyYW1lX29yaWdpbiAmJlxyXG4gICAgICAgICAgICBlLnNvdXJjZSA9PT0gdGhpcy5fZnJhbWUuY29udGVudFdpbmRvd1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoZS5kYXRhID09PSBcImVycm9yXCIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkNoZWNrU2Vzc2lvbklGcmFtZTogZXJyb3IgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0b3BPbkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZS5kYXRhID09PSBcImNoYW5nZWRcIikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBjaGFuZ2VkIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZTogXCIgKyBlLmRhdGEgKyBcIiBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGFydChzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25fc3RhdGUgIT09IHNlc3Npb25fc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0XCIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uX3N0YXRlID0gc2Vzc2lvbl9zdGF0ZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzZW5kID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh0aGlzLl9jbGllbnRfaWQgKyBcIiBcIiArIHRoaXMuX3Nlc3Npb25fc3RhdGUsIHRoaXMuX2ZyYW1lX29yaWdpbik7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyB0cmlnZ2VyIG5vd1xyXG4gICAgICAgICAgICBzZW5kKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBhbmQgc2V0dXAgdGltZXJcclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoc2VuZCwgdGhpcy5faW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuX3Nlc3Npb25fc3RhdGUgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fdGltZXIpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lLnN0b3BcIik7XHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl90aW1lcik7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFJRnJhbWVOYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUocGFyYW1zKSB7XHJcbiAgICAgICAgcGFyYW1zLnBvcHVwV2luZG93RmVhdHVyZXMgPSAnaGlkZGVuPXllcyc7XHJcbiAgICAgICAgbGV0IHBvcHVwID0gbmV3IENvcmRvdmFQb3B1cFdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9wdXApO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cFdpbmRvdyB9IGZyb20gJy4vQ29yZG92YVBvcHVwV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUocGFyYW1zKSB7XHJcbiAgICAgICAgbGV0IHBvcHVwID0gbmV3IENvcmRvdmFQb3B1cFdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9wdXApO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sem9vbT1ubyc7XHJcbmNvbnN0IERlZmF1bHRQb3B1cFRhcmdldCA9IFwiX2JsYW5rXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YVBvcHVwV2luZG93IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZlYXR1cmVzID0gcGFyYW1zLnBvcHVwV2luZG93RmVhdHVyZXMgfHwgRGVmYXVsdFBvcHVwRmVhdHVyZXM7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSBwYXJhbXMucG9wdXBXaW5kb3dUYXJnZXQgfHwgRGVmYXVsdFBvcHVwVGFyZ2V0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucmVkaXJlY3RfdXJpID0gcGFyYW1zLnN0YXJ0VXJsO1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5jdG9yOiByZWRpcmVjdF91cmk6IFwiICsgdGhpcy5yZWRpcmVjdF91cmkpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pc0luQXBwQnJvd3Nlckluc3RhbGxlZChjb3Jkb3ZhTWV0YWRhdGEpIHtcclxuICAgICAgICByZXR1cm4gW1wiY29yZG92YS1wbHVnaW4taW5hcHBicm93c2VyXCIsIFwiY29yZG92YS1wbHVnaW4taW5hcHBicm93c2VyLmluYXBwYnJvd3NlclwiLCBcIm9yZy5hcGFjaGUuY29yZG92YS5pbmFwcGJyb3dzZXJcIl0uc29tZShmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29yZG92YU1ldGFkYXRhLmhhc093blByb3BlcnR5KG5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF3aW5kb3cuY29yZG92YSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiY29yZG92YSBpcyB1bmRlZmluZWRcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGNvcmRvdmFNZXRhZGF0YSA9IHdpbmRvdy5jb3Jkb3ZhLnJlcXVpcmUoXCJjb3Jkb3ZhL3BsdWdpbl9saXN0XCIpLm1ldGFkYXRhO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQoY29yZG92YU1ldGFkYXRhKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcihcIkluQXBwQnJvd3NlciBwbHVnaW4gbm90IGZvdW5kXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAgPSBjb3Jkb3ZhLkluQXBwQnJvd3Nlci5vcGVuKHBhcmFtcy51cmwsIHRoaXMudGFyZ2V0LCB0aGlzLmZlYXR1cmVzKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3cubmF2aWdhdGU6IHBvcHVwIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9leGl0Q2FsbGJhY2tFdmVudCA9IHRoaXMuX2V4aXRDYWxsYmFjay5iaW5kKHRoaXMpOyBcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQgPSB0aGlzLl9sb2FkU3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5hZGRFdmVudExpc3RlbmVyKFwiZXhpdFwiLCB0aGlzLl9leGl0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wdXAuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihcIkVycm9yIG9wZW5pbmcgcG9wdXAgd2luZG93XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb21pc2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRTdGFydENhbGxiYWNrKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnVybC5pbmRleE9mKHRoaXMucmVkaXJlY3RfdXJpKSA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdWNjZXNzKHsgdXJsOiBldmVudC51cmwgfSk7XHJcbiAgICAgICAgfSAgICBcclxuICAgIH1cclxuICAgIF9leGl0Q2FsbGJhY2sobWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2Vycm9yKG1lc3NhZ2UpOyAgICBcclxuICAgIH1cclxuICAgIFxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93OiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gY29yZG92YSBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcclxuICAgIH1cclxuICAgIF9lcnJvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9jbGVhbnVwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCl7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdzogY2xlYW5pbmcgdXAgcG9wdXBcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJleGl0XCIsIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2Fkc3RhcnRcIiwgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVycm9yUmVzcG9uc2UgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7ZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uLCBlcnJvcl91cmksIHN0YXRlLCBzZXNzaW9uX3N0YXRlfT17fVxyXG4gICAgKSB7XHJcbiAgICAgICAgIGlmICghZXJyb3Ipe1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJObyBlcnJvciBwYXNzZWQgdG8gRXJyb3JSZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXJyb3JcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdXBlcihlcnJvcl9kZXNjcmlwdGlvbiB8fCBlcnJvcik7XHJcblxyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiRXJyb3JSZXNwb25zZVwiO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IGVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gZXJyb3JfdXJpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uX3N0YXRlID0gc2Vzc2lvbl9zdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXZlbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcclxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRIYW5kbGVyKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnB1c2goY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUhhbmRsZXIoY2IpIHtcclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2FsbGJhY2tzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IGNiKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByYWlzZSguLi5wYXJhbXMpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJFdmVudDogUmFpc2luZyBldmVudDogXCIgKyB0aGlzLl9uYW1lKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3NbaV0oLi4ucGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuY29uc3QgdGltZXIgPSB7XHJcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGNiLCBkdXJhdGlvbikge1xyXG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbChjYiwgZHVyYXRpb24pO1xyXG4gICAgfSxcclxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcclxuICAgICAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChoYW5kbGUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxubGV0IHRlc3RpbmcgPSBmYWxzZTtcclxubGV0IHJlcXVlc3QgPSBudWxsO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdsb2JhbCB7XHJcblxyXG4gICAgc3RhdGljIF90ZXN0aW5nKCkge1xyXG4gICAgICAgIHRlc3RpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgbG9jYXRpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgc2Vzc2lvblN0b3JhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNldFhNTEh0dHBSZXF1ZXN0KG5ld1JlcXVlc3QpIHtcclxuICAgICAgICByZXF1ZXN0ID0gbmV3UmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IFhNTEh0dHBSZXF1ZXN0KCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCB8fCBYTUxIdHRwUmVxdWVzdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCB0aW1lcigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRpbWVyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IElGcmFtZVdpbmRvdyB9IGZyb20gJy4vSUZyYW1lV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJRnJhbWVOYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUocGFyYW1zKSB7XHJcbiAgICAgICAgbGV0IGZyYW1lID0gbmV3IElGcmFtZVdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZnJhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZU5hdmlnYXRvci5jYWxsYmFja1wiKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudCh1cmwpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFRpbWVvdXQgPSAxMDAwMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBJRnJhbWVXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gdGhpcy5fbWVzc2FnZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG5cclxuICAgICAgICAvLyBzaG90Z3VuIGFwcHJvYWNoXHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLndpZHRoID0gMDtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5oZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9mcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgdGltZW91dCA9IHBhcmFtcy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCBEZWZhdWx0VGltZW91dDtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5hdmlnYXRlOiBVc2luZyB0aW1lb3V0IG9mOlwiLCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLl90aW1lb3V0LmJpbmQodGhpcyksIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5zcmMgPSBwYXJhbXMudXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBmcmFtZSB3aW5kb3dcIik7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcclxuICAgIH1cclxuICAgIF9lcnJvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9jbGVhbnVwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3c6IGNsZWFudXBcIik7XHJcblxyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuX2ZyYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF90aW1lb3V0KCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy50aW1lb3V0XCIpO1xyXG4gICAgICAgIHRoaXMuX2Vycm9yKFwiRnJhbWUgd2luZG93IHRpbWVkIG91dFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVzc2FnZShlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm1lc3NhZ2VcIik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90aW1lciAmJlxyXG4gICAgICAgICAgICBlLm9yaWdpbiA9PT0gdGhpcy5fb3JpZ2luICYmXHJcbiAgICAgICAgICAgIGUuc291cmNlID09PSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCB1cmwgPSBlLmRhdGE7XHJcbiAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIGZyYW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBfb3JpZ2luKCkge1xyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5vdGlmeVBhcmVudCh1cmwpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50XCIpO1xyXG4gICAgICAgIGlmICh3aW5kb3cuZnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudDogcG9zdGluZyB1cmwgbWVzc2FnZSB0byBwYXJlbnRcIik7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHVybCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlXZWJTdG9yYWdle1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLl9kYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbShrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2UuZ2V0SXRlbVwiLCBrZXkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SXRlbShrZXksIHZhbHVlKXtcclxuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2Uuc2V0SXRlbVwiLCBrZXkpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oa2V5KXtcclxuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2UucmVtb3ZlSXRlbVwiLCBrZXkpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9kYXRhW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxlbmd0aCgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fZGF0YSkubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGtleShpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKVtpbmRleF07XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9IGZyb20gJy4vY3J5cHRvL2pzcnNhc2lnbic7XHJcbmltcG9ydCBnZXRKb3NlVXRpbCBmcm9tICcuL0pvc2VVdGlsSW1wbCc7XHJcblxyXG5leHBvcnQgY29uc3QgSm9zZVV0aWwgPSBnZXRKb3NlVXRpbCh7IGp3cywgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4LCBBbGxvd2VkU2lnbmluZ0FsZ3MgfSk7XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpvc2VVdGlsKHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9KSB7XHJcbiAgICByZXR1cm4gY2xhc3MgSm9zZVV0aWwge1xyXG5cclxuICAgICAgICBzdGF0aWMgcGFyc2VKd3Qoand0KSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpvc2VVdGlsLnBhcnNlSnd0XCIpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRva2VuID0gandzLkpXUy5wYXJzZShqd3QpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHRva2VuLmhlYWRlck9iaixcclxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB0b2tlbi5wYXlsb2FkT2JqXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIHZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpvc2VVdGlsLnZhbGlkYXRlSnd0XCIpO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkua3R5ID09PSBcIlJTQVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5lICYmIGtleS5uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IEtleVV0aWwuZ2V0S2V5KGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkueDVjICYmIGtleS54NWMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZXggPSBiNjR0b2hleChrZXkueDVjWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydEhleChoZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLnZhbGlkYXRlSnd0OiBSU0Ega2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJSU0Ega2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5rdHkgPT09IFwiRUNcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuY3J2ICYmIGtleS54ICYmIGtleS55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IEtleVV0aWwuZ2V0S2V5KGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IEVDIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRUMga2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLnZhbGlkYXRlSnd0OiBVbnN1cHBvcnRlZCBrZXkgdHlwZVwiLCBrZXkgJiYga2V5Lmt0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGtleSB0eXBlOiBcIiArIGtleSAmJiBrZXkua3R5KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpvc2VVdGlsLl92YWxpZGF0ZUp3dChqd3QsIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlICYmIGUubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIkpXVCB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIHZhbGlkYXRlSnd0QXR0cmlidXRlcyhqd3QsIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgaWYgKCFjbG9ja1NrZXcpIHtcclxuICAgICAgICAgICAgICAgIGNsb2NrU2tldyA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghbm93KSB7XHJcbiAgICAgICAgICAgICAgICBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwYXlsb2FkID0gSm9zZVV0aWwucGFyc2VKd3Qoand0KS5wYXlsb2FkO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlzcykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpc3N1ZXIgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJpc3N1ZXIgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBheWxvYWQuaXNzICE9PSBpc3N1ZXIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW5cIiwgcGF5bG9hZC5pc3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgaXNzdWVyIGluIHRva2VuOiBcIiArIHBheWxvYWQuaXNzKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghcGF5bG9hZC5hdWQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogYXVkIHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXVkIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB2YWxpZEF1ZGllbmNlID0gcGF5bG9hZC5hdWQgPT09IGF1ZGllbmNlIHx8IChBcnJheS5pc0FycmF5KHBheWxvYWQuYXVkKSAmJiBwYXlsb2FkLmF1ZC5pbmRleE9mKGF1ZGllbmNlKSA+PSAwKTtcclxuICAgICAgICAgICAgaWYgKCF2YWxpZEF1ZGllbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IEludmFsaWQgYXVkaWVuY2UgaW4gdG9rZW5cIiwgcGF5bG9hZC5hdWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXVkaWVuY2UgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5hdWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC5henAgJiYgcGF5bG9hZC5henAgIT09IGF1ZGllbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IEludmFsaWQgYXpwIGluIHRva2VuXCIsIHBheWxvYWQuYXpwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIGF6cCBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmF6cCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvd2VyTm93ID0gbm93ICsgY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICAgICAgdmFyIHVwcGVyTm93ID0gbm93IC0gY2xvY2tTa2V3O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5pYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlhdCB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJpYXQgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJOb3cgPCBwYXlsb2FkLmlhdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaWF0IGlzIGluIHRoZSBmdXR1cmVcIiwgcGF5bG9hZC5pYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJpYXQgaXMgaW4gdGhlIGZ1dHVyZTogXCIgKyBwYXlsb2FkLmlhdCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLm5iZiAmJiBsb3dlck5vdyA8IHBheWxvYWQubmJmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBuYmYgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLm5iZik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIm5iZiBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQubmJmKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmV4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogZXhwIHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmV4cCA8IHVwcGVyTm93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgaXMgaW4gdGhlIHBhc3RcIiwgcGF5bG9hZC5leHApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJleHAgaXMgaW4gdGhlIHBhc3Q6XCIgKyBwYXlsb2FkLmV4cCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIF92YWxpZGF0ZUp3dChqd3QsIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIEpvc2VVdGlsLnZhbGlkYXRlSnd0QXR0cmlidXRlcyhqd3QsIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghandzLkpXUy52ZXJpZnkoand0LCBrZXksIEFsbG93ZWRTaWduaW5nQWxncykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBzaWduYXR1cmUgdmFsaWRhdGlvbiBmYWlsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJzaWduYXR1cmUgdmFsaWRhdGlvbiBmYWlsZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKGUgJiYgZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJzaWduYXR1cmUgdmFsaWRhdGlvbiBmYWlsZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRpYyBoYXNoU3RyaW5nKHZhbHVlLCBhbGcpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjcnlwdG8uVXRpbC5oYXNoU3RyaW5nKHZhbHVlLCBhbGcpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRpYyBoZXhUb0Jhc2U2NFVybCh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhleHRvYjY0dSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBhZGRpdGlvbmFsQ29udGVudFR5cGVzID0gbnVsbCwgXHJcbiAgICAgICAgWE1MSHR0cFJlcXVlc3RDdG9yID0gR2xvYmFsLlhNTEh0dHBSZXF1ZXN0LCBcclxuICAgICAgICBqd3RIYW5kbGVyID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxDb250ZW50VHlwZXMgJiYgQXJyYXkuaXNBcnJheShhZGRpdGlvbmFsQ29udGVudFR5cGVzKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRUeXBlcyA9IGFkZGl0aW9uYWxDb250ZW50VHlwZXMuc2xpY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRlbnRUeXBlcy5wdXNoKCdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICAgICAgaWYgKGp3dEhhbmRsZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2p3dCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fWE1MSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdEN0b3I7XHJcbiAgICAgICAgdGhpcy5fand0SGFuZGxlciA9IGp3dEhhbmRsZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SnNvbih1cmwsIHRva2VuKSB7XHJcbiAgICAgICAgaWYgKCF1cmwpe1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uLCB1cmw6IFwiLCB1cmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICByZXEub3BlbignR0VUJywgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5fY29udGVudFR5cGVzO1xyXG4gICAgICAgICAgICB2YXIgand0SGFuZGxlciA9IHRoaXMuX2p3dEhhbmRsZXI7XHJcblxyXG4gICAgICAgICAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgcmVxLnN0YXR1cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gXCJhcHBsaWNhdGlvbi9qd3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgand0SGFuZGxlcihyZXEpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIENvbnRlbnQtVHlwZTogXCIgKyBjb250ZW50VHlwZSArIFwiLCBmcm9tIFVSTDogXCIgKyB1cmwpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCArIFwiIChcIiArIHJlcS5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IG5ldHdvcmsgZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJOZXR3b3JrIEVycm9yXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogdG9rZW4gcGFzc2VkLCBzZXR0aW5nIEF1dGhvcml6YXRpb24gaGVhZGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiICsgdG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXEuc2VuZCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RGb3JtKHVybCwgcGF5bG9hZCkge1xyXG4gICAgICAgIGlmICghdXJsKXtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLnBvc3RGb3JtLCB1cmw6IFwiLCB1cmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICByZXEub3BlbignUE9TVCcsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYWxsb3dlZENvbnRlbnRUeXBlcyA9IHRoaXMuX2NvbnRlbnRUeXBlcztcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgcmVxLnN0YXR1cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIENvbnRlbnQtVHlwZTogXCIgKyBjb250ZW50VHlwZSArIFwiLCBmcm9tIFVSTDogXCIgKyB1cmwpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDQwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIGZyb20gc2VydmVyOiBcIiwgcGF5bG9hZC5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocGF5bG9hZC5lcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IocmVxLnN0YXR1c1RleHQgKyBcIiAoXCIgKyByZXEuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbGV0IGJvZHkgPSBcIlwiO1xyXG4gICAgICAgICAgICBmb3IobGV0IGtleSBpbiBwYXlsb2FkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcGF5bG9hZFtrZXldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gXCImXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gXCI9XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcclxuICAgICAgICAgICAgcmVxLnNlbmQoYm9keSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxubGV0IG5vcExvZ2dlciA9IHtcclxuICAgIGRlYnVnKCl7fSxcclxuICAgIGluZm8oKXt9LFxyXG4gICAgd2Fybigpe30sXHJcbiAgICBlcnJvcigpe31cclxufTtcclxuXHJcbmNvbnN0IE5PTkUgPSAwO1xyXG5jb25zdCBFUlJPUiA9IDE7XHJcbmNvbnN0IFdBUk4gPSAyO1xyXG5jb25zdCBJTkZPID0gMztcclxuY29uc3QgREVCVUcgPSA0O1xyXG5cclxubGV0IGxvZ2dlcjtcclxubGV0IGxldmVsO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZyB7XHJcbiAgICBzdGF0aWMgZ2V0IE5PTkUoKSB7cmV0dXJuIE5PTkV9O1xyXG4gICAgc3RhdGljIGdldCBFUlJPUigpIHtyZXR1cm4gRVJST1J9O1xyXG4gICAgc3RhdGljIGdldCBXQVJOKCkge3JldHVybiBXQVJOfTtcclxuICAgIHN0YXRpYyBnZXQgSU5GTygpIHtyZXR1cm4gSU5GT307XHJcbiAgICBzdGF0aWMgZ2V0IERFQlVHKCkge3JldHVybiBERUJVR307XHJcbiAgICBcclxuICAgIHN0YXRpYyByZXNldCgpe1xyXG4gICAgICAgIGxldmVsID0gSU5GTztcclxuICAgICAgICBsb2dnZXIgPSBub3BMb2dnZXI7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbGV2ZWwoKXtcclxuICAgICAgICByZXR1cm4gbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2V0IGxldmVsKHZhbHVlKXtcclxuICAgICAgICBpZiAoTk9ORSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxldmVsID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbG9nZ2VyKCl7XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbG9nZ2VyKHZhbHVlKXtcclxuICAgICAgICBpZiAoIXZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8pIHtcclxuICAgICAgICAgICAgLy8ganVzdCB0byBzdGF5IGJhY2t3YXJkcyBjb21wYXQuIGNhbiByZW1vdmUgaW4gMi4wXHJcbiAgICAgICAgICAgIHZhbHVlLmRlYnVnID0gdmFsdWUuaW5mbztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5kZWJ1ZyAmJiB2YWx1ZS5pbmZvICYmIHZhbHVlLndhcm4gJiYgdmFsdWUuZXJyb3Ipe1xyXG4gICAgICAgICAgICBsb2dnZXIgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nZ2VyXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGRlYnVnKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBpbmZvKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBJTkZPKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgd2FybiguLi5hcmdzKXtcclxuICAgICAgICBpZiAobGV2ZWwgPj0gV0FSTil7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGVycm9yKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBFUlJPUil7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvci5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuTG9nLnJlc2V0KCk7XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZTogTm8gc2V0dGluZ3MgcGFzc2VkIHRvIE1ldGFkYXRhU2VydmljZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcihbJ2FwcGxpY2F0aW9uL2p3ay1zZXQranNvbiddKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZXRhZGF0YSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBSZXR1cm5pbmcgbWV0YWRhdGEgZnJvbSBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBObyBhdXRob3JpdHkgb3IgbWV0YWRhdGFVcmwgY29uZmlndXJlZCBvbiBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YTogZ2V0dGluZyBtZXRhZGF0YSBmcm9tXCIsIHRoaXMubWV0YWRhdGFVcmwpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbih0aGlzLm1ldGFkYXRhVXJsKVxyXG4gICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IGpzb24gcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJc3N1ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJpc3N1ZXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiYXV0aG9yaXphdGlvbl9lbmRwb2ludFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VySW5mb0VuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwidXNlcmluZm9fZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG9rZW5FbmRwb2ludChvcHRpb25hbD10cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJ0b2tlbl9lbmRwb2ludFwiLCBvcHRpb25hbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiY2hlY2tfc2Vzc2lvbl9pZnJhbWVcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW5kU2Vzc2lvbkVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiZW5kX3Nlc3Npb25fZW5kcG9pbnRcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwicmV2b2NhdGlvbl9lbmRwb2ludFwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRLZXlzRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJqd2tzX3VyaVwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0TWV0YWRhdGFQcm9wZXJ0eShuYW1lLCBvcHRpb25hbD1mYWxzZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5IGZvcjogXCIgKyBuYW1lKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IG1ldGFkYXRhIHJlY2lldmVkXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhW25hbWVdID09PSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWwgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIG9wdGlvbmFsIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbWV0YWRhdGFbbmFtZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2lnbmluZ0tleXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogUmV0dXJuaW5nIHNpZ25pbmdLZXlzIGZyb20gc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJqd2tzX3VyaVwiKS50aGVuKGp3a3NfdXJpID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBqd2tzX3VyaSByZWNlaXZlZFwiLCBqd2tzX3VyaSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbihqd2tzX3VyaSkudGhlbihrZXlTZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBrZXkgc2V0IHJlY2VpdmVkXCIsIGtleVNldCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXlTZXQua2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogTWlzc2luZyBrZXlzIG9uIGtleXNldFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGtleXMgb24ga2V5c2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzID0ga2V5U2V0LmtleXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9FcnJvclJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gJy4vU2lnbmluUmVxdWVzdC5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlc3BvbnNlIH0gZnJvbSAnLi9TaWduaW5SZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25vdXRSZXF1ZXN0IH0gZnJvbSAnLi9TaWdub3V0UmVxdWVzdC5qcyc7XHJcbmltcG9ydCB7IFNpZ25vdXRSZXNwb25zZSB9IGZyb20gJy4vU2lnbm91dFJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbmluU3RhdGUgfSBmcm9tICcuL1NpZ25pblN0YXRlLmpzJztcclxuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL1N0YXRlLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBPaWRjQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzID0ge30pIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3MgaW5zdGFuY2VvZiBPaWRjQ2xpZW50U2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzID0gbmV3IE9pZGNDbGllbnRTZXR0aW5ncyhzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc3RhdGVTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5zdGF0ZVN0b3JlO1xyXG4gICAgfVxyXG4gICAgZ2V0IF92YWxpZGF0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MudmFsaWRhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MubWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbmluUmVxdWVzdCh7XHJcbiAgICAgICAgcmVzcG9uc2VfdHlwZSwgc2NvcGUsIHJlZGlyZWN0X3VyaSxcclxuICAgICAgICAvLyBkYXRhIHdhcyBtZWFudCB0byBiZSB0aGUgcGxhY2UgYSBjYWxsZXIgY291bGQgaW5kaWNhdGUgdGhlIGRhdGEgdG9cclxuICAgICAgICAvLyBoYXZlIHJvdW5kIHRyaXBwZWQsIGJ1dCBwZW9wbGUgd2VyZSBnZXR0aW5nIGNvbmZ1c2VkLCBzbyBpIGFkZGVkIHN0YXRlIChzaW5jZSB0aGF0IG1hdGNoZXMgdGhlIHNwZWMpXHJcbiAgICAgICAgLy8gYW5kIHNvIG5vdyBpZiBkYXRhIGlzIG5vdCBwYXNzZWQsIGJ1dCBzdGF0ZSBpcyB0aGVuIHN0YXRlIHdpbGwgYmUgdXNlZFxyXG4gICAgICAgIGRhdGEsIHN0YXRlLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsXHJcbiAgICAgICAgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCByZXNwb25zZV9tb2RlLCBleHRyYVF1ZXJ5UGFyYW1zLCBleHRyYVRva2VuUGFyYW1zLCByZXF1ZXN0X3R5cGUsIHNraXBVc2VySW5mbyB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWduaW5SZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICBsZXQgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgIHJlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlIHx8IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgc2NvcGUgPSBzY29wZSB8fCB0aGlzLl9zZXR0aW5ncy5zY29wZTtcclxuICAgICAgICByZWRpcmVjdF91cmkgPSByZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG5cclxuICAgICAgICAvLyBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50IGFyZW4ndCBhbGxvd2VkIG9uIF9zZXR0aW5nc1xyXG4gICAgICAgIHByb21wdCA9IHByb21wdCB8fCB0aGlzLl9zZXR0aW5ncy5wcm9tcHQ7XHJcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkgfHwgdGhpcy5fc2V0dGluZ3MuZGlzcGxheTtcclxuICAgICAgICBtYXhfYWdlID0gbWF4X2FnZSB8fCB0aGlzLl9zZXR0aW5ncy5tYXhfYWdlO1xyXG4gICAgICAgIHVpX2xvY2FsZXMgPSB1aV9sb2NhbGVzIHx8IHRoaXMuX3NldHRpbmdzLnVpX2xvY2FsZXM7XHJcbiAgICAgICAgYWNyX3ZhbHVlcyA9IGFjcl92YWx1ZXMgfHwgdGhpcy5fc2V0dGluZ3MuYWNyX3ZhbHVlcztcclxuICAgICAgICByZXNvdXJjZSA9IHJlc291cmNlIHx8IHRoaXMuX3NldHRpbmdzLnJlc291cmNlO1xyXG4gICAgICAgIHJlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlIHx8IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGU7XHJcbiAgICAgICAgZXh0cmFRdWVyeVBhcmFtcyA9IGV4dHJhUXVlcnlQYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFRdWVyeVBhcmFtcztcclxuXHJcbiAgICAgICAgbGV0IGF1dGhvcml0eSA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgaWYgKFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpICYmIHJlc3BvbnNlX3R5cGUgIT09IFwiY29kZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJPcGVuSUQgQ29ubmVjdCBoeWJyaWQgZmxvdyBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3Q6IFJlY2VpdmVkIGF1dGhvcml6YXRpb24gZW5kcG9pbnRcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaWduaW5SZXF1ZXN0ID0gbmV3IFNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X2lkLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICAgICAgICAgIHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICAgICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgICAgIHNraXBVc2VySW5mb1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzaWduaW5TdGF0ZSA9IHNpZ25pblJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVTdG9yZS5zZXQoc2lnbmluU3RhdGUuaWQsIHNpZ25pblN0YXRlLnRvU3RvcmFnZVN0cmluZygpKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaW5SZXF1ZXN0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlXCIpO1xyXG5cclxuICAgICAgICBsZXQgdXNlUXVlcnkgPSB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlID09PSBcInF1ZXJ5XCIgfHwgXHJcbiAgICAgICAgICAgICghdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZSAmJiBTaWduaW5SZXF1ZXN0LmlzQ29kZSh0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlKSk7XHJcbiAgICAgICAgbGV0IGRlbGltaXRlciA9IHVzZVF1ZXJ5ID8gXCI/XCIgOiBcIiNcIjtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25pblJlc3BvbnNlKHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN0YXRlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShyZXNwb25zZS5zdGF0ZSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbm91dFJlcXVlc3Qoe2lkX3Rva2VuX2hpbnQsIGRhdGEsIHN0YXRlLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEVuZFNlc3Npb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IE5vIGVuZCBzZXNzaW9uIGVuZHBvaW50IHVybCByZXR1cm5lZFwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBSZWNlaXZlZCBlbmQgc2Vzc2lvbiBlbmRwb2ludFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgU2lnbm91dFJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faGludCxcclxuICAgICAgICAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdF90eXBlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25vdXRTdGF0ZSA9IHJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIGlmIChzaWdub3V0U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFNpZ25vdXQgcmVxdWVzdCBoYXMgc3RhdGUgdG8gcGVyc2lzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVTdG9yZS5zZXQoc2lnbm91dFN0YXRlLmlkLCBzaWdub3V0U3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCByZW1vdmVTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBTaWdub3V0UmVzcG9uc2UodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLndhcm4oXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogUmVzcG9uc2Ugd2FzIGVycm9yOiBcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3VuZGVmaW5lZCwgcmVzcG9uc2V9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUtleSA9IHJlc3BvbnNlLnN0YXRlO1xyXG5cclxuICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG5cclxuICAgICAgICB2YXIgc3RhdGVBcGkgPSByZW1vdmVTdGF0ZSA/IHN0YXRlU3RvcmUucmVtb3ZlLmJpbmQoc3RhdGVTdG9yZSkgOiBzdGF0ZVN0b3JlLmdldC5iaW5kKHN0YXRlU3RvcmUpO1xyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShzdGF0ZUtleSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmVkU3RhdGVTdHJpbmcpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NTaWdub3V0UmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCB0cnVlKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlOiBObyBzdGF0ZSBmcm9tIHN0b3JhZ2U7IHNraXBwaW5nIHZhbGlkYXRpbmcgcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclN0YWxlU3RhdGUoc3RhdGVTdG9yZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY2xlYXJTdGFsZVN0YXRlXCIpO1xyXG5cclxuICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG5cclxuICAgICAgICByZXR1cm4gU3RhdGUuY2xlYXJTdGFsZVN0YXRlKHN0YXRlU3RvcmUsIHRoaXMuc2V0dGluZ3Muc3RhbGVTdGF0ZUFnZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVZhbGlkYXRvciB9IGZyb20gJy4vUmVzcG9uc2VWYWxpZGF0b3IuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcblxyXG5jb25zdCBPaWRjTWV0YWRhdGFVcmxQYXRoID0gJy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJztcclxuXHJcbmNvbnN0IERlZmF1bHRSZXNwb25zZVR5cGUgPSBcImlkX3Rva2VuXCI7XHJcbmNvbnN0IERlZmF1bHRTY29wZSA9IFwib3BlbmlkXCI7XHJcbmNvbnN0IERlZmF1bHRTdGFsZVN0YXRlQWdlID0gNjAgKiAxNTsgLy8gc2Vjb25kc1xyXG5jb25zdCBEZWZhdWx0Q2xvY2tTa2V3SW5TZWNvbmRzID0gNjAgKiA1O1xyXG5cclxuZXhwb3J0IGNsYXNzIE9pZGNDbGllbnRTZXR0aW5ncyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgLy8gbWV0YWRhdGEgcmVsYXRlZFxyXG4gICAgICAgIGF1dGhvcml0eSwgbWV0YWRhdGFVcmwsIG1ldGFkYXRhLCBzaWduaW5nS2V5cyxcclxuICAgICAgICAvLyBjbGllbnQgcmVsYXRlZFxyXG4gICAgICAgIGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCwgcmVzcG9uc2VfdHlwZSA9IERlZmF1bHRSZXNwb25zZVR5cGUsIHNjb3BlID0gRGVmYXVsdFNjb3BlLFxyXG4gICAgICAgIHJlZGlyZWN0X3VyaSwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIC8vIG9wdGlvbmFsIHByb3RvY29sXHJcbiAgICAgICAgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBhY3JfdmFsdWVzLCByZXNvdXJjZSwgcmVzcG9uc2VfbW9kZSxcclxuICAgICAgICAvLyBiZWhhdmlvciBmbGFnc1xyXG4gICAgICAgIGZpbHRlclByb3RvY29sQ2xhaW1zID0gdHJ1ZSwgbG9hZFVzZXJJbmZvID0gdHJ1ZSxcclxuICAgICAgICBzdGFsZVN0YXRlQWdlID0gRGVmYXVsdFN0YWxlU3RhdGVBZ2UsIGNsb2NrU2tldyA9IERlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMsXHJcbiAgICAgICAgdXNlckluZm9Kd3RJc3N1ZXIgPSAnT1AnLFxyXG4gICAgICAgIC8vIG90aGVyIGJlaGF2aW9yXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IG5ldyBXZWJTdG9yYWdlU3RhdGVTdG9yZSgpLFxyXG4gICAgICAgIFJlc3BvbnNlVmFsaWRhdG9yQ3RvciA9IFJlc3BvbnNlVmFsaWRhdG9yLFxyXG4gICAgICAgIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICAgICAgLy8gZXh0cmEgcXVlcnkgcGFyYW1zXHJcbiAgICAgICAgZXh0cmFRdWVyeVBhcmFtcyA9IHt9XHJcbiAgICB9ID0ge30pIHtcclxuXHJcbiAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gYXV0aG9yaXR5O1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gbWV0YWRhdGFVcmw7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB0aGlzLl9zaWduaW5nS2V5cyA9IHNpZ25pbmdLZXlzO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSBjbGllbnRfaWQ7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X3NlY3JldCA9IGNsaWVudF9zZWNyZXQ7XHJcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfdHlwZSA9IHJlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgdGhpcy5fc2NvcGUgPSBzY29wZTtcclxuICAgICAgICB0aGlzLl9yZWRpcmVjdF91cmkgPSByZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9tcHQgPSBwcm9tcHQ7XHJcbiAgICAgICAgdGhpcy5fZGlzcGxheSA9IGRpc3BsYXk7XHJcbiAgICAgICAgdGhpcy5fbWF4X2FnZSA9IG1heF9hZ2U7XHJcbiAgICAgICAgdGhpcy5fdWlfbG9jYWxlcyA9IHVpX2xvY2FsZXM7XHJcbiAgICAgICAgdGhpcy5fYWNyX3ZhbHVlcyA9IGFjcl92YWx1ZXM7XHJcbiAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZTtcclxuICAgICAgICB0aGlzLl9yZXNwb25zZV9tb2RlID0gcmVzcG9uc2VfbW9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMgPSAhIWZpbHRlclByb3RvY29sQ2xhaW1zO1xyXG4gICAgICAgIHRoaXMuX2xvYWRVc2VySW5mbyA9ICEhbG9hZFVzZXJJbmZvO1xyXG4gICAgICAgIHRoaXMuX3N0YWxlU3RhdGVBZ2UgPSBzdGFsZVN0YXRlQWdlO1xyXG4gICAgICAgIHRoaXMuX2Nsb2NrU2tldyA9IGNsb2NrU2tldztcclxuICAgICAgICB0aGlzLl91c2VySW5mb0p3dElzc3VlciA9IHVzZXJJbmZvSnd0SXNzdWVyO1xyXG5cclxuICAgICAgICB0aGlzLl9zdGF0ZVN0b3JlID0gc3RhdGVTdG9yZTtcclxuICAgICAgICB0aGlzLl92YWxpZGF0b3IgPSBuZXcgUmVzcG9uc2VWYWxpZGF0b3JDdG9yKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0gdHlwZW9mIGV4dHJhUXVlcnlQYXJhbXMgPT09ICdvYmplY3QnID8gZXh0cmFRdWVyeVBhcmFtcyA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsaWVudCBjb25maWdcclxuICAgIGdldCBjbGllbnRfaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcclxuICAgIH1cclxuICAgIHNldCBjbGllbnRfaWQodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudF9pZCkge1xyXG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxyXG4gICAgICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfY2xpZW50X2lkOiBjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGNsaWVudF9zZWNyZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9zZWNyZXQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfdHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfdHlwZTtcclxuICAgIH1cclxuICAgIGdldCBzY29wZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGU7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIG9wdGlvbmFsIHByb3RvY29sIHBhcmFtc1xyXG4gICAgZ2V0IHByb21wdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbXB0O1xyXG4gICAgfVxyXG4gICAgZ2V0IGRpc3BsYXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXk7XHJcbiAgICB9XHJcbiAgICBnZXQgbWF4X2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWF4X2FnZTtcclxuICAgIH1cclxuICAgIGdldCB1aV9sb2NhbGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91aV9sb2NhbGVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IGFjcl92YWx1ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fjcl92YWx1ZXM7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzb3VyY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc3BvbnNlX21vZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlX21vZGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIG1ldGFkYXRhXHJcbiAgICBnZXQgYXV0aG9yaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpdHk7XHJcbiAgICB9XHJcbiAgICBzZXQgYXV0aG9yaXR5KHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgLy8gb25lLXRpbWUgc2V0IG9ubHlcclxuICAgICAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50U2V0dGluZ3Muc2V0X2F1dGhvcml0eTogYXV0aG9yaXR5IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImF1dGhvcml0eSBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVVybCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX21ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5hdXRob3JpdHk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybFt0aGlzLl9tZXRhZGF0YVVybC5sZW5ndGggLSAxXSAhPT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gJy8nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gT2lkY01ldGFkYXRhVXJsUGF0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldHRhYmxlL2NhY2hhYmxlIG1ldGFkYXRhIHZhbHVlc1xyXG4gICAgZ2V0IG1ldGFkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YTtcclxuICAgIH1cclxuICAgIHNldCBtZXRhZGF0YSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpZ25pbmdLZXlzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5nS2V5cztcclxuICAgIH1cclxuICAgIHNldCBzaWduaW5nS2V5cyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYmVoYXZpb3IgZmxhZ3NcclxuICAgIGdldCBmaWx0ZXJQcm90b2NvbENsYWltcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyUHJvdG9jb2xDbGFpbXM7XHJcbiAgICB9XHJcbiAgICBnZXQgbG9hZFVzZXJJbmZvKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlckluZm87XHJcbiAgICB9XHJcbiAgICBnZXQgc3RhbGVTdGF0ZUFnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhbGVTdGF0ZUFnZTtcclxuICAgIH1cclxuICAgIGdldCBjbG9ja1NrZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrU2tldztcclxuICAgIH1cclxuICAgIGdldCB1c2VySW5mb0p3dElzc3VlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlckluZm9Kd3RJc3N1ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHN0YXRlU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlU3RvcmU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXh0cmEgcXVlcnkgcGFyYW1zXHJcbiAgICBnZXQgZXh0cmFRdWVyeVBhcmFtcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFRdWVyeVBhcmFtcztcclxuICAgIH1cclxuICAgIHNldCBleHRyYVF1ZXJ5UGFyYW1zKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpe1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFBvcHVwV2luZG93IH0gZnJvbSAnLi9Qb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBOYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUocGFyYW1zKSB7XHJcbiAgICAgICAgbGV0IHBvcHVwID0gbmV3IFBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbGJhY2sodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBOYXZpZ2F0b3IuY2FsbGJhY2tcIik7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIFBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcih1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcclxuXHJcbmNvbnN0IENoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCA9IDUwMDtcclxuY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx3aWR0aD01MDAsaGVpZ2h0PTUwMCxsZWZ0PTEwMCx0b3A9MTAwOyc7XHJcbi8vY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx3aWR0aD01MDAsaGVpZ2h0PTUwMCxsZWZ0PTEwMCx0b3A9MTAwO3Jlc2l6YWJsZT15ZXMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQb3B1cFdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IHRhcmdldCA9IHBhcmFtcy5wb3B1cFdpbmRvd1RhcmdldCB8fCBEZWZhdWx0UG9wdXBUYXJnZXQ7XHJcbiAgICAgICAgbGV0IGZlYXR1cmVzID0gcGFyYW1zLnBvcHVwV2luZG93RmVhdHVyZXMgfHwgRGVmYXVsdFBvcHVwRmVhdHVyZXM7XHJcblxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gd2luZG93Lm9wZW4oJycsIHRhcmdldCwgZmVhdHVyZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jdG9yOiBwb3B1cCBzdWNjZXNzZnVsbHkgY3JlYXRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyID0gd2luZG93LnNldEludGVydmFsKHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWQuYmluZCh0aGlzKSwgQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb21pc2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb3B1cCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIlBvcHVwV2luZG93Lm5hdmlnYXRlOiBFcnJvciBvcGVuaW5nIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIlBvcHVwV2luZG93Lm5hdmlnYXRlOiBubyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IFNldHRpbmcgVVJMIGluIHBvcHVwXCIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5faWQgPSBwYXJhbXMuaWQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pZCkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93W1wicG9wdXBDYWxsYmFja19cIiArIHBhcmFtcy5pZF0gPSB0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5mb2N1cygpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC53aW5kb3cubG9jYXRpb24gPSBwYXJhbXMudXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2s6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBwb3B1cCB3aW5kb3dcIik7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBMb2cuZXJyb3IoXCJQb3B1cFdpbmRvdy5lcnJvcjogXCIsIG1lc3NhZ2UpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfY2xlYW51cChrZWVwT3Blbikge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNsZWFudXBcIik7XHJcblxyXG4gICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lcik7XHJcbiAgICAgICAgdGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgZGVsZXRlIHdpbmRvd1tcInBvcHVwQ2FsbGJhY2tfXCIgKyB0aGlzLl9pZF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCAmJiAha2VlcE9wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja0ZvclBvcHVwQ2xvc2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9wdXAgfHwgdGhpcy5fcG9wdXAuY2xvc2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXAgd2luZG93IGNsb3NlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2NhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKGtlZXBPcGVuKTtcclxuXHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jYWxsYmFjayBzdWNjZXNzXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdWNjZXNzKHsgdXJsOiB1cmwgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jYWxsYmFjazogSW52YWxpZCByZXNwb25zZSBmcm9tIHBvcHVwXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIkludmFsaWQgcmVzcG9uc2UgZnJvbSBwb3B1cFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5vdGlmeU9wZW5lcih1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpIHtcclxuICAgICAgICBpZiAod2luZG93Lm9wZW5lcikge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgfHwgd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gXCJwb3B1cENhbGxiYWNrX1wiICsgZGF0YS5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB3aW5kb3cub3BlbmVyW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IHBhc3NpbmcgdXJsIG1lc3NhZ2UgdG8gb3BlbmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh1cmwsIGtlZXBPcGVuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyBtYXRjaGluZyBjYWxsYmFjayBmb3VuZCBvbiBvcGVuZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIHN0YXRlIGZvdW5kIGluIHJlc3BvbnNlIHVybFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIHdpbmRvdy5vcGVuZXIuIENhbid0IGNvbXBsZXRlIG5vdGlmaWNhdGlvbi5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWRpcmVjdE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZSgpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlZGlyZWN0TmF2aWdhdG9yLm5hdmlnYXRlOiBObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhcmFtcy51c2VSZXBsYWNlVG9OYXZpZ2F0ZSkge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShwYXJhbXMudXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHVybCgpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IFVzZXJJbmZvU2VydmljZSB9IGZyb20gJy4vVXNlckluZm9TZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgVG9rZW5DbGllbnQgfSBmcm9tICcuL1Rva2VuQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4vRXJyb3JSZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5jb25zdCBQcm90b2NvbENsYWltcyA9IFtcIm5vbmNlXCIsIFwiYXRfaGFzaFwiLCBcImlhdFwiLCBcIm5iZlwiLCBcImV4cFwiLCBcImF1ZFwiLCBcImlzc1wiLCBcImNfaGFzaFwiXTtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZXNwb25zZVZhbGlkYXRvciB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIFxyXG4gICAgICAgIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICAgICAgVXNlckluZm9TZXJ2aWNlQ3RvciA9IFVzZXJJbmZvU2VydmljZSwgXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbCxcclxuICAgICAgICBUb2tlbkNsaWVudEN0b3IgPSBUb2tlbkNsaWVudCkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkIHRvIFJlc3BvbnNlVmFsaWRhdG9yXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJJbmZvU2VydmljZSA9IG5ldyBVc2VySW5mb1NlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9qb3NlVXRpbCA9IGpvc2VVdGlsO1xyXG4gICAgICAgIHRoaXMuX3Rva2VuQ2xpZW50ID0gbmV3IFRva2VuQ2xpZW50Q3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVTaWduaW5SZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1NpZ25pblBhcmFtcyhzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiBzdGF0ZSBwcm9jZXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVRva2VucyhzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogdG9rZW5zIHZhbGlkYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzQ2xhaW1zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogY2xhaW1zIHByb2Nlc3NlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVTaWdub3V0UmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlLmlkICE9PSByZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogU3RhdGUgZG9lcyBub3QgbWF0Y2hcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxyXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGJvdGggc3VjY2VzcyAmIGVycm9yIG91dGNvbWVzXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IHN0YXRlIHZhbGlkYXRlZFwiKTtcclxuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzU2lnbmluUGFyYW1zKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiU3RhdGUgZG9lcyBub3QgbWF0Y2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGNsaWVudF9pZCBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGNsaWVudF9pZCBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm8gYXV0aG9yaXR5IG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9uIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHRoZSBhdXRob3JpdHkgdG8gYmUgbG9hZGVkIGZyb20gdGhlIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSA9IHN0YXRlLmF1dGhvcml0eTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZW5zdXJlIHdlJ3JlIHVzaW5nIHRoZSBjb3JyZWN0IGF1dGhvcml0eSBpZiB0aGUgYXV0aG9yaXR5IGlzIG5vdCBsb2FkZWQgZnJvbSBzaWduaW4gc3RhdGVcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgJiYgdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ICE9PSBzdGF0ZS5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IGF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aG9yaXR5IG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzIGFsbG93cyB0aGUgY2xpZW50X2lkIHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBzaWduaW4gc3RhdGVcclxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBjbGllbnRfaWQgaWYgdGhlIGNsaWVudF9pZCBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkICYmIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCAhPT0gc3RhdGUuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImNsaWVudF9pZCBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgdGhlIHN0YXRlIG1hdGNoZXMsIHRha2UgdGhlIHN0b3JlZCBkYXRhXHJcbiAgICAgICAgLy8gYW5kIHNldCBpdCBpbnRvIHRoZSByZXNwb25zZSBzbyBjYWxsZXJzIGNhbiBnZXQgdGhlaXIgc3RhdGVcclxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgYm90aCBzdWNjZXNzICYgZXJyb3Igb3V0Y29tZXNcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogc3RhdGUgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgIHJlc3BvbnNlLnN0YXRlID0gc3RhdGUuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IFJlc3BvbnNlIHdhcyBlcnJvclwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3JSZXNwb25zZShyZXNwb25zZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICYmICFyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogRXhwZWN0aW5nIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gaWRfdG9rZW4gaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5ub25jZSAmJiByZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm90IGV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmNvZGVfdmVyaWZpZXIgJiYgIXJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IEV4cGVjdGluZyBjb2RlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gY29kZSBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLmNvZGVfdmVyaWZpZXIgJiYgcmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm90IGV4cGVjdGluZyBjb2RlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5leHBlY3RlZCBjb2RlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2Uuc2NvcGUpIHtcclxuICAgICAgICAgICAgLy8gaWYgdGhlcmUncyBubyBzY29wZSBvbiB0aGUgcmVzcG9uc2UsIHRoZW4gYXNzdW1lIGFsbCBzY29wZXMgZ3JhbnRlZCAocGVyLXNwZWMpIGFuZCBjb3B5IG92ZXIgc2NvcGVzIGZyb20gb3JpZ2luYWwgcmVxdWVzdFxyXG4gICAgICAgICAgICByZXNwb25zZS5zY29wZSA9IHN0YXRlLnNjb3BlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NDbGFpbXMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlzT3BlbklkQ29ubmVjdCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogcmVzcG9uc2UgaXMgT0lEQywgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcblxyXG4gICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gdGhpcy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMocmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhdGUuc2tpcFVzZXJJbmZvICE9PSB0cnVlICYmIHRoaXMuX3NldHRpbmdzLmxvYWRVc2VySW5mbyAmJiByZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlckluZm9TZXJ2aWNlLmdldENsYWltcyhyZXNwb25zZS5hY2Nlc3NfdG9rZW4pLnRoZW4oY2xhaW1zID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogdXNlciBpbmZvIGNsYWltcyByZWNlaXZlZCBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYWltcy5zdWIgIT09IHJlc3BvbnNlLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBzdWIgZnJvbSB1c2VyIGluZm8gZW5kcG9pbnQgZG9lcyBub3QgbWF0Y2ggc3ViIGluIGFjY2Vzc190b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSB0aGlzLl9tZXJnZUNsYWltcyhyZXNwb25zZS5wcm9maWxlLCBjbGFpbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkLCB1cGRhdGVkIHByb2ZpbGU6XCIsIHJlc3BvbnNlLnByb2ZpbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBub3QgbG9hZGluZyB1c2VyIGluZm9cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiByZXNwb25zZSBpcyBub3QgT0lEQywgbm90IHByb2Nlc3NpbmcgY2xhaW1zXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX21lcmdlQ2xhaW1zKGNsYWltczEsIGNsYWltczIpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgY2xhaW1zMSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IG5hbWUgaW4gY2xhaW1zMikge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gY2xhaW1zMltuYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0W25hbWVdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbbmFtZV0uaW5kZXhPZih2YWx1ZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXS5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRbbmFtZV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gdGhpcy5fbWVyZ2VDbGFpbXMocmVzdWx0W25hbWVdLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gW3Jlc3VsdFtuYW1lXSwgdmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBfZmlsdGVyUHJvdG9jb2xDbGFpbXMoY2xhaW1zKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zLCBpbmNvbWluZyBjbGFpbXM6XCIsIGNsYWltcyk7XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MuX2ZpbHRlclByb3RvY29sQ2xhaW1zKSB7XHJcbiAgICAgICAgICAgIFByb3RvY29sQ2xhaW1zLmZvckVhY2godHlwZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W3R5cGVdO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIGZpbHRlcmVkXCIsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHByb3RvY29sIGNsYWltcyBub3QgZmlsdGVyZWRcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBjb2RlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NvZGUoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgaWRfdG9rZW4gYW5kIGFjY2Vzc190b2tlblwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbihzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogTm8gY29kZSB0byBwcm9jZXNzIG9yIGlkX3Rva2VuIHRvIHZhbGlkYXRlXCIpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzQ29kZShzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgY2xpZW50X2lkOiBzdGF0ZS5jbGllbnRfaWQsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHN0YXRlLmNsaWVudF9zZWNyZXQsXHJcbiAgICAgICAgICAgIGNvZGUgOiByZXNwb25zZS5jb2RlLFxyXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6IHN0YXRlLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogc3RhdGUuY29kZV92ZXJpZmllclxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5leHRyYVRva2VuUGFyYW1zICYmIHR5cGVvZihzdGF0ZS5leHRyYVRva2VuUGFyYW1zKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZXF1ZXN0LCBzdGF0ZS5leHRyYVRva2VuUGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZShyZXF1ZXN0KS50aGVuKHRva2VuUmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yKHZhciBrZXkgaW4gdG9rZW5SZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Vba2V5XSA9IHRva2VuUmVzcG9uc2Vba2V5XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NvZGU6IHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NmdWwsIHByb2Nlc3NpbmcgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlcyhzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDb2RlOiB0b2tlbiByZXNwb25zZSBzdWNjZXNzZnVsLCByZXR1cm5pbmcgcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcclxuICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IFZhbGlkYWluZyBKV1QgYXR0cmlidXRlczsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0QXR0cmlidXRlcyhyZXNwb25zZS5pZF90b2tlbiwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzKS50aGVuKHBheWxvYWQgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiBzdGF0ZS5ub25jZSAhPT0gcGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghc3RhdGUubm9uY2UpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gbm9uY2Ugb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBub25jZSBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVzcG9uc2UuaWRfdG9rZW4pO1xyXG4gICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIiwgand0KTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUubm9uY2UgIT09IGp3dC5wYXlsb2FkLm5vbmNlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBraWQgPSBqd3QuaGVhZGVyLmtpZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFJlY2VpdmVkIGlzc3VlclwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXMoKS50aGVuKGtleXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBSZWNlaXZlZCBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICAgICAgaWYgKCFraWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlzID0gdGhpcy5fZmlsdGVyQnlBbGcoa2V5cywgand0LmhlYWRlci5hbGcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjU2lnbmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkua2lkID09PSBraWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gc3RhdGUuY2xpZW50X2lkO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0KHJlc3BvbnNlLmlkX3Rva2VuLCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcykudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEpXVCB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWxcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghand0LnBheWxvYWQuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IGp3dC5wYXlsb2FkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZyl7XHJcbiAgICAgICAgdmFyIGt0eSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGFsZy5zdGFydHNXaXRoKFwiUlNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJSU0FcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJQU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlBTXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiRVNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJFQ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBhbGcgbm90IHN1cHBvcnRlZDogXCIsIGFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XHJcblxyXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IE51bWJlciBvZiBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5LCBrZXlzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5wcm9maWxlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBwcm9maWxlIGxvYWRlZCBmcm9tIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gcHJvZmlsZSBsb2FkZWQgZnJvbSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gYXRfaGFzaCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVzcG9uc2UuaWRfdG9rZW4pO1xyXG4gICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIiwgand0KTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaGFzaEFsZyA9IGp3dC5oZWFkZXIuYWxnO1xyXG4gICAgICAgIGlmICghaGFzaEFsZyB8fCBoYXNoQWxnLmxlbmd0aCAhPT0gNSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaGFzaEJpdHMgPSBoYXNoQWxnLnN1YnN0cigyLCAzKTtcclxuICAgICAgICBpZiAoIWhhc2hCaXRzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBoYXNoQml0cyA9IHBhcnNlSW50KGhhc2hCaXRzKTtcclxuICAgICAgICBpZiAoaGFzaEJpdHMgIT09IDI1NiAmJiBoYXNoQml0cyAhPT0gMzg0ICYmIGhhc2hCaXRzICE9PSA1MTIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZywgaGFzaEJpdHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzaGEgPSBcInNoYVwiICsgaGFzaEJpdHM7XHJcbiAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9qb3NlVXRpbC5oYXNoU3RyaW5nKHJlc3BvbnNlLmFjY2Vzc190b2tlbiwgc2hhKTtcclxuICAgICAgICBpZiAoIWhhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbiBoYXNoIGZhaWxlZDpcIiwgc2hhKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBsZWZ0ID0gaGFzaC5zdWJzdHIoMCwgaGFzaC5sZW5ndGggLyAyKTtcclxuICAgICAgICB2YXIgbGVmdF9iNjR1ID0gdGhpcy5fam9zZVV0aWwuaGV4VG9CYXNlNjRVcmwobGVmdCk7XHJcbiAgICAgICAgaWYgKGxlZnRfYjY0dSAhPT0gcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiLCBsZWZ0X2I2NHUsIHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogc3VjY2Vzc1wiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBDaGVja1Nlc3Npb25JRnJhbWUgfSBmcm9tICcuL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uTW9uaXRvciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IodXNlck1hbmFnZXIsIENoZWNrU2Vzc2lvbklGcmFtZUN0b3IgPSBDaGVja1Nlc3Npb25JRnJhbWUsIHRpbWVyID0gR2xvYmFsLnRpbWVyKSB7XHJcbiAgICAgICAgaWYgKCF1c2VyTWFuYWdlcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5jdG9yOiBObyB1c2VyIG1hbmFnZXIgcGFzc2VkIHRvIFNlc3Npb25Nb25pdG9yXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VyTWFuYWdlclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICAgICAgdGhpcy5fQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciA9IENoZWNrU2Vzc2lvbklGcmFtZUN0b3I7XHJcbiAgICAgICAgdGhpcy5fdGltZXIgPSB0aW1lcjtcclxuXHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZFVzZXJMb2FkZWQodGhpcy5fc3RhcnQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZFVzZXJVbmxvYWRlZCh0aGlzLl9zdG9wLmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgLy8gZG9pbmcgdGhpcyBtYW51YWxseSBoZXJlIHNpbmNlIGNhbGxpbmcgZ2V0VXNlciBcclxuICAgICAgICAgICAgLy8gZG9lc24ndCB0cmlnZ2VyIGxvYWQgZXZlbnQuXHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh1c2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5tb25pdG9yQW5vbnltb3VzU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzKCkudGhlbihzZXNzaW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdG1wVXNlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZSA6IHNlc3Npb24uc2Vzc2lvbl9zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViICYmIHNlc3Npb24uc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcFVzZXIucHJvZmlsZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yjogc2Vzc2lvbi5zdWIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNlc3Npb24uc2lkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRtcFVzZXIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvciBjdG9yOiBlcnJvciBmcm9tIHF1ZXJ5U2Vzc2lvblN0YXR1czpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjdG9yXHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gZ2V0VXNlcjpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLnNldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuICAgIGdldCBfY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdGFydCh1c2VyKSB7XHJcbiAgICAgICAgbGV0IHNlc3Npb25fc3RhdGUgPSB1c2VyLnNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWQgPSB1c2VyLnByb2ZpbGUuc2lkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgc3ViOlwiLCB0aGlzLl9zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgYW5vbnltb3VzIHVzZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBJbml0aWFsaXppbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWVcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcE9uRXJyb3IgPSB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSA9IG5ldyB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBObyBjaGVjayBzZXNzaW9uIGlmcmFtZSBmb3VuZCBpbiB0aGUgbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gbm9uLXByb21pc2UgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IEVycm9yIGZyb20gZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zdWIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdG9wXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIC8vIHVzaW5nIGEgdGltZXIgdG8gZGVsYXkgcmUtaW5pdGlhbGl6YXRpb24gdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBzaWdub3V0XHJcbiAgICAgICAgICAgIGxldCB0aW1lckhhbmRsZSA9IHRoaXMuX3RpbWVyLnNldEludGVydmFsKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRpbWVySGFuZGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBVc2VyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgJiYgc2Vzc2lvbi5zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzZXNzaW9uLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2Vzc2lvbi5zaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodG1wVXNlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvcjogZXJyb3IgZnJvbSBxdWVyeVNlc3Npb25TdGF0dXM6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmFpc2VFdmVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViID09PSB0aGlzLl9zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICByYWlzZUV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnNpZCA9PT0gdGhpcy5fc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2FtZSBzdWIgc3RpbGwgbG9nZ2VkIGluIGF0IE9QLCByZXN0YXJ0aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lOyBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IERpZmZlcmVudCBzdWJqZWN0IHNpZ25lZCBpbnRvIE9QOlwiLCBzZXNzaW9uLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFN1YmplY3Qgbm8gbG9uZ2VyIHNpZ25lZCBpbnRvIE9QXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBpbiBldmVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZEluKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IEVycm9yIGNhbGxpbmcgcXVlcnlDdXJyZW50U2lnbmluU2Vzc2lvbjsgcmFpc2luZyBzaWduZWQgb3V0IGV2ZW50XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1hbmRhdG9yeVxyXG4gICAgICAgIHVybCwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCBhdXRob3JpdHksXHJcbiAgICAgICAgLy8gb3B0aW9uYWxcclxuICAgICAgICBkYXRhLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUsIGNsaWVudF9zZWNyZXQsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mb1xyXG4gICAgfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNsaWVudF9pZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWRpcmVjdF91cmlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlc3BvbnNlX3R5cGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNwb25zZV90eXBlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNjb3BlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gc2NvcGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY29wZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBhdXRob3JpdHkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2lkYyA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKHJlc3BvbnNlX3R5cGUpO1xyXG4gICAgICAgIGxldCBjb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSk7XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfbW9kZSkge1xyXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgPyBcInF1ZXJ5XCIgOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBTaWduaW5TdGF0ZSh7IG5vbmNlOiBvaWRjLCBcclxuICAgICAgICAgICAgZGF0YSwgY2xpZW50X2lkLCBhdXRob3JpdHksIHJlZGlyZWN0X3VyaSwgXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IGNvZGUsIFxyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQsIHNjb3BlLCBleHRyYVRva2VuUGFyYW1zLCBza2lwVXNlckluZm8gfSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY2xpZW50X2lkXCIsIGNsaWVudF9pZCk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJyZWRpcmVjdF91cmlcIiwgcmVkaXJlY3RfdXJpKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlc3BvbnNlX3R5cGVcIiwgcmVzcG9uc2VfdHlwZSk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzY29wZVwiLCBzY29wZSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgaWYgKG9pZGMpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJub25jZVwiLCB0aGlzLnN0YXRlLm5vbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZVwiLCB0aGlzLnN0YXRlLmNvZGVfY2hhbGxlbmdlKTtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG9wdGlvbmFsID0geyBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSB9O1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9wdGlvbmFsKXtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbmFsW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgb3B0aW9uYWxba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc09pZGMocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT0F1dGgocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcInRva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBpc0NvZGUocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImNvZGVcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcclxuXHJcbmNvbnN0IE9pZGNTY29wZSA9IFwib3BlbmlkXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluUmVzcG9uc2Uge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCBkZWxpbWl0ZXIgPSBcIiNcIikge1xyXG5cclxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5jb2RlID0gdmFsdWVzLmNvZGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLmlkX3Rva2VuID0gdmFsdWVzLmlkX3Rva2VuO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHZhbHVlcy5zZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gdmFsdWVzLmFjY2Vzc190b2tlbjtcclxuICAgICAgICB0aGlzLnRva2VuX3R5cGUgPSB2YWx1ZXMudG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gdmFsdWVzLnNjb3BlO1xyXG4gICAgICAgIHRoaXMucHJvZmlsZSA9IHVuZGVmaW5lZDsgLy8gd2lsbCBiZSBzZXQgZnJvbSBSZXNwb25zZVZhbGlkYXRvclxyXG5cclxuICAgICAgICB0aGlzLmV4cGlyZXNfaW4gPSB2YWx1ZXMuZXhwaXJlc19pbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBub3cgKyBleHBpcmVzX2luO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlZCgpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcclxuICAgICAgICBpZiAoZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjb3BlcygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc09wZW5JZENvbm5lY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGVzLmluZGV4T2YoT2lkY1Njb3BlKSA+PSAwIHx8ICEhdGhpcy5pZF90b2tlbjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblN0YXRlIGV4dGVuZHMgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3Ioe25vbmNlLCBhdXRob3JpdHksIGNsaWVudF9pZCwgcmVkaXJlY3RfdXJpLCBjb2RlX3ZlcmlmaWVyLCByZXNwb25zZV9tb2RlLCBjbGllbnRfc2VjcmV0LCBzY29wZSwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgaWYgKG5vbmNlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gcmFuZG9tKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gbm9uY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29kZV92ZXJpZmllciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyByYW5kb20oKSBwcm9kdWNlcyAzMiBsZW5ndGhcclxuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IHJhbmRvbSgpICsgcmFuZG9tKCkgKyByYW5kb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gY29kZV92ZXJpZmllcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBsZXQgaGFzaCA9IEpvc2VVdGlsLmhhc2hTdHJpbmcodGhpcy5jb2RlX3ZlcmlmaWVyLCBcIlNIQTI1NlwiKTtcclxuICAgICAgICAgICAgdGhpcy5fY29kZV9jaGFsbGVuZ2UgPSBKb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChoYXNoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXM7XHJcbiAgICAgICAgdGhpcy5fc2tpcFVzZXJJbmZvID0gc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub25jZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9uY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgYXV0aG9yaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpdHk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgY29kZV92ZXJpZmllcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV92ZXJpZmllcjtcclxuICAgIH1cclxuICAgIGdldCBjb2RlX2NoYWxsZW5nZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV9jaGFsbGVuZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfc2VjcmV0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNraXBVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZSxcclxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHRoaXMuY29kZV92ZXJpZmllcixcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmF1dGhvcml0eSxcclxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZTogdGhpcy5yZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudF9zZWNyZXQsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBleHRyYVRva2VuUGFyYW1zIDogdGhpcy5leHRyYVRva2VuUGFyYW1zLFxyXG4gICAgICAgICAgICBza2lwVXNlckluZm86IHRoaXMuc2tpcFVzZXJJbmZvXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduaW5TdGF0ZShkYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHt1cmwsIGlkX3Rva2VuX2hpbnQsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZGF0YSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25vdXRSZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZF90b2tlbl9oaW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiaWRfdG9rZW5faGludFwiLCBpZF90b2tlbl9oaW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFN0YXRlKHsgZGF0YSwgcmVxdWVzdF90eXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIFwiP1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lsZW50UmVuZXdTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayA9IHRoaXMuX3Rva2VuRXhwaXJpbmcuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcodGhpcy5fY2FsbGJhY2spO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgbG9hZGluZyBvZiB0aGUgdXNlciBzbyB0aGUgZXhwaXJpbmcgZXZlbnRzIGNhbiBiZSBpbml0aWFsaXplZFxyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyPT57XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxpYmVyYXRlIG5vcFxyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnI9PntcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5zdGFydDogRXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMucmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFjaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rva2VuRXhwaXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBTaWxlbnQgdG9rZW4gcmVuZXdhbCBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogRXJyb3IgZnJvbSBzaWduaW5TaWxlbnQ6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgY3JlYXRlZCwgcmVxdWVzdF90eXBlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5faWQgPSBpZCB8fCByYW5kb20oKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGVkID09PSAnbnVtYmVyJyAmJiBjcmVhdGVkID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkID0gY3JlYXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RfdHlwZSA9ICByZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNyZWF0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVxdWVzdF90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZTogdGhpcy5yZXF1ZXN0X3R5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RhdGUoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNsZWFyU3RhbGVTdGF0ZShzdG9yYWdlLCBhZ2UpIHtcclxuXHJcbiAgICAgICAgdmFyIGN1dG9mZiA9IERhdGUubm93KCkgLyAxMDAwIC0gYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcmFnZS5nZXRBbGxLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3Qga2V5c1wiLCBrZXlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdG9yYWdlLmdldChrZXkpLnRoZW4oaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBpdGVtIGZyb20ga2V5OiBcIiwga2V5LCBzdGF0ZS5jcmVhdGVkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY3JlYXRlZCA8PSBjdXRvZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IEVycm9yIHBhcnNpbmcgc3RhdGUgZm9yIGtleVwiLCBrZXksIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IG5vIGl0ZW0gaW4gc3RvcmFnZSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiByZW1vdmVkIGl0ZW0gZm9yIGtleTogXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnJlbW92ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogd2FpdGluZyBvbiBwcm9taXNlIGNvdW50OlwiLCBwcm9taXNlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuY29uc3QgVGltZXJEdXJhdGlvbiA9IDU7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lciBleHRlbmRzIEV2ZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lciwgbm93RnVuYyA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIGlmIChub3dGdW5jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vd0Z1bmMgPSBub3dGdW5jO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9ICgpID0+IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm93KCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9ub3dGdW5jKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoZHVyYXRpb24pIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uID0gcGFyc2VJbnQoZHVyYXRpb24pO1xyXG5cclxuICAgICAgICB2YXIgZXhwaXJhdGlvbiA9IHRoaXMubm93ICsgZHVyYXRpb247XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvbiA9PT0gZXhwaXJhdGlvbiAmJiB0aGlzLl90aW1lckhhbmRsZSkge1xyXG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0byBzYW1lIGV4cGlyYXRpb24sIHNvIGJhaWwgb3V0XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gc2luY2UgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgZXhwaXJhdGlvbjpcIiwgdGhpcy5leHBpcmF0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBmb3IgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uID0gZXhwaXJhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gd2UncmUgdXNpbmcgYSBmYWlybHkgc2hvcnQgdGltZXIgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb24gaW4gdGhlXHJcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gaGFuZGxlIHNjZW5hcmlvcyB3aGVyZSB0aGUgYnJvd3NlciBkZXZpY2Ugc2xlZXBzLCBhbmQgdGhlblxyXG4gICAgICAgIC8vIHRoZSB0aW1lcnMgZW5kIHVwIGdldHRpbmcgZGVsYXllZC5cclxuICAgICAgICB2YXIgdGltZXJEdXJhdGlvbiA9IFRpbWVyRHVyYXRpb247XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uIDwgdGltZXJEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aW1lckR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpbWVySGFuZGxlID0gdGhpcy5fdGltZXIuc2V0SW50ZXJ2YWwodGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKSwgdGltZXJEdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZXhwaXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwaXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmNhbmNlbDogXCIsIHRoaXMuX25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRoaXMuX3RpbWVySGFuZGxlKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9leHBpcmF0aW9uIC0gdGhpcy5ub3c7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FsbGJhY2s7IFwiICsgdGhpcy5fbmFtZSArIFwiIHRpbWVyIGV4cGlyZXMgaW46XCIsIGRpZmYpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwaXJhdGlvbiA8PSB0aGlzLm5vdykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICBzdXBlci5yYWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcigpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZUNvZGUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJhdXRob3JpemF0aW9uX2NvZGVcIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZSBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWRpcmVjdF91cmkgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGVfdmVyaWZpZXIgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlX3ZlcmlmaWVyIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiByZXNwb25zZSByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhjaGFuZ2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJyZWZyZXNoX3Rva2VuXCI7XHJcbiAgICAgICAgYXJncy5jbGllbnRfaWQgPSBhcmdzLmNsaWVudF9pZCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgYXJncy5jbGllbnRfc2VjcmV0ID0gYXJncy5jbGllbnRfc2VjcmV0IHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XHJcblxyXG4gICAgICAgIGlmICghYXJncy5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBObyByZWZyZXNoX3Rva2VuIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgcmVmcmVzaF90b2tlbiBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IFJlY2VpdmVkIHRva2VuIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLnBvc3RGb3JtKHVybCwgYXJncykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5jb25zdCBBY2Nlc3NUb2tlblR5cGVIaW50ID0gXCJhY2Nlc3NfdG9rZW5cIjtcclxuY29uc3QgUmVmcmVzaFRva2VuVHlwZUhpbnQgPSBcInJlZnJlc2hfdG9rZW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlblJldm9jYXRpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIFhNTEh0dHBSZXF1ZXN0Q3RvciA9IEdsb2JhbC5YTUxIdHRwUmVxdWVzdCwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXR0aW5ncyBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvciA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2b2tlKHRva2VuLCByZXF1aXJlZCwgdHlwZSA9IFwiYWNjZXNzX3Rva2VuXCIpIHtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5vIHRva2VuIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0b2tlbiBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZSAhPT0gQWNjZXNzVG9rZW5UeXBlSGludCAmJiB0eXBlICE9IFJlZnJlc2hUb2tlblR5cGVIaW50KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IEludmFsaWQgdG9rZW4gdHlwZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0b2tlbiB0eXBlLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJldm9jYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBub3QgcmVxdWlyZWQsIHNvIGRvbid0IGVycm9yIGFuZCBqdXN0IHJldHVyblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZva2luZyBcIiArIHR5cGUpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X3NlY3JldCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlKHVybCwgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCB0b2tlbiwgdHlwZSkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdEN0b3IoKTtcclxuICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHhoci5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoeGhyLnN0YXR1c1RleHQgKyBcIiAoXCIgKyB4aHIuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTmV0d29yayBFcnJvci5cIilcclxuICAgICAgICAgICAgICAgIHJlamVjdChcIk5ldHdvcmsgRXJyb3JcIik7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB2YXIgYm9keSA9IFwiY2xpZW50X2lkPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNsaWVudF9pZCk7XHJcbiAgICAgICAgICAgIGlmIChjbGllbnRfc2VjcmV0KSB7XHJcbiAgICAgICAgICAgICAgICBib2R5ICs9IFwiJmNsaWVudF9zZWNyZXQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X3NlY3JldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbl90eXBlX2hpbnQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodHlwZSk7XHJcbiAgICAgICAgICAgIGJvZHkgKz0gXCImdG9rZW49XCIgKyBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIHhoci5zZW5kKGJvZHkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVybFV0aWxpdHkge1xyXG4gICAgc3RhdGljIGFkZFF1ZXJ5UGFyYW0odXJsLCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXJsW3VybC5sZW5ndGggLSAxXSAhPT0gXCI/XCIpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiJlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgICAgICB1cmwgKz0gXCI9XCI7XHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlVXJsRnJhZ21lbnQodmFsdWUsIGRlbGltaXRlciA9IFwiI1wiLCBnbG9iYWwgPSBHbG9iYWwpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdmFsdWUubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoaWR4ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSBcIj9cIikge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSdyZSBkb2luZyBxdWVyeSwgdGhlbiBzdHJpcCBvZmYgaGFzaCBmcmFnbWVudCBiZWZvcmUgd2UgcGFyc2VcclxuICAgICAgICAgICAgaWR4ID0gdmFsdWUuaW5kZXhPZignIycpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKDAsIGlkeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7fSxcclxuICAgICAgICAgICAgcmVnZXggPSAvKFteJj1dKyk9KFteJl0qKS9nLFxyXG4gICAgICAgICAgICBtO1xyXG5cclxuICAgICAgICB2YXIgY291bnRlciA9IDA7XHJcbiAgICAgICAgd2hpbGUgKG0gPSByZWdleC5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChtWzJdKTtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIrKyA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQ6IHJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCIsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiUmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7aWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGFjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgdG9rZW5fdHlwZSwgc2NvcGUsIHByb2ZpbGUsIGV4cGlyZXNfYXQsIHN0YXRlfSkge1xyXG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSBpZF90b2tlbjtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBleHBpcmVzX2F0O1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwaXJlc19pbiA9PT0gJ251bWJlcicgJiYgZXhwaXJlc19pbiA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZWQoKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XHJcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwaXJlc19pbiA8PSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY29wZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjb3BlIHx8IFwiXCIpLnNwbGl0KFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci50b1N0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgaWRfdG9rZW46IHRoaXMuaWRfdG9rZW4sXHJcbiAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHRoaXMuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdGhpcy5yZWZyZXNoX3Rva2VuLFxyXG4gICAgICAgICAgICB0b2tlbl90eXBlOiB0aGlzLnRva2VuX3R5cGUsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXHJcbiAgICAgICAgICAgIGV4cGlyZXNfYXQ6IHRoaXMuZXhwaXJlc19hdFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVzZXIoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckluZm9TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHNldHRpbmdzLCBcclxuICAgICAgICBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSwgXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9nZXRDbGFpbXNGcm9tSnd0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9qb3NlVXRpbCA9IGpvc2VVdGlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENsYWltcyh0b2tlbikge1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogTm8gdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSB0b2tlbiBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFVzZXJJbmZvRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IHJlY2VpdmVkIHVzZXJpbmZvIHVybFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24odXJsLCB0b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogY2xhaW1zIHJlY2VpdmVkXCIsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0Q2xhaW1zRnJvbUp3dChyZXEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBGYWlsZWQgdG8gcGFyc2UgSldUXCIsIGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlzc3VlclByb21pc2U7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ09QJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQU5ZJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGp3dC5wYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaXNzdWVyUHJvbWlzZS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIGlzc3VlcjpcIiArIGlzc3Vlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraWQgaXMgbWFuZGF0b3J5IG9ubHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUga2V5cyBpbiB0aGUgcmVmZXJlbmNlZCBKV0sgU2V0IGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXEucmVzcG9uc2VUZXh0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcywgdW5kZWZpbmVkLCB0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gand0LnBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBFcnJvciBwYXJzaW5nIEpXVCByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZykge1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XHJcblxyXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnQgfSBmcm9tICcuL09pZGNDbGllbnQuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlclNldHRpbmdzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlclNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vVXNlci5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyRXZlbnRzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlckV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IFNpbGVudFJlbmV3U2VydmljZSB9IGZyb20gJy4vU2lsZW50UmVuZXdTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL1Nlc3Npb25Nb25pdG9yLmpzJztcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9Ub2tlblJldm9jYXRpb25DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlciBleHRlbmRzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSxcclxuICAgICAgICBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yID0gU2lsZW50UmVuZXdTZXJ2aWNlLFxyXG4gICAgICAgIFNlc3Npb25Nb25pdG9yQ3RvciA9IFNlc3Npb25Nb25pdG9yLFxyXG4gICAgICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IgPSBUb2tlblJldm9jYXRpb25DbGllbnQsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQsXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIGlmICghKHNldHRpbmdzIGluc3RhbmNlb2YgVXNlck1hbmFnZXJTZXR0aW5ncykpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3MgPSBuZXcgVXNlck1hbmFnZXJTZXR0aW5ncyhzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFVzZXJNYW5hZ2VyRXZlbnRzKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2UgPSBuZXcgU2lsZW50UmVuZXdTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gb3JkZXIgaXMgaW1wb3J0YW50IGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM7IHRoZXNlIHNlcnZpY2VzIGRlcGVuZCB1cG9uIHRoZSBldmVudHMuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXV0b21hdGljU2lsZW50UmVuZXcpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogYXV0b21hdGljU2lsZW50UmVuZXcgaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzaWxlbnQgcmVuZXdcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRSZW5ldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubW9uaXRvclNlc3Npb24pIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogbW9uaXRvclNlc3Npb24gaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzZXNzaW9uIG1vbml0b3JcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25Nb25pdG9yID0gbmV3IFNlc3Npb25Nb25pdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudCA9IG5ldyBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9yZWRpcmVjdE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfcG9wdXBOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX2lmcmFtZU5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX3VzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy51c2VyU3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV2ZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuZ2V0VXNlcjogdXNlciBsb2FkZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIG5vdCBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcihudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5yZW1vdmVVc2VyOiB1c2VyIHJlbW92ZWQgZnJvbSBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMudW5sb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluUmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6clwiO1xyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IE5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBzaWduaW5Qb3B1cCBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9wb3B1cE5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrIGVycm9yOiBcIiArIGVyciAmJiBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjtcclxuICAgICAgICAvLyBmaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHJlZnJlc2ggdG9rZW4sIG9yIG5lZWQgdG8gdXNlIGlmcmFtZVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIucmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgYXJncy5yZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZVJlZnJlc2hUb2tlbihhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MuaWRfdG9rZW5faGludCA9IGFyZ3MuaWRfdG9rZW5faGludCB8fCAodGhpcy5zZXR0aW5ncy5pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgJiYgdXNlciAmJiB1c2VyLmlkX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyICYmIHRoaXMuX3NldHRpbmdzLnZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudCwgc3ViamVjdCBwcmlvciB0byBzaWxlbnQgcmVuZXc6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICBhcmdzLmN1cnJlbnRfc3ViID0gdXNlci5wcm9maWxlLnN1YjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TaWxlbnRJZnJhbWUoYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdXNlUmVmcmVzaFRva2VuKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiBObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiTm8gcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiTm8gYWNjZXNzIHRva2VuIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZFRva2VuVmFsaWRhdGlvbiA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRUb2tlblZhbGlkYXRpb24gPSB0aGlzLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4odXNlci5wcm9maWxlLCByZXN1bHQuaWRfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkVG9rZW5WYWxpZGF0aW9uLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiByZWZyZXNoIHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuaWRfdG9rZW4gPSByZXN1bHQuaWRfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gcmVzdWx0LmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gcmVzdWx0LnJlZnJlc2hfdG9rZW4gfHwgdXNlci5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmV4cGlyZXNfaW4gPSByZXN1bHQuZXhwaXJlc19pbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuKHByb2ZpbGUsIGlkX3Rva2VuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoaWRfdG9rZW4sIGlzc3VlciwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkLCB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXcpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBGYWlsZWQgdG8gdmFsaWRhdGUgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5zdWIgIT09IHByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogc3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJzdWIgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggY3VycmVudCBzdWJcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXV0aF90aW1lICYmIHBheWxvYWQuYXV0aF90aW1lICE9PSBwcm9maWxlLmF1dGhfdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF1dGhfdGltZSBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhdXRoX3RpbWVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhfdGltZSBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhdXRoX3RpbWVcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXpwICYmIHBheWxvYWQuYXpwICE9PSBwcm9maWxlLmF6cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF6cCAmJiBwcm9maWxlLmF6cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhenAgbm90IGluIGlkX3Rva2VuLCBidXQgcHJlc2VudCBpbiBvcmlnaW5hbCBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc2lnbmluU2lsZW50SWZyYW1lKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnNpbGVudF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5wcm9tcHQgPSBhcmdzLnByb21wdCB8fCBcIm5vbmVcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbihhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQ6IGFyZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRSZXF1ZXN0VGltZW91dFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkNhbGxiYWNrKHVybCwgdGhpcy5faWZyYW1lTmF2aWdhdG9yKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogbm8gc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5DYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6clwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5SZWRpcmVjdENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpwXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblBvcHVwQ2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnNcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluU2lsZW50Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0Q2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzbzpyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzbzpwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlX3R5cGUgaW4gc3RhdGVcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeVNlc3Npb25TdGF0dXMoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiOyAvLyB0aGlzIGFjdHMgbGlrZSBhIHNpZ25pbiBzaWxlbnRcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MucHJvbXB0ID0gXCJub25lXCI7XHJcbiAgICAgICAgYXJncy5yZXNwb25zZV90eXBlID0gYXJncy5yZXNwb25zZV90eXBlIHx8IHRoaXMuc2V0dGluZ3MucXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgYXJncy5zY29wZSA9IGFyZ3Muc2NvcGUgfHwgXCJvcGVuaWRcIjtcclxuICAgICAgICBhcmdzLnNraXBVc2VySW5mbyA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQ6IGFyZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRSZXF1ZXN0VGltZW91dFxyXG4gICAgICAgIH0pLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UobmF2UmVzcG9uc2UudXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSAmJiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2VzcyBmb3Igc3ViOiBcIiwgIHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzaWduaW5SZXNwb25zZS5zZXNzaW9uX3N0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWI6IHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc2lkXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwicXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3NmdWwsIHVzZXIgbm90IGF1dGhlbnRpY2F0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5zZXNzaW9uX3N0YXRlICYmIHRoaXMuc2V0dGluZ3MubW9uaXRvckFub255bW91c1Nlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT0gXCJsb2dpbl9yZXF1aXJlZFwiIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImNvbnNlbnRfcmVxdWlyZWRcIiB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJpbnRlcmFjdGlvbl9yZXF1aXJlZFwiIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImFjY291bnRfc2VsZWN0aW9uX3JlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IHF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzIGZvciBhbm9ueW1vdXMgdXNlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IGVyci5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25pbihhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZChuYXZSZXNwb25zZS51cmwsIGFyZ3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNpZ25pblJlcXVlc3QoYXJncykudGhlbihzaWduaW5SZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogZ290IHNpZ25pbiByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWduaW5SZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25pblJlcXVlc3Quc3RhdGUuaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogRXJyb3IgYWZ0ZXIgcHJlcGFyaW5nIG5hdmlnYXRvciwgY2xvc2luZyBuYXZpZ2F0b3Igd2luZG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5FbmQodXJsLCBhcmdzID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VyID0gbmV3IFVzZXIoc2lnbmluUmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFyZ3MuY3VycmVudF9zdWIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViICE9PSB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIGRvZXMgbm90IG1hdGNoIHVzZXIgcmV0dXJuZWQgZnJvbSBzaWduaW4uIHN1YiBmcm9tIHNpZ25pbjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJsb2dpbl9yZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBjdXJyZW50IHVzZXIgbWF0Y2hlcyB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiB1c2VyIHN0b3JlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluQ2FsbGJhY2sodXJsLCBuYXZpZ2F0b3IpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluQ2FsbGJhY2tcIik7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jYWxsYmFjayh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRSZWRpcmVjdChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzbzpyXCI7XHJcbiAgICAgICAgbGV0IHBvc3RMb2dvdXRSZWRpcmVjdFVyaSA9IGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmIChwb3N0TG9nb3V0UmVkaXJlY3RVcmkpe1xyXG4gICAgICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RMb2dvdXRSZWRpcmVjdFVyaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG5hdlBhcmFtcyA9IHtcclxuICAgICAgICAgICAgdXNlUmVwbGFjZVRvTmF2aWdhdGUgOiBhcmdzLnVzZVJlcGxhY2VUb05hdmlnYXRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dFN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3Q6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHJlc3BvbnNlPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0UG9wdXAoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286cFwiO1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcbiAgICAgICAgaWYgKGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKXtcclxuICAgICAgICAgICAgLy8gd2UncmUgcHV0dGluZyBhIGR1bW15IGVudHJ5IGluIGhlcmUgYmVjYXVzZSB3ZVxyXG4gICAgICAgICAgICAvLyBuZWVkIGEgdW5pcXVlIGlkIGZyb20gdGhlIHN0YXRlIGZvciBub3RpZmljYXRpb25cclxuICAgICAgICAgICAgLy8gdG8gdGhlIHBhcmVudCB3aW5kb3csIHdoaWNoIGlzIG5lY2Vzc2FyeSBpZiB3ZVxyXG4gICAgICAgICAgICAvLyBwbGFuIHRvIHJldHVybiBiYWNrIHRvIHRoZSBjbGllbnQgYWZ0ZXIgc2lnbm91dFxyXG4gICAgICAgICAgICAvLyBhbmQgc28gd2UgY2FuIGNsb3NlIHRoZSBwb3B1cCBhZnRlciBzaWdub3V0XHJcbiAgICAgICAgICAgIGFyZ3Muc3RhdGUgPSBhcmdzLnN0YXRlIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXQoYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25vdXRQb3B1cENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICBpZiAodHlwZW9mKGtlZXBPcGVuKSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKHVybCkgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICBrZWVwT3BlbiA9IHVybDtcclxuICAgICAgICAgICAgdXJsID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkZWxpbWl0ZXIgPSAnPyc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwTmF2aWdhdG9yLmNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFBvcHVwQ2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25vdXQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMpLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZChuYXZSZXNwb25zZS51cmwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25vdXRTdGFydChhcmdzID0ge30sIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnByZXBhcmUobmF2aWdhdG9yUGFyYW1zKS50aGVuKGhhbmRsZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBsb2FkZWQgY3VycmVudCB1c2VyIGZyb20gc3RvcmFnZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmV2b2tlUHJvbWlzZSA9IHRoaXMuX3NldHRpbmdzLnJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID8gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlcikgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXZva2VQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWRfdG9rZW4gPSBhcmdzLmlkX3Rva2VuX2hpbnQgfHwgdXNlciAmJiB1c2VyLmlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBTZXR0aW5nIGlkX3Rva2VuIGludG8gc2lnbm91dCByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmlkX3Rva2VuX2hpbnQgPSBpZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVVzZXIoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogdXNlciByZW1vdmVkLCBjcmVhdGluZyBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaWdub3V0UmVxdWVzdChhcmdzKS50aGVuKHNpZ25vdXRSZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLnVybCA9IHNpZ25vdXRSZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWdub3V0UmVxdWVzdC5zdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25vdXRSZXF1ZXN0LnN0YXRlLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbm91dEVuZCh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbm91dFJlc3BvbnNlKHVybCkudGhlbihzaWdub3V0UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dEVuZDogZ290IHNpZ25vdXQgcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2lnbm91dFJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldm9rZUFjY2Vzc1Rva2VuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VJbnRlcm5hbCh1c2VyLCB0cnVlKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogcmVtb3ZpbmcgdG9rZW4gcHJvcGVydGllcyBmcm9tIHVzZXIgYW5kIHJlLXN0b3JpbmdcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLnJlZnJlc2hfdG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuZXhwaXJlc19hdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci50b2tlbl90eXBlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogdXNlciBzdG9yZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IGFjY2VzcyB0b2tlbiByZXZva2VkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlSW50ZXJuYWwodXNlciwgcmVxdWlyZWQpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICB2YXIgYWNjZXNzX3Rva2VuID0gdXNlci5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgIHZhciByZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZClcclxuICAgICAgICAgICAgICAgIC50aGVuKGF0U3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihydFN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdFN1Y2Nlc3MgJiYgIXJ0U3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiBubyBuZWVkIHRvIHJldm9rZSBkdWUgdG8gbm8gdG9rZW4ocyksIG9yIEpXVCBmb3JtYXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdFN1Y2Nlc3MgfHwgcnRTdWNjZXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZCkge1xyXG4gICAgICAgIC8vIGNoZWNrIGZvciBKV1QgdnMuIHJlZmVyZW5jZSB0b2tlblxyXG4gICAgICAgIGlmICghYWNjZXNzX3Rva2VuIHx8IGFjY2Vzc190b2tlbi5pbmRleE9mKCcuJykgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpLnRoZW4oKCkgPT4gdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKCFyZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2UocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQsIFwicmVmcmVzaF90b2tlblwiKS50aGVuKCgpID0+IHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0U2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF91c2VyU3RvcmVLZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIGB1c2VyOiR7dGhpcy5zZXR0aW5ncy5hdXRob3JpdHl9OiR7dGhpcy5zZXR0aW5ncy5jbGllbnRfaWR9YDtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5nZXQodGhpcy5fdXNlclN0b3JlS2V5KS50aGVuKHN0b3JhZ2VTdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX2xvYWRVc2VyOiB1c2VyIHN0b3JhZ2VTdHJpbmcgbG9hZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFVzZXIuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogbm8gdXNlciBzdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZVVzZXIodXNlcikge1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnN0b3JlVXNlcjogc3RvcmluZyB1c2VyXCIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN0b3JhZ2VTdHJpbmcgPSB1c2VyLnRvU3RvcmFnZVN0cmluZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLnNldCh0aGlzLl91c2VyU3RvcmVLZXksIHN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwic3RvcmVVc2VyLnN0b3JlVXNlcjogcmVtb3ZpbmcgdXNlclwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5yZW1vdmUodGhpcy5fdXNlclN0b3JlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkV2ZW50cyB9IGZyb20gJy4vQWNjZXNzVG9rZW5FdmVudHMuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyRXZlbnRzIGV4dGVuZHMgQWNjZXNzVG9rZW5FdmVudHMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XHJcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIGxvYWRlZFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHVubG9hZGVkXCIpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IgPSBuZXcgRXZlbnQoXCJTaWxlbnQgcmVuZXcgZXJyb3JcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluID0gbmV3IEV2ZW50KFwiVXNlciBzaWduZWQgaW5cIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dCA9IG5ldyBFdmVudChcIlVzZXIgc2lnbmVkIG91dFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHNlc3Npb24gY2hhbmdlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkKHVzZXIsIHJhaXNlRXZlbnQ9dHJ1ZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIubG9hZCh1c2VyKTtcclxuICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTG9hZGVkLnJhaXNlKHVzZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy51bmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIudW5sb2FkKCk7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlckxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyTG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU2lsZW50UmVuZXdFcnJvcihjYikge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVTaWxlbnRSZW5ld0Vycm9yKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3JcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLnJhaXNlKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTaWduZWRJbihjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbi5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJTaWduZWRJbihjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbi5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTaWduZWRJbigpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkSW5cIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluLnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNpZ25lZE91dChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyU2lnbmVkT3V0KGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTaWduZWRPdXQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNpZ25lZE91dFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQucmFpc2UoKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgUmVkaXJlY3ROYXZpZ2F0b3IgfSBmcm9tICcuL1JlZGlyZWN0TmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL1BvcHVwTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lTmF2aWdhdG9yIH0gZnJvbSAnLi9JRnJhbWVOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlcXVlc3QgfSBmcm9tICcuL1NpZ25pblJlcXVlc3QuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7XHJcbmNvbnN0IERlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXJTZXR0aW5ncyBleHRlbmRzIE9pZGNDbGllbnRTZXR0aW5ncyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgcG9wdXBfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBwb3B1cFdpbmRvd0ZlYXR1cmVzLFxyXG4gICAgICAgIHBvcHVwV2luZG93VGFyZ2V0LFxyXG4gICAgICAgIHNpbGVudF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQsXHJcbiAgICAgICAgYXV0b21hdGljU2lsZW50UmVuZXcgPSBmYWxzZSxcclxuICAgICAgICB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcgPSBmYWxzZSxcclxuICAgICAgICBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgPSB0cnVlLFxyXG4gICAgICAgIG1vbml0b3JTZXNzaW9uID0gdHJ1ZSxcclxuICAgICAgICBtb25pdG9yQW5vbnltb3VzU2Vzc2lvbiA9IGZhbHNlLFxyXG4gICAgICAgIGNoZWNrU2Vzc2lvbkludGVydmFsID0gRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsLFxyXG4gICAgICAgIHN0b3BDaGVja1Nlc3Npb25PbkVycm9yID0gdHJ1ZSxcclxuICAgICAgICBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA9IGZhbHNlLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxyXG4gICAgICAgIHJlZGlyZWN0TmF2aWdhdG9yID0gbmV3IFJlZGlyZWN0TmF2aWdhdG9yKCksXHJcbiAgICAgICAgcG9wdXBOYXZpZ2F0b3IgPSBuZXcgUG9wdXBOYXZpZ2F0b3IoKSxcclxuICAgICAgICBpZnJhbWVOYXZpZ2F0b3IgPSBuZXcgSUZyYW1lTmF2aWdhdG9yKCksXHJcbiAgICAgICAgdXNlclN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKHsgc3RvcmU6IEdsb2JhbC5zZXNzaW9uU3RvcmFnZSB9KVxyXG4gICAgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXBfcmVkaXJlY3RfdXJpID0gcG9wdXBfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzID0gcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldCA9IHBvcHVwV2luZG93VGFyZ2V0O1xyXG5cclxuICAgICAgICB0aGlzLl9zaWxlbnRfcmVkaXJlY3RfdXJpID0gc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dCA9IHNpbGVudFJlcXVlc3RUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY1NpbGVudFJlbmV3ID0gYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyA9IGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9tb25pdG9yU2Vzc2lvbiA9IG1vbml0b3JTZXNzaW9uO1xyXG4gICAgICAgIHRoaXMuX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uID0gbW9uaXRvckFub255bW91c1Nlc3Npb247XHJcbiAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSBjaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvciA9IHN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgICAgIGlmIChxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzWzBdICYmIGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlID0gU2lnbmluUmVxdWVzdC5pc09pZGMoYXJndW1lbnRzWzBdLnJlc3BvbnNlX3R5cGUpID8gXCJpZF90b2tlblwiIDogXCJjb2RlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFwiaWRfdG9rZW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IgPSByZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgICAgICB0aGlzLl9wb3B1cE5hdmlnYXRvciA9IHBvcHVwTmF2aWdhdG9yO1xyXG4gICAgICAgIHRoaXMuX2lmcmFtZU5hdmlnYXRvciA9IGlmcmFtZU5hdmlnYXRvcjtcclxuXHJcbiAgICAgICAgdGhpcy5fdXNlclN0b3JlID0gdXNlclN0b3JlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwb3B1cF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cFdpbmRvd0ZlYXR1cmVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwV2luZG93VGFyZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lsZW50X3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgICBnZXQgc2lsZW50UmVxdWVzdFRpbWVvdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudFJlcXVlc3RUaW1lb3V0O1xyXG4gICAgfVxyXG4gICAgZ2V0IGF1dG9tYXRpY1NpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvbWF0aWNTaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vbml0b3JTZXNzaW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb25pdG9yU2Vzc2lvbjtcclxuICAgIH1cclxuICAgIGdldCBtb25pdG9yQW5vbnltb3VzU2Vzc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9uaXRvckFub255bW91c1Nlc3Npb247XHJcbiAgICB9XHJcbiAgICBnZXQgY2hlY2tTZXNzaW9uSW50ZXJ2YWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0b3BDaGVja1Nlc3Npb25PbkVycm9yKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVkaXJlY3ROYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBpZnJhbWVOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lmcmFtZU5hdmlnYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXNlclN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmU7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgV2ViU3RvcmFnZVN0YXRlU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3Ioe3ByZWZpeCA9IFwib2lkYy5cIiwgc3RvcmUgPSBHbG9iYWwubG9jYWxTdG9yYWdlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcclxuICAgICAgICB0aGlzLl9wcmVmaXggPSBwcmVmaXg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5zZXRcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICB0aGlzLl9zdG9yZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLmdldFwiLCBrZXkpO1xyXG5cclxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5fc3RvcmUuZ2V0SXRlbShrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZShrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5yZW1vdmVcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICB0aGlzLl9zdG9yZS5yZW1vdmVJdGVtKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsS2V5cygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRBbGxLZXlzXCIpO1xyXG5cclxuICAgICAgICB2YXIga2V5cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fc3RvcmUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXkgPSB0aGlzLl9zdG9yZS5rZXkoaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKHRoaXMuX3ByZWZpeCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkuc3Vic3RyKHRoaXMuX3ByZWZpeC5sZW5ndGgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXlzKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBqd3MsIEtFWVVUSUwgYXMgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4IH0gZnJvbSAnLi4vLi4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzJztcclxuXHJcbmNvbnN0IEFsbG93ZWRTaWduaW5nQWxncyA9IFsnUlMyNTYnLCAnUlMzODQnLCAnUlM1MTInLCAnUFMyNTYnLCAnUFMzODQnLCAnUFM1MTInLCAnRVMyNTYnLCAnRVMzODQnLCAnRVM1MTInXTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBqd3MsXHJcbiAgICBLZXlVdGlsLFxyXG4gICAgWDUwOSxcclxuICAgIGNyeXB0byxcclxuICAgIGhleHRvYjY0dSxcclxuICAgIGI2NHRvaGV4LFxyXG4gICAgQWxsb3dlZFNpZ25pbmdBbGdzXHJcbn07XHJcbiIsImltcG9ydCB1dWlkNCBmcm9tICd1dWlkL3Y0JztcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgUkZDNDEyMiB2ZXJzaW9uIDQgZ3VpZCAoKVxyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbSgpIHtcclxuICByZXR1cm4gdXVpZDQoKS5yZXBsYWNlKC8tL2csICcnKTtcclxufVxyXG4iLCJjb25zdCBWZXJzaW9uID0gXCIxLjEwLjAtYmV0YS4yXCI7IGV4cG9ydCB7VmVyc2lvbn07Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YUlGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0Vycm9yUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9FdmVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZVdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0luTWVtb3J5V2ViU3RvcmFnZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pvc2VVdGlsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSnNvblNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Mb2cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9NZXRhZGF0YVNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvT2lkY0NsaWVudFNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUG9wdXBOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1JlZGlyZWN0TmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVzcG9uc2VWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TZXNzaW9uTW9uaXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5SZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblN0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbm91dFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWxlbnRSZW5ld1NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TdGF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1RpbWVyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVG9rZW5DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlblJldm9jYXRpb25DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9VcmxVdGlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJJbmZvU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXJFdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlclNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9jcnlwdG8vanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvcmFuZG9tLmpzIiwid2VicGFjazovL09pZGMvLi92ZXJzaW9uLmpzIl0sIm5hbWVzIjpbIlZlcnNpb24iLCJMb2ciLCJPaWRjQ2xpZW50IiwiT2lkY0NsaWVudFNldHRpbmdzIiwiV2ViU3RvcmFnZVN0YXRlU3RvcmUiLCJJbk1lbW9yeVdlYlN0b3JhZ2UiLCJVc2VyTWFuYWdlciIsIkFjY2Vzc1Rva2VuRXZlbnRzIiwiTWV0YWRhdGFTZXJ2aWNlIiwiQ29yZG92YVBvcHVwTmF2aWdhdG9yIiwiQ29yZG92YUlGcmFtZU5hdmlnYXRvciIsIkNoZWNrU2Vzc2lvbklGcmFtZSIsIlRva2VuUmV2b2NhdGlvbkNsaWVudCIsIlNlc3Npb25Nb25pdG9yIiwiR2xvYmFsIiwiVXNlciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIndpbmRvdyIsIllBSE9PIiwidW5kZWZpbmVkIiwibGFuZyIsImV4dGVuZCIsImciLCJoIiwiZiIsIkVycm9yIiwiZCIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIiwic3VwZXJjbGFzcyIsIk9iamVjdCIsImIiLCJlIiwiYyIsInRlc3QiLCJqIiwiaSIsImxlbmd0aCIsImwiLCJrIiwiYSIsIkNyeXB0b0pTIiwibGliIiwiQmFzZSIsIm4iLCJwIiwibyIsIm1peEluIiwiaGFzT3duUHJvcGVydHkiLCJpbml0IiwiJHN1cGVyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjcmVhdGUiLCJ0b1N0cmluZyIsImNsb25lIiwiV29yZEFycmF5Iiwid29yZHMiLCJzaWdCeXRlcyIsInN0cmluZ2lmeSIsImNvbmNhdCIsInQiLCJxIiwicyIsImNsYW1wIiwiciIsImNlaWwiLCJjYWxsIiwic2xpY2UiLCJyYW5kb20iLCJwdXNoIiwibSIsImVuYyIsIkhleCIsImpvaW4iLCJwYXJzZSIsInBhcnNlSW50Iiwic3Vic3RyIiwiTGF0aW4xIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsIlV0ZjgiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0iLCJyZXNldCIsIl9kYXRhIiwiX25EYXRhQnl0ZXMiLCJfYXBwZW5kIiwiX3Byb2Nlc3MiLCJ3IiwieCIsImJsb2NrU2l6ZSIsInYiLCJ1IiwibWF4IiwiX21pbkJ1ZmZlclNpemUiLCJtaW4iLCJfZG9Qcm9jZXNzQmxvY2siLCJzcGxpY2UiLCJIYXNoZXIiLCJjZmciLCJfZG9SZXNldCIsInVwZGF0ZSIsImZpbmFsaXplIiwiX2RvRmluYWxpemUiLCJfY3JlYXRlSGVscGVyIiwiX2NyZWF0ZUhtYWNIZWxwZXIiLCJITUFDIiwiYWxnbyIsIk1hdGgiLCJ4NjQiLCJXb3JkIiwiaGlnaCIsImxvdyIsInRvWDMyIiwiQmFzZTY0IiwiX21hcCIsImNoYXJBdCIsImluZGV4T2YiLCJzcXJ0IiwicG93IiwiU0hBMjU2IiwiX2hhc2giLCJmbG9vciIsIkhtYWNTSEEyNTYiLCJUIiwiZWEiLCJTSEE1MTIiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIlgiLCJLIiwiWSIsIkwiLCJaIiwiTSIsIiQiLCJOIiwiYWEiLCJPIiwiYmEiLCJQIiwiY2EiLCJRIiwieiIsIkEiLCJ5IiwiVSIsIkIiLCJSIiwiQyIsIlMiLCJEIiwiViIsIkUiLCJXIiwiZmEiLCJkYSIsIkhtYWNTSEE1MTIiLCJTSEEzODQiLCJIbWFjU0hBMzg0IiwiYjY0bWFwIiwiYjY0cGFkIiwiaGV4MmI2NCIsInN1YnN0cmluZyIsImI2NHRvaGV4IiwiaW50MmNoYXIiLCJiNjR0b0JBIiwiQXJyYXkiLCJkYml0cyIsImNhbmFyeSIsImpfbG0iLCJCaWdJbnRlZ2VyIiwiZnJvbU51bWJlciIsImZyb21TdHJpbmciLCJuYmkiLCJhbTEiLCJhbTIiLCJhbTMiLCJhcHBOYW1lIiwiYW0iLCJEQiIsIkRNIiwiRFYiLCJCSV9GUCIsIkZWIiwiRjEiLCJGMiIsIkJJX1JNIiwiQklfUkMiLCJyciIsInZ2IiwiaW50QXQiLCJibnBDb3B5VG8iLCJibnBGcm9tSW50IiwibmJ2IiwiZnJvbUludCIsImJucEZyb21TdHJpbmciLCJmcm9tUmFkaXgiLCJaRVJPIiwic3ViVG8iLCJibnBDbGFtcCIsImJuVG9TdHJpbmciLCJuZWdhdGUiLCJ0b1JhZGl4IiwiYm5OZWdhdGUiLCJibkFicyIsImJuQ29tcGFyZVRvIiwibmJpdHMiLCJibkJpdExlbmd0aCIsImJucERMU2hpZnRUbyIsImJucERSU2hpZnRUbyIsImJucExTaGlmdFRvIiwiYm5wUlNoaWZ0VG8iLCJibnBTdWJUbyIsImJucE11bHRpcGx5VG8iLCJhYnMiLCJibnBTcXVhcmVUbyIsImJucERpdlJlbVRvIiwiY29weVRvIiwibFNoaWZ0VG8iLCJkbFNoaWZ0VG8iLCJjb21wYXJlVG8iLCJPTkUiLCJkclNoaWZ0VG8iLCJyU2hpZnRUbyIsImJuTW9kIiwiZGl2UmVtVG8iLCJDbGFzc2ljIiwiY0NvbnZlcnQiLCJtb2QiLCJjUmV2ZXJ0IiwiY1JlZHVjZSIsImNNdWxUbyIsIm11bHRpcGx5VG8iLCJyZWR1Y2UiLCJjU3FyVG8iLCJzcXVhcmVUbyIsImNvbnZlcnQiLCJyZXZlcnQiLCJtdWxUbyIsInNxclRvIiwiYm5wSW52RGlnaXQiLCJNb250Z29tZXJ5IiwibXAiLCJpbnZEaWdpdCIsIm1wbCIsIm1waCIsInVtIiwibXQyIiwibW9udENvbnZlcnQiLCJtb250UmV2ZXJ0IiwibW9udFJlZHVjZSIsIm1vbnRTcXJUbyIsIm1vbnRNdWxUbyIsImJucElzRXZlbiIsImJucEV4cCIsImJuTW9kUG93SW50IiwiaXNFdmVuIiwiZXhwIiwiYml0TGVuZ3RoIiwibW9kUG93SW50IiwiYm5DbG9uZSIsImJuSW50VmFsdWUiLCJibkJ5dGVWYWx1ZSIsImJuU2hvcnRWYWx1ZSIsImJucENodW5rU2l6ZSIsIkxOMiIsImxvZyIsImJuU2lnTnVtIiwiYm5wVG9SYWRpeCIsInNpZ251bSIsImNodW5rU2l6ZSIsImludFZhbHVlIiwiYm5wRnJvbVJhZGl4IiwiZE11bHRpcGx5IiwiZEFkZE9mZnNldCIsImJucEZyb21OdW1iZXIiLCJ0ZXN0Qml0IiwiYml0d2lzZVRvIiwic2hpZnRMZWZ0Iiwib3Bfb3IiLCJpc1Byb2JhYmxlUHJpbWUiLCJuZXh0Qnl0ZXMiLCJiblRvQnl0ZUFycmF5IiwiYm5FcXVhbHMiLCJibk1pbiIsImJuTWF4IiwiYm5wQml0d2lzZVRvIiwib3BfYW5kIiwiYm5BbmQiLCJibk9yIiwib3BfeG9yIiwiYm5Yb3IiLCJvcF9hbmRub3QiLCJibkFuZE5vdCIsImJuTm90IiwiYm5TaGlmdExlZnQiLCJiblNoaWZ0UmlnaHQiLCJsYml0IiwiYm5HZXRMb3dlc3RTZXRCaXQiLCJjYml0IiwiYm5CaXRDb3VudCIsImJuVGVzdEJpdCIsImJucENoYW5nZUJpdCIsImJuU2V0Qml0IiwiY2hhbmdlQml0IiwiYm5DbGVhckJpdCIsImJuRmxpcEJpdCIsImJucEFkZFRvIiwiYm5BZGQiLCJhZGRUbyIsImJuU3VidHJhY3QiLCJibk11bHRpcGx5IiwiYm5TcXVhcmUiLCJibkRpdmlkZSIsImJuUmVtYWluZGVyIiwiYm5EaXZpZGVBbmRSZW1haW5kZXIiLCJibnBETXVsdGlwbHkiLCJibnBEQWRkT2Zmc2V0IiwiTnVsbEV4cCIsIm5Ob3AiLCJuTXVsVG8iLCJuU3FyVG8iLCJiblBvdyIsImJucE11bHRpcGx5TG93ZXJUbyIsImJucE11bHRpcGx5VXBwZXJUbyIsIkJhcnJldHQiLCJyMiIsInEzIiwibXUiLCJkaXZpZGUiLCJiYXJyZXR0Q29udmVydCIsImJhcnJldHRSZXZlcnQiLCJiYXJyZXR0UmVkdWNlIiwibXVsdGlwbHlVcHBlclRvIiwibXVsdGlwbHlMb3dlclRvIiwiYmFycmV0dFNxclRvIiwiYmFycmV0dE11bFRvIiwiYm5Nb2RQb3ciLCJibkdDRCIsImdldExvd2VzdFNldEJpdCIsImJucE1vZEludCIsImJuTW9kSW52ZXJzZSIsInN1YnRyYWN0IiwiYWRkIiwibG93cHJpbWVzIiwibHBsaW0iLCJibklzUHJvYmFibGVQcmltZSIsIm1vZEludCIsIm1pbGxlclJhYmluIiwiYm5wTWlsbGVyUmFiaW4iLCJzaGlmdFJpZ2h0IiwibW9kUG93IiwiYnl0ZVZhbHVlIiwic2hvcnRWYWx1ZSIsInRvQnl0ZUFycmF5IiwiZXF1YWxzIiwiYW5kIiwib3IiLCJ4b3IiLCJhbmROb3QiLCJub3QiLCJiaXRDb3VudCIsInNldEJpdCIsImNsZWFyQml0IiwiZmxpcEJpdCIsIm11bHRpcGx5IiwicmVtYWluZGVyIiwiZGl2aWRlQW5kUmVtYWluZGVyIiwibW9kSW52ZXJzZSIsImdjZCIsInNxdWFyZSIsIkFyY2ZvdXIiLCJBUkM0aW5pdCIsIkFSQzRuZXh0IiwibmV4dCIsInBybmdfbmV3c3RhdGUiLCJybmdfcHNpemUiLCJybmdfc3RhdGUiLCJybmdfcG9vbCIsInJuZ19wcHRyIiwicm5nX3NlZWRfaW50Iiwicm5nX3NlZWRfdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwiY3J5cHRvIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJ1YSIsIlVpbnQ4QXJyYXkiLCJhcHBWZXJzaW9uIiwicm5nX2dldF9ieXRlIiwicm5nX2dldF9ieXRlcyIsIlNlY3VyZVJhbmRvbSIsInBhcnNlQmlnSW50IiwibGluZWJyayIsImJ5dGUySGV4IiwicGtjczFwYWQyIiwib2FlcF9tZ2YxX2FyciIsIm9hZXBfcGFkIiwiS0pVUiIsIk1lc3NhZ2VEaWdlc3QiLCJVdGlsIiwiZ2V0Q2Fub25pY2FsQWxnTmFtZSIsImdldEhhc2hMZW5ndGgiLCJoZXh0b3JzdHIiLCJoYXNoSGV4IiwicnN0cnRvaGV4IiwiUlNBS2V5IiwiZG1wMSIsImRtcTEiLCJjb2VmZiIsIlJTQVNldFB1YmxpYyIsImlzUHVibGljIiwiaXNQcml2YXRlIiwiUlNBRG9QdWJsaWMiLCJSU0FFbmNyeXB0IiwiZG9QdWJsaWMiLCJSU0FFbmNyeXB0T0FFUCIsInNldFB1YmxpYyIsImVuY3J5cHQiLCJlbmNyeXB0T0FFUCIsInR5cGUiLCJFQ0ZpZWxkRWxlbWVudEZwIiwiZmVGcEVxdWFscyIsImZlRnBUb0JpZ0ludGVnZXIiLCJmZUZwTmVnYXRlIiwiZmVGcEFkZCIsInRvQmlnSW50ZWdlciIsImZlRnBTdWJ0cmFjdCIsImZlRnBNdWx0aXBseSIsImZlRnBTcXVhcmUiLCJmZUZwRGl2aWRlIiwiRUNQb2ludEZwIiwiY3VydmUiLCJ6aW52IiwicG9pbnRGcEdldFgiLCJmcm9tQmlnSW50ZWdlciIsInBvaW50RnBHZXRZIiwicG9pbnRGcEVxdWFscyIsImlzSW5maW5pdHkiLCJwb2ludEZwSXNJbmZpbml0eSIsInBvaW50RnBOZWdhdGUiLCJwb2ludEZwQWRkIiwidHdpY2UiLCJnZXRJbmZpbml0eSIsInBvaW50RnBUd2ljZSIsInBvaW50RnBNdWx0aXBseSIsInBvaW50RnBNdWx0aXBseVR3byIsImdldFgiLCJnZXRZIiwibXVsdGlwbHlUd28iLCJFQ0N1cnZlRnAiLCJpbmZpbml0eSIsImN1cnZlRnBHZXRRIiwiY3VydmVGcEdldEEiLCJjdXJ2ZUZwR2V0QiIsImN1cnZlRnBFcXVhbHMiLCJjdXJ2ZUZwR2V0SW5maW5pdHkiLCJjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIiLCJjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgiLCJnZXRRIiwiZ2V0QSIsImdldEIiLCJkZWNvZGVQb2ludEhleCIsImdldEJ5dGVMZW5ndGgiLCJnZXRFbmNvZGVkIiwidG9CeXRlQXJyYXlVbnNpZ25lZCIsInVuc2hpZnQiLCJkZWNvZGVGcm9tIiwiZGVjb2RlRnJvbUhleCIsImFkZDJEIiwidHdpY2UyRCIsInZhbHVlT2YiLCJtdWx0aXBseTJEIiwiaXNPbkN1cnZlIiwidmFsaWRhdGUiLCJqc29uUGFyc2UiLCJSZWdFeHAiLCJtYXRjaCIsInJlcGxhY2UiLCJzaGlmdCIsImFzbjEiLCJBU04xVXRpbCIsImludGVnZXJUb0J5dGVIZXgiLCJiaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleCIsImdldFBFTVN0cmluZ0Zyb21IZXgiLCJoZXh0b3BlbSIsIm5ld09iamVjdCIsIkRFUkJvb2xlYW4iLCJERVJJbnRlZ2VyIiwiREVSQml0U3RyaW5nIiwiREVST2N0ZXRTdHJpbmciLCJERVJOdWxsIiwiREVST2JqZWN0SWRlbnRpZmllciIsIkRFUkVudW1lcmF0ZWQiLCJERVJVVEY4U3RyaW5nIiwiREVSTnVtZXJpY1N0cmluZyIsIkRFUlByaW50YWJsZVN0cmluZyIsIkRFUlRlbGV0ZXhTdHJpbmciLCJERVJJQTVTdHJpbmciLCJERVJVVENUaW1lIiwiREVSR2VuZXJhbGl6ZWRUaW1lIiwiREVSU2VxdWVuY2UiLCJERVJTZXQiLCJERVJUYWdnZWRPYmplY3QiLCJrZXlzIiwiYXJyYXkiLCJ0YWciLCJleHBsaWNpdCIsIm9iaiIsImpzb25Ub0FTTjFIRVgiLCJnZXRFbmNvZGVkSGV4Iiwib2lkSGV4VG9JbnQiLCJvaWRJbnRUb0hleCIsInNwbGl0IiwiQVNOMU9iamVjdCIsImdldExlbmd0aEhleEZyb21WYWx1ZSIsImhWIiwiaFRMViIsImlzTW9kaWZpZWQiLCJnZXRGcmVzaFZhbHVlSGV4IiwiaEwiLCJoVCIsImdldFZhbHVlSGV4IiwiREVSQWJzdHJhY3RTdHJpbmciLCJnZXRTdHJpbmciLCJzZXRTdHJpbmciLCJ1dGY4dG9oZXgiLCJ0b0xvd2VyQ2FzZSIsInNldFN0cmluZ0hleCIsInN0ciIsImhleCIsIkRFUkFic3RyYWN0VGltZSIsImxvY2FsRGF0ZVRvVVRDIiwidXRjIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJmb3JtYXREYXRlIiwiemVyb1BhZGRpbmciLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJzdG9oZXgiLCJzZXRCeURhdGVWYWx1ZSIsIlVUQyIsInNldEJ5RGF0ZSIsIkRFUkFic3RyYWN0U3RydWN0dXJlZCIsInNldEJ5QVNOMU9iamVjdEFycmF5IiwiYXNuMUFycmF5IiwiYXBwZW5kQVNOMU9iamVjdCIsInNldEJ5QmlnSW50ZWdlciIsInNldEJ5SW50ZWdlciIsInNldFZhbHVlSGV4IiwiYmlnaW50Iiwic2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzIiwic2V0VW51c2VkQml0c0FuZEhleFZhbHVlIiwic2V0QnlCaW5hcnlTdHJpbmciLCJzZXRCeUJvb2xlYW5BcnJheSIsIm5ld0ZhbHNlQXJyYXkiLCJiaW4iLCJzZXRWYWx1ZU9pZFN0cmluZyIsInNldFZhbHVlTmFtZSIsIng1MDkiLCJPSUQiLCJuYW1lMm9pZCIsIm9pZCIsIm5hbWUiLCJkYXRlIiwid2l0aE1pbGxpcyIsIm1pbGxpcyIsInNvcnRGbGFnIiwic29ydCIsInNvcnRmbGFnIiwiaXNFeHBsaWNpdCIsImFzbjFPYmplY3QiLCJzZXRBU04xT2JqZWN0IiwiQVNOMUhFWCIsImdldExibGVuIiwiZ2V0TCIsImdldFZibGVuIiwiZ2V0VmlkeCIsImdldFYiLCJnZXRUTFYiLCJnZXROZXh0U2libGluZ0lkeCIsImdldENoaWxkSWR4IiwiZ2V0TnRoQ2hpbGRJZHgiLCJnZXRJZHhieUxpc3QiLCJnZXRUTFZieUxpc3QiLCJnZXRWYnlMaXN0IiwiaGV4dG9vaWRzdHIiLCJkdW1wIiwib21taXRfbG9uZ19vY3RldCIsImlzQVNOMUhFWCIsIm9pZDJuYW1lIiwiaGV4dG91dGY4Iiwib2lkbmFtZSIsIkpTT04iLCJ4NTA5RXh0TmFtZSIsImlzSGV4IiwiQmFzZTY0eCIsInN0b0JBIiwiQkF0b3MiLCJCQXRvaGV4Iiwic3RvYjY0Iiwic3RvYjY0dSIsImI2NHRvYjY0dSIsImI2NHV0b3MiLCJiNjR1dG9iNjQiLCJoZXh0b2I2NHUiLCJiNjR1dG9oZXgiLCJ1dGY4dG9iNjR1IiwiYjY0dXRvdXRmOCIsIkJ1ZmZlciIsInVyaWNtcHRvaGV4IiwiZW5jb2RlVVJJQ29tcG9uZW50QWxsIiwiaGV4dG91cmljbXAiLCJ1dGY4dG9iNjQiLCJiNjR0b3V0ZjgiLCJoZXh0b2I2NCIsImhleHRvYjY0bmwiLCJiNjRubHRvaGV4IiwicGVtdG9oZXgiLCJoZXh0b0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJEYXRhVmlldyIsInNldFVpbnQ4IiwiQXJyYXlCdWZmZXJ0b2hleCIsImJ5dGVMZW5ndGgiLCJnZXRVaW50OCIsInp1bHV0b21zZWMiLCJ6dWx1dG9zZWMiLCJ6dWx1dG9kYXRlIiwiZGF0ZXRvenVsdSIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImlwdjZ0b2hleCIsInJlcGVhdCIsImhleHRvaXB2NiIsImhleHRvaXAiLCJpcHRvaGV4IiwibmV3bGluZV90b1VuaXgiLCJuZXdsaW5lX3RvRG9zIiwiaXNJbnRlZ2VyIiwiaXNCYXNlNjQiLCJpc0Jhc2U2NFVSTCIsImlzSW50ZWdlckFycmF5IiwiaGV4dG9wb3NoZXgiLCJpbnRhcnlzdHJ0b2hleCIsIm1hcCIsInN0cmRpZmZpZHgiLCJESUdFU1RJTkZPSEVBRCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJERUZBVUxUUFJPVklERVIiLCJobWFjbWQ1IiwiaG1hY3NoYTEiLCJobWFjc2hhMjI0IiwiaG1hY3NoYTI1NiIsImhtYWNzaGEzODQiLCJobWFjc2hhNTEyIiwiaG1hY3JpcGVtZDE2MCIsIk1ENXdpdGhSU0EiLCJTSEExd2l0aFJTQSIsIlNIQTIyNHdpdGhSU0EiLCJTSEEyNTZ3aXRoUlNBIiwiU0hBMzg0d2l0aFJTQSIsIlNIQTUxMndpdGhSU0EiLCJSSVBFTUQxNjB3aXRoUlNBIiwiTUQ1d2l0aEVDRFNBIiwiU0hBMXdpdGhFQ0RTQSIsIlNIQTIyNHdpdGhFQ0RTQSIsIlNIQTI1NndpdGhFQ0RTQSIsIlNIQTM4NHdpdGhFQ0RTQSIsIlNIQTUxMndpdGhFQ0RTQSIsIlJJUEVNRDE2MHdpdGhFQ0RTQSIsIlNIQTF3aXRoRFNBIiwiU0hBMjI0d2l0aERTQSIsIlNIQTI1NndpdGhEU0EiLCJNRDV3aXRoUlNBYW5kTUdGMSIsIlNIQTF3aXRoUlNBYW5kTUdGMSIsIlNIQTIyNHdpdGhSU0FhbmRNR0YxIiwiU0hBMjU2d2l0aFJTQWFuZE1HRjEiLCJTSEEzODR3aXRoUlNBYW5kTUdGMSIsIlNIQTUxMndpdGhSU0FhbmRNR0YxIiwiUklQRU1EMTYwd2l0aFJTQWFuZE1HRjEiLCJDUllQVE9KU01FU1NBR0VESUdFU1ROQU1FIiwiTUQ1IiwiU0hBMSIsIlNIQTIyNCIsIlJJUEVNRDE2MCIsImdldERpZ2VzdEluZm9IZXgiLCJnZXRQYWRkZWREaWdlc3RJbmZvSGV4IiwiaGFzaFN0cmluZyIsImFsZyIsImRpZ2VzdFN0cmluZyIsImRpZ2VzdEhleCIsInByb3YiLCJzaGEyNTZIZXgiLCJzaGE1MTJIZXgiLCJTRUNVUkVSQU5ET01HRU4iLCJnZXRSYW5kb21IZXhPZk5ieXRlcyIsImdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcyIsImdldFJhbmRvbUhleE9mTmJpdHMiLCJnZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyIsImdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgiLCJnZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXgiLCJzZXRBbGdBbmRQcm92aWRlciIsIm1kIiwidXBkYXRlU3RyaW5nIiwidXBkYXRlSGV4IiwiZGlnZXN0Iiwic2pjbCIsImhhc2giLCJjb2RlYyIsInRvQml0cyIsImZyb21CaXRzIiwiYWxnTmFtZSIsInByb3ZOYW1lIiwiSEFTSExFTkdUSCIsIk1hYyIsImFsZ1Byb3YiLCJtYWMiLCJwYXNzIiwiZG9GaW5hbCIsImRvRmluYWxTdHJpbmciLCJkb0ZpbmFsSGV4Iiwic2V0UGFzc3dvcmQiLCJ1dGY4IiwicnN0ciIsImI2NCIsImI2NHUiLCJTaWduYXR1cmUiLCJfc2V0QWxnTmFtZXMiLCJtZEFsZ05hbWUiLCJwdWJrZXlBbGdOYW1lIiwiX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUiLCJLRVlVVElMIiwiZ2V0S2V5IiwicHJ2S2V5Iiwic3RhdGUiLCJwdWJLZXkiLCJzaWduIiwic0hhc2hIZXgiLCJlY3BydmhleCIsImVjY3VydmVuYW1lIiwiRUNEU0EiLCJoU2lnbiIsInNpZ25IZXgiLCJzaWduV2l0aE1lc3NhZ2VIYXNoUFNTIiwicHNzU2FsdExlbiIsInNpZ25XaXRoTWVzc2FnZUhhc2giLCJEU0EiLCJzaWduU3RyaW5nIiwidmVyaWZ5IiwiZWNwdWJoZXgiLCJ2ZXJpZnlIZXgiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1MiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2giLCJhbGdQcm92TmFtZSIsImluaXRQYXJhbXMiLCJwc3NzYWx0bGVuIiwicHJ2a2V5cGVtIiwicHJ2a2V5cGFzIiwiQ2lwaGVyIiwiZ2V0QWxnQnlLZXlBbmROYW1lIiwiZGVjcnlwdCIsImRlY3J5cHRPQUVQIiwib2lkaGV4Mm5hbWUiLCJnZXRCaWdSYW5kb20iLCJzZXROYW1lZEN1cnZlIiwiZWNwYXJhbXMiLCJFQ1BhcmFtZXRlckRCIiwiZ2V0QnlOYW1lIiwicHJ2S2V5SGV4IiwicHViS2V5SGV4IiwiY3VydmVOYW1lIiwic2V0UHJpdmF0ZUtleUhleCIsInNldFB1YmxpY0tleUhleCIsImdldFB1YmxpY0tleVhZSGV4Iiwia2V5bGVuIiwiZ2V0U2hvcnROSVNUUEN1cnZlTmFtZSIsImdlbmVyYXRlS2V5UGFpckhleCIsImJpUlNTaWdUb0FTTjFTaWciLCJmcm9tQnl0ZUFycmF5VW5zaWduZWQiLCJzZXJpYWxpemVTaWciLCJwYXJzZVNpZ0hleCIsInZlcmlmeVJhdyIsIkJpdGNvaW4iLCJpc0FycmF5IiwicGFyc2VTaWciLCJ0b0J5dGVBcnJheVNpZ25lZCIsInBhcnNlU2lnQ29tcGFjdCIsInJlYWRQS0NTNVBydktleUhleCIsImdldE5hbWUiLCJyZWFkUEtDUzhQcnZLZXlIZXgiLCJyZWFkUEtDUzhQdWJLZXlIZXgiLCJyZWFkQ2VydFB1YktleUhleCIsInBydiIsInB1YiIsInBhcnNlU2lnSGV4SW5IZXhSUyIsImFzbjFTaWdUb0NvbmNhdFNpZyIsImNvbmNhdFNpZ1RvQVNOMVNpZyIsImhleFJTU2lnVG9BU04xU2lnIiwicmVnaXN0IiwiQUVTIiwiVHJpcGxlREVTIiwiREVTIiwia2V5IiwiaXYiLCJjaXBoZXJ0ZXh0IiwicHJvYyIsImVwcm9jIiwiaXZsZW4iLCJjaXBoZXIiLCJpdnNhbHQiLCJkYXRhIiwia2V5aGV4IiwiaXZoZXgiLCJ2ZXJzaW9uIiwicGFyc2VQS0NTNVBFTSIsImdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdCIsImRlY3J5cHRLZXlCNjQiLCJnZXREZWNyeXB0ZWRLZXlIZXgiLCJnZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgiLCJ0b1VwcGVyQ2FzZSIsInBhcnNlSGV4T2ZFbmNyeXB0ZWRQS0NTOCIsImVuY3J5cHRpb25TY2hlbWVBbGciLCJlbmNyeXB0aW9uU2NoZW1lSVYiLCJwYmtkZjJTYWx0IiwicGJrZGYySXRlciIsImdldFBCS0RGMktleUhleEZyb21QYXJhbSIsIlBCS0RGMiIsImtleVNpemUiLCJpdGVyYXRpb25zIiwiX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgiLCJwYXJzZVBsYWluUHJpdmF0ZVBLQ1M4SGV4IiwiYWxncGFyYW0iLCJhbGdvaWQiLCJrZXlpZHgiLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU0iLCJfZ2V0S2V5RnJvbVB1YmxpY1BLQ1M4SGV4IiwicGFyc2VQdWJsaWNSYXdSU0FLZXlIZXgiLCJwYXJzZVB1YmxpY1BLQ1M4SGV4IiwieHkiLCJrdHkiLCJkcCIsImRxIiwiY28iLCJxaSIsInNldFByaXZhdGVFeCIsInNldFByaXZhdGUiLCJjcnYiLCJYNTA5IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgiLCJnZXRQdWJsaWNLZXlGcm9tQ2VydFBFTSIsImdlbmVyYXRlS2V5cGFpciIsImdlbmVyYXRlIiwicHJ2S2V5T2JqIiwicHViS2V5T2JqIiwiZ2V0UEVNIiwiU3ViamVjdFB1YmxpY0tleUluZm8iLCJzZXEiLCJvY3RzdHIiLCJiaXRzdHIiLCJnZXRLZXlGcm9tQ1NSUEVNIiwiZ2V0S2V5RnJvbUNTUkhleCIsInBhcnNlQ1NSSGV4IiwicDhwdWJrZXloZXgiLCJnZXRKV0tGcm9tS2V5IiwiZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsImdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsInJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZyIsInJlYWRQS0NTNVB1YktleUhleCIsInJlYWRDZXJ0SGV4IiwiZ2V0UHVibGljS2V5SGV4IiwiX1JFX0hFWERFQ09OTFkiLCJjb21waWxlIiwiX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyIsImRvUHJpdmF0ZSIsInBzc19tZ2YxX3N0ciIsInNpZ25QU1MiLCJfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkiLCJfcnNhc2lnbl9nZXRIZXhEaWdlc3RJbmZvRnJvbVNpZyIsIl9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvIiwidmVyaWZ5UFNTIiwiU0FMVF9MRU5fSExFTiIsIlNBTFRfTEVOX01BWCIsIlNBTFRfTEVOX1JFQ09WRVIiLCJmb2Zmc2V0IiwiYUV4dEluZm8iLCJnZXRWZXJzaW9uIiwiZ2V0U2VyaWFsTnVtYmVySGV4IiwiZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQiLCJnZXRJc3N1ZXJIZXgiLCJnZXRJc3N1ZXJTdHJpbmciLCJoZXgyZG4iLCJnZXRTdWJqZWN0SGV4IiwiZ2V0U3ViamVjdFN0cmluZyIsImdldE5vdEJlZm9yZSIsImdldE5vdEFmdGVyIiwiZ2V0UHVibGljS2V5SWR4IiwiZ2V0UHVibGljS2V5Q29udGVudElkeCIsImdldFB1YmxpY0tleSIsImdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWUiLCJnZXRTaWduYXR1cmVWYWx1ZUhleCIsInZlcmlmeVNpZ25hdHVyZSIsInBhcnNlRXh0IiwiY3JpdGljYWwiLCJ2aWR4IiwiZ2V0RXh0SW5mbyIsImdldEV4dEJhc2ljQ29uc3RyYWludHMiLCJjQSIsInBhdGhMZW4iLCJnZXRFeHRLZXlVc2FnZUJpbiIsImdldEV4dEtleVVzYWdlU3RyaW5nIiwiS0VZVVNBR0VfTkFNRSIsImdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyIiwiZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllciIsImtpZCIsImdldEV4dEV4dEtleVVzYWdlTmFtZSIsImdldEV4dFN1YmplY3RBbHROYW1lIiwiZ2V0RXh0U3ViamVjdEFsdE5hbWUyIiwiZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJIiwiZ2V0RXh0QUlBSW5mbyIsIm9jc3AiLCJjYWlzc3VlciIsImdldEV4dENlcnRpZmljYXRlUG9saWNpZXMiLCJpZCIsImNwcyIsInVub3RpY2UiLCJyZWFkQ2VydFBFTSIsImdldEluZm8iLCJoZXgycmRuIiwiaGV4MmF0dHJUeXBlVmFsdWUiLCJvaWQyYXR5cGUiLCJnZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTSIsImp3cyIsIkpXUyIsImlzU2FmZUpTT05TdHJpbmciLCJwYXJzZUpXUyIsInBhcnNlZEpXUyIsInNpZ3ZhbEgiLCJoZWFkQjY0VSIsInBheWxvYWRCNjRVIiwic2lndmFsQjY0VSIsInNpIiwic2lndmFsQkkiLCJoZWFkUyIsInBheWxvYWRTIiwicmVhZFNhZmVKU09OU3RyaW5nIiwiandzYWxnMnNpZ2FsZyIsImhBU04xU2lnIiwiaGVhZGVyT2JqIiwicGF5bG9hZE9iaiIsImhlYWRlclBQIiwicGF5bG9hZFBQIiwic2lnSGV4IiwidmVyaWZ5SldUIiwiaW5BcnJheSIsImluY2x1ZGVkQXJyYXkiLCJpc3MiLCJzdWIiLCJhdWQiLCJJbnREYXRlIiwiZ2V0Tm93IiwidmVyaWZ5QXQiLCJncmFjZVBlcmlvZCIsIm5iZiIsImlhdCIsImp0aSIsIkhTMjU2IiwiSFMzODQiLCJIUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIkVTMjU2IiwiRVMzODQiLCJQUzI1NiIsIlBTMzg0IiwiUFM1MTIiLCJub25lIiwiZ2V0RW5jb2RlZFNpZ25hdHVyZVZhbHVlRnJvbUpXUyIsImdldEpXS3RodW1icHJpbnQiLCJnZXQiLCJnZXRadWx1IiwiaW50RGF0ZTJVVENTdHJpbmciLCJ0b1VUQ1N0cmluZyIsImludERhdGUyWnVsdSIsIkVEU0EiLCJfY3J5cHRvIiwiRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXIiLCJUaW1lciIsImFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmciLCJfYWNjZXNzVG9rZW5FeHBpcmVkIiwibG9hZCIsImNvbnRhaW5lciIsImFjY2Vzc190b2tlbiIsImV4cGlyZXNfaW4iLCJkdXJhdGlvbiIsImRlYnVnIiwiZXhwaXJpbmciLCJjYW5jZWwiLCJleHBpcmVkIiwidW5sb2FkIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmluZyIsImNiIiwiYWRkSGFuZGxlciIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmciLCJyZW1vdmVIYW5kbGVyIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmVkIiwicmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkIiwiRGVmYXVsdEludGVydmFsIiwiY2FsbGJhY2siLCJjbGllbnRfaWQiLCJ1cmwiLCJpbnRlcnZhbCIsInN0b3BPbkVycm9yIiwiX2NhbGxiYWNrIiwiX2NsaWVudF9pZCIsIl91cmwiLCJfaW50ZXJ2YWwiLCJfc3RvcE9uRXJyb3IiLCJpZHgiLCJfZnJhbWVfb3JpZ2luIiwiX2ZyYW1lIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwicG9zaXRpb24iLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJzcmMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9ubG9hZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIl9ib3VuZE1lc3NhZ2VFdmVudCIsIl9tZXNzYWdlIiwiYmluZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJvcmlnaW4iLCJzb3VyY2UiLCJjb250ZW50V2luZG93IiwiZXJyb3IiLCJzdG9wIiwic3RhcnQiLCJzZXNzaW9uX3N0YXRlIiwiX3Nlc3Npb25fc3RhdGUiLCJzZW5kIiwicG9zdE1lc3NhZ2UiLCJfdGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJwcmVwYXJlIiwicGFyYW1zIiwicG9wdXBXaW5kb3dGZWF0dXJlcyIsInBvcHVwIiwiQ29yZG92YVBvcHVwV2luZG93IiwiRGVmYXVsdFBvcHVwRmVhdHVyZXMiLCJEZWZhdWx0UG9wdXBUYXJnZXQiLCJfcHJvbWlzZSIsInJlamVjdCIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImZlYXR1cmVzIiwidGFyZ2V0IiwicG9wdXBXaW5kb3dUYXJnZXQiLCJyZWRpcmVjdF91cmkiLCJzdGFydFVybCIsIl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZCIsImNvcmRvdmFNZXRhZGF0YSIsInNvbWUiLCJuYXZpZ2F0ZSIsIl9lcnJvciIsImNvcmRvdmEiLCJyZXF1aXJlIiwibWV0YWRhdGEiLCJfcG9wdXAiLCJJbkFwcEJyb3dzZXIiLCJvcGVuIiwiX2V4aXRDYWxsYmFja0V2ZW50IiwiX2V4aXRDYWxsYmFjayIsIl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50IiwiX2xvYWRTdGFydENhbGxiYWNrIiwicHJvbWlzZSIsImV2ZW50IiwiX3N1Y2Nlc3MiLCJtZXNzYWdlIiwiX2NsZWFudXAiLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFcnJvclJlc3BvbnNlIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJlcnJvcl91cmkiLCJFdmVudCIsIl9uYW1lIiwiX2NhbGxiYWNrcyIsImZpbmRJbmRleCIsIml0ZW0iLCJyYWlzZSIsInRpbWVyIiwiaGFuZGxlIiwidGVzdGluZyIsInJlcXVlc3QiLCJfdGVzdGluZyIsInNldFhNTEh0dHBSZXF1ZXN0IiwibmV3UmVxdWVzdCIsImxvY2F0aW9uIiwibG9jYWxTdG9yYWdlIiwic2Vzc2lvblN0b3JhZ2UiLCJYTUxIdHRwUmVxdWVzdCIsIklGcmFtZU5hdmlnYXRvciIsImZyYW1lIiwiSUZyYW1lV2luZG93Iiwibm90aWZ5UGFyZW50IiwiRGVmYXVsdFRpbWVvdXQiLCJ0aW1lb3V0Iiwic2lsZW50UmVxdWVzdFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiX3RpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsIl9vcmlnaW4iLCJmcmFtZUVsZW1lbnQiLCJocmVmIiwicGFyZW50IiwicHJvdG9jb2wiLCJob3N0IiwiZ2V0SXRlbSIsInNldEl0ZW0iLCJ2YWx1ZSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsImdldE93blByb3BlcnR5TmFtZXMiLCJKb3NlVXRpbCIsIktleVV0aWwiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJnZXRKb3NlVXRpbCIsInBhcnNlSnd0Iiwiand0IiwidG9rZW4iLCJoZWFkZXIiLCJwYXlsb2FkIiwidmFsaWRhdGVKd3QiLCJpc3N1ZXIiLCJhdWRpZW5jZSIsImNsb2NrU2tldyIsIm5vdyIsInRpbWVJbnNlbnNpdGl2ZSIsIng1YyIsIl92YWxpZGF0ZUp3dCIsInZhbGlkYXRlSnd0QXR0cmlidXRlcyIsInZhbGlkQXVkaWVuY2UiLCJhenAiLCJsb3dlck5vdyIsInVwcGVyTm93IiwidGhlbiIsImhleFRvQmFzZTY0VXJsIiwiSnNvblNlcnZpY2UiLCJhZGRpdGlvbmFsQ29udGVudFR5cGVzIiwiWE1MSHR0cFJlcXVlc3RDdG9yIiwiand0SGFuZGxlciIsIl9jb250ZW50VHlwZXMiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsInNldFJlcXVlc3RIZWFkZXIiLCJwb3N0Rm9ybSIsIm5vcExvZ2dlciIsImluZm8iLCJ3YXJuIiwiTk9ORSIsIkVSUk9SIiwiV0FSTiIsIklORk8iLCJERUJVRyIsImxvZ2dlciIsImxldmVsIiwiYXJncyIsImZyb20iLCJPaWRjTWV0YWRhdGFVcmxQYXRoIiwic2V0dGluZ3MiLCJKc29uU2VydmljZUN0b3IiLCJfc2V0dGluZ3MiLCJfanNvblNlcnZpY2UiLCJnZXRNZXRhZGF0YSIsIm1ldGFkYXRhVXJsIiwiZ2V0SXNzdWVyIiwiX2dldE1ldGFkYXRhUHJvcGVydHkiLCJnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQiLCJnZXRVc2VySW5mb0VuZHBvaW50IiwiZ2V0VG9rZW5FbmRwb2ludCIsIm9wdGlvbmFsIiwiZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lIiwiZ2V0RW5kU2Vzc2lvbkVuZHBvaW50IiwiZ2V0UmV2b2NhdGlvbkVuZHBvaW50IiwiZ2V0S2V5c0VuZHBvaW50IiwiZ2V0U2lnbmluZ0tleXMiLCJzaWduaW5nS2V5cyIsImp3a3NfdXJpIiwia2V5U2V0IiwiX21ldGFkYXRhVXJsIiwiYXV0aG9yaXR5IiwiY3JlYXRlU2lnbmluUmVxdWVzdCIsInJlc3BvbnNlX3R5cGUiLCJzY29wZSIsInByb21wdCIsIm1heF9hZ2UiLCJ1aV9sb2NhbGVzIiwiaWRfdG9rZW5faGludCIsImxvZ2luX2hpbnQiLCJhY3JfdmFsdWVzIiwicmVzb3VyY2UiLCJyZXF1ZXN0X3VyaSIsInJlc3BvbnNlX21vZGUiLCJleHRyYVF1ZXJ5UGFyYW1zIiwiZXh0cmFUb2tlblBhcmFtcyIsInJlcXVlc3RfdHlwZSIsInNraXBVc2VySW5mbyIsInN0YXRlU3RvcmUiLCJTaWduaW5SZXF1ZXN0IiwiaXNDb2RlIiwiX21ldGFkYXRhU2VydmljZSIsInNpZ25pblJlcXVlc3QiLCJjbGllbnRfc2VjcmV0Iiwic2lnbmluU3RhdGUiLCJfc3RhdGVTdG9yZSIsInNldCIsInRvU3RvcmFnZVN0cmluZyIsInJlYWRTaWduaW5SZXNwb25zZVN0YXRlIiwicmVtb3ZlU3RhdGUiLCJ1c2VRdWVyeSIsImRlbGltaXRlciIsInJlc3BvbnNlIiwiU2lnbmluUmVzcG9uc2UiLCJzdGF0ZUFwaSIsInJlbW92ZSIsInN0b3JlZFN0YXRlU3RyaW5nIiwiU2lnbmluU3RhdGUiLCJmcm9tU3RvcmFnZVN0cmluZyIsInByb2Nlc3NTaWduaW5SZXNwb25zZSIsIl92YWxpZGF0b3IiLCJ2YWxpZGF0ZVNpZ25pblJlc3BvbnNlIiwiY3JlYXRlU2lnbm91dFJlcXVlc3QiLCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJTaWdub3V0UmVxdWVzdCIsInNpZ25vdXRTdGF0ZSIsInJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSIsIlNpZ25vdXRSZXNwb25zZSIsInN0YXRlS2V5IiwiU3RhdGUiLCJwcm9jZXNzU2lnbm91dFJlc3BvbnNlIiwidmFsaWRhdGVTaWdub3V0UmVzcG9uc2UiLCJjbGVhclN0YWxlU3RhdGUiLCJzdGFsZVN0YXRlQWdlIiwidmFsaWRhdG9yIiwibWV0YWRhdGFTZXJ2aWNlIiwiRGVmYXVsdFJlc3BvbnNlVHlwZSIsIkRlZmF1bHRTY29wZSIsIkRlZmF1bHRTdGFsZVN0YXRlQWdlIiwiRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyIsImZpbHRlclByb3RvY29sQ2xhaW1zIiwibG9hZFVzZXJJbmZvIiwidXNlckluZm9Kd3RJc3N1ZXIiLCJSZXNwb25zZVZhbGlkYXRvckN0b3IiLCJSZXNwb25zZVZhbGlkYXRvciIsIk1ldGFkYXRhU2VydmljZUN0b3IiLCJfYXV0aG9yaXR5IiwiX21ldGFkYXRhIiwiX3NpZ25pbmdLZXlzIiwiX2NsaWVudF9zZWNyZXQiLCJfcmVzcG9uc2VfdHlwZSIsIl9zY29wZSIsIl9yZWRpcmVjdF91cmkiLCJfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3Byb21wdCIsIl9kaXNwbGF5IiwiX21heF9hZ2UiLCJfdWlfbG9jYWxlcyIsIl9hY3JfdmFsdWVzIiwiX3Jlc291cmNlIiwiX3Jlc3BvbnNlX21vZGUiLCJfZmlsdGVyUHJvdG9jb2xDbGFpbXMiLCJfbG9hZFVzZXJJbmZvIiwiX3N0YWxlU3RhdGVBZ2UiLCJfY2xvY2tTa2V3IiwiX3VzZXJJbmZvSnd0SXNzdWVyIiwiX2V4dHJhUXVlcnlQYXJhbXMiLCJfZXh0cmFUb2tlblBhcmFtcyIsIlBvcHVwTmF2aWdhdG9yIiwiUG9wdXBXaW5kb3ciLCJrZWVwT3BlbiIsIm5vdGlmeU9wZW5lciIsIkNoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIiLCJfY2hlY2tGb3JQb3B1cENsb3NlZCIsIl9pZCIsImZvY3VzIiwiY2xvc2VkIiwib3BlbmVyIiwiVXJsVXRpbGl0eSIsInBhcnNlVXJsRnJhZ21lbnQiLCJSZWRpcmVjdE5hdmlnYXRvciIsInVzZVJlcGxhY2VUb05hdmlnYXRlIiwiUHJvdG9jb2xDbGFpbXMiLCJVc2VySW5mb1NlcnZpY2VDdG9yIiwiVXNlckluZm9TZXJ2aWNlIiwiam9zZVV0aWwiLCJUb2tlbkNsaWVudEN0b3IiLCJUb2tlbkNsaWVudCIsIl91c2VySW5mb1NlcnZpY2UiLCJfam9zZVV0aWwiLCJfdG9rZW5DbGllbnQiLCJfcHJvY2Vzc1NpZ25pblBhcmFtcyIsIl92YWxpZGF0ZVRva2VucyIsIl9wcm9jZXNzQ2xhaW1zIiwibm9uY2UiLCJpZF90b2tlbiIsImNvZGVfdmVyaWZpZXIiLCJjb2RlIiwiaXNPcGVuSWRDb25uZWN0IiwicHJvZmlsZSIsImdldENsYWltcyIsImNsYWltcyIsIl9tZXJnZUNsYWltcyIsImNsYWltczEiLCJjbGFpbXMyIiwicmVzdWx0IiwiYXNzaWduIiwidmFsdWVzIiwiZm9yRWFjaCIsIl9wcm9jZXNzQ29kZSIsIl92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbiIsIl92YWxpZGF0ZUlkVG9rZW4iLCJleGNoYW5nZUNvZGUiLCJ0b2tlblJlc3BvbnNlIiwiX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMiLCJjbG9ja1NrZXdJblNlY29uZHMiLCJfdmFsaWRhdGVBY2Nlc3NUb2tlbiIsIl9maWx0ZXJCeUFsZyIsImZpbHRlciIsImF0X2hhc2giLCJoYXNoQWxnIiwiaGFzaEJpdHMiLCJzaGEiLCJsZWZ0IiwibGVmdF9iNjR1IiwidXNlck1hbmFnZXIiLCJDaGVja1Nlc3Npb25JRnJhbWVDdG9yIiwiX3VzZXJNYW5hZ2VyIiwiX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJldmVudHMiLCJhZGRVc2VyTG9hZGVkIiwiX3N0YXJ0IiwiYWRkVXNlclVubG9hZGVkIiwiX3N0b3AiLCJnZXRVc2VyIiwidXNlciIsIm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uIiwicXVlcnlTZXNzaW9uU3RhdHVzIiwidG1wVXNlciIsInNlc3Npb24iLCJzaWQiLCJjYXRjaCIsImVyciIsIl9zdWIiLCJfc2lkIiwiX2NoZWNrU2Vzc2lvbklGcmFtZSIsIl9jaGVja1Nlc3Npb25JbnRlcnZhbCIsIl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvciIsInRpbWVySGFuZGxlIiwicmFpc2VFdmVudCIsIl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCIsIl9yYWlzZVVzZXJTaWduZWRPdXQiLCJfcmFpc2VVc2VyU2lnbmVkSW4iLCJjaGVja1Nlc3Npb25JbnRlcnZhbCIsInN0b3BDaGVja1Nlc3Npb25PbkVycm9yIiwib2lkYyIsImlzT2lkYyIsImFkZFF1ZXJ5UGFyYW0iLCJjb2RlX2NoYWxsZW5nZSIsImlzT0F1dGgiLCJPaWRjU2NvcGUiLCJ0b2tlbl90eXBlIiwiZXhwaXJlc19hdCIsInNjb3BlcyIsIl9ub25jZSIsIl9jb2RlX3ZlcmlmaWVyIiwiX2NvZGVfY2hhbGxlbmdlIiwiX3NraXBVc2VySW5mbyIsImNyZWF0ZWQiLCJzdG9yYWdlU3RyaW5nIiwiU2lsZW50UmVuZXdTZXJ2aWNlIiwiX3Rva2VuRXhwaXJpbmciLCJzaWduaW5TaWxlbnQiLCJfcmFpc2VTaWxlbnRSZW5ld0Vycm9yIiwiX2NyZWF0ZWQiLCJfcmVxdWVzdF90eXBlIiwic3RvcmFnZSIsImFnZSIsImN1dG9mZiIsImdldEFsbEtleXMiLCJwcm9taXNlcyIsImFsbCIsIlRpbWVyRHVyYXRpb24iLCJub3dGdW5jIiwiX25vd0Z1bmMiLCJleHBpcmF0aW9uIiwiX3RpbWVySGFuZGxlIiwiX2V4cGlyYXRpb24iLCJ0aW1lckR1cmF0aW9uIiwiZGlmZiIsImdyYW50X3R5cGUiLCJleGNoYW5nZVJlZnJlc2hUb2tlbiIsInJlZnJlc2hfdG9rZW4iLCJBY2Nlc3NUb2tlblR5cGVIaW50IiwiUmVmcmVzaFRva2VuVHlwZUhpbnQiLCJfWE1MSHR0cFJlcXVlc3RDdG9yIiwicmV2b2tlIiwicmVxdWlyZWQiLCJfcmV2b2tlIiwieGhyIiwiZ2xvYmFsIiwibGFzdEluZGV4T2YiLCJyZWdleCIsImNvdW50ZXIiLCJleGVjIiwicHJvcCIsIl9nZXRDbGFpbXNGcm9tSnd0IiwiaXNzdWVyUHJvbWlzZSIsIlNpbGVudFJlbmV3U2VydmljZUN0b3IiLCJTZXNzaW9uTW9uaXRvckN0b3IiLCJUb2tlblJldm9jYXRpb25DbGllbnRDdG9yIiwiVXNlck1hbmFnZXJTZXR0aW5ncyIsIl9ldmVudHMiLCJVc2VyTWFuYWdlckV2ZW50cyIsIl9zaWxlbnRSZW5ld1NlcnZpY2UiLCJhdXRvbWF0aWNTaWxlbnRSZW5ldyIsInN0YXJ0U2lsZW50UmVuZXciLCJtb25pdG9yU2Vzc2lvbiIsIl9zZXNzaW9uTW9uaXRvciIsIl90b2tlblJldm9jYXRpb25DbGllbnQiLCJfbG9hZFVzZXIiLCJyZW1vdmVVc2VyIiwic3RvcmVVc2VyIiwic2lnbmluUmVkaXJlY3QiLCJuYXZQYXJhbXMiLCJfc2lnbmluU3RhcnQiLCJfcmVkaXJlY3ROYXZpZ2F0b3IiLCJzaWduaW5SZWRpcmVjdENhbGxiYWNrIiwiX3NpZ25pbkVuZCIsInNpZ25pblBvcHVwIiwicG9wdXBfcmVkaXJlY3RfdXJpIiwiX3NpZ25pbiIsIl9wb3B1cE5hdmlnYXRvciIsInNpZ25pblBvcHVwQ2FsbGJhY2siLCJfc2lnbmluQ2FsbGJhY2siLCJfdXNlUmVmcmVzaFRva2VuIiwiaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3IiwidmFsaWRhdGVTdWJPblNpbGVudFJlbmV3IiwiY3VycmVudF9zdWIiLCJfc2lnbmluU2lsZW50SWZyYW1lIiwiaWRUb2tlblZhbGlkYXRpb24iLCJfdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuIiwiYXV0aF90aW1lIiwic2lsZW50X3JlZGlyZWN0X3VyaSIsIl9pZnJhbWVOYXZpZ2F0b3IiLCJzaWduaW5TaWxlbnRDYWxsYmFjayIsInNpZ25pbkNhbGxiYWNrIiwic2lnbm91dENhbGxiYWNrIiwic2lnbm91dFJlZGlyZWN0Q2FsbGJhY2siLCJzaWdub3V0UG9wdXBDYWxsYmFjayIsInF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlIiwibmF2UmVzcG9uc2UiLCJzaWduaW5SZXNwb25zZSIsIm5hdmlnYXRvclBhcmFtcyIsInNpZ25vdXRSZWRpcmVjdCIsInBvc3RMb2dvdXRSZWRpcmVjdFVyaSIsIl9zaWdub3V0U3RhcnQiLCJfc2lnbm91dEVuZCIsInNpZ25vdXRQb3B1cCIsInBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9zaWdub3V0IiwicmV2b2tlUHJvbWlzZSIsInJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0IiwiX3Jldm9rZUludGVybmFsIiwic2lnbm91dFJlcXVlc3QiLCJzaWdub3V0UmVzcG9uc2UiLCJyZXZva2VBY2Nlc3NUb2tlbiIsInN1Y2Nlc3MiLCJfcmV2b2tlQWNjZXNzVG9rZW5JbnRlcm5hbCIsIl9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbCIsImF0U3VjY2VzcyIsInJ0U3VjY2VzcyIsInN0b3BTaWxlbnRSZW5ldyIsIl91c2VyU3RvcmUiLCJfdXNlclN0b3JlS2V5IiwicmVkaXJlY3ROYXZpZ2F0b3IiLCJwb3B1cE5hdmlnYXRvciIsImlmcmFtZU5hdmlnYXRvciIsInVzZXJTdG9yZSIsIl91c2VyTG9hZGVkIiwiX3VzZXJVbmxvYWRlZCIsIl9zaWxlbnRSZW5ld0Vycm9yIiwiX3VzZXJTaWduZWRJbiIsIl91c2VyU2lnbmVkT3V0IiwiX3VzZXJTZXNzaW9uQ2hhbmdlZCIsInJlbW92ZVVzZXJMb2FkZWQiLCJyZW1vdmVVc2VyVW5sb2FkZWQiLCJhZGRTaWxlbnRSZW5ld0Vycm9yIiwicmVtb3ZlU2lsZW50UmVuZXdFcnJvciIsImFkZFVzZXJTaWduZWRJbiIsInJlbW92ZVVzZXJTaWduZWRJbiIsImFkZFVzZXJTaWduZWRPdXQiLCJyZW1vdmVVc2VyU2lnbmVkT3V0IiwiYWRkVXNlclNlc3Npb25DaGFuZ2VkIiwicmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkIiwiRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsIiwic3RvcmUiLCJfcG9wdXBfcmVkaXJlY3RfdXJpIiwiX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIl9wb3B1cFdpbmRvd0ZlYXR1cmVzIiwiX3BvcHVwV2luZG93VGFyZ2V0IiwiX3NpbGVudF9yZWRpcmVjdF91cmkiLCJfc2lsZW50UmVxdWVzdFRpbWVvdXQiLCJfYXV0b21hdGljU2lsZW50UmVuZXciLCJfdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3IiwiX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsIl9tb25pdG9yU2Vzc2lvbiIsIl9tb25pdG9yQW5vbnltb3VzU2Vzc2lvbiIsIl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsInByZWZpeCIsIl9zdG9yZSIsIl9wcmVmaXgiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0VBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQW5CQTtBQUNBOztrQkFvQmU7QUFDWEEsNkJBRFc7QUFFWEMsaUJBRlc7QUFHWEMsc0NBSFc7QUFJWEMsOERBSlc7QUFLWEMsb0VBTFc7QUFNWEMsOERBTlc7QUFPWEMseUNBUFc7QUFRWEMsMkRBUlc7QUFTWEMscURBVFc7QUFVWEMsdUVBVlc7QUFXWEMsMEVBWFc7QUFZWEMsOERBWlc7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QUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQy90Qlk7O0FBRVo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyxTQUFTO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsVUFBVTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFWTs7QUFFWixhQUFhLG1CQUFPLENBQUMsb0RBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLGdEQUFTO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxvRUFBUzs7QUFFL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixtREFBbUQ7QUFDeEU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixVQUFVO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDLFNBQVM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsRUFBRTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZUFBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBLHFCQUFxQixlQUFlO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFF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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxtREFBbUQ7QUFDbkQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxvQ0FBb0M7QUFDcEM7QUFDQSxLQUFLO0FBQ0wsd0VBQXdFO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsOERBQThEO0FBQzlEO0FBQ0EsS0FBSztBQUNMLHdFQUF3RTtBQUN4RTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgseUJBQXlCLHNCQUFzQixFQUFFLEVBQUU7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDO0FBQzVDO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FB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QWtEO0FBQzFELG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsd0hBQTZDO0FBQ3JELG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsNEVBQXVCO0FBQy9CLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0hBQTBDO0FBQ2xELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsd0hBQTZDO0FBQ3JELG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1C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QXpFLENBQTNCOztRQUdJaE4sRyxHQUFBQSxjO1FBQ0ErTSxPLEdBQUFBLGtCO1FBQ0FuUyxJLEdBQUFBLGU7UUFDQXBlLE0sR0FBQUEsaUI7UUFDQW1PLFMsR0FBQUEsb0I7UUFDQWhjLFEsR0FBQUEsbUI7UUFDQXErQixrQixHQUFBQSxrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JDTG9CNWtDLE07O0FBTnhCOzs7Ozs7QUFFQTs7OztBQUllLFNBQVNBLE1BQVQsR0FBa0I7QUFDL0IsU0FBTyxtQkFBUW1hLE9BQVIsQ0FBZ0IsSUFBaEIsRUFBc0IsRUFBdEIsQ0FBUDtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSRCxJQUFNemUsVUFBVSxRQUFoQixDLFFBQWtDQSxPLEdBQUFBLE8iLCJmaWxlIjoib2lkYy1jbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL3NyYy9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudC5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vc3JjL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBJbk1lbW9yeVdlYlN0b3JhZ2UgfSBmcm9tICcuL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlciB9IGZyb20gJy4vc3JjL1VzZXJNYW5hZ2VyLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL3NyYy9BY2Nlc3NUb2tlbkV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cE5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9zcmMvVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL3NyYy9TZXNzaW9uTW9uaXRvci5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vc3JjL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3NyYy9Vc2VyLmpzJztcclxuXHJcbmltcG9ydCB7IFZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24uanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgVmVyc2lvbixcclxuICAgIExvZyxcclxuICAgIE9pZGNDbGllbnQsXHJcbiAgICBPaWRjQ2xpZW50U2V0dGluZ3MsXHJcbiAgICBXZWJTdG9yYWdlU3RhdGVTdG9yZSxcclxuICAgIEluTWVtb3J5V2ViU3RvcmFnZSxcclxuICAgIFVzZXJNYW5hZ2VyLFxyXG4gICAgQWNjZXNzVG9rZW5FdmVudHMsXHJcbiAgICBNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IsXHJcbiAgICBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLFxyXG4gICAgQ2hlY2tTZXNzaW9uSUZyYW1lLFxyXG4gICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxyXG4gICAgU2Vzc2lvbk1vbml0b3IsXHJcbiAgICBHbG9iYWwsXHJcbiAgICBVc2VyXHJcbn07XHJcbiIsIi8qXHJcbiAqIGpzcnNhc2lnbihhbGwpIDguMC4xMiAoMjAxOC0wNC0yMikgKGMpIDIwMTAtMjAxOCBLZW5qaSBVcnVzaGltYSB8IGtqdXIuZ2l0aHViLmNvbS9qc3JzYXNpZ24vbGljZW5zZVxyXG4gKi9cclxuXHJcbnZhciBuYXZpZ2F0b3IgPSB7fTtcclxubmF2aWdhdG9yLnVzZXJBZ2VudCA9IGZhbHNlO1xyXG5cclxudmFyIHdpbmRvdyA9IHt9O1xyXG5cbi8qIVxyXG5Db3B5cmlnaHQgKGMpIDIwMTEsIFlhaG9vISBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkNvZGUgbGljZW5zZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlOlxyXG5odHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvbGljZW5zZS5odG1sXHJcbnZlcnNpb246IDIuOS4wXHJcbiovXHJcbmlmKFlBSE9PPT09dW5kZWZpbmVkKXt2YXIgWUFIT089e319WUFIT08ubGFuZz17ZXh0ZW5kOmZ1bmN0aW9uKGcsaCxmKXtpZighaHx8IWcpe3Rocm93IG5ldyBFcnJvcihcIllBSE9PLmxhbmcuZXh0ZW5kIGZhaWxlZCwgcGxlYXNlIGNoZWNrIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQuXCIpfXZhciBkPWZ1bmN0aW9uKCl7fTtkLnByb3RvdHlwZT1oLnByb3RvdHlwZTtnLnByb3RvdHlwZT1uZXcgZCgpO2cucHJvdG90eXBlLmNvbnN0cnVjdG9yPWc7Zy5zdXBlcmNsYXNzPWgucHJvdG90eXBlO2lmKGgucHJvdG90eXBlLmNvbnN0cnVjdG9yPT1PYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yKXtoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ofWlmKGYpe3ZhciBiO2ZvcihiIGluIGYpe2cucHJvdG90eXBlW2JdPWZbYl19dmFyIGU9ZnVuY3Rpb24oKXt9LGM9W1widG9TdHJpbmdcIixcInZhbHVlT2ZcIl07dHJ5e2lmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXtlPWZ1bmN0aW9uKGosaSl7Zm9yKGI9MDtiPGMubGVuZ3RoO2I9YisxKXt2YXIgbD1jW2JdLGs9aVtsXTtpZih0eXBlb2Ygaz09PVwiZnVuY3Rpb25cIiYmayE9T2JqZWN0LnByb3RvdHlwZVtsXSl7altsXT1rfX19fX1jYXRjaChhKXt9ZShnLnByb3RvdHlwZSxmKX19fTtcbi8qISBDcnlwdG9KUyB2My4xLjIgY29yZS1maXguanNcclxuICogY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbiAqIChjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBjb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiAqIFRISVMgSVMgRklYIG9mICdjb3JlLmpzJyB0byBmaXggSG1hYyBpc3N1ZS5cclxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvaXNzdWVzL2RldGFpbD9pZD04NFxyXG4gKiBodHRwczovL2NyeXB0by1qcy5nb29nbGVjb2RlLmNvbS9zdm4taGlzdG9yeS9yNjY3L2JyYW5jaGVzLzMueC9zcmMvY29yZS5qc1xyXG4gKi9cclxudmFyIENyeXB0b0pTPUNyeXB0b0pTfHwoZnVuY3Rpb24oZSxnKXt2YXIgYT17fTt2YXIgYj1hLmxpYj17fTt2YXIgaj1iLkJhc2U9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKHApe24ucHJvdG90eXBlPXRoaXM7dmFyIG89bmV3IG4oKTtpZihwKXtvLm1peEluKHApfWlmKCFvLmhhc093blByb3BlcnR5KFwiaW5pdFwiKSl7by5pbml0PWZ1bmN0aW9uKCl7by4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fW8uaW5pdC5wcm90b3R5cGU9bztvLiRzdXBlcj10aGlzO3JldHVybiBvfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmV4dGVuZCgpO28uaW5pdC5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIG99LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKHApe2Zvcih2YXIgbyBpbiBwKXtpZihwLmhhc093blByb3BlcnR5KG8pKXt0aGlzW29dPXBbb119fWlmKHAuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSl7dGhpcy50b1N0cmluZz1wLnRvU3RyaW5nfX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fX0oKSk7dmFyIGw9Yi5Xb3JkQXJyYXk9ai5leHRlbmQoe2luaXQ6ZnVuY3Rpb24obyxuKXtvPXRoaXMud29yZHM9b3x8W107aWYobiE9Zyl7dGhpcy5zaWdCeXRlcz1ufWVsc2V7dGhpcy5zaWdCeXRlcz1vLmxlbmd0aCo0fX0sdG9TdHJpbmc6ZnVuY3Rpb24obil7cmV0dXJuKG58fGgpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBxPXRoaXMud29yZHM7dmFyIHA9dC53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO3ZhciBzPXQuc2lnQnl0ZXM7dGhpcy5jbGFtcCgpO2lmKG4lNCl7Zm9yKHZhciByPTA7cjxzO3IrKyl7dmFyIG89KHBbcj4+PjJdPj4+KDI0LShyJTQpKjgpKSYyNTU7cVsobityKT4+PjJdfD1vPDwoMjQtKChuK3IpJTQpKjgpfX1lbHNle2Zvcih2YXIgcj0wO3I8cztyKz00KXtxWyhuK3IpPj4+Ml09cFtyPj4+Ml19fXRoaXMuc2lnQnl0ZXMrPXM7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO29bbj4+PjJdJj00Mjk0OTY3Mjk1PDwoMzItKG4lNCkqOCk7by5sZW5ndGg9ZS5jZWlsKG4vNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24ud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKTtyZXR1cm4gbn0scmFuZG9tOmZ1bmN0aW9uKHApe3ZhciBvPVtdO2Zvcih2YXIgbj0wO248cDtuKz00KXtvLnB1c2goKGUucmFuZG9tKCkqNDI5NDk2NzI5Nil8MCl9cmV0dXJuIG5ldyBsLmluaXQobyxwKX19KTt2YXIgbT1hLmVuYz17fTt2YXIgaD1tLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKHApe3ZhciByPXAud29yZHM7dmFyIG89cC5zaWdCeXRlczt2YXIgcT1bXTtmb3IodmFyIG49MDtuPG87bisrKXt2YXIgcz0ocltuPj4+Ml0+Pj4oMjQtKG4lNCkqOCkpJjI1NTtxLnB1c2goKHM+Pj40KS50b1N0cmluZygxNikpO3EucHVzaCgocyYxNSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcS5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihwKXt2YXIgbj1wLmxlbmd0aDt2YXIgcT1bXTtmb3IodmFyIG89MDtvPG47bys9Mil7cVtvPj4+M118PXBhcnNlSW50KHAuc3Vic3RyKG8sMiksMTYpPDwoMjQtKG8lOCkqNCl9cmV0dXJuIG5ldyBsLmluaXQocSxuLzIpfX07dmFyIGQ9bS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihxKXt2YXIgcj1xLndvcmRzO3ZhciBwPXEuc2lnQnl0ZXM7dmFyIG49W107Zm9yKHZhciBvPTA7bzxwO28rKyl7dmFyIHM9KHJbbz4+PjJdPj4+KDI0LShvJTQpKjgpKSYyNTU7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocykpfXJldHVybiBuLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKHApe3ZhciBuPXAubGVuZ3RoO3ZhciBxPVtdO2Zvcih2YXIgbz0wO288bjtvKyspe3Fbbz4+PjJdfD0ocC5jaGFyQ29kZUF0KG8pJjI1NSk8PCgyNC0obyU0KSo4KX1yZXR1cm4gbmV3IGwuaW5pdChxLG4pfX07dmFyIGM9bS5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24obil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGQuc3RyaW5naWZ5KG4pKSl9Y2F0Y2gobyl7dGhyb3cgbmV3IEVycm9yKFwiTWFsZm9ybWVkIFVURi04IGRhdGFcIil9fSxwYXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gZC5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQobikpKX19O3ZhciBpPWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1qLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBsLmluaXQoKTt0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24obil7aWYodHlwZW9mIG49PVwic3RyaW5nXCIpe249Yy5wYXJzZShuKX10aGlzLl9kYXRhLmNvbmNhdChuKTt0aGlzLl9uRGF0YUJ5dGVzKz1uLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih3KXt2YXIgcT10aGlzLl9kYXRhO3ZhciB4PXEud29yZHM7dmFyIG49cS5zaWdCeXRlczt2YXIgdD10aGlzLmJsb2NrU2l6ZTt2YXIgdj10KjQ7dmFyIHU9bi92O2lmKHcpe3U9ZS5jZWlsKHUpfWVsc2V7dT1lLm1heCgodXwwKS10aGlzLl9taW5CdWZmZXJTaXplLDApfXZhciBzPXUqdDt2YXIgcj1lLm1pbihzKjQsbik7aWYocyl7Zm9yKHZhciBwPTA7cDxzO3ArPXQpe3RoaXMuX2RvUHJvY2Vzc0Jsb2NrKHgscCl9dmFyIG89eC5zcGxpY2UoMCxzKTtxLnNpZ0J5dGVzLT1yfXJldHVybiBuZXcgbC5pbml0KG8scil9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24uX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpO3JldHVybiBufSxfbWluQnVmZmVyU2l6ZTowfSk7dmFyIGY9Yi5IYXNoZXI9aS5leHRlbmQoe2NmZzpqLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24obil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKG4pO3RoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtpLnJlc2V0LmNhbGwodGhpcyk7dGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24obil7dGhpcy5fYXBwZW5kKG4pO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24obil7aWYobil7dGhpcy5fYXBwZW5kKG4pfXZhciBvPXRoaXMuX2RvRmluYWxpemUoKTtyZXR1cm4gb30sYmxvY2tTaXplOjUxMi8zMixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihwLG8pe3JldHVybiBuZXcgbi5pbml0KG8pLmZpbmFsaXplKHApfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHAsbyl7cmV0dXJuIG5ldyBrLkhNQUMuaW5pdChuLG8pLmZpbmFsaXplKHApfX19KTt2YXIgaz1hLmFsZ289e307cmV0dXJuIGF9KE1hdGgpKTtcbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiB4NjQtY29yZS1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihnKXt2YXIgYT1DcnlwdG9KUyxmPWEubGliLGU9Zi5CYXNlLGg9Zi5Xb3JkQXJyYXksYT1hLng2ND17fTthLldvcmQ9ZS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oYixjKXt0aGlzLmhpZ2g9Yjt0aGlzLmxvdz1jfX0pO2EuV29yZEFycmF5PWUuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKGIsYyl7Yj10aGlzLndvcmRzPWJ8fFtdO3RoaXMuc2lnQnl0ZXM9YyE9Zz9jOjgqYi5sZW5ndGh9LHRvWDMyOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMud29yZHMsYz1iLmxlbmd0aCxhPVtdLGQ9MDtkPGM7ZCsrKXt2YXIgZT1iW2RdO2EucHVzaChlLmhpZ2gpO2EucHVzaChlLmxvdyl9cmV0dXJuIGguY3JlYXRlKGEsdGhpcy5zaWdCeXRlcyl9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWUuY2xvbmUuY2FsbCh0aGlzKSxjPWIud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxhPWMubGVuZ3RoLGQ9MDtkPGE7ZCsrKWNbZF09Y1tkXS5jbG9uZSgpO3JldHVybiBifX0pfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgZW5jLWJhc2U2NC5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGg9Q3J5cHRvSlMsaj1oLmxpYi5Xb3JkQXJyYXk7aC5lbmMuQmFzZTY0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oYil7dmFyIGU9Yi53b3JkcyxmPWIuc2lnQnl0ZXMsYz10aGlzLl9tYXA7Yi5jbGFtcCgpO2I9W107Zm9yKHZhciBhPTA7YTxmO2ErPTMpZm9yKHZhciBkPShlW2E+Pj4yXT4+PjI0LTgqKGElNCkmMjU1KTw8MTZ8KGVbYSsxPj4+Ml0+Pj4yNC04KigoYSsxKSU0KSYyNTUpPDw4fGVbYSsyPj4+Ml0+Pj4yNC04KigoYSsyKSU0KSYyNTUsZz0wOzQ+ZyYmYSswLjc1Kmc8ZjtnKyspYi5wdXNoKGMuY2hhckF0KGQ+Pj42KigzLWcpJjYzKSk7aWYoZT1jLmNoYXJBdCg2NCkpZm9yKDtiLmxlbmd0aCU0OyliLnB1c2goZSk7cmV0dXJuIGIuam9pbihcIlwiKX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIGU9Yi5sZW5ndGgsZj10aGlzLl9tYXAsYz1mLmNoYXJBdCg2NCk7YyYmKGM9Yi5pbmRleE9mKGMpLC0xIT1jJiYoZT1jKSk7Zm9yKHZhciBjPVtdLGE9MCxkPTA7ZDxcclxuZTtkKyspaWYoZCU0KXt2YXIgZz1mLmluZGV4T2YoYi5jaGFyQXQoZC0xKSk8PDIqKGQlNCksaD1mLmluZGV4T2YoYi5jaGFyQXQoZCkpPj4+Ni0yKihkJTQpO2NbYT4+PjJdfD0oZ3xoKTw8MjQtOCooYSU0KTthKyt9cmV0dXJuIGouY3JlYXRlKGMsYSl9LF9tYXA6XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwifX0pKCk7XHJcblxuLypcclxuQ3J5cHRvSlMgdjMuMS4yIHNoYTI1Ni1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihrKXtmb3IodmFyIGc9Q3J5cHRvSlMsaD1nLmxpYix2PWguV29yZEFycmF5LGo9aC5IYXNoZXIsaD1nLmFsZ28scz1bXSx0PVtdLHU9ZnVuY3Rpb24ocSl7cmV0dXJuIDQyOTQ5NjcyOTYqKHEtKHF8MCkpfDB9LGw9MixiPTA7NjQ+Yjspe3ZhciBkO2E6e2Q9bDtmb3IodmFyIHc9ay5zcXJ0KGQpLHI9MjtyPD13O3IrKylpZighKGQlcikpe2Q9ITE7YnJlYWsgYX1kPSEwfWQmJig4PmImJihzW2JdPXUoay5wb3cobCwwLjUpKSksdFtiXT11KGsucG93KGwsMS8zKSksYisrKTtsKyt9dmFyIG49W10saD1oLlNIQTI1Nj1qLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB2LmluaXQocy5zbGljZSgwKSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihxLGgpe2Zvcih2YXIgYT10aGlzLl9oYXNoLndvcmRzLGM9YVswXSxkPWFbMV0sYj1hWzJdLGs9YVszXSxmPWFbNF0sZz1hWzVdLGo9YVs2XSxsPWFbN10sZT0wOzY0PmU7ZSsrKXtpZigxNj5lKW5bZV09XHJcbnFbaCtlXXwwO2Vsc2V7dmFyIG09bltlLTE1XSxwPW5bZS0yXTtuW2VdPSgobTw8MjV8bT4+PjcpXihtPDwxNHxtPj4+MTgpXm0+Pj4zKStuW2UtN10rKChwPDwxNXxwPj4+MTcpXihwPDwxM3xwPj4+MTkpXnA+Pj4xMCkrbltlLTE2XX1tPWwrKChmPDwyNnxmPj4+NileKGY8PDIxfGY+Pj4xMSleKGY8PDd8Zj4+PjI1KSkrKGYmZ15+ZiZqKSt0W2VdK25bZV07cD0oKGM8PDMwfGM+Pj4yKV4oYzw8MTl8Yz4+PjEzKV4oYzw8MTB8Yz4+PjIyKSkrKGMmZF5jJmJeZCZiKTtsPWo7aj1nO2c9ZjtmPWsrbXwwO2s9YjtiPWQ7ZD1jO2M9bStwfDB9YVswXT1hWzBdK2N8MDthWzFdPWFbMV0rZHwwO2FbMl09YVsyXStifDA7YVszXT1hWzNdK2t8MDthWzRdPWFbNF0rZnwwO2FbNV09YVs1XStnfDA7YVs2XT1hWzZdK2p8MDthWzddPWFbN10rbHwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuX2RhdGEsYj1kLndvcmRzLGE9OCp0aGlzLl9uRGF0YUJ5dGVzLGM9OCpkLnNpZ0J5dGVzO1xyXG5iW2M+Pj41XXw9MTI4PDwyNC1jJTMyO2JbKGMrNjQ+Pj45PDw0KSsxNF09ay5mbG9vcihhLzQyOTQ5NjcyOTYpO2JbKGMrNjQ+Pj45PDw0KSsxNV09YTtkLnNpZ0J5dGVzPTQqYi5sZW5ndGg7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzLl9oYXNofSxjbG9uZTpmdW5jdGlvbigpe3ZhciBiPWouY2xvbmUuY2FsbCh0aGlzKTtiLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYn19KTtnLlNIQTI1Nj1qLl9jcmVhdGVIZWxwZXIoaCk7Zy5IbWFjU0hBMjU2PWouX2NyZWF0ZUhtYWNIZWxwZXIoaCl9KShNYXRoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhNTEyLW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3JldHVybiBkLmNyZWF0ZS5hcHBseShkLGFyZ3VtZW50cyl9Zm9yKHZhciBuPUNyeXB0b0pTLHI9bi5saWIuSGFzaGVyLGU9bi54NjQsZD1lLldvcmQsVD1lLldvcmRBcnJheSxlPW4uYWxnbyxlYT1bYSgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLGEoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLGEoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxhKDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksYSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksYSgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLGEoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxhKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksYSgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLGEoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLGEoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLGEoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxhKDE5MjUwNzgzODgsNDA2ODE4MjM4MyksYSgyMTYyMDc4MjA2LDk5MTMzNjExMyksYSgyNjE0ODg4MTAzLDYzMzgwMzMxNyksXHJcbmEoMzI0ODIyMjU4MCwzNDc5Nzc0ODY4KSxhKDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCksYSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksYSgyNjQzNDcwNzgsMjM0MTI2Mjc3MyksYSg2MDQ4MDc2MjgsMjAwNzgwMDkzMyksYSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksYSgxMjQ5MTUwMTIyLDE4NTY0MzEyMzUpLGEoMTU1NTA4MTY5MiwzMTc1MjE4MTMyKSxhKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksYSgyNTU0MjIwODgyLDM5OTk3MTkzMzkpLGEoMjgyMTgzNDM0OSw3NjY3ODQwMTYpLGEoMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxhKDMyMTAzMTM2NzEsMzIwMzMzNzk1NiksYSgzMzM2NTcxODkxLDEwMzQ0NTcwMjYpLGEoMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxhKDExMzkyNjk5MywzNzU4MzI2MzgzKSxhKDMzODI0MTg5NSwxNjg3MTc5MzYpLGEoNjY2MzA3MjA1LDExODgxNzk5NjQpLGEoNzczNTI5OTEyLDE1NDYwNDU3MzQpLGEoMTI5NDc1NzM3MiwxNTIyODA1NDg1KSxhKDEzOTYxODIyOTEsXHJcbjI2NDM4MzM4MjMpLGEoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxhKDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCksYSgyMTc3MDI2MzUwLDEyMDY3NTkxNDIpLGEoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLGEoMjczMDQ4NTkyMSwxMjkwODYzNDYwKSxhKDI4MjAzMDI0MTEsMzE1ODQ1NDI3MyksYSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLGEoMzM0NTc2NDc3MSwxMDYyMTcwMDgpLGEoMzUxNjA2NTgxNywzNjA2MDA4MzQ0KSxhKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksYSg0MDk0NTcxOTA5LDE0NjcwMzE1OTQpLGEoMjc1NDIzMzQ0LDg1MTE2OTcyMCksYSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksYSg1MDY5NDg2MTYsMTM2MzI1ODE5NSksYSg2NTkwNjA1NTYsMzc1MDY4NTU5MyksYSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksYSg5NTgxMzk1NzEsMzMxODMwNzQyNyksYSgxMzIyODIyMjE4LDM4MTI3MjM0MDMpLGEoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxhKDE3NDc4NzM3NzksMzYwMjAzNjg5OSksXHJcbmEoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxhKDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksYSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLGEoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLGEoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLGEoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxhKDMyMDQwMzE0NzksMjk5OTM1MTU3MyksYSgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLGEoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxhKDM1MTUyNjcyNzEsNTY2MjgwNzExKSxhKDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksYSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLGEoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLGEoMTc0MjkyNDIxLDI3MzEwNTUyNzApLGEoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLGEoNDYwMzkzMjY5LDMyMDYyMDMxNSksYSg2ODU0NzE3MzMsNTg3NDk2ODM2KSxhKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxhKDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxhKDExMjYwMDA1ODAsMjYxODI5NzY3NiksYSgxMjg4MDMzNDcwLFxyXG4zNDA5ODU1MTU4KSxhKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksYSgxNjA3MTY3OTE1LDk4NzE2NzQ2OCksYSgxODE2NDAyMzE2LDEyNDYxODk1OTEpXSx2PVtdLHc9MDs4MD53O3crKyl2W3ddPWEoKTtlPWUuU0hBNTEyPXIuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IFQuaW5pdChbbmV3IGQuaW5pdCgxNzc5MDMzNzAzLDQwODkyMzU3MjApLG5ldyBkLmluaXQoMzE0NDEzNDI3NywyMjI3ODczNTk1KSxuZXcgZC5pbml0KDEwMTM5MDQyNDIsNDI3MTE3NTcyMyksbmV3IGQuaW5pdCgyNzczNDgwNzYyLDE1OTU3NTAxMjkpLG5ldyBkLmluaXQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KSxuZXcgZC5pbml0KDI2MDA4MjI5MjQsNzI1NTExMTk5KSxuZXcgZC5pbml0KDUyODczNDYzNSw0MjE1Mzg5NTQ3KSxuZXcgZC5pbml0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KV0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oYSxkKXtmb3IodmFyIGY9dGhpcy5faGFzaC53b3JkcyxcclxuRj1mWzBdLGU9ZlsxXSxuPWZbMl0scj1mWzNdLEc9Zls0XSxIPWZbNV0sST1mWzZdLGY9Zls3XSx3PUYuaGlnaCxKPUYubG93LFg9ZS5oaWdoLEs9ZS5sb3csWT1uLmhpZ2gsTD1uLmxvdyxaPXIuaGlnaCxNPXIubG93LCQ9Ry5oaWdoLE49Ry5sb3csYWE9SC5oaWdoLE89SC5sb3csYmE9SS5oaWdoLFA9SS5sb3csY2E9Zi5oaWdoLFE9Zi5sb3csaz13LGc9Six6PVgseD1LLEE9WSx5PUwsVT1aLEI9TSxsPSQsaD1OLFI9YWEsQz1PLFM9YmEsRD1QLFY9Y2EsRT1RLG09MDs4MD5tO20rKyl7dmFyIHM9dlttXTtpZigxNj5tKXZhciBqPXMuaGlnaD1hW2QrMiptXXwwLGI9cy5sb3c9YVtkKzIqbSsxXXwwO2Vsc2V7dmFyIGo9dlttLTE1XSxiPWouaGlnaCxwPWoubG93LGo9KGI+Pj4xfHA8PDMxKV4oYj4+Pjh8cDw8MjQpXmI+Pj43LHA9KHA+Pj4xfGI8PDMxKV4ocD4+Pjh8Yjw8MjQpXihwPj4+N3xiPDwyNSksdT12W20tMl0sYj11LmhpZ2gsYz11Lmxvdyx1PShiPj4+MTl8Yzw8MTMpXihiPDxcclxuM3xjPj4+MjkpXmI+Pj42LGM9KGM+Pj4xOXxiPDwxMyleKGM8PDN8Yj4+PjI5KV4oYz4+PjZ8Yjw8MjYpLGI9dlttLTddLFc9Yi5oaWdoLHQ9dlttLTE2XSxxPXQuaGlnaCx0PXQubG93LGI9cCtiLmxvdyxqPWorVysoYj4+PjA8cD4+PjA/MTowKSxiPWIrYyxqPWordSsoYj4+PjA8Yz4+PjA/MTowKSxiPWIrdCxqPWorcSsoYj4+PjA8dD4+PjA/MTowKTtzLmhpZ2g9ajtzLmxvdz1ifXZhciBXPWwmUl5+bCZTLHQ9aCZDXn5oJkQscz1rJnpeayZBXnomQSxUPWcmeF5nJnleeCZ5LHA9KGs+Pj4yOHxnPDw0KV4oazw8MzB8Zz4+PjIpXihrPDwyNXxnPj4+NyksdT0oZz4+PjI4fGs8PDQpXihnPDwzMHxrPj4+MileKGc8PDI1fGs+Pj43KSxjPWVhW21dLGZhPWMuaGlnaCxkYT1jLmxvdyxjPUUrKChoPj4+MTR8bDw8MTgpXihoPj4+MTh8bDw8MTQpXihoPDwyM3xsPj4+OSkpLHE9VisoKGw+Pj4xNHxoPDwxOCleKGw+Pj4xOHxoPDwxNCleKGw8PDIzfGg+Pj45KSkrKGM+Pj4wPEU+Pj4wPzE6XHJcbjApLGM9Yyt0LHE9cStXKyhjPj4+MDx0Pj4+MD8xOjApLGM9YytkYSxxPXErZmErKGM+Pj4wPGRhPj4+MD8xOjApLGM9YytiLHE9cStqKyhjPj4+MDxiPj4+MD8xOjApLGI9dStULHM9cCtzKyhiPj4+MDx1Pj4+MD8xOjApLFY9UyxFPUQsUz1SLEQ9QyxSPWwsQz1oLGg9QitjfDAsbD1VK3ErKGg+Pj4wPEI+Pj4wPzE6MCl8MCxVPUEsQj15LEE9eix5PXgsej1rLHg9ZyxnPWMrYnwwLGs9cStzKyhnPj4+MDxjPj4+MD8xOjApfDB9Sj1GLmxvdz1KK2c7Ri5oaWdoPXcraysoSj4+PjA8Zz4+PjA/MTowKTtLPWUubG93PUsreDtlLmhpZ2g9WCt6KyhLPj4+MDx4Pj4+MD8xOjApO0w9bi5sb3c9TCt5O24uaGlnaD1ZK0ErKEw+Pj4wPHk+Pj4wPzE6MCk7TT1yLmxvdz1NK0I7ci5oaWdoPVorVSsoTT4+PjA8Qj4+PjA/MTowKTtOPUcubG93PU4raDtHLmhpZ2g9JCtsKyhOPj4+MDxoPj4+MD8xOjApO089SC5sb3c9TytDO0guaGlnaD1hYStSKyhPPj4+MDxDPj4+MD8xOjApO1A9SS5sb3c9UCtEO1xyXG5JLmhpZ2g9YmErUysoUD4+PjA8RD4+PjA/MTowKTtRPWYubG93PVErRTtmLmhpZ2g9Y2ErVisoUT4+PjA8RT4+PjA/MTowKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9kYXRhLGQ9YS53b3JkcyxmPTgqdGhpcy5fbkRhdGFCeXRlcyxlPTgqYS5zaWdCeXRlcztkW2U+Pj41XXw9MTI4PDwyNC1lJTMyO2RbKGUrMTI4Pj4+MTA8PDUpKzMwXT1NYXRoLmZsb29yKGYvNDI5NDk2NzI5Nik7ZFsoZSsxMjg+Pj4xMDw8NSkrMzFdPWY7YS5zaWdCeXRlcz00KmQubGVuZ3RoO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpcy5faGFzaC50b1gzMigpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBhPXIuY2xvbmUuY2FsbCh0aGlzKTthLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYX0sYmxvY2tTaXplOjMyfSk7bi5TSEE1MTI9ci5fY3JlYXRlSGVscGVyKGUpO24uSG1hY1NIQTUxMj1yLl9jcmVhdGVIbWFjSGVscGVyKGUpfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhMzg0LW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGM9Q3J5cHRvSlMsYT1jLng2NCxiPWEuV29yZCxlPWEuV29yZEFycmF5LGE9Yy5hbGdvLGQ9YS5TSEE1MTIsYT1hLlNIQTM4ND1kLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBlLmluaXQoW25ldyBiLmluaXQoMzQxODA3MDM2NSwzMjM4MzcxMDMyKSxuZXcgYi5pbml0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKSxuZXcgYi5pbml0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KSxuZXcgYi5pbml0KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KSxuZXcgYi5pbml0KDE3MzE0MDU0MTUsNDI5MDc3NTg1NyksbmV3IGIuaW5pdCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpLG5ldyBiLmluaXQoMzY3NTAwODUyNSwxNjk0MDc2ODM5KSxuZXcgYi5pbml0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCldKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT1kLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7YS5zaWdCeXRlcy09MTY7cmV0dXJuIGF9fSk7Yy5TSEEzODQ9XHJcbmQuX2NyZWF0ZUhlbHBlcihhKTtjLkhtYWNTSEEzODQ9ZC5fY3JlYXRlSG1hY0hlbHBlcihhKX0pKCk7XHJcblxuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG52YXIgYjY0bWFwPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO3ZhciBiNjRwYWQ9XCI9XCI7ZnVuY3Rpb24gaGV4MmI2NChkKXt2YXIgYjt2YXIgZTt2YXIgYT1cIlwiO2ZvcihiPTA7YiszPD1kLmxlbmd0aDtiKz0zKXtlPXBhcnNlSW50KGQuc3Vic3RyaW5nKGIsYiszKSwxNik7YSs9YjY0bWFwLmNoYXJBdChlPj42KStiNjRtYXAuY2hhckF0KGUmNjMpfWlmKGIrMT09ZC5sZW5ndGgpe2U9cGFyc2VJbnQoZC5zdWJzdHJpbmcoYixiKzEpLDE2KTthKz1iNjRtYXAuY2hhckF0KGU8PDIpfWVsc2V7aWYoYisyPT1kLmxlbmd0aCl7ZT1wYXJzZUludChkLnN1YnN0cmluZyhiLGIrMiksMTYpO2ErPWI2NG1hcC5jaGFyQXQoZT4+MikrYjY0bWFwLmNoYXJBdCgoZSYzKTw8NCl9fWlmKGI2NHBhZCl7d2hpbGUoKGEubGVuZ3RoJjMpPjApe2ErPWI2NHBhZH19cmV0dXJuIGF9ZnVuY3Rpb24gYjY0dG9oZXgoZil7dmFyIGQ9XCJcIjt2YXIgZTt2YXIgYj0wO3ZhciBjO3ZhciBhO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe2lmKGYuY2hhckF0KGUpPT1iNjRwYWQpe2JyZWFrfWE9YjY0bWFwLmluZGV4T2YoZi5jaGFyQXQoZSkpO2lmKGE8MCl7Y29udGludWV9aWYoYj09MCl7ZCs9aW50MmNoYXIoYT4+Mik7Yz1hJjM7Yj0xfWVsc2V7aWYoYj09MSl7ZCs9aW50MmNoYXIoKGM8PDIpfChhPj40KSk7Yz1hJjE1O2I9Mn1lbHNle2lmKGI9PTIpe2QrPWludDJjaGFyKGMpO2QrPWludDJjaGFyKGE+PjIpO2M9YSYzO2I9M31lbHNle2QrPWludDJjaGFyKChjPDwyKXwoYT4+NCkpO2QrPWludDJjaGFyKGEmMTUpO2I9MH19fX1pZihiPT0xKXtkKz1pbnQyY2hhcihjPDwyKX1yZXR1cm4gZH1mdW5jdGlvbiBiNjR0b0JBKGUpe3ZhciBkPWI2NHRvaGV4KGUpO3ZhciBjO3ZhciBiPW5ldyBBcnJheSgpO2ZvcihjPTA7MipjPGQubGVuZ3RoOysrYyl7YltjXT1wYXJzZUludChkLnN1YnN0cmluZygyKmMsMipjKzIpLDE2KX1yZXR1cm4gYn07XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBkYml0czt2YXIgY2FuYXJ5PTI0NDgzNzgxNDA5NDU5MDt2YXIgal9sbT0oKGNhbmFyeSYxNjc3NzIxNSk9PTE1NzE1MDcwKTtmdW5jdGlvbiBCaWdJbnRlZ2VyKGUsZCxmKXtpZihlIT1udWxsKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7dGhpcy5mcm9tTnVtYmVyKGUsZCxmKX1lbHNle2lmKGQ9PW51bGwmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXt0aGlzLmZyb21TdHJpbmcoZSwyNTYpfWVsc2V7dGhpcy5mcm9tU3RyaW5nKGUsZCl9fX19ZnVuY3Rpb24gbmJpKCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpfWZ1bmN0aW9uIGFtMShmLGEsYixlLGgsZyl7d2hpbGUoLS1nPj0wKXt2YXIgZD1hKnRoaXNbZisrXStiW2VdK2g7aD1NYXRoLmZsb29yKGQvNjcxMDg4NjQpO2JbZSsrXT1kJjY3MTA4ODYzfXJldHVybiBofWZ1bmN0aW9uIGFtMihmLHEscixlLG8sYSl7dmFyIGs9cSYzMjc2NyxwPXE+PjE1O3doaWxlKC0tYT49MCl7dmFyIGQ9dGhpc1tmXSYzMjc2Nzt2YXIgZz10aGlzW2YrK10+PjE1O3ZhciBiPXAqZCtnKms7ZD1rKmQrKChiJjMyNzY3KTw8MTUpK3JbZV0rKG8mMTA3Mzc0MTgyMyk7bz0oZD4+PjMwKSsoYj4+PjE1KStwKmcrKG8+Pj4zMCk7cltlKytdPWQmMTA3Mzc0MTgyM31yZXR1cm4gb31mdW5jdGlvbiBhbTMoZixxLHIsZSxvLGEpe3ZhciBrPXEmMTYzODMscD1xPj4xNDt3aGlsZSgtLWE+PTApe3ZhciBkPXRoaXNbZl0mMTYzODM7dmFyIGc9dGhpc1tmKytdPj4xNDt2YXIgYj1wKmQrZyprO2Q9aypkKygoYiYxNjM4Myk8PDE0KStyW2VdK287bz0oZD4+MjgpKyhiPj4xNCkrcCpnO3JbZSsrXT1kJjI2ODQzNTQ1NX1yZXR1cm4gb31pZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWU9PVwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIpKXtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbT1hbTI7ZGJpdHM9MzB9ZWxzZXtpZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWUhPVwiTmV0c2NhcGVcIikpe0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMTtkYml0cz0yNn1lbHNle0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMztkYml0cz0yOH19QmlnSW50ZWdlci5wcm90b3R5cGUuREI9ZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRE09KCgxPDxkYml0cyktMSk7QmlnSW50ZWdlci5wcm90b3R5cGUuRFY9KDE8PGRiaXRzKTt2YXIgQklfRlA9NTI7QmlnSW50ZWdlci5wcm90b3R5cGUuRlY9TWF0aC5wb3coMixCSV9GUCk7QmlnSW50ZWdlci5wcm90b3R5cGUuRjE9QklfRlAtZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRjI9MipkYml0cy1CSV9GUDt2YXIgQklfUk09XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjt2YXIgQklfUkM9bmV3IEFycmF5KCk7dmFyIHJyLHZ2O3JyPVwiMFwiLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTA7dnY8PTk7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJhXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJBXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9ZnVuY3Rpb24gaW50MmNoYXIoYSl7cmV0dXJuIEJJX1JNLmNoYXJBdChhKX1mdW5jdGlvbiBpbnRBdChiLGEpe3ZhciBkPUJJX1JDW2IuY2hhckNvZGVBdChhKV07cmV0dXJuKGQ9PW51bGwpPy0xOmR9ZnVuY3Rpb24gYm5wQ29weVRvKGIpe2Zvcih2YXIgYT10aGlzLnQtMTthPj0wOy0tYSl7YlthXT10aGlzW2FdfWIudD10aGlzLnQ7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBGcm9tSW50KGEpe3RoaXMudD0xO3RoaXMucz0oYTwwKT8tMTowO2lmKGE+MCl7dGhpc1swXT1hfWVsc2V7aWYoYTwtMSl7dGhpc1swXT1hK3RoaXMuRFZ9ZWxzZXt0aGlzLnQ9MH19fWZ1bmN0aW9uIG5idihhKXt2YXIgYj1uYmkoKTtiLmZyb21JbnQoYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhoLGMpe3ZhciBlO2lmKGM9PTE2KXtlPTR9ZWxzZXtpZihjPT04KXtlPTN9ZWxzZXtpZihjPT0yNTYpe2U9OH1lbHNle2lmKGM9PTIpe2U9MX1lbHNle2lmKGM9PTMyKXtlPTV9ZWxzZXtpZihjPT00KXtlPTJ9ZWxzZXt0aGlzLmZyb21SYWRpeChoLGMpO3JldHVybn19fX19fXRoaXMudD0wO3RoaXMucz0wO3ZhciBnPWgubGVuZ3RoLGQ9ZmFsc2UsZj0wO3doaWxlKC0tZz49MCl7dmFyIGE9KGU9PTgpP2hbZ10mMjU1OmludEF0KGgsZyk7aWYoYTwwKXtpZihoLmNoYXJBdChnKT09XCItXCIpe2Q9dHJ1ZX1jb250aW51ZX1kPWZhbHNlO2lmKGY9PTApe3RoaXNbdGhpcy50KytdPWF9ZWxzZXtpZihmK2U+dGhpcy5EQil7dGhpc1t0aGlzLnQtMV18PShhJigoMTw8KHRoaXMuREItZikpLTEpKTw8Zjt0aGlzW3RoaXMudCsrXT0oYT4+KHRoaXMuREItZikpfWVsc2V7dGhpc1t0aGlzLnQtMV18PWE8PGZ9fWYrPWU7aWYoZj49dGhpcy5EQil7Zi09dGhpcy5EQn19aWYoZT09OCYmKGhbMF0mMTI4KSE9MCl7dGhpcy5zPS0xO2lmKGY+MCl7dGhpc1t0aGlzLnQtMV18PSgoMTw8KHRoaXMuREItZikpLTEpPDxmfX10aGlzLmNsYW1wKCk7aWYoZCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIGJucENsYW1wKCl7dmFyIGE9dGhpcy5zJnRoaXMuRE07d2hpbGUodGhpcy50PjAmJnRoaXNbdGhpcy50LTFdPT1hKXstLXRoaXMudH19ZnVuY3Rpb24gYm5Ub1N0cmluZyhjKXtpZih0aGlzLnM8MCl7cmV0dXJuXCItXCIrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhjKX12YXIgZTtpZihjPT0xNil7ZT00fWVsc2V7aWYoYz09OCl7ZT0zfWVsc2V7aWYoYz09Mil7ZT0xfWVsc2V7aWYoYz09MzIpe2U9NX1lbHNle2lmKGM9PTQpe2U9Mn1lbHNle3JldHVybiB0aGlzLnRvUmFkaXgoYyl9fX19fXZhciBnPSgxPDxlKS0xLGwsYT1mYWxzZSxoPVwiXCIsZj10aGlzLnQ7dmFyIGo9dGhpcy5EQi0oZip0aGlzLkRCKSVlO2lmKGYtLT4wKXtpZihqPHRoaXMuREImJihsPXRoaXNbZl0+PmopPjApe2E9dHJ1ZTtoPWludDJjaGFyKGwpfXdoaWxlKGY+PTApe2lmKGo8ZSl7bD0odGhpc1tmXSYoKDE8PGopLTEpKTw8KGUtaik7bHw9dGhpc1stLWZdPj4oais9dGhpcy5EQi1lKX1lbHNle2w9KHRoaXNbZl0+PihqLT1lKSkmZztpZihqPD0wKXtqKz10aGlzLkRCOy0tZn19aWYobD4wKXthPXRydWV9aWYoYSl7aCs9aW50MmNoYXIobCl9fX1yZXR1cm4gYT9oOlwiMFwifWZ1bmN0aW9uIGJuTmVnYXRlKCl7dmFyIGE9bmJpKCk7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5BYnMoKXtyZXR1cm4odGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpc31mdW5jdGlvbiBibkNvbXBhcmVUbyhiKXt2YXIgZD10aGlzLnMtYi5zO2lmKGQhPTApe3JldHVybiBkfXZhciBjPXRoaXMudDtkPWMtYi50O2lmKGQhPTApe3JldHVybih0aGlzLnM8MCk/LWQ6ZH13aGlsZSgtLWM+PTApe2lmKChkPXRoaXNbY10tYltjXSkhPTApe3JldHVybiBkfX1yZXR1cm4gMH1mdW5jdGlvbiBuYml0cyhhKXt2YXIgYz0xLGI7aWYoKGI9YT4+PjE2KSE9MCl7YT1iO2MrPTE2fWlmKChiPWE+PjgpIT0wKXthPWI7Yys9OH1pZigoYj1hPj40KSE9MCl7YT1iO2MrPTR9aWYoKGI9YT4+MikhPTApe2E9YjtjKz0yfWlmKChiPWE+PjEpIT0wKXthPWI7Yys9MX1yZXR1cm4gY31mdW5jdGlvbiBibkJpdExlbmd0aCgpe2lmKHRoaXMudDw9MCl7cmV0dXJuIDB9cmV0dXJuIHRoaXMuREIqKHRoaXMudC0xKStuYml0cyh0aGlzW3RoaXMudC0xXV4odGhpcy5zJnRoaXMuRE0pKX1mdW5jdGlvbiBibnBETFNoaWZ0VG8oYyxiKXt2YXIgYTtmb3IoYT10aGlzLnQtMTthPj0wOy0tYSl7YlthK2NdPXRoaXNbYV19Zm9yKGE9Yy0xO2E+PTA7LS1hKXtiW2FdPTB9Yi50PXRoaXMudCtjO2Iucz10aGlzLnN9ZnVuY3Rpb24gYm5wRFJTaGlmdFRvKGMsYil7Zm9yKHZhciBhPWM7YTx0aGlzLnQ7KythKXtiW2EtY109dGhpc1thXX1iLnQ9TWF0aC5tYXgodGhpcy50LWMsMCk7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBMU2hpZnRUbyhqLGUpe3ZhciBiPWoldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGc9KDE8PGEpLTE7dmFyIGY9TWF0aC5mbG9vcihqL3RoaXMuREIpLGg9KHRoaXMuczw8YikmdGhpcy5ETSxkO2ZvcihkPXRoaXMudC0xO2Q+PTA7LS1kKXtlW2QrZisxXT0odGhpc1tkXT4+YSl8aDtoPSh0aGlzW2RdJmcpPDxifWZvcihkPWYtMTtkPj0wOy0tZCl7ZVtkXT0wfWVbZl09aDtlLnQ9dGhpcy50K2YrMTtlLnM9dGhpcy5zO2UuY2xhbXAoKX1mdW5jdGlvbiBibnBSU2hpZnRUbyhnLGQpe2Qucz10aGlzLnM7dmFyIGU9TWF0aC5mbG9vcihnL3RoaXMuREIpO2lmKGU+PXRoaXMudCl7ZC50PTA7cmV0dXJufXZhciBiPWcldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGY9KDE8PGIpLTE7ZFswXT10aGlzW2VdPj5iO2Zvcih2YXIgYz1lKzE7Yzx0aGlzLnQ7KytjKXtkW2MtZS0xXXw9KHRoaXNbY10mZik8PGE7ZFtjLWVdPXRoaXNbY10+PmJ9aWYoYj4wKXtkW3RoaXMudC1lLTFdfD0odGhpcy5zJmYpPDxhfWQudD10aGlzLnQtZTtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wU3ViVG8oZCxmKXt2YXIgZT0wLGc9MCxiPU1hdGgubWluKGQudCx0aGlzLnQpO3doaWxlKGU8Yil7Zys9dGhpc1tlXS1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9aWYoZC50PHRoaXMudCl7Zy09ZC5zO3doaWxlKGU8dGhpcy50KXtnKz10aGlzW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9dGhpcy5zfWVsc2V7Zys9dGhpcy5zO3doaWxlKGU8ZC50KXtnLT1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zy09ZC5zfWYucz0oZzwwKT8tMTowO2lmKGc8LTEpe2ZbZSsrXT10aGlzLkRWK2d9ZWxzZXtpZihnPjApe2ZbZSsrXT1nfX1mLnQ9ZTtmLmNsYW1wKCl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhjLGUpe3ZhciBiPXRoaXMuYWJzKCksZj1jLmFicygpO3ZhciBkPWIudDtlLnQ9ZCtmLnQ7d2hpbGUoLS1kPj0wKXtlW2RdPTB9Zm9yKGQ9MDtkPGYudDsrK2Qpe2VbZCtiLnRdPWIuYW0oMCxmW2RdLGUsZCwwLGIudCl9ZS5zPTA7ZS5jbGFtcCgpO2lmKHRoaXMucyE9Yy5zKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8oZSxlKX19ZnVuY3Rpb24gYm5wU3F1YXJlVG8oZCl7dmFyIGE9dGhpcy5hYnMoKTt2YXIgYj1kLnQ9MiphLnQ7d2hpbGUoLS1iPj0wKXtkW2JdPTB9Zm9yKGI9MDtiPGEudC0xOysrYil7dmFyIGU9YS5hbShiLGFbYl0sZCwyKmIsMCwxKTtpZigoZFtiK2EudF0rPWEuYW0oYisxLDIqYVtiXSxkLDIqYisxLGUsYS50LWItMSkpPj1hLkRWKXtkW2IrYS50XS09YS5EVjtkW2IrYS50KzFdPTF9fWlmKGQudD4wKXtkW2QudC0xXSs9YS5hbShiLGFbYl0sZCwyKmIsMCwxKX1kLnM9MDtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wRGl2UmVtVG8obixoLGcpe3ZhciB3PW4uYWJzKCk7aWYody50PD0wKXtyZXR1cm59dmFyIGs9dGhpcy5hYnMoKTtpZihrLnQ8dy50KXtpZihoIT1udWxsKXtoLmZyb21JbnQoMCl9aWYoZyE9bnVsbCl7dGhpcy5jb3B5VG8oZyl9cmV0dXJufWlmKGc9PW51bGwpe2c9bmJpKCl9dmFyIGQ9bmJpKCksYT10aGlzLnMsbD1uLnM7dmFyIHY9dGhpcy5EQi1uYml0cyh3W3cudC0xXSk7aWYodj4wKXt3LmxTaGlmdFRvKHYsZCk7ay5sU2hpZnRUbyh2LGcpfWVsc2V7dy5jb3B5VG8oZCk7ay5jb3B5VG8oZyl9dmFyIHA9ZC50O3ZhciBiPWRbcC0xXTtpZihiPT0wKXtyZXR1cm59dmFyIG89YiooMTw8dGhpcy5GMSkrKChwPjEpP2RbcC0yXT4+dGhpcy5GMjowKTt2YXIgQT10aGlzLkZWL28sej0oMTw8dGhpcy5GMSkvbyx4PTE8PHRoaXMuRjI7dmFyIHU9Zy50LHM9dS1wLGY9KGg9PW51bGwpP25iaSgpOmg7ZC5kbFNoaWZ0VG8ocyxmKTtpZihnLmNvbXBhcmVUbyhmKT49MCl7Z1tnLnQrK109MTtnLnN1YlRvKGYsZyl9QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHAsZik7Zi5zdWJUbyhkLGQpO3doaWxlKGQudDxwKXtkW2QudCsrXT0wfXdoaWxlKC0tcz49MCl7dmFyIGM9KGdbLS11XT09Yik/dGhpcy5ETTpNYXRoLmZsb29yKGdbdV0qQSsoZ1t1LTFdK3gpKnopO2lmKChnW3VdKz1kLmFtKDAsYyxnLHMsMCxwKSk8Yyl7ZC5kbFNoaWZ0VG8ocyxmKTtnLnN1YlRvKGYsZyk7d2hpbGUoZ1t1XTwtLWMpe2cuc3ViVG8oZixnKX19fWlmKGghPW51bGwpe2cuZHJTaGlmdFRvKHAsaCk7aWYoYSE9bCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKGgsaCl9fWcudD1wO2cuY2xhbXAoKTtpZih2PjApe2cuclNoaWZ0VG8odixnKX1pZihhPDApe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyhnLGcpfX1mdW5jdGlvbiBibk1vZChiKXt2YXIgYz1uYmkoKTt0aGlzLmFicygpLmRpdlJlbVRvKGIsbnVsbCxjKTtpZih0aGlzLnM8MCYmYy5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXtiLnN1YlRvKGMsYyl9cmV0dXJuIGN9ZnVuY3Rpb24gQ2xhc3NpYyhhKXt0aGlzLm09YX1mdW5jdGlvbiBjQ29udmVydChhKXtpZihhLnM8MHx8YS5jb21wYXJlVG8odGhpcy5tKT49MCl7cmV0dXJuIGEubW9kKHRoaXMubSl9ZWxzZXtyZXR1cm4gYX19ZnVuY3Rpb24gY1JldmVydChhKXtyZXR1cm4gYX1mdW5jdGlvbiBjUmVkdWNlKGEpe2EuZGl2UmVtVG8odGhpcy5tLG51bGwsYSl9ZnVuY3Rpb24gY011bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBjU3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfUNsYXNzaWMucHJvdG90eXBlLmNvbnZlcnQ9Y0NvbnZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0PWNSZXZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmVkdWNlPWNSZWR1Y2U7Q2xhc3NpYy5wcm90b3R5cGUubXVsVG89Y011bFRvO0NsYXNzaWMucHJvdG90eXBlLnNxclRvPWNTcXJUbztmdW5jdGlvbiBibnBJbnZEaWdpdCgpe2lmKHRoaXMudDwxKXtyZXR1cm4gMH12YXIgYT10aGlzWzBdO2lmKChhJjEpPT0wKXtyZXR1cm4gMH12YXIgYj1hJjM7Yj0oYiooMi0oYSYxNSkqYikpJjE1O2I9KGIqKDItKGEmMjU1KSpiKSkmMjU1O2I9KGIqKDItKCgoYSY2NTUzNSkqYikmNjU1MzUpKSkmNjU1MzU7Yj0oYiooMi1hKmIldGhpcy5EVikpJXRoaXMuRFY7cmV0dXJuKGI+MCk/dGhpcy5EVi1iOi1ifWZ1bmN0aW9uIE1vbnRnb21lcnkoYSl7dGhpcy5tPWE7dGhpcy5tcD1hLmludkRpZ2l0KCk7dGhpcy5tcGw9dGhpcy5tcCYzMjc2Nzt0aGlzLm1waD10aGlzLm1wPj4xNTt0aGlzLnVtPSgxPDwoYS5EQi0xNSkpLTE7dGhpcy5tdDI9MiphLnR9ZnVuY3Rpb24gbW9udENvbnZlcnQoYSl7dmFyIGI9bmJpKCk7YS5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQsYik7Yi5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxiKTtpZihhLnM8MCYmYi5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXt0aGlzLm0uc3ViVG8oYixiKX1yZXR1cm4gYn1mdW5jdGlvbiBtb250UmV2ZXJ0KGEpe3ZhciBiPW5iaSgpO2EuY29weVRvKGIpO3RoaXMucmVkdWNlKGIpO3JldHVybiBifWZ1bmN0aW9uIG1vbnRSZWR1Y2UoYSl7d2hpbGUoYS50PD10aGlzLm10Mil7YVthLnQrK109MH1mb3IodmFyIGM9MDtjPHRoaXMubS50OysrYyl7dmFyIGI9YVtjXSYzMjc2Nzt2YXIgZD0oYip0aGlzLm1wbCsoKChiKnRoaXMubXBoKyhhW2NdPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJmEuRE07Yj1jK3RoaXMubS50O2FbYl0rPXRoaXMubS5hbSgwLGQsYSxjLDAsdGhpcy5tLnQpO3doaWxlKGFbYl0+PWEuRFYpe2FbYl0tPWEuRFY7YVsrK2JdKyt9fWEuY2xhbXAoKTthLmRyU2hpZnRUbyh0aGlzLm0udCxhKTtpZihhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gbW9udFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBtb250TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfU1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQ9bW9udENvbnZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0PW1vbnRSZXZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmVkdWNlPW1vbnRSZWR1Y2U7TW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG89bW9udE11bFRvO01vbnRnb21lcnkucHJvdG90eXBlLnNxclRvPW1vbnRTcXJUbztmdW5jdGlvbiBibnBJc0V2ZW4oKXtyZXR1cm4oKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpPT0wfWZ1bmN0aW9uIGJucEV4cChoLGope2lmKGg+NDI5NDk2NzI5NXx8aDwxKXtyZXR1cm4gQmlnSW50ZWdlci5PTkV9dmFyIGY9bmJpKCksYT1uYmkoKSxkPWouY29udmVydCh0aGlzKSxjPW5iaXRzKGgpLTE7ZC5jb3B5VG8oZik7d2hpbGUoLS1jPj0wKXtqLnNxclRvKGYsYSk7aWYoKGgmKDE8PGMpKT4wKXtqLm11bFRvKGEsZCxmKX1lbHNle3ZhciBiPWY7Zj1hO2E9Yn19cmV0dXJuIGoucmV2ZXJ0KGYpfWZ1bmN0aW9uIGJuTW9kUG93SW50KGIsYSl7dmFyIGM7aWYoYjwyNTZ8fGEuaXNFdmVuKCkpe2M9bmV3IENsYXNzaWMoYSl9ZWxzZXtjPW5ldyBNb250Z29tZXJ5KGEpfXJldHVybiB0aGlzLmV4cChiLGMpfUJpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbz1ibnBDb3B5VG87QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludD1ibnBGcm9tSW50O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmc9Ym5wRnJvbVN0cmluZztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGFtcD1ibnBDbGFtcDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG89Ym5wRExTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbz1ibnBEUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG89Ym5wTFNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG89Ym5wUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG89Ym5wU3ViVG87QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbz1ibnBNdWx0aXBseVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvPWJucFNxdWFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvPWJucERpdlJlbVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmludkRpZ2l0PWJucEludkRpZ2l0O0JpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbj1ibnBJc0V2ZW47QmlnSW50ZWdlci5wcm90b3R5cGUuZXhwPWJucEV4cDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZz1iblRvU3RyaW5nO0JpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZT1ibk5lZ2F0ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hYnM9Ym5BYnM7QmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvPWJuQ29tcGFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aD1ibkJpdExlbmd0aDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2Q9Ym5Nb2Q7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50PWJuTW9kUG93SW50O0JpZ0ludGVnZXIuWkVSTz1uYnYoMCk7QmlnSW50ZWdlci5PTkU9bmJ2KDEpO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBibkNsb25lKCl7dmFyIGE9bmJpKCk7dGhpcy5jb3B5VG8oYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5JbnRWYWx1ZSgpe2lmKHRoaXMuczwwKXtpZih0aGlzLnQ9PTEpe3JldHVybiB0aGlzWzBdLXRoaXMuRFZ9ZWxzZXtpZih0aGlzLnQ9PTApe3JldHVybiAtMX19fWVsc2V7aWYodGhpcy50PT0xKXtyZXR1cm4gdGhpc1swXX1lbHNle2lmKHRoaXMudD09MCl7cmV0dXJuIDB9fX1yZXR1cm4oKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXX1mdW5jdGlvbiBibkJ5dGVWYWx1ZSgpe3JldHVybih0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNH1mdW5jdGlvbiBiblNob3J0VmFsdWUoKXtyZXR1cm4odGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTZ9ZnVuY3Rpb24gYm5wQ2h1bmtTaXplKGEpe3JldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2coYSkpfWZ1bmN0aW9uIGJuU2lnTnVtKCl7aWYodGhpcy5zPDApe3JldHVybiAtMX1lbHNle2lmKHRoaXMudDw9MHx8KHRoaXMudD09MSYmdGhpc1swXTw9MCkpe3JldHVybiAwfWVsc2V7cmV0dXJuIDF9fX1mdW5jdGlvbiBibnBUb1JhZGl4KGMpe2lmKGM9PW51bGwpe2M9MTB9aWYodGhpcy5zaWdudW0oKT09MHx8YzwyfHxjPjM2KXtyZXR1cm5cIjBcIn12YXIgZj10aGlzLmNodW5rU2l6ZShjKTt2YXIgZT1NYXRoLnBvdyhjLGYpO3ZhciBpPW5idihlKSxqPW5iaSgpLGg9bmJpKCksZz1cIlwiO3RoaXMuZGl2UmVtVG8oaSxqLGgpO3doaWxlKGouc2lnbnVtKCk+MCl7Zz0oZStoLmludFZhbHVlKCkpLnRvU3RyaW5nKGMpLnN1YnN0cigxKStnO2ouZGl2UmVtVG8oaSxqLGgpfXJldHVybiBoLmludFZhbHVlKCkudG9TdHJpbmcoYykrZ31mdW5jdGlvbiBibnBGcm9tUmFkaXgobSxoKXt0aGlzLmZyb21JbnQoMCk7aWYoaD09bnVsbCl7aD0xMH12YXIgZj10aGlzLmNodW5rU2l6ZShoKTt2YXIgZz1NYXRoLnBvdyhoLGYpLGU9ZmFsc2UsYT0wLGw9MDtmb3IodmFyIGM9MDtjPG0ubGVuZ3RoOysrYyl7dmFyIGs9aW50QXQobSxjKTtpZihrPDApe2lmKG0uY2hhckF0KGMpPT1cIi1cIiYmdGhpcy5zaWdudW0oKT09MCl7ZT10cnVlfWNvbnRpbnVlfWw9aCpsK2s7aWYoKythPj1mKXt0aGlzLmRNdWx0aXBseShnKTt0aGlzLmRBZGRPZmZzZXQobCwwKTthPTA7bD0wfX1pZihhPjApe3RoaXMuZE11bHRpcGx5KE1hdGgucG93KGgsYSkpO3RoaXMuZEFkZE9mZnNldChsLDApfWlmKGUpe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpfX1mdW5jdGlvbiBibnBGcm9tTnVtYmVyKGYsZSxoKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoZjwyKXt0aGlzLmZyb21JbnQoMSl9ZWxzZXt0aGlzLmZyb21OdW1iZXIoZixoKTtpZighdGhpcy50ZXN0Qml0KGYtMSkpe3RoaXMuYml0d2lzZVRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLG9wX29yLHRoaXMpfWlmKHRoaXMuaXNFdmVuKCkpe3RoaXMuZEFkZE9mZnNldCgxLDApfXdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShlKSl7dGhpcy5kQWRkT2Zmc2V0KDIsMCk7aWYodGhpcy5iaXRMZW5ndGgoKT5mKXt0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLHRoaXMpfX19fWVsc2V7dmFyIGQ9bmV3IEFycmF5KCksZz1mJjc7ZC5sZW5ndGg9KGY+PjMpKzE7ZS5uZXh0Qnl0ZXMoZCk7aWYoZz4wKXtkWzBdJj0oKDE8PGcpLTEpfWVsc2V7ZFswXT0wfXRoaXMuZnJvbVN0cmluZyhkLDI1Nil9fWZ1bmN0aW9uIGJuVG9CeXRlQXJyYXkoKXt2YXIgYj10aGlzLnQsYz1uZXcgQXJyYXkoKTtjWzBdPXRoaXMuczt2YXIgZT10aGlzLkRCLShiKnRoaXMuREIpJTgsZixhPTA7aWYoYi0tPjApe2lmKGU8dGhpcy5EQiYmKGY9dGhpc1tiXT4+ZSkhPSh0aGlzLnMmdGhpcy5ETSk+PmUpe2NbYSsrXT1mfCh0aGlzLnM8PCh0aGlzLkRCLWUpKX13aGlsZShiPj0wKXtpZihlPDgpe2Y9KHRoaXNbYl0mKCgxPDxlKS0xKSk8PCg4LWUpO2Z8PXRoaXNbLS1iXT4+KGUrPXRoaXMuREItOCl9ZWxzZXtmPSh0aGlzW2JdPj4oZS09OCkpJjI1NTtpZihlPD0wKXtlKz10aGlzLkRCOy0tYn19aWYoKGYmMTI4KSE9MCl7Znw9LTI1Nn1pZihhPT0wJiYodGhpcy5zJjEyOCkhPShmJjEyOCkpeysrYX1pZihhPjB8fGYhPXRoaXMucyl7Y1thKytdPWZ9fX1yZXR1cm4gY31mdW5jdGlvbiBibkVxdWFscyhiKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYik9PTApfWZ1bmN0aW9uIGJuTWluKGIpe3JldHVybih0aGlzLmNvbXBhcmVUbyhiKTwwKT90aGlzOmJ9ZnVuY3Rpb24gYm5NYXgoYil7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGIpPjApP3RoaXM6Yn1mdW5jdGlvbiBibnBCaXR3aXNlVG8oYyxoLGUpe3ZhciBkLGcsYj1NYXRoLm1pbihjLnQsdGhpcy50KTtmb3IoZD0wO2Q8YjsrK2Qpe2VbZF09aCh0aGlzW2RdLGNbZF0pfWlmKGMudDx0aGlzLnQpe2c9Yy5zJnRoaXMuRE07Zm9yKGQ9YjtkPHRoaXMudDsrK2Qpe2VbZF09aCh0aGlzW2RdLGcpfWUudD10aGlzLnR9ZWxzZXtnPXRoaXMucyZ0aGlzLkRNO2ZvcihkPWI7ZDxjLnQ7KytkKXtlW2RdPWgoZyxjW2RdKX1lLnQ9Yy50fWUucz1oKHRoaXMucyxjLnMpO2UuY2xhbXAoKX1mdW5jdGlvbiBvcF9hbmQoYSxiKXtyZXR1cm4gYSZifWZ1bmN0aW9uIGJuQW5kKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfYW5kLGMpO3JldHVybiBjfWZ1bmN0aW9uIG9wX29yKGEsYil7cmV0dXJuIGF8Yn1mdW5jdGlvbiBibk9yKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3Bfb3IsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gb3BfeG9yKGEsYil7cmV0dXJuIGFeYn1mdW5jdGlvbiBiblhvcihiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX3hvcixjKTtyZXR1cm4gY31mdW5jdGlvbiBvcF9hbmRub3QoYSxiKXtyZXR1cm4gYSZ+Yn1mdW5jdGlvbiBibkFuZE5vdChiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX2FuZG5vdCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibk5vdCgpe3ZhciBiPW5iaSgpO2Zvcih2YXIgYT0wO2E8dGhpcy50OysrYSl7YlthXT10aGlzLkRNJn50aGlzW2FdfWIudD10aGlzLnQ7Yi5zPX50aGlzLnM7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5TaGlmdExlZnQoYil7dmFyIGE9bmJpKCk7aWYoYjwwKXt0aGlzLnJTaGlmdFRvKC1iLGEpfWVsc2V7dGhpcy5sU2hpZnRUbyhiLGEpfXJldHVybiBhfWZ1bmN0aW9uIGJuU2hpZnRSaWdodChiKXt2YXIgYT1uYmkoKTtpZihiPDApe3RoaXMubFNoaWZ0VG8oLWIsYSl9ZWxzZXt0aGlzLnJTaGlmdFRvKGIsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gbGJpdChhKXtpZihhPT0wKXtyZXR1cm4gLTF9dmFyIGI9MDtpZigoYSY2NTUzNSk9PTApe2E+Pj0xNjtiKz0xNn1pZigoYSYyNTUpPT0wKXthPj49ODtiKz04fWlmKChhJjE1KT09MCl7YT4+PTQ7Yis9NH1pZigoYSYzKT09MCl7YT4+PTI7Yis9Mn1pZigoYSYxKT09MCl7KytifXJldHVybiBifWZ1bmN0aW9uIGJuR2V0TG93ZXN0U2V0Qml0KCl7Zm9yKHZhciBhPTA7YTx0aGlzLnQ7KythKXtpZih0aGlzW2FdIT0wKXtyZXR1cm4gYSp0aGlzLkRCK2xiaXQodGhpc1thXSl9fWlmKHRoaXMuczwwKXtyZXR1cm4gdGhpcy50KnRoaXMuREJ9cmV0dXJuIC0xfWZ1bmN0aW9uIGNiaXQoYSl7dmFyIGI9MDt3aGlsZShhIT0wKXthJj1hLTE7KytifXJldHVybiBifWZ1bmN0aW9uIGJuQml0Q291bnQoKXt2YXIgYz0wLGE9dGhpcy5zJnRoaXMuRE07Zm9yKHZhciBiPTA7Yjx0aGlzLnQ7KytiKXtjKz1jYml0KHRoaXNbYl1eYSl9cmV0dXJuIGN9ZnVuY3Rpb24gYm5UZXN0Qml0KGIpe3ZhciBhPU1hdGguZmxvb3IoYi90aGlzLkRCKTtpZihhPj10aGlzLnQpe3JldHVybih0aGlzLnMhPTApfXJldHVybigodGhpc1thXSYoMTw8KGIldGhpcy5EQikpKSE9MCl9ZnVuY3Rpb24gYm5wQ2hhbmdlQml0KGMsYil7dmFyIGE9QmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGMpO3RoaXMuYml0d2lzZVRvKGEsYixhKTtyZXR1cm4gYX1mdW5jdGlvbiBiblNldEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9vcil9ZnVuY3Rpb24gYm5DbGVhckJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9hbmRub3QpfWZ1bmN0aW9uIGJuRmxpcEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF94b3IpfWZ1bmN0aW9uIGJucEFkZFRvKGQsZil7dmFyIGU9MCxnPTAsYj1NYXRoLm1pbihkLnQsdGhpcy50KTt3aGlsZShlPGIpe2crPXRoaXNbZV0rZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWlmKGQudDx0aGlzLnQpe2crPWQuczt3aGlsZShlPHRoaXMudCl7Zys9dGhpc1tlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPXRoaXMuc31lbHNle2crPXRoaXMuczt3aGlsZShlPGQudCl7Zys9ZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPWQuc31mLnM9KGc8MCk/LTE6MDtpZihnPjApe2ZbZSsrXT1nfWVsc2V7aWYoZzwtMSl7ZltlKytdPXRoaXMuRFYrZ319Zi50PWU7Zi5jbGFtcCgpfWZ1bmN0aW9uIGJuQWRkKGIpe3ZhciBjPW5iaSgpO3RoaXMuYWRkVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBiblN1YnRyYWN0KGIpe3ZhciBjPW5iaSgpO3RoaXMuc3ViVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBibk11bHRpcGx5KGIpe3ZhciBjPW5iaSgpO3RoaXMubXVsdGlwbHlUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuU3F1YXJlKCl7dmFyIGE9bmJpKCk7dGhpcy5zcXVhcmVUbyhhKTtyZXR1cm4gYX1mdW5jdGlvbiBibkRpdmlkZShiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsYyxudWxsKTtyZXR1cm4gY31mdW5jdGlvbiBiblJlbWFpbmRlcihiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsbnVsbCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihiKXt2YXIgZD1uYmkoKSxjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixkLGMpO3JldHVybiBuZXcgQXJyYXkoZCxjKX1mdW5jdGlvbiBibnBETXVsdGlwbHkoYSl7dGhpc1t0aGlzLnRdPXRoaXMuYW0oMCxhLTEsdGhpcywwLDAsdGhpcy50KTsrK3RoaXMudDt0aGlzLmNsYW1wKCl9ZnVuY3Rpb24gYm5wREFkZE9mZnNldChiLGEpe2lmKGI9PTApe3JldHVybn13aGlsZSh0aGlzLnQ8PWEpe3RoaXNbdGhpcy50KytdPTB9dGhpc1thXSs9Yjt3aGlsZSh0aGlzW2FdPj10aGlzLkRWKXt0aGlzW2FdLT10aGlzLkRWO2lmKCsrYT49dGhpcy50KXt0aGlzW3RoaXMudCsrXT0wfSsrdGhpc1thXX19ZnVuY3Rpb24gTnVsbEV4cCgpe31mdW5jdGlvbiBuTm9wKGEpe3JldHVybiBhfWZ1bmN0aW9uIG5NdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYil9ZnVuY3Rpb24gblNxclRvKGEsYil7YS5zcXVhcmVUbyhiKX1OdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUubXVsVG89bk11bFRvO051bGxFeHAucHJvdG90eXBlLnNxclRvPW5TcXJUbztmdW5jdGlvbiBiblBvdyhhKXtyZXR1cm4gdGhpcy5leHAoYSxuZXcgTnVsbEV4cCgpKX1mdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYixmLGUpe3ZhciBkPU1hdGgubWluKHRoaXMudCtiLnQsZik7ZS5zPTA7ZS50PWQ7d2hpbGUoZD4wKXtlWy0tZF09MH12YXIgYztmb3IoYz1lLnQtdGhpcy50O2Q8YzsrK2Qpe2VbZCt0aGlzLnRdPXRoaXMuYW0oMCxiW2RdLGUsZCwwLHRoaXMudCl9Zm9yKGM9TWF0aC5taW4oYi50LGYpO2Q8YzsrK2Qpe3RoaXMuYW0oMCxiW2RdLGUsZCwwLGYtZCl9ZS5jbGFtcCgpfWZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhiLGUsZCl7LS1lO3ZhciBjPWQudD10aGlzLnQrYi50LWU7ZC5zPTA7d2hpbGUoLS1jPj0wKXtkW2NdPTB9Zm9yKGM9TWF0aC5tYXgoZS10aGlzLnQsMCk7YzxiLnQ7KytjKXtkW3RoaXMudCtjLWVdPXRoaXMuYW0oZS1jLGJbY10sZCwwLDAsdGhpcy50K2MtZSl9ZC5jbGFtcCgpO2QuZHJTaGlmdFRvKDEsZCl9ZnVuY3Rpb24gQmFycmV0dChhKXt0aGlzLnIyPW5iaSgpO3RoaXMucTM9bmJpKCk7QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKDIqYS50LHRoaXMucjIpO3RoaXMubXU9dGhpcy5yMi5kaXZpZGUoYSk7dGhpcy5tPWF9ZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoYSl7aWYoYS5zPDB8fGEudD4yKnRoaXMubS50KXtyZXR1cm4gYS5tb2QodGhpcy5tKX1lbHNle2lmKGEuY29tcGFyZVRvKHRoaXMubSk8MCl7cmV0dXJuIGF9ZWxzZXt2YXIgYj1uYmkoKTthLmNvcHlUbyhiKTt0aGlzLnJlZHVjZShiKTtyZXR1cm4gYn19fWZ1bmN0aW9uIGJhcnJldHRSZXZlcnQoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gYmFycmV0dFJlZHVjZShhKXthLmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO2lmKGEudD50aGlzLm0udCsxKXthLnQ9dGhpcy5tLnQrMTthLmNsYW1wKCl9dGhpcy5tdS5tdWx0aXBseVVwcGVyVG8odGhpcy5yMix0aGlzLm0udCsxLHRoaXMucTMpO3RoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO3doaWxlKGEuY29tcGFyZVRvKHRoaXMucjIpPDApe2EuZEFkZE9mZnNldCgxLHRoaXMubS50KzEpfWEuc3ViVG8odGhpcy5yMixhKTt3aGlsZShhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gYmFycmV0dFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBiYXJyZXR0TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfUJhcnJldHQucHJvdG90eXBlLmNvbnZlcnQ9YmFycmV0dENvbnZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0PWJhcnJldHRSZXZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmVkdWNlPWJhcnJldHRSZWR1Y2U7QmFycmV0dC5wcm90b3R5cGUubXVsVG89YmFycmV0dE11bFRvO0JhcnJldHQucHJvdG90eXBlLnNxclRvPWJhcnJldHRTcXJUbztmdW5jdGlvbiBibk1vZFBvdyhxLGYpe3ZhciBvPXEuYml0TGVuZ3RoKCksaCxiPW5idigxKSx2O2lmKG88PTApe3JldHVybiBifWVsc2V7aWYobzwxOCl7aD0xfWVsc2V7aWYobzw0OCl7aD0zfWVsc2V7aWYobzwxNDQpe2g9NH1lbHNle2lmKG88NzY4KXtoPTV9ZWxzZXtoPTZ9fX19fWlmKG88OCl7dj1uZXcgQ2xhc3NpYyhmKX1lbHNle2lmKGYuaXNFdmVuKCkpe3Y9bmV3IEJhcnJldHQoZil9ZWxzZXt2PW5ldyBNb250Z29tZXJ5KGYpfX12YXIgcD1uZXcgQXJyYXkoKSxkPTMscz1oLTEsYT0oMTw8aCktMTtwWzFdPXYuY29udmVydCh0aGlzKTtpZihoPjEpe3ZhciBBPW5iaSgpO3Yuc3FyVG8ocFsxXSxBKTt3aGlsZShkPD1hKXtwW2RdPW5iaSgpO3YubXVsVG8oQSxwW2QtMl0scFtkXSk7ZCs9Mn19dmFyIGw9cS50LTEseCx1PXRydWUsYz1uYmkoKSx5O289bmJpdHMocVtsXSktMTt3aGlsZShsPj0wKXtpZihvPj1zKXt4PShxW2xdPj4oby1zKSkmYX1lbHNle3g9KHFbbF0mKCgxPDwobysxKSktMSkpPDwocy1vKTtpZihsPjApe3h8PXFbbC0xXT4+KHRoaXMuREIrby1zKX19ZD1oO3doaWxlKCh4JjEpPT0wKXt4Pj49MTstLWR9aWYoKG8tPWQpPDApe28rPXRoaXMuREI7LS1sfWlmKHUpe3BbeF0uY29weVRvKGIpO3U9ZmFsc2V9ZWxzZXt3aGlsZShkPjEpe3Yuc3FyVG8oYixjKTt2LnNxclRvKGMsYik7ZC09Mn1pZihkPjApe3Yuc3FyVG8oYixjKX1lbHNle3k9YjtiPWM7Yz15fXYubXVsVG8oYyxwW3hdLGIpfXdoaWxlKGw+PTAmJihxW2xdJigxPDxvKSk9PTApe3Yuc3FyVG8oYixjKTt5PWI7Yj1jO2M9eTtpZigtLW88MCl7bz10aGlzLkRCLTE7LS1sfX19cmV0dXJuIHYucmV2ZXJ0KGIpfWZ1bmN0aW9uIGJuR0NEKGMpe3ZhciBiPSh0aGlzLnM8MCk/dGhpcy5uZWdhdGUoKTp0aGlzLmNsb25lKCk7dmFyIGg9KGMuczwwKT9jLm5lZ2F0ZSgpOmMuY2xvbmUoKTtpZihiLmNvbXBhcmVUbyhoKTwwKXt2YXIgZT1iO2I9aDtoPWV9dmFyIGQ9Yi5nZXRMb3dlc3RTZXRCaXQoKSxmPWguZ2V0TG93ZXN0U2V0Qml0KCk7aWYoZjwwKXtyZXR1cm4gYn1pZihkPGYpe2Y9ZH1pZihmPjApe2IuclNoaWZ0VG8oZixiKTtoLnJTaGlmdFRvKGYsaCl9d2hpbGUoYi5zaWdudW0oKT4wKXtpZigoZD1iLmdldExvd2VzdFNldEJpdCgpKT4wKXtiLnJTaGlmdFRvKGQsYil9aWYoKGQ9aC5nZXRMb3dlc3RTZXRCaXQoKSk+MCl7aC5yU2hpZnRUbyhkLGgpfWlmKGIuY29tcGFyZVRvKGgpPj0wKXtiLnN1YlRvKGgsYik7Yi5yU2hpZnRUbygxLGIpfWVsc2V7aC5zdWJUbyhiLGgpO2guclNoaWZ0VG8oMSxoKX19aWYoZj4wKXtoLmxTaGlmdFRvKGYsaCl9cmV0dXJuIGh9ZnVuY3Rpb24gYm5wTW9kSW50KGUpe2lmKGU8PTApe3JldHVybiAwfXZhciBjPXRoaXMuRFYlZSxiPSh0aGlzLnM8MCk/ZS0xOjA7aWYodGhpcy50PjApe2lmKGM9PTApe2I9dGhpc1swXSVlfWVsc2V7Zm9yKHZhciBhPXRoaXMudC0xO2E+PTA7LS1hKXtiPShjKmIrdGhpc1thXSklZX19fXJldHVybiBifWZ1bmN0aW9uIGJuTW9kSW52ZXJzZShmKXt2YXIgaj1mLmlzRXZlbigpO2lmKCh0aGlzLmlzRXZlbigpJiZqKXx8Zi5zaWdudW0oKT09MCl7cmV0dXJuIEJpZ0ludGVnZXIuWkVST312YXIgaT1mLmNsb25lKCksaD10aGlzLmNsb25lKCk7dmFyIGc9bmJ2KDEpLGU9bmJ2KDApLGw9bmJ2KDApLGs9bmJ2KDEpO3doaWxlKGkuc2lnbnVtKCkhPTApe3doaWxlKGkuaXNFdmVuKCkpe2kuclNoaWZ0VG8oMSxpKTtpZihqKXtpZighZy5pc0V2ZW4oKXx8IWUuaXNFdmVuKCkpe2cuYWRkVG8odGhpcyxnKTtlLnN1YlRvKGYsZSl9Zy5yU2hpZnRUbygxLGcpfWVsc2V7aWYoIWUuaXNFdmVuKCkpe2Uuc3ViVG8oZixlKX19ZS5yU2hpZnRUbygxLGUpfXdoaWxlKGguaXNFdmVuKCkpe2guclNoaWZ0VG8oMSxoKTtpZihqKXtpZighbC5pc0V2ZW4oKXx8IWsuaXNFdmVuKCkpe2wuYWRkVG8odGhpcyxsKTtrLnN1YlRvKGYsayl9bC5yU2hpZnRUbygxLGwpfWVsc2V7aWYoIWsuaXNFdmVuKCkpe2suc3ViVG8oZixrKX19ay5yU2hpZnRUbygxLGspfWlmKGkuY29tcGFyZVRvKGgpPj0wKXtpLnN1YlRvKGgsaSk7aWYoail7Zy5zdWJUbyhsLGcpfWUuc3ViVG8oayxlKX1lbHNle2guc3ViVG8oaSxoKTtpZihqKXtsLnN1YlRvKGcsbCl9ay5zdWJUbyhlLGspfX1pZihoLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTApe3JldHVybiBCaWdJbnRlZ2VyLlpFUk99aWYoay5jb21wYXJlVG8oZik+PTApe3JldHVybiBrLnN1YnRyYWN0KGYpfWlmKGsuc2lnbnVtKCk8MCl7ay5hZGRUbyhmLGspfWVsc2V7cmV0dXJuIGt9aWYoay5zaWdudW0oKTwwKXtyZXR1cm4gay5hZGQoZil9ZWxzZXtyZXR1cm4ga319dmFyIGxvd3ByaW1lcz1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTt2YXIgbHBsaW09KDE8PDI2KS9sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXTtmdW5jdGlvbiBibklzUHJvYmFibGVQcmltZShlKXt2YXIgZCxiPXRoaXMuYWJzKCk7aWYoYi50PT0xJiZiWzBdPD1sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSl7Zm9yKGQ9MDtkPGxvd3ByaW1lcy5sZW5ndGg7KytkKXtpZihiWzBdPT1sb3dwcmltZXNbZF0pe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9aWYoYi5pc0V2ZW4oKSl7cmV0dXJuIGZhbHNlfWQ9MTt3aGlsZShkPGxvd3ByaW1lcy5sZW5ndGgpe3ZhciBhPWxvd3ByaW1lc1tkXSxjPWQrMTt3aGlsZShjPGxvd3ByaW1lcy5sZW5ndGgmJmE8bHBsaW0pe2EqPWxvd3ByaW1lc1tjKytdfWE9Yi5tb2RJbnQoYSk7d2hpbGUoZDxjKXtpZihhJWxvd3ByaW1lc1tkKytdPT0wKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gYi5taWxsZXJSYWJpbihlKX1mdW5jdGlvbiBibnBNaWxsZXJSYWJpbihmKXt2YXIgZz10aGlzLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTt2YXIgYz1nLmdldExvd2VzdFNldEJpdCgpO2lmKGM8PTApe3JldHVybiBmYWxzZX12YXIgaD1nLnNoaWZ0UmlnaHQoYyk7Zj0oZisxKT4+MTtpZihmPmxvd3ByaW1lcy5sZW5ndGgpe2Y9bG93cHJpbWVzLmxlbmd0aH12YXIgYj1uYmkoKTtmb3IodmFyIGU9MDtlPGY7KytlKXtiLmZyb21JbnQobG93cHJpbWVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsb3dwcmltZXMubGVuZ3RoKV0pO3ZhciBsPWIubW9kUG93KGgsdGhpcyk7aWYobC5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpIT0wJiZsLmNvbXBhcmVUbyhnKSE9MCl7dmFyIGQ9MTt3aGlsZShkKys8YyYmbC5jb21wYXJlVG8oZykhPTApe2w9bC5tb2RQb3dJbnQoMix0aGlzKTtpZihsLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk9PTApe3JldHVybiBmYWxzZX19aWYobC5jb21wYXJlVG8oZykhPTApe3JldHVybiBmYWxzZX19fXJldHVybiB0cnVlfUJpZ0ludGVnZXIucHJvdG90eXBlLmNodW5rU2l6ZT1ibnBDaHVua1NpemU7QmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeD1ibnBUb1JhZGl4O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeD1ibnBGcm9tUmFkaXg7QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbU51bWJlcj1ibnBGcm9tTnVtYmVyO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbz1ibnBCaXR3aXNlVG87QmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0PWJucENoYW5nZUJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGRUbz1ibnBBZGRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHk9Ym5wRE11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQ9Ym5wREFkZE9mZnNldDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseUxvd2VyVG89Ym5wTXVsdGlwbHlMb3dlclRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbz1ibnBNdWx0aXBseVVwcGVyVG87QmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50PWJucE1vZEludDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5taWxsZXJSYWJpbj1ibnBNaWxsZXJSYWJpbjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZT1ibkNsb25lO0JpZ0ludGVnZXIucHJvdG90eXBlLmludFZhbHVlPWJuSW50VmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlPWJuQnl0ZVZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWU9Ym5TaG9ydFZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNpZ251bT1iblNpZ051bTtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheT1iblRvQnl0ZUFycmF5O0JpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscz1ibkVxdWFscztCaWdJbnRlZ2VyLnByb3RvdHlwZS5taW49Ym5NaW47QmlnSW50ZWdlci5wcm90b3R5cGUubWF4PWJuTWF4O0JpZ0ludGVnZXIucHJvdG90eXBlLmFuZD1ibkFuZDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5vcj1ibk9yO0JpZ0ludGVnZXIucHJvdG90eXBlLnhvcj1iblhvcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3Q9Ym5BbmROb3Q7QmlnSW50ZWdlci5wcm90b3R5cGUubm90PWJuTm90O0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdD1iblNoaWZ0TGVmdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0PWJuU2hpZnRSaWdodDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5nZXRMb3dlc3RTZXRCaXQ9Ym5HZXRMb3dlc3RTZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQ9Ym5CaXRDb3VudDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0PWJuVGVzdEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zZXRCaXQ9Ym5TZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQ9Ym5DbGVhckJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0PWJuRmxpcEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGQ9Ym5BZGQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3Q9Ym5TdWJ0cmFjdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseT1ibk11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdmlkZT1ibkRpdmlkZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXI9Ym5SZW1haW5kZXI7QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyPWJuRGl2aWRlQW5kUmVtYWluZGVyO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvdz1ibk1vZFBvdztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlPWJuTW9kSW52ZXJzZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3c9Ym5Qb3c7QmlnSW50ZWdlci5wcm90b3R5cGUuZ2NkPWJuR0NEO0JpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZT1ibklzUHJvYmFibGVQcmltZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmU9Ym5TcXVhcmU7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbmZ1bmN0aW9uIEFyY2ZvdXIoKXt0aGlzLmk9MDt0aGlzLmo9MDt0aGlzLlM9bmV3IEFycmF5KCl9ZnVuY3Rpb24gQVJDNGluaXQoZCl7dmFyIGMsYSxiO2ZvcihjPTA7YzwyNTY7KytjKXt0aGlzLlNbY109Y31hPTA7Zm9yKGM9MDtjPDI1NjsrK2Mpe2E9KGErdGhpcy5TW2NdK2RbYyVkLmxlbmd0aF0pJjI1NTtiPXRoaXMuU1tjXTt0aGlzLlNbY109dGhpcy5TW2FdO3RoaXMuU1thXT1ifXRoaXMuaT0wO3RoaXMuaj0wfWZ1bmN0aW9uIEFSQzRuZXh0KCl7dmFyIGE7dGhpcy5pPSh0aGlzLmkrMSkmMjU1O3RoaXMuaj0odGhpcy5qK3RoaXMuU1t0aGlzLmldKSYyNTU7YT10aGlzLlNbdGhpcy5pXTt0aGlzLlNbdGhpcy5pXT10aGlzLlNbdGhpcy5qXTt0aGlzLlNbdGhpcy5qXT1hO3JldHVybiB0aGlzLlNbKGErdGhpcy5TW3RoaXMuaV0pJjI1NV19QXJjZm91ci5wcm90b3R5cGUuaW5pdD1BUkM0aW5pdDtBcmNmb3VyLnByb3RvdHlwZS5uZXh0PUFSQzRuZXh0O2Z1bmN0aW9uIHBybmdfbmV3c3RhdGUoKXtyZXR1cm4gbmV3IEFyY2ZvdXIoKX12YXIgcm5nX3BzaXplPTI1Njtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxudmFyIHJuZ19zdGF0ZTt2YXIgcm5nX3Bvb2w7dmFyIHJuZ19wcHRyO2Z1bmN0aW9uIHJuZ19zZWVkX2ludChhKXtybmdfcG9vbFtybmdfcHB0cisrXV49YSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj44KSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj4xNikmMjU1O3JuZ19wb29sW3JuZ19wcHRyKytdXj0oYT4+MjQpJjI1NTtpZihybmdfcHB0cj49cm5nX3BzaXplKXtybmdfcHB0ci09cm5nX3BzaXplfX1mdW5jdGlvbiBybmdfc2VlZF90aW1lKCl7cm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKX1pZihybmdfcG9vbD09bnVsbCl7cm5nX3Bvb2w9bmV3IEFycmF5KCk7cm5nX3BwdHI9MDt2YXIgdDtpZih3aW5kb3chPT11bmRlZmluZWQmJih3aW5kb3cuY3J5cHRvIT09dW5kZWZpbmVkfHx3aW5kb3cubXNDcnlwdG8hPT11bmRlZmluZWQpKXt2YXIgY3J5cHRvPXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0bztpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgdWE9bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXModWEpO2Zvcih0PTA7dDwzMjsrK3Qpe3JuZ19wb29sW3JuZ19wcHRyKytdPXVhW3RdfX1lbHNle2lmKG5hdmlnYXRvci5hcHBOYW1lPT1cIk5ldHNjYXBlXCImJm5hdmlnYXRvci5hcHBWZXJzaW9uPFwiNVwiKXt2YXIgej13aW5kb3cuY3J5cHRvLnJhbmRvbSgzMik7Zm9yKHQ9MDt0PHoubGVuZ3RoOysrdCl7cm5nX3Bvb2xbcm5nX3BwdHIrK109ei5jaGFyQ29kZUF0KHQpJjI1NX19fX13aGlsZShybmdfcHB0cjxybmdfcHNpemUpe3Q9TWF0aC5mbG9vcig2NTUzNipNYXRoLnJhbmRvbSgpKTtybmdfcG9vbFtybmdfcHB0cisrXT10Pj4+ODtybmdfcG9vbFtybmdfcHB0cisrXT10JjI1NX1ybmdfcHB0cj0wO3JuZ19zZWVkX3RpbWUoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGUoKXtpZihybmdfc3RhdGU9PW51bGwpe3JuZ19zZWVkX3RpbWUoKTtybmdfc3RhdGU9cHJuZ19uZXdzdGF0ZSgpO3JuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtmb3Iocm5nX3BwdHI9MDtybmdfcHB0cjxybmdfcG9vbC5sZW5ndGg7KytybmdfcHB0cil7cm5nX3Bvb2xbcm5nX3BwdHJdPTB9cm5nX3BwdHI9MH1yZXR1cm4gcm5nX3N0YXRlLm5leHQoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGIpe3ZhciBhO2ZvcihhPTA7YTxiLmxlbmd0aDsrK2Epe2JbYV09cm5nX2dldF9ieXRlKCl9fWZ1bmN0aW9uIFNlY3VyZVJhbmRvbSgpe31TZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcz1ybmdfZ2V0X2J5dGVzO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUJpZ0ludChiLGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihiLGEpfWZ1bmN0aW9uIGxpbmVicmsoYyxkKXt2YXIgYT1cIlwiO3ZhciBiPTA7d2hpbGUoYitkPGMubGVuZ3RoKXthKz1jLnN1YnN0cmluZyhiLGIrZCkrXCJcXG5cIjtiKz1kfXJldHVybiBhK2Muc3Vic3RyaW5nKGIsYy5sZW5ndGgpfWZ1bmN0aW9uIGJ5dGUySGV4KGEpe2lmKGE8MTYpe3JldHVyblwiMFwiK2EudG9TdHJpbmcoMTYpfWVsc2V7cmV0dXJuIGEudG9TdHJpbmcoMTYpfX1mdW5jdGlvbiBwa2NzMXBhZDIoZSxoKXtpZihoPGUubGVuZ3RoKzExKXt0aHJvd1wiTWVzc2FnZSB0b28gbG9uZyBmb3IgUlNBXCI7cmV0dXJuIG51bGx9dmFyIGc9bmV3IEFycmF5KCk7dmFyIGQ9ZS5sZW5ndGgtMTt3aGlsZShkPj0wJiZoPjApe3ZhciBmPWUuY2hhckNvZGVBdChkLS0pO2lmKGY8MTI4KXtnWy0taF09Zn1lbHNle2lmKChmPjEyNykmJihmPDIwNDgpKXtnWy0taF09KGYmNjMpfDEyODtnWy0taF09KGY+PjYpfDE5Mn1lbHNle2dbLS1oXT0oZiY2Myl8MTI4O2dbLS1oXT0oKGY+PjYpJjYzKXwxMjg7Z1stLWhdPShmPj4xMil8MjI0fX19Z1stLWhdPTA7dmFyIGI9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBhPW5ldyBBcnJheSgpO3doaWxlKGg+Mil7YVswXT0wO3doaWxlKGFbMF09PTApe2IubmV4dEJ5dGVzKGEpfWdbLS1oXT1hWzBdfWdbLS1oXT0yO2dbLS1oXT0wO3JldHVybiBuZXcgQmlnSW50ZWdlcihnKX1mdW5jdGlvbiBvYWVwX21nZjFfYXJyKGMsYSxlKXt2YXIgYj1cIlwiLGQ9MDt3aGlsZShiLmxlbmd0aDxhKXtiKz1lKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGMuY29uY2F0KFsoZCY0Mjc4MTkwMDgwKT4+MjQsKGQmMTY3MTE2ODApPj4xNiwoZCY2NTI4MCk+PjgsZCYyNTVdKSkpO2QrPTF9cmV0dXJuIGJ9ZnVuY3Rpb24gb2FlcF9wYWQocSxhLGYsbCl7dmFyIGM9S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdDt2YXIgbz1LSlVSLmNyeXB0by5VdGlsO3ZhciBiPW51bGw7aWYoIWYpe2Y9XCJzaGExXCJ9aWYodHlwZW9mIGY9PT1cInN0cmluZ1wiKXtiPWMuZ2V0Q2Fub25pY2FsQWxnTmFtZShmKTtsPWMuZ2V0SGFzaExlbmd0aChiKTtmPWZ1bmN0aW9uKGkpe3JldHVybiBoZXh0b3JzdHIoby5oYXNoSGV4KHJzdHJ0b2hleChpKSxiKSl9fWlmKHEubGVuZ3RoKzIqbCsyPmEpe3Rocm93XCJNZXNzYWdlIHRvbyBsb25nIGZvciBSU0FcIn12YXIgaz1cIlwiLGU7Zm9yKGU9MDtlPGEtcS5sZW5ndGgtMipsLTI7ZSs9MSl7ays9XCJcXHgwMFwifXZhciBoPWYoXCJcIikraytcIlxceDAxXCIrcTt2YXIgZz1uZXcgQXJyYXkobCk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhnKTt2YXIgaj1vYWVwX21nZjFfYXJyKGcsaC5sZW5ndGgsZik7dmFyIHA9W107Zm9yKGU9MDtlPGgubGVuZ3RoO2UrPTEpe3BbZV09aC5jaGFyQ29kZUF0KGUpXmouY2hhckNvZGVBdChlKX12YXIgbT1vYWVwX21nZjFfYXJyKHAsZy5sZW5ndGgsZik7dmFyIGQ9WzBdO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKz0xKXtkW2UrMV09Z1tlXV5tLmNoYXJDb2RlQXQoZSl9cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGQuY29uY2F0KHApKX1mdW5jdGlvbiBSU0FLZXkoKXt0aGlzLm49bnVsbDt0aGlzLmU9MDt0aGlzLmQ9bnVsbDt0aGlzLnA9bnVsbDt0aGlzLnE9bnVsbDt0aGlzLmRtcDE9bnVsbDt0aGlzLmRtcTE9bnVsbDt0aGlzLmNvZWZmPW51bGx9ZnVuY3Rpb24gUlNBU2V0UHVibGljKGIsYSl7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMuaXNQcml2YXRlPWZhbHNlO2lmKHR5cGVvZiBiIT09XCJzdHJpbmdcIil7dGhpcy5uPWI7dGhpcy5lPWF9ZWxzZXtpZihiIT1udWxsJiZhIT1udWxsJiZiLmxlbmd0aD4wJiZhLmxlbmd0aD4wKXt0aGlzLm49cGFyc2VCaWdJbnQoYiwxNik7dGhpcy5lPXBhcnNlSW50KGEsMTYpfWVsc2V7dGhyb3dcIkludmFsaWQgUlNBIHB1YmxpYyBrZXlcIn19fWZ1bmN0aW9uIFJTQURvUHVibGljKGEpe3JldHVybiBhLm1vZFBvd0ludCh0aGlzLmUsdGhpcy5uKX1mdW5jdGlvbiBSU0FFbmNyeXB0KGQpe3ZhciBhPXBrY3MxcGFkMihkLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMpO2lmKGE9PW51bGwpe3JldHVybiBudWxsfXZhciBlPXRoaXMuZG9QdWJsaWMoYSk7aWYoZT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGI9ZS50b1N0cmluZygxNik7aWYoKGIubGVuZ3RoJjEpPT0wKXtyZXR1cm4gYn1lbHNle3JldHVyblwiMFwiK2J9fWZ1bmN0aW9uIFJTQUVuY3J5cHRPQUVQKGYsZSxiKXt2YXIgYT1vYWVwX3BhZChmLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMsZSxiKTtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgZz10aGlzLmRvUHVibGljKGEpO2lmKGc9PW51bGwpe3JldHVybiBudWxsfXZhciBkPWcudG9TdHJpbmcoMTYpO2lmKChkLmxlbmd0aCYxKT09MCl7cmV0dXJuIGR9ZWxzZXtyZXR1cm5cIjBcIitkfX1SU0FLZXkucHJvdG90eXBlLmRvUHVibGljPVJTQURvUHVibGljO1JTQUtleS5wcm90b3R5cGUuc2V0UHVibGljPVJTQVNldFB1YmxpYztSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQ9UlNBRW5jcnlwdDtSU0FLZXkucHJvdG90eXBlLmVuY3J5cHRPQUVQPVJTQUVuY3J5cHRPQUVQO1JTQUtleS5wcm90b3R5cGUudHlwZT1cIlJTQVwiO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBFQ0ZpZWxkRWxlbWVudEZwKGIsYSl7dGhpcy54PWE7dGhpcy5xPWJ9ZnVuY3Rpb24gZmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLnguZXF1YWxzKGEueCkpfWZ1bmN0aW9uIGZlRnBUb0JpZ0ludGVnZXIoKXtyZXR1cm4gdGhpcy54fWZ1bmN0aW9uIGZlRnBOZWdhdGUoKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5uZWdhdGUoKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcEFkZChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5hZGQoYS50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBTdWJ0cmFjdChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5zdWJ0cmFjdChhLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcE11bHRpcGx5KGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54Lm11bHRpcGx5KGEudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwU3F1YXJlKCl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguc3F1YXJlKCkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBEaXZpZGUoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubXVsdGlwbHkoYS50b0JpZ0ludGVnZXIoKS5tb2RJbnZlcnNlKHRoaXMucSkpLm1vZCh0aGlzLnEpKX1FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5lcXVhbHM9ZmVGcEVxdWFscztFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS50b0JpZ0ludGVnZXI9ZmVGcFRvQmlnSW50ZWdlcjtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5uZWdhdGU9ZmVGcE5lZ2F0ZTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5hZGQ9ZmVGcEFkZDtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zdWJ0cmFjdD1mZUZwU3VidHJhY3Q7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubXVsdGlwbHk9ZmVGcE11bHRpcGx5O0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnNxdWFyZT1mZUZwU3F1YXJlO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmRpdmlkZT1mZUZwRGl2aWRlO2Z1bmN0aW9uIEVDUG9pbnRGcChjLGEsZCxiKXt0aGlzLmN1cnZlPWM7dGhpcy54PWE7dGhpcy55PWQ7aWYoYj09bnVsbCl7dGhpcy56PUJpZ0ludGVnZXIuT05FfWVsc2V7dGhpcy56PWJ9dGhpcy56aW52PW51bGx9ZnVuY3Rpb24gcG9pbnRGcEdldFgoKXtpZih0aGlzLnppbnY9PW51bGwpe3RoaXMuemludj10aGlzLnoubW9kSW52ZXJzZSh0aGlzLmN1cnZlLnEpfXJldHVybiB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnppbnYpLm1vZCh0aGlzLmN1cnZlLnEpKX1mdW5jdGlvbiBwb2ludEZwR2V0WSgpe2lmKHRoaXMuemludj09bnVsbCl7dGhpcy56aW52PXRoaXMuei5tb2RJbnZlcnNlKHRoaXMuY3VydmUucSl9cmV0dXJuIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMuemludikubW9kKHRoaXMuY3VydmUucSkpfWZ1bmN0aW9uIHBvaW50RnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiBhLmlzSW5maW5pdHkoKX1pZihhLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpfXZhciBjLGI7Yz1hLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYS56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoIWMuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpe3JldHVybiBmYWxzZX1iPWEueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShhLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gYi5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwSXNJbmZpbml0eSgpe2lmKCh0aGlzLng9PW51bGwpJiYodGhpcy55PT1udWxsKSl7cmV0dXJuIHRydWV9cmV0dXJuIHRoaXMuei5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSYmIXRoaXMueS50b0JpZ0ludGVnZXIoKS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwTmVnYXRlKCl7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLngsdGhpcy55Lm5lZ2F0ZSgpLHRoaXMueil9ZnVuY3Rpb24gcG9pbnRGcEFkZChsKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGx9aWYobC5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfXZhciBwPWwueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShsLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgbz1sLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkobC56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhvKSl7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhwKSl7cmV0dXJuIHRoaXMudHdpY2UoKX1yZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBqPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgZT10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIG49dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBjPWwueC50b0JpZ0ludGVnZXIoKTt2YXIgaz1sLnkudG9CaWdJbnRlZ2VyKCk7dmFyIG09by5zcXVhcmUoKTt2YXIgaT1tLm11bHRpcGx5KG8pO3ZhciBkPWUubXVsdGlwbHkobSk7dmFyIGc9cC5zcXVhcmUoKS5tdWx0aXBseSh0aGlzLnopO3ZhciBhPWcuc3VidHJhY3QoZC5zaGlmdExlZnQoMSkpLm11bHRpcGx5KGwueikuc3VidHJhY3QoaSkubXVsdGlwbHkobykubW9kKHRoaXMuY3VydmUucSk7dmFyIGg9ZC5tdWx0aXBseShqKS5tdWx0aXBseShwKS5zdWJ0cmFjdChuLm11bHRpcGx5KGkpKS5zdWJ0cmFjdChnLm11bHRpcGx5KHApKS5tdWx0aXBseShsLnopLmFkZChwLm11bHRpcGx5KGkpKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1pLm11bHRpcGx5KHRoaXMueikubXVsdGlwbHkobC56KS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoYSksdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihoKSxmKX1mdW5jdGlvbiBwb2ludEZwVHdpY2UoKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgYz10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBlPWgubXVsdGlwbHkodGhpcy56KTt2YXIgaj1lLm11bHRpcGx5KGgpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBpPXRoaXMuY3VydmUuYS50b0JpZ0ludGVnZXIoKTt2YXIgaz1jLnNxdWFyZSgpLm11bHRpcGx5KGcpO2lmKCFCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKGkpKXtrPWsuYWRkKHRoaXMuei5zcXVhcmUoKS5tdWx0aXBseShpKSl9az1rLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBiPWsuc3F1YXJlKCkuc3VidHJhY3QoYy5zaGlmdExlZnQoMykubXVsdGlwbHkoaikpLnNoaWZ0TGVmdCgxKS5tdWx0aXBseShlKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1rLm11bHRpcGx5KGcpLm11bHRpcGx5KGMpLnN1YnRyYWN0KGouc2hpZnRMZWZ0KDEpKS5zaGlmdExlZnQoMikubXVsdGlwbHkoaikuc3VidHJhY3Qoay5zcXVhcmUoKS5tdWx0aXBseShrKSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGQ9ZS5zcXVhcmUoKS5tdWx0aXBseShlKS5zaGlmdExlZnQoMykubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGIpLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoZiksZCl9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5KGIpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZihiLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPWI7dmFyIGY9Zy5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBsPXRoaXMubmVnYXRlKCk7dmFyIGQ9dGhpczt2YXIgYztmb3IoYz1mLmJpdExlbmd0aCgpLTI7Yz4wOy0tYyl7ZD1kLnR3aWNlKCk7dmFyIGE9Zi50ZXN0Qml0KGMpO3ZhciBqPWcudGVzdEJpdChjKTtpZihhIT1qKXtkPWQuYWRkKGE/dGhpczpsKX19cmV0dXJuIGR9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5VHdvKGMsYSxiKXt2YXIgZDtpZihjLmJpdExlbmd0aCgpPmIuYml0TGVuZ3RoKCkpe2Q9Yy5iaXRMZW5ndGgoKS0xfWVsc2V7ZD1iLmJpdExlbmd0aCgpLTF9dmFyIGY9dGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpO3ZhciBlPXRoaXMuYWRkKGEpO3doaWxlKGQ+PTApe2Y9Zi50d2ljZSgpO2lmKGMudGVzdEJpdChkKSl7aWYoYi50ZXN0Qml0KGQpKXtmPWYuYWRkKGUpfWVsc2V7Zj1mLmFkZCh0aGlzKX19ZWxzZXtpZihiLnRlc3RCaXQoZCkpe2Y9Zi5hZGQoYSl9fS0tZH1yZXR1cm4gZn1FQ1BvaW50RnAucHJvdG90eXBlLmdldFg9cG9pbnRGcEdldFg7RUNQb2ludEZwLnByb3RvdHlwZS5nZXRZPXBvaW50RnBHZXRZO0VDUG9pbnRGcC5wcm90b3R5cGUuZXF1YWxzPXBvaW50RnBFcXVhbHM7RUNQb2ludEZwLnByb3RvdHlwZS5pc0luZmluaXR5PXBvaW50RnBJc0luZmluaXR5O0VDUG9pbnRGcC5wcm90b3R5cGUubmVnYXRlPXBvaW50RnBOZWdhdGU7RUNQb2ludEZwLnByb3RvdHlwZS5hZGQ9cG9pbnRGcEFkZDtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlPXBvaW50RnBUd2ljZTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5PXBvaW50RnBNdWx0aXBseTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5VHdvPXBvaW50RnBNdWx0aXBseVR3bztmdW5jdGlvbiBFQ0N1cnZlRnAoZSxkLGMpe3RoaXMucT1lO3RoaXMuYT10aGlzLmZyb21CaWdJbnRlZ2VyKGQpO3RoaXMuYj10aGlzLmZyb21CaWdJbnRlZ2VyKGMpO3RoaXMuaW5maW5pdHk9bmV3IEVDUG9pbnRGcCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gY3VydmVGcEdldFEoKXtyZXR1cm4gdGhpcy5xfWZ1bmN0aW9uIGN1cnZlRnBHZXRBKCl7cmV0dXJuIHRoaXMuYX1mdW5jdGlvbiBjdXJ2ZUZwR2V0Qigpe3JldHVybiB0aGlzLmJ9ZnVuY3Rpb24gY3VydmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLmEuZXF1YWxzKGEuYSkmJnRoaXMuYi5lcXVhbHMoYS5iKSl9ZnVuY3Rpb24gY3VydmVGcEdldEluZmluaXR5KCl7cmV0dXJuIHRoaXMuaW5maW5pdHl9ZnVuY3Rpb24gY3VydmVGcEZyb21CaWdJbnRlZ2VyKGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsYSl9ZnVuY3Rpb24gY3VydmVGcERlY29kZVBvaW50SGV4KGQpe3N3aXRjaChwYXJzZUludChkLnN1YnN0cigwLDIpLDE2KSl7Y2FzZSAwOnJldHVybiB0aGlzLmluZmluaXR5O2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG51bGw7Y2FzZSA0OmNhc2UgNjpjYXNlIDc6dmFyIGE9KGQubGVuZ3RoLTIpLzI7dmFyIGM9ZC5zdWJzdHIoMixhKTt2YXIgYj1kLnN1YnN0cihhKzIsYSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcyx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGMsMTYpKSx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGIsMTYpKSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRRPWN1cnZlRnBHZXRRO0VDQ3VydmVGcC5wcm90b3R5cGUuZ2V0QT1jdXJ2ZUZwR2V0QTtFQ0N1cnZlRnAucHJvdG90eXBlLmdldEI9Y3VydmVGcEdldEI7RUNDdXJ2ZUZwLnByb3RvdHlwZS5lcXVhbHM9Y3VydmVGcEVxdWFscztFQ0N1cnZlRnAucHJvdG90eXBlLmdldEluZmluaXR5PWN1cnZlRnBHZXRJbmZpbml0eTtFQ0N1cnZlRnAucHJvdG90eXBlLmZyb21CaWdJbnRlZ2VyPWN1cnZlRnBGcm9tQmlnSW50ZWdlcjtFQ0N1cnZlRnAucHJvdG90eXBlLmRlY29kZVBvaW50SGV4PWN1cnZlRnBEZWNvZGVQb2ludEhleDtcbi8qISAoYykgU3RlZmFuIFRob21hcyB8IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYml0Y29pbmpzLWxpYlxyXG4gKi9cclxuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZ2V0Qnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKCh0aGlzLnRvQmlnSW50ZWdlcigpLmJpdExlbmd0aCgpKzcpLzgpfTtFQ1BvaW50RnAucHJvdG90eXBlLmdldEVuY29kZWQ9ZnVuY3Rpb24oYyl7dmFyIGQ9ZnVuY3Rpb24oaCxmKXt2YXIgZz1oLnRvQnl0ZUFycmF5VW5zaWduZWQoKTtpZihmPGcubGVuZ3RoKXtnPWcuc2xpY2UoZy5sZW5ndGgtZil9ZWxzZXt3aGlsZShmPmcubGVuZ3RoKXtnLnVuc2hpZnQoMCl9fXJldHVybiBnfTt2YXIgYT10aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgZT10aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgYj1kKGEsMzIpO2lmKGMpe2lmKGUuaXNFdmVuKCkpe2IudW5zaGlmdCgyKX1lbHNle2IudW5zaGlmdCgzKX19ZWxzZXtiLnVuc2hpZnQoNCk7Yj1iLmNvbmNhdChkKGUsMzIpKX1yZXR1cm4gYn07RUNQb2ludEZwLmRlY29kZUZyb209ZnVuY3Rpb24oZyxjKXt2YXIgZj1jWzBdO3ZhciBlPWMubGVuZ3RoLTE7dmFyIGQ9Yy5zbGljZSgxLDErZS8yKTt2YXIgYj1jLnNsaWNlKDErZS8yLDErZSk7ZC51bnNoaWZ0KDApO2IudW5zaGlmdCgwKTt2YXIgYT1uZXcgQmlnSW50ZWdlcihkKTt2YXIgaD1uZXcgQmlnSW50ZWdlcihiKTtyZXR1cm4gbmV3IEVDUG9pbnRGcChnLGcuZnJvbUJpZ0ludGVnZXIoYSksZy5mcm9tQmlnSW50ZWdlcihoKSl9O0VDUG9pbnRGcC5kZWNvZGVGcm9tSGV4PWZ1bmN0aW9uKGcsYyl7dmFyIGY9Yy5zdWJzdHIoMCwyKTt2YXIgZT1jLmxlbmd0aC0yO3ZhciBkPWMuc3Vic3RyKDIsZS8yKTt2YXIgYj1jLnN1YnN0cigyK2UvMixlLzIpO3ZhciBhPW5ldyBCaWdJbnRlZ2VyKGQsMTYpO3ZhciBoPW5ldyBCaWdJbnRlZ2VyKGIsMTYpO3JldHVybiBuZXcgRUNQb2ludEZwKGcsZy5mcm9tQmlnSW50ZWdlcihhKSxnLmZyb21CaWdJbnRlZ2VyKGgpKX07RUNQb2ludEZwLnByb3RvdHlwZS5hZGQyRD1mdW5jdGlvbihjKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGN9aWYoYy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueC5lcXVhbHMoYy54KSl7aWYodGhpcy55LmVxdWFscyhjLnkpKXtyZXR1cm4gdGhpcy50d2ljZSgpfXJldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9Yy54LnN1YnRyYWN0KHRoaXMueCk7dmFyIGU9Yy55LnN1YnRyYWN0KHRoaXMueSk7dmFyIGE9ZS5kaXZpZGUoZyk7dmFyIGQ9YS5zcXVhcmUoKS5zdWJ0cmFjdCh0aGlzLngpLnN1YnRyYWN0KGMueCk7dmFyIGY9YS5tdWx0aXBseSh0aGlzLnguc3VidHJhY3QoZCkpLnN1YnRyYWN0KHRoaXMueSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSxkLGYpfTtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlMkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBiPXRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKDIpKTt2YXIgZT10aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZigzKSk7dmFyIGE9dGhpcy54LnNxdWFyZSgpLm11bHRpcGx5KGUpLmFkZCh0aGlzLmN1cnZlLmEpLmRpdmlkZSh0aGlzLnkubXVsdGlwbHkoYikpO3ZhciBjPWEuc3F1YXJlKCkuc3VidHJhY3QodGhpcy54Lm11bHRpcGx5KGIpKTt2YXIgZD1hLm11bHRpcGx5KHRoaXMueC5zdWJ0cmFjdChjKSkuc3VidHJhY3QodGhpcy55KTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLGMsZCl9O0VDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHkyRD1mdW5jdGlvbihiKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYoYi5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1iO3ZhciBmPWcubXVsdGlwbHkobmV3IEJpZ0ludGVnZXIoXCIzXCIpKTt2YXIgbD10aGlzLm5lZ2F0ZSgpO3ZhciBkPXRoaXM7dmFyIGM7Zm9yKGM9Zi5iaXRMZW5ndGgoKS0yO2M+MDstLWMpe2Q9ZC50d2ljZSgpO3ZhciBhPWYudGVzdEJpdChjKTt2YXIgaj1nLnRlc3RCaXQoYyk7aWYoYSE9ail7ZD1kLmFkZDJEKGE/dGhpczpsKX19cmV0dXJuIGR9O0VDUG9pbnRGcC5wcm90b3R5cGUuaXNPbkN1cnZlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGY9dGhpcy5jdXJ2ZS5nZXRBKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGM9dGhpcy5jdXJ2ZS5nZXRCKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy5jdXJ2ZS5nZXRRKCk7dmFyIGU9aS5tdWx0aXBseShpKS5tb2QoaCk7dmFyIGc9ZC5tdWx0aXBseShkKS5tdWx0aXBseShkKS5hZGQoZi5tdWx0aXBseShkKSkuYWRkKGMpLm1vZChoKTtyZXR1cm4gZS5lcXVhbHMoZyl9O0VDUG9pbnRGcC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIihcIit0aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpK1wiLFwiK3RoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkrXCIpXCJ9O0VDUG9pbnRGcC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmN1cnZlLmdldFEoKTtpZih0aGlzLmlzSW5maW5pdHkoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgYXQgaW5maW5pdHkuXCIpfXZhciBhPXRoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBiPXRoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO2lmKGEuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxhLmNvbXBhcmVUbyhjLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSk+MCl7dGhyb3cgbmV3IEVycm9yKFwieCBjb29yZGluYXRlIG91dCBvZiBib3VuZHNcIil9aWYoYi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGIuY29tcGFyZVRvKGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKT4wKXt0aHJvdyBuZXcgRXJyb3IoXCJ5IGNvb3JkaW5hdGUgb3V0IG9mIGJvdW5kc1wiKX1pZighdGhpcy5pc09uQ3VydmUoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgbm90IG9uIHRoZSBjdXJ2ZS5cIil9aWYodGhpcy5tdWx0aXBseShjKS5pc0luZmluaXR5KCkpe3Rocm93IG5ldyBFcnJvcihcIlBvaW50IGlzIG5vdCBhIHNjYWxhciBtdWx0aXBsZSBvZiBHLlwiKX1yZXR1cm4gdHJ1ZX07XG4vKiEgTWlrZSBTYW11ZWwgKGMpIDIwMDkgfCBjb2RlLmdvb2dsZS5jb20vcC9qc29uLXNhbnMtZXZhbFxyXG4gKi9cclxudmFyIGpzb25QYXJzZT0oZnVuY3Rpb24oKXt2YXIgZT1cIig/Oi0/XFxcXGIoPzowfFsxLTldWzAtOV0qKSg/OlxcXFwuWzAtOV0rKT8oPzpbZUVdWystXT9bMC05XSspP1xcXFxiKVwiO3ZhciBqPScoPzpbXlxcXFwwLVxcXFx4MDhcXFxceDBhLVxcXFx4MWZcIlxcXFxcXFxcXXxcXFxcXFxcXCg/OltcIi9cXFxcXFxcXGJmbnJ0XXx1WzAtOUEtRmEtZl17NH0pKSc7dmFyIGk9Jyg/OlwiJytqKycqXCIpJzt2YXIgZD1uZXcgUmVnRXhwKFwiKD86ZmFsc2V8dHJ1ZXxudWxsfFtcXFxce1xcXFx9XFxcXFtcXFxcXV18XCIrZStcInxcIitpK1wiKVwiLFwiZ1wiKTt2YXIgaz1uZXcgUmVnRXhwKFwiXFxcXFxcXFwoPzooW151XSl8dSguezR9KSlcIixcImdcIik7dmFyIGc9eydcIic6J1wiJyxcIi9cIjpcIi9cIixcIlxcXFxcIjpcIlxcXFxcIixiOlwiXFxiXCIsZjpcIlxcZlwiLG46XCJcXG5cIixyOlwiXFxyXCIsdDpcIlxcdFwifTtmdW5jdGlvbiBoKGwsbSxuKXtyZXR1cm4gbT9nW21dOlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobiwxNikpfXZhciBjPW5ldyBTdHJpbmcoXCJcIik7dmFyIGE9XCJcXFxcXCI7dmFyIGY9e1wie1wiOk9iamVjdCxcIltcIjpBcnJheX07dmFyIGI9T2JqZWN0Lmhhc093blByb3BlcnR5O3JldHVybiBmdW5jdGlvbih1LHEpe3ZhciBwPXUubWF0Y2goZCk7dmFyIHg7dmFyIHY9cFswXTt2YXIgbD1mYWxzZTtpZihcIntcIj09PXYpe3g9e319ZWxzZXtpZihcIltcIj09PXYpe3g9W119ZWxzZXt4PVtdO2w9dHJ1ZX19dmFyIHQ7dmFyIHI9W3hdO2Zvcih2YXIgbz0xLWwsbT1wLmxlbmd0aDtvPG07KytvKXt2PXBbb107dmFyIHc7c3dpdGNoKHYuY2hhckNvZGVBdCgwKSl7ZGVmYXVsdDp3PXJbMF07d1t0fHx3Lmxlbmd0aF09Kyh2KTt0PXZvaWQgMDticmVhaztjYXNlIDM0OnY9di5zdWJzdHJpbmcoMSx2Lmxlbmd0aC0xKTtpZih2LmluZGV4T2YoYSkhPT0tMSl7dj12LnJlcGxhY2UoayxoKX13PXJbMF07aWYoIXQpe2lmKHcgaW5zdGFuY2VvZiBBcnJheSl7dD13Lmxlbmd0aH1lbHNle3Q9dnx8YzticmVha319d1t0XT12O3Q9dm9pZCAwO2JyZWFrO2Nhc2UgOTE6dz1yWzBdO3IudW5zaGlmdCh3W3R8fHcubGVuZ3RoXT1bXSk7dD12b2lkIDA7YnJlYWs7Y2FzZSA5MzpyLnNoaWZ0KCk7YnJlYWs7Y2FzZSAxMDI6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPWZhbHNlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTEwOnc9clswXTt3W3R8fHcubGVuZ3RoXT1udWxsO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTE2Onc9clswXTt3W3R8fHcubGVuZ3RoXT10cnVlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTIzOnc9clswXTtyLnVuc2hpZnQod1t0fHx3Lmxlbmd0aF09e30pO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTI1OnIuc2hpZnQoKTticmVha319aWYobCl7aWYoci5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoKX14PXhbMF19ZWxzZXtpZihyLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCl9fWlmKHEpe3ZhciBzPWZ1bmN0aW9uKEMsQil7dmFyIEQ9Q1tCXTtpZihEJiZ0eXBlb2YgRD09PVwib2JqZWN0XCIpe3ZhciBuPW51bGw7Zm9yKHZhciB6IGluIEQpe2lmKGIuY2FsbChELHopJiZEIT09Qyl7dmFyIHk9cyhELHopO2lmKHkhPT12b2lkIDApe0Rbel09eX1lbHNle2lmKCFuKXtuPVtdfW4ucHVzaCh6KX19fWlmKG4pe2Zvcih2YXIgQT1uLmxlbmd0aDstLUE+PTA7KXtkZWxldGUgRFtuW0FdXX19fXJldHVybiBxLmNhbGwoQyxCLEQpfTt4PXMoe1wiXCI6eH0sXCJcIil9cmV0dXJuIHh9fSkoKTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5hc24xPT1cInVuZGVmaW5lZFwifHwhS0pVUi5hc24xKXtLSlVSLmFzbjE9e319S0pVUi5hc24xLkFTTjFVdGlsPW5ldyBmdW5jdGlvbigpe3RoaXMuaW50ZWdlclRvQnl0ZUhleD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKDE2KTtpZigoYi5sZW5ndGglMik9PTEpe2I9XCIwXCIrYn1yZXR1cm4gYn07dGhpcy5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleD1mdW5jdGlvbihqKXt2YXIgZj1qLnRvU3RyaW5nKDE2KTtpZihmLnN1YnN0cigwLDEpIT1cIi1cIil7aWYoZi5sZW5ndGglMj09MSl7Zj1cIjBcIitmfWVsc2V7aWYoIWYubWF0Y2goL15bMC03XS8pKXtmPVwiMDBcIitmfX19ZWxzZXt2YXIgYT1mLnN1YnN0cigxKTt2YXIgZT1hLmxlbmd0aDtpZihlJTI9PTEpe2UrPTF9ZWxzZXtpZighZi5tYXRjaCgvXlswLTddLykpe2UrPTJ9fXZhciBnPVwiXCI7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Zys9XCJmXCJ9dmFyIGM9bmV3IEJpZ0ludGVnZXIoZywxNik7dmFyIGI9Yy54b3IoaikuYWRkKEJpZ0ludGVnZXIuT05FKTtmPWIudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14tLyxcIlwiKX1yZXR1cm4gZn07dGhpcy5nZXRQRU1TdHJpbmdGcm9tSGV4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGhleHRvcGVtKGEsYil9O3RoaXMubmV3T2JqZWN0PWZ1bmN0aW9uKGspe3ZhciBEPUtKVVIsbj1ELmFzbjEsej1uLkRFUkJvb2xlYW4sZT1uLkRFUkludGVnZXIscz1uLkRFUkJpdFN0cmluZyxoPW4uREVST2N0ZXRTdHJpbmcsdj1uLkRFUk51bGwsdz1uLkRFUk9iamVjdElkZW50aWZpZXIsbD1uLkRFUkVudW1lcmF0ZWQsZz1uLkRFUlVURjhTdHJpbmcsZj1uLkRFUk51bWVyaWNTdHJpbmcseT1uLkRFUlByaW50YWJsZVN0cmluZyx1PW4uREVSVGVsZXRleFN0cmluZyxwPW4uREVSSUE1U3RyaW5nLEM9bi5ERVJVVENUaW1lLGo9bi5ERVJHZW5lcmFsaXplZFRpbWUsbT1uLkRFUlNlcXVlbmNlLGM9bi5ERVJTZXQscj1uLkRFUlRhZ2dlZE9iamVjdCxvPW4uQVNOMVV0aWwubmV3T2JqZWN0O3ZhciB0PU9iamVjdC5rZXlzKGspO2lmKHQubGVuZ3RoIT0xKXt0aHJvd1wia2V5IG9mIHBhcmFtIHNoYWxsIGJlIG9ubHkgb25lLlwifXZhciBGPXRbMF07aWYoXCI6Ym9vbDppbnQ6Yml0c3RyOm9jdHN0cjpudWxsOm9pZDplbnVtOnV0ZjhzdHI6bnVtc3RyOnBybnN0cjp0ZWxzdHI6aWE1c3RyOnV0Y3RpbWU6Z2VudGltZTpzZXE6c2V0OnRhZzpcIi5pbmRleE9mKFwiOlwiK0YrXCI6XCIpPT0tMSl7dGhyb3dcInVuZGVmaW5lZCBrZXk6IFwiK0Z9aWYoRj09XCJib29sXCIpe3JldHVybiBuZXcgeihrW0ZdKX1pZihGPT1cImludFwiKXtyZXR1cm4gbmV3IGUoa1tGXSl9aWYoRj09XCJiaXRzdHJcIil7cmV0dXJuIG5ldyBzKGtbRl0pfWlmKEY9PVwib2N0c3RyXCIpe3JldHVybiBuZXcgaChrW0ZdKX1pZihGPT1cIm51bGxcIil7cmV0dXJuIG5ldyB2KGtbRl0pfWlmKEY9PVwib2lkXCIpe3JldHVybiBuZXcgdyhrW0ZdKX1pZihGPT1cImVudW1cIil7cmV0dXJuIG5ldyBsKGtbRl0pfWlmKEY9PVwidXRmOHN0clwiKXtyZXR1cm4gbmV3IGcoa1tGXSl9aWYoRj09XCJudW1zdHJcIil7cmV0dXJuIG5ldyBmKGtbRl0pfWlmKEY9PVwicHJuc3RyXCIpe3JldHVybiBuZXcgeShrW0ZdKX1pZihGPT1cInRlbHN0clwiKXtyZXR1cm4gbmV3IHUoa1tGXSl9aWYoRj09XCJpYTVzdHJcIil7cmV0dXJuIG5ldyBwKGtbRl0pfWlmKEY9PVwidXRjdGltZVwiKXtyZXR1cm4gbmV3IEMoa1tGXSl9aWYoRj09XCJnZW50aW1lXCIpe3JldHVybiBuZXcgaihrW0ZdKX1pZihGPT1cInNlcVwiKXt2YXIgZD1rW0ZdO3ZhciBFPVtdO2Zvcih2YXIgeD0wO3g8ZC5sZW5ndGg7eCsrKXt2YXIgQj1vKGRbeF0pO0UucHVzaChCKX1yZXR1cm4gbmV3IG0oe2FycmF5OkV9KX1pZihGPT1cInNldFwiKXt2YXIgZD1rW0ZdO3ZhciBFPVtdO2Zvcih2YXIgeD0wO3g8ZC5sZW5ndGg7eCsrKXt2YXIgQj1vKGRbeF0pO0UucHVzaChCKX1yZXR1cm4gbmV3IGMoe2FycmF5OkV9KX1pZihGPT1cInRhZ1wiKXt2YXIgQT1rW0ZdO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChBKT09PVwiW29iamVjdCBBcnJheV1cIiYmQS5sZW5ndGg9PTMpe3ZhciBxPW8oQVsyXSk7cmV0dXJuIG5ldyByKHt0YWc6QVswXSxleHBsaWNpdDpBWzFdLG9iajpxfSl9ZWxzZXt2YXIgYj17fTtpZihBLmV4cGxpY2l0IT09dW5kZWZpbmVkKXtiLmV4cGxpY2l0PUEuZXhwbGljaXR9aWYoQS50YWchPT11bmRlZmluZWQpe2IudGFnPUEudGFnfWlmKEEub2JqPT09dW5kZWZpbmVkKXt0aHJvd1wib2JqIHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgJ3RhZycuXCJ9Yi5vYmo9byhBLm9iaik7cmV0dXJuIG5ldyByKGIpfX19O3RoaXMuanNvblRvQVNOMUhFWD1mdW5jdGlvbihiKXt2YXIgYT10aGlzLm5ld09iamVjdChiKTtyZXR1cm4gYS5nZXRFbmNvZGVkSGV4KCl9fTtLSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQ9ZnVuY3Rpb24oYSl7dmFyIGo9XCJcIjt2YXIgaz1wYXJzZUludChhLnN1YnN0cigwLDIpLDE2KTt2YXIgZD1NYXRoLmZsb29yKGsvNDApO3ZhciBjPWslNDA7dmFyIGo9ZCtcIi5cIitjO3ZhciBlPVwiXCI7Zm9yKHZhciBmPTI7ZjxhLmxlbmd0aDtmKz0yKXt2YXIgZz1wYXJzZUludChhLnN1YnN0cihmLDIpLDE2KTt2YXIgaD0oXCIwMDAwMDAwMFwiK2cudG9TdHJpbmcoMikpLnNsaWNlKC04KTtlPWUraC5zdWJzdHIoMSw3KTtpZihoLnN1YnN0cigwLDEpPT1cIjBcIil7dmFyIGI9bmV3IEJpZ0ludGVnZXIoZSwyKTtqPWorXCIuXCIrYi50b1N0cmluZygxMCk7ZT1cIlwifX1yZXR1cm4gan07S0pVUi5hc24xLkFTTjFVdGlsLm9pZEludFRvSGV4PWZ1bmN0aW9uKGYpe3ZhciBlPWZ1bmN0aW9uKGEpe3ZhciBrPWEudG9TdHJpbmcoMTYpO2lmKGsubGVuZ3RoPT0xKXtrPVwiMFwiK2t9cmV0dXJuIGt9O3ZhciBkPWZ1bmN0aW9uKG8pe3ZhciBuPVwiXCI7dmFyIGs9bmV3IEJpZ0ludGVnZXIobywxMCk7dmFyIGE9ay50b1N0cmluZygyKTt2YXIgbD03LWEubGVuZ3RoJTc7aWYobD09Nyl7bD0wfXZhciBxPVwiXCI7Zm9yKHZhciBtPTA7bTxsO20rKyl7cSs9XCIwXCJ9YT1xK2E7Zm9yKHZhciBtPTA7bTxhLmxlbmd0aC0xO20rPTcpe3ZhciBwPWEuc3Vic3RyKG0sNyk7aWYobSE9YS5sZW5ndGgtNyl7cD1cIjFcIitwfW4rPWUocGFyc2VJbnQocCwyKSl9cmV0dXJuIG59O2lmKCFmLm1hdGNoKC9eWzAtOS5dKyQvKSl7dGhyb3dcIm1hbGZvcm1lZCBvaWQgc3RyaW5nOiBcIitmfXZhciBnPVwiXCI7dmFyIGI9Zi5zcGxpdChcIi5cIik7dmFyIGo9cGFyc2VJbnQoYlswXSkqNDArcGFyc2VJbnQoYlsxXSk7Zys9ZShqKTtiLnNwbGljZSgwLDIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXtnKz1kKGJbY10pfXJldHVybiBnfTtLSlVSLmFzbjEuQVNOMU9iamVjdD1mdW5jdGlvbigpe3ZhciBjPXRydWU7dmFyIGI9bnVsbDt2YXIgZD1cIjAwXCI7dmFyIGU9XCIwMFwiO3ZhciBhPVwiXCI7dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWU9ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5oVj09XCJ1bmRlZmluZWRcInx8dGhpcy5oVj09bnVsbCl7dGhyb3dcInRoaXMuaFYgaXMgbnVsbCBvciB1bmRlZmluZWQuXCJ9aWYodGhpcy5oVi5sZW5ndGglMj09MSl7dGhyb3dcInZhbHVlIGhleCBtdXN0IGJlIGV2ZW4gbGVuZ3RoOiBuPVwiK2EubGVuZ3RoK1wiLHY9XCIrdGhpcy5oVn12YXIgaT10aGlzLmhWLmxlbmd0aC8yO3ZhciBoPWkudG9TdHJpbmcoMTYpO2lmKGgubGVuZ3RoJTI9PTEpe2g9XCIwXCIraH1pZihpPDEyOCl7cmV0dXJuIGh9ZWxzZXt2YXIgZz1oLmxlbmd0aC8yO2lmKGc+MTUpe3Rocm93XCJBU04uMSBsZW5ndGggdG9vIGxvbmcgdG8gcmVwcmVzZW50IGJ5IDh4OiBuID0gXCIraS50b1N0cmluZygxNil9dmFyIGY9MTI4K2c7cmV0dXJuIGYudG9TdHJpbmcoMTYpK2h9fTt0aGlzLmdldEVuY29kZWRIZXg9ZnVuY3Rpb24oKXtpZih0aGlzLmhUTFY9PW51bGx8fHRoaXMuaXNNb2RpZmllZCl7dGhpcy5oVj10aGlzLmdldEZyZXNoVmFsdWVIZXgoKTt0aGlzLmhMPXRoaXMuZ2V0TGVuZ3RoSGV4RnJvbVZhbHVlKCk7dGhpcy5oVExWPXRoaXMuaFQrdGhpcy5oTCt0aGlzLmhWO3RoaXMuaXNNb2RpZmllZD1mYWxzZX1yZXR1cm4gdGhpcy5oVExWfTt0aGlzLmdldFZhbHVlSGV4PWZ1bmN0aW9uKCl7dGhpcy5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIHRoaXMuaFZ9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVyblwiXCJ9fTtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmc9ZnVuY3Rpb24oYyl7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYj1udWxsO3ZhciBhPW51bGw7dGhpcy5nZXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfTt0aGlzLnNldFN0cmluZz1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9ZDt0aGlzLmhWPXV0Zjh0b2hleCh0aGlzLnMpLnRvTG93ZXJDYXNlKCl9O3RoaXMuc2V0U3RyaW5nSGV4PWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9ZH07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBjIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYz09XCJzdHJpbmdcIil7dGhpcy5zZXRTdHJpbmcoYyl9ZWxzZXtpZih0eXBlb2YgYy5zdHIhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0U3RyaW5nKGMuc3RyKX1lbHNle2lmKHR5cGVvZiBjLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRTdHJpbmdIZXgoYy5oZXgpfX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lPWZ1bmN0aW9uKGMpe0tKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt0aGlzLmxvY2FsRGF0ZVRvVVRDPWZ1bmN0aW9uKGYpe3V0Yz1mLmdldFRpbWUoKSsoZi5nZXRUaW1lem9uZU9mZnNldCgpKjYwMDAwKTt2YXIgZT1uZXcgRGF0ZSh1dGMpO3JldHVybiBlfTt0aGlzLmZvcm1hdERhdGU9ZnVuY3Rpb24obSxvLGUpe3ZhciBnPXRoaXMuemVyb1BhZGRpbmc7dmFyIG49dGhpcy5sb2NhbERhdGVUb1VUQyhtKTt2YXIgcD1TdHJpbmcobi5nZXRGdWxsWWVhcigpKTtpZihvPT1cInV0Y1wiKXtwPXAuc3Vic3RyKDIsMil9dmFyIGw9ZyhTdHJpbmcobi5nZXRNb250aCgpKzEpLDIpO3ZhciBxPWcoU3RyaW5nKG4uZ2V0RGF0ZSgpKSwyKTt2YXIgaD1nKFN0cmluZyhuLmdldEhvdXJzKCkpLDIpO3ZhciBpPWcoU3RyaW5nKG4uZ2V0TWludXRlcygpKSwyKTt2YXIgaj1nKFN0cmluZyhuLmdldFNlY29uZHMoKSksMik7dmFyIHI9cCtsK3EraCtpK2o7aWYoZT09PXRydWUpe3ZhciBmPW4uZ2V0TWlsbGlzZWNvbmRzKCk7aWYoZiE9MCl7dmFyIGs9ZyhTdHJpbmcoZiksMyk7az1rLnJlcGxhY2UoL1swXSskLyxcIlwiKTtyPXIrXCIuXCIra319cmV0dXJuIHIrXCJaXCJ9O3RoaXMuemVyb1BhZGRpbmc9ZnVuY3Rpb24oZSxkKXtpZihlLmxlbmd0aD49ZCl7cmV0dXJuIGV9cmV0dXJuIG5ldyBBcnJheShkLWUubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2V9O3RoaXMuZ2V0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc307dGhpcy5zZXRTdHJpbmc9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPWQ7dGhpcy5oVj1zdG9oZXgoZCl9O3RoaXMuc2V0QnlEYXRlVmFsdWU9ZnVuY3Rpb24oaCxqLGUsZCxmLGcpe3ZhciBpPW5ldyBEYXRlKERhdGUuVVRDKGgsai0xLGUsZCxmLGcsMCkpO3RoaXMuc2V0QnlEYXRlKGkpfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQ9ZnVuY3Rpb24oYil7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYT1udWxsO3RoaXMuc2V0QnlBU04xT2JqZWN0QXJyYXk9ZnVuY3Rpb24oYyl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5hc24xQXJyYXk9Y307dGhpcy5hcHBlbmRBU04xT2JqZWN0PWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuYXNuMUFycmF5LnB1c2goYyl9O3RoaXMuYXNuMUFycmF5PW5ldyBBcnJheSgpO2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYi5hcnJheSE9XCJ1bmRlZmluZWRcIil7dGhpcy5hc24xQXJyYXk9Yi5hcnJheX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQm9vbGVhbj1mdW5jdGlvbigpe0tKVVIuYXNuMS5ERVJCb29sZWFuLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDFcIjt0aGlzLmhUTFY9XCIwMTAxZmZcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkJvb2xlYW4sS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJJbnRlZ2VyPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJJbnRlZ2VyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDJcIjt0aGlzLnNldEJ5QmlnSW50ZWdlcj1mdW5jdGlvbihiKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPUtKVVIuYXNuMS5BU04xVXRpbC5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleChiKX07dGhpcy5zZXRCeUludGVnZXI9ZnVuY3Rpb24oYyl7dmFyIGI9bmV3IEJpZ0ludGVnZXIoU3RyaW5nKGMpLDEwKTt0aGlzLnNldEJ5QmlnSW50ZWdlcihiKX07dGhpcy5zZXRWYWx1ZUhleD1mdW5jdGlvbihiKXt0aGlzLmhWPWJ9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYSE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGEuYmlnaW50IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5QmlnSW50ZWdlcihhLmJpZ2ludCl9ZWxzZXtpZih0eXBlb2YgYVtcImludFwiXSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUludGVnZXIoYVtcImludFwiXSl9ZWxzZXtpZih0eXBlb2YgYT09XCJudW1iZXJcIil7dGhpcy5zZXRCeUludGVnZXIoYSl9ZWxzZXtpZih0eXBlb2YgYS5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0VmFsdWVIZXgoYS5oZXgpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJJbnRlZ2VyLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQml0U3RyaW5nPWZ1bmN0aW9uKGIpe2lmKGIhPT11bmRlZmluZWQmJnR5cGVvZiBiLm9iaiE9PVwidW5kZWZpbmVkXCIpe3ZhciBhPUtKVVIuYXNuMS5BU04xVXRpbC5uZXdPYmplY3QoYi5vYmopO2IuaGV4PVwiMDBcIithLmdldEVuY29kZWRIZXgoKX1LSlVSLmFzbjEuREVSQml0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDNcIjt0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cz1mdW5jdGlvbihjKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPWN9O3RoaXMuc2V0VW51c2VkQml0c0FuZEhleFZhbHVlPWZ1bmN0aW9uKGMsZSl7aWYoYzwwfHw3PGMpe3Rocm93XCJ1bnVzZWQgYml0cyBzaGFsbCBiZSBmcm9tIDAgdG8gNzogdSA9IFwiK2N9dmFyIGQ9XCIwXCIrYzt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPWQrZX07dGhpcy5zZXRCeUJpbmFyeVN0cmluZz1mdW5jdGlvbihlKXtlPWUucmVwbGFjZSgvMCskLyxcIlwiKTt2YXIgZj04LWUubGVuZ3RoJTg7aWYoZj09OCl7Zj0wfWZvcih2YXIgZz0wO2c8PWY7ZysrKXtlKz1cIjBcIn12YXIgaj1cIlwiO2Zvcih2YXIgZz0wO2c8ZS5sZW5ndGgtMTtnKz04KXt2YXIgZD1lLnN1YnN0cihnLDgpO3ZhciBjPXBhcnNlSW50KGQsMikudG9TdHJpbmcoMTYpO2lmKGMubGVuZ3RoPT0xKXtjPVwiMFwiK2N9ais9Y310aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPVwiMFwiK2Yran07dGhpcy5zZXRCeUJvb2xlYW5BcnJheT1mdW5jdGlvbihlKXt2YXIgZD1cIlwiO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXtpZihlW2NdPT10cnVlKXtkKz1cIjFcIn1lbHNle2QrPVwiMFwifX10aGlzLnNldEJ5QmluYXJ5U3RyaW5nKGQpfTt0aGlzLm5ld0ZhbHNlQXJyYXk9ZnVuY3Rpb24oZSl7dmFyIGM9bmV3IEFycmF5KGUpO2Zvcih2YXIgZD0wO2Q8ZTtkKyspe2NbZF09ZmFsc2V9cmV0dXJuIGN9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYiE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGI9PVwic3RyaW5nXCImJmIudG9Mb3dlckNhc2UoKS5tYXRjaCgvXlswLTlhLWZdKyQvKSl7dGhpcy5zZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHMoYil9ZWxzZXtpZih0eXBlb2YgYi5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzKGIuaGV4KX1lbHNle2lmKHR5cGVvZiBiLmJpbiE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUJpbmFyeVN0cmluZyhiLmJpbil9ZWxzZXtpZih0eXBlb2YgYi5hcnJheSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUJvb2xlYW5BcnJheShiLmFycmF5KX19fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQml0U3RyaW5nLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmc9ZnVuY3Rpb24oYil7aWYoYiE9PXVuZGVmaW5lZCYmdHlwZW9mIGIub2JqIT09XCJ1bmRlZmluZWRcIil7dmFyIGE9S0pVUi5hc24xLkFTTjFVdGlsLm5ld09iamVjdChiLm9iaik7Yi5oZXg9YS5nZXRFbmNvZGVkSGV4KCl9S0pVUi5hc24xLkRFUk9jdGV0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGIpO3RoaXMuaFQ9XCIwNFwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSTnVsbD1mdW5jdGlvbigpe0tKVVIuYXNuMS5ERVJOdWxsLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDVcIjt0aGlzLmhUTFY9XCIwNTAwXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJOdWxsLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllcj1mdW5jdGlvbihjKXt2YXIgYj1mdW5jdGlvbihkKXt2YXIgZT1kLnRvU3RyaW5nKDE2KTtpZihlLmxlbmd0aD09MSl7ZT1cIjBcIitlfXJldHVybiBlfTt2YXIgYT1mdW5jdGlvbihrKXt2YXIgaj1cIlwiO3ZhciBlPW5ldyBCaWdJbnRlZ2VyKGssMTApO3ZhciBkPWUudG9TdHJpbmcoMik7dmFyIGY9Ny1kLmxlbmd0aCU3O2lmKGY9PTcpe2Y9MH12YXIgbT1cIlwiO2Zvcih2YXIgZz0wO2c8ZjtnKyspe20rPVwiMFwifWQ9bStkO2Zvcih2YXIgZz0wO2c8ZC5sZW5ndGgtMTtnKz03KXt2YXIgbD1kLnN1YnN0cihnLDcpO2lmKGchPWQubGVuZ3RoLTcpe2w9XCIxXCIrbH1qKz1iKHBhcnNlSW50KGwsMikpfXJldHVybiBqfTtLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjA2XCI7dGhpcy5zZXRWYWx1ZUhleD1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9bnVsbDt0aGlzLmhWPWR9O3RoaXMuc2V0VmFsdWVPaWRTdHJpbmc9ZnVuY3Rpb24oZil7aWYoIWYubWF0Y2goL15bMC05Ll0rJC8pKXt0aHJvd1wibWFsZm9ybWVkIG9pZCBzdHJpbmc6IFwiK2Z9dmFyIGc9XCJcIjt2YXIgZD1mLnNwbGl0KFwiLlwiKTt2YXIgaj1wYXJzZUludChkWzBdKSo0MCtwYXJzZUludChkWzFdKTtnKz1iKGopO2Quc3BsaWNlKDAsMik7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe2crPWEoZFtlXSl9dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPW51bGw7dGhpcy5oVj1nfTt0aGlzLnNldFZhbHVlTmFtZT1mdW5jdGlvbihlKXt2YXIgZD1LSlVSLmFzbjEueDUwOS5PSUQubmFtZTJvaWQoZSk7aWYoZCE9PVwiXCIpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoZCl9ZWxzZXt0aHJvd1wiREVST2JqZWN0SWRlbnRpZmllciBvaWROYW1lIHVuZGVmaW5lZDogXCIrZX19O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZihjIT09dW5kZWZpbmVkKXtpZih0eXBlb2YgYz09PVwic3RyaW5nXCIpe2lmKGMubWF0Y2goL15bMC0yXS5bMC05Ll0rJC8pKXt0aGlzLnNldFZhbHVlT2lkU3RyaW5nKGMpfWVsc2V7dGhpcy5zZXRWYWx1ZU5hbWUoYyl9fWVsc2V7aWYoYy5vaWQhPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYy5vaWQpfWVsc2V7aWYoYy5oZXghPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVIZXgoYy5oZXgpfWVsc2V7aWYoYy5uYW1lIT09dW5kZWZpbmVkKXt0aGlzLnNldFZhbHVlTmFtZShjLm5hbWUpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSRW51bWVyYXRlZD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSRW51bWVyYXRlZC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjBhXCI7dGhpcy5zZXRCeUJpZ0ludGVnZXI9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5oVj1LSlVSLmFzbjEuQVNOMVV0aWwuYmlnSW50VG9NaW5Ud29zQ29tcGxlbWVudHNIZXgoYil9O3RoaXMuc2V0QnlJbnRlZ2VyPWZ1bmN0aW9uKGMpe3ZhciBiPW5ldyBCaWdJbnRlZ2VyKFN0cmluZyhjKSwxMCk7dGhpcy5zZXRCeUJpZ0ludGVnZXIoYil9O3RoaXMuc2V0VmFsdWVIZXg9ZnVuY3Rpb24oYil7dGhpcy5oVj1ifTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGEhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBhW1wiaW50XCJdIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5SW50ZWdlcihhW1wiaW50XCJdKX1lbHNle2lmKHR5cGVvZiBhPT1cIm51bWJlclwiKXt0aGlzLnNldEJ5SW50ZWdlcihhKX1lbHNle2lmKHR5cGVvZiBhLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRWYWx1ZUhleChhLmhleCl9fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSRW51bWVyYXRlZCxLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUlVURjhTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlVURjhTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjBjXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJVVEY4U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjEyXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxM1wifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE0XCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUklBNVN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSSUE1U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxNlwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSSUE1U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlVUQ1RpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlVUQ1RpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE3XCI7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMuZGF0ZT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMucz09XCJ1bmRlZmluZWRcIil7dGhpcy5kYXRlPW5ldyBEYXRlKCk7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTJ9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJVVENUaW1lLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUpO0tKVVIuYXNuMS5ERVJHZW5lcmFsaXplZFRpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMThcIjt0aGlzLndpdGhNaWxsaXM9ZmFsc2U7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJnZW5cIix0aGlzLndpdGhNaWxsaXMpO3RoaXMuaFY9c3RvaGV4KHRoaXMucyl9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe2lmKHRoaXMuZGF0ZT09PXVuZGVmaW5lZCYmdGhpcy5zPT09dW5kZWZpbmVkKXt0aGlzLmRhdGU9bmV3IERhdGUoKTt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcImdlblwiLHRoaXMud2l0aE1pbGxpcyk7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTR9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fWlmKGEubWlsbGlzPT09dHJ1ZSl7dGhpcy53aXRoTWlsbGlzPXRydWV9fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZSxLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lKTtLSlVSLmFzbjEuREVSU2VxdWVuY2U9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlNlcXVlbmNlLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMFwiO3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3ZhciBjPVwiXCI7Zm9yKHZhciBiPTA7Yjx0aGlzLmFzbjFBcnJheS5sZW5ndGg7YisrKXt2YXIgZD10aGlzLmFzbjFBcnJheVtiXTtjKz1kLmdldEVuY29kZWRIZXgoKX10aGlzLmhWPWM7cmV0dXJuIHRoaXMuaFZ9fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSU2VxdWVuY2UsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZCk7S0pVUi5hc24xLkRFUlNldD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSU2V0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMVwiO3RoaXMuc29ydEZsYWc9dHJ1ZTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPHRoaXMuYXNuMUFycmF5Lmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuYXNuMUFycmF5W2NdO2IucHVzaChkLmdldEVuY29kZWRIZXgoKSl9aWYodGhpcy5zb3J0RmxhZz09dHJ1ZSl7Yi5zb3J0KCl9dGhpcy5oVj1iLmpvaW4oXCJcIik7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5zb3J0ZmxhZyE9XCJ1bmRlZmluZWRcIiYmYS5zb3J0ZmxhZz09ZmFsc2Upe3RoaXMuc29ydEZsYWc9ZmFsc2V9fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlNldCxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0PWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3Quc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCJhMFwiO3RoaXMuaFY9XCJcIjt0aGlzLmlzRXhwbGljaXQ9dHJ1ZTt0aGlzLmFzbjFPYmplY3Q9bnVsbDt0aGlzLnNldEFTTjFPYmplY3Q9ZnVuY3Rpb24oYixjLGQpe3RoaXMuaFQ9Yzt0aGlzLmlzRXhwbGljaXQ9Yjt0aGlzLmFzbjFPYmplY3Q9ZDtpZih0aGlzLmlzRXhwbGljaXQpe3RoaXMuaFY9dGhpcy5hc24xT2JqZWN0LmdldEVuY29kZWRIZXgoKTt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZX1lbHNle3RoaXMuaFY9bnVsbDt0aGlzLmhUTFY9ZC5nZXRFbmNvZGVkSGV4KCk7dGhpcy5oVExWPXRoaXMuaFRMVi5yZXBsYWNlKC9eLi4vLGMpO3RoaXMuaXNNb2RpZmllZD1mYWxzZX19O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYSE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGEudGFnIT1cInVuZGVmaW5lZFwiKXt0aGlzLmhUPWEudGFnfWlmKHR5cGVvZiBhLmV4cGxpY2l0IT1cInVuZGVmaW5lZFwiKXt0aGlzLmlzRXhwbGljaXQ9YS5leHBsaWNpdH1pZih0eXBlb2YgYS5vYmohPVwidW5kZWZpbmVkXCIpe3RoaXMuYXNuMU9iamVjdD1hLm9iajt0aGlzLnNldEFTTjFPYmplY3QodGhpcy5pc0V4cGxpY2l0LHRoaXMuaFQsdGhpcy5hc24xT2JqZWN0KX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0LEtKVVIuYXNuMS5BU04xT2JqZWN0KTtcbnZhciBBU04xSEVYPW5ldyBmdW5jdGlvbigpe307QVNOMUhFWC5nZXRMYmxlbj1mdW5jdGlvbihjLGEpe2lmKGMuc3Vic3RyKGErMiwxKSE9XCI4XCIpe3JldHVybiAxfXZhciBiPXBhcnNlSW50KGMuc3Vic3RyKGErMywxKSk7aWYoYj09MCl7cmV0dXJuIC0xfWlmKDA8YiYmYjwxMCl7cmV0dXJuIGIrMX1yZXR1cm4gLTJ9O0FTTjFIRVguZ2V0TD1mdW5jdGlvbihjLGIpe3ZhciBhPUFTTjFIRVguZ2V0TGJsZW4oYyxiKTtpZihhPDEpe3JldHVyblwiXCJ9cmV0dXJuIGMuc3Vic3RyKGIrMixhKjIpfTtBU04xSEVYLmdldFZibGVuPWZ1bmN0aW9uKGQsYSl7dmFyIGMsYjtjPUFTTjFIRVguZ2V0TChkLGEpO2lmKGM9PVwiXCIpe3JldHVybiAtMX1pZihjLnN1YnN0cigwLDEpPT09XCI4XCIpe2I9bmV3IEJpZ0ludGVnZXIoYy5zdWJzdHIoMiksMTYpfWVsc2V7Yj1uZXcgQmlnSW50ZWdlcihjLDE2KX1yZXR1cm4gYi5pbnRWYWx1ZSgpfTtBU04xSEVYLmdldFZpZHg9ZnVuY3Rpb24oYyxiKXt2YXIgYT1BU04xSEVYLmdldExibGVuKGMsYik7aWYoYTwwKXtyZXR1cm4gYX1yZXR1cm4gYisoYSsxKSoyfTtBU04xSEVYLmdldFY9ZnVuY3Rpb24oZCxhKXt2YXIgYz1BU04xSEVYLmdldFZpZHgoZCxhKTt2YXIgYj1BU04xSEVYLmdldFZibGVuKGQsYSk7cmV0dXJuIGQuc3Vic3RyKGMsYioyKX07QVNOMUhFWC5nZXRUTFY9ZnVuY3Rpb24oYixhKXtyZXR1cm4gYi5zdWJzdHIoYSwyKStBU04xSEVYLmdldEwoYixhKStBU04xSEVYLmdldFYoYixhKX07QVNOMUhFWC5nZXROZXh0U2libGluZ0lkeD1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gYytiKjJ9O0FTTjFIRVguZ2V0Q2hpbGRJZHg9ZnVuY3Rpb24oZSxmKXt2YXIgaj1BU04xSEVYO3ZhciBnPW5ldyBBcnJheSgpO3ZhciBpPWouZ2V0VmlkeChlLGYpO2lmKGUuc3Vic3RyKGYsMik9PVwiMDNcIil7Zy5wdXNoKGkrMil9ZWxzZXtnLnB1c2goaSl9dmFyIGw9ai5nZXRWYmxlbihlLGYpO3ZhciBjPWk7dmFyIGQ9MDt3aGlsZSgxKXt2YXIgYj1qLmdldE5leHRTaWJsaW5nSWR4KGUsYyk7aWYoYj09bnVsbHx8KGItaT49KGwqMikpKXticmVha31pZihkPj0yMDApe2JyZWFrfWcucHVzaChiKTtjPWI7ZCsrfXJldHVybiBnfTtBU04xSEVYLmdldE50aENoaWxkSWR4PWZ1bmN0aW9uKGQsYixlKXt2YXIgYz1BU04xSEVYLmdldENoaWxkSWR4KGQsYik7cmV0dXJuIGNbZV19O0FTTjFIRVguZ2V0SWR4YnlMaXN0PWZ1bmN0aW9uKGUsZCxjLGkpe3ZhciBnPUFTTjFIRVg7dmFyIGYsYjtpZihjLmxlbmd0aD09MCl7aWYoaSE9PXVuZGVmaW5lZCl7aWYoZS5zdWJzdHIoZCwyKSE9PWkpe3Rocm93XCJjaGVja2luZyB0YWcgZG9lc24ndCBtYXRjaDogXCIrZS5zdWJzdHIoZCwyKStcIiE9XCIraX19cmV0dXJuIGR9Zj1jLnNoaWZ0KCk7Yj1nLmdldENoaWxkSWR4KGUsZCk7cmV0dXJuIGcuZ2V0SWR4YnlMaXN0KGUsYltmXSxjLGkpfTtBU04xSEVYLmdldFRMVmJ5TGlzdD1mdW5jdGlvbihkLGMsYixmKXt2YXIgZT1BU04xSEVYO3ZhciBhPWUuZ2V0SWR4YnlMaXN0KGQsYyxiKTtpZihhPT09dW5kZWZpbmVkKXt0aHJvd1wiY2FuJ3QgZmluZCBudGhMaXN0IG9iamVjdFwifWlmKGYhPT11bmRlZmluZWQpe2lmKGQuc3Vic3RyKGEsMikhPWYpe3Rocm93XCJjaGVja2luZyB0YWcgZG9lc24ndCBtYXRjaDogXCIrZC5zdWJzdHIoYSwyKStcIiE9XCIrZn19cmV0dXJuIGUuZ2V0VExWKGQsYSl9O0FTTjFIRVguZ2V0VmJ5TGlzdD1mdW5jdGlvbihlLGMsYixnLGkpe3ZhciBmPUFTTjFIRVg7dmFyIGEsZDthPWYuZ2V0SWR4YnlMaXN0KGUsYyxiLGcpO2lmKGE9PT11bmRlZmluZWQpe3Rocm93XCJjYW4ndCBmaW5kIG50aExpc3Qgb2JqZWN0XCJ9ZD1mLmdldFYoZSxhKTtpZihpPT09dHJ1ZSl7ZD1kLnN1YnN0cigyKX1yZXR1cm4gZH07QVNOMUhFWC5oZXh0b29pZHN0cj1mdW5jdGlvbihlKXt2YXIgaD1mdW5jdGlvbihiLGEpe2lmKGIubGVuZ3RoPj1hKXtyZXR1cm4gYn1yZXR1cm4gbmV3IEFycmF5KGEtYi5sZW5ndGgrMSkuam9pbihcIjBcIikrYn07dmFyIGw9W107dmFyIG89ZS5zdWJzdHIoMCwyKTt2YXIgZj1wYXJzZUludChvLDE2KTtsWzBdPW5ldyBTdHJpbmcoTWF0aC5mbG9vcihmLzQwKSk7bFsxXT1uZXcgU3RyaW5nKGYlNDApO3ZhciBtPWUuc3Vic3RyKDIpO3ZhciBrPVtdO2Zvcih2YXIgZz0wO2c8bS5sZW5ndGgvMjtnKyspe2sucHVzaChwYXJzZUludChtLnN1YnN0cihnKjIsMiksMTYpKX12YXIgaj1bXTt2YXIgZD1cIlwiO2Zvcih2YXIgZz0wO2c8ay5sZW5ndGg7ZysrKXtpZihrW2ddJjEyOCl7ZD1kK2goKGtbZ10mMTI3KS50b1N0cmluZygyKSw3KX1lbHNle2Q9ZCtoKChrW2ddJjEyNykudG9TdHJpbmcoMiksNyk7ai5wdXNoKG5ldyBTdHJpbmcocGFyc2VJbnQoZCwyKSkpO2Q9XCJcIn19dmFyIG49bC5qb2luKFwiLlwiKTtpZihqLmxlbmd0aD4wKXtuPW4rXCIuXCIrai5qb2luKFwiLlwiKX1yZXR1cm4gbn07QVNOMUhFWC5kdW1wPWZ1bmN0aW9uKHQsYyxsLGcpe3ZhciBwPUFTTjFIRVg7dmFyIGo9cC5nZXRWO3ZhciB5PXAuZHVtcDt2YXIgdz1wLmdldENoaWxkSWR4O3ZhciBlPXQ7aWYodCBpbnN0YW5jZW9mIEtKVVIuYXNuMS5BU04xT2JqZWN0KXtlPXQuZ2V0RW5jb2RlZEhleCgpfXZhciBxPWZ1bmN0aW9uKEEsaSl7aWYoQS5sZW5ndGg8PWkqMil7cmV0dXJuIEF9ZWxzZXt2YXIgdj1BLnN1YnN0cigwLGkpK1wiLi4odG90YWwgXCIrQS5sZW5ndGgvMitcImJ5dGVzKS4uXCIrQS5zdWJzdHIoQS5sZW5ndGgtaSxpKTtyZXR1cm4gdn19O2lmKGM9PT11bmRlZmluZWQpe2M9e29tbWl0X2xvbmdfb2N0ZXQ6MzJ9fWlmKGw9PT11bmRlZmluZWQpe2w9MH1pZihnPT09dW5kZWZpbmVkKXtnPVwiXCJ9dmFyIHg9Yy5vbW1pdF9sb25nX29jdGV0O2lmKGUuc3Vic3RyKGwsMik9PVwiMDFcIil7dmFyIGg9aihlLGwpO2lmKGg9PVwiMDBcIil7cmV0dXJuIGcrXCJCT09MRUFOIEZBTFNFXFxuXCJ9ZWxzZXtyZXR1cm4gZytcIkJPT0xFQU4gVFJVRVxcblwifX1pZihlLnN1YnN0cihsLDIpPT1cIjAyXCIpe3ZhciBoPWooZSxsKTtyZXR1cm4gZytcIklOVEVHRVIgXCIrcShoLHgpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIwM1wiKXt2YXIgaD1qKGUsbCk7cmV0dXJuIGcrXCJCSVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIwNFwiKXt2YXIgaD1qKGUsbCk7aWYocC5pc0FTTjFIRVgoaCkpe3ZhciBrPWcrXCJPQ1RFVFNUUklORywgZW5jYXBzdWxhdGVzXFxuXCI7az1rK3koaCxjLDAsZytcIiAgXCIpO3JldHVybiBrfWVsc2V7cmV0dXJuIGcrXCJPQ1RFVFNUUklORyBcIitxKGgseCkrXCJcXG5cIn19aWYoZS5zdWJzdHIobCwyKT09XCIwNVwiKXtyZXR1cm4gZytcIk5VTExcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjA2XCIpe3ZhciBtPWooZSxsKTt2YXIgYT1LSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQobSk7dmFyIG89S0pVUi5hc24xLng1MDkuT0lELm9pZDJuYW1lKGEpO3ZhciBiPWEucmVwbGFjZSgvXFwuL2csXCIgXCIpO2lmKG8hPVwiXCIpe3JldHVybiBnK1wiT2JqZWN0SWRlbnRpZmllciBcIitvK1wiIChcIitiK1wiKVxcblwifWVsc2V7cmV0dXJuIGcrXCJPYmplY3RJZGVudGlmaWVyIChcIitiK1wiKVxcblwifX1pZihlLnN1YnN0cihsLDIpPT1cIjBjXCIpe3JldHVybiBnK1wiVVRGOFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxM1wiKXtyZXR1cm4gZytcIlByaW50YWJsZVN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxNFwiKXtyZXR1cm4gZytcIlRlbGV0ZXhTdHJpbmcgJ1wiK2hleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMTZcIil7cmV0dXJuIGcrXCJJQTVTdHJpbmcgJ1wiK2hleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMTdcIil7cmV0dXJuIGcrXCJVVENUaW1lIFwiK2hleHRvdXRmOChqKGUsbCkpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxOFwiKXtyZXR1cm4gZytcIkdlbmVyYWxpemVkVGltZSBcIitoZXh0b3V0ZjgoaihlLGwpKStcIlxcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMzBcIil7aWYoZS5zdWJzdHIobCw0KT09XCIzMDAwXCIpe3JldHVybiBnK1wiU0VRVUVOQ0Uge31cXG5cIn12YXIgaz1nK1wiU0VRVUVOQ0VcXG5cIjt2YXIgZD13KGUsbCk7dmFyIGY9YztpZigoZC5sZW5ndGg9PTJ8fGQubGVuZ3RoPT0zKSYmZS5zdWJzdHIoZFswXSwyKT09XCIwNlwiJiZlLnN1YnN0cihkW2QubGVuZ3RoLTFdLDIpPT1cIjA0XCIpe3ZhciBvPXAub2lkbmFtZShqKGUsZFswXSkpO3ZhciByPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpO3IueDUwOUV4dE5hbWU9bztmPXJ9Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsZixkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga31pZihlLnN1YnN0cihsLDIpPT1cIjMxXCIpe3ZhciBrPWcrXCJTRVRcXG5cIjt2YXIgZD13KGUsbCk7Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsYyxkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga312YXIgej1wYXJzZUludChlLnN1YnN0cihsLDIpLDE2KTtpZigoeiYxMjgpIT0wKXt2YXIgbj16JjMxO2lmKCh6JjMyKSE9MCl7dmFyIGs9ZytcIltcIituK1wiXVxcblwiO3ZhciBkPXcoZSxsKTtmb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxjLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfWVsc2V7dmFyIGg9aihlLGwpO2lmKGguc3Vic3RyKDAsOCk9PVwiNjg3NDc0NzBcIil7aD1oZXh0b3V0ZjgoaCl9aWYoYy54NTA5RXh0TmFtZT09PVwic3ViamVjdEFsdE5hbWVcIiYmbj09Mil7aD1oZXh0b3V0ZjgoaCl9dmFyIGs9ZytcIltcIituK1wiXSBcIitoK1wiXFxuXCI7cmV0dXJuIGt9fXJldHVybiBnK1wiVU5LTk9XTihcIitlLnN1YnN0cihsLDIpK1wiKSBcIitqKGUsbCkrXCJcXG5cIn07QVNOMUhFWC5pc0FTTjFIRVg9ZnVuY3Rpb24oZSl7dmFyIGQ9QVNOMUhFWDtpZihlLmxlbmd0aCUyPT0xKXtyZXR1cm4gZmFsc2V9dmFyIGM9ZC5nZXRWYmxlbihlLDApO3ZhciBiPWUuc3Vic3RyKDAsMik7dmFyIGY9ZC5nZXRMKGUsMCk7dmFyIGE9ZS5sZW5ndGgtYi5sZW5ndGgtZi5sZW5ndGg7aWYoYT09YyoyKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O0FTTjFIRVgub2lkbmFtZT1mdW5jdGlvbihhKXt2YXIgYz1LSlVSLmFzbjE7aWYoS0pVUi5sYW5nLlN0cmluZy5pc0hleChhKSl7YT1jLkFTTjFVdGlsLm9pZEhleFRvSW50KGEpfXZhciBiPWMueDUwOS5PSUQub2lkMm5hbWUoYSk7aWYoYj09PVwiXCIpe2I9YX1yZXR1cm4gYn07XG52YXIgS0pVUjtpZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIubGFuZz09XCJ1bmRlZmluZWRcInx8IUtKVVIubGFuZyl7S0pVUi5sYW5nPXt9fUtKVVIubGFuZy5TdHJpbmc9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEJhc2U2NHgoKXt9ZnVuY3Rpb24gc3RvQkEoZCl7dmFyIGI9bmV3IEFycmF5KCk7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2JbY109ZC5jaGFyQ29kZUF0KGMpfXJldHVybiBifWZ1bmN0aW9uIEJBdG9zKGIpe3ZhciBkPVwiXCI7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2Q9ZCtTdHJpbmcuZnJvbUNoYXJDb2RlKGJbY10pfXJldHVybiBkfWZ1bmN0aW9uIEJBdG9oZXgoYil7dmFyIGU9XCJcIjtmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGM9YltkXS50b1N0cmluZygxNik7aWYoYy5sZW5ndGg9PTEpe2M9XCIwXCIrY31lPWUrY31yZXR1cm4gZX1mdW5jdGlvbiBzdG9oZXgoYSl7cmV0dXJuIEJBdG9oZXgoc3RvQkEoYSkpfWZ1bmN0aW9uIHN0b2I2NChhKXtyZXR1cm4gaGV4MmI2NChzdG9oZXgoYSkpfWZ1bmN0aW9uIHN0b2I2NHUoYSl7cmV0dXJuIGI2NHRvYjY0dShoZXgyYjY0KHN0b2hleChhKSkpfWZ1bmN0aW9uIGI2NHV0b3MoYSl7cmV0dXJuIEJBdG9zKGI2NHRvQkEoYjY0dXRvYjY0KGEpKSl9ZnVuY3Rpb24gYjY0dG9iNjR1KGEpe2E9YS5yZXBsYWNlKC9cXD0vZyxcIlwiKTthPWEucmVwbGFjZSgvXFwrL2csXCItXCIpO2E9YS5yZXBsYWNlKC9cXC8vZyxcIl9cIik7cmV0dXJuIGF9ZnVuY3Rpb24gYjY0dXRvYjY0KGEpe2lmKGEubGVuZ3RoJTQ9PTIpe2E9YStcIj09XCJ9ZWxzZXtpZihhLmxlbmd0aCU0PT0zKXthPWErXCI9XCJ9fWE9YS5yZXBsYWNlKC8tL2csXCIrXCIpO2E9YS5yZXBsYWNlKC9fL2csXCIvXCIpO3JldHVybiBhfWZ1bmN0aW9uIGhleHRvYjY0dShhKXtpZihhLmxlbmd0aCUyPT0xKXthPVwiMFwiK2F9cmV0dXJuIGI2NHRvYjY0dShoZXgyYjY0KGEpKX1mdW5jdGlvbiBiNjR1dG9oZXgoYSl7cmV0dXJuIGI2NHRvaGV4KGI2NHV0b2I2NChhKSl9dmFyIHV0Zjh0b2I2NHUsYjY0dXRvdXRmODtpZih0eXBlb2YgQnVmZmVyPT09XCJmdW5jdGlvblwiKXt1dGY4dG9iNjR1PWZ1bmN0aW9uKGEpe3JldHVybiBiNjR0b2I2NHUobmV3IEJ1ZmZlcihhLFwidXRmOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSl9O2I2NHV0b3V0Zjg9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCdWZmZXIoYjY0dXRvYjY0KGEpLFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKX19ZWxzZXt1dGY4dG9iNjR1PWZ1bmN0aW9uKGEpe3JldHVybiBoZXh0b2I2NHUodXJpY21wdG9oZXgoZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpKSl9O2I2NHV0b3V0Zjg9ZnVuY3Rpb24oYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChiNjR1dG9oZXgoYSkpKX19ZnVuY3Rpb24gdXRmOHRvYjY0KGEpe3JldHVybiBoZXgyYjY0KHVyaWNtcHRvaGV4KGVuY29kZVVSSUNvbXBvbmVudEFsbChhKSkpfWZ1bmN0aW9uIGI2NHRvdXRmOChhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGhleHRvdXJpY21wKGI2NHRvaGV4KGEpKSl9ZnVuY3Rpb24gdXRmOHRvaGV4KGEpe3JldHVybiB1cmljbXB0b2hleChlbmNvZGVVUklDb21wb25lbnRBbGwoYSkpfWZ1bmN0aW9uIGhleHRvdXRmOChhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGhleHRvdXJpY21wKGEpKX1mdW5jdGlvbiBoZXh0b3JzdHIoYyl7dmFyIGI9XCJcIjtmb3IodmFyIGE9MDthPGMubGVuZ3RoLTE7YSs9Mil7Yis9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjLnN1YnN0cihhLDIpLDE2KSl9cmV0dXJuIGJ9ZnVuY3Rpb24gcnN0cnRvaGV4KGMpe3ZhciBhPVwiXCI7Zm9yKHZhciBiPTA7YjxjLmxlbmd0aDtiKyspe2ErPShcIjBcIitjLmNoYXJDb2RlQXQoYikudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGF9ZnVuY3Rpb24gaGV4dG9iNjQoYSl7cmV0dXJuIGhleDJiNjQoYSl9ZnVuY3Rpb24gaGV4dG9iNjRubChiKXt2YXIgYT1oZXh0b2I2NChiKTt2YXIgYz1hLnJlcGxhY2UoLyguezY0fSkvZyxcIiQxXFxyXFxuXCIpO2M9Yy5yZXBsYWNlKC9cXHJcXG4kLyxcIlwiKTtyZXR1cm4gY31mdW5jdGlvbiBiNjRubHRvaGV4KGIpe3ZhciBhPWIucmVwbGFjZSgvW14wLTlBLVphLXpcXC8rPV0qL2csXCJcIik7dmFyIGM9YjY0dG9oZXgoYSk7cmV0dXJuIGN9ZnVuY3Rpb24gaGV4dG9wZW0oYSxiKXt2YXIgYz1oZXh0b2I2NG5sKGEpO3JldHVyblwiLS0tLS1CRUdJTiBcIitiK1wiLS0tLS1cXHJcXG5cIitjK1wiXFxyXFxuLS0tLS1FTkQgXCIrYitcIi0tLS0tXFxyXFxuXCJ9ZnVuY3Rpb24gcGVtdG9oZXgoYSxiKXtpZihhLmluZGV4T2YoXCItLS0tLUJFR0lOIFwiKT09LTEpe3Rocm93XCJjYW4ndCBmaW5kIFBFTSBoZWFkZXI6IFwiK2J9aWYoYiE9PXVuZGVmaW5lZCl7YT1hLnJlcGxhY2UoXCItLS0tLUJFR0lOIFwiK2IrXCItLS0tLVwiLFwiXCIpO2E9YS5yZXBsYWNlKFwiLS0tLS1FTkQgXCIrYitcIi0tLS0tXCIsXCJcIil9ZWxzZXthPWEucmVwbGFjZSgvLS0tLS1CRUdJTiBbXi1dKy0tLS0tLyxcIlwiKTthPWEucmVwbGFjZSgvLS0tLS1FTkQgW14tXSstLS0tLS8sXCJcIil9cmV0dXJuIGI2NG5sdG9oZXgoYSl9ZnVuY3Rpb24gaGV4dG9BcnJheUJ1ZmZlcihkKXtpZihkLmxlbmd0aCUyIT0wKXt0aHJvd1wiaW5wdXQgaXMgbm90IGV2ZW4gbGVuZ3RoXCJ9aWYoZC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKT09bnVsbCl7dGhyb3dcImlucHV0IGlzIG5vdCBoZXhhZGVjaW1hbFwifXZhciBiPW5ldyBBcnJheUJ1ZmZlcihkLmxlbmd0aC8yKTt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aC8yO2MrKyl7YS5zZXRVaW50OChjLHBhcnNlSW50KGQuc3Vic3RyKGMqMiwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIEFycmF5QnVmZmVydG9oZXgoYil7dmFyIGQ9XCJcIjt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxiLmJ5dGVMZW5ndGg7YysrKXtkKz0oXCIwMFwiK2EuZ2V0VWludDgoYykudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGR9ZnVuY3Rpb24genVsdXRvbXNlYyhuKXt2YXIgbCxqLG0sZSxmLGksYixrO3ZhciBhLGgsZyxjO2M9bi5tYXRjaCgvXihcXGR7Mn18XFxkezR9KShcXGRcXGQpKFxcZFxcZCkoXFxkXFxkKShcXGRcXGQpKFxcZFxcZCkofFxcLlxcZCspWiQvKTtpZihjKXthPWNbMV07bD1wYXJzZUludChhKTtpZihhLmxlbmd0aD09PTIpe2lmKDUwPD1sJiZsPDEwMCl7bD0xOTAwK2x9ZWxzZXtpZigwPD1sJiZsPDUwKXtsPTIwMDArbH19fWo9cGFyc2VJbnQoY1syXSktMTttPXBhcnNlSW50KGNbM10pO2U9cGFyc2VJbnQoY1s0XSk7Zj1wYXJzZUludChjWzVdKTtpPXBhcnNlSW50KGNbNl0pO2I9MDtoPWNbN107aWYoaCE9PVwiXCIpe2c9KGguc3Vic3RyKDEpK1wiMDBcIikuc3Vic3RyKDAsMyk7Yj1wYXJzZUludChnKX1yZXR1cm4gRGF0ZS5VVEMobCxqLG0sZSxmLGksYil9dGhyb3dcInVuc3VwcG9ydGVkIHp1bHUgZm9ybWF0OiBcIitufWZ1bmN0aW9uIHp1bHV0b3NlYyhhKXt2YXIgYj16dWx1dG9tc2VjKGEpO3JldHVybiB+fihiLzEwMDApfWZ1bmN0aW9uIHp1bHV0b2RhdGUoYSl7cmV0dXJuIG5ldyBEYXRlKHp1bHV0b21zZWMoYSkpfWZ1bmN0aW9uIGRhdGV0b3p1bHUoZyxlLGYpe3ZhciBiO3ZhciBhPWcuZ2V0VVRDRnVsbFllYXIoKTtpZihlKXtpZihhPDE5NTB8fDIwNDk8YSl7dGhyb3dcIm5vdCBwcm9wZXIgeWVhciBmb3IgVVRDVGltZTogXCIrYX1iPShcIlwiK2EpLnNsaWNlKC0yKX1lbHNle2I9KFwiMDAwXCIrYSkuc2xpY2UoLTQpfWIrPShcIjBcIisoZy5nZXRVVENNb250aCgpKzEpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDRGF0ZSgpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpO2lmKGYpe3ZhciBjPWcuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7aWYoYyE9PTApe2M9KFwiMDBcIitjKS5zbGljZSgtMyk7Yz1jLnJlcGxhY2UoLzArJC9nLFwiXCIpO2IrPVwiLlwiK2N9fWIrPVwiWlwiO3JldHVybiBifWZ1bmN0aW9uIHVyaWNtcHRvaGV4KGEpe3JldHVybiBhLnJlcGxhY2UoLyUvZyxcIlwiKX1mdW5jdGlvbiBoZXh0b3VyaWNtcChhKXtyZXR1cm4gYS5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIil9ZnVuY3Rpb24gaXB2NnRvaGV4KGcpe3ZhciBiPVwibWFsZm9ybWVkIElQdjYgYWRkcmVzc1wiO2lmKCFnLm1hdGNoKC9eWzAtOUEtRmEtZjpdKyQvKSl7dGhyb3cgYn1nPWcudG9Mb3dlckNhc2UoKTt2YXIgZD1nLnNwbGl0KFwiOlwiKS5sZW5ndGgtMTtpZihkPDIpe3Rocm93IGJ9dmFyIGU9XCI6XCIucmVwZWF0KDctZCsyKTtnPWcucmVwbGFjZShcIjo6XCIsZSk7dmFyIGM9Zy5zcGxpdChcIjpcIik7aWYoYy5sZW5ndGghPTgpe3Rocm93IGJ9Zm9yKHZhciBmPTA7Zjw4O2YrKyl7Y1tmXT0oXCIwMDAwXCIrY1tmXSkuc2xpY2UoLTQpfXJldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gaGV4dG9pcHY2KGUpe2lmKCFlLm1hdGNoKC9eWzAtOUEtRmEtZl17MzJ9JC8pKXt0aHJvd1wibWFsZm9ybWVkIElQdjYgYWRkcmVzcyBvY3RldFwifWU9ZS50b0xvd2VyQ2FzZSgpO3ZhciBiPWUubWF0Y2goLy57MSw0fS9nKTtmb3IodmFyIGQ9MDtkPDg7ZCsrKXtiW2RdPWJbZF0ucmVwbGFjZSgvXjArLyxcIlwiKTtpZihiW2RdPT1cIlwiKXtiW2RdPVwiMFwifX1lPVwiOlwiK2Iuam9pbihcIjpcIikrXCI6XCI7dmFyIGM9ZS5tYXRjaCgvOigwOil7Mix9L2cpO2lmKGM9PT1udWxsKXtyZXR1cm4gZS5zbGljZSgxLC0xKX12YXIgZj1cIlwiO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtpZihjW2RdLmxlbmd0aD5mLmxlbmd0aCl7Zj1jW2RdfX1lPWUucmVwbGFjZShmLFwiOjpcIik7cmV0dXJuIGUuc2xpY2UoMSwtMSl9ZnVuY3Rpb24gaGV4dG9pcChiKXt2YXIgZD1cIm1hbGZvcm1lZCBoZXggdmFsdWVcIjtpZighYi5tYXRjaCgvXihbMC05QS1GYS1mXVswLTlBLUZhLWZdKXsxLH0kLykpe3Rocm93IGR9aWYoYi5sZW5ndGg9PTgpe3ZhciBjO3RyeXtjPXBhcnNlSW50KGIuc3Vic3RyKDAsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDIsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDQsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDYsMiksMTYpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93IGR9fWVsc2V7aWYoYi5sZW5ndGg9PTMyKXtyZXR1cm4gaGV4dG9pcHY2KGIpfWVsc2V7cmV0dXJuIGJ9fX1mdW5jdGlvbiBpcHRvaGV4KGYpe3ZhciBqPVwibWFsZm9ybWVkIElQIGFkZHJlc3NcIjtmPWYudG9Mb3dlckNhc2UoZik7aWYoZi5tYXRjaCgvXlswLTkuXSskLykpe3ZhciBiPWYuc3BsaXQoXCIuXCIpO2lmKGIubGVuZ3RoIT09NCl7dGhyb3cgan12YXIgZz1cIlwiO3RyeXtmb3IodmFyIGU9MDtlPDQ7ZSsrKXt2YXIgaD1wYXJzZUludChiW2VdKTtnKz0oXCIwXCIraC50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gZ31jYXRjaChjKXt0aHJvdyBqfX1lbHNle2lmKGYubWF0Y2goL15bMC05YS1mOl0rJC8pJiZmLmluZGV4T2YoXCI6XCIpIT09LTEpe3JldHVybiBpcHY2dG9oZXgoZil9ZWxzZXt0aHJvdyBqfX19ZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpe3ZhciBkPWVuY29kZVVSSUNvbXBvbmVudChhKTt2YXIgYj1cIlwiO2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGg7YysrKXtpZihkW2NdPT1cIiVcIil7Yj1iK2Quc3Vic3RyKGMsMyk7Yz1jKzJ9ZWxzZXtiPWIrXCIlXCIrc3RvaGV4KGRbY10pfX1yZXR1cm4gYn1mdW5jdGlvbiBuZXdsaW5lX3RvVW5peChhKXthPWEucmVwbGFjZSgvXFxyXFxuL21nLFwiXFxuXCIpO3JldHVybiBhfWZ1bmN0aW9uIG5ld2xpbmVfdG9Eb3MoYSl7YT1hLnJlcGxhY2UoL1xcclxcbi9tZyxcIlxcblwiKTthPWEucmVwbGFjZSgvXFxuL21nLFwiXFxyXFxuXCIpO3JldHVybiBhfUtKVVIubGFuZy5TdHJpbmcuaXNJbnRlZ2VyPWZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL15bMC05XSskLykpe3JldHVybiB0cnVlfWVsc2V7aWYoYS5tYXRjaCgvXi1bMC05XSskLykpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX19O0tKVVIubGFuZy5TdHJpbmcuaXNIZXg9ZnVuY3Rpb24oYSl7aWYoYS5sZW5ndGglMj09MCYmKGEubWF0Y2goL15bMC05YS1mXSskLyl8fGEubWF0Y2goL15bMC05QS1GXSskLykpKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0tKVVIubGFuZy5TdHJpbmcuaXNCYXNlNjQ9ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccysvZyxcIlwiKTtpZihhLm1hdGNoKC9eWzAtOUEtWmEteitcXC9dKz17MCwzfSQvKSYmYS5sZW5ndGglND09MCl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtLSlVSLmxhbmcuU3RyaW5nLmlzQmFzZTY0VVJMPWZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL1srLz1dLykpe3JldHVybiBmYWxzZX1hPWI2NHV0b2I2NChhKTtyZXR1cm4gS0pVUi5sYW5nLlN0cmluZy5pc0Jhc2U2NChhKX07S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXJBcnJheT1mdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzKy9nLFwiXCIpO2lmKGEubWF0Y2goL15cXFtbMC05LF0rXFxdJC8pKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O2Z1bmN0aW9uIGhleHRvcG9zaGV4KGEpe2lmKGEubGVuZ3RoJTI9PTEpe3JldHVyblwiMFwiK2F9aWYoYS5zdWJzdHIoMCwxKT5cIjdcIil7cmV0dXJuXCIwMFwiK2F9cmV0dXJuIGF9ZnVuY3Rpb24gaW50YXJ5c3RydG9oZXgoYil7Yj1iLnJlcGxhY2UoL15cXHMqXFxbXFxzKi8sXCJcIik7Yj1iLnJlcGxhY2UoL1xccypcXF1cXHMqJC8sXCJcIik7Yj1iLnJlcGxhY2UoL1xccyovZyxcIlwiKTt0cnl7dmFyIGM9Yi5zcGxpdCgvLC8pLm1hcChmdW5jdGlvbihnLGUsaCl7dmFyIGY9cGFyc2VJbnQoZyk7aWYoZjwwfHwyNTU8Zil7dGhyb3dcImludGVnZXIgbm90IGluIHJhbmdlIDAtMjU1XCJ9dmFyIGQ9KFwiMDBcIitmLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO3JldHVybiBkfSkuam9pbihcIlwiKTtyZXR1cm4gY31jYXRjaChhKXt0aHJvd1wibWFsZm9ybWVkIGludGVnZXIgYXJyYXkgc3RyaW5nOiBcIithfX12YXIgc3RyZGlmZmlkeD1mdW5jdGlvbihjLGEpe3ZhciBkPWMubGVuZ3RoO2lmKGMubGVuZ3RoPmEubGVuZ3RoKXtkPWEubGVuZ3RofWZvcih2YXIgYj0wO2I8ZDtiKyspe2lmKGMuY2hhckNvZGVBdChiKSE9YS5jaGFyQ29kZUF0KGIpKXtyZXR1cm4gYn19aWYoYy5sZW5ndGghPWEubGVuZ3RoKXtyZXR1cm4gZH1yZXR1cm4gLTF9O1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmNyeXB0bz09XCJ1bmRlZmluZWRcInx8IUtKVVIuY3J5cHRvKXtLSlVSLmNyeXB0bz17fX1LSlVSLmNyeXB0by5VdGlsPW5ldyBmdW5jdGlvbigpe3RoaXMuRElHRVNUSU5GT0hFQUQ9e3NoYTE6XCIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTRcIixzaGEyMjQ6XCIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxY1wiLHNoYTI1NjpcIjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwXCIsc2hhMzg0OlwiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzBcIixzaGE1MTI6XCIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MFwiLG1kMjpcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDIwNTAwMDQxMFwiLG1kNTpcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMFwiLHJpcGVtZDE2MDpcIjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNFwiLH07dGhpcy5ERUZBVUxUUFJPVklERVI9e21kNTpcImNyeXB0b2pzXCIsc2hhMTpcImNyeXB0b2pzXCIsc2hhMjI0OlwiY3J5cHRvanNcIixzaGEyNTY6XCJjcnlwdG9qc1wiLHNoYTM4NDpcImNyeXB0b2pzXCIsc2hhNTEyOlwiY3J5cHRvanNcIixyaXBlbWQxNjA6XCJjcnlwdG9qc1wiLGhtYWNtZDU6XCJjcnlwdG9qc1wiLGhtYWNzaGExOlwiY3J5cHRvanNcIixobWFjc2hhMjI0OlwiY3J5cHRvanNcIixobWFjc2hhMjU2OlwiY3J5cHRvanNcIixobWFjc2hhMzg0OlwiY3J5cHRvanNcIixobWFjc2hhNTEyOlwiY3J5cHRvanNcIixobWFjcmlwZW1kMTYwOlwiY3J5cHRvanNcIixNRDV3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjU2d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMzg0d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsUklQRU1EMTYwd2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsTUQ1d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMzg0d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEE1MTJ3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLE1ENXdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMzg0d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTUxMndpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixSSVBFTUQxNjB3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsfTt0aGlzLkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUU9e21kNTpDcnlwdG9KUy5hbGdvLk1ENSxzaGExOkNyeXB0b0pTLmFsZ28uU0hBMSxzaGEyMjQ6Q3J5cHRvSlMuYWxnby5TSEEyMjQsc2hhMjU2OkNyeXB0b0pTLmFsZ28uU0hBMjU2LHNoYTM4NDpDcnlwdG9KUy5hbGdvLlNIQTM4NCxzaGE1MTI6Q3J5cHRvSlMuYWxnby5TSEE1MTIscmlwZW1kMTYwOkNyeXB0b0pTLmFsZ28uUklQRU1EMTYwfTt0aGlzLmdldERpZ2VzdEluZm9IZXg9ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgdGhpcy5ESUdFU1RJTkZPSEVBRFtiXT09XCJ1bmRlZmluZWRcIil7dGhyb3dcImFsZyBub3Qgc3VwcG9ydGVkIGluIFV0aWwuRElHRVNUSU5GT0hFQUQ6IFwiK2J9cmV0dXJuIHRoaXMuRElHRVNUSU5GT0hFQURbYl0rYX07dGhpcy5nZXRQYWRkZWREaWdlc3RJbmZvSGV4PWZ1bmN0aW9uKGgsYSxqKXt2YXIgYz10aGlzLmdldERpZ2VzdEluZm9IZXgoaCxhKTt2YXIgZD1qLzQ7aWYoYy5sZW5ndGgrMjI+ZCl7dGhyb3dcImtleSBpcyB0b28gc2hvcnQgZm9yIFNpZ0FsZzoga2V5bGVuPVwiK2orXCIsXCIrYX12YXIgYj1cIjAwMDFcIjt2YXIgaz1cIjAwXCIrYzt2YXIgZz1cIlwiO3ZhciBsPWQtYi5sZW5ndGgtay5sZW5ndGg7Zm9yKHZhciBmPTA7ZjxsO2YrPTIpe2crPVwiZmZcIn12YXIgZT1iK2craztyZXR1cm4gZX07dGhpcy5oYXNoU3RyaW5nPWZ1bmN0aW9uKGEsYyl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpjfSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLmhhc2hIZXg9ZnVuY3Rpb24oYixjKXt2YXIgYT1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOmN9KTtyZXR1cm4gYS5kaWdlc3RIZXgoYil9O3RoaXMuc2hhMT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhMVwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLnNoYTI1Nj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhMjU2XCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuc2hhMjU2SGV4PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGEyNTZcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdEhleChhKX07dGhpcy5zaGE1MTI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInNoYTUxMlwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLnNoYTUxMkhleD1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhNTEyXCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RIZXgoYSl9fTtLSlVSLmNyeXB0by5VdGlsLm1kNT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwibWQ1XCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O0tKVVIuY3J5cHRvLlV0aWwucmlwZW1kMTYwPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJyaXBlbWQxNjBcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU49bmV3IFNlY3VyZVJhbmRvbSgpO0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYnl0ZXM9ZnVuY3Rpb24oYil7dmFyIGE9bmV3IEFycmF5KGIpO0tKVVIuY3J5cHRvLlV0aWwuU0VDVVJFUkFORE9NR0VOLm5leHRCeXRlcyhhKTtyZXR1cm4gQkF0b2hleChhKX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYnl0ZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKEtKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYnl0ZXMoYSksMTYpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJpdHM9ZnVuY3Rpb24oZCl7dmFyIGM9ZCU4O3ZhciBhPShkLWMpLzg7dmFyIGI9bmV3IEFycmF5KGErMSk7S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU4ubmV4dEJ5dGVzKGIpO2JbMF09KCgoMjU1PDxjKSYyNTUpXjI1NSkmYlswXTtyZXR1cm4gQkF0b2hleChiKX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoS0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5iaXRzKGEpLDE2KX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyWmVyb1RvTWF4PWZ1bmN0aW9uKGIpe3ZhciBhPWIuYml0TGVuZ3RoKCk7d2hpbGUoMSl7dmFyIGM9S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyhhKTtpZihiLmNvbXBhcmVUbyhjKSE9LTEpe3JldHVybiBjfX19O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tQmlnSW50ZWdlck1pblRvTWF4PWZ1bmN0aW9uKGUsYil7dmFyIGM9ZS5jb21wYXJlVG8oYik7aWYoYz09MSl7dGhyb3dcImJpTWluIGlzIGdyZWF0ZXIgdGhhbiBiaU1heFwifWlmKGM9PTApe3JldHVybiBlfXZhciBhPWIuc3VidHJhY3QoZSk7dmFyIGQ9S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyWmVyb1RvTWF4KGEpO3JldHVybiBkLmFkZChlKX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdD1mdW5jdGlvbihjKXt2YXIgYj1udWxsO3ZhciBhPW51bGw7dmFyIGQ9bnVsbDt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKGcsZil7Zz1LSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LmdldENhbm9uaWNhbEFsZ05hbWUoZyk7aWYoZyE9PW51bGwmJmY9PT11bmRlZmluZWQpe2Y9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbZ119aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKGcpIT0tMSYmZj09XCJjcnlwdG9qc1wiKXt0cnl7dGhpcy5tZD1LSlVSLmNyeXB0by5VdGlsLkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUVbZ10uY3JlYXRlKCl9Y2F0Y2goZSl7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIGhhc2ggYWxnIHNldCBmYWlsIGFsZz1cIitnK1wiL1wiK2V9dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oaCl7dGhpcy5tZC51cGRhdGUoaCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGgpe3ZhciBpPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoaCk7dGhpcy5tZC51cGRhdGUoaSl9O3RoaXMuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5tZC5maW5hbGl6ZSgpO3JldHVybiBoLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpfTt0aGlzLmRpZ2VzdFN0cmluZz1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZVN0cmluZyhoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oaCl7dGhpcy51cGRhdGVIZXgoaCk7cmV0dXJuIHRoaXMuZGlnZXN0KCl9fWlmKFwiOnNoYTI1NjpcIi5pbmRleE9mKGcpIT0tMSYmZj09XCJzamNsXCIpe3RyeXt0aGlzLm1kPW5ldyBzamNsLmhhc2guc2hhMjU2KCl9Y2F0Y2goZSl7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIGhhc2ggYWxnIHNldCBmYWlsIGFsZz1cIitnK1wiL1wiK2V9dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oaCl7dGhpcy5tZC51cGRhdGUoaCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGkpe3ZhciBoPXNqY2wuY29kZWMuaGV4LnRvQml0cyhpKTt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLm1kLmZpbmFsaXplKCk7cmV0dXJuIHNqY2wuY29kZWMuaGV4LmZyb21CaXRzKGgpfTt0aGlzLmRpZ2VzdFN0cmluZz1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZVN0cmluZyhoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oaCl7dGhpcy51cGRhdGVIZXgoaCk7cmV0dXJuIHRoaXMuZGlnZXN0KCl9fX07dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oZSl7dGhyb3dcInVwZGF0ZVN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihlKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3dcImRpZ2VzdCgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTt0aGlzLmRpZ2VzdFN0cmluZz1mdW5jdGlvbihlKXt0aHJvd1wiZGlnZXN0U3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0SGV4PWZ1bmN0aW9uKGUpe3Rocm93XCJkaWdlc3RIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07aWYoYyE9PXVuZGVmaW5lZCl7aWYoYy5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1jLmFsZztpZihjLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX10aGlzLnNldEFsZ0FuZFByb3ZpZGVyKHRoaXMuYWxnTmFtZSx0aGlzLnByb3ZOYW1lKX19fTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LmdldENhbm9uaWNhbEFsZ05hbWU9ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PT1cInN0cmluZ1wiKXthPWEudG9Mb3dlckNhc2UoKTthPWEucmVwbGFjZSgvLS8sXCJcIil9cmV0dXJuIGF9O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0SGFzaExlbmd0aD1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0O3ZhciBhPWIuZ2V0Q2Fub25pY2FsQWxnTmFtZShjKTtpZihiLkhBU0hMRU5HVEhbYV09PT11bmRlZmluZWQpe3Rocm93XCJub3Qgc3VwcG9ydGVkIGFsZ29yaXRobTogXCIrY31yZXR1cm4gYi5IQVNITEVOR1RIW2FdfTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LkhBU0hMRU5HVEg9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxyaXBlbWQxNjA6MjB9O0tKVVIuY3J5cHRvLk1hYz1mdW5jdGlvbihkKXt2YXIgZj1udWxsO3ZhciBjPW51bGw7dmFyIGE9bnVsbDt2YXIgZT1udWxsO3ZhciBiPW51bGw7dGhpcy5zZXRBbGdBbmRQcm92aWRlcj1mdW5jdGlvbihrLGkpe2s9ay50b0xvd2VyQ2FzZSgpO2lmKGs9PW51bGwpe2s9XCJobWFjc2hhMVwifWs9ay50b0xvd2VyQ2FzZSgpO2lmKGsuc3Vic3RyKDAsNCkhPVwiaG1hY1wiKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgdW5zdXBwb3J0ZWQgSE1BQyBhbGc6IFwiK2t9aWYoaT09PXVuZGVmaW5lZCl7aT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUltrXX10aGlzLmFsZ1Byb3Y9aytcIi9cIitpO3ZhciBnPWsuc3Vic3RyKDQpO2lmKFwiOm1kNTpzaGExOnNoYTIyNDpzaGEyNTY6c2hhMzg0OnNoYTUxMjpyaXBlbWQxNjA6XCIuaW5kZXhPZihnKSE9LTEmJmk9PVwiY3J5cHRvanNcIil7dHJ5e3ZhciBqPUtKVVIuY3J5cHRvLlV0aWwuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRVtnXTt0aGlzLm1hYz1DcnlwdG9KUy5hbGdvLkhNQUMuY3JlYXRlKGosdGhpcy5wYXNzKX1jYXRjaChoKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgaGFzaEFsZz1cIitnK1wiL1wiK2h9dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24obCl7dGhpcy5tYWMudXBkYXRlKGwpfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihsKXt2YXIgbT1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGwpO3RoaXMubWFjLnVwZGF0ZShtKX07dGhpcy5kb0ZpbmFsPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5tYWMuZmluYWxpemUoKTtyZXR1cm4gbC50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KX07dGhpcy5kb0ZpbmFsU3RyaW5nPWZ1bmN0aW9uKGwpe3RoaXMudXBkYXRlU3RyaW5nKGwpO3JldHVybiB0aGlzLmRvRmluYWwoKX07dGhpcy5kb0ZpbmFsSGV4PWZ1bmN0aW9uKGwpe3RoaXMudXBkYXRlSGV4KGwpO3JldHVybiB0aGlzLmRvRmluYWwoKX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihnKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihnKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWw9ZnVuY3Rpb24oKXt0aHJvd1wiZGlnZXN0KCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWxTdHJpbmc9ZnVuY3Rpb24oZyl7dGhyb3dcImRpZ2VzdFN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5kb0ZpbmFsSGV4PWZ1bmN0aW9uKGcpe3Rocm93XCJkaWdlc3RIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuc2V0UGFzc3dvcmQ9ZnVuY3Rpb24oaCl7aWYodHlwZW9mIGg9PVwic3RyaW5nXCIpe3ZhciBnPWg7aWYoaC5sZW5ndGglMj09MXx8IWgubWF0Y2goL15bMC05QS1GYS1mXSskLykpe2c9cnN0cnRvaGV4KGgpfXRoaXMucGFzcz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGcpO3JldHVybn1pZih0eXBlb2YgaCE9XCJvYmplY3RcIil7dGhyb3dcIktKVVIuY3J5cHRvLk1hYyB1bnN1cHBvcnRlZCBwYXNzd29yZCB0eXBlOiBcIitofXZhciBnPW51bGw7aWYoaC5oZXghPT11bmRlZmluZWQpe2lmKGguaGV4Lmxlbmd0aCUyIT0wfHwhaC5oZXgubWF0Y2goL15bMC05QS1GYS1mXSskLykpe3Rocm93XCJNYWM6IHdyb25nIGhleCBwYXNzd29yZDogXCIraC5oZXh9Zz1oLmhleH1pZihoLnV0ZjghPT11bmRlZmluZWQpe2c9dXRmOHRvaGV4KGgudXRmOCl9aWYoaC5yc3RyIT09dW5kZWZpbmVkKXtnPXJzdHJ0b2hleChoLnJzdHIpfWlmKGguYjY0IT09dW5kZWZpbmVkKXtnPWI2NHRvaGV4KGguYjY0KX1pZihoLmI2NHUhPT11bmRlZmluZWQpe2c9YjY0dXRvaGV4KGguYjY0dSl9aWYoZz09bnVsbCl7dGhyb3dcIktKVVIuY3J5cHRvLk1hYyB1bnN1cHBvcnRlZCBwYXNzd29yZCB0eXBlOiBcIitofXRoaXMucGFzcz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGcpfTtpZihkIT09dW5kZWZpbmVkKXtpZihkLnBhc3MhPT11bmRlZmluZWQpe3RoaXMuc2V0UGFzc3dvcmQoZC5wYXNzKX1pZihkLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPWQuYWxnO2lmKGQucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfXRoaXMuc2V0QWxnQW5kUHJvdmlkZXIodGhpcy5hbGdOYW1lLHRoaXMucHJvdk5hbWUpfX19O0tKVVIuY3J5cHRvLlNpZ25hdHVyZT1mdW5jdGlvbihvKXt2YXIgcT1udWxsO3ZhciBuPW51bGw7dmFyIHI9bnVsbDt2YXIgYz1udWxsO3ZhciBsPW51bGw7dmFyIGQ9bnVsbDt2YXIgaz1udWxsO3ZhciBoPW51bGw7dmFyIHA9bnVsbDt2YXIgZT1udWxsO3ZhciBiPS0xO3ZhciBnPW51bGw7dmFyIGo9bnVsbDt2YXIgYT1udWxsO3ZhciBpPW51bGw7dmFyIGY9bnVsbDt0aGlzLl9zZXRBbGdOYW1lcz1mdW5jdGlvbigpe3ZhciBzPXRoaXMuYWxnTmFtZS5tYXRjaCgvXiguKyl3aXRoKC4rKSQvKTtpZihzKXt0aGlzLm1kQWxnTmFtZT1zWzFdLnRvTG93ZXJDYXNlKCk7dGhpcy5wdWJrZXlBbGdOYW1lPXNbMl0udG9Mb3dlckNhc2UoKX19O3RoaXMuX3plcm9QYWRkaW5nT2ZTaWduYXR1cmU9ZnVuY3Rpb24oeCx3KXt2YXIgdj1cIlwiO3ZhciB0PXcvNC14Lmxlbmd0aDtmb3IodmFyIHU9MDt1PHQ7dSsrKXt2PXYrXCIwXCJ9cmV0dXJuIHYreH07dGhpcy5zZXRBbGdBbmRQcm92aWRlcj1mdW5jdGlvbih1LHQpe3RoaXMuX3NldEFsZ05hbWVzKCk7aWYodCE9XCJjcnlwdG9qcy9qc3JzYVwiKXt0aHJvd1wicHJvdmlkZXIgbm90IHN1cHBvcnRlZDogXCIrdH1pZihcIjptZDU6c2hhMTpzaGEyMjQ6c2hhMjU2OnNoYTM4NDpzaGE1MTI6cmlwZW1kMTYwOlwiLmluZGV4T2YodGhpcy5tZEFsZ05hbWUpIT0tMSl7dHJ5e3RoaXMubWQ9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzp0aGlzLm1kQWxnTmFtZX0pfWNhdGNoKHMpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBhbGc9XCIrdGhpcy5tZEFsZ05hbWUrXCIvXCIrc310aGlzLmluaXQ9ZnVuY3Rpb24odyx4KXt2YXIgeT1udWxsO3RyeXtpZih4PT09dW5kZWZpbmVkKXt5PUtFWVVUSUwuZ2V0S2V5KHcpfWVsc2V7eT1LRVlVVElMLmdldEtleSh3LHgpfX1jYXRjaCh2KXt0aHJvd1wiaW5pdCBmYWlsZWQ6XCIrdn1pZih5LmlzUHJpdmF0ZT09PXRydWUpe3RoaXMucHJ2S2V5PXk7dGhpcy5zdGF0ZT1cIlNJR05cIn1lbHNle2lmKHkuaXNQdWJsaWM9PT10cnVlKXt0aGlzLnB1YktleT15O3RoaXMuc3RhdGU9XCJWRVJJRllcIn1lbHNle3Rocm93XCJpbml0IGZhaWxlZC46XCIreX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbih2KXt0aGlzLm1kLnVwZGF0ZVN0cmluZyh2KX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24odil7dGhpcy5tZC51cGRhdGVIZXgodil9O3RoaXMuc2lnbj1mdW5jdGlvbigpe3RoaXMuc0hhc2hIZXg9dGhpcy5tZC5kaWdlc3QoKTtpZih0eXBlb2YgdGhpcy5lY3BydmhleCE9XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMuZWNjdXJ2ZW5hbWUhPVwidW5kZWZpbmVkXCIpe3ZhciB2PW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6dGhpcy5lY2N1cnZlbmFtZX0pO3RoaXMuaFNpZ249di5zaWduSGV4KHRoaXMuc0hhc2hIZXgsdGhpcy5lY3BydmhleCl9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaFBTUyh0aGlzLnNIYXNoSGV4LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdGhpcy5tZEFsZ05hbWUpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSl7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZzogXCIrdGhpcy5wdWJrZXlBbGdOYW1lfX19fX1yZXR1cm4gdGhpcy5oU2lnbn07dGhpcy5zaWduU3RyaW5nPWZ1bmN0aW9uKHYpe3RoaXMudXBkYXRlU3RyaW5nKHYpO3JldHVybiB0aGlzLnNpZ24oKX07dGhpcy5zaWduSGV4PWZ1bmN0aW9uKHYpe3RoaXMudXBkYXRlSGV4KHYpO3JldHVybiB0aGlzLnNpZ24oKX07dGhpcy52ZXJpZnk9ZnVuY3Rpb24odil7dGhpcy5zSGFzaEhleD10aGlzLm1kLmRpZ2VzdCgpO2lmKHR5cGVvZiB0aGlzLmVjcHViaGV4IT1cInVuZGVmaW5lZFwiJiZ0eXBlb2YgdGhpcy5lY2N1cnZlbmFtZSE9XCJ1bmRlZmluZWRcIil7dmFyIHc9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTp0aGlzLmVjY3VydmVuYW1lfSk7cmV0dXJuIHcudmVyaWZ5SGV4KHRoaXMuc0hhc2hIZXgsdix0aGlzLmVjcHViaGV4KX1lbHNle2lmKHRoaXMucHViS2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYWFuZG1nZjFcIil7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUyh0aGlzLnNIYXNoSGV4LHYsdGhpcy5tZEFsZ05hbWUsdGhpcy5wc3NTYWx0TGVuKX1lbHNle2lmKHRoaXMucHViS2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYVwiKXtyZXR1cm4gdGhpcy5wdWJLZXkudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdil9ZWxzZXtpZihLSlVSLmNyeXB0by5FQ0RTQSE9PXVuZGVmaW5lZCYmdGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSl7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7aWYoS0pVUi5jcnlwdG8uRFNBIT09dW5kZWZpbmVkJiZ0aGlzLnB1YktleSBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkRTQSl7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7dGhyb3dcIlNpZ25hdHVyZTogdW5zdXBwb3J0ZWQgcHVibGljIGtleSBhbGc6IFwiK3RoaXMucHVia2V5QWxnTmFtZX19fX19fX19O3RoaXMuaW5pdD1mdW5jdGlvbihzLHQpe3Rocm93XCJpbml0KGtleSwgcGFzcykgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aHJvd1wic2lnbigpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5zaWduU3RyaW5nPWZ1bmN0aW9uKHMpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuc2lnbkhleD1mdW5jdGlvbihzKXt0aHJvd1wiZGlnZXN0SGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnZlcmlmeT1mdW5jdGlvbihzKXt0aHJvd1widmVyaWZ5KGhTaWdWYWwpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5pbml0UGFyYW1zPW87aWYobyE9PXVuZGVmaW5lZCl7aWYoby5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1vLmFsZztpZihvLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX1lbHNle3RoaXMucHJvdk5hbWU9by5wcm92fXRoaXMuYWxnUHJvdk5hbWU9dGhpcy5hbGdOYW1lK1wiOlwiK3RoaXMucHJvdk5hbWU7dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSk7dGhpcy5fc2V0QWxnTmFtZXMoKX1pZihvLnBzc3NhbHRsZW4hPT11bmRlZmluZWQpe3RoaXMucHNzU2FsdExlbj1vLnBzc3NhbHRsZW59aWYoby5wcnZrZXlwZW0hPT11bmRlZmluZWQpe2lmKG8ucHJ2a2V5cGFzIT09dW5kZWZpbmVkKXt0aHJvd1wiYm90aCBwcnZrZXlwZW0gYW5kIHBydmtleXBhcyBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWRcIn1lbHNle3RyeXt2YXIgcT1LRVlVVElMLmdldEtleShvLnBydmtleXBlbSk7dGhpcy5pbml0KHEpfWNhdGNoKG0pe3Rocm93XCJmYXRhbCBlcnJvciB0byBsb2FkIHBlbSBwcml2YXRlIGtleTogXCIrbX19fX19O0tKVVIuY3J5cHRvLkNpcGhlcj1mdW5jdGlvbihhKXt9O0tKVVIuY3J5cHRvLkNpcGhlci5lbmNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHVibGljKXt2YXIgYz1LSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lKGYsZCk7aWYoYz09PVwiUlNBXCIpe3JldHVybiBmLmVuY3J5cHQoZSl9aWYoYz09PVwiUlNBT0FFUFwiKXtyZXR1cm4gZi5lbmNyeXB0T0FFUChlLFwic2hhMVwiKX12YXIgYj1jLm1hdGNoKC9eUlNBT0FFUChcXGQrKSQvKTtpZihiIT09bnVsbCl7cmV0dXJuIGYuZW5jcnlwdE9BRVAoZSxcInNoYVwiK2JbMV0pfXRocm93XCJDaXBoZXIuZW5jcnlwdDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBSU0FLZXk6IFwiK2R9ZWxzZXt0aHJvd1wiQ2lwaGVyLmVuY3J5cHQ6IHVuc3VwcG9ydGVkIGtleSBvciBhbGdvcml0aG1cIn19O0tKVVIuY3J5cHRvLkNpcGhlci5kZWNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHJpdmF0ZSl7dmFyIGM9S0pVUi5jcnlwdG8uQ2lwaGVyLmdldEFsZ0J5S2V5QW5kTmFtZShmLGQpO2lmKGM9PT1cIlJTQVwiKXtyZXR1cm4gZi5kZWNyeXB0KGUpfWlmKGM9PT1cIlJTQU9BRVBcIil7cmV0dXJuIGYuZGVjcnlwdE9BRVAoZSxcInNoYTFcIil9dmFyIGI9Yy5tYXRjaCgvXlJTQU9BRVAoXFxkKykkLyk7aWYoYiE9PW51bGwpe3JldHVybiBmLmRlY3J5cHRPQUVQKGUsXCJzaGFcIitiWzFdKX10aHJvd1wiQ2lwaGVyLmRlY3J5cHQ6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgUlNBS2V5OiBcIitkfWVsc2V7dGhyb3dcIkNpcGhlci5kZWNyeXB0OiB1bnN1cHBvcnRlZCBrZXkgb3IgYWxnb3JpdGhtXCJ9fTtLSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lPWZ1bmN0aW9uKGIsYSl7aWYoYiBpbnN0YW5jZW9mIFJTQUtleSl7aWYoXCI6UlNBOlJTQU9BRVA6UlNBT0FFUDIyNDpSU0FPQUVQMjU2OlJTQU9BRVAzODQ6UlNBT0FFUDUxMjpcIi5pbmRleE9mKGEpIT0tMSl7cmV0dXJuIGF9aWYoYT09PW51bGx8fGE9PT11bmRlZmluZWQpe3JldHVyblwiUlNBXCJ9dGhyb3dcImdldEFsZ0J5S2V5QW5kTmFtZTogbm90IHN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZSBmb3IgUlNBS2V5OiBcIithfXRocm93XCJnZXRBbGdCeUtleUFuZE5hbWU6IG5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWU6IFwiK2F9O0tKVVIuY3J5cHRvLk9JRD1uZXcgZnVuY3Rpb24oKXt0aGlzLm9pZGhleDJuYW1lPXtcIjJhODY0ODg2ZjcwZDAxMDEwMVwiOlwicnNhRW5jcnlwdGlvblwiLFwiMmE4NjQ4Y2UzZDAyMDFcIjpcImVjUHVibGljS2V5XCIsXCIyYTg2NDhjZTM4MDQwMVwiOlwiZHNhXCIsXCIyYTg2NDhjZTNkMDMwMTA3XCI6XCJzZWNwMjU2cjFcIixcIjJiODEwNDAwMWZcIjpcInNlY3AxOTJrMVwiLFwiMmI4MTA0MDAyMVwiOlwic2VjcDIyNHIxXCIsXCIyYjgxMDQwMDBhXCI6XCJzZWNwMjU2azFcIixcIjJiODEwNDAwMjNcIjpcInNlY3A1MjFyMVwiLFwiMmI4MTA0MDAyMlwiOlwic2VjcDM4NHIxXCIsXCIyYTg2NDhjZTM4MDQwM1wiOlwiU0hBMXdpdGhEU0FcIixcIjYwODY0ODAxNjUwMzA0MDMwMVwiOlwiU0hBMjI0d2l0aERTQVwiLFwiNjA4NjQ4MDE2NTAzMDQwMzAyXCI6XCJTSEEyNTZ3aXRoRFNBXCIsfX07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuY3J5cHRvPT1cInVuZGVmaW5lZFwifHwhS0pVUi5jcnlwdG8pe0tKVVIuY3J5cHRvPXt9fUtKVVIuY3J5cHRvLkVDRFNBPWZ1bmN0aW9uKGgpe3ZhciBlPVwic2VjcDI1NnIxXCI7dmFyIGc9bnVsbDt2YXIgYj1udWxsO3ZhciBmPW51bGw7dmFyIGE9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBkPW51bGw7dGhpcy50eXBlPVwiRUNcIjt0aGlzLmlzUHJpdmF0ZT1mYWxzZTt0aGlzLmlzUHVibGljPWZhbHNlO2Z1bmN0aW9uIGMocyxvLHIsbil7dmFyIGo9TWF0aC5tYXgoby5iaXRMZW5ndGgoKSxuLmJpdExlbmd0aCgpKTt2YXIgdD1zLmFkZDJEKHIpO3ZhciBxPXMuY3VydmUuZ2V0SW5maW5pdHkoKTtmb3IodmFyIHA9ai0xO3A+PTA7LS1wKXtxPXEudHdpY2UyRCgpO3Euej1CaWdJbnRlZ2VyLk9ORTtpZihvLnRlc3RCaXQocCkpe2lmKG4udGVzdEJpdChwKSl7cT1xLmFkZDJEKHQpfWVsc2V7cT1xLmFkZDJEKHMpfX1lbHNle2lmKG4udGVzdEJpdChwKSl7cT1xLmFkZDJEKHIpfX19cmV0dXJuIHF9dGhpcy5nZXRCaWdSYW5kb209ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGkuYml0TGVuZ3RoKCksYSkubW9kKGkuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKS5hZGQoQmlnSW50ZWdlci5PTkUpfTt0aGlzLnNldE5hbWVkQ3VydmU9ZnVuY3Rpb24oaSl7dGhpcy5lY3BhcmFtcz1LSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLmdldEJ5TmFtZShpKTt0aGlzLnBydktleUhleD1udWxsO3RoaXMucHViS2V5SGV4PW51bGw7dGhpcy5jdXJ2ZU5hbWU9aX07dGhpcy5zZXRQcml2YXRlS2V5SGV4PWZ1bmN0aW9uKGkpe3RoaXMuaXNQcml2YXRlPXRydWU7dGhpcy5wcnZLZXlIZXg9aX07dGhpcy5zZXRQdWJsaWNLZXlIZXg9ZnVuY3Rpb24oaSl7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMucHViS2V5SGV4PWl9O3RoaXMuZ2V0UHVibGljS2V5WFlIZXg9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLnB1YktleUhleDtpZihrLnN1YnN0cigwLDIpIT09XCIwNFwiKXt0aHJvd1widGhpcyBtZXRob2Qgc3VwcG9ydHMgdW5jb21wcmVzc2VkIGZvcm1hdCgwNCkgb25seVwifXZhciBqPXRoaXMuZWNwYXJhbXMua2V5bGVuLzQ7aWYoay5sZW5ndGghPT0yK2oqMil7dGhyb3dcIm1hbGZvcm1lZCBwdWJsaWMga2V5IGhleCBsZW5ndGhcIn12YXIgaT17fTtpLng9ay5zdWJzdHIoMixqKTtpLnk9ay5zdWJzdHIoMitqKTtyZXR1cm4gaX07dGhpcy5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5jdXJ2ZU5hbWU7aWYoaT09PVwic2VjcDI1NnIxXCJ8fGk9PT1cIk5JU1QgUC0yNTZcInx8aT09PVwiUC0yNTZcInx8aT09PVwicHJpbWUyNTZ2MVwiKXtyZXR1cm5cIlAtMjU2XCJ9aWYoaT09PVwic2VjcDM4NHIxXCJ8fGk9PT1cIk5JU1QgUC0zODRcInx8aT09PVwiUC0zODRcIil7cmV0dXJuXCJQLTM4NFwifXJldHVybiBudWxsfTt0aGlzLmdlbmVyYXRlS2V5UGFpckhleD1mdW5jdGlvbigpe3ZhciBrPXRoaXMuZWNwYXJhbXMubjt2YXIgbj10aGlzLmdldEJpZ1JhbmRvbShrKTt2YXIgbD10aGlzLmVjcGFyYW1zLkcubXVsdGlwbHkobik7dmFyIHE9bC5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIG89bC5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgbT0oXCIwMDAwMDAwMDAwXCIrbi50b1N0cmluZygxNikpLnNsaWNlKC1pKTt2YXIgcj0oXCIwMDAwMDAwMDAwXCIrcS50b1N0cmluZygxNikpLnNsaWNlKC1pKTt2YXIgcD0oXCIwMDAwMDAwMDAwXCIrby50b1N0cmluZygxNikpLnNsaWNlKC1pKTt2YXIgaj1cIjA0XCIrcitwO3RoaXMuc2V0UHJpdmF0ZUtleUhleChtKTt0aGlzLnNldFB1YmxpY0tleUhleChqKTtyZXR1cm57ZWNwcnZoZXg6bSxlY3B1YmhleDpqfX07dGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLnNpZ25IZXgoaSx0aGlzLnBydktleUhleCl9O3RoaXMuc2lnbkhleD1mdW5jdGlvbihvLGope3ZhciB0PW5ldyBCaWdJbnRlZ2VyKGosMTYpO3ZhciBsPXRoaXMuZWNwYXJhbXMubjt2YXIgcT1uZXcgQmlnSW50ZWdlcihvLDE2KTtkb3t2YXIgbT10aGlzLmdldEJpZ1JhbmRvbShsKTt2YXIgdT10aGlzLmVjcGFyYW1zLkc7dmFyIHA9dS5tdWx0aXBseShtKTt2YXIgaT1wLmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2QobCl9d2hpbGUoaS5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKTw9MCk7dmFyIHY9bS5tb2RJbnZlcnNlKGwpLm11bHRpcGx5KHEuYWRkKHQubXVsdGlwbHkoaSkpKS5tb2QobCk7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWcoaSx2KX07dGhpcy5zaWduPWZ1bmN0aW9uKG0sdSl7dmFyIHE9dTt2YXIgaj10aGlzLmVjcGFyYW1zLm47dmFyIHA9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobSk7ZG97dmFyIGw9dGhpcy5nZXRCaWdSYW5kb20oaik7dmFyIHQ9dGhpcy5lY3BhcmFtcy5HO3ZhciBvPXQubXVsdGlwbHkobCk7dmFyIGk9by5nZXRYKCkudG9CaWdJbnRlZ2VyKCkubW9kKGopfXdoaWxlKGkuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTyk8PTApO3ZhciB2PWwubW9kSW52ZXJzZShqKS5tdWx0aXBseShwLmFkZChxLm11bHRpcGx5KGkpKSkubW9kKGopO3JldHVybiB0aGlzLnNlcmlhbGl6ZVNpZyhpLHYpfTt0aGlzLnZlcmlmeVdpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihqLGkpe3JldHVybiB0aGlzLnZlcmlmeUhleChqLGksdGhpcy5wdWJLZXlIZXgpfTt0aGlzLnZlcmlmeUhleD1mdW5jdGlvbihtLGkscCl7dmFyIGwsajt2YXIgbz1LSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleChpKTtsPW8ucjtqPW8uczt2YXIgaztrPUVDUG9pbnRGcC5kZWNvZGVGcm9tSGV4KHRoaXMuZWNwYXJhbXMuY3VydmUscCk7dmFyIG49bmV3IEJpZ0ludGVnZXIobSwxNik7cmV0dXJuIHRoaXMudmVyaWZ5UmF3KG4sbCxqLGspfTt0aGlzLnZlcmlmeT1mdW5jdGlvbihvLHAsail7dmFyIGwsaTtpZihCaXRjb2luLlV0aWwuaXNBcnJheShwKSl7dmFyIG49dGhpcy5wYXJzZVNpZyhwKTtsPW4ucjtpPW4uc31lbHNle2lmKFwib2JqZWN0XCI9PT10eXBlb2YgcCYmcC5yJiZwLnMpe2w9cC5yO2k9cC5zfWVsc2V7dGhyb3dcIkludmFsaWQgdmFsdWUgZm9yIHNpZ25hdHVyZVwifX12YXIgaztpZihqIGluc3RhbmNlb2YgRUNQb2ludEZwKXtrPWp9ZWxzZXtpZihCaXRjb2luLlV0aWwuaXNBcnJheShqKSl7az1FQ1BvaW50RnAuZGVjb2RlRnJvbSh0aGlzLmVjcGFyYW1zLmN1cnZlLGopfWVsc2V7dGhyb3dcIkludmFsaWQgZm9ybWF0IGZvciBwdWJrZXkgdmFsdWUsIG11c3QgYmUgYnl0ZSBhcnJheSBvciBFQ1BvaW50RnBcIn19dmFyIG09QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobyk7cmV0dXJuIHRoaXMudmVyaWZ5UmF3KG0sbCxpLGspfTt0aGlzLnZlcmlmeVJhdz1mdW5jdGlvbihvLGksdyxtKXt2YXIgbD10aGlzLmVjcGFyYW1zLm47dmFyIHU9dGhpcy5lY3BhcmFtcy5HO2lmKGkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxpLmNvbXBhcmVUbyhsKT49MCl7cmV0dXJuIGZhbHNlfWlmKHcuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHx3LmNvbXBhcmVUbyhsKT49MCl7cmV0dXJuIGZhbHNlfXZhciBwPXcubW9kSW52ZXJzZShsKTt2YXIgaz1vLm11bHRpcGx5KHApLm1vZChsKTt2YXIgaj1pLm11bHRpcGx5KHApLm1vZChsKTt2YXIgcT11Lm11bHRpcGx5KGspLmFkZChtLm11bHRpcGx5KGopKTt2YXIgdD1xLmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2QobCk7cmV0dXJuIHQuZXF1YWxzKGkpfTt0aGlzLnNlcmlhbGl6ZVNpZz1mdW5jdGlvbihrLGope3ZhciBsPWsudG9CeXRlQXJyYXlTaWduZWQoKTt2YXIgaT1qLnRvQnl0ZUFycmF5U2lnbmVkKCk7dmFyIG09W107bS5wdXNoKDIpO20ucHVzaChsLmxlbmd0aCk7bT1tLmNvbmNhdChsKTttLnB1c2goMik7bS5wdXNoKGkubGVuZ3RoKTttPW0uY29uY2F0KGkpO20udW5zaGlmdChtLmxlbmd0aCk7bS51bnNoaWZ0KDQ4KTtyZXR1cm4gbX07dGhpcy5wYXJzZVNpZz1mdW5jdGlvbihuKXt2YXIgbTtpZihuWzBdIT00OCl7dGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG5vdCBhIHZhbGlkIERFUlNlcXVlbmNlXCIpfW09MjtpZihuW21dIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJGaXJzdCBlbGVtZW50IGluIHNpZ25hdHVyZSBtdXN0IGJlIGEgREVSSW50ZWdlclwiKX12YXIgbD1uLnNsaWNlKG0rMixtKzIrblttKzFdKTttKz0yK25bbSsxXTtpZihuW21dIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmQgZWxlbWVudCBpbiBzaWduYXR1cmUgbXVzdCBiZSBhIERFUkludGVnZXJcIil9dmFyIGk9bi5zbGljZShtKzIsbSsyK25bbSsxXSk7bSs9MituW20rMV07dmFyIGs9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobCk7dmFyIGo9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQoaSk7cmV0dXJue3I6ayxzOmp9fTt0aGlzLnBhcnNlU2lnQ29tcGFjdD1mdW5jdGlvbihtKXtpZihtLmxlbmd0aCE9PTY1KXt0aHJvd1wiU2lnbmF0dXJlIGhhcyB0aGUgd3JvbmcgbGVuZ3RoXCJ9dmFyIGo9bVswXS0yNztpZihqPDB8fGo+Nyl7dGhyb3dcIkludmFsaWQgc2lnbmF0dXJlIHR5cGVcIn12YXIgbz10aGlzLmVjcGFyYW1zLm47dmFyIGw9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobS5zbGljZSgxLDMzKSkubW9kKG8pO3ZhciBrPUJpZ0ludGVnZXIuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKG0uc2xpY2UoMzMsNjUpKS5tb2Qobyk7cmV0dXJue3I6bCxzOmssaTpqfX07dGhpcy5yZWFkUEtDUzVQcnZLZXlIZXg9ZnVuY3Rpb24obCl7dmFyIG49QVNOMUhFWDt2YXIgbT1LSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lO3ZhciBwPW4uZ2V0VmJ5TGlzdDtpZihuLmlzQVNOMUhFWChsKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgaSxrLG87dHJ5e2k9cChsLDAsWzIsMF0sXCIwNlwiKTtrPXAobCwwLFsxXSxcIjA0XCIpO3RyeXtvPXAobCwwLFszLDBdLFwiMDNcIikuc3Vic3RyKDIpfWNhdGNoKGope319Y2F0Y2goail7dGhyb3dcIm1hbGZvcm1lZCBQS0NTIzEvNSBwbGFpbiBFQ0MgcHJpdmF0ZSBrZXlcIn10aGlzLmN1cnZlTmFtZT1tKGkpO2lmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgobyk7dGhpcy5zZXRQcml2YXRlS2V5SGV4KGspO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHJ2S2V5SGV4PWZ1bmN0aW9uKGwpe3ZhciBxPUFTTjFIRVg7dmFyIGk9S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZTt2YXIgbj1xLmdldFZieUxpc3Q7aWYocS5pc0FTTjFIRVgobCk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGoscCxtLGs7dHJ5e2o9bihsLDAsWzEsMF0sXCIwNlwiKTtwPW4obCwwLFsxLDFdLFwiMDZcIik7bT1uKGwsMCxbMiwwLDFdLFwiMDRcIik7dHJ5e2s9bihsLDAsWzIsMCwyLDBdLFwiMDNcIikuc3Vic3RyKDIpfWNhdGNoKG8pe319Y2F0Y2gobyl7dGhyb3dcIm1hbGZvcm1lZCBQS0NTIzggcGxhaW4gRUNDIHByaXZhdGUga2V5XCJ9dGhpcy5jdXJ2ZU5hbWU9aShwKTtpZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGN1cnZlIG5hbWVcIn10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KGspO3RoaXMuc2V0UHJpdmF0ZUtleUhleChtKTt0aGlzLmlzUHVibGljPWZhbHNlfTt0aGlzLnJlYWRQS0NTOFB1YktleUhleD1mdW5jdGlvbihsKXt2YXIgbj1BU04xSEVYO3ZhciBtPUtKVVIuY3J5cHRvLkVDRFNBLmdldE5hbWU7dmFyIHA9bi5nZXRWYnlMaXN0O2lmKG4uaXNBU04xSEVYKGwpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXZhciBrLGksbzt0cnl7az1wKGwsMCxbMCwwXSxcIjA2XCIpO2k9cChsLDAsWzAsMV0sXCIwNlwiKTtvPXAobCwwLFsxXSxcIjAzXCIpLnN1YnN0cigyKX1jYXRjaChqKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjOCBFQ0MgcHVibGljIGtleVwifXRoaXMuY3VydmVOYW1lPW0oaSk7aWYodGhpcy5jdXJ2ZU5hbWU9PT1udWxsKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgobyl9O3RoaXMucmVhZENlcnRQdWJLZXlIZXg9ZnVuY3Rpb24oayxwKXtpZihwIT09NSl7cD02fXZhciBtPUFTTjFIRVg7dmFyIGw9S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZTt2YXIgbz1tLmdldFZieUxpc3Q7aWYobS5pc0FTTjFIRVgoayk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGksbjt0cnl7aT1vKGssMCxbMCxwLDAsMV0sXCIwNlwiKTtuPW8oaywwLFswLHAsMV0sXCIwM1wiKS5zdWJzdHIoMil9Y2F0Y2goail7dGhyb3dcIm1hbGZvcm1lZCBYLjUwOSBjZXJ0aWZpY2F0ZSBFQ0MgcHVibGljIGtleVwifXRoaXMuY3VydmVOYW1lPWwoaSk7aWYodGhpcy5jdXJ2ZU5hbWU9PT1udWxsKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgobil9O2lmKGghPT11bmRlZmluZWQpe2lmKGguY3VydmUhPT11bmRlZmluZWQpe3RoaXMuY3VydmVOYW1lPWguY3VydmV9fWlmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aGlzLmN1cnZlTmFtZT1lfXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7aWYoaCE9PXVuZGVmaW5lZCl7aWYoaC5wcnYhPT11bmRlZmluZWQpe3RoaXMuc2V0UHJpdmF0ZUtleUhleChoLnBydil9aWYoaC5wdWIhPT11bmRlZmluZWQpe3RoaXMuc2V0UHVibGljS2V5SGV4KGgucHViKX19fTtLSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleD1mdW5jdGlvbihhKXt2YXIgYj1LSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleEluSGV4UlMoYSk7dmFyIGQ9bmV3IEJpZ0ludGVnZXIoYi5yLDE2KTt2YXIgYz1uZXcgQmlnSW50ZWdlcihiLnMsMTYpO3JldHVybntyOmQsczpjfX07S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXhJbkhleFJTPWZ1bmN0aW9uKGYpe3ZhciBqPUFTTjFIRVg7dmFyIGk9ai5nZXRDaGlsZElkeDt2YXIgZz1qLmdldFY7aWYoZi5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wic2lnbmF0dXJlIGlzIG5vdCBhIEFTTi4xIHNlcXVlbmNlXCJ9dmFyIGg9aShmLDApO2lmKGgubGVuZ3RoIT0yKXt0aHJvd1wibnVtYmVyIG9mIHNpZ25hdHVyZSBBU04uMSBzZXF1ZW5jZSBlbGVtZW50cyBzZWVtIHdyb25nXCJ9dmFyIGU9aFswXTt2YXIgZD1oWzFdO2lmKGYuc3Vic3RyKGUsMikhPVwiMDJcIil7dGhyb3dcIjFzdCBpdGVtIG9mIHNlcXVlbmUgb2Ygc2lnbmF0dXJlIGlzIG5vdCBBU04uMSBpbnRlZ2VyXCJ9aWYoZi5zdWJzdHIoZCwyKSE9XCIwMlwiKXt0aHJvd1wiMm5kIGl0ZW0gb2Ygc2VxdWVuZSBvZiBzaWduYXR1cmUgaXMgbm90IEFTTi4xIGludGVnZXJcIn12YXIgYz1nKGYsZSk7dmFyIGI9ZyhmLGQpO3JldHVybntyOmMsczpifX07S0pVUi5jcnlwdG8uRUNEU0EuYXNuMVNpZ1RvQ29uY2F0U2lnPWZ1bmN0aW9uKGMpe3ZhciBkPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUyhjKTt2YXIgYj1kLnI7dmFyIGE9ZC5zO2lmKGIuc3Vic3RyKDAsMik9PVwiMDBcIiYmKGIubGVuZ3RoJTMyKT09Mil7Yj1iLnN1YnN0cigyKX1pZihhLnN1YnN0cigwLDIpPT1cIjAwXCImJihhLmxlbmd0aCUzMik9PTIpe2E9YS5zdWJzdHIoMil9aWYoKGIubGVuZ3RoJTMyKT09MzApe2I9XCIwMFwiK2J9aWYoKGEubGVuZ3RoJTMyKT09MzApe2E9XCIwMFwiK2F9aWYoYi5sZW5ndGglMzIhPTApe3Rocm93XCJ1bmtub3duIEVDRFNBIHNpZyByIGxlbmd0aCBlcnJvclwifWlmKGEubGVuZ3RoJTMyIT0wKXt0aHJvd1widW5rbm93biBFQ0RTQSBzaWcgcyBsZW5ndGggZXJyb3JcIn1yZXR1cm4gYithfTtLSlVSLmNyeXB0by5FQ0RTQS5jb25jYXRTaWdUb0FTTjFTaWc9ZnVuY3Rpb24oYSl7aWYoKCgoYS5sZW5ndGgvMikqOCklKDE2KjgpKSE9MCl7dGhyb3dcInVua25vd24gRUNEU0EgY29uY2F0aW5hdGVkIHItcyBzaWcgIGxlbmd0aCBlcnJvclwifXZhciBjPWEuc3Vic3RyKDAsYS5sZW5ndGgvMik7dmFyIGI9YS5zdWJzdHIoYS5sZW5ndGgvMik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnKGMsYil9O0tKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnPWZ1bmN0aW9uKGIsYSl7dmFyIGQ9bmV3IEJpZ0ludGVnZXIoYiwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYSwxNik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWcoZCxjKX07S0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZz1mdW5jdGlvbihmLGQpe3ZhciBjPUtKVVIuYXNuMTt2YXIgYj1uZXcgYy5ERVJJbnRlZ2VyKHtiaWdpbnQ6Zn0pO3ZhciBhPW5ldyBjLkRFUkludGVnZXIoe2JpZ2ludDpkfSk7dmFyIGU9bmV3IGMuREVSU2VxdWVuY2Uoe2FycmF5OltiLGFdfSk7cmV0dXJuIGUuZ2V0RW5jb2RlZEhleCgpfTtLSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lPWZ1bmN0aW9uKGEpe2lmKGE9PT1cIjJhODY0OGNlM2QwMzAxMDdcIil7cmV0dXJuXCJzZWNwMjU2cjFcIn1pZihhPT09XCIyYjgxMDQwMDBhXCIpe3JldHVyblwic2VjcDI1NmsxXCJ9aWYoYT09PVwiMmI4MTA0MDAyMlwiKXtyZXR1cm5cInNlY3AzODRyMVwifWlmKFwifHNlY3AyNTZyMXxOSVNUIFAtMjU2fFAtMjU2fHByaW1lMjU2djF8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AyNTZyMVwifWlmKFwifHNlY3AyNTZrMXxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDI1NmsxXCJ9aWYoXCJ8c2VjcDM4NHIxfE5JU1QgUC0zODR8UC0zODR8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AzODRyMVwifXJldHVybiBudWxsfTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQj1uZXcgZnVuY3Rpb24oKXt2YXIgYj17fTt2YXIgYz17fTtmdW5jdGlvbiBhKGQpe3JldHVybiBuZXcgQmlnSW50ZWdlcihkLDE2KX10aGlzLmdldEJ5TmFtZT1mdW5jdGlvbihlKXt2YXIgZD1lO2lmKHR5cGVvZiBjW2RdIT1cInVuZGVmaW5lZFwiKXtkPWNbZV19aWYodHlwZW9mIGJbZF0hPVwidW5kZWZpbmVkXCIpe3JldHVybiBiW2RdfXRocm93XCJ1bnJlZ2lzdGVyZWQgRUMgY3VydmUgbmFtZTogXCIrZH07dGhpcy5yZWdpc3Q9ZnVuY3Rpb24oQSxsLG8sZyxtLGUsaixmLGssdSxkLHgpe2JbQV09e307dmFyIHM9YShvKTt2YXIgej1hKGcpO3ZhciB5PWEobSk7dmFyIHQ9YShlKTt2YXIgdz1hKGopO3ZhciByPW5ldyBFQ0N1cnZlRnAocyx6LHkpO3ZhciBxPXIuZGVjb2RlUG9pbnRIZXgoXCIwNFwiK2Yrayk7YltBXVtcIm5hbWVcIl09QTtiW0FdW1wia2V5bGVuXCJdPWw7YltBXVtcImN1cnZlXCJdPXI7YltBXVtcIkdcIl09cTtiW0FdW1wiblwiXT10O2JbQV1bXCJoXCJdPXc7YltBXVtcIm9pZFwiXT1kO2JbQV1bXCJpbmZvXCJdPXg7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe2NbdVt2XV09QX19fTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxMjhyMVwiLDEyOCxcIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiRTg3NTc5QzExMDc5RjQzREQ4MjQ5OTNDMkNFRTVFRDNcIixcIkZGRkZGRkZFMDAwMDAwMDA3NUEzMEQxQjkwMzhBMTE1XCIsXCIxXCIsXCIxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NlwiLFwiQ0Y1QUM4Mzk1QkFGRUIxM0MwMkRBMjkyRERFRDdBODNcIixbXSxcIlwiLFwic2VjcDEyOHIxIDogU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZFwiKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxNjBrMVwiLDE2MCxcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkFDNzNcIixcIjBcIixcIjdcIixcIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFCOEZBMTZERkFCOUFDQTE2QjZCM1wiLFwiMVwiLFwiM0I0QzM4MkNFMzdBQTE5MkE0MDE5RTc2MzAzNkY0RjVERDREN0VCQlwiLFwiOTM4Q0Y5MzUzMThGRENFRDZCQzI4Mjg2NTMxNzMzQzNGMDNDNEZFRVwiLFtdLFwiXCIsXCJzZWNwMTYwazEgOiBTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkXCIpO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE2MHIxXCIsMTYwLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGQ1wiLFwiMUM5N0JFRkM1NEJEN0E4QjY1QUNGODlGODFENEQ0QURDNTY1RkE0NVwiLFwiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUY0QzhGOTI3QUVEM0NBNzUyMjU3XCIsXCIxXCIsXCI0QTk2QjU2ODhFRjU3MzI4NDY2NDY5ODk2OEMzOEJCOTEzQ0JGQzgyXCIsXCIyM0E2Mjg1NTMxNjg5NDdENTlEQ0M5MTIwNDIzNTEzNzdBQzVGQjMyXCIsW10sXCJcIixcInNlY3AxNjByMSA6IFNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGRcIik7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkyazFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkVFMzdcIixcIjBcIixcIjNcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTI2RjJGQzE3MEY2OTQ2NkE3NERFRkQ4RFwiLFwiMVwiLFwiREI0RkYxMEVDMDU3RTlBRTI2QjA3RDAyODBCN0Y0MzQxREE1RDFCMUVBRTA2QzdEXCIsXCI5QjJGMkY2RDlDNTYyOEE3ODQ0MTYzRDAxNUJFODYzNDQwODJBQTg4RDk1RTJGOURcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkycjFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQ1wiLFwiNjQyMTA1MTlFNTlDODBFNzBGQTdFOUFCNzIyNDMwNDlGRUI4REVFQ0MxNDZCOUIxXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzFcIixcIjFcIixcIjE4OERBODBFQjAzMDkwRjY3Q0JGMjBFQjQzQTE4ODAwRjRGRjBBRkQ4MkZGMTAxMlwiLFwiMDcxOTJCOTVGRkM4REE3ODYzMTAxMUVENkIyNENERDU3M0Y5NzdBMTFFNzk0ODExXCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDIyNHIxXCIsMjI0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFXCIsXCJCNDA1MEE4NTBDMDRCM0FCRjU0MTMyNTY1MDQ0QjBCN0Q3QkZEOEJBMjcwQjM5NDMyMzU1RkZCNFwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0RcIixcIjFcIixcIkI3MEUwQ0JENkJCNEJGN0YzMjEzOTBCOTRBMDNDMUQzNTZDMjExMjIzNDMyODBENjExNUMxRDIxXCIsXCJCRDM3NjM4OEI1RjcyM0ZCNEMyMkRGRTZDRDQzNzVBMDVBMDc0NzY0NDRENTgxOTk4NTAwN0UzNFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AyNTZrMVwiLDI1NixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZDMkZcIixcIjBcIixcIjdcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDFcIixcIjFcIixcIjc5QkU2NjdFRjlEQ0JCQUM1NUEwNjI5NUNFODcwQjA3MDI5QkZDREIyRENFMjhEOTU5RjI4MTVCMTZGODE3OThcIixcIjQ4M0FEQTc3MjZBM0M0NjU1REE0RkJGQzBFMTEwOEE4RkQxN0I0NDhBNjg1NTQxOTlDNDdEMDhGRkIxMEQ0QjhcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMjU2cjFcIiwyNTYsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCI1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCXCIsXCJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxXCIsXCIxXCIsXCI2QjE3RDFGMkUxMkM0MjQ3RjhCQ0U2RTU2M0E0NDBGMjc3MDM3RDgxMkRFQjMzQTBGNEExMzk0NUQ4OThDMjk2XCIsXCI0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1XCIsW1wiTklTVCBQLTI1NlwiLFwiUC0yNTZcIixcInByaW1lMjU2djFcIl0pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDM4NHIxXCIsMzg0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkNcIixcIkIzMzEyRkE3RTIzRUU3RTQ5ODhFMDU2QkUzRjgyRDE5MTgxRDlDNkVGRTgxNDExMjAzMTQwODhGNTAxMzg3NUFDNjU2Mzk4RDhBMkVEMTlEMkE4NUM4RUREM0VDMkFFRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzc2MzREODFGNDM3MkRERjU4MUEwREIyNDhCMEE3N0FFQ0VDMTk2QUNDQzUyOTczXCIsXCIxXCIsXCJBQTg3Q0EyMkJFOEIwNTM3OEVCMUM3MUVGMzIwQUQ3NDZFMUQzQjYyOEJBNzlCOTg1OUY3NDFFMDgyNTQyQTM4NTUwMkYyNURCRjU1Mjk2QzNBNTQ1RTM4NzI3NjBBQjdcIixcIjM2MTdkZTRhOTYyNjJjNmY1ZDllOThiZjkyOTJkYzI5ZjhmNDFkYmQyODlhMTQ3Y2U5ZGEzMTEzYjVmMGI4YzAwYTYwYjFjZTFkN2U4MTlkN2E0MzFkN2M5MGVhMGU1ZlwiLFtcIk5JU1QgUC0zODRcIixcIlAtMzg0XCJdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3A1MjFyMVwiLDUyMSxcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiMDUxOTUzRUI5NjE4RTFDOUExRjkyOUEyMUEwQjY4NTQwRUVBMkRBNzI1Qjk5QjMxNUYzQjhCNDg5OTE4RUYxMDlFMTU2MTkzOTUxRUM3RTkzN0IxNjUyQzBCRDNCQjFCRjA3MzU3M0RGODgzRDJDMzRGMUVGNDUxRkQ0NkI1MDNGMDBcIixcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE1MTg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5XCIsXCIxXCIsXCJDNjg1OEUwNkI3MDQwNEU5Q0Q5RTNFQ0I2NjIzOTVCNDQyOUM2NDgxMzkwNTNGQjUyMUY4MjhBRjYwNkI0RDNEQkFBMTRCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZGQThERTMzNDhCM0MxODU2QTQyOUJGOTdFN0UzMUMyRTVCRDY2XCIsXCIwMTE4MzkyOTZhNzg5YTNiYzAwNDVjOGE1ZmI0MmM3ZDFiZDk5OGY1NDQ0OTU3OWI0NDY4MTdhZmJkMTcyNzNlNjYyYzk3ZWU3Mjk5NWVmNDI2NDBjNTUwYjkwMTNmYWQwNzYxMzUzYzcwODZhMjcyYzI0MDg4YmU5NDc2OWZkMTY2NTBcIixbXCJOSVNUIFAtNTIxXCIsXCJQLTUyMVwiXSk7XG52YXIgS0VZVVRJTD1mdW5jdGlvbigpe3ZhciBkPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gayhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgZT1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGsoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGE9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBrKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBrPWZ1bmN0aW9uKHMseCx1LHEpe3ZhciByPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeCk7dmFyIHc9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB0PXt9O3Qua2V5PXc7dC5pdj1wO3QuY2lwaGVydGV4dD1yO3ZhciB2PXMuZGVjcnlwdCh0LHcse2l2OnB9KTtyZXR1cm4gQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodil9O3ZhciBsPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gZyhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgbz1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGcoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGY9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBnKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBnPWZ1bmN0aW9uKHQseSx2LHEpe3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeSk7dmFyIHg9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB3PXQuZW5jcnlwdChzLHgse2l2OnB9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHcudG9TdHJpbmcoKSk7dmFyIHU9Q3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkocik7cmV0dXJuIHV9O3ZhciBpPXtcIkFFUy0yNTYtQ0JDXCI6e3Byb2M6ZCxlcHJvYzpsLGtleWxlbjozMixpdmxlbjoxNn0sXCJBRVMtMTkyLUNCQ1wiOntwcm9jOmQsZXByb2M6bCxrZXlsZW46MjQsaXZsZW46MTZ9LFwiQUVTLTEyOC1DQkNcIjp7cHJvYzpkLGVwcm9jOmwsa2V5bGVuOjE2LGl2bGVuOjE2fSxcIkRFUy1FREUzLUNCQ1wiOntwcm9jOmUsZXByb2M6byxrZXlsZW46MjQsaXZsZW46OH0sXCJERVMtQ0JDXCI6e3Byb2M6YSxlcHJvYzpmLGtleWxlbjo4LGl2bGVuOjh9fTt2YXIgYz1mdW5jdGlvbihwKXtyZXR1cm4gaVtwXVtcInByb2NcIl19O3ZhciBtPWZ1bmN0aW9uKHApe3ZhciByPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKHApO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHIpO3JldHVybiBxfTt2YXIgbj1mdW5jdGlvbih2KXt2YXIgdz17fTt2YXIgcT12Lm1hdGNoKG5ldyBSZWdFeHAoXCJERUstSW5mbzogKFteLF0rKSwoWzAtOUEtRmEtZl0rKVwiLFwibVwiKSk7aWYocSl7dy5jaXBoZXI9cVsxXTt3Lml2c2FsdD1xWzJdfXZhciBwPXYubWF0Y2gobmV3IFJlZ0V4cChcIi0tLS0tQkVHSU4gKFtBLVpdKykgUFJJVkFURSBLRVktLS0tLVwiKSk7aWYocCl7dy50eXBlPXBbMV19dmFyIHU9LTE7dmFyIHg9MDtpZih2LmluZGV4T2YoXCJcXHJcXG5cXHJcXG5cIikhPS0xKXt1PXYuaW5kZXhPZihcIlxcclxcblxcclxcblwiKTt4PTJ9aWYodi5pbmRleE9mKFwiXFxuXFxuXCIpIT0tMSl7dT12LmluZGV4T2YoXCJcXG5cXG5cIik7eD0xfXZhciB0PXYuaW5kZXhPZihcIi0tLS0tRU5EXCIpO2lmKHUhPS0xJiZ0IT0tMSl7dmFyIHI9di5zdWJzdHJpbmcodSt4KjIsdC14KTtyPXIucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3cuZGF0YT1yfXJldHVybiB3fTt2YXIgaj1mdW5jdGlvbihxLHkscCl7dmFyIHY9cC5zdWJzdHJpbmcoMCwxNik7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcj1DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh5KTt2YXIgdT1pW3FdW1wia2V5bGVuXCJdK2lbcV1bXCJpdmxlblwiXTt2YXIgeD1cIlwiO3ZhciB3PW51bGw7Zm9yKDs7KXt2YXIgcz1DcnlwdG9KUy5hbGdvLk1ENS5jcmVhdGUoKTtpZih3IT1udWxsKXtzLnVwZGF0ZSh3KX1zLnVwZGF0ZShyKTtzLnVwZGF0ZSh0KTt3PXMuZmluYWxpemUoKTt4PXgrQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodyk7aWYoeC5sZW5ndGg+PXUqMil7YnJlYWt9fXZhciB6PXt9O3oua2V5aGV4PXguc3Vic3RyKDAsaVtxXVtcImtleWxlblwiXSoyKTt6Lml2aGV4PXguc3Vic3RyKGlbcV1bXCJrZXlsZW5cIl0qMixpW3FdW1wiaXZsZW5cIl0qMik7cmV0dXJuIHp9O3ZhciBiPWZ1bmN0aW9uKHAsdixyLHcpe3ZhciBzPUNyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UocCk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7dmFyIHU9aVt2XVtcInByb2NcIl07dmFyIHQ9dShxLHIsdyk7cmV0dXJuIHR9O3ZhciBoPWZ1bmN0aW9uKHAscyxxLHUpe3ZhciByPWlbc11bXCJlcHJvY1wiXTt2YXIgdD1yKHAscSx1KTtyZXR1cm4gdH07cmV0dXJue3ZlcnNpb246XCIxLjAuMFwiLHBhcnNlUEtDUzVQRU06ZnVuY3Rpb24ocCl7cmV0dXJuIG4ocCl9LGdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdDpmdW5jdGlvbihxLHAscil7cmV0dXJuIGoocSxwLHIpfSxkZWNyeXB0S2V5QjY0OmZ1bmN0aW9uKHAscixxLHMpe3JldHVybiBiKHAscixxLHMpfSxnZXREZWNyeXB0ZWRLZXlIZXg6ZnVuY3Rpb24oeSx4KXt2YXIgcT1uKHkpO3ZhciB0PXEudHlwZTt2YXIgcj1xLmNpcGhlcjt2YXIgcD1xLml2c2FsdDt2YXIgcz1xLmRhdGE7dmFyIHc9aihyLHgscCk7dmFyIHY9dy5rZXloZXg7dmFyIHU9YihzLHIsdixwKTtyZXR1cm4gdX0sZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4OmZ1bmN0aW9uKHgscyxBLHQscil7dmFyIHA9XCJcIjtpZih0eXBlb2YgdD09XCJ1bmRlZmluZWRcInx8dD09bnVsbCl7dD1cIkFFUy0yNTYtQ0JDXCJ9aWYodHlwZW9mIGlbdF09PVwidW5kZWZpbmVkXCIpe3Rocm93XCJLRVlVVElMIHVuc3VwcG9ydGVkIGFsZ29yaXRobTogXCIrdH1pZih0eXBlb2Ygcj09XCJ1bmRlZmluZWRcInx8cj09bnVsbCl7dmFyIHY9aVt0XVtcIml2bGVuXCJdO3ZhciB1PW0odik7cj11LnRvVXBwZXJDYXNlKCl9dmFyIHo9aih0LEEscik7dmFyIHk9ei5rZXloZXg7dmFyIHc9aChzLHQseSxyKTt2YXIgcT13LnJlcGxhY2UoLyguezY0fSkvZyxcIiQxXFxyXFxuXCIpO3ZhciBwPVwiLS0tLS1CRUdJTiBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtwKz1cIlByb2MtVHlwZTogNCxFTkNSWVBURURcXHJcXG5cIjtwKz1cIkRFSy1JbmZvOiBcIit0K1wiLFwiK3IrXCJcXHJcXG5cIjtwKz1cIlxcclxcblwiO3ArPXE7cCs9XCJcXHJcXG4tLS0tLUVORCBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtyZXR1cm4gcH0scGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4OmZ1bmN0aW9uKHkpe3ZhciBCPUFTTjFIRVg7dmFyIHo9Qi5nZXRDaGlsZElkeDt2YXIgdz1CLmdldFY7dmFyIHQ9e307dmFyIHI9eih5LDApO2lmKHIubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMCkuaXRlbXMgIT0gMjogXCIrci5sZW5ndGh9dC5jaXBoZXJ0ZXh0PXcoeSxyWzFdKTt2YXIgQT16KHksclswXSk7aWYoQS5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjApLml0ZW1zICE9IDI6IFwiK0EubGVuZ3RofWlmKHcoeSxBWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGRcIil7dGhyb3dcInRoaXMgb25seSBzdXBwb3J0cyBwa2NzNVBCRVMyXCJ9dmFyIHA9eih5LEFbMV0pO2lmKEEubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEpLml0ZW1zICE9IDI6IFwiK3AubGVuZ3RofXZhciBxPXooeSxwWzFdKTtpZihxLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMC4xLjEpLml0ZW1zICE9IDI6IFwiK3EubGVuZ3RofWlmKHcoeSxxWzBdKSE9XCIyYTg2NDg4NmY3MGQwMzA3XCIpe3Rocm93XCJ0aGlzIG9ubHkgc3VwcG9ydHMgVHJpcGxlREVTXCJ9dC5lbmNyeXB0aW9uU2NoZW1lQWxnPVwiVHJpcGxlREVTXCI7dC5lbmNyeXB0aW9uU2NoZW1lSVY9dyh5LHFbMV0pO3ZhciBzPXooeSxwWzBdKTtpZihzLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMC4xLjApLml0ZW1zICE9IDI6IFwiK3MubGVuZ3RofWlmKHcoeSxzWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGNcIil7dGhyb3dcInRoaXMgb25seSBzdXBwb3J0cyBwa2NzNVBCS0RGMlwifXZhciB4PXooeSxzWzFdKTtpZih4Lmxlbmd0aDwyKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMC4xKS5pdGVtcyA8IDI6IFwiK3gubGVuZ3RofXQucGJrZGYyU2FsdD13KHkseFswXSk7dmFyIHU9dyh5LHhbMV0pO3RyeXt0LnBia2RmMkl0ZXI9cGFyc2VJbnQodSwxNil9Y2F0Y2godil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQgcGJrZGYySXRlcjogXCIrdX1yZXR1cm4gdH0sZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtOmZ1bmN0aW9uKHUscCl7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1LnBia2RmMlNhbHQpO3ZhciBxPXUucGJrZGYySXRlcjt2YXIgcz1DcnlwdG9KUy5QQktERjIocCx0LHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOnF9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTtyZXR1cm4gcn0sX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24oeCx5KXt2YXIgcj1wZW10b2hleCh4LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpO3ZhciBwPXRoaXMucGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4KHIpO3ZhciB1PUtFWVVUSUwuZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtKHAseSk7dmFyIHY9e307di5jaXBoZXJ0ZXh0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5jaXBoZXJ0ZXh0KTt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUpO3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5lbmNyeXB0aW9uU2NoZW1lSVYpO3ZhciB3PUNyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KHYsdCx7aXY6c30pO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHcpO3JldHVybiBxfSxnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24ocyxxKXt2YXIgcD10aGlzLl9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNKHMscSk7dmFyIHI9dGhpcy5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7cmV0dXJuIHJ9LHBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXg6ZnVuY3Rpb24ocyl7dmFyIHY9QVNOMUhFWDt2YXIgdT12LmdldENoaWxkSWR4O3ZhciB0PXYuZ2V0Vjt2YXIgcT17fTtxLmFsZ3BhcmFtPW51bGw7aWYocy5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIHBsYWluIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDAxKVwifXZhciByPXUocywwKTtpZihyLmxlbmd0aCE9Myl7dGhyb3dcIm1hbGZvcm1lZCBwbGFpbiBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwMilcIn1pZihzLnN1YnN0cihyWzFdLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDMpXCJ9dmFyIHA9dShzLHJbMV0pO2lmKHAubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDA0KVwifWlmKHMuc3Vic3RyKHBbMF0sMikhPVwiMDZcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwNSlcIn1xLmFsZ29pZD10KHMscFswXSk7aWYocy5zdWJzdHIocFsxXSwyKT09XCIwNlwiKXtxLmFsZ3BhcmFtPXQocyxwWzFdKX1pZihzLnN1YnN0cihyWzJdLDIpIT1cIjA0XCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDYpXCJ9cS5rZXlpZHg9di5nZXRWaWR4KHMsclsyXSk7cmV0dXJuIHF9LGdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOFBFTTpmdW5jdGlvbihxKXt2YXIgcD1wZW10b2hleChxLFwiUFJJVkFURSBLRVlcIik7dmFyIHI9dGhpcy5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7cmV0dXJuIHJ9LGdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleDpmdW5jdGlvbihwKXt2YXIgcT10aGlzLnBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7dmFyIHI7aWYocS5hbGdvaWQ9PVwiMmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3I9bmV3IFJTQUtleSgpfWVsc2V7aWYocS5hbGdvaWQ9PVwiMmE4NjQ4Y2UzODA0MDFcIil7cj1uZXcgS0pVUi5jcnlwdG8uRFNBKCl9ZWxzZXtpZihxLmFsZ29pZD09XCIyYTg2NDhjZTNkMDIwMVwiKXtyPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSgpfWVsc2V7dGhyb3dcInVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZ29yaXRobVwifX19ci5yZWFkUEtDUzhQcnZLZXlIZXgocCk7cmV0dXJuIHJ9LF9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXg6ZnVuY3Rpb24ocSl7dmFyIHA7dmFyIHI9QVNOMUhFWC5nZXRWYnlMaXN0KHEsMCxbMCwwXSxcIjA2XCIpO2lmKHI9PT1cIjJhODY0ODg2ZjcwZDAxMDEwMVwiKXtwPW5ldyBSU0FLZXkoKX1lbHNle2lmKHI9PT1cIjJhODY0OGNlMzgwNDAxXCIpe3A9bmV3IEtKVVIuY3J5cHRvLkRTQSgpfWVsc2V7aWYocj09PVwiMmE4NjQ4Y2UzZDAyMDFcIil7cD1uZXcgS0pVUi5jcnlwdG8uRUNEU0EoKX1lbHNle3Rocm93XCJ1bnN1cHBvcnRlZCBQS0NTIzggcHVibGljIGtleSBoZXhcIn19fXAucmVhZFBLQ1M4UHViS2V5SGV4KHEpO3JldHVybiBwfSxwYXJzZVB1YmxpY1Jhd1JTQUtleUhleDpmdW5jdGlvbihyKXt2YXIgdT1BU04xSEVYO3ZhciB0PXUuZ2V0Q2hpbGRJZHg7dmFyIHM9dS5nZXRWO3ZhciBwPXt9O2lmKHIuc3Vic3RyKDAsMikhPVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDAxKVwifXZhciBxPXQociwwKTtpZihxLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDAyKVwifWlmKHIuc3Vic3RyKHFbMF0sMikhPVwiMDJcIil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDAzKVwifXAubj1zKHIscVswXSk7aWYoci5zdWJzdHIocVsxXSwyKSE9XCIwMlwiKXt0aHJvd1wibWFsZm9ybWVkIFJTQSBrZXkoY29kZTowMDQpXCJ9cC5lPXMocixxWzFdKTtyZXR1cm4gcH0scGFyc2VQdWJsaWNQS0NTOEhleDpmdW5jdGlvbih0KXt2YXIgdj1BU04xSEVYO3ZhciB1PXYuZ2V0Q2hpbGRJZHg7dmFyIHM9di5nZXRWO3ZhciBxPXt9O3EuYWxncGFyYW09bnVsbDt2YXIgcj11KHQsMCk7aWYoci5sZW5ndGghPTIpe3Rocm93XCJvdXRlciBERVJTZXF1ZW5jZSBzaGFsbCBoYXZlIDIgZWxlbWVudHM6IFwiK3IubGVuZ3RofXZhciB3PXJbMF07aWYodC5zdWJzdHIodywyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDEpXCJ9dmFyIHA9dSh0LHcpO2lmKHAubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDIpXCJ9aWYodC5zdWJzdHIocFswXSwyKSE9XCIwNlwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDMpXCJ9cS5hbGdvaWQ9cyh0LHBbMF0pO2lmKHQuc3Vic3RyKHBbMV0sMik9PVwiMDZcIil7cS5hbGdwYXJhbT1zKHQscFsxXSl9ZWxzZXtpZih0LnN1YnN0cihwWzFdLDIpPT1cIjMwXCIpe3EuYWxncGFyYW09e307cS5hbGdwYXJhbS5wPXYuZ2V0VmJ5TGlzdCh0LHBbMV0sWzBdLFwiMDJcIik7cS5hbGdwYXJhbS5xPXYuZ2V0VmJ5TGlzdCh0LHBbMV0sWzFdLFwiMDJcIik7cS5hbGdwYXJhbS5nPXYuZ2V0VmJ5TGlzdCh0LHBbMV0sWzJdLFwiMDJcIil9fWlmKHQuc3Vic3RyKHJbMV0sMikhPVwiMDNcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDA0KVwifXEua2V5PXModCxyWzFdKS5zdWJzdHIoMik7cmV0dXJuIHF9LH19KCk7S0VZVVRJTC5nZXRLZXk9ZnVuY3Rpb24obCxrLG4pe3ZhciBHPUFTTjFIRVgsTD1HLmdldENoaWxkSWR4LHY9Ry5nZXRWLGQ9Ry5nZXRWYnlMaXN0LGM9S0pVUi5jcnlwdG8saT1jLkVDRFNBLEM9Yy5EU0Esdz1SU0FLZXksTT1wZW10b2hleCxGPUtFWVVUSUw7aWYodHlwZW9mIHchPVwidW5kZWZpbmVkXCImJmwgaW5zdGFuY2VvZiB3KXtyZXR1cm4gbH1pZih0eXBlb2YgaSE9XCJ1bmRlZmluZWRcIiYmbCBpbnN0YW5jZW9mIGkpe3JldHVybiBsfWlmKHR5cGVvZiBDIT1cInVuZGVmaW5lZFwiJiZsIGluc3RhbmNlb2YgQyl7cmV0dXJuIGx9aWYobC5jdXJ2ZSE9PXVuZGVmaW5lZCYmbC54eSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXtyZXR1cm4gbmV3IGkoe3B1YjpsLnh5LGN1cnZlOmwuY3VydmV9KX1pZihsLmN1cnZlIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQpe3JldHVybiBuZXcgaSh7cHJ2OmwuZCxjdXJ2ZTpsLmN1cnZlfSl9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQdWJsaWMobC5uLGwuZSk7cmV0dXJuIFB9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQmJmwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmRwIT09dW5kZWZpbmVkJiZsLmRxIT09dW5kZWZpbmVkJiZsLmNvIT09dW5kZWZpbmVkJiZsLnFpPT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZUV4KGwubixsLmUsbC5kLGwucCxsLnEsbC5kcCxsLmRxLGwuY28pO3JldHVybiBQfWlmKGwua3R5PT09dW5kZWZpbmVkJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkJiZsLnA9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlKGwubixsLmUsbC5kKTtyZXR1cm4gUH1pZihsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5nIT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwueD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IEMoKTtQLnNldFB1YmxpYyhsLnAsbC5xLGwuZyxsLnkpO3JldHVybiBQfWlmKGwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmchPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC54IT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgQygpO1Auc2V0UHJpdmF0ZShsLnAsbC5xLGwuZyxsLnksbC54KTtyZXR1cm4gUH1pZihsLmt0eT09PVwiUlNBXCImJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQdWJsaWMoYjY0dXRvaGV4KGwubiksYjY0dXRvaGV4KGwuZSkpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCYmbC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZHAhPT11bmRlZmluZWQmJmwuZHEhPT11bmRlZmluZWQmJmwucWkhPT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlRXgoYjY0dXRvaGV4KGwubiksYjY0dXRvaGV4KGwuZSksYjY0dXRvaGV4KGwuZCksYjY0dXRvaGV4KGwucCksYjY0dXRvaGV4KGwucSksYjY0dXRvaGV4KGwuZHApLGI2NHV0b2hleChsLmRxKSxiNjR1dG9oZXgobC5xaSkpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGUoYjY0dXRvaGV4KGwubiksYjY0dXRvaGV4KGwuZSksYjY0dXRvaGV4KGwuZCkpO3JldHVybiBQfWlmKGwua3R5PT09XCJFQ1wiJiZsLmNydiE9PXVuZGVmaW5lZCYmbC54IT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIGo9bmV3IGkoe2N1cnZlOmwuY3J2fSk7dmFyIHQ9ai5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgQj0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueCkpLnNsaWNlKC10KTt2YXIgej0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueSkpLnNsaWNlKC10KTt2YXIgdT1cIjA0XCIrQit6O2ouc2V0UHVibGljS2V5SGV4KHUpO3JldHVybiBqfWlmKGwua3R5PT09XCJFQ1wiJiZsLmNydiE9PXVuZGVmaW5lZCYmbC54IT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7dmFyIGo9bmV3IGkoe2N1cnZlOmwuY3J2fSk7dmFyIHQ9ai5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgQj0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueCkpLnNsaWNlKC10KTt2YXIgej0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwueSkpLnNsaWNlKC10KTt2YXIgdT1cIjA0XCIrQit6O3ZhciBiPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC5kKSkuc2xpY2UoLXQpO2ouc2V0UHVibGljS2V5SGV4KHUpO2ouc2V0UHJpdmF0ZUtleUhleChiKTtyZXR1cm4gan1pZihuPT09XCJwa2NzNXBydlwiKXt2YXIgSj1sLEc9QVNOMUhFWCxOLFA7Tj1MKEosMCk7aWYoTi5sZW5ndGg9PT05KXtQPW5ldyB3KCk7UC5yZWFkUEtDUzVQcnZLZXlIZXgoSil9ZWxzZXtpZihOLmxlbmd0aD09PTYpe1A9bmV3IEMoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle2lmKE4ubGVuZ3RoPjImJkouc3Vic3RyKE5bMV0sMik9PT1cIjA0XCIpe1A9bmV3IGkoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle3Rocm93XCJ1bnN1cHBvcnRlZCBQS0NTIzEvNSBoZXhhZGVjaW1hbCBrZXlcIn19fXJldHVybiBQfWlmKG49PT1cInBrY3M4cHJ2XCIpe3ZhciBQPUYuZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4KGwpO3JldHVybiBQfWlmKG49PT1cInBrY3M4cHViXCIpe3JldHVybiBGLl9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXgobCl9aWYobj09PVwieDUwOXB1YlwiKXtyZXR1cm4gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydEhleChsKX1pZihsLmluZGV4T2YoXCItRU5EIENFUlRJRklDQVRFLVwiLDApIT0tMXx8bC5pbmRleE9mKFwiLUVORCBYNTA5IENFUlRJRklDQVRFLVwiLDApIT0tMXx8bC5pbmRleE9mKFwiLUVORCBUUlVTVEVEIENFUlRJRklDQVRFLVwiLDApIT0tMSl7cmV0dXJuIFg1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRQRU0obCl9aWYobC5pbmRleE9mKFwiLUVORCBQVUJMSUMgS0VZLVwiKSE9LTEpe3ZhciBPPXBlbXRvaGV4KGwsXCJQVUJMSUMgS0VZXCIpO3JldHVybiBGLl9nZXRLZXlGcm9tUHVibGljUEtDUzhIZXgoTyl9aWYobC5pbmRleE9mKFwiLUVORCBSU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgbT1NKGwsXCJSU0EgUFJJVkFURSBLRVlcIik7cmV0dXJuIEYuZ2V0S2V5KG0sbnVsbCxcInBrY3M1cHJ2XCIpfWlmKGwuaW5kZXhPZihcIi1FTkQgRFNBIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpPT0tMSl7dmFyIEk9TShsLFwiRFNBIFBSSVZBVEUgS0VZXCIpO3ZhciBFPWQoSSwwLFsxXSxcIjAyXCIpO3ZhciBEPWQoSSwwLFsyXSxcIjAyXCIpO3ZhciBLPWQoSSwwLFszXSxcIjAyXCIpO3ZhciByPWQoSSwwLFs0XSxcIjAyXCIpO3ZhciBzPWQoSSwwLFs1XSxcIjAyXCIpO3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKG5ldyBCaWdJbnRlZ2VyKEUsMTYpLG5ldyBCaWdJbnRlZ2VyKEQsMTYpLG5ldyBCaWdJbnRlZ2VyKEssMTYpLG5ldyBCaWdJbnRlZ2VyKHIsMTYpLG5ldyBCaWdJbnRlZ2VyKHMsMTYpKTtyZXR1cm4gUH1pZihsLmluZGV4T2YoXCItRU5EIFBSSVZBVEUgS0VZLVwiKSE9LTEpe3JldHVybiBGLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOFBFTShsKX1pZihsLmluZGV4T2YoXCItRU5EIFJTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKSE9LTEpe3ZhciBvPUYuZ2V0RGVjcnlwdGVkS2V5SGV4KGwsayk7dmFyIEg9bmV3IFJTQUtleSgpO0gucmVhZFBLQ1M1UHJ2S2V5SGV4KG8pO3JldHVybiBIfWlmKGwuaW5kZXhPZihcIi1FTkQgRUMgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgST1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBQPWQoSSwwLFsxXSxcIjA0XCIpO3ZhciBmPWQoSSwwLFsyLDBdLFwiMDZcIik7dmFyIEE9ZChJLDAsWzMsMF0sXCIwM1wiKS5zdWJzdHIoMik7dmFyIGU9XCJcIjtpZihLSlVSLmNyeXB0by5PSUQub2lkaGV4Mm5hbWVbZl0hPT11bmRlZmluZWQpe2U9S0pVUi5jcnlwdG8uT0lELm9pZGhleDJuYW1lW2ZdfWVsc2V7dGhyb3dcInVuZGVmaW5lZCBPSUQoaGV4KSBpbiBLSlVSLmNyeXB0by5PSUQ6IFwiK2Z9dmFyIGo9bmV3IGkoe2N1cnZlOmV9KTtqLnNldFB1YmxpY0tleUhleChBKTtqLnNldFByaXZhdGVLZXlIZXgoUCk7ai5pc1B1YmxpYz1mYWxzZTtyZXR1cm4gan1pZihsLmluZGV4T2YoXCItRU5EIERTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKSE9LTEpe3ZhciBJPUYuZ2V0RGVjcnlwdGVkS2V5SGV4KGwsayk7dmFyIEU9ZChJLDAsWzFdLFwiMDJcIik7dmFyIEQ9ZChJLDAsWzJdLFwiMDJcIik7dmFyIEs9ZChJLDAsWzNdLFwiMDJcIik7dmFyIHI9ZChJLDAsWzRdLFwiMDJcIik7dmFyIHM9ZChJLDAsWzVdLFwiMDJcIik7dmFyIFA9bmV3IEMoKTtQLnNldFByaXZhdGUobmV3IEJpZ0ludGVnZXIoRSwxNiksbmV3IEJpZ0ludGVnZXIoRCwxNiksbmV3IEJpZ0ludGVnZXIoSywxNiksbmV3IEJpZ0ludGVnZXIociwxNiksbmV3IEJpZ0ludGVnZXIocywxNikpO3JldHVybiBQfWlmKGwuaW5kZXhPZihcIi1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLVwiKSE9LTEpe3JldHVybiBGLmdldEtleUZyb21FbmNyeXB0ZWRQS0NTOFBFTShsLGspfXRocm93XCJub3Qgc3VwcG9ydGVkIGFyZ3VtZW50XCJ9O0tFWVVUSUwuZ2VuZXJhdGVLZXlwYWlyPWZ1bmN0aW9uKGEsYyl7aWYoYT09XCJSU0FcIil7dmFyIGI9Yzt2YXIgaD1uZXcgUlNBS2V5KCk7aC5nZW5lcmF0ZShiLFwiMTAwMDFcIik7aC5pc1ByaXZhdGU9dHJ1ZTtoLmlzUHVibGljPXRydWU7dmFyIGY9bmV3IFJTQUtleSgpO3ZhciBlPWgubi50b1N0cmluZygxNik7dmFyIGk9aC5lLnRvU3RyaW5nKDE2KTtmLnNldFB1YmxpYyhlLGkpO2YuaXNQcml2YXRlPWZhbHNlO2YuaXNQdWJsaWM9dHJ1ZTt2YXIgaz17fTtrLnBydktleU9iaj1oO2sucHViS2V5T2JqPWY7cmV0dXJuIGt9ZWxzZXtpZihhPT1cIkVDXCIpe3ZhciBkPWM7dmFyIGc9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTpkfSk7dmFyIGo9Zy5nZW5lcmF0ZUtleVBhaXJIZXgoKTt2YXIgaD1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOmR9KTtoLnNldFB1YmxpY0tleUhleChqLmVjcHViaGV4KTtoLnNldFByaXZhdGVLZXlIZXgoai5lY3BydmhleCk7aC5pc1ByaXZhdGU9dHJ1ZTtoLmlzUHVibGljPWZhbHNlO3ZhciBmPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6ZH0pO2Yuc2V0UHVibGljS2V5SGV4KGouZWNwdWJoZXgpO2YuaXNQcml2YXRlPWZhbHNlO2YuaXNQdWJsaWM9dHJ1ZTt2YXIgaz17fTtrLnBydktleU9iaj1oO2sucHViS2V5T2JqPWY7cmV0dXJuIGt9ZWxzZXt0aHJvd1widW5rbm93biBhbGdvcml0aG06IFwiK2F9fX07S0VZVVRJTC5nZXRQRU09ZnVuY3Rpb24oYixELHksbSxxLGope3ZhciBGPUtKVVIsaz1GLmFzbjEsej1rLkRFUk9iamVjdElkZW50aWZpZXIsZj1rLkRFUkludGVnZXIsbD1rLkFTTjFVdGlsLm5ld09iamVjdCxhPWsueDUwOSxDPWEuU3ViamVjdFB1YmxpY0tleUluZm8sZT1GLmNyeXB0byx1PWUuRFNBLHI9ZS5FQ0RTQSxuPVJTQUtleTtmdW5jdGlvbiBBKHMpe3ZhciBHPWwoe3NlcTpbe1wiaW50XCI6MH0se1wiaW50XCI6e2JpZ2ludDpzLm59fSx7XCJpbnRcIjpzLmV9LHtcImludFwiOntiaWdpbnQ6cy5kfX0se1wiaW50XCI6e2JpZ2ludDpzLnB9fSx7XCJpbnRcIjp7YmlnaW50OnMucX19LHtcImludFwiOntiaWdpbnQ6cy5kbXAxfX0se1wiaW50XCI6e2JpZ2ludDpzLmRtcTF9fSx7XCJpbnRcIjp7YmlnaW50OnMuY29lZmZ9fV19KTtyZXR1cm4gR31mdW5jdGlvbiBCKEcpe3ZhciBzPWwoe3NlcTpbe1wiaW50XCI6MX0se29jdHN0cjp7aGV4OkcucHJ2S2V5SGV4fX0se3RhZzpbXCJhMFwiLHRydWUse29pZDp7bmFtZTpHLmN1cnZlTmFtZX19XX0se3RhZzpbXCJhMVwiLHRydWUse2JpdHN0cjp7aGV4OlwiMDBcIitHLnB1YktleUhleH19XX1dfSk7cmV0dXJuIHN9ZnVuY3Rpb24geChzKXt2YXIgRz1sKHtzZXE6W3tcImludFwiOjB9LHtcImludFwiOntiaWdpbnQ6cy5wfX0se1wiaW50XCI6e2JpZ2ludDpzLnF9fSx7XCJpbnRcIjp7YmlnaW50OnMuZ319LHtcImludFwiOntiaWdpbnQ6cy55fX0se1wiaW50XCI6e2JpZ2ludDpzLnh9fV19KTtyZXR1cm4gR31pZigoKG4hPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuKXx8KHUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1KXx8KHIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByKSkmJmIuaXNQdWJsaWM9PXRydWUmJihEPT09dW5kZWZpbmVkfHxEPT1cIlBLQ1M4UFVCXCIpKXt2YXIgRT1uZXcgQyhiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gaGV4dG9wZW0odyxcIlBVQkxJQyBLRVlcIil9aWYoRD09XCJQS0NTMVBSVlwiJiZuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QShiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gaGV4dG9wZW0odyxcIlJTQSBQUklWQVRFIEtFWVwiKX1pZihEPT1cIlBLQ1MxUFJWXCImJnIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByJiYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgaT1uZXcgeih7bmFtZTpiLmN1cnZlTmFtZX0pO3ZhciB2PWkuZ2V0RW5jb2RlZEhleCgpO3ZhciBoPUIoYik7dmFyIHQ9aC5nZXRFbmNvZGVkSGV4KCk7dmFyIHA9XCJcIjtwKz1oZXh0b3BlbSh2LFwiRUMgUEFSQU1FVEVSU1wiKTtwKz1oZXh0b3BlbSh0LFwiRUMgUFJJVkFURSBLRVlcIik7cmV0dXJuIHB9aWYoRD09XCJQS0NTMVBSVlwiJiZ1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9eChiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gaGV4dG9wZW0odyxcIkRTQSBQUklWQVRFIEtFWVwiKX1pZihEPT1cIlBLQ1M1UFJWXCImJm4hPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuJiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT1BKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJSU0FcIix3LHksbSxqKX1pZihEPT1cIlBLQ1M1UFJWXCImJnIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByJiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT1CKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJFQ1wiLHcseSxtLGopfWlmKEQ9PVwiUEtDUzVQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJih5IT09dW5kZWZpbmVkJiZ5IT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPXgoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYobT09PXVuZGVmaW5lZCl7bT1cIkRFUy1FREUzLUNCQ1wifXJldHVybiB0aGlzLmdldEVuY3J5cHRlZFBLQ1M1UEVNRnJvbVBydktleUhleChcIkRTQVwiLHcseSxtLGopfXZhciBvPWZ1bmN0aW9uKEcscyl7dmFyIEk9YyhHLHMpO3ZhciBIPW5ldyBsKHtzZXE6W3tzZXE6W3tvaWQ6e25hbWU6XCJwa2NzNVBCRVMyXCJ9fSx7c2VxOlt7c2VxOlt7b2lkOntuYW1lOlwicGtjczVQQktERjJcIn19LHtzZXE6W3tvY3RzdHI6e2hleDpJLnBia2RmMlNhbHR9fSx7XCJpbnRcIjpJLnBia2RmMkl0ZXJ9XX1dfSx7c2VxOlt7b2lkOntuYW1lOlwiZGVzLUVERTMtQ0JDXCJ9fSx7b2N0c3RyOntoZXg6SS5lbmNyeXB0aW9uU2NoZW1lSVZ9fV19XX1dfSx7b2N0c3RyOntoZXg6SS5jaXBoZXJ0ZXh0fX1dfSk7cmV0dXJuIEguZ2V0RW5jb2RlZEhleCgpfTt2YXIgYz1mdW5jdGlvbihOLE8pe3ZhciBIPTEwMDt2YXIgTT1DcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbSg4KTt2YXIgTD1cIkRFUy1FREUzLUNCQ1wiO3ZhciBzPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDgpO3ZhciBJPUNyeXB0b0pTLlBCS0RGMihPLE0se2tleVNpemU6MTkyLzMyLGl0ZXJhdGlvbnM6SH0pO3ZhciBKPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoTik7dmFyIEs9Q3J5cHRvSlMuVHJpcGxlREVTLmVuY3J5cHQoSixJLHtpdjpzfSkrXCJcIjt2YXIgRz17fTtHLmNpcGhlcnRleHQ9SztHLnBia2RmMlNhbHQ9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkoTSk7Ry5wYmtkZjJJdGVyPUg7Ry5lbmNyeXB0aW9uU2NoZW1lQWxnPUw7Ry5lbmNyeXB0aW9uU2NoZW1lSVY9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7cmV0dXJuIEd9O2lmKEQ9PVwiUEtDUzhQUlZcIiYmbiE9dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPUEoYik7dmFyIGQ9Zy5nZXRFbmNvZGVkSGV4KCk7dmFyIEU9bCh7c2VxOlt7XCJpbnRcIjowfSx7c2VxOlt7b2lkOntuYW1lOlwicnNhRW5jcnlwdGlvblwifX0se1wibnVsbFwiOnRydWV9XX0se29jdHN0cjp7aGV4OmR9fV19KTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZih5PT09dW5kZWZpbmVkfHx5PT1udWxsKXtyZXR1cm4gaGV4dG9wZW0odyxcIlBSSVZBVEUgS0VZXCIpfWVsc2V7dmFyIHQ9byh3LHkpO3JldHVybiBoZXh0b3BlbSh0LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpfX1pZihEPT1cIlBLQ1M4UFJWXCImJnIhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiByJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGc9bmV3IGwoe3NlcTpbe1wiaW50XCI6MX0se29jdHN0cjp7aGV4OmIucHJ2S2V5SGV4fX0se3RhZzpbXCJhMVwiLHRydWUse2JpdHN0cjp7aGV4OlwiMDBcIitiLnB1YktleUhleH19XX1dfSk7dmFyIGQ9Zy5nZXRFbmNvZGVkSGV4KCk7dmFyIEU9bCh7c2VxOlt7XCJpbnRcIjowfSx7c2VxOlt7b2lkOntuYW1lOlwiZWNQdWJsaWNLZXlcIn19LHtvaWQ6e25hbWU6Yi5jdXJ2ZU5hbWV9fV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19aWYoRD09XCJQS0NTOFBSVlwiJiZ1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPW5ldyBmKHtiaWdpbnQ6Yi54fSk7dmFyIGQ9Zy5nZXRFbmNvZGVkSGV4KCk7dmFyIEU9bCh7c2VxOlt7XCJpbnRcIjowfSx7c2VxOlt7b2lkOntuYW1lOlwiZHNhXCJ9fSx7c2VxOlt7XCJpbnRcIjp7YmlnaW50OmIucH19LHtcImludFwiOntiaWdpbnQ6Yi5xfX0se1wiaW50XCI6e2JpZ2ludDpiLmd9fV19XX0se29jdHN0cjp7aGV4OmR9fV19KTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZih5PT09dW5kZWZpbmVkfHx5PT1udWxsKXtyZXR1cm4gaGV4dG9wZW0odyxcIlBSSVZBVEUgS0VZXCIpfWVsc2V7dmFyIHQ9byh3LHkpO3JldHVybiBoZXh0b3BlbSh0LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpfX10aHJvd1widW5zdXBwb3J0ZWQgb2JqZWN0IG5vciBmb3JtYXRcIn07S0VZVVRJTC5nZXRLZXlGcm9tQ1NSUEVNPWZ1bmN0aW9uKGIpe3ZhciBhPXBlbXRvaGV4KGIsXCJDRVJUSUZJQ0FURSBSRVFVRVNUXCIpO3ZhciBjPUtFWVVUSUwuZ2V0S2V5RnJvbUNTUkhleChhKTtyZXR1cm4gY307S0VZVVRJTC5nZXRLZXlGcm9tQ1NSSGV4PWZ1bmN0aW9uKGEpe3ZhciBjPUtFWVVUSUwucGFyc2VDU1JIZXgoYSk7dmFyIGI9S0VZVVRJTC5nZXRLZXkoYy5wOHB1YmtleWhleCxudWxsLFwicGtjczhwdWJcIik7cmV0dXJuIGJ9O0tFWVVUSUwucGFyc2VDU1JIZXg9ZnVuY3Rpb24oZCl7dmFyIGk9QVNOMUhFWDt2YXIgZj1pLmdldENoaWxkSWR4O3ZhciBjPWkuZ2V0VExWO3ZhciBiPXt9O3ZhciBnPWQ7aWYoZy5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwMSlcIn12YXIgZT1mKGcsMCk7aWYoZS5sZW5ndGg8MSl7dGhyb3dcIm1hbGZvcm1lZCBDU1IoY29kZTowMDIpXCJ9aWYoZy5zdWJzdHIoZVswXSwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwMylcIn12YXIgYT1mKGcsZVswXSk7aWYoYS5sZW5ndGg8Myl7dGhyb3dcIm1hbGZvcm1lZCBDU1IoY29kZTowMDQpXCJ9Yi5wOHB1YmtleWhleD1jKGcsYVsyXSk7cmV0dXJuIGJ9O0tFWVVUSUwuZ2V0SldLRnJvbUtleT1mdW5jdGlvbihkKXt2YXIgYj17fTtpZihkIGluc3RhbmNlb2YgUlNBS2V5JiZkLmlzUHJpdmF0ZSl7Yi5rdHk9XCJSU0FcIjtiLm49aGV4dG9iNjR1KGQubi50b1N0cmluZygxNikpO2IuZT1oZXh0b2I2NHUoZC5lLnRvU3RyaW5nKDE2KSk7Yi5kPWhleHRvYjY0dShkLmQudG9TdHJpbmcoMTYpKTtiLnA9aGV4dG9iNjR1KGQucC50b1N0cmluZygxNikpO2IucT1oZXh0b2I2NHUoZC5xLnRvU3RyaW5nKDE2KSk7Yi5kcD1oZXh0b2I2NHUoZC5kbXAxLnRvU3RyaW5nKDE2KSk7Yi5kcT1oZXh0b2I2NHUoZC5kbXExLnRvU3RyaW5nKDE2KSk7Yi5xaT1oZXh0b2I2NHUoZC5jb2VmZi50b1N0cmluZygxNikpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIFJTQUtleSYmZC5pc1B1YmxpYyl7Yi5rdHk9XCJSU0FcIjtiLm49aGV4dG9iNjR1KGQubi50b1N0cmluZygxNikpO2IuZT1oZXh0b2I2NHUoZC5lLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGJ9ZWxzZXtpZihkIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0EmJmQuaXNQcml2YXRlKXt2YXIgYT1kLmdldFNob3J0TklTVFBDdXJ2ZU5hbWUoKTtpZihhIT09XCJQLTI1NlwiJiZhIT09XCJQLTM4NFwiKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithfXZhciBjPWQuZ2V0UHVibGljS2V5WFlIZXgoKTtiLmt0eT1cIkVDXCI7Yi5jcnY9YTtiLng9aGV4dG9iNjR1KGMueCk7Yi55PWhleHRvYjY0dShjLnkpO2IuZD1oZXh0b2I2NHUoZC5wcnZLZXlIZXgpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBJiZkLmlzUHVibGljKXt2YXIgYT1kLmdldFNob3J0TklTVFBDdXJ2ZU5hbWUoKTtpZihhIT09XCJQLTI1NlwiJiZhIT09XCJQLTM4NFwiKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithfXZhciBjPWQuZ2V0UHVibGljS2V5WFlIZXgoKTtiLmt0eT1cIkVDXCI7Yi5jcnY9YTtiLng9aGV4dG9iNjR1KGMueCk7Yi55PWhleHRvYjY0dShjLnkpO3JldHVybiBifX19fXRocm93XCJub3Qgc3VwcG9ydGVkIGtleSBvYmplY3RcIn07XG5SU0FLZXkuZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleD1mdW5jdGlvbihhKXtyZXR1cm4gQVNOMUhFWC5nZXRDaGlsZElkeChhLDApfTtSU0FLZXkuZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4PWZ1bmN0aW9uKGYpe3ZhciBuPUFTTjFIRVg7dmFyIGk9bi5nZXRWO3ZhciBrPVJTQUtleS5nZXRQb3NBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4KGYpO3ZhciBlPWkoZixrWzBdKTt2YXIgaj1pKGYsa1sxXSk7dmFyIGI9aShmLGtbMl0pO3ZhciBjPWkoZixrWzNdKTt2YXIgaD1pKGYsa1s0XSk7dmFyIGc9aShmLGtbNV0pO3ZhciBtPWkoZixrWzZdKTt2YXIgbD1pKGYsa1s3XSk7dmFyIGQ9aShmLGtbOF0pO3ZhciBrPW5ldyBBcnJheSgpO2sucHVzaChlLGosYixjLGgsZyxtLGwsZCk7cmV0dXJuIGt9O1JTQUtleS5wcm90b3R5cGUucmVhZFByaXZhdGVLZXlGcm9tUEVNU3RyaW5nPWZ1bmN0aW9uKGQpe3ZhciBjPXBlbXRvaGV4KGQpO3ZhciBiPVJTQUtleS5nZXRIZXhWYWx1ZUFycmF5T2ZDaGlsZHJlbkZyb21IZXgoYyk7dGhpcy5zZXRQcml2YXRlRXgoYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdLGJbNl0sYls3XSxiWzhdKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzVQcnZLZXlIZXg9ZnVuY3Rpb24oYyl7dmFyIGI9UlNBS2V5LmdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleChjKTt0aGlzLnNldFByaXZhdGVFeChiWzFdLGJbMl0sYlszXSxiWzRdLGJbNV0sYls2XSxiWzddLGJbOF0pfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTOFBydktleUhleD1mdW5jdGlvbihlKXt2YXIgYyxqLGwsYixhLGYsZCxrO3ZhciBtPUFTTjFIRVg7dmFyIGc9bS5nZXRWYnlMaXN0O2lmKG0uaXNBU04xSEVYKGUpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXRyeXtjPWcoZSwwLFsyLDAsMV0sXCIwMlwiKTtqPWcoZSwwLFsyLDAsMl0sXCIwMlwiKTtsPWcoZSwwLFsyLDAsM10sXCIwMlwiKTtiPWcoZSwwLFsyLDAsNF0sXCIwMlwiKTthPWcoZSwwLFsyLDAsNV0sXCIwMlwiKTtmPWcoZSwwLFsyLDAsNl0sXCIwMlwiKTtkPWcoZSwwLFsyLDAsN10sXCIwMlwiKTtrPWcoZSwwLFsyLDAsOF0sXCIwMlwiKX1jYXRjaChpKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjOCBwbGFpbiBSU0EgcHJpdmF0ZSBrZXlcIn10aGlzLnNldFByaXZhdGVFeChjLGosbCxiLGEsZixkLGspfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTNVB1YktleUhleD1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBiPWUuZ2V0VjtpZihlLmlzQVNOMUhFWChjKT09PWZhbHNlKXt0aHJvd1wia2V5SGV4IGlzIG5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGE9ZS5nZXRDaGlsZElkeChjLDApO2lmKGEubGVuZ3RoIT09Mnx8Yy5zdWJzdHIoYVswXSwyKSE9PVwiMDJcInx8Yy5zdWJzdHIoYVsxXSwyKSE9PVwiMDJcIil7dGhyb3dcIndyb25nIGhleCBmb3IgUEtDUyM1IHB1YmxpYyBrZXlcIn12YXIgZj1iKGMsYVswXSk7dmFyIGQ9YihjLGFbMV0pO3RoaXMuc2V0UHVibGljKGYsZCl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKGIpe3ZhciBjPUFTTjFIRVg7aWYoYy5pc0FTTjFIRVgoYik9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9aWYoYy5nZXRUTFZieUxpc3QoYiwwLFswLDBdKSE9PVwiMDYwOTJhODY0ODg2ZjcwZDAxMDEwMVwiKXt0aHJvd1wibm90IFBLQ1M4IFJTQSBwdWJsaWMga2V5XCJ9dmFyIGE9Yy5nZXRUTFZieUxpc3QoYiwwLFsxLDBdKTt0aGlzLnJlYWRQS0NTNVB1YktleUhleChhKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkQ2VydFB1YktleUhleD1mdW5jdGlvbihiLGQpe3ZhciBhLGM7YT1uZXcgWDUwOSgpO2EucmVhZENlcnRIZXgoYik7Yz1hLmdldFB1YmxpY0tleUhleCgpO3RoaXMucmVhZFBLQ1M4UHViS2V5SGV4KGMpfTtcbnZhciBfUkVfSEVYREVDT05MWT1uZXcgUmVnRXhwKFwiXCIpO19SRV9IRVhERUNPTkxZLmNvbXBpbGUoXCJbXjAtOWEtZl1cIixcImdpXCIpO2Z1bmN0aW9uIF9yc2FzaWduX2dldEhleFBhZGRlZERpZ2VzdEluZm9Gb3JTdHJpbmcoZCxlLGEpe3ZhciBiPWZ1bmN0aW9uKGYpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcoZixhKX07dmFyIGM9YihkKTtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5nZXRQYWRkZWREaWdlc3RJbmZvSGV4KGMsYSxlKX1mdW5jdGlvbiBfemVyb1BhZGRpbmdPZlNpZ25hdHVyZShlLGQpe3ZhciBjPVwiXCI7dmFyIGE9ZC80LWUubGVuZ3RoO2Zvcih2YXIgYj0wO2I8YTtiKyspe2M9YytcIjBcIn1yZXR1cm4gYytlfVJTQUtleS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihkLGEpe3ZhciBiPWZ1bmN0aW9uKGUpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcoZSxhKX07dmFyIGM9YihkKTtyZXR1cm4gdGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoKGMsYSl9O1JTQUtleS5wcm90b3R5cGUuc2lnbldpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihlLGMpe3ZhciBmPUtKVVIuY3J5cHRvLlV0aWwuZ2V0UGFkZGVkRGlnZXN0SW5mb0hleChlLGMsdGhpcy5uLmJpdExlbmd0aCgpKTt2YXIgYj1wYXJzZUJpZ0ludChmLDE2KTt2YXIgZD10aGlzLmRvUHJpdmF0ZShiKTt2YXIgYT1kLnRvU3RyaW5nKDE2KTtyZXR1cm4gX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUoYSx0aGlzLm4uYml0TGVuZ3RoKCkpfTtmdW5jdGlvbiBwc3NfbWdmMV9zdHIoYyxhLGUpe3ZhciBiPVwiXCIsZD0wO3doaWxlKGIubGVuZ3RoPGEpe2IrPWhleHRvcnN0cihlKHJzdHJ0b2hleChjK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLFsoZCY0Mjc4MTkwMDgwKT4+MjQsKGQmMTY3MTE2ODApPj4xNiwoZCY2NTI4MCk+PjgsZCYyNTVdKSkpKTtkKz0xfXJldHVybiBifVJTQUtleS5wcm90b3R5cGUuc2lnblBTUz1mdW5jdGlvbihlLGEsZCl7dmFyIGM9ZnVuY3Rpb24oZil7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChmLGEpfTt2YXIgYj1jKHJzdHJ0b2hleChlKSk7aWYoZD09PXVuZGVmaW5lZCl7ZD0tMX1yZXR1cm4gdGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoUFNTKGIsYSxkKX07UlNBS2V5LnByb3RvdHlwZS5zaWduV2l0aE1lc3NhZ2VIYXNoUFNTPWZ1bmN0aW9uKGwsYSxrKXt2YXIgYj1oZXh0b3JzdHIobCk7dmFyIGc9Yi5sZW5ndGg7dmFyIG09dGhpcy5uLmJpdExlbmd0aCgpLTE7dmFyIGM9TWF0aC5jZWlsKG0vOCk7dmFyIGQ7dmFyIG89ZnVuY3Rpb24oaSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChpLGEpfTtpZihrPT09LTF8fGs9PT11bmRlZmluZWQpe2s9Z31lbHNle2lmKGs9PT0tMil7az1jLWctMn1lbHNle2lmKGs8LTIpe3Rocm93XCJpbnZhbGlkIHNhbHQgbGVuZ3RoXCJ9fX1pZihjPChnK2srMikpe3Rocm93XCJkYXRhIHRvbyBsb25nXCJ9dmFyIGY9XCJcIjtpZihrPjApe2Y9bmV3IEFycmF5KGspO25ldyBTZWN1cmVSYW5kb20oKS5uZXh0Qnl0ZXMoZik7Zj1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxmKX12YXIgbj1oZXh0b3JzdHIobyhyc3RydG9oZXgoXCJcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXCIrYitmKSkpO3ZhciBqPVtdO2ZvcihkPTA7ZDxjLWstZy0yO2QrPTEpe2pbZF09MH12YXIgZT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxqKStcIlxceDAxXCIrZjt2YXIgaD1wc3NfbWdmMV9zdHIobixlLmxlbmd0aCxvKTt2YXIgcT1bXTtmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCs9MSl7cVtkXT1lLmNoYXJDb2RlQXQoZCleaC5jaGFyQ29kZUF0KGQpfXZhciBwPSg2NTI4MD4+KDgqYy1tKSkmMjU1O3FbMF0mPX5wO2ZvcihkPTA7ZDxnO2QrKyl7cS5wdXNoKG4uY2hhckNvZGVBdChkKSl9cS5wdXNoKDE4OCk7cmV0dXJuIF96ZXJvUGFkZGluZ09mU2lnbmF0dXJlKHRoaXMuZG9Qcml2YXRlKG5ldyBCaWdJbnRlZ2VyKHEpKS50b1N0cmluZygxNiksdGhpcy5uLmJpdExlbmd0aCgpKX07ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0RGVjcnlwdFNpZ25hdHVyZUJJKGEsZCxjKXt2YXIgYj1uZXcgUlNBS2V5KCk7Yi5zZXRQdWJsaWMoZCxjKTt2YXIgZT1iLmRvUHVibGljKGEpO3JldHVybiBlfWZ1bmN0aW9uIF9yc2FzaWduX2dldEhleERpZ2VzdEluZm9Gcm9tU2lnKGEsYyxiKXt2YXIgZT1fcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkoYSxjLGIpO3ZhciBkPWUudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14xZiswMC8sXCJcIik7cmV0dXJuIGR9ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0QWxnTmFtZUFuZEhhc2hGcm9tSGV4RGlzZ2VzdEluZm8oZil7Zm9yKHZhciBlIGluIEtKVVIuY3J5cHRvLlV0aWwuRElHRVNUSU5GT0hFQUQpe3ZhciBkPUtKVVIuY3J5cHRvLlV0aWwuRElHRVNUSU5GT0hFQURbZV07dmFyIGI9ZC5sZW5ndGg7aWYoZi5zdWJzdHJpbmcoMCxiKT09ZCl7dmFyIGM9W2UsZi5zdWJzdHJpbmcoYildO3JldHVybiBjfX1yZXR1cm5bXX1SU0FLZXkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihmLGope2o9ai5yZXBsYWNlKF9SRV9IRVhERUNPTkxZLFwiXCIpO2o9ai5yZXBsYWNlKC9bIFxcbl0rL2csXCJcIik7dmFyIGI9cGFyc2VCaWdJbnQoaiwxNik7aWYoYi5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiAwfXZhciBpPXRoaXMuZG9QdWJsaWMoYik7dmFyIGU9aS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgZz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhlKTtpZihnLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWdbMF07dmFyIGg9Z1sxXTt2YXIgYT1mdW5jdGlvbihrKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoU3RyaW5nKGssZCl9O3ZhciBjPWEoZik7cmV0dXJuKGg9PWMpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihlLGEpe2E9YS5yZXBsYWNlKF9SRV9IRVhERUNPTkxZLFwiXCIpO2E9YS5yZXBsYWNlKC9bIFxcbl0rL2csXCJcIik7dmFyIGI9cGFyc2VCaWdJbnQoYSwxNik7aWYoYi5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiAwfXZhciBoPXRoaXMuZG9QdWJsaWMoYik7dmFyIGc9aC50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgYz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhnKTtpZihjLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWNbMF07dmFyIGY9Y1sxXTtyZXR1cm4oZj09ZSl9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5UFNTPWZ1bmN0aW9uKGMsYixhLGYpe3ZhciBlPWZ1bmN0aW9uKGcpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoZyxhKX07dmFyIGQ9ZShyc3RydG9oZXgoYykpO2lmKGY9PT11bmRlZmluZWQpe2Y9LTF9cmV0dXJuIHRoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTKGQsYixhLGYpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUz1mdW5jdGlvbihmLHMsbCxjKXt2YXIgaz1uZXcgQmlnSW50ZWdlcihzLDE2KTtpZihrLmJpdExlbmd0aCgpPnRoaXMubi5iaXRMZW5ndGgoKSl7cmV0dXJuIGZhbHNlfXZhciByPWZ1bmN0aW9uKGkpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoaSxsKX07dmFyIGo9aGV4dG9yc3RyKGYpO3ZhciBoPWoubGVuZ3RoO3ZhciBnPXRoaXMubi5iaXRMZW5ndGgoKS0xO3ZhciBtPU1hdGguY2VpbChnLzgpO3ZhciBxO2lmKGM9PT0tMXx8Yz09PXVuZGVmaW5lZCl7Yz1ofWVsc2V7aWYoYz09PS0yKXtjPW0taC0yfWVsc2V7aWYoYzwtMil7dGhyb3dcImludmFsaWQgc2FsdCBsZW5ndGhcIn19fWlmKG08KGgrYysyKSl7dGhyb3dcImRhdGEgdG9vIGxvbmdcIn12YXIgYT10aGlzLmRvUHVibGljKGspLnRvQnl0ZUFycmF5KCk7Zm9yKHE9MDtxPGEubGVuZ3RoO3ErPTEpe2FbcV0mPTI1NX13aGlsZShhLmxlbmd0aDxtKXthLnVuc2hpZnQoMCl9aWYoYVttLTFdIT09MTg4KXt0aHJvd1wiZW5jb2RlZCBtZXNzYWdlIGRvZXMgbm90IGVuZCBpbiAweGJjXCJ9YT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTt2YXIgZD1hLnN1YnN0cigwLG0taC0xKTt2YXIgZT1hLnN1YnN0cihkLmxlbmd0aCxoKTt2YXIgcD0oNjUyODA+Pig4Km0tZykpJjI1NTtpZigoZC5jaGFyQ29kZUF0KDApJnApIT09MCl7dGhyb3dcImJpdHMgYmV5b25kIGtleXNpemUgbm90IHplcm9cIn12YXIgbj1wc3NfbWdmMV9zdHIoZSxkLmxlbmd0aCxyKTt2YXIgbz1bXTtmb3IocT0wO3E8ZC5sZW5ndGg7cSs9MSl7b1txXT1kLmNoYXJDb2RlQXQocSlebi5jaGFyQ29kZUF0KHEpfW9bMF0mPX5wO3ZhciBiPW0taC1jLTI7Zm9yKHE9MDtxPGI7cSs9MSl7aWYob1txXSE9PTApe3Rocm93XCJsZWZ0bW9zdCBvY3RldHMgbm90IHplcm9cIn19aWYob1tiXSE9PTEpe3Rocm93XCIweDAxIG1hcmtlciBub3QgZm91bmRcIn1yZXR1cm4gZT09PWhleHRvcnN0cihyKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitqK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLG8uc2xpY2UoLWMpKSkpKX07UlNBS2V5LlNBTFRfTEVOX0hMRU49LTE7UlNBS2V5LlNBTFRfTEVOX01BWD0tMjtSU0FLZXkuU0FMVF9MRU5fUkVDT1ZFUj0tMjtcbmZ1bmN0aW9uIFg1MDkoKXt2YXIgaz1BU04xSEVYLGo9ay5nZXRDaGlsZElkeCxoPWsuZ2V0VixiPWsuZ2V0VExWLGY9ay5nZXRWYnlMaXN0LGM9ay5nZXRUTFZieUxpc3QsZz1rLmdldElkeGJ5TGlzdCxkPWsuZ2V0VmlkeCxpPWsub2lkbmFtZSxhPVg1MDksZT1wZW10b2hleDt0aGlzLmhleD1udWxsO3RoaXMudmVyc2lvbj0wO3RoaXMuZm9mZnNldD0wO3RoaXMuYUV4dEluZm89bnVsbDt0aGlzLmdldFZlcnNpb249ZnVuY3Rpb24oKXtpZih0aGlzLmhleD09PW51bGx8fHRoaXMudmVyc2lvbiE9PTApe3JldHVybiB0aGlzLnZlcnNpb259aWYoYyh0aGlzLmhleCwwLFswLDBdKSE9PVwiYTAwMzAyMDEwMlwiKXt0aGlzLnZlcnNpb249MTt0aGlzLmZvZmZzZXQ9LTE7cmV0dXJuIDF9dGhpcy52ZXJzaW9uPTM7cmV0dXJuIDN9O3RoaXMuZ2V0U2VyaWFsTnVtYmVySGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcy5oZXgsMCxbMCwxK3RoaXMuZm9mZnNldF0sXCIwMlwiKX07dGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZD1mdW5jdGlvbigpe3JldHVybiBpKGYodGhpcy5oZXgsMCxbMCwyK3RoaXMuZm9mZnNldCwwXSxcIjA2XCIpKX07dGhpcy5nZXRJc3N1ZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLmhleCwwLFswLDMrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldElzc3VlclN0cmluZz1mdW5jdGlvbigpe3JldHVybiBhLmhleDJkbih0aGlzLmdldElzc3VlckhleCgpKX07dGhpcy5nZXRTdWJqZWN0SGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy5oZXgsMCxbMCw1K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRTdWJqZWN0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGEuaGV4MmRuKHRoaXMuZ2V0U3ViamVjdEhleCgpKX07dGhpcy5nZXROb3RCZWZvcmU9ZnVuY3Rpb24oKXt2YXIgbD1mKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMF0pO2w9bC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7bD1kZWNvZGVVUklDb21wb25lbnQobCk7cmV0dXJuIGx9O3RoaXMuZ2V0Tm90QWZ0ZXI9ZnVuY3Rpb24oKXt2YXIgbD1mKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMV0pO2w9bC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7bD1kZWNvZGVVUklDb21wb25lbnQobCk7cmV0dXJuIGx9O3RoaXMuZ2V0UHVibGljS2V5SGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGsuZ2V0VExWYnlMaXN0KHRoaXMuaGV4LDAsWzAsNit0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5SWR4PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5oZXgsMCxbMCw2K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXlDb250ZW50SWR4PWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5nZXRQdWJsaWNLZXlJZHgoKTtyZXR1cm4gZyh0aGlzLmhleCxsLFsxLDBdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIEtFWVVUSUwuZ2V0S2V5KHRoaXMuZ2V0UHVibGljS2V5SGV4KCksbnVsbCxcInBrY3M4cHViXCIpfTt0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gaShmKHRoaXMuaGV4LDAsWzEsMF0sXCIwNlwiKSl9O3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzLmhleCwwLFsyXSxcIjAzXCIsdHJ1ZSl9O3RoaXMudmVyaWZ5U2lnbmF0dXJlPWZ1bmN0aW9uKG4pe3ZhciBvPXRoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZSgpO3ZhciBsPXRoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXgoKTt2YXIgbT1jKHRoaXMuaGV4LDAsWzBdLFwiMzBcIik7dmFyIHA9bmV3IEtKVVIuY3J5cHRvLlNpZ25hdHVyZSh7YWxnOm99KTtwLmluaXQobik7cC51cGRhdGVIZXgobSk7cmV0dXJuIHAudmVyaWZ5KGwpfTt0aGlzLnBhcnNlRXh0PWZ1bmN0aW9uKCl7aWYodGhpcy52ZXJzaW9uIT09Myl7cmV0dXJuIC0xfXZhciBwPWcodGhpcy5oZXgsMCxbMCw3LDBdLFwiMzBcIik7dmFyIG09aih0aGlzLmhleCxwKTt0aGlzLmFFeHRJbmZvPW5ldyBBcnJheSgpO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXt2YXIgcT17fTtxLmNyaXRpY2FsPWZhbHNlO3ZhciBsPWoodGhpcy5oZXgsbVtuXSk7dmFyIHI9MDtpZihsLmxlbmd0aD09PTMpe3EuY3JpdGljYWw9dHJ1ZTtyPTF9cS5vaWQ9ay5oZXh0b29pZHN0cihmKHRoaXMuaGV4LG1bbl0sWzBdLFwiMDZcIikpO3ZhciBvPWcodGhpcy5oZXgsbVtuXSxbMStyXSk7cS52aWR4PWQodGhpcy5oZXgsbyk7dGhpcy5hRXh0SW5mby5wdXNoKHEpfX07dGhpcy5nZXRFeHRJbmZvPWZ1bmN0aW9uKG4pe3ZhciBsPXRoaXMuYUV4dEluZm87dmFyIG89bjtpZighbi5tYXRjaCgvXlswLTkuXSskLykpe289S0pVUi5hc24xLng1MDkuT0lELm5hbWUyb2lkKG4pfWlmKG89PT1cIlwiKXtyZXR1cm4gdW5kZWZpbmVkfWZvcih2YXIgbT0wO208bC5sZW5ndGg7bSsrKXtpZihsW21dLm9pZD09PW8pe3JldHVybiBsW21dfX1yZXR1cm4gdW5kZWZpbmVkfTt0aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLmdldEV4dEluZm8oXCJiYXNpY0NvbnN0cmFpbnRzXCIpO2lmKG49PT11bmRlZmluZWQpe3JldHVybiBufXZhciBsPWgodGhpcy5oZXgsbi52aWR4KTtpZihsPT09XCJcIil7cmV0dXJue319aWYobD09PVwiMDEwMWZmXCIpe3JldHVybntjQTp0cnVlfX1pZihsLnN1YnN0cigwLDgpPT09XCIwMTAxZmYwMlwiKXt2YXIgbz1oKGwsNik7dmFyIG09cGFyc2VJbnQobywxNik7cmV0dXJue2NBOnRydWUscGF0aExlbjptfX10aHJvd1wiYmFzaWNDb25zdHJhaW50cyBwYXJzZSBlcnJvclwifTt0aGlzLmdldEV4dEtleVVzYWdlQmluPWZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRFeHRJbmZvKFwia2V5VXNhZ2VcIik7aWYobz09PXVuZGVmaW5lZCl7cmV0dXJuXCJcIn12YXIgbT1oKHRoaXMuaGV4LG8udmlkeCk7aWYobS5sZW5ndGglMiE9MHx8bS5sZW5ndGg8PTIpe3Rocm93XCJtYWxmb3JtZWQga2V5IHVzYWdlIHZhbHVlXCJ9dmFyIGw9cGFyc2VJbnQobS5zdWJzdHIoMCwyKSk7dmFyIG49cGFyc2VJbnQobS5zdWJzdHIoMiksMTYpLnRvU3RyaW5nKDIpO3JldHVybiBuLnN1YnN0cigwLG4ubGVuZ3RoLWwpfTt0aGlzLmdldEV4dEtleVVzYWdlU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5nZXRFeHRLZXlVc2FnZUJpbigpO3ZhciBsPW5ldyBBcnJheSgpO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXtpZihuLnN1YnN0cihtLDEpPT1cIjFcIil7bC5wdXNoKFg1MDkuS0VZVVNBR0VfTkFNRVttXSl9fXJldHVybiBsLmpvaW4oXCIsXCIpfTt0aGlzLmdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5nZXRFeHRJbmZvKFwic3ViamVjdEtleUlkZW50aWZpZXJcIik7aWYobD09PXVuZGVmaW5lZCl7cmV0dXJuIGx9cmV0dXJuIGgodGhpcy5oZXgsbC52aWR4KX07dGhpcy5nZXRFeHRBdXRob3JpdHlLZXlJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5nZXRFeHRJbmZvKFwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwiKTtpZihwPT09dW5kZWZpbmVkKXtyZXR1cm4gcH12YXIgbD17fTt2YXIgbz1iKHRoaXMuaGV4LHAudmlkeCk7dmFyIG09aihvLDApO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtpZihvLnN1YnN0cihtW25dLDIpPT09XCI4MFwiKXtsLmtpZD1oKG8sbVtuXSl9fXJldHVybiBsfTt0aGlzLmdldEV4dEV4dEtleVVzYWdlTmFtZT1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ2V0RXh0SW5mbyhcImV4dEtleVVzYWdlXCIpO2lmKHA9PT11bmRlZmluZWQpe3JldHVybiBwfXZhciBsPW5ldyBBcnJheSgpO3ZhciBvPWIodGhpcy5oZXgscC52aWR4KTtpZihvPT09XCJcIil7cmV0dXJuIGx9dmFyIG09aihvLDApO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtsLnB1c2goaShoKG8sbVtuXSkpKX1yZXR1cm4gbH07dGhpcy5nZXRFeHRTdWJqZWN0QWx0TmFtZT1mdW5jdGlvbigpe3ZhciBtPXRoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyKCk7dmFyIGw9bmV3IEFycmF5KCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe2lmKG1bbl1bMF09PT1cIkROU1wiKXtsLnB1c2gobVtuXVsxXSl9fXJldHVybiBsfTt0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lMj1mdW5jdGlvbigpe3ZhciBwLHMscjt2YXIgcT10aGlzLmdldEV4dEluZm8oXCJzdWJqZWN0QWx0TmFtZVwiKTtpZihxPT09dW5kZWZpbmVkKXtyZXR1cm4gcX12YXIgbD1uZXcgQXJyYXkoKTt2YXIgbz1iKHRoaXMuaGV4LHEudmlkeCk7dmFyIG09aihvLDApO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtyPW8uc3Vic3RyKG1bbl0sMik7cD1oKG8sbVtuXSk7aWYocj09PVwiODFcIil7cz1oZXh0b3V0ZjgocCk7bC5wdXNoKFtcIk1BSUxcIixzXSl9aWYocj09PVwiODJcIil7cz1oZXh0b3V0ZjgocCk7bC5wdXNoKFtcIkROU1wiLHNdKX1pZihyPT09XCI4NFwiKXtzPVg1MDkuaGV4MmRuKHAsMCk7bC5wdXNoKFtcIkROXCIsc10pfWlmKHI9PT1cIjg2XCIpe3M9aGV4dG91dGY4KHApO2wucHVzaChbXCJVUklcIixzXSl9aWYocj09PVwiODdcIil7cz1oZXh0b2lwKHApO2wucHVzaChbXCJJUFwiLHNdKX19cmV0dXJuIGx9O3RoaXMuZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5nZXRFeHRJbmZvKFwiY1JMRGlzdHJpYnV0aW9uUG9pbnRzXCIpO2lmKHE9PT11bmRlZmluZWQpe3JldHVybiBxfXZhciBsPW5ldyBBcnJheSgpO3ZhciBtPWoodGhpcy5oZXgscS52aWR4KTtmb3IodmFyIG89MDtvPG0ubGVuZ3RoO28rKyl7dHJ5e3ZhciByPWYodGhpcy5oZXgsbVtvXSxbMCwwLDBdLFwiODZcIik7dmFyIHA9aGV4dG91dGY4KHIpO2wucHVzaChwKX1jYXRjaChuKXt9fXJldHVybiBsfTt0aGlzLmdldEV4dEFJQUluZm89ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdldEV4dEluZm8oXCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpO2lmKHA9PT11bmRlZmluZWQpe3JldHVybiBwfXZhciBsPXtvY3NwOltdLGNhaXNzdWVyOltdfTt2YXIgbT1qKHRoaXMuaGV4LHAudmlkeCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe3ZhciBxPWYodGhpcy5oZXgsbVtuXSxbMF0sXCIwNlwiKTt2YXIgbz1mKHRoaXMuaGV4LG1bbl0sWzFdLFwiODZcIik7aWYocT09PVwiMmIwNjAxMDUwNTA3MzAwMVwiKXtsLm9jc3AucHVzaChoZXh0b3V0ZjgobykpfWlmKHE9PT1cIjJiMDYwMTA1MDUwNzMwMDJcIil7bC5jYWlzc3Vlci5wdXNoKGhleHRvdXRmOChvKSl9fXJldHVybiBsfTt0aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXM9ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEV4dEluZm8oXCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpO2lmKG89PT11bmRlZmluZWQpe3JldHVybiBvfXZhciBsPWIodGhpcy5oZXgsby52aWR4KTt2YXIgdT1bXTt2YXIgcz1qKGwsMCk7Zm9yKHZhciByPTA7cjxzLmxlbmd0aDtyKyspe3ZhciB0PXt9O3ZhciBuPWoobCxzW3JdKTt0LmlkPWkoaChsLG5bMF0pKTtpZihuLmxlbmd0aD09PTIpe3ZhciBtPWoobCxuWzFdKTtmb3IodmFyIHE9MDtxPG0ubGVuZ3RoO3ErKyl7dmFyIHA9ZihsLG1bcV0sWzBdLFwiMDZcIik7aWYocD09PVwiMmIwNjAxMDUwNTA3MDIwMVwiKXt0LmNwcz1oZXh0b3V0ZjgoZihsLG1bcV0sWzFdKSl9ZWxzZXtpZihwPT09XCIyYjA2MDEwNTA1MDcwMjAyXCIpe3QudW5vdGljZT1oZXh0b3V0ZjgoZihsLG1bcV0sWzEsMF0pKX19fX11LnB1c2godCl9cmV0dXJuIHV9O3RoaXMucmVhZENlcnRQRU09ZnVuY3Rpb24obCl7dGhpcy5yZWFkQ2VydEhleChlKGwpKX07dGhpcy5yZWFkQ2VydEhleD1mdW5jdGlvbihsKXt0aGlzLmhleD1sO3RoaXMuZ2V0VmVyc2lvbigpO3RyeXtnKHRoaXMuaGV4LDAsWzAsN10sXCJhM1wiKTt0aGlzLnBhcnNlRXh0KCl9Y2F0Y2gobSl7fX07dGhpcy5nZXRJbmZvPWZ1bmN0aW9uKCl7dmFyIG09WDUwOTt2YXIgQix1LHo7Qj1cIkJhc2ljIEZpZWxkc1xcblwiO0IrPVwiICBzZXJpYWwgbnVtYmVyOiBcIit0aGlzLmdldFNlcmlhbE51bWJlckhleCgpK1wiXFxuXCI7Qis9XCIgIHNpZ25hdHVyZSBhbGdvcml0aG06IFwiK3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQoKStcIlxcblwiO0IrPVwiICBpc3N1ZXI6IFwiK3RoaXMuZ2V0SXNzdWVyU3RyaW5nKCkrXCJcXG5cIjtCKz1cIiAgbm90QmVmb3JlOiBcIit0aGlzLmdldE5vdEJlZm9yZSgpK1wiXFxuXCI7Qis9XCIgIG5vdEFmdGVyOiBcIit0aGlzLmdldE5vdEFmdGVyKCkrXCJcXG5cIjtCKz1cIiAgc3ViamVjdDogXCIrdGhpcy5nZXRTdWJqZWN0U3RyaW5nKCkrXCJcXG5cIjtCKz1cIiAgc3ViamVjdCBwdWJsaWMga2V5IGluZm86IFxcblwiO3U9dGhpcy5nZXRQdWJsaWNLZXkoKTtCKz1cIiAgICBrZXkgYWxnb3JpdGhtOiBcIit1LnR5cGUrXCJcXG5cIjtpZih1LnR5cGU9PT1cIlJTQVwiKXtCKz1cIiAgICBuPVwiK2hleHRvcG9zaGV4KHUubi50b1N0cmluZygxNikpLnN1YnN0cigwLDE2KStcIi4uLlxcblwiO0IrPVwiICAgIGU9XCIraGV4dG9wb3NoZXgodS5lLnRvU3RyaW5nKDE2KSkrXCJcXG5cIn16PXRoaXMuYUV4dEluZm87aWYoeiE9PXVuZGVmaW5lZCYmeiE9PW51bGwpe0IrPVwiWDUwOXYzIEV4dGVuc2lvbnM6XFxuXCI7Zm9yKHZhciByPTA7cjx6Lmxlbmd0aDtyKyspe3ZhciBuPXpbcl07dmFyIEE9S0pVUi5hc24xLng1MDkuT0lELm9pZDJuYW1lKG4ub2lkKTtpZihBPT09XCJcIil7QT1uLm9pZH12YXIgeD1cIlwiO2lmKG4uY3JpdGljYWw9PT10cnVlKXt4PVwiQ1JJVElDQUxcIn1CKz1cIiAgXCIrQStcIiBcIit4K1wiOlxcblwiO2lmKEE9PT1cImJhc2ljQ29uc3RyYWludHNcIil7dmFyIHY9dGhpcy5nZXRFeHRCYXNpY0NvbnN0cmFpbnRzKCk7aWYodi5jQT09PXVuZGVmaW5lZCl7Qis9XCIgICAge31cXG5cIn1lbHNle0IrPVwiICAgIGNBPXRydWVcIjtpZih2LnBhdGhMZW4hPT11bmRlZmluZWQpe0IrPVwiLCBwYXRoTGVuPVwiK3YucGF0aExlbn1CKz1cIlxcblwifX1lbHNle2lmKEE9PT1cImtleVVzYWdlXCIpe0IrPVwiICAgIFwiK3RoaXMuZ2V0RXh0S2V5VXNhZ2VTdHJpbmcoKStcIlxcblwifWVsc2V7aWYoQT09PVwic3ViamVjdEtleUlkZW50aWZpZXJcIil7Qis9XCIgICAgXCIrdGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcigpK1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJhdXRob3JpdHlLZXlJZGVudGlmaWVyXCIpe3ZhciBsPXRoaXMuZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllcigpO2lmKGwua2lkIT09dW5kZWZpbmVkKXtCKz1cIiAgICBraWQ9XCIrbC5raWQrXCJcXG5cIn19ZWxzZXtpZihBPT09XCJleHRLZXlVc2FnZVwiKXt2YXIgdz10aGlzLmdldEV4dEV4dEtleVVzYWdlTmFtZSgpO0IrPVwiICAgIFwiK3cuam9pbihcIiwgXCIpK1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJzdWJqZWN0QWx0TmFtZVwiKXt2YXIgdD10aGlzLmdldEV4dFN1YmplY3RBbHROYW1lMigpO0IrPVwiICAgIFwiK3QrXCJcXG5cIn1lbHNle2lmKEE9PT1cImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKXt2YXIgeT10aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50c1VSSSgpO0IrPVwiICAgIFwiK3krXCJcXG5cIn1lbHNle2lmKEE9PT1cImF1dGhvcml0eUluZm9BY2Nlc3NcIil7dmFyIHA9dGhpcy5nZXRFeHRBSUFJbmZvKCk7aWYocC5vY3NwIT09dW5kZWZpbmVkKXtCKz1cIiAgICBvY3NwOiBcIitwLm9jc3Auam9pbihcIixcIikrXCJcXG5cIn1pZihwLmNhaXNzdWVyIT09dW5kZWZpbmVkKXtCKz1cIiAgICBjYWlzc3VlcjogXCIrcC5jYWlzc3Vlci5qb2luKFwiLFwiKStcIlxcblwifX1lbHNle2lmKEE9PT1cImNlcnRpZmljYXRlUG9saWNpZXNcIil7dmFyIG89dGhpcy5nZXRFeHRDZXJ0aWZpY2F0ZVBvbGljaWVzKCk7Zm9yKHZhciBxPTA7cTxvLmxlbmd0aDtxKyspe2lmKG9bcV0uaWQhPT11bmRlZmluZWQpe0IrPVwiICAgIHBvbGljeSBvaWQ6IFwiK29bcV0uaWQrXCJcXG5cIn1pZihvW3FdLmNwcyE9PXVuZGVmaW5lZCl7Qis9XCIgICAgY3BzOiBcIitvW3FdLmNwcytcIlxcblwifX19fX19fX19fX19fUIrPVwic2lnbmF0dXJlIGFsZ29yaXRobTogXCIrdGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1OYW1lKCkrXCJcXG5cIjtCKz1cInNpZ25hdHVyZTogXCIrdGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleCgpLnN1YnN0cigwLDE2KStcIi4uLlxcblwiO3JldHVybiBCfX1YNTA5LmhleDJkbj1mdW5jdGlvbihmLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH1pZihmLnN1YnN0cihiLDIpIT09XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIEROXCJ9dmFyIGM9bmV3IEFycmF5KCk7dmFyIGQ9QVNOMUhFWC5nZXRDaGlsZElkeChmLGIpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtjLnB1c2goWDUwOS5oZXgycmRuKGYsZFtlXSkpfWM9Yy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShcIi9cIixcIlxcXFwvXCIpfSk7cmV0dXJuXCIvXCIrYy5qb2luKFwiL1wiKX07WDUwOS5oZXgycmRuPWZ1bmN0aW9uKGYsYil7aWYoYj09PXVuZGVmaW5lZCl7Yj0wfWlmKGYuc3Vic3RyKGIsMikhPT1cIjMxXCIpe3Rocm93XCJtYWxmb3JtZWQgUkROXCJ9dmFyIGM9bmV3IEFycmF5KCk7dmFyIGQ9QVNOMUhFWC5nZXRDaGlsZElkeChmLGIpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtjLnB1c2goWDUwOS5oZXgyYXR0clR5cGVWYWx1ZShmLGRbZV0pKX1jPWMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoXCIrXCIsXCJcXFxcK1wiKX0pO3JldHVybiBjLmpvaW4oXCIrXCIpfTtYNTA5LmhleDJhdHRyVHlwZVZhbHVlPWZ1bmN0aW9uKGQsaSl7dmFyIGo9QVNOMUhFWDt2YXIgaD1qLmdldFY7aWYoaT09PXVuZGVmaW5lZCl7aT0wfWlmKGQuc3Vic3RyKGksMikhPT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgYXR0cmlidXRlIHR5cGUgYW5kIHZhbHVlXCJ9dmFyIGc9ai5nZXRDaGlsZElkeChkLGkpO2lmKGcubGVuZ3RoIT09Mnx8ZC5zdWJzdHIoZ1swXSwyKSE9PVwiMDZcIil7XCJtYWxmb3JtZWQgYXR0cmlidXRlIHR5cGUgYW5kIHZhbHVlXCJ9dmFyIGI9aChkLGdbMF0pO3ZhciBmPUtKVVIuYXNuMS5BU04xVXRpbC5vaWRIZXhUb0ludChiKTt2YXIgZT1LSlVSLmFzbjEueDUwOS5PSUQub2lkMmF0eXBlKGYpO3ZhciBhPWgoZCxnWzFdKTt2YXIgYz1oZXh0b3JzdHIoYSk7cmV0dXJuIGUrXCI9XCIrY307WDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydEhleD1mdW5jdGlvbihiKXt2YXIgYT1uZXcgWDUwOSgpO2EucmVhZENlcnRIZXgoYik7cmV0dXJuIGEuZ2V0UHVibGljS2V5KCl9O1g1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRQRU09ZnVuY3Rpb24oYil7dmFyIGE9bmV3IFg1MDkoKTthLnJlYWRDZXJ0UEVNKGIpO3JldHVybiBhLmdldFB1YmxpY0tleSgpfTtYNTA5LmdldFB1YmxpY0tleUluZm9Qcm9wT2ZDZXJ0UEVNPWZ1bmN0aW9uKGMpe3ZhciBlPUFTTjFIRVg7dmFyIGc9ZS5nZXRWYnlMaXN0O3ZhciBiPXt9O3ZhciBhLGYsZDtiLmFsZ3BhcmFtPW51bGw7YT1uZXcgWDUwOSgpO2EucmVhZENlcnRQRU0oYyk7Zj1hLmdldFB1YmxpY0tleUhleCgpO2Iua2V5aGV4PWcoZiwwLFsxXSxcIjAzXCIpLnN1YnN0cigyKTtiLmFsZ29pZD1nKGYsMCxbMCwwXSxcIjA2XCIpO2lmKGIuYWxnb2lkPT09XCIyYTg2NDhjZTNkMDIwMVwiKXtiLmFsZ3BhcmFtPWcoZiwwLFswLDFdLFwiMDZcIil9cmV0dXJuIGJ9O1g1MDkuS0VZVVNBR0VfTkFNRT1bXCJkaWdpdGFsU2lnbmF0dXJlXCIsXCJub25SZXB1ZGlhdGlvblwiLFwia2V5RW5jaXBoZXJtZW50XCIsXCJkYXRhRW5jaXBoZXJtZW50XCIsXCJrZXlBZ3JlZW1lbnRcIixcImtleUNlcnRTaWduXCIsXCJjUkxTaWduXCIsXCJlbmNpcGhlck9ubHlcIixcImRlY2lwaGVyT25seVwiXTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5qd3M9PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmp3cyl7S0pVUi5qd3M9e319S0pVUi5qd3MuSldTPWZ1bmN0aW9uKCl7dmFyIGI9S0pVUixhPWIuandzLkpXUyxjPWEuaXNTYWZlSlNPTlN0cmluZzt0aGlzLnBhcnNlSldTPWZ1bmN0aW9uKGcsail7aWYoKHRoaXMucGFyc2VkSldTIT09dW5kZWZpbmVkKSYmKGp8fCh0aGlzLnBhcnNlZEpXUy5zaWd2YWxIIT09dW5kZWZpbmVkKSkpe3JldHVybn12YXIgaT1nLm1hdGNoKC9eKFteLl0rKVxcLihbXi5dKylcXC4oW14uXSspJC8pO2lmKGk9PW51bGwpe3Rocm93XCJKV1Mgc2lnbmF0dXJlIGlzIG5vdCBhIGZvcm0gb2YgJ0hlYWQuUGF5bG9hZC5TaWdWYWx1ZScuXCJ9dmFyIGs9aVsxXTt2YXIgZT1pWzJdO3ZhciBsPWlbM107dmFyIG49aytcIi5cIitlO3RoaXMucGFyc2VkSldTPXt9O3RoaXMucGFyc2VkSldTLmhlYWRCNjRVPWs7dGhpcy5wYXJzZWRKV1MucGF5bG9hZEI2NFU9ZTt0aGlzLnBhcnNlZEpXUy5zaWd2YWxCNjRVPWw7dGhpcy5wYXJzZWRKV1Muc2k9bjtpZighail7dmFyIGg9YjY0dXRvaGV4KGwpO3ZhciBmPXBhcnNlQmlnSW50KGgsMTYpO3RoaXMucGFyc2VkSldTLnNpZ3ZhbEg9aDt0aGlzLnBhcnNlZEpXUy5zaWd2YWxCST1mfXZhciBkPWI2NHV0b3V0Zjgoayk7dmFyIG09YjY0dXRvdXRmOChlKTt0aGlzLnBhcnNlZEpXUy5oZWFkUz1kO3RoaXMucGFyc2VkSldTLnBheWxvYWRTPW07aWYoIWMoZCx0aGlzLnBhcnNlZEpXUyxcImhlYWRQXCIpKXt0aHJvd1wibWFsZm9ybWVkIEpTT04gc3RyaW5nIGZvciBKV1MgSGVhZDogXCIrZH19fTtLSlVSLmp3cy5KV1Muc2lnbj1mdW5jdGlvbihpLHYseSx6LGEpe3ZhciB3PUtKVVIsbT13Lmp3cyxxPW0uSldTLGc9cS5yZWFkU2FmZUpTT05TdHJpbmcscD1xLmlzU2FmZUpTT05TdHJpbmcsZD13LmNyeXB0byxrPWQuRUNEU0Esbz1kLk1hYyxjPWQuU2lnbmF0dXJlLHQ9SlNPTjt2YXIgcyxqLG47aWYodHlwZW9mIHYhPVwic3RyaW5nXCImJnR5cGVvZiB2IT1cIm9iamVjdFwiKXt0aHJvd1wic3BIZWFkZXIgbXVzdCBiZSBKU09OIHN0cmluZyBvciBvYmplY3Q6IFwiK3Z9aWYodHlwZW9mIHY9PVwib2JqZWN0XCIpe2o9djtzPXQuc3RyaW5naWZ5KGopfWlmKHR5cGVvZiB2PT1cInN0cmluZ1wiKXtzPXY7aWYoIXAocykpe3Rocm93XCJKV1MgSGVhZCBpcyBub3Qgc2FmZSBKU09OIHN0cmluZzogXCIrc31qPWcocyl9bj15O2lmKHR5cGVvZiB5PT1cIm9iamVjdFwiKXtuPXQuc3RyaW5naWZ5KHkpfWlmKChpPT1cIlwifHxpPT1udWxsKSYmai5hbGchPT11bmRlZmluZWQpe2k9ai5hbGd9aWYoKGkhPVwiXCImJmkhPW51bGwpJiZqLmFsZz09PXVuZGVmaW5lZCl7ai5hbGc9aTtzPXQuc3RyaW5naWZ5KGopfWlmKGkhPT1qLmFsZyl7dGhyb3dcImFsZyBhbmQgc0hlYWRlci5hbGcgZG9lc24ndCBtYXRjaDogXCIraStcIiE9XCIrai5hbGd9dmFyIHI9bnVsbDtpZihxLmp3c2FsZzJzaWdhbGdbaV09PT11bmRlZmluZWQpe3Rocm93XCJ1bnN1cHBvcnRlZCBhbGcgbmFtZTogXCIraX1lbHNle3I9cS5qd3NhbGcyc2lnYWxnW2ldfXZhciBlPXV0Zjh0b2I2NHUocyk7dmFyIGw9dXRmOHRvYjY0dShuKTt2YXIgYj1lK1wiLlwiK2w7dmFyIHg9XCJcIjtpZihyLnN1YnN0cigwLDQpPT1cIkhtYWNcIil7aWYoej09PXVuZGVmaW5lZCl7dGhyb3dcIm1hYyBrZXkgc2hhbGwgYmUgc3BlY2lmaWVkIGZvciBIUyogYWxnXCJ9dmFyIGg9bmV3IG8oe2FsZzpyLHByb3Y6XCJjcnlwdG9qc1wiLHBhc3M6en0pO2gudXBkYXRlU3RyaW5nKGIpO3g9aC5kb0ZpbmFsKCl9ZWxzZXtpZihyLmluZGV4T2YoXCJ3aXRoRUNEU0FcIikhPS0xKXt2YXIgZj1uZXcgYyh7YWxnOnJ9KTtmLmluaXQoeixhKTtmLnVwZGF0ZVN0cmluZyhiKTtoQVNOMVNpZz1mLnNpZ24oKTt4PUtKVVIuY3J5cHRvLkVDRFNBLmFzbjFTaWdUb0NvbmNhdFNpZyhoQVNOMVNpZyl9ZWxzZXtpZihyIT1cIm5vbmVcIil7dmFyIGY9bmV3IGMoe2FsZzpyfSk7Zi5pbml0KHosYSk7Zi51cGRhdGVTdHJpbmcoYik7eD1mLnNpZ24oKX19fXZhciB1PWhleHRvYjY0dSh4KTtyZXR1cm4gYitcIi5cIit1fTtLSlVSLmp3cy5KV1MudmVyaWZ5PWZ1bmN0aW9uKHcsQixuKXt2YXIgeD1LSlVSLHE9eC5qd3MsdD1xLkpXUyxpPXQucmVhZFNhZmVKU09OU3RyaW5nLGU9eC5jcnlwdG8scD1lLkVDRFNBLHM9ZS5NYWMsZD1lLlNpZ25hdHVyZSxtO2lmKHR5cGVvZiBSU0FLZXkhPT11bmRlZmluZWQpe209UlNBS2V5fXZhciB5PXcuc3BsaXQoXCIuXCIpO2lmKHkubGVuZ3RoIT09Myl7cmV0dXJuIGZhbHNlfXZhciBmPXlbMF07dmFyIHI9eVsxXTt2YXIgYz1mK1wiLlwiK3I7dmFyIEE9YjY0dXRvaGV4KHlbMl0pO3ZhciBsPWkoYjY0dXRvdXRmOCh5WzBdKSk7dmFyIGs9bnVsbDt2YXIgej1udWxsO2lmKGwuYWxnPT09dW5kZWZpbmVkKXt0aHJvd1wiYWxnb3JpdGhtIG5vdCBzcGVjaWZpZWQgaW4gaGVhZGVyXCJ9ZWxzZXtrPWwuYWxnO3o9ay5zdWJzdHIoMCwyKX1pZihuIT1udWxsJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobik9PT1cIltvYmplY3QgQXJyYXldXCImJm4ubGVuZ3RoPjApe3ZhciBiPVwiOlwiK24uam9pbihcIjpcIikrXCI6XCI7aWYoYi5pbmRleE9mKFwiOlwiK2srXCI6XCIpPT0tMSl7dGhyb3dcImFsZ29yaXRobSAnXCIraytcIicgbm90IGFjY2VwdGVkIGluIHRoZSBsaXN0XCJ9fWlmKGshPVwibm9uZVwiJiZCPT09bnVsbCl7dGhyb3dcImtleSBzaGFsbCBiZSBzcGVjaWZpZWQgdG8gdmVyaWZ5LlwifWlmKHR5cGVvZiBCPT1cInN0cmluZ1wiJiZCLmluZGV4T2YoXCItLS0tLUJFR0lOIFwiKSE9LTEpe0I9S0VZVVRJTC5nZXRLZXkoQil9aWYoej09XCJSU1wifHx6PT1cIlBTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIG0pKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgUlNBS2V5IG9iaiBmb3IgUlMqIGFuZCBQUyogYWxnc1wifX1pZih6PT1cIkVTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIHApKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgRUNEU0Egb2JqIGZvciBFUyogYWxnc1wifX1pZihrPT1cIm5vbmVcIil7fXZhciB1PW51bGw7aWYodC5qd3NhbGcyc2lnYWxnW2wuYWxnXT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGFsZyBuYW1lOiBcIitrfWVsc2V7dT10Lmp3c2FsZzJzaWdhbGdba119aWYodT09XCJub25lXCIpe3Rocm93XCJub3Qgc3VwcG9ydGVkXCJ9ZWxzZXtpZih1LnN1YnN0cigwLDQpPT1cIkhtYWNcIil7dmFyIG89bnVsbDtpZihCPT09dW5kZWZpbmVkKXt0aHJvd1wiaGV4YWRlY2ltYWwga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSE1BQ1wifXZhciBqPW5ldyBzKHthbGc6dSxwYXNzOkJ9KTtqLnVwZGF0ZVN0cmluZyhjKTtvPWouZG9GaW5hbCgpO3JldHVybiBBPT1vfWVsc2V7aWYodS5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGg9bnVsbDt0cnl7aD1wLmNvbmNhdFNpZ1RvQVNOMVNpZyhBKX1jYXRjaCh2KXtyZXR1cm4gZmFsc2V9dmFyIGc9bmV3IGQoe2FsZzp1fSk7Zy5pbml0KEIpO2cudXBkYXRlU3RyaW5nKGMpO3JldHVybiBnLnZlcmlmeShoKX1lbHNle3ZhciBnPW5ldyBkKHthbGc6dX0pO2cuaW5pdChCKTtnLnVwZGF0ZVN0cmluZyhjKTtyZXR1cm4gZy52ZXJpZnkoQSl9fX19O0tKVVIuandzLkpXUy5wYXJzZT1mdW5jdGlvbihnKXt2YXIgYz1nLnNwbGl0KFwiLlwiKTt2YXIgYj17fTt2YXIgZixlLGQ7aWYoYy5sZW5ndGghPTImJmMubGVuZ3RoIT0zKXt0aHJvd1wibWFsZm9ybWVkIHNKV1M6IHdyb25nIG51bWJlciBvZiAnLicgc3BsaXR0ZWQgZWxlbWVudHNcIn1mPWNbMF07ZT1jWzFdO2lmKGMubGVuZ3RoPT0zKXtkPWNbMl19Yi5oZWFkZXJPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGYpKTtiLnBheWxvYWRPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGUpKTtiLmhlYWRlclBQPUpTT04uc3RyaW5naWZ5KGIuaGVhZGVyT2JqLG51bGwsXCIgIFwiKTtpZihiLnBheWxvYWRPYmo9PW51bGwpe2IucGF5bG9hZFBQPWI2NHV0b3V0ZjgoZSl9ZWxzZXtiLnBheWxvYWRQUD1KU09OLnN0cmluZ2lmeShiLnBheWxvYWRPYmosbnVsbCxcIiAgXCIpfWlmKGQhPT11bmRlZmluZWQpe2Iuc2lnSGV4PWI2NHV0b2hleChkKX1yZXR1cm4gYn07S0pVUi5qd3MuSldTLnZlcmlmeUpXVD1mdW5jdGlvbihlLGwscil7dmFyIGQ9S0pVUixqPWQuandzLG89ai5KV1Msbj1vLnJlYWRTYWZlSlNPTlN0cmluZyxwPW8uaW5BcnJheSxmPW8uaW5jbHVkZWRBcnJheTt2YXIgaz1lLnNwbGl0KFwiLlwiKTt2YXIgYz1rWzBdO3ZhciBpPWtbMV07dmFyIHE9YytcIi5cIitpO3ZhciBtPWI2NHV0b2hleChrWzJdKTt2YXIgaD1uKGI2NHV0b3V0ZjgoYykpO3ZhciBnPW4oYjY0dXRvdXRmOChpKSk7aWYoaC5hbGc9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZX1pZihyLmFsZz09PXVuZGVmaW5lZCl7dGhyb3dcImFjY2VwdEZpZWxkLmFsZyBzaGFsbCBiZSBzcGVjaWZpZWRcIn1pZighcChoLmFsZyxyLmFsZykpe3JldHVybiBmYWxzZX1pZihnLmlzcyE9PXVuZGVmaW5lZCYmdHlwZW9mIHIuaXNzPT09XCJvYmplY3RcIil7aWYoIXAoZy5pc3Msci5pc3MpKXtyZXR1cm4gZmFsc2V9fWlmKGcuc3ViIT09dW5kZWZpbmVkJiZ0eXBlb2Ygci5zdWI9PT1cIm9iamVjdFwiKXtpZighcChnLnN1YixyLnN1Yikpe3JldHVybiBmYWxzZX19aWYoZy5hdWQhPT11bmRlZmluZWQmJnR5cGVvZiByLmF1ZD09PVwib2JqZWN0XCIpe2lmKHR5cGVvZiBnLmF1ZD09XCJzdHJpbmdcIil7aWYoIXAoZy5hdWQsci5hdWQpKXtyZXR1cm4gZmFsc2V9fWVsc2V7aWYodHlwZW9mIGcuYXVkPT1cIm9iamVjdFwiKXtpZighZihnLmF1ZCxyLmF1ZCkpe3JldHVybiBmYWxzZX19fX12YXIgYj1qLkludERhdGUuZ2V0Tm93KCk7aWYoci52ZXJpZnlBdCE9PXVuZGVmaW5lZCYmdHlwZW9mIHIudmVyaWZ5QXQ9PT1cIm51bWJlclwiKXtiPXIudmVyaWZ5QXR9aWYoci5ncmFjZVBlcmlvZD09PXVuZGVmaW5lZHx8dHlwZW9mIHIuZ3JhY2VQZXJpb2QhPT1cIm51bWJlclwiKXtyLmdyYWNlUGVyaW9kPTB9aWYoZy5leHAhPT11bmRlZmluZWQmJnR5cGVvZiBnLmV4cD09XCJudW1iZXJcIil7aWYoZy5leHArci5ncmFjZVBlcmlvZDxiKXtyZXR1cm4gZmFsc2V9fWlmKGcubmJmIT09dW5kZWZpbmVkJiZ0eXBlb2YgZy5uYmY9PVwibnVtYmVyXCIpe2lmKGI8Zy5uYmYtci5ncmFjZVBlcmlvZCl7cmV0dXJuIGZhbHNlfX1pZihnLmlhdCE9PXVuZGVmaW5lZCYmdHlwZW9mIGcuaWF0PT1cIm51bWJlclwiKXtpZihiPGcuaWF0LXIuZ3JhY2VQZXJpb2Qpe3JldHVybiBmYWxzZX19aWYoZy5qdGkhPT11bmRlZmluZWQmJnIuanRpIT09dW5kZWZpbmVkKXtpZihnLmp0aSE9PXIuanRpKXtyZXR1cm4gZmFsc2V9fWlmKCFvLnZlcmlmeShlLGwsci5hbGcpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbmNsdWRlZEFycmF5PWZ1bmN0aW9uKGIsYSl7dmFyIGM9S0pVUi5qd3MuSldTLmluQXJyYXk7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe2lmKCFjKGJbZF0sYSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbkFycmF5PWZ1bmN0aW9uKGQsYil7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2lmKGJbY109PWQpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O0tKVVIuandzLkpXUy5qd3NhbGcyc2lnYWxnPXtIUzI1NjpcIkhtYWNTSEEyNTZcIixIUzM4NDpcIkhtYWNTSEEzODRcIixIUzUxMjpcIkhtYWNTSEE1MTJcIixSUzI1NjpcIlNIQTI1NndpdGhSU0FcIixSUzM4NDpcIlNIQTM4NHdpdGhSU0FcIixSUzUxMjpcIlNIQTUxMndpdGhSU0FcIixFUzI1NjpcIlNIQTI1NndpdGhFQ0RTQVwiLEVTMzg0OlwiU0hBMzg0d2l0aEVDRFNBXCIsUFMyNTY6XCJTSEEyNTZ3aXRoUlNBYW5kTUdGMVwiLFBTMzg0OlwiU0hBMzg0d2l0aFJTQWFuZE1HRjFcIixQUzUxMjpcIlNIQTUxMndpdGhSU0FhbmRNR0YxXCIsbm9uZTpcIm5vbmVcIix9O0tKVVIuandzLkpXUy5pc1NhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGMsYixkKXt2YXIgZT1udWxsO3RyeXtlPWpzb25QYXJzZShjKTtpZih0eXBlb2YgZSE9XCJvYmplY3RcIil7cmV0dXJuIDB9aWYoZS5jb25zdHJ1Y3Rvcj09PUFycmF5KXtyZXR1cm4gMH1pZihiKXtiW2RdPWV9cmV0dXJuIDF9Y2F0Y2goYSl7cmV0dXJuIDB9fTtLSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGIpe3ZhciBjPW51bGw7dHJ5e2M9anNvblBhcnNlKGIpO2lmKHR5cGVvZiBjIT1cIm9iamVjdFwiKXtyZXR1cm4gbnVsbH1pZihjLmNvbnN0cnVjdG9yPT09QXJyYXkpe3JldHVybiBudWxsfXJldHVybiBjfWNhdGNoKGEpe3JldHVybiBudWxsfX07S0pVUi5qd3MuSldTLmdldEVuY29kZWRTaWduYXR1cmVWYWx1ZUZyb21KV1M9ZnVuY3Rpb24oYil7dmFyIGE9Yi5tYXRjaCgvXlteLl0rXFwuW14uXStcXC4oW14uXSspJC8pO2lmKGE9PW51bGwpe3Rocm93XCJKV1Mgc2lnbmF0dXJlIGlzIG5vdCBhIGZvcm0gb2YgJ0hlYWQuUGF5bG9hZC5TaWdWYWx1ZScuXCJ9cmV0dXJuIGFbMV19O0tKVVIuandzLkpXUy5nZXRKV0t0aHVtYnByaW50PWZ1bmN0aW9uKGQpe2lmKGQua3R5IT09XCJSU0FcIiYmZC5rdHkhPT1cIkVDXCImJmQua3R5IT09XCJvY3RcIil7dGhyb3dcInVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgSldLIFRodW1wcmludFwifXZhciBhPVwie1wiO2lmKGQua3R5PT09XCJSU0FcIil7aWYodHlwZW9mIGQubiE9XCJzdHJpbmdcInx8dHlwZW9mIGQuZSE9XCJzdHJpbmdcIil7dGhyb3dcIndyb25nIG4gYW5kIGUgdmFsdWUgZm9yIFJTQSBrZXlcIn1hKz0nXCJlXCI6XCInK2QuZSsnXCIsJzthKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wiblwiOlwiJytkLm4rJ1wifSd9ZWxzZXtpZihkLmt0eT09PVwiRUNcIil7aWYodHlwZW9mIGQuY3J2IT1cInN0cmluZ1wifHx0eXBlb2YgZC54IT1cInN0cmluZ1wifHx0eXBlb2YgZC55IT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgY3J2LCB4IGFuZCB5IHZhbHVlIGZvciBFQyBrZXlcIn1hKz0nXCJjcnZcIjpcIicrZC5jcnYrJ1wiLCc7YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcInhcIjpcIicrZC54KydcIiwnO2ErPSdcInlcIjpcIicrZC55KydcIn0nfWVsc2V7aWYoZC5rdHk9PT1cIm9jdFwiKXtpZih0eXBlb2YgZC5rIT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgayB2YWx1ZSBmb3Igb2N0KHN5bW1ldHJpYykga2V5XCJ9YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcImtcIjpcIicrZC5rKydcIn0nfX19dmFyIGI9cnN0cnRvaGV4KGEpO3ZhciBjPUtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChiLFwic2hhMjU2XCIpO3ZhciBlPWhleHRvYjY0dShjKTtyZXR1cm4gZX07S0pVUi5qd3MuSW50RGF0ZT17fTtLSlVSLmp3cy5JbnREYXRlLmdldD1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmp3cy5JbnREYXRlLGQ9Yi5nZXROb3csYT1iLmdldFp1bHU7aWYoYz09XCJub3dcIil7cmV0dXJuIGQoKX1lbHNle2lmKGM9PVwibm93ICsgMWhvdXJcIil7cmV0dXJuIGQoKSs2MCo2MH1lbHNle2lmKGM9PVwibm93ICsgMWRheVwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0fWVsc2V7aWYoYz09XCJub3cgKyAxbW9udGhcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozMH1lbHNle2lmKGM9PVwibm93ICsgMXllYXJcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozNjV9ZWxzZXtpZihjLm1hdGNoKC9aJC8pKXtyZXR1cm4gYShjKX1lbHNle2lmKGMubWF0Y2goL15bMC05XSskLykpe3JldHVybiBwYXJzZUludChjKX19fX19fX10aHJvd1widW5zdXBwb3J0ZWQgZm9ybWF0OiBcIitjfTtLSlVSLmp3cy5JbnREYXRlLmdldFp1bHU9ZnVuY3Rpb24oYSl7cmV0dXJuIHp1bHV0b3NlYyhhKX07S0pVUi5qd3MuSW50RGF0ZS5nZXROb3c9ZnVuY3Rpb24oKXt2YXIgYT1+fihuZXcgRGF0ZSgpLzEwMDApO3JldHVybiBhfTtLSlVSLmp3cy5JbnREYXRlLmludERhdGUyVVRDU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBEYXRlKGEqMTAwMCk7cmV0dXJuIGIudG9VVENTdHJpbmcoKX07S0pVUi5qd3MuSW50RGF0ZS5pbnREYXRlMlp1bHU9ZnVuY3Rpb24oZSl7dmFyIGk9bmV3IERhdGUoZSoxMDAwKSxoPShcIjAwMDBcIitpLmdldFVUQ0Z1bGxZZWFyKCkpLnNsaWNlKC00KSxnPShcIjAwXCIrKGkuZ2V0VVRDTW9udGgoKSsxKSkuc2xpY2UoLTIpLGI9KFwiMDBcIitpLmdldFVUQ0RhdGUoKSkuc2xpY2UoLTIpLGE9KFwiMDBcIitpLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSxjPShcIjAwXCIraS5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSxmPShcIjAwXCIraS5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKTtyZXR1cm4gaCtnK2IrYStjK2YrXCJaXCJ9O1xuZXhwb3J0IHsgU2VjdXJlUmFuZG9tIH07XHJcbmV4cG9ydCB7IHJuZ19zZWVkX3RpbWUgfTtcclxuXHJcbmV4cG9ydCB7IEJpZ0ludGVnZXIgfTtcclxuZXhwb3J0IHsgUlNBS2V5IH07XHJcbmV4cG9ydCBjb25zdCB7IEVEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBTaWduYXR1cmUgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBNZXNzYWdlRGlnZXN0IH0gPSAgS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IE1hYyB9ID0gS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IENpcGhlciB9ID0gIEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgeyBLRVlVVElMIH07XHJcbmV4cG9ydCB7IEFTTjFIRVggfTtcclxuZXhwb3J0IHsgWDUwOSB9O1xyXG5leHBvcnQgeyBDcnlwdG9KUyB9O1xyXG5cclxuLy8gZXh0L2Jhc2U2NC5qc1xyXG5leHBvcnQgeyBiNjR0b2hleCB9O1xyXG5leHBvcnQgeyBiNjR0b0JBIH07XHJcblxyXG4vLyBiYXNlNjR4LmpzXHJcbmV4cG9ydCB7IHN0b0JBIH07XHJcbmV4cG9ydCB7IEJBdG9zIH07XHJcbmV4cG9ydCB7IEJBdG9oZXggfTtcclxuZXhwb3J0IHsgc3RvaGV4IH07XHJcbmV4cG9ydCB7IHN0b2I2NCB9O1xyXG5leHBvcnQgeyBzdG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b3MgfTtcclxuZXhwb3J0IHsgYjY0dG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b2I2NCB9O1xyXG5leHBvcnQgeyBoZXgyYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG9oZXggfTtcclxuZXhwb3J0IHsgdXRmOHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG91dGY4IH07XHJcbmV4cG9ydCB7IHV0Zjh0b2I2NCB9O1xyXG5leHBvcnQgeyBiNjR0b3V0ZjggfTtcclxuZXhwb3J0IHsgdXRmOHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXRmOCB9O1xyXG5leHBvcnQgeyBoZXh0b3JzdHIgfTtcclxuZXhwb3J0IHsgcnN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0bmwgfTtcclxuZXhwb3J0IHsgYjY0bmx0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b3BlbSB9O1xyXG5leHBvcnQgeyBwZW10b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b0FycmF5QnVmZmVyIH07XHJcbmV4cG9ydCB7IEFycmF5QnVmZmVydG9oZXggfTtcclxuZXhwb3J0IHsgenVsdXRvbXNlYyB9O1xyXG5leHBvcnQgeyB6dWx1dG9zZWMgfTtcclxuZXhwb3J0IHsgenVsdXRvZGF0ZSB9O1xyXG5leHBvcnQgeyBkYXRldG96dWx1IH07XHJcbmV4cG9ydCB7IHVyaWNtcHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXJpY21wIH07XHJcbmV4cG9ydCB7IGlwdjZ0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b2lwdjYgfTtcclxuZXhwb3J0IHsgaGV4dG9pcCB9O1xyXG5leHBvcnQgeyBpcHRvaGV4IH07XHJcbmV4cG9ydCB7IGVuY29kZVVSSUNvbXBvbmVudEFsbCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvVW5peCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvRG9zIH07XHJcbmV4cG9ydCB7IGhleHRvcG9zaGV4IH07XHJcbmV4cG9ydCB7IGludGFyeXN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IHN0cmRpZmZpZHggfTtcclxuXHJcbi8vIG5hbWUgc3BhY2VzXHJcbmV4cG9ydCB7IEtKVVIgfTtcclxuY29uc3QgX2NyeXB0byA9ICBLSlVSLmNyeXB0bztcclxuZXhwb3J0IHsgX2NyeXB0byBhcyBjcnlwdG8gfTtcclxuZXhwb3J0IGNvbnN0IHsgYXNuMSB9ID0gS0pVUjtcclxuZXhwb3J0IGNvbnN0IHsgandzIH0gPSBLSlVSO1xyXG5leHBvcnQgY29uc3QgeyBsYW5nIH0gPSBLSlVSO1xyXG5cclxuXHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKFxuICAgICAgdWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKVxuICAgICkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi40JyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoTywga2V5ID0ga2V5c1tpKytdKSkge1xuICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbic7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJykuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3R5cGVkJykuQUJWLCB7XG4gIERhdGFWaWV3OiByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKS5EYXRhVmlld1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59LCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBlYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKTtcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIFdFQUtfTUFQID0gJ1dlYWtNYXAnO1xudmFyIGdldFdlYWsgPSBtZXRhLmdldFdlYWs7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlO1xudmFyIEludGVybmFsTWFwO1xuXG52YXIgd3JhcHBlciA9IGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG52YXIgbWV0aG9kcyA9IHtcbiAgLy8gMjMuMy4zLjMgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSkuZ2V0KGtleSk7XG4gICAgICByZXR1cm4gZGF0YSA/IGRhdGFbdGhpcy5faV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICAvLyAyMy4zLjMuNSBXZWFrTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCksIGtleSwgdmFsdWUpO1xuICB9XG59O1xuXG4vLyAyMy4zIFdlYWtNYXAgT2JqZWN0c1xudmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4vLyBJRTExIFdlYWtNYXAgZnJvemVuIGtleXMgZml4XG5pZiAoTkFUSVZFX1dFQUtfTUFQICYmIElTX0lFMTEpIHtcbiAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwcm90byA9ICRXZWFrTWFwLnByb3RvdHlwZTtcbiAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgLy8gc3RvcmUgZnJvemVuIG9iamVjdHMgb24gaW50ZXJuYWwgd2Vha21hcCBzaGltXG4gICAgICBpZiAoaXNPYmplY3QoYSkgJiYgIWlzRXh0ZW5zaWJsZShhKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2YpIHRoaXMuX2YgPSBuZXcgSW50ZXJuYWxNYXAoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcbiAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAvLyBzdG9yZSBhbGwgdGhlIHJlc3Qgb24gbmF0aXZlIHdlYWttYXBcbiAgICAgIH0gcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuLCBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0TWFwJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0dGVuOiBmdW5jdGlvbiBmbGF0dGVuKC8qIGRlcHRoQXJnID0gMSAqLykge1xuICAgIHZhciBkZXB0aEFyZyA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIGRlcHRoQXJnID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoQXJnKSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdHRlbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnaW5jbHVkZXMnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yd2FsZHJvbi90YzM5LW5vdGVzL2Jsb2IvbWFzdGVyL2VzNi8yMDE0LTA5L3NlcHQtMjUubWQjNTEwLWdsb2JhbGFzYXAtZm9yLWVucXVldWluZy1hLW1pY3JvdGFza1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIHByb2Nlc3MgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wcm9jZXNzO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHtcbiAgYXNhcDogZnVuY3Rpb24gYXNhcChmbikge1xuICAgIHZhciBkb21haW4gPSBpc05vZGUgJiYgcHJvY2Vzcy5kb21haW47XG4gICAgbWljcm90YXNrKGRvbWFpbiA/IGRvbWFpbi5iaW5kKGZuKSA6IGZuKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL3Byb3Bvc2FsLWlzLWVycm9yXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0Vycm9yJywge1xuICBpc0Vycm9yOiBmdW5jdGlvbiBpc0Vycm9yKGl0KSB7XG4gICAgcmV0dXJuIGNvZihpdCkgPT09ICdFcnJvcic7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbGFtcDogZnVuY3Rpb24gY2xhbXAoeCwgbG93ZXIsIHVwcGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHVwcGVyLCBNYXRoLm1heChsb3dlciwgeCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgREVHX1BFUl9SQUQ6IE1hdGguUEkgLyAxODAgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIFJBRF9QRVJfREVHID0gMTgwIC8gTWF0aC5QSTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBkZWdyZWVzOiBmdW5jdGlvbiBkZWdyZWVzKHJhZGlhbnMpIHtcbiAgICByZXR1cm4gcmFkaWFucyAqIFJBRF9QRVJfREVHO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlhZGRoOiBmdW5jdGlvbiBpYWRkaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgKyAoeTEgPj4+IDApICsgKCgkeDAgJiAkeTAgfCAoJHgwIHwgJHkwKSAmIH4oJHgwICsgJHkwID4+PiAwKSkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlzdWJoOiBmdW5jdGlvbiBpc3ViaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgLSAoeTEgPj4+IDApIC0gKCh+JHgwICYgJHkwIHwgfigkeDAgXiAkeTApICYgJHgwIC0gJHkwID4+PiAwKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IFJBRF9QRVJfREVHOiAxODAgLyBNYXRoLlBJIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNjYWxlOiByZXF1aXJlKCcuL19tYXRoLXNjYWxlJykgfSk7XG4iLCIvLyBodHRwOi8vamZiYXN0aWVuLmdpdGh1Yi5pby9wYXBlcnMvTWF0aC5zaWduYml0Lmh0bWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbmJpdDogZnVuY3Rpb24gc2lnbmJpdCh4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpICE9IHggPyB4IDogeCA9PSAwID8gMSAvIHggPT0gSW5maW5pdHkgOiB4ID4gMDtcbn0gfSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB1bXVsaDogZnVuY3Rpb24gdW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+Pj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+Pj4gMTYpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjIgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZUdldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IGdldDogYUZ1bmN0aW9uKGdldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4zIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVTZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBzZXQ6IGFGdW5jdGlvbihzZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKGl0KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi40IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBHZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwR2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwR2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuZ2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi41IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBTZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwU2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwU2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuc2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemVucGFyc2luZy9lcy1vYnNlcnZhYmxlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBPQlNFUlZBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ29ic2VydmFibGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBSRVRVUk4gPSBmb3JPZi5SRVRVUk47XG5cbnZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZuID09IG51bGwgPyB1bmRlZmluZWQgOiBhRnVuY3Rpb24oZm4pO1xufTtcblxudmFyIGNsZWFudXBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHZhciBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jO1xuICBpZiAoY2xlYW51cCkge1xuICAgIHN1YnNjcmlwdGlvbi5fYyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwKCk7XG4gIH1cbn07XG5cbnZhciBzdWJzY3JpcHRpb25DbG9zZWQgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHJldHVybiBzdWJzY3JpcHRpb24uX28gPT09IHVuZGVmaW5lZDtcbn07XG5cbnZhciBjbG9zZVN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gIH1cbn07XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgYW5PYmplY3Qob2JzZXJ2ZXIpO1xuICB0aGlzLl9jID0gdW5kZWZpbmVkO1xuICB0aGlzLl9vID0gb2JzZXJ2ZXI7XG4gIG9ic2VydmVyID0gbmV3IFN1YnNjcmlwdGlvbk9ic2VydmVyKHRoaXMpO1xuICB0cnkge1xuICAgIHZhciBjbGVhbnVwID0gc3Vic2NyaWJlcihvYnNlcnZlcik7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IGNsZWFudXA7XG4gICAgaWYgKGNsZWFudXAgIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSBjbGVhbnVwID0gZnVuY3Rpb24gKCkgeyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgIGVsc2UgYUZ1bmN0aW9uKGNsZWFudXApO1xuICAgICAgdGhpcy5fYyA9IGNsZWFudXA7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgcmV0dXJuO1xuICB9IGlmIChzdWJzY3JpcHRpb25DbG9zZWQodGhpcykpIGNsZWFudXBTdWJzY3JpcHRpb24odGhpcyk7XG59O1xuXG5TdWJzY3JpcHRpb24ucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkgeyBjbG9zZVN1YnNjcmlwdGlvbih0aGlzKTsgfVxufSk7XG5cbnZhciBTdWJzY3JpcHRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdGhpcy5fcyA9IHN1YnNjcmlwdGlvbjtcbn07XG5cblN1YnNjcmlwdGlvbk9ic2VydmVyLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIG5leHQ6IGZ1bmN0aW9uIG5leHQodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5uZXh0KTtcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcih2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmIChzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkgdGhyb3cgdmFsdWU7XG4gICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuZXJyb3IpO1xuICAgICAgaWYgKCFtKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHZhbHVlID0gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmNvbXBsZXRlKTtcbiAgICAgICAgdmFsdWUgPSBtID8gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnZhciAkT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlcikge1xuICBhbkluc3RhbmNlKHRoaXMsICRPYnNlcnZhYmxlLCAnT2JzZXJ2YWJsZScsICdfZicpLl9mID0gYUZ1bmN0aW9uKHN1YnNjcmliZXIpO1xufTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUucHJvdG90eXBlLCB7XG4gIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24ob2JzZXJ2ZXIsIHRoaXMuX2YpO1xuICB9LFxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgKGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGF0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59KTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUsIHtcbiAgZnJvbTogZnVuY3Rpb24gZnJvbSh4KSB7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZTtcbiAgICB2YXIgbWV0aG9kID0gZ2V0TWV0aG9kKGFuT2JqZWN0KHgpW09CU0VSVkFCTEVdKTtcbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICB2YXIgb2JzZXJ2YWJsZSA9IGFuT2JqZWN0KG1ldGhvZC5jYWxsKHgpKTtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDID8gb2JzZXJ2YWJsZSA6IG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGZvck9mKHgsIGZhbHNlLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdCk7XG4gICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm4gUkVUVVJOO1xuICAgICAgICAgICAgfSkgPT09IFJFVFVSTikgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBlO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9LFxuICBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBpdGVtcyA9IG5ldyBBcnJheShsKTsgaSA8IGw7KSBpdGVtc1tpXSA9IGFyZ3VtZW50c1tpKytdO1xuICAgIHJldHVybiBuZXcgKHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlKShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW1zLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2pdKTtcbiAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9XG59KTtcblxuaGlkZSgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIE9CU0VSVkFCTEUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBPYnNlcnZhYmxlOiAkT2JzZXJ2YWJsZSB9KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnT2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1maW5hbGx5XG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHsgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIG9uRmluYWxseSA9PSAnZnVuY3Rpb24nO1xuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHksXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICB9IDogb25GaW5hbGx5XG4gICk7XG59IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gIChyZXN1bHQuZSA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBtZXRhZGF0YS5tYXA7XG52YXIgc3RvcmUgPSBtZXRhZGF0YS5zdG9yZTtcblxubWV0YWRhdGEuZXhwKHsgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xufSB9KTtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlIYXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiB0cnVlO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogZmFsc2U7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNNZXRhZGF0YTogZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNPd25NZXRhZGF0YTogZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyICRtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9NZXRhS2V5ID0gJG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gJG1ldGFkYXRhLnNldDtcblxuJG1ldGFkYXRhLmV4cCh7IG1ldGFkYXRhOiBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShcbiAgICAgIG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLFxuICAgICAgKHRhcmdldEtleSAhPT0gdW5kZWZpbmVkID8gYW5PYmplY3QgOiBhRnVuY3Rpb24pKHRhcmdldCksXG4gICAgICB0b01ldGFLZXkodGFyZ2V0S2V5KVxuICAgICk7XG4gIH07XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIGF0OiBmdW5jdGlvbiBhdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtTZXQnKTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwiLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGltZSAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBmYWxzZTtcbiAgICByZXR1cm4gc2V0KGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gOiBmbiwgdGltZSk7XG4gIH07XG59O1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIgKyAkZXhwb3J0LkYgKiBNU0lFLCB7XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCIvKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4W2ldID0gKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1V1aWQoYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcbiAgLy8gam9pbiB1c2VkIHRvIGZpeCBtZW1vcnkgaXNzdWUgY2F1c2VkIGJ5IGNvbmNhdGVuYXRpb246IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMxNzUjYzRcbiAgcmV0dXJuIChbYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXV0pLmpvaW4oJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xuIiwiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gIEluIHRoZVxuLy8gYnJvd3NlciB0aGlzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIGR1ZSB0byB1bmtub3duIHF1YWxpdHkgb2YgTWF0aC5yYW5kb20oKVxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxuLy8gZmVhdHVyZS1kZXRlY3Rpb25cblxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvXG4vLyBpbXBsZW1lbnRhdGlvbi4gQWxzbywgZmluZCB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgY3J5cHRvIG9uIElFMTEuXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZihtc0NyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT0gJ2Z1bmN0aW9uJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xuXG5pZiAoZ2V0UmFuZG9tVmFsdWVzKSB7XG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xuICB2YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcbiAgICBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xuICAgIHJldHVybiBybmRzODtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIE1hdGgucmFuZG9tKCktYmFzZWQgKFJORylcbiAgLy9cbiAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHVzZSBNYXRoLnJhbmRvbSgpLiAgSXQncyBmYXN0LCBidXQgaXMgb2YgdW5zcGVjaWZpZWRcbiAgLy8gcXVhbGl0eS5cbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWF0aFJORygpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGlmICgoaSAmIDB4MDMpID09PSAwKSByID0gTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMDAwO1xuICAgICAgcm5kc1tpXSA9IHIgPj4+ICgoaSAmIDB4MDMpIDw8IDMpICYgMHhmZjtcbiAgICB9XG5cbiAgICByZXR1cm4gcm5kcztcbiAgfTtcbn1cbiIsInZhciBybmcgPSByZXF1aXJlKCcuL2xpYi9ybmcnKTtcbnZhciBieXRlc1RvVXVpZCA9IHJlcXVpcmUoJy4vbGliL2J5dGVzVG9VdWlkJyk7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcbiAgICBidWYgPSBvcHRpb25zID09PSAnYmluYXJ5JyA/IG5ldyBBcnJheSgxNikgOiBudWxsO1xuICAgIG9wdGlvbnMgPSBudWxsO1xuICB9XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcbiAgcm5kc1s4XSA9IChybmRzWzhdICYgMHgzZikgfCAweDgwO1xuXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuICBpZiAoYnVmKSB7XG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDE2OyArK2lpKSB7XG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWYgfHwgYnl0ZXNUb1V1aWQocm5kcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdjQ7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSAnLi9UaW1lci5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDsgLy8gc2Vjb25kc1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyaW5nXCIpLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyZWRcIilcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXI7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkID0gYWNjZXNzVG9rZW5FeHBpcmVkVGltZXI7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZChjb250YWluZXIpIHtcclxuICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV2ZW50cyBpZiB0aGVyZSdzIGFuIGFjY2VzcyB0b2tlbiBhbmQgaXQgaGFzIGFuIGV4cGlyYXRpb25cclxuICAgICAgICBpZiAoY29udGFpbmVyLmFjY2Vzc190b2tlbiAmJiBjb250YWluZXIuZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IGNvbnRhaW5lci5leHBpcmVzX2luO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiBhY2Nlc3MgdG9rZW4gcHJlc2VudCwgcmVtYWluaW5nIGR1cmF0aW9uOlwiLCBkdXJhdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV4cGlyaW5nIGlmIHdlIHN0aWxsIGhhdmUgdGltZVxyXG4gICAgICAgICAgICAgICAgbGV0IGV4cGlyaW5nID0gZHVyYXRpb24gLSB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuICAgICAgICAgICAgICAgIGlmIChleHBpcmluZyA8PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBleHBpcmluZyA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IHJlZ2lzdGVyaW5nIGV4cGlyaW5nIHRpbWVyIGluOlwiLCBleHBpcmluZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmluaXQoZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogY2FuY2VsaW5nIGV4aXN0aW5nIGV4cGlyaW5nIHRpbWVyIGJlY2FzZSB3ZSdyZSBwYXN0IGV4cGlyYXRpb24uXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgaXQncyBuZWdhdGl2ZSwgaXQgd2lsbCBzdGlsbCBmaXJlXHJcbiAgICAgICAgICAgIGxldCBleHBpcmVkID0gZHVyYXRpb24gKyAxO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmVkIHRpbWVyIGluOlwiLCBleHBpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmluaXQoZXhwaXJlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuY2FuY2VsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy51bmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBhY2Nlc3MgdG9rZW4gdGltZXJzXCIpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyhjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRJbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hlY2tTZXNzaW9uSUZyYW1lIHtcclxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IGludGVydmFsIHx8IERlZmF1bHRJbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wT25FcnJvciA9IHN0b3BPbkVycm9yO1xyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdXJsLmluZGV4T2YoXCIvXCIsIHVybC5pbmRleE9mKFwiLy9cIikgKyAyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZV9vcmlnaW4gPSB1cmwuc3Vic3RyKDAsIGlkeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHVybDtcclxuICAgIH1cclxuICAgIGxvYWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IHRoaXMuX21lc3NhZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfbWVzc2FnZShlKSB7XHJcbiAgICAgICAgaWYgKGUub3JpZ2luID09PSB0aGlzLl9mcmFtZV9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGUuZGF0YSA9PT0gXCJlcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGVycm9yIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdG9wT25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuZGF0YSA9PT0gXCJjaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZTogY2hhbmdlZCBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IFwiICsgZS5kYXRhICsgXCIgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhcnQoc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uX3N0YXRlICE9PSBzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdGFydFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgICAgICBsZXQgc2VuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UodGhpcy5fY2xpZW50X2lkICsgXCIgXCIgKyB0aGlzLl9zZXNzaW9uX3N0YXRlLCB0aGlzLl9mcmFtZV9vcmlnaW4pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdHJpZ2dlciBub3dcclxuICAgICAgICAgICAgc2VuZCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gYW5kIHNldHVwIHRpbWVyXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldEludGVydmFsKHNlbmQsIHRoaXMuX2ludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zZXNzaW9uX3N0YXRlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdG9wXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cFdpbmRvdyB9IGZyb20gJy4vQ29yZG92YVBvcHVwV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzID0gJ2hpZGRlbj15ZXMnO1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBDb3Jkb3ZhUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YVBvcHVwTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBDb3Jkb3ZhUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHpvb209bm8nO1xyXG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cFdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IERlZmF1bHRQb3B1cEZlYXR1cmVzO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gcGFyYW1zLnBvcHVwV2luZG93VGFyZ2V0IHx8IERlZmF1bHRQb3B1cFRhcmdldDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnJlZGlyZWN0X3VyaSA9IHBhcmFtcy5zdGFydFVybDtcclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3cuY3RvcjogcmVkaXJlY3RfdXJpOiBcIiArIHRoaXMucmVkaXJlY3RfdXJpKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQoY29yZG92YU1ldGFkYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcImNvcmRvdmEtcGx1Z2luLWluYXBwYnJvd3NlclwiLCBcImNvcmRvdmEtcGx1Z2luLWluYXBwYnJvd3Nlci5pbmFwcGJyb3dzZXJcIiwgXCJvcmcuYXBhY2hlLmNvcmRvdmEuaW5hcHBicm93c2VyXCJdLnNvbWUoZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvcmRvdmFNZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShuYW1lKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghd2luZG93LmNvcmRvdmEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcihcImNvcmRvdmEgaXMgdW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjb3Jkb3ZhTWV0YWRhdGEgPSB3aW5kb3cuY29yZG92YS5yZXF1aXJlKFwiY29yZG92YS9wbHVnaW5fbGlzdFwiKS5tZXRhZGF0YTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJJbkFwcEJyb3dzZXIgcGx1Z2luIG5vdCBmb3VuZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwID0gY29yZG92YS5JbkFwcEJyb3dzZXIub3BlbihwYXJhbXMudXJsLCB0aGlzLnRhcmdldCwgdGhpcy5mZWF0dXJlcyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wb3B1cCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93Lm5hdmlnYXRlOiBwb3B1cCBzdWNjZXNzZnVsbHkgY3JlYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQgPSB0aGlzLl9leGl0Q2FsbGJhY2suYmluZCh0aGlzKTsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50ID0gdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wdXAuYWRkRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2Fkc3RhcnRcIiwgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJFcnJvciBvcGVuaW5nIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkU3RhcnRDYWxsYmFjayhldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC51cmwuaW5kZXhPZih0aGlzLnJlZGlyZWN0X3VyaSkgPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogZXZlbnQudXJsIH0pO1xyXG4gICAgICAgIH0gICAgXHJcbiAgICB9XHJcbiAgICBfZXhpdENhbGxiYWNrKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9lcnJvcihtZXNzYWdlKTsgICAgXHJcbiAgICB9XHJcbiAgICBcclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdzogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGNvcmRvdmEgcG9wdXAgd2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBfY2xlYW51cCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcG9wdXApe1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IGNsZWFuaW5nIHVwIHBvcHVwXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXhpdFwiLCB0aGlzLl9leGl0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFcnJvclJlc3BvbnNlIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioe2Vycm9yLCBlcnJvcl9kZXNjcmlwdGlvbiwgZXJyb3JfdXJpLCBzdGF0ZSwgc2Vzc2lvbl9zdGF0ZX09e31cclxuICAgICkge1xyXG4gICAgICAgICBpZiAoIWVycm9yKXtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTm8gZXJyb3IgcGFzc2VkIHRvIEVycm9yUmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVycm9yXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3VwZXIoZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IpO1xyXG5cclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkVycm9yUmVzcG9uc2VcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSBlcnJvcl9kZXNjcmlwdGlvbjtcclxuICAgICAgICB0aGlzLmVycm9yX3VyaSA9IGVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEV2ZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lKSB7XHJcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYWRkSGFuZGxlcihjYikge1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVIYW5kbGVyKGNiKSB7XHJcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuX2NhbGxiYWNrcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSBjYik7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmFpc2UoLi4ucGFyYW1zKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiRXZlbnQ6IFJhaXNpbmcgZXZlbnQ6IFwiICsgdGhpcy5fbmFtZSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9jYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2ldKC4uLnBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmNvbnN0IHRpbWVyID0ge1xyXG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChjYiwgZHVyYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwoY2IsIGR1cmF0aW9uKTtcclxuICAgIH0sXHJcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoaGFuZGxlKTtcclxuICAgIH1cclxufTtcclxuXHJcbmxldCB0ZXN0aW5nID0gZmFsc2U7XHJcbmxldCByZXF1ZXN0ID0gbnVsbDtcclxuXHJcbmV4cG9ydCBjbGFzcyBHbG9iYWwge1xyXG5cclxuICAgIHN0YXRpYyBfdGVzdGluZygpIHtcclxuICAgICAgICB0ZXN0aW5nID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxvY2F0aW9uKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgbG9jYWxTdG9yYWdlKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHNlc3Npb25TdG9yYWdlKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzZXRYTUxIdHRwUmVxdWVzdChuZXdSZXF1ZXN0KSB7XHJcbiAgICAgICAgcmVxdWVzdCA9IG5ld1JlcXVlc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBYTUxIdHRwUmVxdWVzdCgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QgfHwgWE1MSHR0cFJlcXVlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgdGltZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aW1lcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBJRnJhbWVXaW5kb3cgfSBmcm9tICcuL0lGcmFtZVdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSUZyYW1lTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIGxldCBmcmFtZSA9IG5ldyBJRnJhbWVXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsYmFjayh1cmwpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVOYXZpZ2F0b3IuY2FsbGJhY2tcIik7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIElGcmFtZVdpbmRvdy5ub3RpZnlQYXJlbnQodXJsKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRUaW1lb3V0ID0gMTAwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgSUZyYW1lV2luZG93IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IHRoaXMuX21lc3NhZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWUgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuXHJcbiAgICAgICAgLy8gc2hvdGd1biBhcHByb2FjaFxyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS53aWR0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuaGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRpbWVvdXQgPSBwYXJhbXMuc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgRGVmYXVsdFRpbWVvdXQ7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5uYXZpZ2F0ZTogVXNpbmcgdGltZW91dCBvZjpcIiwgdGltZW91dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5fdGltZW91dC5iaW5kKHRoaXMpLCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWUuc3JjID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb21pc2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93OiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gZnJhbWUgd2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBfY2xlYW51cCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZnJhbWUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93OiBjbGVhbnVwXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLl9mcmFtZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfdGltZW91dCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cudGltZW91dFwiKTtcclxuICAgICAgICB0aGlzLl9lcnJvcihcIkZyYW1lIHdpbmRvdyB0aW1lZCBvdXRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgX21lc3NhZ2UoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5tZXNzYWdlXCIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fdGltZXIgJiZcclxuICAgICAgICAgICAgZS5vcmlnaW4gPT09IHRoaXMuX29yaWdpbiAmJlxyXG4gICAgICAgICAgICBlLnNvdXJjZSA9PT0gdGhpcy5fZnJhbWUuY29udGVudFdpbmRvd1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgdXJsID0gZS5kYXRhO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWNjZXNzKHsgdXJsOiB1cmwgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihcIkludmFsaWQgcmVzcG9uc2UgZnJvbSBmcmFtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgX29yaWdpbigpIHtcclxuICAgICAgICByZXR1cm4gbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3RpZnlQYXJlbnQodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudFwiKTtcclxuICAgICAgICBpZiAod2luZG93LmZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwgfHwgd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5ub3RpZnlQYXJlbnQ6IHBvc3RpbmcgdXJsIG1lc3NhZ2UgdG8gcGFyZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh1cmwsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEluTWVtb3J5V2ViU3RvcmFnZXtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW0oa2V5KSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSW5NZW1vcnlXZWJTdG9yYWdlLmdldEl0ZW1cIiwga2V5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSl7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSW5NZW1vcnlXZWJTdG9yYWdlLnNldEl0ZW1cIiwga2V5KTtcclxuICAgICAgICB0aGlzLl9kYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVJdGVtKGtleSl7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSW5NZW1vcnlXZWJTdG9yYWdlLnJlbW92ZUl0ZW1cIiwga2V5KTtcclxuICAgICAgICBkZWxldGUgdGhpcy5fZGF0YVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsZW5ndGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBrZXkoaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fZGF0YSlbaW5kZXhdO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IGp3cywgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4LCBBbGxvd2VkU2lnbmluZ0FsZ3MgfSBmcm9tICcuL2NyeXB0by9qc3JzYXNpZ24nO1xyXG5pbXBvcnQgZ2V0Sm9zZVV0aWwgZnJvbSAnLi9Kb3NlVXRpbEltcGwnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEpvc2VVdGlsID0gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pO1xyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRKb3NlVXRpbCh7IGp3cywgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4LCBBbGxvd2VkU2lnbmluZ0FsZ3MgfSkge1xyXG4gICAgcmV0dXJuIGNsYXNzIEpvc2VVdGlsIHtcclxuXHJcbiAgICAgICAgc3RhdGljIHBhcnNlSnd0KGp3dCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJKb3NlVXRpbC5wYXJzZUp3dFwiKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IGp3cy5KV1MucGFyc2Uoand0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiB0b2tlbi5oZWFkZXJPYmosXHJcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogdG9rZW4ucGF5bG9hZE9ialxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRpYyB2YWxpZGF0ZUp3dChqd3QsIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5Lmt0eSA9PT0gXCJSU0FcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuZSAmJiBrZXkubikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBLZXlVdGlsLmdldEtleShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lng1YyAmJiBrZXkueDVjLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGV4ID0gYjY0dG9oZXgoa2V5Lng1Y1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IFg1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgoaGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogUlNBIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiUlNBIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkua3R5ID09PSBcIkVDXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmNydiAmJiBrZXkueCAmJiBrZXkueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBLZXlVdGlsLmdldEtleShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLnZhbGlkYXRlSnd0OiBFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkVDIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogVW5zdXBwb3J0ZWQga2V5IHR5cGVcIiwga2V5ICYmIGtleS5rdHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBrZXkgdHlwZTogXCIgKyBrZXkgJiYga2V5Lmt0eSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBKb3NlVXRpbC5fdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJKV1QgdmFsaWRhdGlvbiBmYWlsZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRpYyB2YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoand0LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgIGlmICghY2xvY2tTa2V3KSB7XHJcbiAgICAgICAgICAgICAgICBjbG9ja1NrZXcgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW5vdykge1xyXG4gICAgICAgICAgICAgICAgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGF5bG9hZCA9IEpvc2VVdGlsLnBhcnNlSnd0KGp3dCkucGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGF5bG9hZC5pc3MpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaXNzdWVyIHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaXNzdWVyIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmlzcyAhPT0gaXNzdWVyKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IEludmFsaWQgaXNzdWVyIGluIHRva2VuXCIsIHBheWxvYWQuaXNzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIGlzc3VlciBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmlzcykpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuYXVkKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGF1ZCB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1ZCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdmFsaWRBdWRpZW5jZSA9IHBheWxvYWQuYXVkID09PSBhdWRpZW5jZSB8fCAoQXJyYXkuaXNBcnJheShwYXlsb2FkLmF1ZCkgJiYgcGF5bG9hZC5hdWQuaW5kZXhPZihhdWRpZW5jZSkgPj0gMCk7XHJcbiAgICAgICAgICAgIGlmICghdmFsaWRBdWRpZW5jZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGF1ZGllbmNlIGluIHRva2VuXCIsIHBheWxvYWQuYXVkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIGF1ZGllbmNlIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXVkKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBheWxvYWQuYXpwICYmIHBheWxvYWQuYXpwICE9PSBhdWRpZW5jZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGF6cCBpbiB0b2tlblwiLCBwYXlsb2FkLmF6cCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhenAgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5henApKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb3dlck5vdyA9IG5vdyArIGNsb2NrU2tldztcclxuICAgICAgICAgICAgICAgIHZhciB1cHBlck5vdyA9IG5vdyAtIGNsb2NrU2tldztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaWF0IHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGxvd2VyTm93IDwgcGF5bG9hZC5pYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlhdCBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQuaWF0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaWF0IGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5pYXQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5uYmYgJiYgbG93ZXJOb3cgPCBwYXlsb2FkLm5iZikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogbmJmIGlzIGluIHRoZSBmdXR1cmVcIiwgcGF5bG9hZC5uYmYpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJuYmYgaXMgaW4gdGhlIGZ1dHVyZTogXCIgKyBwYXlsb2FkLm5iZikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5leHApIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJleHAgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5leHAgPCB1cHBlck5vdykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogZXhwIGlzIGluIHRoZSBwYXN0XCIsIHBheWxvYWQuZXhwKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIGlzIGluIHRoZSBwYXN0OlwiICsgcGF5bG9hZC5leHApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYXlsb2FkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRpYyBfdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBKb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoand0LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKS50aGVuKHBheWxvYWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWp3cy5KV1MudmVyaWZ5KGp3dCwga2V5LCBBbGxvd2VkU2lnbmluZ0FsZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogc2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihlICYmIGUubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgaGFzaFN0cmluZyh2YWx1ZSwgYWxnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLlV0aWwuaGFzaFN0cmluZyh2YWx1ZSwgYWxnKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgaGV4VG9CYXNlNjRVcmwodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBoZXh0b2I2NHUodmFsdWUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSnNvblNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgYWRkaXRpb25hbENvbnRlbnRUeXBlcyA9IG51bGwsIFxyXG4gICAgICAgIFhNTEh0dHBSZXF1ZXN0Q3RvciA9IEdsb2JhbC5YTUxIdHRwUmVxdWVzdCwgXHJcbiAgICAgICAgand0SGFuZGxlciA9IG51bGxcclxuICAgICkge1xyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsQ29udGVudFR5cGVzICYmIEFycmF5LmlzQXJyYXkoYWRkaXRpb25hbENvbnRlbnRUeXBlcykpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBhZGRpdGlvbmFsQ29udGVudFR5cGVzLnNsaWNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRUeXBlcyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMucHVzaCgnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgICAgIGlmIChqd3RIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRUeXBlcy5wdXNoKCdhcHBsaWNhdGlvbi9qd3QnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX1hNTEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3RDdG9yO1xyXG4gICAgICAgIHRoaXMuX2p3dEhhbmRsZXIgPSBqd3RIYW5kbGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEpzb24odXJsLCB0b2tlbikge1xyXG4gICAgICAgIGlmICghdXJsKXtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UuZ2V0SnNvbiwgdXJsOiBcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIHZhciByZXEgPSBuZXcgdGhpcy5fWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYWxsb3dlZENvbnRlbnRUeXBlcyA9IHRoaXMuX2NvbnRlbnRUeXBlcztcclxuICAgICAgICAgICAgdmFyIGp3dEhhbmRsZXIgPSB0aGlzLl9qd3RIYW5kbGVyO1xyXG5cclxuICAgICAgICAgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHJlcS5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09IFwiYXBwbGljYXRpb24vand0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp3dEhhbmRsZXIocmVxKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiSW52YWxpZCByZXNwb25zZSBDb250ZW50LVR5cGU6IFwiICsgY29udGVudFR5cGUgKyBcIiwgZnJvbSBVUkw6IFwiICsgdXJsKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IocmVxLnN0YXR1c1RleHQgKyBcIiAoXCIgKyByZXEuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBuZXR3b3JrIGVycm9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiTmV0d29yayBFcnJvclwiKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb246IHRva2VuIHBhc3NlZCwgc2V0dGluZyBBdXRob3JpemF0aW9uIGhlYWRlclwiKTtcclxuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIiArIHRva2VuKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVxLnNlbmQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0Rm9ybSh1cmwsIHBheWxvYWQpIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5wb3N0Rm9ybSwgdXJsOiBcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIHZhciByZXEgPSBuZXcgdGhpcy5fWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICAgICAgcmVxLm9wZW4oJ1BPU1QnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcblxyXG4gICAgICAgICAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHJlcS5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiSW52YWxpZCByZXNwb25zZSBDb250ZW50LVR5cGU6IFwiICsgY29udGVudFR5cGUgKyBcIiwgZnJvbSBVUkw6IFwiICsgdXJsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSA0MDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXlsb2FkID0gSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBmcm9tIHNlcnZlcjogXCIsIHBheWxvYWQuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHBheWxvYWQuZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IG5ldHdvcmsgZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJOZXR3b3JrIEVycm9yXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCBib2R5ID0gXCJcIjtcclxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gcGF5bG9hZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHBheWxvYWRba2V5XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9IFwiJlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IFwiPVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIHJlcS5zZW5kKGJvZHkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmxldCBub3BMb2dnZXIgPSB7XHJcbiAgICBkZWJ1Zygpe30sXHJcbiAgICBpbmZvKCl7fSxcclxuICAgIHdhcm4oKXt9LFxyXG4gICAgZXJyb3IoKXt9XHJcbn07XHJcblxyXG5jb25zdCBOT05FID0gMDtcclxuY29uc3QgRVJST1IgPSAxO1xyXG5jb25zdCBXQVJOID0gMjtcclxuY29uc3QgSU5GTyA9IDM7XHJcbmNvbnN0IERFQlVHID0gNDtcclxuXHJcbmxldCBsb2dnZXI7XHJcbmxldCBsZXZlbDtcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2cge1xyXG4gICAgc3RhdGljIGdldCBOT05FKCkge3JldHVybiBOT05FfTtcclxuICAgIHN0YXRpYyBnZXQgRVJST1IoKSB7cmV0dXJuIEVSUk9SfTtcclxuICAgIHN0YXRpYyBnZXQgV0FSTigpIHtyZXR1cm4gV0FSTn07XHJcbiAgICBzdGF0aWMgZ2V0IElORk8oKSB7cmV0dXJuIElORk99O1xyXG4gICAgc3RhdGljIGdldCBERUJVRygpIHtyZXR1cm4gREVCVUd9O1xyXG4gICAgXHJcbiAgICBzdGF0aWMgcmVzZXQoKXtcclxuICAgICAgICBsZXZlbCA9IElORk87XHJcbiAgICAgICAgbG9nZ2VyID0gbm9wTG9nZ2VyO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgZ2V0IGxldmVsKCl7XHJcbiAgICAgICAgcmV0dXJuIGxldmVsO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHNldCBsZXZlbCh2YWx1ZSl7XHJcbiAgICAgICAgaWYgKE5PTkUgPD0gdmFsdWUgJiYgdmFsdWUgPD0gREVCVUcpe1xyXG4gICAgICAgICAgICBsZXZlbCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2cgbGV2ZWxcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgZ2V0IGxvZ2dlcigpe1xyXG4gICAgICAgIHJldHVybiBsb2dnZXI7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2V0IGxvZ2dlcih2YWx1ZSl7XHJcbiAgICAgICAgaWYgKCF2YWx1ZS5kZWJ1ZyAmJiB2YWx1ZS5pbmZvKSB7XHJcbiAgICAgICAgICAgIC8vIGp1c3QgdG8gc3RheSBiYWNrd2FyZHMgY29tcGF0LiBjYW4gcmVtb3ZlIGluIDIuMFxyXG4gICAgICAgICAgICB2YWx1ZS5kZWJ1ZyA9IHZhbHVlLmluZm87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUuZGVidWcgJiYgdmFsdWUuaW5mbyAmJiB2YWx1ZS53YXJuICYmIHZhbHVlLmVycm9yKXtcclxuICAgICAgICAgICAgbG9nZ2VyID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZ2dlclwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBkZWJ1ZyguLi5hcmdzKXtcclxuICAgICAgICBpZiAobGV2ZWwgPj0gREVCVUcpe1xyXG4gICAgICAgICAgICBsb2dnZXIuZGVidWcuYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgaW5mbyguLi5hcmdzKXtcclxuICAgICAgICBpZiAobGV2ZWwgPj0gSU5GTyl7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIHdhcm4oLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IFdBUk4pe1xyXG4gICAgICAgICAgICBsb2dnZXIud2Fybi5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBlcnJvciguLi5hcmdzKXtcclxuICAgICAgICBpZiAobGV2ZWwgPj0gRVJST1Ipe1xyXG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IuYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbkxvZy5yZXNldCgpO1xyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEpzb25TZXJ2aWNlIH0gZnJvbSAnLi9Kc29uU2VydmljZS5qcyc7XHJcblxyXG5jb25zdCBPaWRjTWV0YWRhdGFVcmxQYXRoID0gJy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNZXRhZGF0YVNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIEpzb25TZXJ2aWNlQ3RvciA9IEpzb25TZXJ2aWNlKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2U6IE5vIHNldHRpbmdzIHBhc3NlZCB0byBNZXRhZGF0YVNlcnZpY2VcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9qc29uU2VydmljZSA9IG5ldyBKc29uU2VydmljZUN0b3IoWydhcHBsaWNhdGlvbi9qd2stc2V0K2pzb24nXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1ldGFkYXRhVXJsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhVXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsICYmIHRoaXMuX21ldGFkYXRhVXJsLmluZGV4T2YoT2lkY01ldGFkYXRhVXJsUGF0aCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsW3RoaXMuX21ldGFkYXRhVXJsLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gJy8nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSBPaWRjTWV0YWRhdGFVcmxQYXRoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWV0YWRhdGEoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YTogUmV0dXJuaW5nIG1ldGFkYXRhIGZyb20gc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3MubWV0YWRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YTogTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdXRob3JpdHkgb3IgbWV0YWRhdGFVcmwgY29uZmlndXJlZCBvbiBzZXR0aW5nc1wiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IGdldHRpbmcgbWV0YWRhdGEgZnJvbVwiLCB0aGlzLm1ldGFkYXRhVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24odGhpcy5tZXRhZGF0YVVybClcclxuICAgICAgICAgICAgLnRoZW4obWV0YWRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBqc29uIHJlY2VpdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MubWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXNzdWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiaXNzdWVyXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF1dGhvcml6YXRpb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImF1dGhvcml6YXRpb25fZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlckluZm9FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInVzZXJpbmZvX2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRva2VuRW5kcG9pbnQob3B0aW9uYWw9dHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwidG9rZW5fZW5kcG9pbnRcIiwgb3B0aW9uYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoZWNrU2Vzc2lvbklmcmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImNoZWNrX3Nlc3Npb25faWZyYW1lXCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVuZFNlc3Npb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImVuZF9zZXNzaW9uX2VuZHBvaW50XCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJldm9jYXRpb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInJldm9jYXRpb25fZW5kcG9pbnRcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0S2V5c0VuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiandrc191cmlcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldE1ldGFkYXRhUHJvcGVydHkobmFtZSwgb3B0aW9uYWw9ZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eSBmb3I6IFwiICsgbmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBtZXRhZGF0YSByZWNpZXZlZFwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBvcHRpb25hbCBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhW25hbWVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNpZ25pbmdLZXlzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cykge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IFJldHVybmluZyBzaWduaW5nS2V5cyBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiandrc191cmlcIikudGhlbihqd2tzX3VyaSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogandrc191cmkgcmVjZWl2ZWRcIiwgandrc191cmkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24oandrc191cmkpLnRoZW4oa2V5U2V0ID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czoga2V5IHNldCByZWNlaXZlZFwiLCBrZXlTZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgha2V5U2V0LmtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IE1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBrZXlzIG9uIGtleXNldFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyA9IGtleVNldC5rZXlzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4vRXJyb3JSZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlcXVlc3QgfSBmcm9tICcuL1NpZ25pblJlcXVlc3QuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXNwb25zZSB9IGZyb20gJy4vU2lnbmluUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWdub3V0UmVxdWVzdCB9IGZyb20gJy4vU2lnbm91dFJlcXVlc3QuanMnO1xyXG5pbXBvcnQgeyBTaWdub3V0UmVzcG9uc2UgfSBmcm9tICcuL1NpZ25vdXRSZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblN0YXRlIH0gZnJvbSAnLi9TaWduaW5TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncyA9IHt9KSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzIGluc3RhbmNlb2YgT2lkY0NsaWVudFNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IG5ldyBPaWRjQ2xpZW50U2V0dGluZ3Moc2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3N0YXRlU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Muc3RhdGVTdG9yZTtcclxuICAgIH1cclxuICAgIGdldCBfdmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnZhbGlkYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCByZWRpcmVjdF91cmksXHJcbiAgICAgICAgLy8gZGF0YSB3YXMgbWVhbnQgdG8gYmUgdGhlIHBsYWNlIGEgY2FsbGVyIGNvdWxkIGluZGljYXRlIHRoZSBkYXRhIHRvXHJcbiAgICAgICAgLy8gaGF2ZSByb3VuZCB0cmlwcGVkLCBidXQgcGVvcGxlIHdlcmUgZ2V0dGluZyBjb25mdXNlZCwgc28gaSBhZGRlZCBzdGF0ZSAoc2luY2UgdGhhdCBtYXRjaGVzIHRoZSBzcGVjKVxyXG4gICAgICAgIC8vIGFuZCBzbyBub3cgaWYgZGF0YSBpcyBub3QgcGFzc2VkLCBidXQgc3RhdGUgaXMgdGhlbiBzdGF0ZSB3aWxsIGJlIHVzZWRcclxuICAgICAgICBkYXRhLCBzdGF0ZSwgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLFxyXG4gICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCBza2lwVXNlckluZm8gfSA9IHt9LFxyXG4gICAgICAgIHN0YXRlU3RvcmVcclxuICAgICkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbmluUmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgbGV0IGNsaWVudF9pZCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICByZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHNjb3BlID0gc2NvcGUgfHwgdGhpcy5fc2V0dGluZ3Muc2NvcGU7XHJcbiAgICAgICAgcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgLy8gaWRfdG9rZW5faGludCwgbG9naW5faGludCBhcmVuJ3QgYWxsb3dlZCBvbiBfc2V0dGluZ3NcclxuICAgICAgICBwcm9tcHQgPSBwcm9tcHQgfHwgdGhpcy5fc2V0dGluZ3MucHJvbXB0O1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8IHRoaXMuX3NldHRpbmdzLmRpc3BsYXk7XHJcbiAgICAgICAgbWF4X2FnZSA9IG1heF9hZ2UgfHwgdGhpcy5fc2V0dGluZ3MubWF4X2FnZTtcclxuICAgICAgICB1aV9sb2NhbGVzID0gdWlfbG9jYWxlcyB8fCB0aGlzLl9zZXR0aW5ncy51aV9sb2NhbGVzO1xyXG4gICAgICAgIGFjcl92YWx1ZXMgPSBhY3JfdmFsdWVzIHx8IHRoaXMuX3NldHRpbmdzLmFjcl92YWx1ZXM7XHJcbiAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNvdXJjZTtcclxuICAgICAgICByZXNwb25zZV9tb2RlID0gcmVzcG9uc2VfbW9kZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcbiAgICAgICAgZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFUb2tlblBhcmFtcztcclxuXHJcbiAgICAgICAgbGV0IGF1dGhvcml0eSA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgaWYgKFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpICYmIHJlc3BvbnNlX3R5cGUgIT09IFwiY29kZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJPcGVuSUQgQ29ubmVjdCBoeWJyaWQgZmxvdyBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3Q6IFJlY2VpdmVkIGF1dGhvcml6YXRpb24gZW5kcG9pbnRcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaWduaW5SZXF1ZXN0ID0gbmV3IFNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X2lkLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICAgICAgICAgIHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICAgICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgICAgIHNraXBVc2VySW5mb1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzaWduaW5TdGF0ZSA9IHNpZ25pblJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVTdG9yZS5zZXQoc2lnbmluU3RhdGUuaWQsIHNpZ25pblN0YXRlLnRvU3RvcmFnZVN0cmluZygpKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaW5SZXF1ZXN0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlXCIpO1xyXG5cclxuICAgICAgICBsZXQgdXNlUXVlcnkgPSB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlID09PSBcInF1ZXJ5XCIgfHwgXHJcbiAgICAgICAgICAgICghdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZSAmJiBTaWduaW5SZXF1ZXN0LmlzQ29kZSh0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlKSk7XHJcbiAgICAgICAgbGV0IGRlbGltaXRlciA9IHVzZVF1ZXJ5ID8gXCI/XCIgOiBcIiNcIjtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25pblJlc3BvbnNlKHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN0YXRlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShyZXNwb25zZS5zdGF0ZSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbm91dFJlcXVlc3Qoe2lkX3Rva2VuX2hpbnQsIGRhdGEsIHN0YXRlLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEVuZFNlc3Npb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IE5vIGVuZCBzZXNzaW9uIGVuZHBvaW50IHVybCByZXR1cm5lZFwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBSZWNlaXZlZCBlbmQgc2Vzc2lvbiBlbmRwb2ludFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgU2lnbm91dFJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faGludCxcclxuICAgICAgICAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdF90eXBlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25vdXRTdGF0ZSA9IHJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIGlmIChzaWdub3V0U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFNpZ25vdXQgcmVxdWVzdCBoYXMgc3RhdGUgdG8gcGVyc2lzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVTdG9yZS5zZXQoc2lnbm91dFN0YXRlLmlkLCBzaWdub3V0U3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCByZW1vdmVTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBTaWdub3V0UmVzcG9uc2UodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLndhcm4oXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogUmVzcG9uc2Ugd2FzIGVycm9yOiBcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3VuZGVmaW5lZCwgcmVzcG9uc2V9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUtleSA9IHJlc3BvbnNlLnN0YXRlO1xyXG5cclxuICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG5cclxuICAgICAgICB2YXIgc3RhdGVBcGkgPSByZW1vdmVTdGF0ZSA/IHN0YXRlU3RvcmUucmVtb3ZlLmJpbmQoc3RhdGVTdG9yZSkgOiBzdGF0ZVN0b3JlLmdldC5iaW5kKHN0YXRlU3RvcmUpO1xyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShzdGF0ZUtleSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmVkU3RhdGVTdHJpbmcpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NTaWdub3V0UmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCB0cnVlKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlOiBObyBzdGF0ZSBmcm9tIHN0b3JhZ2U7IHNraXBwaW5nIHZhbGlkYXRpbmcgcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclN0YWxlU3RhdGUoc3RhdGVTdG9yZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY2xlYXJTdGFsZVN0YXRlXCIpO1xyXG5cclxuICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG5cclxuICAgICAgICByZXR1cm4gU3RhdGUuY2xlYXJTdGFsZVN0YXRlKHN0YXRlU3RvcmUsIHRoaXMuc2V0dGluZ3Muc3RhbGVTdGF0ZUFnZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVZhbGlkYXRvciB9IGZyb20gJy4vUmVzcG9uc2VWYWxpZGF0b3IuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcblxyXG5jb25zdCBPaWRjTWV0YWRhdGFVcmxQYXRoID0gJy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJztcclxuXHJcbmNvbnN0IERlZmF1bHRSZXNwb25zZVR5cGUgPSBcImlkX3Rva2VuXCI7XHJcbmNvbnN0IERlZmF1bHRTY29wZSA9IFwib3BlbmlkXCI7XHJcbmNvbnN0IERlZmF1bHRTdGFsZVN0YXRlQWdlID0gNjAgKiAxNTsgLy8gc2Vjb25kc1xyXG5jb25zdCBEZWZhdWx0Q2xvY2tTa2V3SW5TZWNvbmRzID0gNjAgKiA1O1xyXG5cclxuZXhwb3J0IGNsYXNzIE9pZGNDbGllbnRTZXR0aW5ncyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgLy8gbWV0YWRhdGEgcmVsYXRlZFxyXG4gICAgICAgIGF1dGhvcml0eSwgbWV0YWRhdGFVcmwsIG1ldGFkYXRhLCBzaWduaW5nS2V5cyxcclxuICAgICAgICAvLyBjbGllbnQgcmVsYXRlZFxyXG4gICAgICAgIGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCwgcmVzcG9uc2VfdHlwZSA9IERlZmF1bHRSZXNwb25zZVR5cGUsIHNjb3BlID0gRGVmYXVsdFNjb3BlLFxyXG4gICAgICAgIHJlZGlyZWN0X3VyaSwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIC8vIG9wdGlvbmFsIHByb3RvY29sXHJcbiAgICAgICAgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBhY3JfdmFsdWVzLCByZXNvdXJjZSwgcmVzcG9uc2VfbW9kZSxcclxuICAgICAgICAvLyBiZWhhdmlvciBmbGFnc1xyXG4gICAgICAgIGZpbHRlclByb3RvY29sQ2xhaW1zID0gdHJ1ZSwgbG9hZFVzZXJJbmZvID0gdHJ1ZSxcclxuICAgICAgICBzdGFsZVN0YXRlQWdlID0gRGVmYXVsdFN0YWxlU3RhdGVBZ2UsIGNsb2NrU2tldyA9IERlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMsXHJcbiAgICAgICAgdXNlckluZm9Kd3RJc3N1ZXIgPSAnT1AnLFxyXG4gICAgICAgIC8vIG90aGVyIGJlaGF2aW9yXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IG5ldyBXZWJTdG9yYWdlU3RhdGVTdG9yZSgpLFxyXG4gICAgICAgIFJlc3BvbnNlVmFsaWRhdG9yQ3RvciA9IFJlc3BvbnNlVmFsaWRhdG9yLFxyXG4gICAgICAgIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICAgICAgLy8gZXh0cmEgcXVlcnkgcGFyYW1zXHJcbiAgICAgICAgZXh0cmFRdWVyeVBhcmFtcyA9IHt9LFxyXG4gICAgICAgIGV4dHJhVG9rZW5QYXJhbXMgPSB7fVxyXG4gICAgfSA9IHt9KSB7XHJcblxyXG4gICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IGF1dGhvcml0eTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IG1ldGFkYXRhVXJsO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSBzaWduaW5nS2V5cztcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJvbXB0ID0gcHJvbXB0O1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXkgPSBkaXNwbGF5O1xyXG4gICAgICAgIHRoaXMuX21heF9hZ2UgPSBtYXhfYWdlO1xyXG4gICAgICAgIHRoaXMuX3VpX2xvY2FsZXMgPSB1aV9sb2NhbGVzO1xyXG4gICAgICAgIHRoaXMuX2Fjcl92YWx1ZXMgPSBhY3JfdmFsdWVzO1xyXG4gICAgICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7XHJcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zID0gISFmaWx0ZXJQcm90b2NvbENsYWltcztcclxuICAgICAgICB0aGlzLl9sb2FkVXNlckluZm8gPSAhIWxvYWRVc2VySW5mbztcclxuICAgICAgICB0aGlzLl9zdGFsZVN0YXRlQWdlID0gc3RhbGVTdGF0ZUFnZTtcclxuICAgICAgICB0aGlzLl9jbG9ja1NrZXcgPSBjbG9ja1NrZXc7XHJcbiAgICAgICAgdGhpcy5fdXNlckluZm9Kd3RJc3N1ZXIgPSB1c2VySW5mb0p3dElzc3VlcjtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmU7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9yID0gbmV3IFJlc3BvbnNlVmFsaWRhdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHR5cGVvZiBleHRyYVF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0JyA/IGV4dHJhUXVlcnlQYXJhbXMgOiB7fTtcclxuICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0gdHlwZW9mIGV4dHJhVG9rZW5QYXJhbXMgPT09ICdvYmplY3QnID8gZXh0cmFUb2tlblBhcmFtcyA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsaWVudCBjb25maWdcclxuICAgIGdldCBjbGllbnRfaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcclxuICAgIH1cclxuICAgIHNldCBjbGllbnRfaWQodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudF9pZCkge1xyXG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxyXG4gICAgICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfY2xpZW50X2lkOiBjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGNsaWVudF9zZWNyZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9zZWNyZXQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfdHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfdHlwZTtcclxuICAgIH1cclxuICAgIGdldCBzY29wZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGU7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIG9wdGlvbmFsIHByb3RvY29sIHBhcmFtc1xyXG4gICAgZ2V0IHByb21wdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbXB0O1xyXG4gICAgfVxyXG4gICAgZ2V0IGRpc3BsYXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXk7XHJcbiAgICB9XHJcbiAgICBnZXQgbWF4X2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWF4X2FnZTtcclxuICAgIH1cclxuICAgIGdldCB1aV9sb2NhbGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91aV9sb2NhbGVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IGFjcl92YWx1ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fjcl92YWx1ZXM7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzb3VyY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc3BvbnNlX21vZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlX21vZGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIG1ldGFkYXRhXHJcbiAgICBnZXQgYXV0aG9yaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpdHk7XHJcbiAgICB9XHJcbiAgICBzZXQgYXV0aG9yaXR5KHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgLy8gb25lLXRpbWUgc2V0IG9ubHlcclxuICAgICAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50U2V0dGluZ3Muc2V0X2F1dGhvcml0eTogYXV0aG9yaXR5IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImF1dGhvcml0eSBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVVybCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX21ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5hdXRob3JpdHk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybFt0aGlzLl9tZXRhZGF0YVVybC5sZW5ndGggLSAxXSAhPT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gJy8nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gT2lkY01ldGFkYXRhVXJsUGF0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldHRhYmxlL2NhY2hhYmxlIG1ldGFkYXRhIHZhbHVlc1xyXG4gICAgZ2V0IG1ldGFkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YTtcclxuICAgIH1cclxuICAgIHNldCBtZXRhZGF0YSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpZ25pbmdLZXlzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5nS2V5cztcclxuICAgIH1cclxuICAgIHNldCBzaWduaW5nS2V5cyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYmVoYXZpb3IgZmxhZ3NcclxuICAgIGdldCBmaWx0ZXJQcm90b2NvbENsYWltcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyUHJvdG9jb2xDbGFpbXM7XHJcbiAgICB9XHJcbiAgICBnZXQgbG9hZFVzZXJJbmZvKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlckluZm87XHJcbiAgICB9XHJcbiAgICBnZXQgc3RhbGVTdGF0ZUFnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhbGVTdGF0ZUFnZTtcclxuICAgIH1cclxuICAgIGdldCBjbG9ja1NrZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrU2tldztcclxuICAgIH1cclxuICAgIGdldCB1c2VySW5mb0p3dElzc3VlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlckluZm9Kd3RJc3N1ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHN0YXRlU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlU3RvcmU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXh0cmEgcXVlcnkgcGFyYW1zXHJcbiAgICBnZXQgZXh0cmFRdWVyeVBhcmFtcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFRdWVyeVBhcmFtcztcclxuICAgIH1cclxuICAgIHNldCBleHRyYVF1ZXJ5UGFyYW1zKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpe1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYSB0b2tlbiBwYXJhbXNcclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4dHJhVG9rZW5QYXJhbXModmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhVG9rZW5QYXJhbXMgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgUG9wdXBXaW5kb3cgfSBmcm9tICcuL1BvcHVwV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cE5hdmlnYXRvci5jYWxsYmFja1wiKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuY29uc3QgQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsID0gNTAwO1xyXG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7JztcclxuLy9jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7cmVzaXphYmxlPXllcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwV2luZG93IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0ID0gcGFyYW1zLnBvcHVwV2luZG93VGFyZ2V0IHx8IERlZmF1bHRQb3B1cFRhcmdldDtcclxuICAgICAgICBsZXQgZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXAgPSB3aW5kb3cub3BlbignJywgdGFyZ2V0LCBmZWF0dXJlcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmN0b3I6IHBvcHVwIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZC5iaW5kKHRoaXMpLCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IEVycm9yIG9wZW5pbmcgcG9wdXAgd2luZG93XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IG5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogU2V0dGluZyBVUkwgaW4gcG9wdXBcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9pZCA9IHBhcmFtcy5pZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lkKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgcGFyYW1zLmlkXSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLndpbmRvdy5sb2NhdGlvbiA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jYWxsYmFjazogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIHBvcHVwIHdpbmRvd1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIExvZy5lcnJvcihcIlBvcHVwV2luZG93LmVycm9yOiBcIiwgbWVzc2FnZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9jbGVhbnVwKGtlZXBPcGVuKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2xlYW51cFwiKTtcclxuXHJcbiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyKTtcclxuICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBkZWxldGUgd2luZG93W1wicG9wdXBDYWxsYmFja19cIiArIHRoaXMuX2lkXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwICYmICFrZWVwT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrRm9yUG9wdXBDbG9zZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb3B1cCB8fCB0aGlzLl9wb3B1cC5jbG9zZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cCB3aW5kb3cgY2xvc2VkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoa2VlcE9wZW4pO1xyXG5cclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIHBvcHVwXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBcInBvcHVwQ2FsbGJhY2tfXCIgKyBkYXRhLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHdpbmRvdy5vcGVuZXJbbmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogcGFzc2luZyB1cmwgbWVzc2FnZSB0byBvcGVuZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIG1hdGNoaW5nIGNhbGxiYWNrIGZvdW5kIG9uIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gc3RhdGUgZm91bmQgaW4gcmVzcG9uc2UgdXJsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gd2luZG93Lm9wZW5lci4gQ2FuJ3QgY29tcGxldGUgbm90aWZpY2F0aW9uLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlZGlyZWN0TmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVkaXJlY3ROYXZpZ2F0b3IubmF2aWdhdGU6IE5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFyYW1zLnVzZVJlcGxhY2VUb05hdmlnYXRlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHBhcmFtcy51cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXJsKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgVXNlckluZm9TZXJ2aWNlIH0gZnJvbSAnLi9Vc2VySW5mb1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9FcnJvclJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcbmNvbnN0IFByb3RvY29sQ2xhaW1zID0gW1wibm9uY2VcIiwgXCJhdF9oYXNoXCIsIFwiaWF0XCIsIFwibmJmXCIsIFwiZXhwXCIsIFwiYXVkXCIsIFwiaXNzXCIsIFwiY19oYXNoXCJdO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlVmFsaWRhdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICBVc2VySW5mb1NlcnZpY2VDdG9yID0gVXNlckluZm9TZXJ2aWNlLCBcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsLFxyXG4gICAgICAgIFRva2VuQ2xpZW50Q3RvciA9IFRva2VuQ2xpZW50KSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5jdG9yOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gUmVzcG9uc2VWYWxpZGF0b3JcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fdXNlckluZm9TZXJ2aWNlID0gbmV3IFVzZXJJbmZvU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICAgICAgdGhpcy5fdG9rZW5DbGllbnQgPSBuZXcgVG9rZW5DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU2lnbmluUGFyYW1zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHN0YXRlIHByb2Nlc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiB0b2tlbnMgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NDbGFpbXMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiBjbGFpbXMgcHJvY2Vzc2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVNpZ25vdXRSZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoc3RhdGUuaWQgIT09IHJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgdGhlIHN0YXRlIG1hdGNoZXMsIHRha2UgdGhlIHN0b3JlZCBkYXRhXHJcbiAgICAgICAgLy8gYW5kIHNldCBpdCBpbnRvIHRoZSByZXNwb25zZSBzbyBjYWxsZXJzIGNhbiBnZXQgdGhlaXIgc3RhdGVcclxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgYm90aCBzdWNjZXNzICYgZXJyb3Igb3V0Y29tZXNcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogc3RhdGUgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgIHJlc3BvbnNlLnN0YXRlID0gc3RhdGUuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IFJlc3BvbnNlIHdhcyBlcnJvclwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3JSZXNwb25zZShyZXNwb25zZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NTaWduaW5QYXJhbXMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlLmlkICE9PSByZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogU3RhdGUgZG9lcyBub3QgbWF0Y2hcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm8gY2xpZW50X2lkIG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gY2xpZW50X2lkIG9uIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBObyBhdXRob3JpdHkgb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdXRob3JpdHkgb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdGhlIGF1dGhvcml0eSB0byBiZSBsb2FkZWQgZnJvbSB0aGUgc2lnbmluIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ID0gc3RhdGUuYXV0aG9yaXR5O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbnN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgYXV0aG9yaXR5IGlmIHRoZSBhdXRob3JpdHkgaXMgbm90IGxvYWRlZCBmcm9tIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAmJiB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgIT09IHN0YXRlLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogYXV0aG9yaXR5IG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdXRob3JpdHkgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHRoZSBjbGllbnRfaWQgdG8gYmUgbG9hZGVkIGZyb20gdGhlIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCA9IHN0YXRlLmNsaWVudF9pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZW5zdXJlIHdlJ3JlIHVzaW5nIHRoZSBjb3JyZWN0IGNsaWVudF9pZCBpZiB0aGUgY2xpZW50X2lkIGlzIG5vdCBsb2FkZWQgZnJvbSBzaWduaW4gc3RhdGVcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgJiYgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkICE9PSBzdGF0ZS5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IGNsaWVudF9pZCBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiY2xpZW50X2lkIG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyB0aGUgc3RhdGUgbWF0Y2hlcywgdGFrZSB0aGUgc3RvcmVkIGRhdGFcclxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxyXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBzdGF0ZSB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUubm9uY2UgJiYgIXJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBFeHBlY3RpbmcgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBpZF90b2tlbiBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlICYmIHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBOb3QgZXhwZWN0aW5nIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5leHBlY3RlZCBpZF90b2tlbiBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUuY29kZV92ZXJpZmllciAmJiAhcmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogRXhwZWN0aW5nIGNvZGUgaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjb2RlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuY29kZV92ZXJpZmllciAmJiByZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBOb3QgZXhwZWN0aW5nIGNvZGUgaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGNvZGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zY29wZSkge1xyXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIHNjb3BlIG9uIHRoZSByZXNwb25zZSwgdGhlbiBhc3N1bWUgYWxsIHNjb3BlcyBncmFudGVkIChwZXItc3BlYykgYW5kIGNvcHkgb3ZlciBzY29wZXMgZnJvbSBvcmlnaW5hbCByZXF1ZXN0XHJcbiAgICAgICAgICAgIHJlc3BvbnNlLnNjb3BlID0gc3RhdGUuc2NvcGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc0NsYWltcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuaXNPcGVuSWRDb25uZWN0KSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiByZXNwb25zZSBpcyBPSURDLCBwcm9jZXNzaW5nIGNsYWltc1wiKTtcclxuXHJcbiAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyhyZXNwb25zZS5wcm9maWxlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5za2lwVXNlckluZm8gIT09IHRydWUgJiYgdGhpcy5fc2V0dGluZ3MubG9hZFVzZXJJbmZvICYmIHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IGxvYWRpbmcgdXNlciBpbmZvXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zKHJlc3BvbnNlLmFjY2Vzc190b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkIGZyb20gdXNlciBpbmZvIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhaW1zLnN1YiAhPT0gcmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBhY2Nlc3NfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQsIHVwZGF0ZWQgcHJvZmlsZTpcIiwgcmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IG5vdCBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIG5vdCBPSURDLCBub3QgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVyZ2VDbGFpbXMoY2xhaW1zMSwgY2xhaW1zMikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMxKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjbGFpbXMyKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBjbGFpbXMyW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXS5pbmRleE9mKHZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFtuYW1lXSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB0aGlzLl9tZXJnZUNsYWltcyhyZXN1bHRbbmFtZV0sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBbcmVzdWx0W25hbWVdLCB2YWx1ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJQcm90b2NvbENsYWltcyhjbGFpbXMpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXMsIGluY29taW5nIGNsYWltczpcIiwgY2xhaW1zKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGNsYWltcyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMpIHtcclxuICAgICAgICAgICAgUHJvdG9jb2xDbGFpbXMuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHRbdHlwZV07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zOiBwcm90b2NvbCBjbGFpbXMgZmlsdGVyZWRcIiwgcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIG5vdCBmaWx0ZXJlZFwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGNvZGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzQ29kZShzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlbiBhbmQgYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBObyBjb2RlIHRvIHByb2Nlc3Mgb3IgaWRfdG9rZW4gdG8gdmFsaWRhdGVcIik7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NDb2RlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHN0YXRlLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogc3RhdGUuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgY29kZSA6IHJlc3BvbnNlLmNvZGUsXHJcbiAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogc3RhdGUucmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBzdGF0ZS5jb2RlX3ZlcmlmaWVyXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMgJiYgdHlwZW9mKHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QsIHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlKHJlcXVlc3QpLnRoZW4odG9rZW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmb3IodmFyIGtleSBpbiB0b2tlblJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVtrZXldID0gdG9rZW5SZXNwb25zZVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ29kZTogdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc2Z1bCwgcHJvY2Vzc2luZyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NvZGU6IHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NmdWwsIHJldHVybmluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG5cclxuICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gc3RhdGUuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogVmFsaWRhaW5nIEpXVCBhdHRyaWJ1dGVzOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKHJlc3BvbnNlLmlkX3Rva2VuLCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLm5vbmNlICYmIHN0YXRlLm5vbmNlICE9PSBwYXlsb2FkLm5vbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IEludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKCFzdGF0ZS5ub25jZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBub25jZSBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIG5vbmNlIG9uIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXNwb25zZS5pZF90b2tlbik7XHJcbiAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIgfHwgIWp3dC5wYXlsb2FkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiLCBqd3QpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5ub25jZSAhPT0gand0LnBheWxvYWQubm9uY2UpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgaXNzdWVyXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCBrZXk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWtpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2lkIGlzIG1hbmRhdG9yeSBvbmx5IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGtleXMgaW4gdGhlIHJlZmVyZW5jZWQgSldLIFNldCBkb2N1bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgICAgICB9KVswXTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFZhbGlkYWluZyBKV1Q7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3QocmVzcG9uc2UuaWRfdG9rZW4sIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogSldUIHZhbGlkYXRpb24gc3VjY2Vzc2Z1bFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3QucGF5bG9hZC5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gand0LnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZmlsdGVyQnlBbGcoa2V5cywgYWxnKXtcclxuICAgICAgICB2YXIga3R5ID0gbnVsbDtcclxuICAgICAgICBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJSU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlJTQVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIlBTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUFNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJFU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIkVDXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBMb29raW5nIGZvciBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5KTtcclxuXHJcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXkua3R5ID09PSBrdHk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogTnVtYmVyIG9mIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHksIGtleXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnByb2ZpbGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBwcm9maWxlIGxvYWRlZCBmcm9tIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBhdF9oYXNoIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXRfaGFzaCBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXNwb25zZS5pZF90b2tlbik7XHJcbiAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IEZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiLCBqd3QpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoYXNoQWxnID0gand0LmhlYWRlci5hbGc7XHJcbiAgICAgICAgaWYgKCFoYXNoQWxnIHx8IGhhc2hBbGcubGVuZ3RoICE9PSA1KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoYXNoQml0cyA9IGhhc2hBbGcuc3Vic3RyKDIsIDMpO1xyXG4gICAgICAgIGlmICghaGFzaEJpdHMpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZywgaGFzaEJpdHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGhhc2hCaXRzID0gcGFyc2VJbnQoaGFzaEJpdHMpO1xyXG4gICAgICAgIGlmIChoYXNoQml0cyAhPT0gMjU2ICYmIGhhc2hCaXRzICE9PSAzODQgJiYgaGFzaEJpdHMgIT09IDUxMikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnLCBoYXNoQml0cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNoYSA9IFwic2hhXCIgKyBoYXNoQml0cztcclxuICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2pvc2VVdGlsLmhhc2hTdHJpbmcocmVzcG9uc2UuYWNjZXNzX3Rva2VuLCBzaGEpO1xyXG4gICAgICAgIGlmICghaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuIGhhc2ggZmFpbGVkOlwiLCBzaGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxlZnQgPSBoYXNoLnN1YnN0cigwLCBoYXNoLmxlbmd0aCAvIDIpO1xyXG4gICAgICAgIHZhciBsZWZ0X2I2NHUgPSB0aGlzLl9qb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChsZWZ0KTtcclxuICAgICAgICBpZiAobGVmdF9iNjR1ICE9PSByZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIsIGxlZnRfYjY0dSwgcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBzdWNjZXNzXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IENoZWNrU2Vzc2lvbklGcmFtZSB9IGZyb20gJy4vQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlc3Npb25Nb25pdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlciwgQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciA9IENoZWNrU2Vzc2lvbklGcmFtZSwgdGltZXIgPSBHbG9iYWwudGltZXIpIHtcclxuICAgICAgICBpZiAoIXVzZXJNYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yLmN0b3I6IE5vIHVzZXIgbWFuYWdlciBwYXNzZWQgdG8gU2Vzc2lvbk1vbml0b3JcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVzZXJNYW5hZ2VyXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIgPSB1c2VyTWFuYWdlcjtcclxuICAgICAgICB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yID0gQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvcjtcclxuICAgICAgICB0aGlzLl90aW1lciA9IHRpbWVyO1xyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkVXNlckxvYWRlZCh0aGlzLl9zdGFydC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkVXNlclVubG9hZGVkKHRoaXMuX3N0b3AuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1hbnVhbGx5IGhlcmUgc2luY2UgY2FsbGluZyBnZXRVc2VyIFxyXG4gICAgICAgICAgICAvLyBkb2Vzbid0IHRyaWdnZXIgbG9hZCBldmVudC5cclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHVzZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBVc2VyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgJiYgc2Vzc2lvbi5zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzZXNzaW9uLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2Vzc2lvbi5zaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodG1wVXNlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gcXVlcnlTZXNzaW9uU3RhdHVzOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IgY3RvcjogZXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9zZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlck1hbmFnZXIuc2V0dGluZ3M7XHJcbiAgICB9XHJcbiAgICBnZXQgX21ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlck1hbmFnZXIubWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9jbGllbnRfaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgIH1cclxuICAgIGdldCBfY2hlY2tTZXNzaW9uSW50ZXJ2YWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLmNoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3Muc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgX3N0YXJ0KHVzZXIpIHtcclxuICAgICAgICBsZXQgc2Vzc2lvbl9zdGF0ZSA9IHVzZXIuc2Vzc2lvbl9zdGF0ZTtcclxuXHJcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdGUpIHtcclxuICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViID0gdXNlci5wcm9maWxlLnN1YjtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NpZCA9IHVzZXIucHJvZmlsZS5zaWQ7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb25fc3RhdGUsIFwiLCBzdWI6XCIsIHRoaXMuX3N1Yik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb25fc3RhdGUsIFwiLCBhbm9ueW1vdXMgdXNlclwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRDaGVja1Nlc3Npb25JZnJhbWUoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IEluaXRpYWxpemluZyBjaGVjayBzZXNzaW9uIGlmcmFtZVwiKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsaWVudF9pZCA9IHRoaXMuX2NsaWVudF9pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGludGVydmFsID0gdGhpcy5fY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdG9wT25FcnJvciA9IHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lID0gbmV3IHRoaXMuX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IodGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKSwgY2xpZW50X2lkLCB1cmwsIGludGVydmFsLCBzdG9wT25FcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5sb2FkKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RhcnQoc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IE5vIGNoZWNrIHNlc3Npb24gaWZyYW1lIGZvdW5kIGluIHRoZSBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBub24tcHJvbWlzZSBjYWxsYmFja1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogRXJyb3IgZnJvbSBnZXRDaGVja1Nlc3Npb25JZnJhbWU6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9zdG9wKCkge1xyXG4gICAgICAgIHRoaXMuX3N1YiA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9zaWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0b3BcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubW9uaXRvckFub255bW91c1Nlc3Npb24pIHtcclxuICAgICAgICAgICAgLy8gdXNpbmcgYSB0aW1lciB0byBkZWxheSByZS1pbml0aWFsaXphdGlvbiB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHNpZ25vdXRcclxuICAgICAgICAgICAgbGV0IHRpbWVySGFuZGxlID0gdGhpcy5fdGltZXIuc2V0SW50ZXJ2YWwoKCk9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVyLmNsZWFySW50ZXJ2YWwodGltZXJIYW5kbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1cygpLnRoZW4oc2Vzc2lvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRtcFVzZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGUgOiBzZXNzaW9uLnNlc3Npb25fc3RhdGVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnN1YiAmJiBzZXNzaW9uLnNpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0bXBVc2VyLnByb2ZpbGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWI6IHNlc3Npb24uc3ViLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkOiBzZXNzaW9uLnNpZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh0bXBVc2VyKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjYWxsYmFja1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yOiBlcnJvciBmcm9tIHF1ZXJ5U2Vzc2lvblN0YXR1czpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2NhbGxiYWNrKCkge1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1cygpLnRoZW4oc2Vzc2lvbiA9PiB7XHJcbiAgICAgICAgICAgIHZhciByYWlzZUV2ZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgPT09IHRoaXMuX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJhaXNlRXZlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RhcnQoc2Vzc2lvbi5zZXNzaW9uX3N0YXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc2lkID09PSB0aGlzLl9zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFNhbWUgc3ViIHN0aWxsIGxvZ2dlZCBpbiBhdCBPUCwgc2Vzc2lvbiBzdGF0ZSBoYXMgY2hhbmdlZCwgcmVzdGFydGluZyBjaGVjayBzZXNzaW9uIGlmcmFtZTsgc2Vzc2lvbl9zdGF0ZTpcIiwgc2Vzc2lvbi5zZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogRGlmZmVyZW50IHN1YmplY3Qgc2lnbmVkIGludG8gT1A6XCIsIHNlc3Npb24uc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU3ViamVjdCBubyBsb25nZXIgc2lnbmVkIGludG8gT1BcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyYWlzZUV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s7IHJhaXNpbmcgc2lnbmVkIG91dCBldmVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZE91dCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s7IHJhaXNpbmcgc2lnbmVkIGluIGV2ZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkSW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zdWIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogRXJyb3IgY2FsbGluZyBxdWVyeUN1cnJlbnRTaWduaW5TZXNzaW9uOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblN0YXRlIH0gZnJvbSAnLi9TaWduaW5TdGF0ZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluUmVxdWVzdCB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgLy8gbWFuZGF0b3J5XHJcbiAgICAgICAgdXJsLCBjbGllbnRfaWQsIHJlZGlyZWN0X3VyaSwgcmVzcG9uc2VfdHlwZSwgc2NvcGUsIGF1dGhvcml0eSxcclxuICAgICAgICAvLyBvcHRpb25hbFxyXG4gICAgICAgIGRhdGEsIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcywgcmVzb3VyY2UsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgcmVxdWVzdCwgcmVxdWVzdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSwgY2xpZW50X3NlY3JldCwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvXHJcbiAgICB9KSB7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJlZGlyZWN0X3VyaSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlZGlyZWN0X3VyaSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZGlyZWN0X3VyaVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gcmVzcG9uc2VfdHlwZSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlc3BvbnNlX3R5cGVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2NvcGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBzY29wZSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjb3BlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGF1dGhvcml0eSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImF1dGhvcml0eVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBvaWRjID0gU2lnbmluUmVxdWVzdC5pc09pZGMocmVzcG9uc2VfdHlwZSk7XHJcbiAgICAgICAgbGV0IGNvZGUgPSBTaWduaW5SZXF1ZXN0LmlzQ29kZShyZXNwb25zZV90eXBlKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZV9tb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlX21vZGUgPSBTaWduaW5SZXF1ZXN0LmlzQ29kZShyZXNwb25zZV90eXBlKSA/IFwicXVlcnlcIiA6IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFNpZ25pblN0YXRlKHsgbm9uY2U6IG9pZGMsIFxyXG4gICAgICAgICAgICBkYXRhLCBjbGllbnRfaWQsIGF1dGhvcml0eSwgcmVkaXJlY3RfdXJpLCBcclxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogY29kZSwgXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZSwgcmVzcG9uc2VfbW9kZSxcclxuICAgICAgICAgICAgY2xpZW50X3NlY3JldCwgc2NvcGUsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mbyB9KTtcclxuXHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjbGllbnRfaWRcIiwgY2xpZW50X2lkKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlZGlyZWN0X3VyaVwiLCByZWRpcmVjdF91cmkpO1xyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwicmVzcG9uc2VfdHlwZVwiLCByZXNwb25zZV90eXBlKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInNjb3BlXCIsIHNjb3BlKTtcclxuXHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzdGF0ZVwiLCB0aGlzLnN0YXRlLmlkKTtcclxuICAgICAgICBpZiAob2lkYykge1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcIm5vbmNlXCIsIHRoaXMuc3RhdGUubm9uY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29kZSkge1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNvZGVfY2hhbGxlbmdlXCIsIHRoaXMuc3RhdGUuY29kZV9jaGFsbGVuZ2UpO1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNvZGVfY2hhbGxlbmdlX21ldGhvZFwiLCBcIlMyNTZcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb3B0aW9uYWwgPSB7IHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcywgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCByZXNwb25zZV9tb2RlIH07XHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gb3B0aW9uYWwpe1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uYWxba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwga2V5LCBvcHRpb25hbFtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gZXh0cmFRdWVyeVBhcmFtcyl7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgZXh0cmFRdWVyeVBhcmFtc1trZXldKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT2lkYyhyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwiaWRfdG9rZW5cIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNPQXV0aChyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwidG9rZW5cIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGlzQ29kZShyZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwiY29kZVwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAhIShyZXN1bHRbMF0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuY29uc3QgT2lkY1Njb3BlID0gXCJvcGVuaWRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWduaW5SZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwsIGRlbGltaXRlciA9IFwiI1wiKSB7XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZXMgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yID0gdmFsdWVzLmVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSB2YWx1ZXMuZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSB2YWx1ZXMuZXJyb3JfdXJpO1xyXG5cclxuICAgICAgICB0aGlzLmNvZGUgPSB2YWx1ZXMuY29kZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gdmFsdWVzLnN0YXRlO1xyXG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSB2YWx1ZXMuaWRfdG9rZW47XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uX3N0YXRlID0gdmFsdWVzLnNlc3Npb25fc3RhdGU7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NfdG9rZW4gPSB2YWx1ZXMuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgIHRoaXMudG9rZW5fdHlwZSA9IHZhbHVlcy50b2tlbl90eXBlO1xyXG4gICAgICAgIHRoaXMuc2NvcGUgPSB2YWx1ZXMuc2NvcGU7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlID0gdW5kZWZpbmVkOyAvLyB3aWxsIGJlIHNldCBmcm9tIFJlc3BvbnNlVmFsaWRhdG9yXHJcblxyXG4gICAgICAgIHRoaXMuZXhwaXJlc19pbiA9IHZhbHVlcy5leHBpcmVzX2luO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVzX2luKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGlyZXNfYXQpIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwaXJlc19hdCAtIG5vdztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHNldCBleHBpcmVzX2luKHZhbHVlKXtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICBpZiAodHlwZW9mIGV4cGlyZXNfaW4gPT09ICdudW1iZXInICYmIGV4cGlyZXNfaW4gPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IG5vdyArIGV4cGlyZXNfaW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVkKCkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gdGhpcy5leHBpcmVzX2luO1xyXG4gICAgICAgIGlmIChleHBpcmVzX2luICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGV4cGlyZXNfaW4gPD0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2NvcGVzKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zY29wZSB8fCBcIlwiKS5zcGxpdChcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzT3BlbklkQ29ubmVjdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY29wZXMuaW5kZXhPZihPaWRjU2NvcGUpID49IDAgfHwgISF0aGlzLmlkX3Rva2VuO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL1N0YXRlLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3JhbmRvbS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7bm9uY2UsIGF1dGhvcml0eSwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIGNvZGVfdmVyaWZpZXIsIHJlc3BvbnNlX21vZGUsIGNsaWVudF9zZWNyZXQsIHNjb3BlLCBleHRyYVRva2VuUGFyYW1zLCBza2lwVXNlckluZm99ID0ge30pIHtcclxuICAgICAgICBzdXBlcihhcmd1bWVudHNbMF0pO1xyXG5cclxuICAgICAgICBpZiAobm9uY2UgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9uY2UgPSByYW5kb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9uY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9uY2UgPSBub25jZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2RlX3ZlcmlmaWVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vIHJhbmRvbSgpIHByb2R1Y2VzIDMyIGxlbmd0aFxyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gcmFuZG9tKCkgKyByYW5kb20oKSArIHJhbmRvbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb2RlX3ZlcmlmaWVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvZGVfdmVyaWZpZXIgPSBjb2RlX3ZlcmlmaWVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5jb2RlX3ZlcmlmaWVyKSB7XHJcbiAgICAgICAgICAgIGxldCBoYXNoID0gSm9zZVV0aWwuaGFzaFN0cmluZyh0aGlzLmNvZGVfdmVyaWZpZXIsIFwiU0hBMjU2XCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX2NoYWxsZW5nZSA9IEpvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGhhc2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IGF1dGhvcml0eTtcclxuICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSBjbGllbnRfaWQ7XHJcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGU7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X3NlY3JldCA9IGNsaWVudF9zZWNyZXQ7XHJcbiAgICAgICAgdGhpcy5fc2NvcGUgPSBzY29wZTtcclxuICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0gZXh0cmFUb2tlblBhcmFtcztcclxuICAgICAgICB0aGlzLl9za2lwVXNlckluZm8gPSBza2lwVXNlckluZm87XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vbmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub25jZTtcclxuICAgIH1cclxuICAgIGdldCBhdXRob3JpdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhvcml0eTtcclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcclxuICAgIH1cclxuICAgIGdldCByZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBjb2RlX3ZlcmlmaWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlX3ZlcmlmaWVyO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNvZGVfY2hhbGxlbmdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlX2NoYWxsZW5nZTtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV9tb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNsaWVudF9zZWNyZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9zZWNyZXQ7XHJcbiAgICB9XHJcbiAgICBnZXQgc2NvcGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGV4dHJhVG9rZW5QYXJhbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhVG9rZW5QYXJhbXM7XHJcbiAgICB9XHJcbiAgICBnZXQgc2tpcFVzZXJJbmZvKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9za2lwVXNlckluZm87XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRvU3RvcmFnZVN0cmluZygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS50b1N0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcclxuICAgICAgICAgICAgY3JlYXRlZDogdGhpcy5jcmVhdGVkLFxyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGU6IHRoaXMucmVxdWVzdF90eXBlLFxyXG4gICAgICAgICAgICBub25jZTogdGhpcy5ub25jZSxcclxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogdGhpcy5jb2RlX3ZlcmlmaWVyLFxyXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6IHRoaXMucmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICBhdXRob3JpdHk6IHRoaXMuYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50X2lkLFxyXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlOiB0aGlzLnJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgc2NvcGU6IHRoaXMuc2NvcGUsXHJcbiAgICAgICAgICAgIGV4dHJhVG9rZW5QYXJhbXMgOiB0aGlzLmV4dHJhVG9rZW5QYXJhbXMsXHJcbiAgICAgICAgICAgIHNraXBVc2VySW5mbzogdGhpcy5za2lwVXNlckluZm9cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlNpZ25pblN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKTtcclxuICAgICAgICByZXR1cm4gbmV3IFNpZ25pblN0YXRlKGRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbm91dFJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe3VybCwgaWRfdG9rZW5faGludCwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLCBkYXRhLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGV9KSB7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbm91dFJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkX3Rva2VuX2hpbnQpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJpZF90b2tlbl9oaW50XCIsIGlkX3Rva2VuX2hpbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSkge1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaVwiLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgU3RhdGUoeyBkYXRhLCByZXF1ZXN0X3R5cGUgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzdGF0ZVwiLCB0aGlzLnN0YXRlLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gZXh0cmFRdWVyeVBhcmFtcyl7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgZXh0cmFRdWVyeVBhcmFtc1trZXldKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbm91dFJlc3BvbnNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHVybCkge1xyXG5cclxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgXCI/XCIpO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yID0gdmFsdWVzLmVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSB2YWx1ZXMuZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSB2YWx1ZXMuZXJyb3JfdXJpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0gdmFsdWVzLnN0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWxlbnRSZW5ld1NlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHVzZXJNYW5hZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIgPSB1c2VyTWFuYWdlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gdGhpcy5fdG9rZW5FeHBpcmluZy5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcblxyXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgdHJpZ2dlciBsb2FkaW5nIG9mIHRoZSB1c2VyIHNvIHRoZSBleHBpcmluZyBldmVudHMgY2FuIGJlIGluaXRpYWxpemVkXHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXI9PntcclxuICAgICAgICAgICAgICAgIC8vIGRlbGliZXJhdGUgbm9wXHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0OiBFcnJvciBmcm9tIGdldFVzZXI6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5yZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nKHRoaXMuX2NhbGxiYWNrKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfdG9rZW5FeHBpcmluZygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5zaWduaW5TaWxlbnQoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTaWxlbnRSZW5ld1NlcnZpY2UuX3Rva2VuRXhwaXJpbmc6IFNpbGVudCB0b2tlbiByZW5ld2FsIHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBFcnJvciBmcm9tIHNpZ25pblNpbGVudDpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlU2lsZW50UmVuZXdFcnJvcihlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3JhbmRvbS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3Ioe2lkLCBkYXRhLCBjcmVhdGVkLCByZXF1ZXN0X3R5cGV9ID0ge30pIHtcclxuICAgICAgICB0aGlzLl9pZCA9IGlkIHx8IHJhbmRvbSgpO1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNyZWF0ZWQgPT09ICdudW1iZXInICYmIGNyZWF0ZWQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBjcmVhdGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY3JlYXRlZCA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmVxdWVzdF90eXBlID0gIHJlcXVlc3RfdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gICAgfVxyXG4gICAgZ2V0IGRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgICB9XHJcbiAgICBnZXQgY3JlYXRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlZDtcclxuICAgIH1cclxuICAgIGdldCByZXF1ZXN0X3R5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RfdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZShKU09OLnBhcnNlKHN0b3JhZ2VTdHJpbmcpKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY2xlYXJTdGFsZVN0YXRlKHN0b3JhZ2UsIGFnZSkge1xyXG5cclxuICAgICAgICB2YXIgY3V0b2ZmID0gRGF0ZS5ub3coKSAvIDEwMDAgLSBhZ2U7XHJcblxyXG4gICAgICAgIHJldHVybiBzdG9yYWdlLmdldEFsbEtleXMoKS50aGVuKGtleXMgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBrZXlzXCIsIGtleXMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGtleXNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHN0b3JhZ2UuZ2V0KGtleSkudGhlbihpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBTdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhpdGVtKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogZ290IGl0ZW0gZnJvbSBrZXk6IFwiLCBrZXksIHN0YXRlLmNyZWF0ZWQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jcmVhdGVkIDw9IGN1dG9mZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogRXJyb3IgcGFyc2luZyBzdGF0ZSBmb3Iga2V5XCIsIGtleSwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogbm8gaXRlbSBpbiBzdG9yYWdlIGZvciBrZXk6IFwiLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IHJlbW92ZWQgaXRlbSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2UucmVtb3ZlKGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiB3YWl0aW5nIG9uIHByb21pc2UgY291bnQ6XCIsIHByb21pc2VzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9FdmVudC5qcyc7XHJcblxyXG5jb25zdCBUaW1lckR1cmF0aW9uID0gNTsgLy8gc2Vjb25kc1xyXG5cclxuZXhwb3J0IGNsYXNzIFRpbWVyIGV4dGVuZHMgRXZlbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHRpbWVyID0gR2xvYmFsLnRpbWVyLCBub3dGdW5jID0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3VwZXIobmFtZSk7XHJcbiAgICAgICAgdGhpcy5fdGltZXIgPSB0aW1lcjtcclxuXHJcbiAgICAgICAgaWYgKG5vd0Z1bmMpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9IG5vd0Z1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3dGdW5jID0gKCkgPT4gRGF0ZS5ub3coKSAvIDEwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3coKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuX25vd0Z1bmMoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChkdXJhdGlvbikge1xyXG4gICAgICAgIGlmIChkdXJhdGlvbiA8PSAwKSB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZHVyYXRpb24gPSBwYXJzZUludChkdXJhdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBleHBpcmF0aW9uID0gdGhpcy5ub3cgKyBkdXJhdGlvbjtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uID09PSBleHBpcmF0aW9uICYmIHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcmVpbml0aWFsaXplIHRvIHNhbWUgZXhwaXJhdGlvbiwgc28gYmFpbCBvdXRcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBza2lwcGluZyBpbml0aWFsaXphdGlvbiBzaW5jZSBhbHJlYWR5IGluaXRpYWxpemVkIGZvciBleHBpcmF0aW9uOlwiLCB0aGlzLmV4cGlyYXRpb24pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJUaW1lci5pbml0IHRpbWVyIFwiICsgdGhpcy5fbmFtZSArIFwiIGZvciBkdXJhdGlvbjpcIiwgZHVyYXRpb24pO1xyXG4gICAgICAgIHRoaXMuX2V4cGlyYXRpb24gPSBleHBpcmF0aW9uO1xyXG5cclxuICAgICAgICAvLyB3ZSdyZSB1c2luZyBhIGZhaXJseSBzaG9ydCB0aW1lciBhbmQgdGhlbiBjaGVja2luZyB0aGUgZXhwaXJhdGlvbiBpbiB0aGVcclxuICAgICAgICAvLyBjYWxsYmFjayB0byBoYW5kbGUgc2NlbmFyaW9zIHdoZXJlIHRoZSBicm93c2VyIGRldmljZSBzbGVlcHMsIGFuZCB0aGVuXHJcbiAgICAgICAgLy8gdGhlIHRpbWVycyBlbmQgdXAgZ2V0dGluZyBkZWxheWVkLlxyXG4gICAgICAgIHZhciB0aW1lckR1cmF0aW9uID0gVGltZXJEdXJhdGlvbjtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPCB0aW1lckR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRpbWVyRHVyYXRpb24gPSBkdXJhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSB0aGlzLl90aW1lci5zZXRJbnRlcnZhbCh0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpLCB0aW1lckR1cmF0aW9uICogMTAwMCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBleHBpcmF0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBpcmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fdGltZXJIYW5kbGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FuY2VsOiBcIiwgdGhpcy5fbmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyLmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXJIYW5kbGUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lckhhbmRsZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB2YXIgZGlmZiA9IHRoaXMuX2V4cGlyYXRpb24gLSB0aGlzLm5vdztcclxuICAgICAgICBMb2cuZGVidWcoXCJUaW1lci5jYWxsYmFjazsgXCIgKyB0aGlzLl9uYW1lICsgXCIgdGltZXIgZXhwaXJlcyBpbjpcIiwgZGlmZik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9leHBpcmF0aW9uIDw9IHRoaXMubm93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIHN1cGVyLnJhaXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IEpzb25TZXJ2aWNlIH0gZnJvbSAnLi9Kc29uU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRva2VuQ2xpZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKCk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4Y2hhbmdlQ29kZShhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MuZ3JhbnRfdHlwZSA9IGFyZ3MuZ3JhbnRfdHlwZSB8fCBcImF1dGhvcml6YXRpb25fY29kZVwiO1xyXG4gICAgICAgIGFyZ3MuY2xpZW50X2lkID0gYXJncy5jbGllbnRfaWQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG5cclxuICAgICAgICBpZiAoIWFyZ3MuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLnJlZGlyZWN0X3VyaSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIHJlZGlyZWN0X3VyaSBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIHJlZGlyZWN0X3VyaSBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5jb2RlX3ZlcmlmaWVyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogTm8gY29kZV92ZXJpZmllciBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNvZGVfdmVyaWZpZXIgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY2xpZW50X2lkIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0VG9rZW5FbmRwb2ludChmYWxzZSkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IFJlY2VpdmVkIHRva2VuIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLnBvc3RGb3JtKHVybCwgYXJncykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IHJlc3BvbnNlIHJlY2VpdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MuZ3JhbnRfdHlwZSA9IGFyZ3MuZ3JhbnRfdHlwZSB8fCBcInJlZnJlc2hfdG9rZW5cIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLmNsaWVudF9zZWNyZXQgPSBhcmdzLmNsaWVudF9zZWNyZXQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IE5vIHJlZnJlc2hfdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWZyZXNoX3Rva2VuIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY2xpZW50X2lkIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0VG9rZW5FbmRwb2ludChmYWxzZSkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogUmVjZWl2ZWQgdG9rZW4gZW5kcG9pbnRcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UucG9zdEZvcm0odXJsLCBhcmdzKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiByZXNwb25zZSByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmNvbnN0IEFjY2Vzc1Rva2VuVHlwZUhpbnQgPSBcImFjY2Vzc190b2tlblwiO1xyXG5jb25zdCBSZWZyZXNoVG9rZW5UeXBlSGludCA9IFwicmVmcmVzaF90b2tlblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRva2VuUmV2b2NhdGlvbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgWE1MSHR0cFJlcXVlc3RDdG9yID0gR2xvYmFsLlhNTEh0dHBSZXF1ZXN0LCBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQuY3RvcjogTm8gc2V0dGluZ3MgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNldHRpbmdzIHByb3ZpZGVkLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fWE1MSHR0cFJlcXVlc3RDdG9yID0gWE1MSHR0cFJlcXVlc3RDdG9yO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZva2UodG9rZW4sIHJlcXVpcmVkLCB0eXBlID0gXCJhY2Nlc3NfdG9rZW5cIikge1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTm8gdG9rZW4gcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHRva2VuIHByb3ZpZGVkLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlICE9PSBBY2Nlc3NUb2tlblR5cGVIaW50ICYmIHR5cGUgIT0gUmVmcmVzaFRva2VuVHlwZUhpbnQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSW52YWxpZCB0b2tlbiB0eXBlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRva2VuIHR5cGUuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRSZXZvY2F0aW9uRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZvY2F0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG5vdCByZXF1aXJlZCwgc28gZG9uJ3QgZXJyb3IgYW5kIGp1c3QgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IFJldm9raW5nIFwiICsgdHlwZSk7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnRfaWQgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnRfc2VjcmV0ID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZSh1cmwsIGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCwgdG9rZW4sIHR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgeGhyID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvcigpO1xyXG4gICAgICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgeGhyLnN0YXR1cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcih4aHIuc3RhdHVzVGV4dCArIFwiIChcIiArIHhoci5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHsgXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBOZXR3b3JrIEVycm9yLlwiKVxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KFwiTmV0d29yayBFcnJvclwiKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHZhciBib2R5ID0gXCJjbGllbnRfaWQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X2lkKTtcclxuICAgICAgICAgICAgaWYgKGNsaWVudF9zZWNyZXQpIHtcclxuICAgICAgICAgICAgICAgIGJvZHkgKz0gXCImY2xpZW50X3NlY3JldD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChjbGllbnRfc2VjcmV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBib2R5ICs9IFwiJnRva2VuX3R5cGVfaGludD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0eXBlKTtcclxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbik7XHJcblxyXG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcclxuICAgICAgICAgICAgeGhyLnNlbmQoYm9keSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXJsVXRpbGl0eSB7XHJcbiAgICBzdGF0aWMgYWRkUXVlcnlQYXJhbSh1cmwsIG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBcIj9cIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1cmxbdXJsLmxlbmd0aCAtIDFdICE9PSBcIj9cIikge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCImXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1cmwgKz0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xyXG4gICAgICAgIHVybCArPSBcIj1cIjtcclxuICAgICAgICB1cmwgKz0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHVybDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcGFyc2VVcmxGcmFnbWVudCh2YWx1ZSwgZGVsaW1pdGVyID0gXCIjXCIsIGdsb2JhbCA9IEdsb2JhbCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgICAgdmFsdWUgPSBnbG9iYWwubG9jYXRpb24uaHJlZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpZHggPSB2YWx1ZS5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cihpZHggKyAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZWxpbWl0ZXIgPT09IFwiP1wiKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGRvaW5nIHF1ZXJ5LCB0aGVuIHN0cmlwIG9mZiBoYXNoIGZyYWdtZW50IGJlZm9yZSB3ZSBwYXJzZVxyXG4gICAgICAgICAgICBpZHggPSB2YWx1ZS5pbmRleE9mKCcjJyk7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoMCwgaWR4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHt9LFxyXG4gICAgICAgICAgICByZWdleCA9IC8oW14mPV0rKT0oW14mXSopL2csXHJcbiAgICAgICAgICAgIG07XHJcblxyXG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgICAgICB3aGlsZSAobSA9IHJlZ2V4LmV4ZWModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQobVsxXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KG1bMl0pO1xyXG4gICAgICAgICAgICBpZiAoY291bnRlcisrID4gNTApIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudDogcmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJSZXNwb25zZSBleGNlZWRlZCBleHBlY3RlZCBudW1iZXIgb2YgcGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBwcm9wIGluIHBhcmFtcykge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgYWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCB0b2tlbl90eXBlLCBzY29wZSwgcHJvZmlsZSwgZXhwaXJlc19hdCwgc3RhdGV9KSB7XHJcbiAgICAgICAgdGhpcy5pZF90b2tlbiA9IGlkX3Rva2VuO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NfdG9rZW4gPSBhY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoX3Rva2VuID0gcmVmcmVzaF90b2tlbjtcclxuICAgICAgICB0aGlzLnRva2VuX3R5cGUgPSB0b2tlbl90eXBlO1xyXG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcclxuICAgICAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlO1xyXG4gICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IGV4cGlyZXNfYXQ7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBleHBpcmVzX2luKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGlyZXNfYXQpIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwaXJlc19hdCAtIG5vdztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHNldCBleHBpcmVzX2luKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBub3cgKyBleHBpcmVzX2luO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlZCgpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcclxuICAgICAgICBpZiAoZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjb3BlcygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvU3RvcmFnZVN0cmluZygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZF90b2tlbjogdGhpcy5pZF90b2tlbixcclxuICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogdGhpcy5zZXNzaW9uX3N0YXRlLFxyXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHRoaXMuYWNjZXNzX3Rva2VuLFxyXG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0aGlzLnJlZnJlc2hfdG9rZW4sXHJcbiAgICAgICAgICAgIHRva2VuX3R5cGU6IHRoaXMudG9rZW5fdHlwZSxcclxuICAgICAgICAgICAgc2NvcGU6IHRoaXMuc2NvcGUsXHJcbiAgICAgICAgICAgIHByb2ZpbGU6IHRoaXMucHJvZmlsZSxcclxuICAgICAgICAgICAgZXhwaXJlc19hdDogdGhpcy5leHBpcmVzX2F0XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgVXNlcihKU09OLnBhcnNlKHN0b3JhZ2VTdHJpbmcpKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VySW5mb1NlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgc2V0dGluZ3MsIFxyXG4gICAgICAgIEpzb25TZXJ2aWNlQ3RvciA9IEpzb25TZXJ2aWNlLCBcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLCBcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5jdG9yOiBObyBzZXR0aW5ncyBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9qc29uU2VydmljZSA9IG5ldyBKc29uU2VydmljZUN0b3IodW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuX2dldENsYWltc0Zyb21Kd3QuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2xhaW1zKHRva2VuKSB7XHJcbiAgICAgICAgaWYgKCF0b2tlbikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zOiBObyB0b2tlbiBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIHRva2VuIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0VXNlckluZm9FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogcmVjZWl2ZWQgdXNlcmluZm8gdXJsXCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbih1cmwsIHRva2VuKS50aGVuKGNsYWltcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zOiBjbGFpbXMgcmVjZWl2ZWRcIiwgY2xhaW1zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbGFpbXM7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRDbGFpbXNGcm9tSnd0KHJlcSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXEucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIgfHwgIWp3dC5wYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEZhaWxlZCB0byBwYXJzZSBKV1RcIiwgand0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIga2lkID0gand0LmhlYWRlci5raWQ7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNzdWVyUHJvbWlzZTtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9zZXR0aW5ncy51c2VySW5mb0p3dElzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnT1AnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdBTlknOlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoand0LnBheWxvYWQuaXNzKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVyUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy51c2VySW5mb0p3dElzc3Vlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBpc3N1ZXJQcm9taXNlLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogUmVjZWl2ZWQgaXNzdWVyOlwiICsgaXNzdWVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFraWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1NpZ25pbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmtpZCA9PT0ga2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVswXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFZhbGlkYWluZyBKV1Q7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0KHJlcS5yZXNwb25zZVRleHQsIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzLCB1bmRlZmluZWQsIHRydWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEpXVCB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqd3QucGF5bG9hZDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEVycm9yIHBhcnNpbmcgSldUIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZmlsdGVyQnlBbGcoa2V5cywgYWxnKSB7XHJcbiAgICAgICAgdmFyIGt0eSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGFsZy5zdGFydHNXaXRoKFwiUlNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJSU0FcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJQU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlBTXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiRVNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJFQ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBMb29raW5nIGZvciBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5KTtcclxuXHJcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXkua3R5ID09PSBrdHk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IE51bWJlciBvZiBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5LCBrZXlzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudCB9IGZyb20gJy4vT2lkY0NsaWVudC5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyU2V0dGluZ3MgfSBmcm9tICcuL1VzZXJNYW5hZ2VyU2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi9Vc2VyLmpzJztcclxuaW1wb3J0IHsgVXNlck1hbmFnZXJFdmVudHMgfSBmcm9tICcuL1VzZXJNYW5hZ2VyRXZlbnRzLmpzJztcclxuaW1wb3J0IHsgU2lsZW50UmVuZXdTZXJ2aWNlIH0gZnJvbSAnLi9TaWxlbnRSZW5ld1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uTW9uaXRvciB9IGZyb20gJy4vU2Vzc2lvbk1vbml0b3IuanMnO1xyXG5pbXBvcnQgeyBUb2tlblJldm9jYXRpb25DbGllbnQgfSBmcm9tICcuL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyIGV4dGVuZHMgT2lkY0NsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncyA9IHt9LFxyXG4gICAgICAgIFNpbGVudFJlbmV3U2VydmljZUN0b3IgPSBTaWxlbnRSZW5ld1NlcnZpY2UsXHJcbiAgICAgICAgU2Vzc2lvbk1vbml0b3JDdG9yID0gU2Vzc2lvbk1vbml0b3IsXHJcbiAgICAgICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3RvciA9IFRva2VuUmV2b2NhdGlvbkNsaWVudCxcclxuICAgICAgICBUb2tlbkNsaWVudEN0b3IgPSBUb2tlbkNsaWVudCxcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsXHJcbiAgICApIHtcclxuXHJcbiAgICAgICAgaWYgKCEoc2V0dGluZ3MgaW5zdGFuY2VvZiBVc2VyTWFuYWdlclNldHRpbmdzKSkge1xyXG4gICAgICAgICAgICBzZXR0aW5ncyA9IG5ldyBVc2VyTWFuYWdlclNldHRpbmdzKHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MpO1xyXG5cclxuICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVXNlck1hbmFnZXJFdmVudHMoc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZSA9IG5ldyBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyBvcmRlciBpcyBpbXBvcnRhbnQgZm9yIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczsgdGhlc2Ugc2VydmljZXMgZGVwZW5kIHVwb24gdGhlIGV2ZW50cy5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5hdXRvbWF0aWNTaWxlbnRSZW5ldykge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5jdG9yOiBhdXRvbWF0aWNTaWxlbnRSZW5ldyBpcyBjb25maWd1cmVkLCBzZXR0aW5nIHVwIHNpbGVudCByZW5ld1wiKTtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFNpbGVudFJlbmV3KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5tb25pdG9yU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5jdG9yOiBtb25pdG9yU2Vzc2lvbiBpcyBjb25maWd1cmVkLCBzZXR0aW5nIHVwIHNlc3Npb24gbW9uaXRvclwiKTtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbk1vbml0b3IgPSBuZXcgU2Vzc2lvbk1vbml0b3JDdG9yKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50ID0gbmV3IFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3Rva2VuQ2xpZW50ID0gbmV3IFRva2VuQ2xpZW50Q3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3JlZGlyZWN0TmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9wb3B1cE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5wb3B1cE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfaWZyYW1lTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlmcmFtZU5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfdXNlclN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnVzZXJTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXZlbnRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIGxvYWRlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLmdldFVzZXI6IHVzZXIgbm90IGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKG51bGwpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnJlbW92ZVVzZXI6IHVzZXIgcmVtb3ZlZCBmcm9tIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cy51bmxvYWQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5SZWRpcmVjdChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpyXCI7XHJcbiAgICAgICAgbGV0IG5hdlBhcmFtcyA9IHtcclxuICAgICAgICAgICAgdXNlUmVwbGFjZVRvTmF2aWdhdGUgOiBhcmdzLnVzZVJlcGxhY2VUb05hdmlnYXRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IsIG5hdlBhcmFtcykudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0OiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluRW5kKHVybCB8fCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvci51cmwpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0Q2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluUG9wdXAoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6cFwiO1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvcHVwX3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cDogTm8gcG9wdXBfcmVkaXJlY3RfdXJpIG9yIHJlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gcG9wdXBfcmVkaXJlY3RfdXJpIG9yIHJlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MuZGlzcGxheSA9IFwicG9wdXBcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbihhcmdzLCB0aGlzLl9wb3B1cE5hdmlnYXRvciwge1xyXG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxyXG4gICAgICAgICAgICBwb3B1cFdpbmRvd0ZlYXR1cmVzOiBhcmdzLnBvcHVwV2luZG93RmVhdHVyZXMgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd0ZlYXR1cmVzLFxyXG4gICAgICAgICAgICBwb3B1cFdpbmRvd1RhcmdldDogYXJncy5wb3B1cFdpbmRvd1RhcmdldCB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93VGFyZ2V0XHJcbiAgICAgICAgfSkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IHNpZ25pblBvcHVwIHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWduaW5Qb3B1cENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5DYWxsYmFjayh1cmwsIHRoaXMuX3BvcHVwTmF2aWdhdG9yKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwQ2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyPT57XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwQ2FsbGJhY2sgZXJyb3I6IFwiICsgZXJyICYmIGVyci5tZXNzYWdlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5TaWxlbnQoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiO1xyXG4gICAgICAgIC8vIGZpcnN0IGRldGVybWluZSBpZiB3ZSBoYXZlIGEgcmVmcmVzaCB0b2tlbiwgb3IgbmVlZCB0byB1c2UgaWZyYW1lXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzLnJlZnJlc2hfdG9rZW4gPSB1c2VyLnJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlUmVmcmVzaFRva2VuKGFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gYXJncy5pZF90b2tlbl9oaW50IHx8ICh0aGlzLnNldHRpbmdzLmluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyAmJiB1c2VyICYmIHVzZXIuaWRfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIgJiYgdGhpcy5fc2V0dGluZ3MudmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50LCBzdWJqZWN0IHByaW9yIHRvIHNpbGVudCByZW5ldzogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuY3VycmVudF9zdWIgPSB1c2VyLnByb2ZpbGUuc3ViO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblNpbGVudElmcmFtZShhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF91c2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuKGFyZ3MpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogTm8gYWNjZXNzIHRva2VuIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkVG9rZW5WYWxpZGF0aW9uID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZFRva2VuVmFsaWRhdGlvbiA9IHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbih1c2VyLnByb2ZpbGUsIHJlc3VsdC5pZF90b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWRUb2tlblZhbGlkYXRpb24udGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IHJlZnJlc2ggdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5pZF90b2tlbiA9IHJlc3VsdC5pZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5hY2Nlc3NfdG9rZW4gPSByZXN1bHQuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnJlZnJlc2hfdG9rZW4gPSByZXN1bHQucmVmcmVzaF90b2tlbiB8fCB1c2VyLnJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuZXhwaXJlc19pbiA9IHJlc3VsdC5leHBpcmVzX2luO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4ocHJvZmlsZSwgaWRfdG9rZW4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0QXR0cmlidXRlcyhpZF90b2tlbiwgaXNzdWVyLCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQsIHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldykudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnN1YiAhPT0gcHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBzdWIgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggY3VycmVudCBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBjdXJyZW50IHN1YlwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5hdXRoX3RpbWUgJiYgcGF5bG9hZC5hdXRoX3RpbWUgIT09IHByb2ZpbGUuYXV0aF90aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXV0aF90aW1lIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF1dGhfdGltZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aF90aW1lIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF1dGhfdGltZVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5henAgJiYgcGF5bG9hZC5henAgIT09IHByb2ZpbGUuYXpwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXpwIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF6cFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXpwIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF6cFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuYXpwICYmIHByb2ZpbGUuYXpwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXpwIG5vdCBpbiBpZF90b2tlbiwgYnV0IHByZXNlbnQgaW4gb3JpZ2luYWwgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIF9zaWduaW5TaWxlbnRJZnJhbWUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IE5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLnByb21wdCA9IGFyZ3MucHJvbXB0IHx8IFwibm9uZVwiO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluKGFyZ3MsIHRoaXMuX2lmcmFtZU5hdmlnYXRvciwge1xyXG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxyXG4gICAgICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dDogYXJncy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCB0aGlzLnNldHRpbmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0XHJcbiAgICAgICAgfSkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogbm8gc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5TaWxlbnRDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pbkNhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpyXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnBcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6c1wiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5TaWxlbnRDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlX3R5cGUgaW4gc3RhdGVcIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRDYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlKHVybCkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNvOnJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25vdXRSZWRpcmVjdENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNvOnBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25vdXRQb3B1cENhbGxiYWNrKHVybCwga2VlcE9wZW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImludmFsaWQgcmVzcG9uc2VfdHlwZSBpbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHF1ZXJ5U2Vzc2lvblN0YXR1cyhhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpzXCI7IC8vIHRoaXMgYWN0cyBsaWtlIGEgc2lnbmluIHNpbGVudFxyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnNpbGVudF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5wcm9tcHQgPSBcIm5vbmVcIjtcclxuICAgICAgICBhcmdzLnJlc3BvbnNlX3R5cGUgPSBhcmdzLnJlc3BvbnNlX3R5cGUgfHwgdGhpcy5zZXR0aW5ncy5xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICBhcmdzLnNjb3BlID0gYXJncy5zY29wZSB8fCBcIm9wZW5pZFwiO1xyXG4gICAgICAgIGFyZ3Muc2tpcFVzZXJJbmZvID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX2lmcmFtZU5hdmlnYXRvciwge1xyXG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxyXG4gICAgICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dDogYXJncy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCB0aGlzLnNldHRpbmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0XHJcbiAgICAgICAgfSkudGhlbihuYXZSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTaWduaW5SZXNwb25zZShuYXZSZXNwb25zZS51cmwpLnRoZW4oc2lnbmluUmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBnb3Qgc2lnbmluIHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzaWduaW5SZXNwb25zZS5zZXNzaW9uX3N0YXRlICYmIHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IHF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzIGZvciBzdWI6IFwiLCAgc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHNpZ25pblJlc3BvbnNlLnNlc3Npb25fc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yjogc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zaWRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2Vzc2Z1bCwgdXNlciBub3QgYXV0aGVudGljYXRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLnNlc3Npb25fc3RhdGUgJiYgdGhpcy5zZXR0aW5ncy5tb25pdG9yQW5vbnltb3VzU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSA9PSBcImxvZ2luX3JlcXVpcmVkXCIgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IFwiY29uc2VudF9yZXF1aXJlZFwiIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImludGVyYWN0aW9uX3JlcXVpcmVkXCIgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IFwiYWNjb3VudF9zZWxlY3Rpb25fcmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogcXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3MgZm9yIGFub255bW91cyB1c2VyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogZXJyLnNlc3Npb25fc3RhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfc2lnbmluKGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMpLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluRW5kKG5hdlJlc3BvbnNlLnVybCwgYXJncyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluU3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnByZXBhcmUobmF2aWdhdG9yUGFyYW1zKS50aGVuKGhhbmRsZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogZ290IG5hdmlnYXRvciB3aW5kb3cgaGFuZGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2lnbmluUmVxdWVzdChhcmdzKS50aGVuKHNpZ25pblJlcXVlc3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBnb3Qgc2lnbmluIHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLnVybCA9IHNpZ25pblJlcXVlc3QudXJsO1xyXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLmlkID0gc2lnbmluUmVxdWVzdC5zdGF0ZS5pZDtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlLm5hdmlnYXRlKG5hdmlnYXRvclBhcmFtcyk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmNsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBFcnJvciBhZnRlciBwcmVwYXJpbmcgbmF2aWdhdG9yLCBjbG9zaW5nIG5hdmlnYXRvciB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pbkVuZCh1cmwsIGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTaWduaW5SZXNwb25zZSh1cmwpLnRoZW4oc2lnbmluUmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBnb3Qgc2lnbmluIHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHVzZXIgPSBuZXcgVXNlcihzaWduaW5SZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJncy5jdXJyZW50X3N1Yikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuY3VycmVudF9zdWIgIT09IHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBjdXJyZW50IHVzZXIgZG9lcyBub3QgbWF0Y2ggdXNlciByZXR1cm5lZCBmcm9tIHNpZ25pbi4gc3ViIGZyb20gc2lnbmluOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImxvZ2luX3JlcXVpcmVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGN1cnJlbnQgdXNlciBtYXRjaGVzIHVzZXIgcmV0dXJuZWQgZnJvbSBzaWduaW5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IHVzZXIgc3RvcmVkXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5DYWxsYmFjayh1cmwsIG5hdmlnYXRvcikge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5DYWxsYmFja1wiKTtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmNhbGxiYWNrKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dFJlZGlyZWN0KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNvOnJcIjtcclxuICAgICAgICBsZXQgcG9zdExvZ291dFJlZGlyZWN0VXJpID0gYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKHBvc3RMb2dvdXRSZWRpcmVjdFVyaSl7XHJcbiAgICAgICAgICAgIGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdExvZ291dFJlZGlyZWN0VXJpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbmF2UGFyYW1zID0ge1xyXG4gICAgICAgICAgICB1c2VSZXBsYWNlVG9OYXZpZ2F0ZSA6IGFyZ3MudXNlUmVwbGFjZVRvTmF2aWdhdGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IsIG5hdlBhcmFtcykudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRSZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25vdXRSZWRpcmVjdENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0RW5kKHVybCB8fCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvci51cmwpLnRoZW4ocmVzcG9uc2U9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRQb3B1cChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzbzpwXCI7XHJcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MuZGlzcGxheSA9IFwicG9wdXBcIjtcclxuICAgICAgICBpZiAoYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpe1xyXG4gICAgICAgICAgICAvLyB3ZSdyZSBwdXR0aW5nIGEgZHVtbXkgZW50cnkgaW4gaGVyZSBiZWNhdXNlIHdlXHJcbiAgICAgICAgICAgIC8vIG5lZWQgYSB1bmlxdWUgaWQgZnJvbSB0aGUgc3RhdGUgZm9yIG5vdGlmaWNhdGlvblxyXG4gICAgICAgICAgICAvLyB0byB0aGUgcGFyZW50IHdpbmRvdywgd2hpY2ggaXMgbmVjZXNzYXJ5IGlmIHdlXHJcbiAgICAgICAgICAgIC8vIHBsYW4gdG8gcmV0dXJuIGJhY2sgdG8gdGhlIGNsaWVudCBhZnRlciBzaWdub3V0XHJcbiAgICAgICAgICAgIC8vIGFuZCBzbyB3ZSBjYW4gY2xvc2UgdGhlIHBvcHVwIGFmdGVyIHNpZ25vdXRcclxuICAgICAgICAgICAgYXJncy5zdGF0ZSA9IGFyZ3Muc3RhdGUgfHwge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dChhcmdzLCB0aGlzLl9wb3B1cE5hdmlnYXRvciwge1xyXG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxyXG4gICAgICAgICAgICBwb3B1cFdpbmRvd0ZlYXR1cmVzOiBhcmdzLnBvcHVwV2luZG93RmVhdHVyZXMgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd0ZlYXR1cmVzLFxyXG4gICAgICAgICAgICBwb3B1cFdpbmRvd1RhcmdldDogYXJncy5wb3B1cFdpbmRvd1RhcmdldCB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93VGFyZ2V0XHJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFBvcHVwOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbm91dFBvcHVwQ2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIGlmICh0eXBlb2Yoa2VlcE9wZW4pID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YodXJsKSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIGtlZXBPcGVuID0gdXJsO1xyXG4gICAgICAgICAgICB1cmwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRlbGltaXRlciA9ICc/JztcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBOYXZpZ2F0b3IuY2FsbGJhY2sodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfc2lnbm91dChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRTdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcykudGhlbihuYXZSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0RW5kKG5hdlJlc3BvbnNlLnVybCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbm91dFN0YXJ0KGFyZ3MgPSB7fSwgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IucHJlcGFyZShuYXZpZ2F0b3JQYXJhbXMpLnRoZW4oaGFuZGxlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogZ290IG5hdmlnYXRvciB3aW5kb3cgaGFuZGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGxvYWRlZCBjdXJyZW50IHVzZXIgZnJvbSBzdG9yYWdlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByZXZva2VQcm9taXNlID0gdGhpcy5fc2V0dGluZ3MucmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPyB0aGlzLl9yZXZva2VJbnRlcm5hbCh1c2VyKSA6IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldm9rZVByb21pc2UudGhlbigoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZF90b2tlbiA9IGFyZ3MuaWRfdG9rZW5faGludCB8fCB1c2VyICYmIHVzZXIuaWRfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IFNldHRpbmcgaWRfdG9rZW4gaW50byBzaWdub3V0IHJlcXVlc3RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuaWRfdG9rZW5faGludCA9IGlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlVXNlcigpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiB1c2VyIHJlbW92ZWQsIGNyZWF0aW5nIHNpZ25vdXQgcmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNpZ25vdXRSZXF1ZXN0KGFyZ3MpLnRoZW4oc2lnbm91dFJlcXVlc3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogZ290IHNpZ25vdXQgcmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMudXJsID0gc2lnbm91dFJlcXVlc3QudXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25vdXRSZXF1ZXN0LnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLmlkID0gc2lnbm91dFJlcXVlc3Quc3RhdGUuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlLm5hdmlnYXRlKG5hdmlnYXRvclBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmNsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogRXJyb3IgYWZ0ZXIgcHJlcGFyaW5nIG5hdmlnYXRvciwgY2xvc2luZyBuYXZpZ2F0b3Igd2luZG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWdub3V0RW5kKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTaWdub3V0UmVzcG9uc2UodXJsKS50aGVuKHNpZ25vdXRSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0RW5kOiBnb3Qgc2lnbm91dCByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzaWdub3V0UmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2b2tlQWNjZXNzVG9rZW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUludGVybmFsKHVzZXIsIHRydWUpLnRoZW4oc3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiByZW1vdmluZyB0b2tlbiBwcm9wZXJ0aWVzIGZyb20gdXNlciBhbmQgcmUtc3RvcmluZ1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci5hY2Nlc3NfdG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIucmVmcmVzaF90b2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci5leHBpcmVzX2F0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLnRva2VuX3R5cGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiB1c2VyIHN0b3JlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogYWNjZXNzIHRva2VuIHJldm9rZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VJbnRlcm5hbCh1c2VyLCByZXF1aXJlZCkge1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIHZhciBhY2Nlc3NfdG9rZW4gPSB1c2VyLmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgdmFyIHJlZnJlc2hfdG9rZW4gPSB1c2VyLnJlZnJlc2hfdG9rZW47XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5JbnRlcm5hbChhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oYXRTdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJ0U3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0U3VjY2VzcyAmJiAhcnRTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IG5vIG5lZWQgdG8gcmV2b2tlIGR1ZSB0byBubyB0b2tlbihzKSwgb3IgSldUIGZvcm1hdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0U3VjY2VzcyB8fCBydFN1Y2Nlc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlQWNjZXNzVG9rZW5JbnRlcm5hbChhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgLy8gY2hlY2sgZm9yIEpXVCB2cy4gcmVmZXJlbmNlIHRva2VuXHJcbiAgICAgICAgaWYgKCFhY2Nlc3NfdG9rZW4gfHwgYWNjZXNzX3Rva2VuLmluZGV4T2YoJy4nKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2UoYWNjZXNzX3Rva2VuLCByZXF1aXJlZCkudGhlbigoKSA9PiB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQpIHtcclxuICAgICAgICBpZiAoIXJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZShyZWZyZXNoX3Rva2VuLCByZXF1aXJlZCwgXCJyZWZyZXNoX3Rva2VuXCIpLnRoZW4oKCkgPT4gdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlLnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3VzZXJTdG9yZUtleSgpIHtcclxuICAgICAgICByZXR1cm4gYHVzZXI6JHt0aGlzLnNldHRpbmdzLmF1dGhvcml0eX06JHt0aGlzLnNldHRpbmdzLmNsaWVudF9pZH1gO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkVXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLmdldCh0aGlzLl91c2VyU3RvcmVLZXkpLnRoZW4oc3RvcmFnZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fbG9hZFVzZXI6IHVzZXIgc3RvcmFnZVN0cmluZyBsb2FkZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gVXNlci5mcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX2xvYWRVc2VyOiBubyB1c2VyIHN0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlVXNlcih1c2VyKSB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuc3RvcmVVc2VyOiBzdG9yaW5nIHVzZXJcIik7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3RvcmFnZVN0cmluZyA9IHVzZXIudG9TdG9yYWdlU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUuc2V0KHRoaXMuX3VzZXJTdG9yZUtleSwgc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJzdG9yZVVzZXIuc3RvcmVVc2VyOiByZW1vdmluZyB1c2VyXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLnJlbW92ZSh0aGlzLl91c2VyU3RvcmVLZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEFjY2Vzc1Rva2VuRXZlbnRzIH0gZnJvbSAnLi9BY2Nlc3NUb2tlbkV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9FdmVudC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXJFdmVudHMgZXh0ZW5kcyBBY2Nlc3NUb2tlbkV2ZW50cyB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MpIHtcclxuICAgICAgICBzdXBlcihzZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZCA9IG5ldyBFdmVudChcIlVzZXIgbG9hZGVkXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZCA9IG5ldyBFdmVudChcIlVzZXIgdW5sb2FkZWRcIik7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvciA9IG5ldyBFdmVudChcIlNpbGVudCByZW5ldyBlcnJvclwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4gPSBuZXcgRXZlbnQoXCJVc2VyIHNpZ25lZCBpblwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0ID0gbmV3IEV2ZW50KFwiVXNlciBzaWduZWQgb3V0XCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZCA9IG5ldyBFdmVudChcIlVzZXIgc2Vzc2lvbiBjaGFuZ2VkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWQodXNlciwgcmFpc2VFdmVudD10cnVlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMubG9hZFwiKTtcclxuICAgICAgICBzdXBlci5sb2FkKHVzZXIpO1xyXG4gICAgICAgIGlmIChyYWlzZUV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2FkZWQucmFpc2UodXNlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdW5sb2FkKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLnVubG9hZFwiKTtcclxuICAgICAgICBzdXBlci51bmxvYWQoKTtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQucmFpc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyTG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJMb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJVbmxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJVbmxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRTaWxlbnRSZW5ld0Vycm9yKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVNpbGVudFJlbmV3RXJyb3IoY2IpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlU2lsZW50UmVuZXdFcnJvcihlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlU2lsZW50UmVuZXdFcnJvclwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IucmFpc2UoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNpZ25lZEluKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNpZ25lZEluKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlVXNlclNpZ25lZEluKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTaWduZWRJblwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4ucmFpc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyU2lnbmVkT3V0KGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJTaWduZWRPdXQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlVXNlclNpZ25lZE91dCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0XCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmFpc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyU2Vzc2lvbkNoYW5nZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyU2Vzc2lvbkNoYW5nZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5yYWlzZSgpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBSZWRpcmVjdE5hdmlnYXRvciB9IGZyb20gJy4vUmVkaXJlY3ROYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBQb3B1cE5hdmlnYXRvciB9IGZyb20gJy4vUG9wdXBOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL0lGcmFtZU5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gJy4vU2lnbmluUmVxdWVzdC5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDtcclxuY29uc3QgRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsID0gMjAwMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlclNldHRpbmdzIGV4dGVuZHMgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICBwb3B1cF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXMsXHJcbiAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQsXHJcbiAgICAgICAgc2lsZW50X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dCxcclxuICAgICAgICBhdXRvbWF0aWNTaWxlbnRSZW5ldyA9IGZhbHNlLFxyXG4gICAgICAgIHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyA9IGZhbHNlLFxyXG4gICAgICAgIGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyA9IHRydWUsXHJcbiAgICAgICAgbW9uaXRvclNlc3Npb24gPSB0cnVlLFxyXG4gICAgICAgIG1vbml0b3JBbm9ueW1vdXNTZXNzaW9uID0gZmFsc2UsXHJcbiAgICAgICAgY2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSBEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwsXHJcbiAgICAgICAgc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IgPSB0cnVlLFxyXG4gICAgICAgIHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlLFxyXG4gICAgICAgIHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID0gZmFsc2UsXHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXHJcbiAgICAgICAgcmVkaXJlY3ROYXZpZ2F0b3IgPSBuZXcgUmVkaXJlY3ROYXZpZ2F0b3IoKSxcclxuICAgICAgICBwb3B1cE5hdmlnYXRvciA9IG5ldyBQb3B1cE5hdmlnYXRvcigpLFxyXG4gICAgICAgIGlmcmFtZU5hdmlnYXRvciA9IG5ldyBJRnJhbWVOYXZpZ2F0b3IoKSxcclxuICAgICAgICB1c2VyU3RvcmUgPSBuZXcgV2ViU3RvcmFnZVN0YXRlU3RvcmUoeyBzdG9yZTogR2xvYmFsLnNlc3Npb25TdG9yYWdlIH0pXHJcbiAgICB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihhcmd1bWVudHNbMF0pO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3B1cF9yZWRpcmVjdF91cmkgPSBwb3B1cF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwV2luZG93RmVhdHVyZXMgPSBwb3B1cFdpbmRvd0ZlYXR1cmVzO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwV2luZG93VGFyZ2V0ID0gcG9wdXBXaW5kb3dUYXJnZXQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3NpbGVudF9yZWRpcmVjdF91cmkgPSBzaWxlbnRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlcXVlc3RUaW1lb3V0ID0gc2lsZW50UmVxdWVzdFRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5fYXV0b21hdGljU2lsZW50UmVuZXcgPSBhdXRvbWF0aWNTaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcgPSB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5faW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ID0gaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX21vbml0b3JTZXNzaW9uID0gbW9uaXRvclNlc3Npb247XHJcbiAgICAgICAgdGhpcy5fbW9uaXRvckFub255bW91c1Nlc3Npb24gPSBtb25pdG9yQW5vbnltb3VzU2Vzc2lvbjtcclxuICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JbnRlcnZhbCA9IGNoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgIHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yID0gc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XHJcbiAgICAgICAgaWYgKHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlID0gcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHNbMF0gJiYgYXJndW1lbnRzWzBdLnJlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBTaWduaW5SZXF1ZXN0LmlzT2lkYyhhcmd1bWVudHNbMF0ucmVzcG9uc2VfdHlwZSkgPyBcImlkX3Rva2VuXCIgOiBcImNvZGVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlID0gXCJpZF90b2tlblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA9IHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0O1xyXG5cclxuICAgICAgICB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvciA9IHJlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwTmF2aWdhdG9yID0gcG9wdXBOYXZpZ2F0b3I7XHJcbiAgICAgICAgdGhpcy5faWZyYW1lTmF2aWdhdG9yID0gaWZyYW1lTmF2aWdhdG9yO1xyXG5cclxuICAgICAgICB0aGlzLl91c2VyU3RvcmUgPSB1c2VyU3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBvcHVwX3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBfcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwV2luZG93RmVhdHVyZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwV2luZG93RmVhdHVyZXM7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBXaW5kb3dUYXJnZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwV2luZG93VGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWxlbnRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWxlbnRfcmVkaXJlY3RfdXJpO1xyXG4gICAgfVxyXG4gICAgIGdldCBzaWxlbnRSZXF1ZXN0VGltZW91dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lsZW50UmVxdWVzdFRpbWVvdXQ7XHJcbiAgICB9XHJcbiAgICBnZXQgYXV0b21hdGljU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9tYXRpY1NpbGVudFJlbmV3O1xyXG4gICAgfVxyXG4gICAgZ2V0IHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3O1xyXG4gICAgfVxyXG4gICAgZ2V0IGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3O1xyXG4gICAgfVxyXG4gICAgZ2V0IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9uaXRvclNlc3Npb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbml0b3JTZXNzaW9uO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb25pdG9yQW5vbnltb3VzU2Vzc2lvbjtcclxuICAgIH1cclxuICAgIGdldCBjaGVja1Nlc3Npb25JbnRlcnZhbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICB9XHJcbiAgICBnZXQgc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XHJcbiAgICB9XHJcbiAgICBnZXQgcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICB9XHJcbiAgICBnZXQgcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWRpcmVjdE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwTmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IGlmcmFtZU5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faWZyYW1lTmF2aWdhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1c2VyU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7cHJlZml4ID0gXCJvaWRjLlwiLCBzdG9yZSA9IEdsb2JhbC5sb2NhbFN0b3JhZ2V9ID0ge30pIHtcclxuICAgICAgICB0aGlzLl9zdG9yZSA9IHN0b3JlO1xyXG4gICAgICAgIHRoaXMuX3ByZWZpeCA9IHByZWZpeDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLnNldFwiLCBrZXkpO1xyXG5cclxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0b3JlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoa2V5KSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuZ2V0XCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9zdG9yZS5nZXRJdGVtKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlKGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLnJlbW92ZVwiLCBrZXkpO1xyXG5cclxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5fc3RvcmUuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JlLnJlbW92ZUl0ZW0oa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxLZXlzKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLmdldEFsbEtleXNcIik7XHJcblxyXG4gICAgICAgIHZhciBrZXlzID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9zdG9yZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMuX3N0b3JlLmtleShpbmRleCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YodGhpcy5fcHJlZml4KSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleS5zdWJzdHIodGhpcy5fcHJlZml4Lmxlbmd0aCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGtleXMpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IGp3cywgS0VZVVRJTCBhcyBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXggfSBmcm9tICcuLi8uLi9qc3JzYXNpZ24vZGlzdC9qc3JzYXNpZ24uanMnO1xyXG5cclxuY29uc3QgQWxsb3dlZFNpZ25pbmdBbGdzID0gWydSUzI1NicsICdSUzM4NCcsICdSUzUxMicsICdQUzI1NicsICdQUzM4NCcsICdQUzUxMicsICdFUzI1NicsICdFUzM4NCcsICdFUzUxMiddO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIGp3cyxcclxuICAgIEtleVV0aWwsXHJcbiAgICBYNTA5LFxyXG4gICAgY3J5cHRvLFxyXG4gICAgaGV4dG9iNjR1LFxyXG4gICAgYjY0dG9oZXgsXHJcbiAgICBBbGxvd2VkU2lnbmluZ0FsZ3NcclxufTtcclxuIiwiaW1wb3J0IHV1aWQ0IGZyb20gJ3V1aWQvdjQnO1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBSRkM0MTIyIHZlcnNpb24gNCBndWlkICgpXHJcbiAqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZG9tKCkge1xyXG4gIHJldHVybiB1dWlkNCgpLnJlcGxhY2UoLy0vZywgJycpO1xyXG59XHJcbiIsImNvbnN0IFZlcnNpb24gPSBcIjEuMTAuMFwiOyBleHBvcnQge1ZlcnNpb259OyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/dist/oidc-client.min.js b/dist/oidc-client.min.js index b2828ac4..29aa1bf3 100644 --- a/dist/oidc-client.min.js +++ b/dist/oidc-client.min.js @@ -1,4 +1,4 @@ -var Oidc=function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function e(){return t.default}:function e(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=152)}([function(t,e,r){var n=r(2),i=r(19),o=r(12),s=r(13),a=r(20),u=function(t,e,r){var c,f,h,l,p=t&u.F,d=t&u.G,g=t&u.S,v=t&u.P,y=t&u.B,m=d?n:g?n[e]||(n[e]={}):(n[e]||{}).prototype,_=d?i:i[e]||(i[e]={}),S=_.prototype||(_.prototype={});for(c in d&&(r=e),r)h=((f=!p&&m&&void 0!==m[c])?m:r)[c],l=y&&f?a(h,n):v&&"function"==typeof h?a(Function.call,h):h,m&&s(m,c,h,t&u.U),_[c]!=h&&o(_,c,l),v&&S[c]!=h&&(S[c]=h)};n.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,r){var n=r(5);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var r=0;r=4){for(var e=arguments.length,r=Array(e),n=0;n=3){for(var e=arguments.length,r=Array(e),n=0;n=2){for(var e=arguments.length,r=Array(e),n=0;n=1){for(var e=arguments.length,r=Array(e),n=0;n0?i(n(t),9007199254740991):0}},function(t,e,r){t.exports=!r(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(1),i=r(103),o=r(24),s=Object.defineProperty;e.f=r(8)?Object.defineProperty:function t(e,r,a){if(n(e),r=o(r,!0),n(a),i)try{return s(e,r,a)}catch(t){}if("get"in a||"set"in a)throw TypeError("Accessors not supported!");return"value"in a&&(e[r]=a.value),e}},function(t,e,r){var n=r(25);t.exports=function(t){return Object(n(t))}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(9),i=r(34);t.exports=r(8)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n=r(2),i=r(12),o=r(15),s=r(35)("src"),a=r(156),u=(""+a).split("toString");r(19).inspectSource=function(t){return a.call(t)},(t.exports=function(t,e,r,a){var c="function"==typeof r;c&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(c&&(o(r,s)||i(r,s,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:a?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,"toString",function t(){return"function"==typeof this&&this[s]||a.call(this)})},function(t,e,r){var n=r(0),i=r(4),o=r(25),s=/"/g,a=function(t,e,r,n){var i=String(o(t)),a="<"+e;return""!==r&&(a+=" "+r+'="'+String(n).replace(s,""")+'"'),a+">"+i+""};t.exports=function(t,e){var r={};r[t]=e(a),n(n.P+n.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",r)}},function(t,e){var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},function(t,e,r){var n=r(51),i=r(25);t.exports=function(t){return n(i(t))}},function(t,e,r){var n=r(52),i=r(34),o=r(16),s=r(24),a=r(15),u=r(103),c=Object.getOwnPropertyDescriptor;e.f=r(8)?c:function t(e,r){if(e=o(e),r=s(r,!0),u)try{return c(e,r)}catch(t){}if(a(e,r))return i(!n.f.call(e,r),e[r])}},function(t,e,r){var n=r(15),i=r(10),o=r(74)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e){var r=t.exports={version:"2.6.4"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(11);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,e){var r=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:r)(t)}},function(t,e,r){"use strict";var n=r(4);t.exports=function(t,e){return!!t&&n(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,r){var n=r(0),i=r(19),o=r(4);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],s={};s[t]=e(r),n(n.S+n.F*o(function(){r(1)}),"Object",s)}},function(t,e,r){var n=r(20),i=r(51),o=r(10),s=r(7),a=r(90);t.exports=function(t,e){var r=1==t,u=2==t,c=3==t,f=4==t,h=6==t,l=5==t||h,p=e||a;return function(e,a,d){for(var g,v,y=o(e),m=i(y),_=n(a,d,3),S=s(m.length),b=0,w=r?p(e,S):u?p(e,0):void 0;S>b;b++)if((l||b in m)&&(v=_(g=m[b],b,y),t))if(r)w[b]=v;else if(v)switch(t){case 3:return!0;case 5:return g;case 6:return b;case 2:w.push(g)}else if(f)return!1;return h?-1:c||f?f:w}}},function(t,e,r){"use strict";if(r(8)){var n=r(30),i=r(2),o=r(4),s=r(0),a=r(66),u=r(98),c=r(20),f=r(41),h=r(34),l=r(12),p=r(43),d=r(22),g=r(7),v=r(131),y=r(37),m=r(24),_=r(15),S=r(46),b=r(5),w=r(10),F=r(87),E=r(38),x=r(18),A=r(39).f,k=r(89),P=r(35),C=r(6),T=r(27),R=r(56),I=r(54),O=r(92),D=r(48),N=r(61),L=r(40),M=r(91),j=r(120),U=r(9),B=r(17),H=U.f,V=B.f,K=i.RangeError,q=i.TypeError,W=i.Uint8Array,J=Array.prototype,z=u.ArrayBuffer,Y=u.DataView,G=T(0),X=T(2),$=T(3),Q=T(4),Z=T(5),tt=T(6),et=R(!0),rt=R(!1),nt=O.values,it=O.keys,ot=O.entries,st=J.lastIndexOf,at=J.reduce,ut=J.reduceRight,ct=J.join,ft=J.sort,ht=J.slice,lt=J.toString,pt=J.toLocaleString,dt=C("iterator"),gt=C("toStringTag"),vt=P("typed_constructor"),yt=P("def_constructor"),mt=a.CONSTR,_t=a.TYPED,St=a.VIEW,bt=T(1,function(t,e){return At(I(t,t[yt]),e)}),wt=o(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),Ft=!!W&&!!W.prototype.set&&o(function(){new W(1).set({})}),Et=function(t,e){var r=d(t);if(r<0||r%e)throw K("Wrong offset!");return r},xt=function(t){if(b(t)&&_t in t)return t;throw q(t+" is not a typed array!")},At=function(t,e){if(!(b(t)&&vt in t))throw q("It is not a typed array constructor!");return new t(e)},kt=function(t,e){return Pt(I(t,t[yt]),e)},Pt=function(t,e){for(var r=0,n=e.length,i=At(t,n);n>r;)i[r]=e[r++];return i},Ct=function(t,e,r){H(t,e,{get:function(){return this._d[r]}})},Tt=function t(e){var r,n,i,o,s,a,u=w(e),f=arguments.length,h=f>1?arguments[1]:void 0,l=void 0!==h,p=k(u);if(void 0!=p&&!F(p)){for(a=p.call(u),i=[],r=0;!(s=a.next()).done;r++)i.push(s.value);u=i}for(l&&f>2&&(h=c(h,arguments[2],2)),r=0,n=g(u.length),o=At(this,n);n>r;r++)o[r]=l?h(u[r],r):u[r];return o},Rt=function t(){for(var e=0,r=arguments.length,n=At(this,r);r>e;)n[e]=arguments[e++];return n},It=!!W&&o(function(){pt.call(new W(1))}),Ot=function t(){return pt.apply(It?ht.call(xt(this)):xt(this),arguments)},Dt={copyWithin:function t(e,r){return j.call(xt(this),e,r,arguments.length>2?arguments[2]:void 0)},every:function t(e){return Q(xt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function t(e){return M.apply(xt(this),arguments)},filter:function t(e){return kt(this,X(xt(this),e,arguments.length>1?arguments[1]:void 0))},find:function t(e){return Z(xt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function t(e){return tt(xt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function t(e){G(xt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function t(e){return rt(xt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function t(e){return et(xt(this),e,arguments.length>1?arguments[1]:void 0)},join:function t(e){return ct.apply(xt(this),arguments)},lastIndexOf:function t(e){return st.apply(xt(this),arguments)},map:function t(e){return bt(xt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function t(e){return at.apply(xt(this),arguments)},reduceRight:function t(e){return ut.apply(xt(this),arguments)},reverse:function t(){for(var e,r=xt(this).length,n=Math.floor(r/2),i=0;i1?arguments[1]:void 0)},sort:function t(e){return ft.call(xt(this),e)},subarray:function t(e,r){var n=xt(this),i=n.length,o=y(e,i);return new(I(n,n[yt]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,g((void 0===r?i:y(r,i))-o))}},Nt=function t(e,r){return kt(this,ht.call(xt(this),e,r))},Lt=function t(e){xt(this);var r=Et(arguments[1],1),n=this.length,i=w(e),o=g(i.length),s=0;if(o+r>n)throw K("Wrong length!");for(;s255?255:255&n),i.v[p](r*e+i.o,n,wt)}(this,r,t)},enumerable:!0})};_?(d=r(function(t,r,n,i){f(t,d,c,"_d");var o,s,a,u,h=0,p=0;if(b(r)){if(!(r instanceof z||"ArrayBuffer"==(u=S(r))||"SharedArrayBuffer"==u))return _t in r?Pt(d,r):Tt.call(d,r);o=r,p=Et(n,e);var y=r.byteLength;if(void 0===i){if(y%e)throw K("Wrong length!");if((s=y-p)<0)throw K("Wrong length!")}else if((s=g(i)*e)+p>y)throw K("Wrong length!");a=s/e}else a=v(r),o=new z(s=a*e);for(l(t,"_d",{b:o,o:p,l:s,e:a,v:new Y(o)});hdocument.F=Object<\/script>"),t.close(),u=t.F;n--;)delete u.prototype[o[n]];return u()};t.exports=Object.create||function t(e,r){var o;return null!==e?(a.prototype=n(e),o=new a,a.prototype=null,o[s]=e):o=u(),void 0===r?o:i(o,r)}},function(t,e,r){var n=r(105),i=r(75).concat("length","prototype");e.f=Object.getOwnPropertyNames||function t(e){return n(e,i)}},function(t,e,r){"use strict";var n=r(2),i=r(9),o=r(8),s=r(6)("species");t.exports=function(t){var e=n[t];o&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e){t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,e,r){var n=r(20),i=r(118),o=r(87),s=r(1),a=r(7),u=r(89),c={},f={};(e=t.exports=function(t,e,r,h,l){var p,d,g,v,y=l?function(){return t}:u(t),m=n(r,h,e?2:1),_=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(o(y)){for(p=a(t.length);p>_;_++)if((v=e?m(s(d=t[_])[0],d[1]):m(t[_]))===c||v===f)return v}else for(g=y.call(t);!(d=g.next()).done;)if((v=i(g,m,d.value,e))===c||v===f)return v}).BREAK=c,e.RETURN=f},function(t,e,r){var n=r(13);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},function(t,e,r){var n=r(9).f,i=r(15),o=r(6)("toStringTag");t.exports=function(t,e,r){t&&!i(t=r?t:t.prototype,o)&&n(t,o,{configurable:!0,value:e})}},function(t,e,r){var n=r(21),i=r(6)("toStringTag"),o="Arguments"==n(function(){return arguments}());t.exports=function(t){var e,r,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),i))?r:o?n(e):"Object"==(s=n(e))&&"function"==typeof e.callee?"Arguments":s}},function(t,e,r){var n=r(0),i=r(25),o=r(4),s=r(78),a="["+s+"]",u=RegExp("^"+a+a+"*"),c=RegExp(a+a+"*$"),f=function(t,e,r){var i={},a=o(function(){return!!s[t]()||"​…"!="​…"[t]()}),u=i[t]=a?e(h):s[t];r&&(i[r]=u),n(n.P+n.F*a,"String",i)},h=f.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};t.exports=f},function(t,e){t.exports={}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MetadataService=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.JsonService;if(function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=e,this._jsonService=new r(["application/jwk-set+json"])}return t.prototype.getMetadata=function t(){var e=this;return this._settings.metadata?(i.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(i.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then(function(t){return i.Log.debug("MetadataService.getMetadata: json received"),e._settings.metadata=t,t})):(i.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},t.prototype.getIssuer=function t(){return this._getMetadataProperty("issuer")},t.prototype.getAuthorizationEndpoint=function t(){return this._getMetadataProperty("authorization_endpoint")},t.prototype.getUserInfoEndpoint=function t(){return this._getMetadataProperty("userinfo_endpoint")},t.prototype.getTokenEndpoint=function t(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",e)},t.prototype.getCheckSessionIframe=function t(){return this._getMetadataProperty("check_session_iframe",!0)},t.prototype.getEndSessionEndpoint=function t(){return this._getMetadataProperty("end_session_endpoint",!0)},t.prototype.getRevocationEndpoint=function t(){return this._getMetadataProperty("revocation_endpoint",!0)},t.prototype.getKeysEndpoint=function t(){return this._getMetadataProperty("jwks_uri",!0)},t.prototype._getMetadataProperty=function t(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i.Log.debug("MetadataService.getMetadataProperty for: "+e),this.getMetadata().then(function(t){if(i.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===t[e]){if(!0===r)return void i.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+e);throw i.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+e),new Error("Metadata does not contain property "+e)}return t[e]})},t.prototype.getSigningKeys=function t(){var e=this;return this._settings.signingKeys?(i.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then(function(t){return i.Log.debug("MetadataService.getSigningKeys: jwks_uri received",t),e._jsonService.getJson(t).then(function(t){if(i.Log.debug("MetadataService.getSigningKeys: key set received",t),!t.keys)throw i.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return e._settings.signingKeys=t.keys,e._settings.signingKeys})})},n(t,[{key:"metadataUrl",get:function t(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),t}()},function(t,e,r){var n=r(19),i=r(2),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(30)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e,r){var n=r(21);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,r){"use strict";var n=r(1);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,r){var n=r(1),i=r(11),o=r(6)("species");t.exports=function(t,e){var r,s=n(t).constructor;return void 0===s||void 0==(r=n(s)[o])?e:i(r)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UrlUtility=void 0;var n=r(3),i=r(33);e.UrlUtility=function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.addQueryParam=function t(e,r,n){return e.indexOf("?")<0&&(e+="?"),"?"!==e[e.length-1]&&(e+="&"),e+=encodeURIComponent(r),e+="=",e+=encodeURIComponent(n)},t.parseUrlFragment=function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.Global;"string"!=typeof e&&(e=o.location.href);var s=e.lastIndexOf(r);s>=0&&(e=e.substr(s+1)),"?"===r&&(s=e.indexOf("#"))>=0&&(e=e.substr(0,s));for(var a,u={},c=/([^&=]+)=([^&]*)/g,f=0;a=c.exec(e);)if(u[decodeURIComponent(a[1])]=decodeURIComponent(a[2]),f++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",e),{error:"Response exceeded expected number of parameters"};for(var h in u)return u;return{}},t}()},function(t,e,r){var n=r(16),i=r(7),o=r(37);t.exports=function(t){return function(e,r,s){var a,u=n(e),c=i(u.length),f=o(s,c);if(t&&r!=r){for(;c>f;)if((a=u[f++])!=a)return!0}else for(;c>f;f++)if((t||f in u)&&u[f]===r)return t||f||0;return!t&&-1}}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,r){var n=r(21);t.exports=Array.isArray||function t(e){return"Array"==n(e)}},function(t,e,r){var n=r(22),i=r(25);t.exports=function(t){return function(e,r){var o,s,a=String(i(e)),u=n(r),c=a.length;return u<0||u>=c?t?"":void 0:(o=a.charCodeAt(u))<55296||o>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):o:t?a.slice(u,u+2):s-56320+(o-55296<<10)+65536}}},function(t,e,r){var n=r(5),i=r(21),o=r(6)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},function(t,e,r){var n=r(6)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],s=o[n]();s.next=function(){return{done:r=!0}},o[n]=function(){return s},t(o)}catch(t){}return r}},function(t,e,r){"use strict";var n=r(46),i=RegExp.prototype.exec;t.exports=function(t,e){var r=t.exec;if("function"==typeof r){var o=r.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,r){"use strict";r(122);var n=r(13),i=r(12),o=r(4),s=r(25),a=r(6),u=r(93),c=a("species"),f=!o(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),h=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,e,r){var l=a(t),p=!o(function(){var e={};return e[l]=function(){return 7},7!=""[t](e)}),d=p?!o(function(){var e=!1,r=/a/;return r.exec=function(){return e=!0,null},"split"===t&&(r.constructor={},r.constructor[c]=function(){return r}),r[l](""),!e}):void 0;if(!p||!d||"replace"===t&&!f||"split"===t&&!h){var g=/./[l],v=r(s,l,""[t],function t(e,r,n,i,o){return r.exec===u?p&&!o?{done:!0,value:g.call(r,n,i)}:{done:!0,value:e.call(n,r,i)}:{done:!1}}),y=v[0],m=v[1];n(String.prototype,t,y),i(RegExp.prototype,l,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},function(t,e,r){var n=r(2).navigator;t.exports=n&&n.userAgent||""},function(t,e,r){"use strict";var n=r(2),i=r(0),o=r(13),s=r(43),a=r(31),u=r(42),c=r(41),f=r(5),h=r(4),l=r(61),p=r(45),d=r(79);t.exports=function(t,e,r,g,v,y){var m=n[t],_=m,S=v?"set":"add",b=_&&_.prototype,w={},F=function(t){var e=b[t];o(b,t,"delete"==t?function(t){return!(y&&!f(t))&&e.call(this,0===t?0:t)}:"has"==t?function t(r){return!(y&&!f(r))&&e.call(this,0===r?0:r)}:"get"==t?function t(r){return y&&!f(r)?void 0:e.call(this,0===r?0:r)}:"add"==t?function t(r){return e.call(this,0===r?0:r),this}:function t(r,n){return e.call(this,0===r?0:r,n),this})};if("function"==typeof _&&(y||b.forEach&&!h(function(){(new _).entries().next()}))){var E=new _,x=E[S](y?{}:-0,1)!=E,A=h(function(){E.has(1)}),k=l(function(t){new _(t)}),P=!y&&h(function(){for(var t=new _,e=5;e--;)t[S](e,e);return!t.has(-0)});k||((_=e(function(e,r){c(e,_,t);var n=d(new m,e,_);return void 0!=r&&u(r,v,n[S],n),n})).prototype=b,b.constructor=_),(A||P)&&(F("delete"),F("has"),v&&F("get")),(P||x)&&F(S),y&&b.clear&&delete b.clear}else _=g.getConstructor(e,t,v,S),s(_.prototype,r),a.NEED=!0;return p(_,t),w[t]=_,i(i.G+i.W+i.F*(_!=m),w),y||g.setStrong(_,t,v),_}},function(t,e,r){for(var n,i=r(2),o=r(12),s=r(35),a=s("typed_array"),u=s("view"),c=!(!i.ArrayBuffer||!i.DataView),f=c,h=0,l="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");h<9;)(n=i[l[h++]])?(o(n.prototype,a,!0),o(n.prototype,u,!0)):f=!1;t.exports={ABV:c,CONSTR:f,TYPED:a,VIEW:u}},function(t,e,r){"use strict";t.exports=r(30)||!r(4)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(2)[t]})},function(t,e,r){"use strict";var n=r(0);t.exports=function(t){n(n.S,t,{of:function t(){for(var e=arguments.length,r=new Array(e);e--;)r[e]=arguments[e];return new this(r)}})}},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(20),s=r(42);t.exports=function(t){n(n.S,t,{from:function t(e){var r,n,a,u,c=arguments[1];return i(this),(r=void 0!==c)&&i(c),void 0==e?new this:(n=[],r?(a=0,u=o(c,arguments[2],2),s(e,!1,function(t){n.push(u(t,a++))})):s(e,!1,n.push,n),new this(n))}})}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.JoseUtil=void 0;var n=r(358),i=function o(t){return t&&t.__esModule?t:{default:t}}(r(364));e.JoseUtil=(0,i.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){var n=r(5),i=r(2).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(2),i=r(19),o=r(30),s=r(104),a=r(9).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e,r){var n=r(50)("keys"),i=r(35);t.exports=function(t){return n[t]||(n[t]=i(t))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,r){var n=r(2).document;t.exports=n&&n.documentElement},function(t,e,r){var n=r(5),i=r(1),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=r(20)(Function.call,r(17).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function t(r,i){return o(r,i),e?r.__proto__=i:n(r,i),r}}({},!1):void 0),check:o}},function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,e,r){var n=r(5),i=r(77).set;t.exports=function(t,e,r){var o,s=e.constructor;return s!==r&&"function"==typeof s&&(o=s.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},function(t,e,r){"use strict";var n=r(22),i=r(25);t.exports=function t(e){var r=String(i(this)),o="",s=n(e);if(s<0||s==1/0)throw RangeError("Count can't be negative");for(;s>0;(s>>>=1)&&(r+=r))1&s&&(o+=r);return o}},function(t,e){t.exports=Math.sign||function t(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(t,e){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function t(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:r},function(t,e,r){"use strict";var n=r(30),i=r(0),o=r(13),s=r(12),a=r(48),u=r(84),c=r(45),f=r(18),h=r(6)("iterator"),l=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,r,d,g,v,y){u(r,e,d);var m,_,S,b=function(t){if(!l&&t in x)return x[t];switch(t){case"keys":return function e(){return new r(this,t)};case"values":return function e(){return new r(this,t)}}return function e(){return new r(this,t)}},w=e+" Iterator",F="values"==g,E=!1,x=t.prototype,A=x[h]||x["@@iterator"]||g&&x[g],k=A||b(g),P=g?F?b("entries"):k:void 0,C="Array"==e&&x.entries||A;if(C&&(S=f(C.call(new t)))!==Object.prototype&&S.next&&(c(S,w,!0),n||"function"==typeof S[h]||s(S,h,p)),F&&A&&"values"!==A.name&&(E=!0,k=function t(){return A.call(this)}),n&&!y||!l&&!E&&x[h]||s(x,h,k),a[e]=k,a[w]=p,g)if(m={values:F?k:b("values"),keys:v?k:b("keys"),entries:P},y)for(_ in m)_ in x||o(x,_,m[_]);else i(i.P+i.F*(l||E),e,m);return m}},function(t,e,r){"use strict";var n=r(38),i=r(34),o=r(45),s={};r(12)(s,r(6)("iterator"),function(){return this}),t.exports=function(t,e,r){t.prototype=n(s,{next:i(1,r)}),o(t,e+" Iterator")}},function(t,e,r){var n=r(60),i=r(25);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},function(t,e,r){var n=r(6)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},function(t,e,r){var n=r(48),i=r(6)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},function(t,e,r){"use strict";var n=r(9),i=r(34);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},function(t,e,r){var n=r(46),i=r(6)("iterator"),o=r(48);t.exports=r(19).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[n(t)]}},function(t,e,r){var n=r(245);t.exports=function(t,e){return new(n(t))(e)}},function(t,e,r){"use strict";var n=r(10),i=r(37),o=r(7);t.exports=function t(e){for(var r=n(this),s=o(r.length),a=arguments.length,u=i(a>1?arguments[1]:void 0,s),c=a>2?arguments[2]:void 0,f=void 0===c?s:i(c,s);f>u;)r[u++]=e;return r}},function(t,e,r){"use strict";var n=r(32),i=r(121),o=r(48),s=r(16);t.exports=r(83)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?r:"values"==e?t[r]:[r,t[r]])},"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},function(t,e,r){"use strict";var n,i,o=r(53),s=RegExp.prototype.exec,a=String.prototype.replace,u=s,c=(n=/a/,i=/b*/g,s.call(n,"a"),s.call(i,"a"),0!==n.lastIndex||0!==i.lastIndex),f=void 0!==/()??/.exec("")[1];(c||f)&&(u=function t(e){var r,n,i,u,h=this;return f&&(n=new RegExp("^"+h.source+"$(?!\\s)",o.call(h))),c&&(r=h.lastIndex),i=s.call(h,e),c&&i&&(h.lastIndex=h.global?i.index+i[0].length:r),f&&i&&i.length>1&&a.call(i[0],n,function(){for(u=1;ui;)r.push(arguments[i++]);return y[++v]=function(){a("function"==typeof e?e:Function(e),r)},n(v),v},p=function t(e){delete y[e]},"process"==r(21)(h)?n=function(t){h.nextTick(s(m,t,1))}:g&&g.now?n=function(t){g.now(s(m,t,1))}:d?(o=(i=new d).port2,i.port1.onmessage=_,n=s(o.postMessage,o,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(n=function(t){f.postMessage(t+"","*")},f.addEventListener("message",_,!1)):n="onreadystatechange"in c("script")?function(t){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),m.call(t)}}:function(t){setTimeout(s(m,t,1),0)}),t.exports={set:l,clear:p}},function(t,e,r){var n=r(2),i=r(95).set,o=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,u="process"==r(21)(s);t.exports=function(){var t,e,r,c=function(){var n,i;for(u&&(n=s.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(u)r=function(){s.nextTick(c)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var f=a.resolve(void 0);r=function(){f.then(c)}}else r=function(){i.call(n,c)};else{var h=!0,l=document.createTextNode("");new o(c).observe(l,{characterData:!0}),r=function(){l.data=h=!h}}return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},function(t,e,r){"use strict";var n=r(11);t.exports.f=function(t){return new function e(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n}),this.resolve=n(e),this.reject=n(r)}(t)}},function(t,e,r){"use strict";var n=r(2),i=r(8),o=r(30),s=r(66),a=r(12),u=r(43),c=r(4),f=r(41),h=r(22),l=r(7),p=r(131),d=r(39).f,g=r(9).f,v=r(91),y=r(45),m="prototype",_="Wrong index!",S=n.ArrayBuffer,b=n.DataView,w=n.Math,F=n.RangeError,E=n.Infinity,x=S,A=w.abs,k=w.pow,P=w.floor,C=w.log,T=w.LN2,R=i?"_b":"buffer",I=i?"_l":"byteLength",O=i?"_o":"byteOffset";function D(t,e,r){var n,i,o,s=new Array(r),a=8*r-e-1,u=(1<>1,f=23===e?k(2,-24)-k(2,-77):0,h=0,l=t<0||0===t&&1/t<0?1:0;for((t=A(t))!=t||t===E?(i=t!=t?1:0,n=u):(n=P(C(t)/T),t*(o=k(2,-n))<1&&(n--,o*=2),(t+=n+c>=1?f/o:f*k(2,1-c))*o>=2&&(n++,o/=2),n+c>=u?(i=0,n=u):n+c>=1?(i=(t*o-1)*k(2,e),n+=c):(i=t*k(2,c-1)*k(2,e),n=0));e>=8;s[h++]=255&i,i/=256,e-=8);for(n=n<0;s[h++]=255&n,n/=256,a-=8);return s[--h]|=128*l,s}function N(t,e,r){var n,i=8*r-e-1,o=(1<>1,a=i-7,u=r-1,c=t[u--],f=127&c;for(c>>=7;a>0;f=256*f+t[u],u--,a-=8);for(n=f&(1<<-a)-1,f>>=-a,a+=e;a>0;n=256*n+t[u],u--,a-=8);if(0===f)f=1-s;else{if(f===o)return n?NaN:c?-E:E;n+=k(2,e),f-=s}return(c?-1:1)*n*k(2,f-e)}function L(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function M(t){return[255&t]}function j(t){return[255&t,t>>8&255]}function U(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function B(t){return D(t,52,8)}function H(t){return D(t,23,4)}function V(t,e,r){g(t[m],e,{get:function(){return this[r]}})}function K(t,e,r,n){var i=p(+r);if(i+e>t[I])throw F(_);var o=t[R]._b,s=i+t[O],a=o.slice(s,s+e);return n?a:a.reverse()}function q(t,e,r,n,i,o){var s=p(+r);if(s+e>t[I])throw F(_);for(var a=t[R]._b,u=s+t[O],c=n(+i),f=0;fY;)(W=z[Y++])in S||a(S,W,x[W]);o||(J.constructor=S)}var G=new b(new S(2)),X=b[m].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||u(b[m],{setInt8:function t(e,r){X.call(this,e,r<<24>>24)},setUint8:function t(e,r){X.call(this,e,r<<24>>24)}},!0)}else S=function t(e){f(this,S,"ArrayBuffer");var r=p(e);this._b=v.call(new Array(r),0),this[I]=r},b=function t(e,r,n){f(this,b,"DataView"),f(e,S,"DataView");var i=e[I],o=h(r);if(o<0||o>i)throw F("Wrong offset!");if(o+(n=void 0===n?i-o:l(n))>i)throw F("Wrong length!");this[R]=e,this[O]=o,this[I]=n},i&&(V(S,"byteLength","_l"),V(b,"buffer","_b"),V(b,"byteLength","_l"),V(b,"byteOffset","_o")),u(b[m],{getInt8:function t(e){return K(this,1,e)[0]<<24>>24},getUint8:function t(e){return K(this,1,e)[0]},getInt16:function t(e){var r=K(this,2,e,arguments[1]);return(r[1]<<8|r[0])<<16>>16},getUint16:function t(e){var r=K(this,2,e,arguments[1]);return r[1]<<8|r[0]},getInt32:function t(e){return L(K(this,4,e,arguments[1]))},getUint32:function t(e){return L(K(this,4,e,arguments[1]))>>>0},getFloat32:function t(e){return N(K(this,4,e,arguments[1]),23,4)},getFloat64:function t(e){return N(K(this,8,e,arguments[1]),52,8)},setInt8:function t(e,r){q(this,1,e,M,r)},setUint8:function t(e,r){q(this,1,e,M,r)},setInt16:function t(e,r){q(this,2,e,j,r,arguments[2])},setUint16:function t(e,r){q(this,2,e,j,r,arguments[2])},setInt32:function t(e,r){q(this,4,e,U,r,arguments[2])},setUint32:function t(e,r){q(this,4,e,U,r,arguments[2])},setFloat32:function t(e,r){q(this,4,e,H,r,arguments[2])},setFloat64:function t(e,r){q(this,8,e,B,r,arguments[2])}});y(S,"ArrayBuffer"),y(b,"DataView"),a(b[m],s.VIEW,!0),e.ArrayBuffer=S,e.DataView=b},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.authority,i=e.metadataUrl,o=e.metadata,p=e.signingKeys,d=e.client_id,g=e.client_secret,v=e.response_type,y=void 0===v?c:v,m=e.scope,_=void 0===m?f:m,S=e.redirect_uri,b=e.post_logout_redirect_uri,w=e.prompt,F=e.display,E=e.max_age,x=e.ui_locales,A=e.acr_values,k=e.resource,P=e.response_mode,C=e.filterProtocolClaims,T=void 0===C||C,R=e.loadUserInfo,I=void 0===R||R,O=e.staleStateAge,D=void 0===O?h:O,N=e.clockSkew,L=void 0===N?l:N,M=e.userInfoJwtIssuer,j=void 0===M?"OP":M,U=e.stateStore,B=void 0===U?new s.WebStorageStateStore:U,H=e.ResponseValidatorCtor,V=void 0===H?a.ResponseValidator:H,K=e.MetadataServiceCtor,q=void 0===K?u.MetadataService:K,W=e.extraQueryParams,J=void 0===W?{}:W;!function z(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._authority=r,this._metadataUrl=i,this._metadata=o,this._signingKeys=p,this._client_id=d,this._client_secret=g,this._response_type=y,this._scope=_,this._redirect_uri=S,this._post_logout_redirect_uri=b,this._prompt=w,this._display=F,this._max_age=E,this._ui_locales=x,this._acr_values=A,this._resource=k,this._response_mode=P,this._filterProtocolClaims=!!T,this._loadUserInfo=!!I,this._staleStateAge=D,this._clockSkew=L,this._userInfoJwtIssuer=j,this._stateStore=B,this._validator=new V(this),this._metadataService=new q(this),this._extraQueryParams="object"===(void 0===J?"undefined":n(J))?J:{}}return i(t,[{key:"client_id",get:function t(){return this._client_id},set:function t(e){if(this._client_id)throw o.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=e}},{key:"client_secret",get:function t(){return this._client_secret}},{key:"response_type",get:function t(){return this._response_type}},{key:"scope",get:function t(){return this._scope}},{key:"redirect_uri",get:function t(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function t(){return this._post_logout_redirect_uri}},{key:"prompt",get:function t(){return this._prompt}},{key:"display",get:function t(){return this._display}},{key:"max_age",get:function t(){return this._max_age}},{key:"ui_locales",get:function t(){return this._ui_locales}},{key:"acr_values",get:function t(){return this._acr_values}},{key:"resource",get:function t(){return this._resource}},{key:"response_mode",get:function t(){return this._response_mode}},{key:"authority",get:function t(){return this._authority},set:function t(e){if(this._authority)throw o.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=e}},{key:"metadataUrl",get:function t(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function t(){return this._metadata},set:function t(e){this._metadata=e}},{key:"signingKeys",get:function t(){return this._signingKeys},set:function t(e){this._signingKeys=e}},{key:"filterProtocolClaims",get:function t(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function t(){return this._loadUserInfo}},{key:"staleStateAge",get:function t(){return this._staleStateAge}},{key:"clockSkew",get:function t(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function t(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function t(){return this._stateStore}},{key:"validator",get:function t(){return this._validator}},{key:"metadataService",get:function t(){return this._metadataService}},{key:"extraQueryParams",get:function t(){return this._extraQueryParams},set:function t(e){"object"===(void 0===e?"undefined":n(e))?this._extraQueryParams=e:this._extraQueryParams={}}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WebStorageStateStore=void 0;var n=r(3),i=r(33);e.WebStorageStateStore=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.prefix,n=void 0===r?"oidc.":r,o=e.store,s=void 0===o?i.Global.localStorage:o;!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._store=s,this._prefix=n}return t.prototype.set=function t(e,r){return n.Log.debug("WebStorageStateStore.set",e),e=this._prefix+e,this._store.setItem(e,r),Promise.resolve()},t.prototype.get=function t(e){n.Log.debug("WebStorageStateStore.get",e),e=this._prefix+e;var r=this._store.getItem(e);return Promise.resolve(r)},t.prototype.remove=function t(e){n.Log.debug("WebStorageStateStore.remove",e),e=this._prefix+e;var r=this._store.getItem(e);return this._store.removeItem(e),Promise.resolve(r)},t.prototype.getAllKeys=function t(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var e=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e&&Array.isArray(e)?this._contentTypes=e.slice():this._contentTypes=[],this._contentTypes.push("application/json"),n&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=r,this._jwtHandler=n}return t.prototype.getJson=function t(e,r){var i=this;if(!e)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",e),new Promise(function(t,o){var s=new i._XMLHttpRequest;s.open("GET",e);var a=i._contentTypes,u=i._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var r=s.getResponseHeader("Content-Type");if(r){var i=a.find(function(t){if(r.startsWith(t))return!0});if("application/jwt"==i)return void u(s).then(t,o);if(i)try{return void t(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.getJson: Error parsing JSON response",t.message),void o(t)}}o(Error("Invalid response Content-Type: "+r+", from URL: "+e))}else o(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),o(Error("Network Error"))},r&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+r)),s.send()})},t.prototype.postForm=function t(e,r){var i=this;if(!e)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",e),new Promise(function(t,o){var s=new i._XMLHttpRequest;s.open("POST",e);var a=i._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status)if(i=s.getResponseHeader("Content-Type"))if(a.find(function(t){if(i.startsWith(t))return!0}))try{var r=JSON.parse(s.responseText);if(r&&r.error)return n.Log.error("JsonService.postForm: Error from server: ",r.error),void o(new Error(r.error))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error(s.statusText+" ("+s.status+")"))}else{var i;if((i=s.getResponseHeader("Content-Type"))&&a.find(function(t){if(i.startsWith(t))return!0}))try{return void t(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error("Invalid response Content-Type: "+i+", from URL: "+e))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),o(Error("Network Error"))};var u="";for(var c in r){var f=r[c];f&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(f))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)})},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.State=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.id,n=e.data,i=e.created,s=e.request_type;!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._id=r||(0,o.default)(),this._data=n,this._created="number"==typeof i&&i>0?i:parseInt(Date.now()/1e3),this._request_type=s}return t.prototype.toStorageString=function t(){return i.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},t.fromStorageString=function e(r){return i.Log.debug("State.fromStorageString"),new t(JSON.parse(r))},t.clearStaleState=function e(r,n){var o=Date.now()/1e3-n;return r.getAllKeys().then(function(e){i.Log.debug("State.clearStaleState: got keys",e);for(var n=[],s=function s(a){var c=e[a];u=r.get(c).then(function(e){var n=!1;if(e)try{var s=t.fromStorageString(e);i.Log.debug("State.clearStaleState: got item from key: ",c,s.created),s.created<=o&&(n=!0)}catch(t){i.Log.error("State.clearStaleState: Error parsing state for key",c,t.message),n=!0}else i.Log.debug("State.clearStaleState: no item in storage for key: ",c),n=!0;if(n)return i.Log.debug("State.clearStaleState: removed item for key: ",c),r.remove(c)}),n.push(u)},a=0;au;)n(a,r=e[u++])&&(~o(c,r)||c.push(r));return c}},function(t,e,r){var n=r(9),i=r(1),o=r(36);t.exports=r(8)?Object.defineProperties:function t(e,r){i(e);for(var s,a=o(r),u=a.length,c=0;u>c;)n.f(e,s=a[c++],r[s]);return e}},function(t,e,r){var n=r(16),i=r(39).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function t(e){return s&&"[object Window]"==o.call(e)?function(t){try{return i(t)}catch(t){return s.slice()}}(e):i(n(e))}},function(t,e,r){"use strict";var n=r(36),i=r(57),o=r(52),s=r(10),a=r(51),u=Object.assign;t.exports=!u||r(4)(function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach(function(t){e[t]=t}),7!=u({},t)[r]||Object.keys(u({},e)).join("")!=n})?function t(e,r){for(var u=s(e),c=arguments.length,f=1,h=i.f,l=o.f;c>f;)for(var p,d=a(arguments[f++]),g=h?n(d).concat(h(d)):n(d),v=g.length,y=0;v>y;)l.call(d,p=g[y++])&&(u[p]=d[p]);return u}:u},function(t,e){t.exports=Object.is||function t(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}},function(t,e,r){"use strict";var n=r(11),i=r(5),o=r(111),s=[].slice,a={};t.exports=Function.bind||function t(e){var r=n(this),u=s.call(arguments,1),c=function(){var t=u.concat(s.call(arguments));return this instanceof c?function(t,e,r){if(!(e in a)){for(var n=[],i=0;i>>0||(s.test(o)?16:10))}:n},function(t,e,r){var n=r(2).parseFloat,i=r(47).trim;t.exports=1/n(r(78)+"-0")!=-1/0?function t(e){var r=i(String(e),3),o=n(r);return 0===o&&"-"==r.charAt(0)?-0:o}:n},function(t,e,r){var n=r(21);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},function(t,e,r){var n=r(5),i=Math.floor;t.exports=function t(e){return!n(e)&&isFinite(e)&&i(e)===e}},function(t,e){t.exports=Math.log1p||function t(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},function(t,e,r){var n=r(81),i=Math.pow,o=i(2,-52),s=i(2,-23),a=i(2,127)*(2-s),u=i(2,-126);t.exports=Math.fround||function t(e){var r,i,c=Math.abs(e),f=n(e);return ca||i!=i?f*(1/0):f*i}},function(t,e,r){var n=r(1);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},function(t,e,r){var n=r(11),i=r(10),o=r(51),s=r(7);t.exports=function(t,e,r,a,u){n(e);var c=i(t),f=o(c),h=s(c.length),l=u?h-1:0,p=u?-1:1;if(r<2)for(;;){if(l in f){a=f[l],l+=p;break}if(l+=p,u?l<0:h<=l)throw TypeError("Reduce of empty array with no initial value")}for(;u?l>=0:h>l;l+=p)l in f&&(a=e(a,f[l],l,c));return a}},function(t,e,r){"use strict";var n=r(10),i=r(37),o=r(7);t.exports=[].copyWithin||function t(e,r){var s=n(this),a=o(s.length),u=i(e,a),c=i(r,a),f=arguments.length>2?arguments[2]:void 0,h=Math.min((void 0===f?a:i(f,a))-c,a-u),l=1;for(c0;)c in s?s[u]=s[c]:delete s[u],u+=l,c+=l;return s}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,r){"use strict";var n=r(93);r(0)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},function(t,e,r){r(8)&&"g"!=/./g.flags&&r(9).f(RegExp.prototype,"flags",{configurable:!0,get:r(53)})},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,r){var n=r(1),i=r(5),o=r(97);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var r=o.f(t);return(0,r.resolve)(e),r.promise}},function(t,e,r){"use strict";var n=r(127),i=r(44);t.exports=r(65)("Map",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function t(e){var r=n.getEntry(i(this,"Map"),e);return r&&r.v},set:function t(e,r){return n.def(i(this,"Map"),0===e?0:e,r)}},n,!0)},function(t,e,r){"use strict";var n=r(9).f,i=r(38),o=r(43),s=r(20),a=r(41),u=r(42),c=r(83),f=r(121),h=r(40),l=r(8),p=r(31).fastKey,d=r(44),g=l?"_s":"size",v=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,c){var f=t(function(t,n){a(t,f,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[g]=0,void 0!=n&&u(n,r,t[c],t)});return o(f.prototype,{clear:function t(){for(var r=d(this,e),n=r._i,i=r._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];r._f=r._l=void 0,r[g]=0},delete:function(t){var r=d(this,e),n=v(r,t);if(n){var i=n.n,o=n.p;delete r._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),r._f==n&&(r._f=i),r._l==n&&(r._l=o),r[g]--}return!!n},forEach:function t(r){d(this,e);for(var n,i=s(r,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function t(r){return!!v(d(this,e),r)}}),l&&n(f.prototype,"size",{get:function(){return d(this,e)[g]}}),f},def:function(t,e,r){var n,i,o=v(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[g]++,"F"!==i&&(t._i[i]=o)),t},getEntry:v,setStrong:function(t,e,r){c(t,e,function(t,r){this._t=d(t,e),this._k=r,this._l=void 0},function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?f(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,f(1))},r?"entries":"values",!r,!0),h(e)}}},function(t,e,r){"use strict";var n=r(127),i=r(44);t.exports=r(65)("Set",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function t(e){return n.def(i(this,"Set"),e=0===e?0:e,e)}},n)},function(t,e,r){"use strict";var n,i=r(2),o=r(27)(0),s=r(13),a=r(31),u=r(108),c=r(130),f=r(5),h=r(44),l=r(44),p=!i.ActiveXObject&&"ActiveXObject"in i,d=a.getWeak,g=Object.isExtensible,v=c.ufstore,y=function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},m={get:function t(e){if(f(e)){var r=d(e);return!0===r?v(h(this,"WeakMap")).get(e):r?r[this._i]:void 0}},set:function t(e,r){return c.def(h(this,"WeakMap"),e,r)}},_=t.exports=r(65)("WeakMap",y,m,c,!0,!0);l&&p&&(u((n=c.getConstructor(y,"WeakMap")).prototype,m),a.NEED=!0,o(["delete","has","get","set"],function(t){var e=_.prototype,r=e[t];s(e,t,function(e,i){if(f(e)&&!g(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)})}))},function(t,e,r){"use strict";var n=r(43),i=r(31).getWeak,o=r(1),s=r(5),a=r(41),u=r(42),c=r(27),f=r(15),h=r(44),l=c(5),p=c(6),d=0,g=function(t){return t._l||(t._l=new v)},v=function(){this.a=[]},y=function(t,e){return l(t.a,function(t){return t[0]===e})};v.prototype={get:function(t){var e=y(this,t);if(e)return e[1]},has:function(t){return!!y(this,t)},set:function(t,e){var r=y(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var c=t(function(t,n){a(t,c,e,"_i"),t._t=e,t._i=d++,t._l=void 0,void 0!=n&&u(n,r,t[o],t)});return n(c.prototype,{delete:function(t){if(!s(t))return!1;var r=i(t);return!0===r?g(h(this,e)).delete(t):r&&f(r,this._i)&&delete r[this._i]},has:function t(r){if(!s(r))return!1;var n=i(r);return!0===n?g(h(this,e)).has(r):n&&f(n,this._i)}}),c},def:function(t,e,r){var n=i(o(e),!0);return!0===n?g(t).set(e,r):n[t._i]=r,t},ufstore:g}},function(t,e,r){var n=r(22),i=r(7);t.exports=function(t){if(void 0===t)return 0;var e=n(t),r=i(e);if(e!==r)throw RangeError("Wrong length!");return r}},function(t,e,r){var n=r(39),i=r(57),o=r(1),s=r(2).Reflect;t.exports=s&&s.ownKeys||function t(e){var r=n.f(o(e)),s=i.f;return s?r.concat(s(e)):r}},function(t,e,r){"use strict";var n=r(58),i=r(5),o=r(7),s=r(20),a=r(6)("isConcatSpreadable");t.exports=function t(e,r,u,c,f,h,l,p){for(var d,g,v=f,y=0,m=!!l&&s(l,p,3);y0)v=t(e,r,d,o(d.length),v,h-1)-1;else{if(v>=9007199254740991)throw TypeError();e[v]=d}v++}y++}return v}},function(t,e,r){var n=r(7),i=r(80),o=r(25);t.exports=function(t,e,r,s){var a=String(o(t)),u=a.length,c=void 0===r?" ":String(r),f=n(e);if(f<=u||""==c)return a;var h=f-u,l=i.call(c,Math.ceil(h/c.length));return l.length>h&&(l=l.slice(0,h)),s?l+a:a+l}},function(t,e,r){var n=r(36),i=r(16),o=r(52).f;t.exports=function(t){return function(e){for(var r,s=i(e),a=n(s),u=a.length,c=0,f=[];u>c;)o.call(s,r=a[c++])&&f.push(t?[r,s[r]]:s[r]);return f}}},function(t,e,r){var n=r(46),i=r(137);t.exports=function(t){return function e(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},function(t,e,r){var n=r(42);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},function(t,e){t.exports=Math.scale||function t(e,r,n,i,o){return 0===arguments.length||e!=e||r!=r||n!=n||i!=i||o!=o?NaN:e===1/0||e===-1/0?e:(e-r)*(o-i)/(n-r)+i}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClient=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e instanceof o.OidcClientSettings?this._settings=e:this._settings=new o.OidcClientSettings(e)}return t.prototype.createSigninRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.response_type,o=r.scope,s=r.redirect_uri,u=r.data,c=r.state,f=r.prompt,h=r.display,l=r.max_age,p=r.ui_locales,d=r.id_token_hint,g=r.login_hint,v=r.acr_values,y=r.resource,m=r.request,_=r.request_uri,S=r.response_mode,b=r.extraQueryParams,w=r.extraTokenParams,F=r.request_type,E=r.skipUserInfo,x=arguments[1];i.Log.debug("OidcClient.createSigninRequest");var A=this._settings.client_id;n=n||this._settings.response_type,o=o||this._settings.scope,s=s||this._settings.redirect_uri,f=f||this._settings.prompt,h=h||this._settings.display,l=l||this._settings.max_age,p=p||this._settings.ui_locales,v=v||this._settings.acr_values,y=y||this._settings.resource,S=S||this._settings.response_mode,b=b||this._settings.extraQueryParams;var k=this._settings.authority;return a.SigninRequest.isCode(n)&&"code"!==n?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then(function(t){i.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",t);var r=new a.SigninRequest({url:t,client_id:A,redirect_uri:s,response_type:n,scope:o,data:u||c,authority:k,prompt:f,display:h,max_age:l,ui_locales:p,id_token_hint:d,login_hint:g,acr_values:v,resource:y,request:m,request_uri:_,extraQueryParams:b,extraTokenParams:w,request_type:F,response_mode:S,client_secret:e._settings.client_secret,skipUserInfo:E}),P=r.state;return(x=x||e._stateStore).set(P.id,P.toStorageString()).then(function(){return r})})},t.prototype.readSigninResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSigninResponseState");var o="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",s=new u.SigninResponse(e,o);return s.state?(r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(s.state).then(function(t){if(!t)throw i.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:h.SigninState.fromStorageString(t),response:s}})):(i.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},t.prototype.processSigninResponse=function t(e,r){var n=this;return i.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(e,r,!0).then(function(t){var e=t.state,r=t.response;return i.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),n._validator.validateSigninResponse(e,r)})},t.prototype.createSignoutRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.id_token_hint,o=r.data,s=r.state,a=r.post_logout_redirect_uri,u=r.extraQueryParams,f=r.request_type,h=arguments[1];return i.Log.debug("OidcClient.createSignoutRequest"),a=a||this._settings.post_logout_redirect_uri,u=u||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then(function(t){if(!t)throw i.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");i.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",t);var r=new c.SignoutRequest({url:t,id_token_hint:n,post_logout_redirect_uri:a,data:o||s,extraQueryParams:u,request_type:f}),l=r.state;return l&&(i.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(h=h||e._stateStore).set(l.id,l.toStorageString())),r})},t.prototype.readSignoutResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSignoutResponseState");var o=new f.SignoutResponse(e);if(!o.state)return i.Log.debug("OidcClient.readSignoutResponseState: No state in response"),o.error?(i.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",o.error),Promise.reject(new s.ErrorResponse(o))):Promise.resolve({undefined:void 0,response:o});var a=o.state;return r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(a).then(function(t){if(!t)throw i.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:l.State.fromStorageString(t),response:o}})},t.prototype.processSignoutResponse=function t(e,r){var n=this;return i.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(e,r,!0).then(function(t){var e=t.state,r=t.response;return e?(i.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),n._validator.validateSignoutResponse(e,r)):(i.Log.debug("OidcClient.processSignoutResponse: No state from storage; skipping validating response"),r)})},t.prototype.clearStaleState=function t(e){return i.Log.debug("OidcClient.clearStaleState"),e=e||this._stateStore,l.State.clearStaleState(e,this.settings.staleStateAge)},n(t,[{key:"_stateStore",get:function t(){return this.settings.stateStore}},{key:"_validator",get:function t(){return this.settings.validator}},{key:"_metadataService",get:function t(){return this.settings.metadataService}},{key:"settings",get:function t(){return this._settings}},{key:"metadataService",get:function t(){return this._metadataService}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenClient=void 0;var n=r(101),i=r(49),o=r(3);e.TokenClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw o.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=e,this._jsonService=new r,this._metadataService=new s(this._settings)}return t.prototype.exchangeCode=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"authorization_code",r.client_id=r.client_id||this._settings.client_id,r.redirect_uri=r.redirect_uri||this._settings.redirect_uri,r.code?r.redirect_uri?r.code_verifier?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(t){return o.Log.debug("TokenClient.exchangeCode: Received token endpoint"),e._jsonService.postForm(t,r).then(function(t){return o.Log.debug("TokenClient.exchangeCode: response received"),t})}):(o.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(o.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(o.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},t.prototype.exchangeRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"refresh_token",r.client_id=r.client_id||this._settings.client_id,r.client_secret=r.client_secret||this._settings.client_secret,r.refresh_token?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),e._jsonService.postForm(t,r).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: response received"),t})}):(o.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ErrorResponse=void 0;var n=r(3);e.ErrorResponse=function(t){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=r.error,o=r.error_description,s=r.error_uri,a=r.state,u=r.session_state;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),!i)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var f=function h(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,o||i));return f.name="ErrorResponse",f.error=i,f.error_description=o,f.error_uri=s,f.state=a,f.session_state=u,f}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e}(Error)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninRequest=void 0;var n=r(3),i=r(55),o=r(143);e.SigninRequest=function(){function t(e){var r=e.url,s=e.client_id,a=e.redirect_uri,u=e.response_type,c=e.scope,f=e.authority,h=e.data,l=e.prompt,p=e.display,d=e.max_age,g=e.ui_locales,v=e.id_token_hint,y=e.login_hint,m=e.acr_values,_=e.resource,S=e.response_mode,b=e.request,w=e.request_uri,F=e.extraQueryParams,E=e.request_type,x=e.client_secret,A=e.extraTokenParams,k=e.skipUserInfo;if(function P(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!s)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!a)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!u)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!c)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!f)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var C=t.isOidc(u),T=t.isCode(u);S||(S=t.isCode(u)?"query":null),this.state=new o.SigninState({nonce:C,data:h,client_id:s,authority:f,redirect_uri:a,code_verifier:T,request_type:E,response_mode:S,client_secret:x,scope:c,extraTokenParams:A,skipUserInfo:k}),r=i.UrlUtility.addQueryParam(r,"client_id",s),r=i.UrlUtility.addQueryParam(r,"redirect_uri",a),r=i.UrlUtility.addQueryParam(r,"response_type",u),r=i.UrlUtility.addQueryParam(r,"scope",c),r=i.UrlUtility.addQueryParam(r,"state",this.state.id),C&&(r=i.UrlUtility.addQueryParam(r,"nonce",this.state.nonce)),T&&(r=i.UrlUtility.addQueryParam(r,"code_challenge",this.state.code_challenge),r=i.UrlUtility.addQueryParam(r,"code_challenge_method","S256"));var R={prompt:l,display:p,max_age:d,ui_locales:g,id_token_hint:v,login_hint:y,acr_values:m,resource:_,request:b,request_uri:w,response_mode:S};for(var I in R)R[I]&&(r=i.UrlUtility.addQueryParam(r,I,R[I]));for(var O in F)r=i.UrlUtility.addQueryParam(r,O,F[O]);this.url=r}return t.isOidc=function t(e){return!!e.split(/\s+/g).filter(function(t){return"id_token"===t})[0]},t.isOAuth=function t(e){return!!e.split(/\s+/g).filter(function(t){return"token"===t})[0]},t.isCode=function t(e){return!!e.split(/\s+/g).filter(function(t){return"code"===t})[0]},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninState=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.nonce,i=r.authority,o=r.client_id,u=r.redirect_uri,c=r.code_verifier,f=r.response_mode,h=r.client_secret,l=r.scope,p=r.extraTokenParams,d=r.skipUserInfo;!function g(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var v=function y(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));if(!0===n?v._nonce=(0,a.default)():n&&(v._nonce=n),!0===c?v._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():c&&(v._code_verifier=c),v.code_verifier){var m=s.JoseUtil.hashString(v.code_verifier,"SHA256");v._code_challenge=s.JoseUtil.hexToBase64Url(m)}return v._redirect_uri=u,v._authority=i,v._client_id=o,v._response_mode=f,v._client_secret=h,v._scope=l,v._extraTokenParams=p,v._skipUserInfo=d,v}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.toStorageString=function t(){return i.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode,client_secret:this.client_secret,scope:this.scope,extraTokenParams:this.extraTokenParams,skipUserInfo:this.skipUserInfo})},e.fromStorageString=function t(r){return i.Log.debug("SigninState.fromStorageString"),new e(JSON.parse(r))},n(e,[{key:"nonce",get:function t(){return this._nonce}},{key:"authority",get:function t(){return this._authority}},{key:"client_id",get:function t(){return this._client_id}},{key:"redirect_uri",get:function t(){return this._redirect_uri}},{key:"code_verifier",get:function t(){return this._code_verifier}},{key:"code_challenge",get:function t(){return this._code_challenge}},{key:"response_mode",get:function t(){return this._response_mode}},{key:"client_secret",get:function t(){return this._client_secret}},{key:"scope",get:function t(){return this._scope}},{key:"extraTokenParams",get:function t(){return this._extraTokenParams}},{key:"skipUserInfo",get:function t(){return this._skipUserInfo}}]),e}(o.State)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(){return(0,i.default)().replace(/-/g,"")};var i=function o(t){return t&&t.__esModule?t:{default:t}}(r(365));t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.User=void 0;var n=function(){function t(t,e){for(var r=0;r0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessTokenEvents=void 0;var n=r(3),i=r(380);var o=60;e.AccessTokenEvents=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.accessTokenExpiringNotificationTime,n=void 0===r?o:r,s=e.accessTokenExpiringTimer,a=void 0===s?new i.Timer("Access token expiring"):s,u=e.accessTokenExpiredTimer,c=void 0===u?new i.Timer("Access token expired"):u;!function f(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._accessTokenExpiringNotificationTime=n,this._accessTokenExpiring=a,this._accessTokenExpired=c}return t.prototype.load=function t(e){if(e.access_token&&void 0!==e.expires_in){var r=e.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",r),r>0){var i=r-this._accessTokenExpiringNotificationTime;i<=0&&(i=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",i),this._accessTokenExpiring.init(i)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var o=r+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",o),this._accessTokenExpired.init(o)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.unload=function t(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.addAccessTokenExpiring=function t(e){this._accessTokenExpiring.addHandler(e)},t.prototype.removeAccessTokenExpiring=function t(e){this._accessTokenExpiring.removeHandler(e)},t.prototype.addAccessTokenExpired=function t(e){this._accessTokenExpired.addHandler(e)},t.prototype.removeAccessTokenExpired=function t(e){this._accessTokenExpired.removeHandler(e)},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Event=void 0;var n=r(3);e.Event=function(){function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._name=e,this._callbacks=[]}return t.prototype.addHandler=function t(e){this._callbacks.push(e)},t.prototype.removeHandler=function t(e){var r=this._callbacks.findIndex(function(t){return t===e});r>=0&&this._callbacks.splice(r,1)},t.prototype.raise=function t(){n.Log.debug("Event: Raising event: "+this._name);for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:o.CheckSessionIFrame,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.Global.timer;if(function u(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=e,this._CheckSessionIFrameCtor=n,this._timer=a,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then(function(t){t?r._start(t):r._settings.monitorAnonymousSession&&r._userManager.querySessionStatus().then(function(t){var e={session_state:t.session_state};t.sub&&t.sid&&(e.profile={sub:t.sub,sid:t.sid}),r._start(e)}).catch(function(t){i.Log.error("SessionMonitor ctor: error from querySessionStatus:",t.message)})}).catch(function(t){i.Log.error("SessionMonitor ctor: error from getUser:",t.message)})}return t.prototype._start=function t(e){var r=this,n=e.session_state;n&&(e.profile?(this._sub=e.profile.sub,this._sid=e.profile.sid,i.Log.debug("SessionMonitor._start: session_state:",n,", sub:",this._sub)):(this._sub=void 0,this._sid=void 0,i.Log.debug("SessionMonitor._start: session_state:",n,", anonymous user")),this._checkSessionIFrame?this._checkSessionIFrame.start(n):this._metadataService.getCheckSessionIframe().then(function(t){if(t){i.Log.debug("SessionMonitor._start: Initializing check session iframe");var e=r._client_id,o=r._checkSessionInterval,s=r._stopCheckSessionOnError;r._checkSessionIFrame=new r._CheckSessionIFrameCtor(r._callback.bind(r),e,t,o,s),r._checkSessionIFrame.load().then(function(){r._checkSessionIFrame.start(n)})}else i.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")}).catch(function(t){i.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",t.message)}))},t.prototype._stop=function t(){var e=this;if(this._sub=void 0,this._sid=void 0,this._checkSessionIFrame&&(i.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop()),this._settings.monitorAnonymousSession)var r=this._timer.setInterval(function(){e._timer.clearInterval(r),e._userManager.querySessionStatus().then(function(t){var r={session_state:t.session_state};t.sub&&t.sid&&(r.profile={sub:t.sub,sid:t.sid}),e._start(r)}).catch(function(t){i.Log.error("SessionMonitor: error from querySessionStatus:",t.message)})},1e3)},t.prototype._callback=function t(){var e=this;this._userManager.querySessionStatus().then(function(t){var r=!0;t?t.sub===e._sub?(r=!1,e._checkSessionIFrame.start(t.session_state),t.sid===e._sid?i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",t.session_state):(i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",t.session_state),e._userManager.events._raiseUserSessionChanged())):i.Log.debug("SessionMonitor._callback: Different subject signed into OP:",t.sub):i.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(e._sub?(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),e._userManager.events._raiseUserSignedOut()):(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed in event"),e._userManager.events._raiseUserSignedIn()))}).catch(function(t){e._sub&&(i.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",t.message),e._userManager.events._raiseUserSignedOut())})},n(t,[{key:"_settings",get:function t(){return this._userManager.settings}},{key:"_metadataService",get:function t(){return this._userManager.metadataService}},{key:"_client_id",get:function t(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function t(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function t(){return this._settings.stopCheckSessionOnError}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CheckSessionIFrame=void 0;var n=r(3);var i=2e3;e.CheckSessionIFrame=function(){function t(e,r,n,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._callback=e,this._client_id=r,this._url=n,this._interval=o||i,this._stopOnError=s;var u=n.indexOf("/",n.indexOf("//")+2);this._frame_origin=n.substr(0,u),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=n}return t.prototype.load=function t(){var e=this;return new Promise(function(t){e._frame.onload=function(){t()},window.document.body.appendChild(e._frame),e._boundMessageEvent=e._message.bind(e),window.addEventListener("message",e._boundMessageEvent,!1)})},t.prototype._message=function t(e){e.origin===this._frame_origin&&e.source===this._frame.contentWindow&&("error"===e.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===e.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+e.data+" message from check session op iframe"))},t.prototype.start=function t(e){var r=this;if(this._session_state!==e){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=e;var i=function t(){r._frame.contentWindow.postMessage(r._client_id+" "+r._session_state,r._frame_origin)};i(),this._timer=window.setInterval(i,this._interval)}},t.prototype.stop=function t(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenRevocationClient=void 0;var n=r(3),i=r(49),o=r(33);e.TokenRevocationClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=e,this._XMLHttpRequestCtor=r,this._metadataService=new s(this._settings)}return t.prototype.revoke=function t(e,r){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!e)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==o&&"refresh_token"!=o)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then(function(t){if(t){n.Log.debug("TokenRevocationClient.revoke: Revoking "+o);var s=i._settings.client_id,a=i._settings.client_secret;return i._revoke(t,s,a,e,o)}if(r)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")})},t.prototype._revoke=function t(e,r,i,o,s){var a=this;return new Promise(function(t,u){var c=new a._XMLHttpRequestCtor;c.open("POST",e),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?t():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var f="client_id="+encodeURIComponent(r);i&&(f+="&client_secret="+encodeURIComponent(i)),f+="&token_type_hint="+encodeURIComponent(s),f+="&token="+encodeURIComponent(o),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(f)})},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CordovaPopupWindow=void 0;var n=function(){function t(t,e){for(var r=0;ro;)z(e,n=i[o++],r[n]);return e},G=function t(e){var r=L.call(this,e=b(e,!0));return!(this===B&&i(j,e)&&!i(U,e))&&(!(r||!i(this,e)||!i(j,e)||i(this,D)&&this[D][e])||r)},X=function t(e,r){if(e=S(e),r=b(r,!0),e!==B||!i(j,r)||i(U,r)){var n=P(e,r);return!n||!i(j,r)||i(e,D)&&e[D][r]||(n.enumerable=!0),n}},$=function t(e){for(var r,n=T(S(e)),o=[],s=0;n.length>s;)i(j,r=n[s++])||r==D||r==u||o.push(r);return o},Q=function t(e){for(var r,n=e===B,o=T(n?U:S(e)),s=[],a=0;o.length>a;)!i(j,r=o[a++])||n&&!i(B,r)||s.push(j[r]);return s};H||(a((R=function t(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var e=l(arguments.length>0?arguments[0]:void 0),r=function(t){this===B&&r.call(U,t),i(this,D)&&i(this[D],e)&&(this[D][e]=!1),q(this,e,w(1,t))};return o&&K&&q(B,e,{configurable:!0,set:r}),W(e)}).prototype,"toString",function t(){return this._k}),x.f=X,A.f=z,r(39).f=E.f=$,r(52).f=G,r(57).f=Q,o&&!r(30)&&a(B,"propertyIsEnumerable",G,!0),d.f=function(t){return W(p(t))}),s(s.G+s.W+s.F*!H,{Symbol:R});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Z.length>tt;)p(Z[tt++]);for(var et=k(p.store),rt=0;et.length>rt;)g(et[rt++]);s(s.S+s.F*!H,"Symbol",{for:function(t){return i(M,t+="")?M[t]:M[t]=R(t)},keyFor:function t(e){if(!J(e))throw TypeError(e+" is not a symbol!");for(var r in M)if(M[r]===e)return r},useSetter:function(){K=!0},useSimple:function(){K=!1}}),s(s.S+s.F*!H,"Object",{create:function t(e,r){return void 0===r?F(e):Y(F(e),r)},defineProperty:z,defineProperties:Y,getOwnPropertyDescriptor:X,getOwnPropertyNames:$,getOwnPropertySymbols:Q}),I&&s(s.S+s.F*(!H||c(function(){var t=R();return"[null]"!=O([t])||"{}"!=O({a:t})||"{}"!=O(Object(t))})),"JSON",{stringify:function t(e){for(var r,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=r=i[1],(_(r)||void 0!==e)&&!J(e))return y(r)||(r=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!J(e))return e}),i[1]=r,O.apply(I,i)}}),R.prototype[N]||r(12)(R.prototype,N,R.prototype.valueOf),h(R,"Symbol"),h(Math,"Math",!0),h(n.JSON,"JSON",!0)},function(t,e,r){t.exports=r(50)("native-function-to-string",Function.toString)},function(t,e,r){var n=r(36),i=r(57),o=r(52);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var s,a=r(t),u=o.f,c=0;a.length>c;)u.call(t,s=a[c++])&&e.push(s);return e}},function(t,e,r){var n=r(0);n(n.S,"Object",{create:r(38)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperty:r(9).f})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperties:r(106)})},function(t,e,r){var n=r(16),i=r(17).f;r(26)("getOwnPropertyDescriptor",function(){return function t(e,r){return i(n(e),r)}})},function(t,e,r){var n=r(10),i=r(18);r(26)("getPrototypeOf",function(){return function t(e){return i(n(e))}})},function(t,e,r){var n=r(10),i=r(36);r(26)("keys",function(){return function t(e){return i(n(e))}})},function(t,e,r){r(26)("getOwnPropertyNames",function(){return r(107).f})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("freeze",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("seal",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("preventExtensions",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5);r(26)("isFrozen",function(t){return function e(r){return!n(r)||!!t&&t(r)}})},function(t,e,r){var n=r(5);r(26)("isSealed",function(t){return function e(r){return!n(r)||!!t&&t(r)}})},function(t,e,r){var n=r(5);r(26)("isExtensible",function(t){return function e(r){return!!n(r)&&(!t||t(r))}})},function(t,e,r){var n=r(0);n(n.S+n.F,"Object",{assign:r(108)})},function(t,e,r){var n=r(0);n(n.S,"Object",{is:r(109)})},function(t,e,r){var n=r(0);n(n.S,"Object",{setPrototypeOf:r(77).set})},function(t,e,r){"use strict";var n=r(46),i={};i[r(6)("toStringTag")]="z",i+""!="[object z]"&&r(13)(Object.prototype,"toString",function t(){return"[object "+n(this)+"]"},!0)},function(t,e,r){var n=r(0);n(n.P,"Function",{bind:r(110)})},function(t,e,r){var n=r(9).f,i=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in i||r(8)&&n(i,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},function(t,e,r){"use strict";var n=r(5),i=r(18),o=r(6)("hasInstance"),s=Function.prototype;o in s||r(9).f(s,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,r){var n=r(0),i=r(112);n(n.G+n.F*(parseInt!=i),{parseInt:i})},function(t,e,r){var n=r(0),i=r(113);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},function(t,e,r){"use strict";var n=r(2),i=r(15),o=r(21),s=r(79),a=r(24),u=r(4),c=r(39).f,f=r(17).f,h=r(9).f,l=r(47).trim,p=n.Number,d=p,g=p.prototype,v="Number"==o(r(38)(g)),y="trim"in String.prototype,m=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){var r,n,i,o=(e=y?e.trim():l(e,3)).charCodeAt(0);if(43===o||45===o){if(88===(r=e.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var s,u=e.slice(2),c=0,f=u.length;ci)return NaN;return parseInt(u,n)}}return+e};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function t(e){var r=arguments.length<1?0:e,n=this;return n instanceof p&&(v?u(function(){g.valueOf.call(n)}):"Number"!=o(n))?s(new d(m(r)),n,p):m(r)};for(var _,S=r(8)?c(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),b=0;S.length>b;b++)i(d,_=S[b])&&!i(p,_)&&h(p,_,f(d,_));p.prototype=g,g.constructor=p,r(13)(n,"Number",p)}},function(t,e,r){"use strict";var n=r(0),i=r(22),o=r(114),s=r(80),a=1..toFixed,u=Math.floor,c=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",h=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*c[r],c[r]=n%1e7,n=u(n/1e7)},l=function(t){for(var e=6,r=0;--e>=0;)r+=c[e],c[e]=u(r/t),r=r%t*1e7},p=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==c[t]){var r=String(c[t]);e=""===e?r:e+s.call("0",7-r.length)+r}return e},d=function(t,e,r){return 0===e?r:e%2==1?d(t,e-1,r*t):d(t*t,e/2,r)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(4)(function(){a.call({})})),"Number",{toFixed:function t(e){var r,n,a,u,c=o(this,f),g=i(e),v="",y="0";if(g<0||g>20)throw RangeError(f);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(v="-",c=-c),c>1e-21)if(n=(r=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}(c*d(2,69,1))-69)<0?c*d(2,-r,1):c/d(2,r,1),n*=4503599627370496,(r=52-r)>0){for(h(0,n),a=g;a>=7;)h(1e7,0),a-=7;for(h(d(10,a,1),0),a=r-1;a>=23;)l(1<<23),a-=23;l(1<0?v+((u=y.length)<=g?"0."+s.call("0",g-u)+y:y.slice(0,u-g)+"."+y.slice(u-g)):v+y}})},function(t,e,r){"use strict";var n=r(0),i=r(4),o=r(114),s=1..toPrecision;n(n.P+n.F*(i(function(){return"1"!==s.call(1,void 0)})||!i(function(){s.call({})})),"Number",{toPrecision:function t(e){var r=o(this,"Number#toPrecision: incorrect invocation!");return void 0===e?s.call(r):s.call(r,e)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,r){var n=r(0),i=r(2).isFinite;n(n.S,"Number",{isFinite:function t(e){return"number"==typeof e&&i(e)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{isInteger:r(115)})},function(t,e,r){var n=r(0);n(n.S,"Number",{isNaN:function t(e){return e!=e}})},function(t,e,r){var n=r(0),i=r(115),o=Math.abs;n(n.S,"Number",{isSafeInteger:function t(e){return i(e)&&o(e)<=9007199254740991}})},function(t,e,r){var n=r(0);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){var n=r(0);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,r){var n=r(0),i=r(113);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,e,r){var n=r(0),i=r(112);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,e,r){var n=r(0),i=r(116),o=Math.sqrt,s=Math.acosh;n(n.S+n.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function t(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:i(e-1+o(e-1)*o(e+1))}})},function(t,e,r){var n=r(0),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Math.log(e+Math.sqrt(e*e+1)):e}})},function(t,e,r){var n=r(0),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function t(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(t,e,r){var n=r(0),i=r(81);n(n.S,"Math",{cbrt:function t(e){return i(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clz32:function t(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(t,e,r){var n=r(0),i=Math.exp;n(n.S,"Math",{cosh:function t(e){return(i(e=+e)+i(-e))/2}})},function(t,e,r){var n=r(0),i=r(82);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,e,r){var n=r(0);n(n.S,"Math",{fround:r(117)})},function(t,e,r){var n=r(0),i=Math.abs;n(n.S,"Math",{hypot:function t(e,r){for(var n,o,s=0,a=0,u=arguments.length,c=0;a0?(o=n/c)*o:n;return c===1/0?1/0:c*Math.sqrt(s)}})},function(t,e,r){var n=r(0),i=Math.imul;n(n.S+n.F*r(4)(function(){return-5!=i(4294967295,5)||2!=i.length}),"Math",{imul:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i;return 0|o*s+((65535&n>>>16)*s+o*(65535&i>>>16)<<16>>>0)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log10:function t(e){return Math.log(e)*Math.LOG10E}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log1p:r(116)})},function(t,e,r){var n=r(0);n(n.S,"Math",{log2:function t(e){return Math.log(e)/Math.LN2}})},function(t,e,r){var n=r(0);n(n.S,"Math",{sign:r(81)})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S+n.F*r(4)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function t(e){return Math.abs(e=+e)<1?(i(e)-i(-e))/2:(o(e-1)-o(-e-1))*(Math.E/2)}})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S,"Math",{tanh:function t(e){var r=i(e=+e),n=i(-e);return r==1/0?1:n==1/0?-1:(r-n)/(o(e)+o(-e))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{trunc:function t(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(t,e,r){var n=r(0),i=r(37),o=String.fromCharCode,s=String.fromCodePoint;n(n.S+n.F*(!!s&&1!=s.length),"String",{fromCodePoint:function t(e){for(var r,n=[],s=arguments.length,a=0;s>a;){if(r=+arguments[a++],i(r,1114111)!==r)throw RangeError(r+" is not a valid code point");n.push(r<65536?o(r):o(55296+((r-=65536)>>10),r%1024+56320))}return n.join("")}})},function(t,e,r){var n=r(0),i=r(16),o=r(7);n(n.S,"String",{raw:function t(e){for(var r=i(e.raw),n=o(r.length),s=arguments.length,a=[],u=0;n>u;)a.push(String(r[u++])),u=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e,r){"use strict";var n=r(0),i=r(59)(!1);n(n.P,"String",{codePointAt:function t(e){return i(this,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".endsWith;n(n.P+n.F*r(86)("endsWith"),"String",{endsWith:function t(e){var r=o(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,a=i(r.length),u=void 0===n?a:Math.min(i(n),a),c=String(e);return s?s.call(r,c,u):r.slice(u-c.length,u)===c}})},function(t,e,r){"use strict";var n=r(0),i=r(85);n(n.P+n.F*r(86)("includes"),"String",{includes:function t(e){return!!~i(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(t,e,r){var n=r(0);n(n.P,"String",{repeat:r(80)})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".startsWith;n(n.P+n.F*r(86)("startsWith"),"String",{startsWith:function t(e){var r=o(this,e,"startsWith"),n=i(Math.min(arguments.length>1?arguments[1]:void 0,r.length)),a=String(e);return s?s.call(r,a,n):r.slice(n,n+a.length)===a}})},function(t,e,r){"use strict";r(14)("anchor",function(t){return function e(r){return t(this,"a","name",r)}})},function(t,e,r){"use strict";r(14)("big",function(t){return function e(){return t(this,"big","","")}})},function(t,e,r){"use strict";r(14)("blink",function(t){return function e(){return t(this,"blink","","")}})},function(t,e,r){"use strict";r(14)("bold",function(t){return function e(){return t(this,"b","","")}})},function(t,e,r){"use strict";r(14)("fixed",function(t){return function e(){return t(this,"tt","","")}})},function(t,e,r){"use strict";r(14)("fontcolor",function(t){return function e(r){return t(this,"font","color",r)}})},function(t,e,r){"use strict";r(14)("fontsize",function(t){return function e(r){return t(this,"font","size",r)}})},function(t,e,r){"use strict";r(14)("italics",function(t){return function e(){return t(this,"i","","")}})},function(t,e,r){"use strict";r(14)("link",function(t){return function e(r){return t(this,"a","href",r)}})},function(t,e,r){"use strict";r(14)("small",function(t){return function e(){return t(this,"small","","")}})},function(t,e,r){"use strict";r(14)("strike",function(t){return function e(){return t(this,"strike","","")}})},function(t,e,r){"use strict";r(14)("sub",function(t){return function e(){return t(this,"sub","","")}})},function(t,e,r){"use strict";r(14)("sup",function(t){return function e(){return t(this,"sup","","")}})},function(t,e,r){var n=r(0);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24);n(n.P+n.F*r(4)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function t(e){var r=i(this),n=o(r);return"number"!=typeof n||isFinite(n)?r.toISOString():null}})},function(t,e,r){var n=r(0),i=r(234);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},function(t,e,r){"use strict";var n=r(4),i=Date.prototype.getTime,o=Date.prototype.toISOString,s=function(t){return t>9?t:"0"+t};t.exports=n(function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-5e13-1))})||!n(function(){o.call(new Date(NaN))})?function t(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var e=this,r=e.getUTCFullYear(),n=e.getUTCMilliseconds(),o=r<0?"-":r>9999?"+":"";return o+("00000"+Math.abs(r)).slice(o?-6:-4)+"-"+s(e.getUTCMonth()+1)+"-"+s(e.getUTCDate())+"T"+s(e.getUTCHours())+":"+s(e.getUTCMinutes())+":"+s(e.getUTCSeconds())+"."+(n>99?n:"0"+s(n))+"Z"}:o},function(t,e,r){var n=Date.prototype,i=n.toString,o=n.getTime;new Date(NaN)+""!="Invalid Date"&&r(13)(n,"toString",function t(){var e=o.call(this);return e==e?i.call(this):"Invalid Date"})},function(t,e,r){var n=r(6)("toPrimitive"),i=Date.prototype;n in i||r(12)(i,n,r(237))},function(t,e,r){"use strict";var n=r(1),i=r(24);t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),"number"!=t)}},function(t,e,r){var n=r(0);n(n.S,"Array",{isArray:r(58)})},function(t,e,r){"use strict";var n=r(20),i=r(0),o=r(10),s=r(118),a=r(87),u=r(7),c=r(88),f=r(89);i(i.S+i.F*!r(61)(function(t){Array.from(t)}),"Array",{from:function t(e){var r,i,h,l,p=o(e),d="function"==typeof this?this:Array,g=arguments.length,v=g>1?arguments[1]:void 0,y=void 0!==v,m=0,_=f(p);if(y&&(v=n(v,g>2?arguments[2]:void 0,2)),void 0==_||d==Array&&a(_))for(i=new d(r=u(p.length));r>m;m++)c(i,m,y?v(p[m],m):p[m]);else for(l=_.call(p),i=new d;!(h=l.next()).done;m++)c(i,m,y?s(l,v,[h.value,m],!0):h.value);return i.length=m,i}})},function(t,e,r){"use strict";var n=r(0),i=r(88);n(n.S+n.F*r(4)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function t(){for(var e=0,r=arguments.length,n=new("function"==typeof this?this:Array)(r);r>e;)i(n,e,arguments[e++]);return n.length=r,n}})},function(t,e,r){"use strict";var n=r(0),i=r(16),o=[].join;n(n.P+n.F*(r(51)!=Object||!r(23)(o)),"Array",{join:function t(e){return o.call(i(this),void 0===e?",":e)}})},function(t,e,r){"use strict";var n=r(0),i=r(76),o=r(21),s=r(37),a=r(7),u=[].slice;n(n.P+n.F*r(4)(function(){i&&u.call(i)}),"Array",{slice:function t(e,r){var n=a(this.length),i=o(this);if(r=void 0===r?n:r,"Array"==i)return u.call(this,e,r);for(var c=s(e,n),f=s(r,n),h=a(f-c),l=new Array(h),p=0;p1&&(c=Math.min(c,o(arguments[1]))),c<0&&(c=n+c);c>=0;c--)if(c in r&&r[c]===e)return c||0;return-1}})},function(t,e,r){var n=r(0);n(n.P,"Array",{copyWithin:r(120)}),r(32)("copyWithin")},function(t,e,r){var n=r(0);n(n.P,"Array",{fill:r(91)}),r(32)("fill")},function(t,e,r){"use strict";var n=r(0),i=r(27)(5),o=!0;"find"in[]&&Array(1).find(function(){o=!1}),n(n.P+n.F*o,"Array",{find:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)("find")},function(t,e,r){"use strict";var n=r(0),i=r(27)(6),o="findIndex",s=!0;o in[]&&Array(1)[o](function(){s=!1}),n(n.P+n.F*s,"Array",{findIndex:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)(o)},function(t,e,r){r(40)("Array")},function(t,e,r){var n=r(2),i=r(79),o=r(9).f,s=r(39).f,a=r(60),u=r(53),c=n.RegExp,f=c,h=c.prototype,l=/a/g,p=/a/g,d=new c(l)!==l;if(r(8)&&(!d||r(4)(function(){return p[r(6)("match")]=!1,c(l)!=l||c(p)==p||"/a/i"!=c(l,"i")}))){c=function t(e,r){var n=this instanceof c,o=a(e),s=void 0===r;return!n&&o&&e.constructor===c&&s?e:i(d?new f(o&&!s?e.source:e,r):f((o=e instanceof c)?e.source:e,o&&s?u.call(e):r),n?this:h,c)};for(var g=function(t){t in c||o(c,t,{configurable:!0,get:function(){return f[t]},set:function(e){f[t]=e}})},v=s(f),y=0;v.length>y;)g(v[y++]);h.constructor=c,c.prototype=h,r(13)(n,"RegExp",c)}r(40)("RegExp")},function(t,e,r){"use strict";r(123);var n=r(1),i=r(53),o=r(8),s=/./.toString,a=function(t){r(13)(RegExp.prototype,"toString",t,!0)};r(4)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?a(function t(){var e=n(this);return"/".concat(e.source,"/","flags"in e?e.flags:!o&&e instanceof RegExp?i.call(e):void 0)}):"toString"!=s.name&&a(function t(){return s.call(this)})},function(t,e,r){"use strict";var n=r(1),i=r(7),o=r(94),s=r(62);r(63)("match",1,function(t,e,r,a){return[function r(n){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=a(r,t,this);if(e.done)return e.value;var u=n(t),c=String(this);if(!u.global)return s(u,c);var f=u.unicode;u.lastIndex=0;for(var h,l=[],p=0;null!==(h=s(u,c));){var d=String(h[0]);l[p]=d,""===d&&(u.lastIndex=o(c,i(u.lastIndex),f)),p++}return 0===p?null:l}]})},function(t,e,r){"use strict";var n=r(1),i=r(10),o=r(7),s=r(22),a=r(94),u=r(62),c=Math.max,f=Math.min,h=Math.floor,l=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;r(63)("replace",2,function(t,e,r,d){return[function n(i,o){var s=t(this),a=void 0==i?void 0:i[e];return void 0!==a?a.call(i,s,o):r.call(String(s),i,o)},function(t,e){var i=d(r,t,this,e);if(i.done)return i.value;var h=n(t),l=String(this),p="function"==typeof e;p||(e=String(e));var v=h.global;if(v){var y=h.unicode;h.lastIndex=0}for(var m=[];;){var _=u(h,l);if(null===_)break;if(m.push(_),!v)break;""===String(_[0])&&(h.lastIndex=a(l,o(h.lastIndex),y))}for(var S,b="",w=0,F=0;F=w&&(b+=l.slice(w,x)+T,w=x+E.length)}return b+l.slice(w)}];function g(t,e,n,o,s,a){var u=n+t.length,c=o.length,f=p;return void 0!==s&&(s=i(s),f=l),r.call(a,f,function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(u);case"<":a=s[i.slice(1,-1)];break;default:var f=+i;if(0===f)return r;if(f>c){var l=h(f/10);return 0===l?r:l<=c?void 0===o[l-1]?i.charAt(1):o[l-1]+i.charAt(1):r}a=o[f-1]}return void 0===a?"":a})}})},function(t,e,r){"use strict";var n=r(1),i=r(109),o=r(62);r(63)("search",1,function(t,e,r,s){return[function r(n){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=s(r,t,this);if(e.done)return e.value;var a=n(t),u=String(this),c=a.lastIndex;i(c,0)||(a.lastIndex=0);var f=o(a,u);return i(a.lastIndex,c)||(a.lastIndex=c),null===f?-1:f.index}]})},function(t,e,r){"use strict";var n=r(60),i=r(1),o=r(54),s=r(94),a=r(7),u=r(62),c=r(93),f=r(4),h=Math.min,l=[].push,p=!f(function(){RegExp(4294967295,"y")});r(63)("split",2,function(t,e,r,f){var d;return d="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!n(t))return r.call(i,t,e);for(var o,s,a,u=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,p=void 0===e?4294967295:e>>>0,d=new RegExp(t.source,f+"g");(o=c.call(d,i))&&!((s=d.lastIndex)>h&&(u.push(i.slice(h,o.index)),o.length>1&&o.index=p));)d.lastIndex===o.index&&d.lastIndex++;return h===i.length?!a&&d.test("")||u.push(""):u.push(i.slice(h)),u.length>p?u.slice(0,p):u}:"0".split(void 0,0).length?function(t,e){return void 0===t&&0===e?[]:r.call(this,t,e)}:r,[function r(n,i){var o=t(this),s=void 0==n?void 0:n[e];return void 0!==s?s.call(n,o,i):d.call(String(o),n,i)},function(t,e){var n=f(d,t,this,e,d!==r);if(n.done)return n.value;var c=i(t),l=String(this),g=o(c,RegExp),v=c.unicode,y=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(p?"y":"g"),m=new g(p?c:"^(?:"+c.source+")",y),_=void 0===e?4294967295:e>>>0;if(0===_)return[];if(0===l.length)return null===u(m,l)?[l]:[];for(var S=0,b=0,w=[];bo;)s(r[o++]);t._c=[],t._n=!1,e&&!t._h&&D(t)})}},D=function(t){y.call(u,function(){var e,r,n,i=t._v,o=N(t);if(o&&(e=S(function(){P?E.emit("unhandledRejection",i,t):(r=u.onunhandledrejection)?r({promise:t,reason:i}):(n=u.console)&&n.error&&n.error("Unhandled promise rejection",i)}),t._h=P||N(t)?2:1),t._a=void 0,o&&e.e)throw e.v})},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},L=function(t){y.call(u,function(){var e;P?E.emit("rejectionHandled",t):(e=u.onrejectionhandled)&&e({promise:t,reason:t._v})})},M=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),O(e,!0))},j=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw F("Promise can't be resolved itself");(e=I(t))?m(function(){var n={_w:r,_d:!1};try{e.call(t,c(j,n,1),c(M,n,1))}catch(t){M.call(n,t)}}):(r._v=t,r._s=1,O(r,!1))}catch(t){M.call({_w:r,_d:!1},t)}}};R||(k=function t(e){d(this,k,"Promise","_h"),p(e),n.call(this);try{e(c(j,this,1),c(M,this,1))}catch(t){M.call(this,t)}},(n=function t(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=r(43)(k.prototype,{then:function t(e,r){var n=T(v(this,k));return n.ok="function"!=typeof e||e,n.fail="function"==typeof r&&r,n.domain=P?E.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&O(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=c(j,t,1),this.reject=c(M,t,1)},_.f=T=function(t){return t===k||t===s?new o(t):i(t)}),h(h.G+h.W+h.F*!R,{Promise:k}),r(45)(k,"Promise"),r(40)("Promise"),s=r(19).Promise,h(h.S+h.F*!R,"Promise",{reject:function t(e){var r=T(this);return(0,r.reject)(e),r.promise}}),h(h.S+h.F*(a||!R),"Promise",{resolve:function t(e){return w(a&&this===s?k:this,e)}}),h(h.S+h.F*!(R&&r(61)(function(t){k.all(t).catch(C)})),"Promise",{all:function t(e){var r=this,n=T(r),i=n.resolve,o=n.reject,s=S(function(){var t=[],n=0,s=1;g(e,!1,function(e){var a=n++,u=!1;t.push(void 0),s++,r.resolve(e).then(function(e){u||(u=!0,t[a]=e,--s||i(t))},o)}),--s||i(t)});return s.e&&o(s.v),n.promise},race:function t(e){var r=this,n=T(r),i=n.reject,o=S(function(){g(e,!1,function(t){r.resolve(t).then(n.resolve,i)})});return o.e&&i(o.v),n.promise}})},function(t,e,r){"use strict";var n=r(130),i=r(44);r(65)("WeakSet",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function t(e){return n.def(i(this,"WeakSet"),e,!0)}},n,!1,!0)},function(t,e,r){"use strict";var n=r(0),i=r(66),o=r(98),s=r(1),a=r(37),u=r(7),c=r(5),f=r(2).ArrayBuffer,h=r(54),l=o.ArrayBuffer,p=o.DataView,d=i.ABV&&f.isView,g=l.prototype.slice,v=i.VIEW;n(n.G+n.W+n.F*(f!==l),{ArrayBuffer:l}),n(n.S+n.F*!i.CONSTR,"ArrayBuffer",{isView:function t(e){return d&&d(e)||c(e)&&v in e}}),n(n.P+n.U+n.F*r(4)(function(){return!new l(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function t(e,r){if(void 0!==g&&void 0===r)return g.call(s(this),e);for(var n=s(this).byteLength,i=a(e,n),o=a(void 0===r?n:r,n),c=new(h(this,l))(u(o-i)),f=new p(this),d=new p(c),v=0;i=e.length)return{value:void 0,done:!0}}while(!((t=e[this._i++])in this._t));return{value:t,done:!1}}),n(n.S,"Reflect",{enumerate:function t(e){return new o(e)}})},function(t,e,r){var n=r(17),i=r(18),o=r(15),s=r(0),a=r(5),u=r(1);s(s.S,"Reflect",{get:function t(e,r){var s,c,f=arguments.length<3?e:arguments[2];return u(e)===f?e[r]:(s=n.f(e,r))?o(s,"value")?s.value:void 0!==s.get?s.get.call(f):void 0:a(c=i(e))?t(c,r,f):void 0}})},function(t,e,r){var n=r(17),i=r(0),o=r(1);i(i.S,"Reflect",{getOwnPropertyDescriptor:function t(e,r){return n.f(o(e),r)}})},function(t,e,r){var n=r(0),i=r(18),o=r(1);n(n.S,"Reflect",{getPrototypeOf:function t(e){return i(o(e))}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{has:function t(e,r){return r in e}})},function(t,e,r){var n=r(0),i=r(1),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function t(e){return i(e),!o||o(e)}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{ownKeys:r(132)})},function(t,e,r){var n=r(0),i=r(1),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function t(e){i(e);try{return o&&o(e),!0}catch(t){return!1}}})},function(t,e,r){var n=r(9),i=r(17),o=r(18),s=r(15),a=r(0),u=r(34),c=r(1),f=r(5);a(a.S,"Reflect",{set:function t(e,r,a){var h,l,p=arguments.length<4?e:arguments[3],d=i.f(c(e),r);if(!d){if(f(l=o(e)))return t(l,r,a,p);d=u(0)}if(s(d,"value")){if(!1===d.writable||!f(p))return!1;if(h=i.f(p,r)){if(h.get||h.set||!1===h.writable)return!1;h.value=a,n.f(p,r,h)}else n.f(p,r,u(0,a));return!0}return void 0!==d.set&&(d.set.call(p,a),!0)}})},function(t,e,r){var n=r(0),i=r(77);i&&n(n.S,"Reflect",{setPrototypeOf:function t(e,r){i.check(e,r);try{return i.set(e,r),!0}catch(t){return!1}}})},function(t,e,r){"use strict";var n=r(0),i=r(56)(!0);n(n.P,"Array",{includes:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)("includes")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(11),u=r(90);n(n.P,"Array",{flatMap:function t(e){var r,n,c=o(this);return a(e),r=s(c.length),n=u(c,0),i(n,c,c,r,0,1,e,arguments[1]),n}}),r(32)("flatMap")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(22),u=r(90);n(n.P,"Array",{flatten:function t(){var e=arguments[0],r=o(this),n=s(r.length),c=u(r,0);return i(c,r,r,n,0,void 0===e?1:a(e)),c}}),r(32)("flatten")},function(t,e,r){"use strict";var n=r(0),i=r(59)(!0);n(n.P,"String",{at:function t(e){return i(this,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padStart:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padEnd:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,e,r){"use strict";r(47)("trimLeft",function(t){return function e(){return t(this,1)}},"trimStart")},function(t,e,r){"use strict";r(47)("trimRight",function(t){return function e(){return t(this,2)}},"trimEnd")},function(t,e,r){"use strict";var n=r(0),i=r(25),o=r(7),s=r(60),a=r(53),u=RegExp.prototype,c=function(t,e){this._r=t,this._s=e};r(84)(c,"RegExp String",function t(){var e=this._r.exec(this._s);return{value:e,done:null===e}}),n(n.P,"String",{matchAll:function t(e){if(i(this),!s(e))throw TypeError(e+" is not a regexp!");var r=String(this),n="flags"in u?String(e.flags):a.call(e),f=new RegExp(e.source,~n.indexOf("g")?n:"g"+n);return f.lastIndex=o(e.lastIndex),new c(f,r)}})},function(t,e,r){r(73)("asyncIterator")},function(t,e,r){r(73)("observable")},function(t,e,r){var n=r(0),i=r(132),o=r(16),s=r(17),a=r(88);n(n.S,"Object",{getOwnPropertyDescriptors:function t(e){for(var r,n,u=o(e),c=s.f,f=i(u),h={},l=0;f.length>l;)void 0!==(n=c(u,r=f[l++]))&&a(h,r,n);return h}})},function(t,e,r){var n=r(0),i=r(135)(!1);n(n.S,"Object",{values:function t(e){return i(e)}})},function(t,e,r){var n=r(0),i=r(135)(!0);n(n.S,"Object",{entries:function t(e){return i(e)}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineGetter__:function t(e,r){s.f(i(this),e,{get:o(r),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineSetter__:function t(e,r){s.f(i(this),e,{set:o(r),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupGetter__:function t(e){var r,n=i(this),u=o(e,!0);do{if(r=a(n,u))return r.get}while(n=s(n))}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupSetter__:function t(e){var r,n=i(this),u=o(e,!0);do{if(r=a(n,u))return r.set}while(n=s(n))}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Map",{toJSON:r(136)("Map")})},function(t,e,r){var n=r(0);n(n.P+n.R,"Set",{toJSON:r(136)("Set")})},function(t,e,r){r(68)("Map")},function(t,e,r){r(68)("Set")},function(t,e,r){r(68)("WeakMap")},function(t,e,r){r(68)("WeakSet")},function(t,e,r){r(69)("Map")},function(t,e,r){r(69)("Set")},function(t,e,r){r(69)("WeakMap")},function(t,e,r){r(69)("WeakSet")},function(t,e,r){var n=r(0);n(n.G,{global:r(2)})},function(t,e,r){var n=r(0);n(n.S,"System",{global:r(2)})},function(t,e,r){var n=r(0),i=r(21);n(n.S,"Error",{isError:function t(e){return"Error"===i(e)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clamp:function t(e,r,n){return Math.min(n,Math.max(r,e))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(t,e,r){var n=r(0),i=180/Math.PI;n(n.S,"Math",{degrees:function t(e){return e*i}})},function(t,e,r){var n=r(0),i=r(138),o=r(117);n(n.S,"Math",{fscale:function t(e,r,n,s,a){return o(i(e,r,n,s,a))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{iaddh:function t(e,r,n,i){var o=e>>>0,s=n>>>0;return(r>>>0)+(i>>>0)+((o&s|(o|s)&~(o+s>>>0))>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{isubh:function t(e,r,n,i){var o=e>>>0,s=n>>>0;return(r>>>0)-(i>>>0)-((~o&s|~(o^s)&o-s>>>0)>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{imulh:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i,a=n>>16,u=i>>16,c=(a*s>>>0)+(o*s>>>16);return a*u+(c>>16)+((o*u>>>0)+(65535&c)>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(t,e,r){var n=r(0),i=Math.PI/180;n(n.S,"Math",{radians:function t(e){return e*i}})},function(t,e,r){var n=r(0);n(n.S,"Math",{scale:r(138)})},function(t,e,r){var n=r(0);n(n.S,"Math",{umulh:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i,a=n>>>16,u=i>>>16,c=(a*s>>>0)+(o*s>>>16);return a*u+(c>>>16)+((o*u>>>0)+(65535&c)>>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{signbit:function t(e){return(e=+e)!=e?e:0==e?1/e==1/0:e>0}})},function(t,e,r){"use strict";var n=r(0),i=r(19),o=r(2),s=r(54),a=r(125);n(n.P+n.R,"Promise",{finally:function(t){var e=s(this,i.Promise||o.Promise),r="function"==typeof t;return this.then(r?function(r){return a(e,t()).then(function(){return r})}:t,r?function(r){return a(e,t()).then(function(){throw r})}:t)}})},function(t,e,r){"use strict";var n=r(0),i=r(97),o=r(124);n(n.S,"Promise",{try:function(t){var e=i.f(this),r=o(t);return(r.e?e.reject:e.resolve)(r.v),e.promise}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.set;n.exp({defineMetadata:function t(e,r,n,a){s(e,r,i(n),o(a))}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.map,a=n.store;n.exp({deleteMetadata:function t(e,r){var n=arguments.length<3?void 0:o(arguments[2]),u=s(i(r),n,!1);if(void 0===u||!u.delete(e))return!1;if(u.size)return!0;var c=a.get(r);return c.delete(n),!!c.size||a.delete(r)}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.get,u=n.key,c=function(t,e,r){if(s(t,e,r))return a(t,e,r);var n=o(e);return null!==n?c(t,n,r):void 0};n.exp({getMetadata:function t(e,r){return c(e,i(r),arguments.length<3?void 0:u(arguments[2]))}})},function(t,e,r){var n=r(128),i=r(137),o=r(29),s=r(1),a=r(18),u=o.keys,c=o.key,f=function(t,e){var r=u(t,e),o=a(t);if(null===o)return r;var s=f(o,e);return s.length?r.length?i(new n(r.concat(s))):s:r};o.exp({getMetadataKeys:function t(e){return f(s(e),arguments.length<2?void 0:c(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.get,s=n.key;n.exp({getOwnMetadata:function t(e,r){return o(e,i(r),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.keys,s=n.key;n.exp({getOwnMetadataKeys:function t(e){return o(i(e),arguments.length<2?void 0:s(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.key,u=function(t,e,r){if(s(t,e,r))return!0;var n=o(e);return null!==n&&u(t,n,r)};n.exp({hasMetadata:function t(e,r){return u(e,i(r),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.has,s=n.key;n.exp({hasOwnMetadata:function t(e,r){return o(e,i(r),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(11),s=n.key,a=n.set;n.exp({metadata:function t(e,r){return function t(n,u){a(e,r,(void 0!==u?i:o)(n),s(u))}}})},function(t,e,r){var n=r(0),i=r(96)(),o=r(2).process,s="process"==r(21)(o);n(n.G,{asap:function t(e){var r=s&&o.domain;i(r?r.bind(e):e)}})},function(t,e,r){"use strict";var n=r(0),i=r(2),o=r(19),s=r(96)(),a=r(6)("observable"),u=r(11),c=r(1),f=r(41),h=r(43),l=r(12),p=r(42),d=p.RETURN,g=function(t){return null==t?void 0:u(t)},v=function(t){var e=t._c;e&&(t._c=void 0,e())},y=function(t){return void 0===t._o},m=function(t){y(t)||(t._o=void 0,v(t))},_=function(t,e){c(t),this._c=void 0,this._o=t,t=new S(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:u(r),this._c=r)}catch(e){return void t.error(e)}y(this)&&v(this)};_.prototype=h({},{unsubscribe:function t(){m(this)}});var S=function(t){this._s=t};S.prototype=h({},{next:function t(e){var r=this._s;if(!y(r)){var n=r._o;try{var i=g(n.next);if(i)return i.call(n,e)}catch(t){try{m(r)}finally{throw t}}}},error:function t(e){var r=this._s;if(y(r))throw e;var n=r._o;r._o=void 0;try{var i=g(n.error);if(!i)throw e;e=i.call(n,e)}catch(t){try{v(r)}finally{throw t}}return v(r),e},complete:function t(e){var r=this._s;if(!y(r)){var n=r._o;r._o=void 0;try{var i=g(n.complete);e=i?i.call(n,e):void 0}catch(t){try{v(r)}finally{throw t}}return v(r),e}}});var b=function t(e){f(this,b,"Observable","_f")._f=u(e)};h(b.prototype,{subscribe:function t(e){return new _(e,this._f)},forEach:function t(e){var r=this;return new(o.Promise||i.Promise)(function(t,n){u(e);var i=r.subscribe({next:function(t){try{return e(t)}catch(t){n(t),i.unsubscribe()}},error:n,complete:t})})}}),h(b,{from:function t(e){var r="function"==typeof this?this:b,n=g(c(e)[a]);if(n){var i=c(n.call(e));return i.constructor===r?i:new r(function(t){return i.subscribe(t)})}return new r(function(t){var r=!1;return s(function(){if(!r){try{if(p(e,!1,function(e){if(t.next(e),r)return d})===d)return}catch(e){if(r)throw e;return void t.error(e)}t.complete()}}),function(){r=!0}})},of:function t(){for(var e=0,r=arguments.length,n=new Array(r);e2,i=!!n&&s.call(arguments,2);return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,r)}};i(i.G+i.B+i.F*a,{setTimeout:u(n.setTimeout),setInterval:u(n.setInterval)})},function(t,e,r){var n=r(0),i=r(95);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},function(t,e,r){for(var n=r(92),i=r(36),o=r(13),s=r(2),a=r(12),u=r(48),c=r(6),f=c("iterator"),h=c("toStringTag"),l=u.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=i(p),g=0;g=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return n("end");if(s.tryLoc<=this.prev){var u=i.call(s,"catchLoc"),c=i.call(s,"finallyLoc");if(u&&c){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),C(r),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;C(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:R(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),g}}}function S(t,e,r,n){var i=e&&e.prototype instanceof w?e:w,o=Object.create(i.prototype),s=new T(n||[]);return o._invoke=function a(t,e,r){var n=h;return function i(o,s){if(n===p)throw new Error("Generator is already running");if(n===d){if("throw"===o)throw s;return I()}for(r.method=o,r.arg=s;;){var a=r.delegate;if(a){var u=k(a,r);if(u){if(u===g)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===h)throw n=d,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=p;var c=b(t,e,r);if("normal"===c.type){if(n=r.done?d:l,c.arg===g)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n=d,r.method="throw",r.arg=c.arg)}}}(t,r,s),o}function b(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function w(){}function F(){}function E(){}function x(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function A(t){function r(e,n,o,s){var a=b(t[e],t,n);if("throw"!==a.type){var u=a.arg,c=u.value;return c&&"object"==typeof c&&i.call(c,"__await")?Promise.resolve(c.__await).then(function(t){r("next",t,o,s)},function(t){r("throw",t,o,s)}):Promise.resolve(c).then(function(t){u.value=t,o(u)},s)}s(a.arg)}var n;"object"==typeof e.process&&e.process.domain&&(r=e.process.domain.bind(r)),this._invoke=function o(t,e){function i(){return new Promise(function(n,i){r(t,e,n,i)})}return n=n?n.then(i,i):i()}}function k(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,k(t,e),"throw"===e.method))return g;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var i=b(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,g;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,g):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,g)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function C(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function R(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n1&&void 0!==arguments[1]?arguments[1]:o.MetadataService,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.UserInfoService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.JoseUtil,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:a.TokenClient;if(function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("ResponseValidator.ctor: No settings passed to ResponseValidator"),new Error("settings");this._settings=e,this._metadataService=new r(this._settings),this._userInfoService=new n(this._settings),this._joseUtil=u,this._tokenClient=new f(this._settings)}return t.prototype.validateSigninResponse=function t(e,r){var n=this;return i.Log.debug("ResponseValidator.validateSigninResponse"),this._processSigninParams(e,r).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: state processed"),n._validateTokens(e,t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: tokens validated"),n._processClaims(e,t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: claims processed"),t})})})},t.prototype.validateSignoutResponse=function t(e,r){return e.id!==r.state?(i.Log.error("ResponseValidator.validateSignoutResponse: State does not match"),Promise.reject(new Error("State does not match"))):(i.Log.debug("ResponseValidator.validateSignoutResponse: state validated"),r.state=e.data,r.error?(i.Log.warn("ResponseValidator.validateSignoutResponse: Response was error",r.error),Promise.reject(new u.ErrorResponse(r))):Promise.resolve(r))},t.prototype._processSigninParams=function t(e,r){if(e.id!==r.state)return i.Log.error("ResponseValidator._processSigninParams: State does not match"),Promise.reject(new Error("State does not match"));if(!e.client_id)return i.Log.error("ResponseValidator._processSigninParams: No client_id on state"),Promise.reject(new Error("No client_id on state"));if(!e.authority)return i.Log.error("ResponseValidator._processSigninParams: No authority on state"),Promise.reject(new Error("No authority on state"));if(this._settings.authority){if(this._settings.authority&&this._settings.authority!==e.authority)return i.Log.error("ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state"),Promise.reject(new Error("authority mismatch on settings vs. signin state"))}else this._settings.authority=e.authority;if(this._settings.client_id){if(this._settings.client_id&&this._settings.client_id!==e.client_id)return i.Log.error("ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state"),Promise.reject(new Error("client_id mismatch on settings vs. signin state"))}else this._settings.client_id=e.client_id;return i.Log.debug("ResponseValidator._processSigninParams: state validated"),r.state=e.data,r.error?(i.Log.warn("ResponseValidator._processSigninParams: Response was error",r.error),Promise.reject(new u.ErrorResponse(r))):e.nonce&&!r.id_token?(i.Log.error("ResponseValidator._processSigninParams: Expecting id_token in response"),Promise.reject(new Error("No id_token in response"))):!e.nonce&&r.id_token?(i.Log.error("ResponseValidator._processSigninParams: Not expecting id_token in response"),Promise.reject(new Error("Unexpected id_token in response"))):e.code_verifier&&!r.code?(i.Log.error("ResponseValidator._processSigninParams: Expecting code in response"),Promise.reject(new Error("No code in response"))):!e.code_verifier&&r.code?(i.Log.error("ResponseValidator._processSigninParams: Not expecting code in response"),Promise.reject(new Error("Unexpected code in response"))):(r.scope||(r.scope=e.scope),Promise.resolve(r))},t.prototype._processClaims=function t(e,r){var n=this;if(r.isOpenIdConnect){if(i.Log.debug("ResponseValidator._processClaims: response is OIDC, processing claims"),r.profile=this._filterProtocolClaims(r.profile),!0!==e.skipUserInfo&&this._settings.loadUserInfo&&r.access_token)return i.Log.debug("ResponseValidator._processClaims: loading user info"),this._userInfoService.getClaims(r.access_token).then(function(t){return i.Log.debug("ResponseValidator._processClaims: user info claims received from user info endpoint"),t.sub!==r.profile.sub?(i.Log.error("ResponseValidator._processClaims: sub from user info endpoint does not match sub in access_token"),Promise.reject(new Error("sub from user info endpoint does not match sub in access_token"))):(r.profile=n._mergeClaims(r.profile,t),i.Log.debug("ResponseValidator._processClaims: user info claims received, updated profile:",r.profile),r)});i.Log.debug("ResponseValidator._processClaims: not loading user info")}else i.Log.debug("ResponseValidator._processClaims: response is not OIDC, not processing claims");return Promise.resolve(r)},t.prototype._mergeClaims=function t(e,r){var i=Object.assign({},e);for(var o in r){var s=r[o];Array.isArray(s)||(s=[s]);for(var a=0;a1)return i.Log.error("ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));u=a[0]}if(!u)return i.Log.error("ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var c=e.client_id,f=n._settings.clockSkew;return i.Log.debug("ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: ",f),n._joseUtil.validateJwt(r.id_token,u,t,c,f).then(function(){return i.Log.debug("ResponseValidator._validateIdToken: JWT validation successful"),o.payload.sub?(r.profile=o.payload,r):(i.Log.error("ResponseValidator._validateIdToken: No sub present in id_token"),Promise.reject(new Error("No sub present in id_token")))})})})},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith("RS"))n="RSA";else if(r.startsWith("PS"))n="PS";else{if(!r.startsWith("ES"))return i.Log.debug("ResponseValidator._filterByAlg: alg not supported: ",r),[];n="EC"}return i.Log.debug("ResponseValidator._filterByAlg: Looking for keys that match kty: ",n),e=e.filter(function(t){return t.kty===n}),i.Log.debug("ResponseValidator._filterByAlg: Number of keys that match kty: ",n,e.length),e},t.prototype._validateAccessToken=function t(e){if(!e.profile)return i.Log.error("ResponseValidator._validateAccessToken: No profile loaded from id_token"),Promise.reject(new Error("No profile loaded from id_token"));if(!e.profile.at_hash)return i.Log.error("ResponseValidator._validateAccessToken: No at_hash in id_token"),Promise.reject(new Error("No at_hash in id_token"));if(!e.id_token)return i.Log.error("ResponseValidator._validateAccessToken: No id_token"),Promise.reject(new Error("No id_token"));var r=this._joseUtil.parseJwt(e.id_token);if(!r||!r.header)return i.Log.error("ResponseValidator._validateAccessToken: Failed to parse id_token",r),Promise.reject(new Error("Failed to parse id_token"));var n=r.header.alg;if(!n||5!==n.length)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n),Promise.reject(new Error("Unsupported alg: "+n));var o=n.substr(2,3);if(!o)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,o),Promise.reject(new Error("Unsupported alg: "+n));if(256!==(o=parseInt(o))&&384!==o&&512!==o)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,o),Promise.reject(new Error("Unsupported alg: "+n));var s="sha"+o,a=this._joseUtil.hashString(e.access_token,s);if(!a)return i.Log.error("ResponseValidator._validateAccessToken: access_token hash failed:",s),Promise.reject(new Error("Failed to validate at_hash"));var u=a.substr(0,a.length/2),c=this._joseUtil.hexToBase64Url(u);return c!==e.profile.at_hash?(i.Log.error("ResponseValidator._validateAccessToken: Failed to validate at_hash",c,e.profile.at_hash),Promise.reject(new Error("Failed to validate at_hash"))):(i.Log.debug("ResponseValidator._validateAccessToken: success"),Promise.resolve(e))},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserInfoService=void 0;var n=r(101),i=r(49),o=r(3),s=r(70);e.UserInfoService=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s.JoseUtil;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw o.Log.error("UserInfoService.ctor: No settings passed"),new Error("settings");this._settings=e,this._jsonService=new r(void 0,void 0,this._getClaimsFromJwt.bind(this)),this._metadataService=new a(this._settings),this._joseUtil=u}return t.prototype.getClaims=function t(e){var r=this;return e?this._metadataService.getUserInfoEndpoint().then(function(t){return o.Log.debug("UserInfoService.getClaims: received userinfo url",t),r._jsonService.getJson(t,e).then(function(t){return o.Log.debug("UserInfoService.getClaims: claims received",t),t})}):(o.Log.error("UserInfoService.getClaims: No token passed"),Promise.reject(new Error("A token is required")))},t.prototype._getClaimsFromJwt=function t(e){var r=this;try{var n=this._joseUtil.parseJwt(e.responseText);if(!n||!n.header||!n.payload)return o.Log.error("UserInfoService._getClaimsFromJwt: Failed to parse JWT",n),Promise.reject(new Error("Failed to parse id_token"));var i=n.header.kid,s=void 0;switch(this._settings.userInfoJwtIssuer){case"OP":s=this._metadataService.getIssuer();break;case"ANY":s=Promise.resolve(n.payload.iss);break;default:s=Promise.resolve(this._settings.userInfoJwtIssuer)}return s.then(function(t){return o.Log.debug("UserInfoService._getClaimsFromJwt: Received issuer:"+t),r._metadataService.getSigningKeys().then(function(s){if(!s)return o.Log.error("UserInfoService._getClaimsFromJwt: No signing keys from metadata"),Promise.reject(new Error("No signing keys from metadata"));o.Log.debug("UserInfoService._getClaimsFromJwt: Received signing keys");var a=void 0;if(i)a=s.filter(function(t){return t.kid===i})[0];else{if((s=r._filterByAlg(s,n.header.alg)).length>1)return o.Log.error("UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));a=s[0]}if(!a)return o.Log.error("UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var u=r._settings.client_id,c=r._settings.clockSkew;return o.Log.debug("UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: ",c),r._joseUtil.validateJwt(e.responseText,a,t,u,c,void 0,!0).then(function(){return o.Log.debug("UserInfoService._getClaimsFromJwt: JWT validation successful"),n.payload})})})}catch(t){return o.Log.error("UserInfoService._getClaimsFromJwt: Error parsing JWT response",t.message),void reject(t)}},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith("RS"))n="RSA";else if(r.startsWith("PS"))n="PS";else{if(!r.startsWith("ES"))return o.Log.debug("UserInfoService._filterByAlg: alg not supported: ",r),[];n="EC"}return o.Log.debug("UserInfoService._filterByAlg: Looking for keys that match kty: ",n),e=e.filter(function(t){return t.kty===n}),o.Log.debug("UserInfoService._filterByAlg: Number of keys that match kty: ",n,e.length),e},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AllowedSigningAlgs=e.b64tohex=e.hextob64u=e.crypto=e.X509=e.KeyUtil=e.jws=void 0;var n=r(359);e.jws=n.jws,e.KeyUtil=n.KEYUTIL,e.X509=n.X509,e.crypto=n.crypto,e.hextob64u=n.hextob64u,e.b64tohex=n.b64tohex,e.AllowedSigningAlgs=["RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"]},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n={userAgent:!1},i={}; +var Oidc=function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function e(){return t.default}:function e(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=152)}([function(t,e,r){var n=r(2),i=r(19),o=r(12),s=r(13),a=r(20),u=function(t,e,r){var c,f,h,l,p=t&u.F,d=t&u.G,g=t&u.S,v=t&u.P,y=t&u.B,m=d?n:g?n[e]||(n[e]={}):(n[e]||{}).prototype,_=d?i:i[e]||(i[e]={}),S=_.prototype||(_.prototype={});for(c in d&&(r=e),r)h=((f=!p&&m&&void 0!==m[c])?m:r)[c],l=y&&f?a(h,n):v&&"function"==typeof h?a(Function.call,h):h,m&&s(m,c,h,t&u.U),_[c]!=h&&o(_,c,l),v&&S[c]!=h&&(S[c]=h)};n.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,r){var n=r(5);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var r=0;r=4){for(var e=arguments.length,r=Array(e),n=0;n=3){for(var e=arguments.length,r=Array(e),n=0;n=2){for(var e=arguments.length,r=Array(e),n=0;n=1){for(var e=arguments.length,r=Array(e),n=0;n0?i(n(t),9007199254740991):0}},function(t,e,r){t.exports=!r(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(1),i=r(103),o=r(24),s=Object.defineProperty;e.f=r(8)?Object.defineProperty:function t(e,r,a){if(n(e),r=o(r,!0),n(a),i)try{return s(e,r,a)}catch(t){}if("get"in a||"set"in a)throw TypeError("Accessors not supported!");return"value"in a&&(e[r]=a.value),e}},function(t,e,r){var n=r(25);t.exports=function(t){return Object(n(t))}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(9),i=r(34);t.exports=r(8)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n=r(2),i=r(12),o=r(15),s=r(35)("src"),a=r(156),u=(""+a).split("toString");r(19).inspectSource=function(t){return a.call(t)},(t.exports=function(t,e,r,a){var c="function"==typeof r;c&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(c&&(o(r,s)||i(r,s,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:a?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,"toString",function t(){return"function"==typeof this&&this[s]||a.call(this)})},function(t,e,r){var n=r(0),i=r(4),o=r(25),s=/"/g,a=function(t,e,r,n){var i=String(o(t)),a="<"+e;return""!==r&&(a+=" "+r+'="'+String(n).replace(s,""")+'"'),a+">"+i+""};t.exports=function(t,e){var r={};r[t]=e(a),n(n.P+n.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",r)}},function(t,e){var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},function(t,e,r){var n=r(51),i=r(25);t.exports=function(t){return n(i(t))}},function(t,e,r){var n=r(52),i=r(34),o=r(16),s=r(24),a=r(15),u=r(103),c=Object.getOwnPropertyDescriptor;e.f=r(8)?c:function t(e,r){if(e=o(e),r=s(r,!0),u)try{return c(e,r)}catch(t){}if(a(e,r))return i(!n.f.call(e,r),e[r])}},function(t,e,r){var n=r(15),i=r(10),o=r(74)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e){var r=t.exports={version:"2.6.4"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(11);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,e){var r=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:r)(t)}},function(t,e,r){"use strict";var n=r(4);t.exports=function(t,e){return!!t&&n(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,r){var n=r(0),i=r(19),o=r(4);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],s={};s[t]=e(r),n(n.S+n.F*o(function(){r(1)}),"Object",s)}},function(t,e,r){var n=r(20),i=r(51),o=r(10),s=r(7),a=r(90);t.exports=function(t,e){var r=1==t,u=2==t,c=3==t,f=4==t,h=6==t,l=5==t||h,p=e||a;return function(e,a,d){for(var g,v,y=o(e),m=i(y),_=n(a,d,3),S=s(m.length),b=0,w=r?p(e,S):u?p(e,0):void 0;S>b;b++)if((l||b in m)&&(v=_(g=m[b],b,y),t))if(r)w[b]=v;else if(v)switch(t){case 3:return!0;case 5:return g;case 6:return b;case 2:w.push(g)}else if(f)return!1;return h?-1:c||f?f:w}}},function(t,e,r){"use strict";if(r(8)){var n=r(30),i=r(2),o=r(4),s=r(0),a=r(66),u=r(98),c=r(20),f=r(41),h=r(34),l=r(12),p=r(43),d=r(22),g=r(7),v=r(131),y=r(37),m=r(24),_=r(15),S=r(46),b=r(5),w=r(10),F=r(87),E=r(38),x=r(18),A=r(39).f,k=r(89),P=r(35),C=r(6),T=r(27),R=r(56),I=r(54),O=r(92),D=r(48),N=r(61),L=r(40),M=r(91),j=r(120),U=r(9),B=r(17),H=U.f,V=B.f,K=i.RangeError,q=i.TypeError,W=i.Uint8Array,J=Array.prototype,z=u.ArrayBuffer,Y=u.DataView,G=T(0),X=T(2),$=T(3),Q=T(4),Z=T(5),tt=T(6),et=R(!0),rt=R(!1),nt=O.values,it=O.keys,ot=O.entries,st=J.lastIndexOf,at=J.reduce,ut=J.reduceRight,ct=J.join,ft=J.sort,ht=J.slice,lt=J.toString,pt=J.toLocaleString,dt=C("iterator"),gt=C("toStringTag"),vt=P("typed_constructor"),yt=P("def_constructor"),mt=a.CONSTR,_t=a.TYPED,St=a.VIEW,bt=T(1,function(t,e){return At(I(t,t[yt]),e)}),wt=o(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),Ft=!!W&&!!W.prototype.set&&o(function(){new W(1).set({})}),Et=function(t,e){var r=d(t);if(r<0||r%e)throw K("Wrong offset!");return r},xt=function(t){if(b(t)&&_t in t)return t;throw q(t+" is not a typed array!")},At=function(t,e){if(!(b(t)&&vt in t))throw q("It is not a typed array constructor!");return new t(e)},kt=function(t,e){return Pt(I(t,t[yt]),e)},Pt=function(t,e){for(var r=0,n=e.length,i=At(t,n);n>r;)i[r]=e[r++];return i},Ct=function(t,e,r){H(t,e,{get:function(){return this._d[r]}})},Tt=function t(e){var r,n,i,o,s,a,u=w(e),f=arguments.length,h=f>1?arguments[1]:void 0,l=void 0!==h,p=k(u);if(void 0!=p&&!F(p)){for(a=p.call(u),i=[],r=0;!(s=a.next()).done;r++)i.push(s.value);u=i}for(l&&f>2&&(h=c(h,arguments[2],2)),r=0,n=g(u.length),o=At(this,n);n>r;r++)o[r]=l?h(u[r],r):u[r];return o},Rt=function t(){for(var e=0,r=arguments.length,n=At(this,r);r>e;)n[e]=arguments[e++];return n},It=!!W&&o(function(){pt.call(new W(1))}),Ot=function t(){return pt.apply(It?ht.call(xt(this)):xt(this),arguments)},Dt={copyWithin:function t(e,r){return j.call(xt(this),e,r,arguments.length>2?arguments[2]:void 0)},every:function t(e){return Q(xt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function t(e){return M.apply(xt(this),arguments)},filter:function t(e){return kt(this,X(xt(this),e,arguments.length>1?arguments[1]:void 0))},find:function t(e){return Z(xt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function t(e){return tt(xt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function t(e){G(xt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function t(e){return rt(xt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function t(e){return et(xt(this),e,arguments.length>1?arguments[1]:void 0)},join:function t(e){return ct.apply(xt(this),arguments)},lastIndexOf:function t(e){return st.apply(xt(this),arguments)},map:function t(e){return bt(xt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function t(e){return at.apply(xt(this),arguments)},reduceRight:function t(e){return ut.apply(xt(this),arguments)},reverse:function t(){for(var e,r=xt(this).length,n=Math.floor(r/2),i=0;i1?arguments[1]:void 0)},sort:function t(e){return ft.call(xt(this),e)},subarray:function t(e,r){var n=xt(this),i=n.length,o=y(e,i);return new(I(n,n[yt]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,g((void 0===r?i:y(r,i))-o))}},Nt=function t(e,r){return kt(this,ht.call(xt(this),e,r))},Lt=function t(e){xt(this);var r=Et(arguments[1],1),n=this.length,i=w(e),o=g(i.length),s=0;if(o+r>n)throw K("Wrong length!");for(;s255?255:255&n),i.v[p](r*e+i.o,n,wt)}(this,r,t)},enumerable:!0})};_?(d=r(function(t,r,n,i){f(t,d,c,"_d");var o,s,a,u,h=0,p=0;if(b(r)){if(!(r instanceof z||"ArrayBuffer"==(u=S(r))||"SharedArrayBuffer"==u))return _t in r?Pt(d,r):Tt.call(d,r);o=r,p=Et(n,e);var y=r.byteLength;if(void 0===i){if(y%e)throw K("Wrong length!");if((s=y-p)<0)throw K("Wrong length!")}else if((s=g(i)*e)+p>y)throw K("Wrong length!");a=s/e}else a=v(r),o=new z(s=a*e);for(l(t,"_d",{b:o,o:p,l:s,e:a,v:new Y(o)});hdocument.F=Object<\/script>"),t.close(),u=t.F;n--;)delete u.prototype[o[n]];return u()};t.exports=Object.create||function t(e,r){var o;return null!==e?(a.prototype=n(e),o=new a,a.prototype=null,o[s]=e):o=u(),void 0===r?o:i(o,r)}},function(t,e,r){var n=r(105),i=r(75).concat("length","prototype");e.f=Object.getOwnPropertyNames||function t(e){return n(e,i)}},function(t,e,r){"use strict";var n=r(2),i=r(9),o=r(8),s=r(6)("species");t.exports=function(t){var e=n[t];o&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e){t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,e,r){var n=r(20),i=r(118),o=r(87),s=r(1),a=r(7),u=r(89),c={},f={};(e=t.exports=function(t,e,r,h,l){var p,d,g,v,y=l?function(){return t}:u(t),m=n(r,h,e?2:1),_=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(o(y)){for(p=a(t.length);p>_;_++)if((v=e?m(s(d=t[_])[0],d[1]):m(t[_]))===c||v===f)return v}else for(g=y.call(t);!(d=g.next()).done;)if((v=i(g,m,d.value,e))===c||v===f)return v}).BREAK=c,e.RETURN=f},function(t,e,r){var n=r(13);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},function(t,e,r){var n=r(9).f,i=r(15),o=r(6)("toStringTag");t.exports=function(t,e,r){t&&!i(t=r?t:t.prototype,o)&&n(t,o,{configurable:!0,value:e})}},function(t,e,r){var n=r(21),i=r(6)("toStringTag"),o="Arguments"==n(function(){return arguments}());t.exports=function(t){var e,r,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),i))?r:o?n(e):"Object"==(s=n(e))&&"function"==typeof e.callee?"Arguments":s}},function(t,e,r){var n=r(0),i=r(25),o=r(4),s=r(78),a="["+s+"]",u=RegExp("^"+a+a+"*"),c=RegExp(a+a+"*$"),f=function(t,e,r){var i={},a=o(function(){return!!s[t]()||"​…"!="​…"[t]()}),u=i[t]=a?e(h):s[t];r&&(i[r]=u),n(n.P+n.F*a,"String",i)},h=f.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};t.exports=f},function(t,e){t.exports={}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MetadataService=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.JsonService;if(function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=e,this._jsonService=new r(["application/jwk-set+json"])}return t.prototype.getMetadata=function t(){var e=this;return this._settings.metadata?(i.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(i.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then(function(t){return i.Log.debug("MetadataService.getMetadata: json received"),e._settings.metadata=t,t})):(i.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},t.prototype.getIssuer=function t(){return this._getMetadataProperty("issuer")},t.prototype.getAuthorizationEndpoint=function t(){return this._getMetadataProperty("authorization_endpoint")},t.prototype.getUserInfoEndpoint=function t(){return this._getMetadataProperty("userinfo_endpoint")},t.prototype.getTokenEndpoint=function t(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",e)},t.prototype.getCheckSessionIframe=function t(){return this._getMetadataProperty("check_session_iframe",!0)},t.prototype.getEndSessionEndpoint=function t(){return this._getMetadataProperty("end_session_endpoint",!0)},t.prototype.getRevocationEndpoint=function t(){return this._getMetadataProperty("revocation_endpoint",!0)},t.prototype.getKeysEndpoint=function t(){return this._getMetadataProperty("jwks_uri",!0)},t.prototype._getMetadataProperty=function t(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i.Log.debug("MetadataService.getMetadataProperty for: "+e),this.getMetadata().then(function(t){if(i.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===t[e]){if(!0===r)return void i.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+e);throw i.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+e),new Error("Metadata does not contain property "+e)}return t[e]})},t.prototype.getSigningKeys=function t(){var e=this;return this._settings.signingKeys?(i.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then(function(t){return i.Log.debug("MetadataService.getSigningKeys: jwks_uri received",t),e._jsonService.getJson(t).then(function(t){if(i.Log.debug("MetadataService.getSigningKeys: key set received",t),!t.keys)throw i.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return e._settings.signingKeys=t.keys,e._settings.signingKeys})})},n(t,[{key:"metadataUrl",get:function t(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),t}()},function(t,e,r){var n=r(19),i=r(2),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(30)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e,r){var n=r(21);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,r){"use strict";var n=r(1);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,r){var n=r(1),i=r(11),o=r(6)("species");t.exports=function(t,e){var r,s=n(t).constructor;return void 0===s||void 0==(r=n(s)[o])?e:i(r)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UrlUtility=void 0;var n=r(3),i=r(33);e.UrlUtility=function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.addQueryParam=function t(e,r,n){return e.indexOf("?")<0&&(e+="?"),"?"!==e[e.length-1]&&(e+="&"),e+=encodeURIComponent(r),e+="=",e+=encodeURIComponent(n)},t.parseUrlFragment=function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.Global;"string"!=typeof e&&(e=o.location.href);var s=e.lastIndexOf(r);s>=0&&(e=e.substr(s+1)),"?"===r&&(s=e.indexOf("#"))>=0&&(e=e.substr(0,s));for(var a,u={},c=/([^&=]+)=([^&]*)/g,f=0;a=c.exec(e);)if(u[decodeURIComponent(a[1])]=decodeURIComponent(a[2]),f++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",e),{error:"Response exceeded expected number of parameters"};for(var h in u)return u;return{}},t}()},function(t,e,r){var n=r(16),i=r(7),o=r(37);t.exports=function(t){return function(e,r,s){var a,u=n(e),c=i(u.length),f=o(s,c);if(t&&r!=r){for(;c>f;)if((a=u[f++])!=a)return!0}else for(;c>f;f++)if((t||f in u)&&u[f]===r)return t||f||0;return!t&&-1}}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,r){var n=r(21);t.exports=Array.isArray||function t(e){return"Array"==n(e)}},function(t,e,r){var n=r(22),i=r(25);t.exports=function(t){return function(e,r){var o,s,a=String(i(e)),u=n(r),c=a.length;return u<0||u>=c?t?"":void 0:(o=a.charCodeAt(u))<55296||o>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):o:t?a.slice(u,u+2):s-56320+(o-55296<<10)+65536}}},function(t,e,r){var n=r(5),i=r(21),o=r(6)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},function(t,e,r){var n=r(6)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],s=o[n]();s.next=function(){return{done:r=!0}},o[n]=function(){return s},t(o)}catch(t){}return r}},function(t,e,r){"use strict";var n=r(46),i=RegExp.prototype.exec;t.exports=function(t,e){var r=t.exec;if("function"==typeof r){var o=r.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,r){"use strict";r(122);var n=r(13),i=r(12),o=r(4),s=r(25),a=r(6),u=r(93),c=a("species"),f=!o(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),h=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,e,r){var l=a(t),p=!o(function(){var e={};return e[l]=function(){return 7},7!=""[t](e)}),d=p?!o(function(){var e=!1,r=/a/;return r.exec=function(){return e=!0,null},"split"===t&&(r.constructor={},r.constructor[c]=function(){return r}),r[l](""),!e}):void 0;if(!p||!d||"replace"===t&&!f||"split"===t&&!h){var g=/./[l],v=r(s,l,""[t],function t(e,r,n,i,o){return r.exec===u?p&&!o?{done:!0,value:g.call(r,n,i)}:{done:!0,value:e.call(n,r,i)}:{done:!1}}),y=v[0],m=v[1];n(String.prototype,t,y),i(RegExp.prototype,l,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},function(t,e,r){var n=r(2).navigator;t.exports=n&&n.userAgent||""},function(t,e,r){"use strict";var n=r(2),i=r(0),o=r(13),s=r(43),a=r(31),u=r(42),c=r(41),f=r(5),h=r(4),l=r(61),p=r(45),d=r(79);t.exports=function(t,e,r,g,v,y){var m=n[t],_=m,S=v?"set":"add",b=_&&_.prototype,w={},F=function(t){var e=b[t];o(b,t,"delete"==t?function(t){return!(y&&!f(t))&&e.call(this,0===t?0:t)}:"has"==t?function t(r){return!(y&&!f(r))&&e.call(this,0===r?0:r)}:"get"==t?function t(r){return y&&!f(r)?void 0:e.call(this,0===r?0:r)}:"add"==t?function t(r){return e.call(this,0===r?0:r),this}:function t(r,n){return e.call(this,0===r?0:r,n),this})};if("function"==typeof _&&(y||b.forEach&&!h(function(){(new _).entries().next()}))){var E=new _,x=E[S](y?{}:-0,1)!=E,A=h(function(){E.has(1)}),k=l(function(t){new _(t)}),P=!y&&h(function(){for(var t=new _,e=5;e--;)t[S](e,e);return!t.has(-0)});k||((_=e(function(e,r){c(e,_,t);var n=d(new m,e,_);return void 0!=r&&u(r,v,n[S],n),n})).prototype=b,b.constructor=_),(A||P)&&(F("delete"),F("has"),v&&F("get")),(P||x)&&F(S),y&&b.clear&&delete b.clear}else _=g.getConstructor(e,t,v,S),s(_.prototype,r),a.NEED=!0;return p(_,t),w[t]=_,i(i.G+i.W+i.F*(_!=m),w),y||g.setStrong(_,t,v),_}},function(t,e,r){for(var n,i=r(2),o=r(12),s=r(35),a=s("typed_array"),u=s("view"),c=!(!i.ArrayBuffer||!i.DataView),f=c,h=0,l="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");h<9;)(n=i[l[h++]])?(o(n.prototype,a,!0),o(n.prototype,u,!0)):f=!1;t.exports={ABV:c,CONSTR:f,TYPED:a,VIEW:u}},function(t,e,r){"use strict";t.exports=r(30)||!r(4)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(2)[t]})},function(t,e,r){"use strict";var n=r(0);t.exports=function(t){n(n.S,t,{of:function t(){for(var e=arguments.length,r=new Array(e);e--;)r[e]=arguments[e];return new this(r)}})}},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(20),s=r(42);t.exports=function(t){n(n.S,t,{from:function t(e){var r,n,a,u,c=arguments[1];return i(this),(r=void 0!==c)&&i(c),void 0==e?new this:(n=[],r?(a=0,u=o(c,arguments[2],2),s(e,!1,function(t){n.push(u(t,a++))})):s(e,!1,n.push,n),new this(n))}})}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.JoseUtil=void 0;var n=r(358),i=function o(t){return t&&t.__esModule?t:{default:t}}(r(364));e.JoseUtil=(0,i.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){var n=r(5),i=r(2).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(2),i=r(19),o=r(30),s=r(104),a=r(9).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e,r){var n=r(50)("keys"),i=r(35);t.exports=function(t){return n[t]||(n[t]=i(t))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,r){var n=r(2).document;t.exports=n&&n.documentElement},function(t,e,r){var n=r(5),i=r(1),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=r(20)(Function.call,r(17).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function t(r,i){return o(r,i),e?r.__proto__=i:n(r,i),r}}({},!1):void 0),check:o}},function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,e,r){var n=r(5),i=r(77).set;t.exports=function(t,e,r){var o,s=e.constructor;return s!==r&&"function"==typeof s&&(o=s.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},function(t,e,r){"use strict";var n=r(22),i=r(25);t.exports=function t(e){var r=String(i(this)),o="",s=n(e);if(s<0||s==1/0)throw RangeError("Count can't be negative");for(;s>0;(s>>>=1)&&(r+=r))1&s&&(o+=r);return o}},function(t,e){t.exports=Math.sign||function t(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(t,e){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function t(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:r},function(t,e,r){"use strict";var n=r(30),i=r(0),o=r(13),s=r(12),a=r(48),u=r(84),c=r(45),f=r(18),h=r(6)("iterator"),l=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,r,d,g,v,y){u(r,e,d);var m,_,S,b=function(t){if(!l&&t in x)return x[t];switch(t){case"keys":return function e(){return new r(this,t)};case"values":return function e(){return new r(this,t)}}return function e(){return new r(this,t)}},w=e+" Iterator",F="values"==g,E=!1,x=t.prototype,A=x[h]||x["@@iterator"]||g&&x[g],k=A||b(g),P=g?F?b("entries"):k:void 0,C="Array"==e&&x.entries||A;if(C&&(S=f(C.call(new t)))!==Object.prototype&&S.next&&(c(S,w,!0),n||"function"==typeof S[h]||s(S,h,p)),F&&A&&"values"!==A.name&&(E=!0,k=function t(){return A.call(this)}),n&&!y||!l&&!E&&x[h]||s(x,h,k),a[e]=k,a[w]=p,g)if(m={values:F?k:b("values"),keys:v?k:b("keys"),entries:P},y)for(_ in m)_ in x||o(x,_,m[_]);else i(i.P+i.F*(l||E),e,m);return m}},function(t,e,r){"use strict";var n=r(38),i=r(34),o=r(45),s={};r(12)(s,r(6)("iterator"),function(){return this}),t.exports=function(t,e,r){t.prototype=n(s,{next:i(1,r)}),o(t,e+" Iterator")}},function(t,e,r){var n=r(60),i=r(25);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},function(t,e,r){var n=r(6)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},function(t,e,r){var n=r(48),i=r(6)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},function(t,e,r){"use strict";var n=r(9),i=r(34);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},function(t,e,r){var n=r(46),i=r(6)("iterator"),o=r(48);t.exports=r(19).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[n(t)]}},function(t,e,r){var n=r(245);t.exports=function(t,e){return new(n(t))(e)}},function(t,e,r){"use strict";var n=r(10),i=r(37),o=r(7);t.exports=function t(e){for(var r=n(this),s=o(r.length),a=arguments.length,u=i(a>1?arguments[1]:void 0,s),c=a>2?arguments[2]:void 0,f=void 0===c?s:i(c,s);f>u;)r[u++]=e;return r}},function(t,e,r){"use strict";var n=r(32),i=r(121),o=r(48),s=r(16);t.exports=r(83)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?r:"values"==e?t[r]:[r,t[r]])},"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},function(t,e,r){"use strict";var n,i,o=r(53),s=RegExp.prototype.exec,a=String.prototype.replace,u=s,c=(n=/a/,i=/b*/g,s.call(n,"a"),s.call(i,"a"),0!==n.lastIndex||0!==i.lastIndex),f=void 0!==/()??/.exec("")[1];(c||f)&&(u=function t(e){var r,n,i,u,h=this;return f&&(n=new RegExp("^"+h.source+"$(?!\\s)",o.call(h))),c&&(r=h.lastIndex),i=s.call(h,e),c&&i&&(h.lastIndex=h.global?i.index+i[0].length:r),f&&i&&i.length>1&&a.call(i[0],n,function(){for(u=1;ui;)r.push(arguments[i++]);return y[++v]=function(){a("function"==typeof e?e:Function(e),r)},n(v),v},p=function t(e){delete y[e]},"process"==r(21)(h)?n=function(t){h.nextTick(s(m,t,1))}:g&&g.now?n=function(t){g.now(s(m,t,1))}:d?(o=(i=new d).port2,i.port1.onmessage=_,n=s(o.postMessage,o,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(n=function(t){f.postMessage(t+"","*")},f.addEventListener("message",_,!1)):n="onreadystatechange"in c("script")?function(t){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),m.call(t)}}:function(t){setTimeout(s(m,t,1),0)}),t.exports={set:l,clear:p}},function(t,e,r){var n=r(2),i=r(95).set,o=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,u="process"==r(21)(s);t.exports=function(){var t,e,r,c=function(){var n,i;for(u&&(n=s.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(u)r=function(){s.nextTick(c)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var f=a.resolve(void 0);r=function(){f.then(c)}}else r=function(){i.call(n,c)};else{var h=!0,l=document.createTextNode("");new o(c).observe(l,{characterData:!0}),r=function(){l.data=h=!h}}return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},function(t,e,r){"use strict";var n=r(11);t.exports.f=function(t){return new function e(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n}),this.resolve=n(e),this.reject=n(r)}(t)}},function(t,e,r){"use strict";var n=r(2),i=r(8),o=r(30),s=r(66),a=r(12),u=r(43),c=r(4),f=r(41),h=r(22),l=r(7),p=r(131),d=r(39).f,g=r(9).f,v=r(91),y=r(45),m="prototype",_="Wrong index!",S=n.ArrayBuffer,b=n.DataView,w=n.Math,F=n.RangeError,E=n.Infinity,x=S,A=w.abs,k=w.pow,P=w.floor,C=w.log,T=w.LN2,R=i?"_b":"buffer",I=i?"_l":"byteLength",O=i?"_o":"byteOffset";function D(t,e,r){var n,i,o,s=new Array(r),a=8*r-e-1,u=(1<>1,f=23===e?k(2,-24)-k(2,-77):0,h=0,l=t<0||0===t&&1/t<0?1:0;for((t=A(t))!=t||t===E?(i=t!=t?1:0,n=u):(n=P(C(t)/T),t*(o=k(2,-n))<1&&(n--,o*=2),(t+=n+c>=1?f/o:f*k(2,1-c))*o>=2&&(n++,o/=2),n+c>=u?(i=0,n=u):n+c>=1?(i=(t*o-1)*k(2,e),n+=c):(i=t*k(2,c-1)*k(2,e),n=0));e>=8;s[h++]=255&i,i/=256,e-=8);for(n=n<0;s[h++]=255&n,n/=256,a-=8);return s[--h]|=128*l,s}function N(t,e,r){var n,i=8*r-e-1,o=(1<>1,a=i-7,u=r-1,c=t[u--],f=127&c;for(c>>=7;a>0;f=256*f+t[u],u--,a-=8);for(n=f&(1<<-a)-1,f>>=-a,a+=e;a>0;n=256*n+t[u],u--,a-=8);if(0===f)f=1-s;else{if(f===o)return n?NaN:c?-E:E;n+=k(2,e),f-=s}return(c?-1:1)*n*k(2,f-e)}function L(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function M(t){return[255&t]}function j(t){return[255&t,t>>8&255]}function U(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function B(t){return D(t,52,8)}function H(t){return D(t,23,4)}function V(t,e,r){g(t[m],e,{get:function(){return this[r]}})}function K(t,e,r,n){var i=p(+r);if(i+e>t[I])throw F(_);var o=t[R]._b,s=i+t[O],a=o.slice(s,s+e);return n?a:a.reverse()}function q(t,e,r,n,i,o){var s=p(+r);if(s+e>t[I])throw F(_);for(var a=t[R]._b,u=s+t[O],c=n(+i),f=0;fY;)(W=z[Y++])in S||a(S,W,x[W]);o||(J.constructor=S)}var G=new b(new S(2)),X=b[m].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||u(b[m],{setInt8:function t(e,r){X.call(this,e,r<<24>>24)},setUint8:function t(e,r){X.call(this,e,r<<24>>24)}},!0)}else S=function t(e){f(this,S,"ArrayBuffer");var r=p(e);this._b=v.call(new Array(r),0),this[I]=r},b=function t(e,r,n){f(this,b,"DataView"),f(e,S,"DataView");var i=e[I],o=h(r);if(o<0||o>i)throw F("Wrong offset!");if(o+(n=void 0===n?i-o:l(n))>i)throw F("Wrong length!");this[R]=e,this[O]=o,this[I]=n},i&&(V(S,"byteLength","_l"),V(b,"buffer","_b"),V(b,"byteLength","_l"),V(b,"byteOffset","_o")),u(b[m],{getInt8:function t(e){return K(this,1,e)[0]<<24>>24},getUint8:function t(e){return K(this,1,e)[0]},getInt16:function t(e){var r=K(this,2,e,arguments[1]);return(r[1]<<8|r[0])<<16>>16},getUint16:function t(e){var r=K(this,2,e,arguments[1]);return r[1]<<8|r[0]},getInt32:function t(e){return L(K(this,4,e,arguments[1]))},getUint32:function t(e){return L(K(this,4,e,arguments[1]))>>>0},getFloat32:function t(e){return N(K(this,4,e,arguments[1]),23,4)},getFloat64:function t(e){return N(K(this,8,e,arguments[1]),52,8)},setInt8:function t(e,r){q(this,1,e,M,r)},setUint8:function t(e,r){q(this,1,e,M,r)},setInt16:function t(e,r){q(this,2,e,j,r,arguments[2])},setUint16:function t(e,r){q(this,2,e,j,r,arguments[2])},setInt32:function t(e,r){q(this,4,e,U,r,arguments[2])},setUint32:function t(e,r){q(this,4,e,U,r,arguments[2])},setFloat32:function t(e,r){q(this,4,e,H,r,arguments[2])},setFloat64:function t(e,r){q(this,8,e,B,r,arguments[2])}});y(S,"ArrayBuffer"),y(b,"DataView"),a(b[m],s.VIEW,!0),e.ArrayBuffer=S,e.DataView=b},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.authority,i=e.metadataUrl,o=e.metadata,p=e.signingKeys,d=e.client_id,g=e.client_secret,v=e.response_type,y=void 0===v?c:v,m=e.scope,_=void 0===m?f:m,S=e.redirect_uri,b=e.post_logout_redirect_uri,w=e.prompt,F=e.display,E=e.max_age,x=e.ui_locales,A=e.acr_values,k=e.resource,P=e.response_mode,C=e.filterProtocolClaims,T=void 0===C||C,R=e.loadUserInfo,I=void 0===R||R,O=e.staleStateAge,D=void 0===O?h:O,N=e.clockSkew,L=void 0===N?l:N,M=e.userInfoJwtIssuer,j=void 0===M?"OP":M,U=e.stateStore,B=void 0===U?new s.WebStorageStateStore:U,H=e.ResponseValidatorCtor,V=void 0===H?a.ResponseValidator:H,K=e.MetadataServiceCtor,q=void 0===K?u.MetadataService:K,W=e.extraQueryParams,J=void 0===W?{}:W,z=e.extraTokenParams,Y=void 0===z?{}:z;!function G(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._authority=r,this._metadataUrl=i,this._metadata=o,this._signingKeys=p,this._client_id=d,this._client_secret=g,this._response_type=y,this._scope=_,this._redirect_uri=S,this._post_logout_redirect_uri=b,this._prompt=w,this._display=F,this._max_age=E,this._ui_locales=x,this._acr_values=A,this._resource=k,this._response_mode=P,this._filterProtocolClaims=!!T,this._loadUserInfo=!!I,this._staleStateAge=D,this._clockSkew=L,this._userInfoJwtIssuer=j,this._stateStore=B,this._validator=new V(this),this._metadataService=new q(this),this._extraQueryParams="object"===(void 0===J?"undefined":n(J))?J:{},this._extraTokenParams="object"===(void 0===Y?"undefined":n(Y))?Y:{}}return i(t,[{key:"client_id",get:function t(){return this._client_id},set:function t(e){if(this._client_id)throw o.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=e}},{key:"client_secret",get:function t(){return this._client_secret}},{key:"response_type",get:function t(){return this._response_type}},{key:"scope",get:function t(){return this._scope}},{key:"redirect_uri",get:function t(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function t(){return this._post_logout_redirect_uri}},{key:"prompt",get:function t(){return this._prompt}},{key:"display",get:function t(){return this._display}},{key:"max_age",get:function t(){return this._max_age}},{key:"ui_locales",get:function t(){return this._ui_locales}},{key:"acr_values",get:function t(){return this._acr_values}},{key:"resource",get:function t(){return this._resource}},{key:"response_mode",get:function t(){return this._response_mode}},{key:"authority",get:function t(){return this._authority},set:function t(e){if(this._authority)throw o.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=e}},{key:"metadataUrl",get:function t(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function t(){return this._metadata},set:function t(e){this._metadata=e}},{key:"signingKeys",get:function t(){return this._signingKeys},set:function t(e){this._signingKeys=e}},{key:"filterProtocolClaims",get:function t(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function t(){return this._loadUserInfo}},{key:"staleStateAge",get:function t(){return this._staleStateAge}},{key:"clockSkew",get:function t(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function t(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function t(){return this._stateStore}},{key:"validator",get:function t(){return this._validator}},{key:"metadataService",get:function t(){return this._metadataService}},{key:"extraQueryParams",get:function t(){return this._extraQueryParams},set:function t(e){"object"===(void 0===e?"undefined":n(e))?this._extraQueryParams=e:this._extraQueryParams={}}},{key:"extraTokenParams",get:function t(){return this._extraTokenParams},set:function t(e){"object"===(void 0===e?"undefined":n(e))?this._extraTokenParams=e:this._extraTokenParams={}}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WebStorageStateStore=void 0;var n=r(3),i=r(33);e.WebStorageStateStore=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.prefix,n=void 0===r?"oidc.":r,o=e.store,s=void 0===o?i.Global.localStorage:o;!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._store=s,this._prefix=n}return t.prototype.set=function t(e,r){return n.Log.debug("WebStorageStateStore.set",e),e=this._prefix+e,this._store.setItem(e,r),Promise.resolve()},t.prototype.get=function t(e){n.Log.debug("WebStorageStateStore.get",e),e=this._prefix+e;var r=this._store.getItem(e);return Promise.resolve(r)},t.prototype.remove=function t(e){n.Log.debug("WebStorageStateStore.remove",e),e=this._prefix+e;var r=this._store.getItem(e);return this._store.removeItem(e),Promise.resolve(r)},t.prototype.getAllKeys=function t(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var e=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e&&Array.isArray(e)?this._contentTypes=e.slice():this._contentTypes=[],this._contentTypes.push("application/json"),n&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=r,this._jwtHandler=n}return t.prototype.getJson=function t(e,r){var i=this;if(!e)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",e),new Promise(function(t,o){var s=new i._XMLHttpRequest;s.open("GET",e);var a=i._contentTypes,u=i._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var r=s.getResponseHeader("Content-Type");if(r){var i=a.find(function(t){if(r.startsWith(t))return!0});if("application/jwt"==i)return void u(s).then(t,o);if(i)try{return void t(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.getJson: Error parsing JSON response",t.message),void o(t)}}o(Error("Invalid response Content-Type: "+r+", from URL: "+e))}else o(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),o(Error("Network Error"))},r&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+r)),s.send()})},t.prototype.postForm=function t(e,r){var i=this;if(!e)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",e),new Promise(function(t,o){var s=new i._XMLHttpRequest;s.open("POST",e);var a=i._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status)if(i=s.getResponseHeader("Content-Type"))if(a.find(function(t){if(i.startsWith(t))return!0}))try{var r=JSON.parse(s.responseText);if(r&&r.error)return n.Log.error("JsonService.postForm: Error from server: ",r.error),void o(new Error(r.error))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error(s.statusText+" ("+s.status+")"))}else{var i;if((i=s.getResponseHeader("Content-Type"))&&a.find(function(t){if(i.startsWith(t))return!0}))try{return void t(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error("Invalid response Content-Type: "+i+", from URL: "+e))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),o(Error("Network Error"))};var u="";for(var c in r){var f=r[c];f&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(f))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)})},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.State=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.id,n=e.data,i=e.created,s=e.request_type;!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._id=r||(0,o.default)(),this._data=n,this._created="number"==typeof i&&i>0?i:parseInt(Date.now()/1e3),this._request_type=s}return t.prototype.toStorageString=function t(){return i.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},t.fromStorageString=function e(r){return i.Log.debug("State.fromStorageString"),new t(JSON.parse(r))},t.clearStaleState=function e(r,n){var o=Date.now()/1e3-n;return r.getAllKeys().then(function(e){i.Log.debug("State.clearStaleState: got keys",e);for(var n=[],s=function s(a){var c=e[a];u=r.get(c).then(function(e){var n=!1;if(e)try{var s=t.fromStorageString(e);i.Log.debug("State.clearStaleState: got item from key: ",c,s.created),s.created<=o&&(n=!0)}catch(t){i.Log.error("State.clearStaleState: Error parsing state for key",c,t.message),n=!0}else i.Log.debug("State.clearStaleState: no item in storage for key: ",c),n=!0;if(n)return i.Log.debug("State.clearStaleState: removed item for key: ",c),r.remove(c)}),n.push(u)},a=0;au;)n(a,r=e[u++])&&(~o(c,r)||c.push(r));return c}},function(t,e,r){var n=r(9),i=r(1),o=r(36);t.exports=r(8)?Object.defineProperties:function t(e,r){i(e);for(var s,a=o(r),u=a.length,c=0;u>c;)n.f(e,s=a[c++],r[s]);return e}},function(t,e,r){var n=r(16),i=r(39).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function t(e){return s&&"[object Window]"==o.call(e)?function(t){try{return i(t)}catch(t){return s.slice()}}(e):i(n(e))}},function(t,e,r){"use strict";var n=r(36),i=r(57),o=r(52),s=r(10),a=r(51),u=Object.assign;t.exports=!u||r(4)(function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach(function(t){e[t]=t}),7!=u({},t)[r]||Object.keys(u({},e)).join("")!=n})?function t(e,r){for(var u=s(e),c=arguments.length,f=1,h=i.f,l=o.f;c>f;)for(var p,d=a(arguments[f++]),g=h?n(d).concat(h(d)):n(d),v=g.length,y=0;v>y;)l.call(d,p=g[y++])&&(u[p]=d[p]);return u}:u},function(t,e){t.exports=Object.is||function t(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}},function(t,e,r){"use strict";var n=r(11),i=r(5),o=r(111),s=[].slice,a={};t.exports=Function.bind||function t(e){var r=n(this),u=s.call(arguments,1),c=function(){var t=u.concat(s.call(arguments));return this instanceof c?function(t,e,r){if(!(e in a)){for(var n=[],i=0;i>>0||(s.test(o)?16:10))}:n},function(t,e,r){var n=r(2).parseFloat,i=r(47).trim;t.exports=1/n(r(78)+"-0")!=-1/0?function t(e){var r=i(String(e),3),o=n(r);return 0===o&&"-"==r.charAt(0)?-0:o}:n},function(t,e,r){var n=r(21);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},function(t,e,r){var n=r(5),i=Math.floor;t.exports=function t(e){return!n(e)&&isFinite(e)&&i(e)===e}},function(t,e){t.exports=Math.log1p||function t(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},function(t,e,r){var n=r(81),i=Math.pow,o=i(2,-52),s=i(2,-23),a=i(2,127)*(2-s),u=i(2,-126);t.exports=Math.fround||function t(e){var r,i,c=Math.abs(e),f=n(e);return ca||i!=i?f*(1/0):f*i}},function(t,e,r){var n=r(1);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},function(t,e,r){var n=r(11),i=r(10),o=r(51),s=r(7);t.exports=function(t,e,r,a,u){n(e);var c=i(t),f=o(c),h=s(c.length),l=u?h-1:0,p=u?-1:1;if(r<2)for(;;){if(l in f){a=f[l],l+=p;break}if(l+=p,u?l<0:h<=l)throw TypeError("Reduce of empty array with no initial value")}for(;u?l>=0:h>l;l+=p)l in f&&(a=e(a,f[l],l,c));return a}},function(t,e,r){"use strict";var n=r(10),i=r(37),o=r(7);t.exports=[].copyWithin||function t(e,r){var s=n(this),a=o(s.length),u=i(e,a),c=i(r,a),f=arguments.length>2?arguments[2]:void 0,h=Math.min((void 0===f?a:i(f,a))-c,a-u),l=1;for(c0;)c in s?s[u]=s[c]:delete s[u],u+=l,c+=l;return s}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,r){"use strict";var n=r(93);r(0)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},function(t,e,r){r(8)&&"g"!=/./g.flags&&r(9).f(RegExp.prototype,"flags",{configurable:!0,get:r(53)})},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,r){var n=r(1),i=r(5),o=r(97);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var r=o.f(t);return(0,r.resolve)(e),r.promise}},function(t,e,r){"use strict";var n=r(127),i=r(44);t.exports=r(65)("Map",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function t(e){var r=n.getEntry(i(this,"Map"),e);return r&&r.v},set:function t(e,r){return n.def(i(this,"Map"),0===e?0:e,r)}},n,!0)},function(t,e,r){"use strict";var n=r(9).f,i=r(38),o=r(43),s=r(20),a=r(41),u=r(42),c=r(83),f=r(121),h=r(40),l=r(8),p=r(31).fastKey,d=r(44),g=l?"_s":"size",v=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,c){var f=t(function(t,n){a(t,f,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[g]=0,void 0!=n&&u(n,r,t[c],t)});return o(f.prototype,{clear:function t(){for(var r=d(this,e),n=r._i,i=r._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];r._f=r._l=void 0,r[g]=0},delete:function(t){var r=d(this,e),n=v(r,t);if(n){var i=n.n,o=n.p;delete r._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),r._f==n&&(r._f=i),r._l==n&&(r._l=o),r[g]--}return!!n},forEach:function t(r){d(this,e);for(var n,i=s(r,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function t(r){return!!v(d(this,e),r)}}),l&&n(f.prototype,"size",{get:function(){return d(this,e)[g]}}),f},def:function(t,e,r){var n,i,o=v(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[g]++,"F"!==i&&(t._i[i]=o)),t},getEntry:v,setStrong:function(t,e,r){c(t,e,function(t,r){this._t=d(t,e),this._k=r,this._l=void 0},function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?f(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,f(1))},r?"entries":"values",!r,!0),h(e)}}},function(t,e,r){"use strict";var n=r(127),i=r(44);t.exports=r(65)("Set",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function t(e){return n.def(i(this,"Set"),e=0===e?0:e,e)}},n)},function(t,e,r){"use strict";var n,i=r(2),o=r(27)(0),s=r(13),a=r(31),u=r(108),c=r(130),f=r(5),h=r(44),l=r(44),p=!i.ActiveXObject&&"ActiveXObject"in i,d=a.getWeak,g=Object.isExtensible,v=c.ufstore,y=function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},m={get:function t(e){if(f(e)){var r=d(e);return!0===r?v(h(this,"WeakMap")).get(e):r?r[this._i]:void 0}},set:function t(e,r){return c.def(h(this,"WeakMap"),e,r)}},_=t.exports=r(65)("WeakMap",y,m,c,!0,!0);l&&p&&(u((n=c.getConstructor(y,"WeakMap")).prototype,m),a.NEED=!0,o(["delete","has","get","set"],function(t){var e=_.prototype,r=e[t];s(e,t,function(e,i){if(f(e)&&!g(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)})}))},function(t,e,r){"use strict";var n=r(43),i=r(31).getWeak,o=r(1),s=r(5),a=r(41),u=r(42),c=r(27),f=r(15),h=r(44),l=c(5),p=c(6),d=0,g=function(t){return t._l||(t._l=new v)},v=function(){this.a=[]},y=function(t,e){return l(t.a,function(t){return t[0]===e})};v.prototype={get:function(t){var e=y(this,t);if(e)return e[1]},has:function(t){return!!y(this,t)},set:function(t,e){var r=y(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var c=t(function(t,n){a(t,c,e,"_i"),t._t=e,t._i=d++,t._l=void 0,void 0!=n&&u(n,r,t[o],t)});return n(c.prototype,{delete:function(t){if(!s(t))return!1;var r=i(t);return!0===r?g(h(this,e)).delete(t):r&&f(r,this._i)&&delete r[this._i]},has:function t(r){if(!s(r))return!1;var n=i(r);return!0===n?g(h(this,e)).has(r):n&&f(n,this._i)}}),c},def:function(t,e,r){var n=i(o(e),!0);return!0===n?g(t).set(e,r):n[t._i]=r,t},ufstore:g}},function(t,e,r){var n=r(22),i=r(7);t.exports=function(t){if(void 0===t)return 0;var e=n(t),r=i(e);if(e!==r)throw RangeError("Wrong length!");return r}},function(t,e,r){var n=r(39),i=r(57),o=r(1),s=r(2).Reflect;t.exports=s&&s.ownKeys||function t(e){var r=n.f(o(e)),s=i.f;return s?r.concat(s(e)):r}},function(t,e,r){"use strict";var n=r(58),i=r(5),o=r(7),s=r(20),a=r(6)("isConcatSpreadable");t.exports=function t(e,r,u,c,f,h,l,p){for(var d,g,v=f,y=0,m=!!l&&s(l,p,3);y0)v=t(e,r,d,o(d.length),v,h-1)-1;else{if(v>=9007199254740991)throw TypeError();e[v]=d}v++}y++}return v}},function(t,e,r){var n=r(7),i=r(80),o=r(25);t.exports=function(t,e,r,s){var a=String(o(t)),u=a.length,c=void 0===r?" ":String(r),f=n(e);if(f<=u||""==c)return a;var h=f-u,l=i.call(c,Math.ceil(h/c.length));return l.length>h&&(l=l.slice(0,h)),s?l+a:a+l}},function(t,e,r){var n=r(36),i=r(16),o=r(52).f;t.exports=function(t){return function(e){for(var r,s=i(e),a=n(s),u=a.length,c=0,f=[];u>c;)o.call(s,r=a[c++])&&f.push(t?[r,s[r]]:s[r]);return f}}},function(t,e,r){var n=r(46),i=r(137);t.exports=function(t){return function e(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},function(t,e,r){var n=r(42);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},function(t,e){t.exports=Math.scale||function t(e,r,n,i,o){return 0===arguments.length||e!=e||r!=r||n!=n||i!=i||o!=o?NaN:e===1/0||e===-1/0?e:(e-r)*(o-i)/(n-r)+i}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClient=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e instanceof o.OidcClientSettings?this._settings=e:this._settings=new o.OidcClientSettings(e)}return t.prototype.createSigninRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.response_type,o=r.scope,s=r.redirect_uri,u=r.data,c=r.state,f=r.prompt,h=r.display,l=r.max_age,p=r.ui_locales,d=r.id_token_hint,g=r.login_hint,v=r.acr_values,y=r.resource,m=r.request,_=r.request_uri,S=r.response_mode,b=r.extraQueryParams,w=r.extraTokenParams,F=r.request_type,E=r.skipUserInfo,x=arguments[1];i.Log.debug("OidcClient.createSigninRequest");var A=this._settings.client_id;n=n||this._settings.response_type,o=o||this._settings.scope,s=s||this._settings.redirect_uri,f=f||this._settings.prompt,h=h||this._settings.display,l=l||this._settings.max_age,p=p||this._settings.ui_locales,v=v||this._settings.acr_values,y=y||this._settings.resource,S=S||this._settings.response_mode,b=b||this._settings.extraQueryParams,w=w||this._settings.extraTokenParams;var k=this._settings.authority;return a.SigninRequest.isCode(n)&&"code"!==n?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then(function(t){i.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",t);var r=new a.SigninRequest({url:t,client_id:A,redirect_uri:s,response_type:n,scope:o,data:u||c,authority:k,prompt:f,display:h,max_age:l,ui_locales:p,id_token_hint:d,login_hint:g,acr_values:v,resource:y,request:m,request_uri:_,extraQueryParams:b,extraTokenParams:w,request_type:F,response_mode:S,client_secret:e._settings.client_secret,skipUserInfo:E}),P=r.state;return(x=x||e._stateStore).set(P.id,P.toStorageString()).then(function(){return r})})},t.prototype.readSigninResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSigninResponseState");var o="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",s=new u.SigninResponse(e,o);return s.state?(r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(s.state).then(function(t){if(!t)throw i.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:h.SigninState.fromStorageString(t),response:s}})):(i.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},t.prototype.processSigninResponse=function t(e,r){var n=this;return i.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(e,r,!0).then(function(t){var e=t.state,r=t.response;return i.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),n._validator.validateSigninResponse(e,r)})},t.prototype.createSignoutRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.id_token_hint,o=r.data,s=r.state,a=r.post_logout_redirect_uri,u=r.extraQueryParams,f=r.request_type,h=arguments[1];return i.Log.debug("OidcClient.createSignoutRequest"),a=a||this._settings.post_logout_redirect_uri,u=u||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then(function(t){if(!t)throw i.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");i.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",t);var r=new c.SignoutRequest({url:t,id_token_hint:n,post_logout_redirect_uri:a,data:o||s,extraQueryParams:u,request_type:f}),l=r.state;return l&&(i.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(h=h||e._stateStore).set(l.id,l.toStorageString())),r})},t.prototype.readSignoutResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSignoutResponseState");var o=new f.SignoutResponse(e);if(!o.state)return i.Log.debug("OidcClient.readSignoutResponseState: No state in response"),o.error?(i.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",o.error),Promise.reject(new s.ErrorResponse(o))):Promise.resolve({undefined:void 0,response:o});var a=o.state;return r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(a).then(function(t){if(!t)throw i.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:l.State.fromStorageString(t),response:o}})},t.prototype.processSignoutResponse=function t(e,r){var n=this;return i.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(e,r,!0).then(function(t){var e=t.state,r=t.response;return e?(i.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),n._validator.validateSignoutResponse(e,r)):(i.Log.debug("OidcClient.processSignoutResponse: No state from storage; skipping validating response"),r)})},t.prototype.clearStaleState=function t(e){return i.Log.debug("OidcClient.clearStaleState"),e=e||this._stateStore,l.State.clearStaleState(e,this.settings.staleStateAge)},n(t,[{key:"_stateStore",get:function t(){return this.settings.stateStore}},{key:"_validator",get:function t(){return this.settings.validator}},{key:"_metadataService",get:function t(){return this.settings.metadataService}},{key:"settings",get:function t(){return this._settings}},{key:"metadataService",get:function t(){return this._metadataService}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenClient=void 0;var n=r(101),i=r(49),o=r(3);e.TokenClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw o.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=e,this._jsonService=new r,this._metadataService=new s(this._settings)}return t.prototype.exchangeCode=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"authorization_code",r.client_id=r.client_id||this._settings.client_id,r.redirect_uri=r.redirect_uri||this._settings.redirect_uri,r.code?r.redirect_uri?r.code_verifier?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(t){return o.Log.debug("TokenClient.exchangeCode: Received token endpoint"),e._jsonService.postForm(t,r).then(function(t){return o.Log.debug("TokenClient.exchangeCode: response received"),t})}):(o.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(o.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(o.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},t.prototype.exchangeRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"refresh_token",r.client_id=r.client_id||this._settings.client_id,r.client_secret=r.client_secret||this._settings.client_secret,r.refresh_token?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),e._jsonService.postForm(t,r).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: response received"),t})}):(o.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ErrorResponse=void 0;var n=r(3);e.ErrorResponse=function(t){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=r.error,o=r.error_description,s=r.error_uri,a=r.state,u=r.session_state;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),!i)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var f=function h(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,o||i));return f.name="ErrorResponse",f.error=i,f.error_description=o,f.error_uri=s,f.state=a,f.session_state=u,f}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e}(Error)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninRequest=void 0;var n=r(3),i=r(55),o=r(143);e.SigninRequest=function(){function t(e){var r=e.url,s=e.client_id,a=e.redirect_uri,u=e.response_type,c=e.scope,f=e.authority,h=e.data,l=e.prompt,p=e.display,d=e.max_age,g=e.ui_locales,v=e.id_token_hint,y=e.login_hint,m=e.acr_values,_=e.resource,S=e.response_mode,b=e.request,w=e.request_uri,F=e.extraQueryParams,E=e.request_type,x=e.client_secret,A=e.extraTokenParams,k=e.skipUserInfo;if(function P(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!s)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!a)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!u)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!c)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!f)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var C=t.isOidc(u),T=t.isCode(u);S||(S=t.isCode(u)?"query":null),this.state=new o.SigninState({nonce:C,data:h,client_id:s,authority:f,redirect_uri:a,code_verifier:T,request_type:E,response_mode:S,client_secret:x,scope:c,extraTokenParams:A,skipUserInfo:k}),r=i.UrlUtility.addQueryParam(r,"client_id",s),r=i.UrlUtility.addQueryParam(r,"redirect_uri",a),r=i.UrlUtility.addQueryParam(r,"response_type",u),r=i.UrlUtility.addQueryParam(r,"scope",c),r=i.UrlUtility.addQueryParam(r,"state",this.state.id),C&&(r=i.UrlUtility.addQueryParam(r,"nonce",this.state.nonce)),T&&(r=i.UrlUtility.addQueryParam(r,"code_challenge",this.state.code_challenge),r=i.UrlUtility.addQueryParam(r,"code_challenge_method","S256"));var R={prompt:l,display:p,max_age:d,ui_locales:g,id_token_hint:v,login_hint:y,acr_values:m,resource:_,request:b,request_uri:w,response_mode:S};for(var I in R)R[I]&&(r=i.UrlUtility.addQueryParam(r,I,R[I]));for(var O in F)r=i.UrlUtility.addQueryParam(r,O,F[O]);this.url=r}return t.isOidc=function t(e){return!!e.split(/\s+/g).filter(function(t){return"id_token"===t})[0]},t.isOAuth=function t(e){return!!e.split(/\s+/g).filter(function(t){return"token"===t})[0]},t.isCode=function t(e){return!!e.split(/\s+/g).filter(function(t){return"code"===t})[0]},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninState=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.nonce,i=r.authority,o=r.client_id,u=r.redirect_uri,c=r.code_verifier,f=r.response_mode,h=r.client_secret,l=r.scope,p=r.extraTokenParams,d=r.skipUserInfo;!function g(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var v=function y(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));if(!0===n?v._nonce=(0,a.default)():n&&(v._nonce=n),!0===c?v._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():c&&(v._code_verifier=c),v.code_verifier){var m=s.JoseUtil.hashString(v.code_verifier,"SHA256");v._code_challenge=s.JoseUtil.hexToBase64Url(m)}return v._redirect_uri=u,v._authority=i,v._client_id=o,v._response_mode=f,v._client_secret=h,v._scope=l,v._extraTokenParams=p,v._skipUserInfo=d,v}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.toStorageString=function t(){return i.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode,client_secret:this.client_secret,scope:this.scope,extraTokenParams:this.extraTokenParams,skipUserInfo:this.skipUserInfo})},e.fromStorageString=function t(r){return i.Log.debug("SigninState.fromStorageString"),new e(JSON.parse(r))},n(e,[{key:"nonce",get:function t(){return this._nonce}},{key:"authority",get:function t(){return this._authority}},{key:"client_id",get:function t(){return this._client_id}},{key:"redirect_uri",get:function t(){return this._redirect_uri}},{key:"code_verifier",get:function t(){return this._code_verifier}},{key:"code_challenge",get:function t(){return this._code_challenge}},{key:"response_mode",get:function t(){return this._response_mode}},{key:"client_secret",get:function t(){return this._client_secret}},{key:"scope",get:function t(){return this._scope}},{key:"extraTokenParams",get:function t(){return this._extraTokenParams}},{key:"skipUserInfo",get:function t(){return this._skipUserInfo}}]),e}(o.State)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(){return(0,i.default)().replace(/-/g,"")};var i=function o(t){return t&&t.__esModule?t:{default:t}}(r(365));t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.User=void 0;var n=function(){function t(t,e){for(var r=0;r0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessTokenEvents=void 0;var n=r(3),i=r(380);var o=60;e.AccessTokenEvents=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.accessTokenExpiringNotificationTime,n=void 0===r?o:r,s=e.accessTokenExpiringTimer,a=void 0===s?new i.Timer("Access token expiring"):s,u=e.accessTokenExpiredTimer,c=void 0===u?new i.Timer("Access token expired"):u;!function f(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._accessTokenExpiringNotificationTime=n,this._accessTokenExpiring=a,this._accessTokenExpired=c}return t.prototype.load=function t(e){if(e.access_token&&void 0!==e.expires_in){var r=e.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",r),r>0){var i=r-this._accessTokenExpiringNotificationTime;i<=0&&(i=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",i),this._accessTokenExpiring.init(i)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var o=r+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",o),this._accessTokenExpired.init(o)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.unload=function t(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.addAccessTokenExpiring=function t(e){this._accessTokenExpiring.addHandler(e)},t.prototype.removeAccessTokenExpiring=function t(e){this._accessTokenExpiring.removeHandler(e)},t.prototype.addAccessTokenExpired=function t(e){this._accessTokenExpired.addHandler(e)},t.prototype.removeAccessTokenExpired=function t(e){this._accessTokenExpired.removeHandler(e)},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Event=void 0;var n=r(3);e.Event=function(){function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._name=e,this._callbacks=[]}return t.prototype.addHandler=function t(e){this._callbacks.push(e)},t.prototype.removeHandler=function t(e){var r=this._callbacks.findIndex(function(t){return t===e});r>=0&&this._callbacks.splice(r,1)},t.prototype.raise=function t(){n.Log.debug("Event: Raising event: "+this._name);for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:o.CheckSessionIFrame,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.Global.timer;if(function u(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=e,this._CheckSessionIFrameCtor=n,this._timer=a,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then(function(t){t?r._start(t):r._settings.monitorAnonymousSession&&r._userManager.querySessionStatus().then(function(t){var e={session_state:t.session_state};t.sub&&t.sid&&(e.profile={sub:t.sub,sid:t.sid}),r._start(e)}).catch(function(t){i.Log.error("SessionMonitor ctor: error from querySessionStatus:",t.message)})}).catch(function(t){i.Log.error("SessionMonitor ctor: error from getUser:",t.message)})}return t.prototype._start=function t(e){var r=this,n=e.session_state;n&&(e.profile?(this._sub=e.profile.sub,this._sid=e.profile.sid,i.Log.debug("SessionMonitor._start: session_state:",n,", sub:",this._sub)):(this._sub=void 0,this._sid=void 0,i.Log.debug("SessionMonitor._start: session_state:",n,", anonymous user")),this._checkSessionIFrame?this._checkSessionIFrame.start(n):this._metadataService.getCheckSessionIframe().then(function(t){if(t){i.Log.debug("SessionMonitor._start: Initializing check session iframe");var e=r._client_id,o=r._checkSessionInterval,s=r._stopCheckSessionOnError;r._checkSessionIFrame=new r._CheckSessionIFrameCtor(r._callback.bind(r),e,t,o,s),r._checkSessionIFrame.load().then(function(){r._checkSessionIFrame.start(n)})}else i.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")}).catch(function(t){i.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",t.message)}))},t.prototype._stop=function t(){var e=this;if(this._sub=void 0,this._sid=void 0,this._checkSessionIFrame&&(i.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop()),this._settings.monitorAnonymousSession)var r=this._timer.setInterval(function(){e._timer.clearInterval(r),e._userManager.querySessionStatus().then(function(t){var r={session_state:t.session_state};t.sub&&t.sid&&(r.profile={sub:t.sub,sid:t.sid}),e._start(r)}).catch(function(t){i.Log.error("SessionMonitor: error from querySessionStatus:",t.message)})},1e3)},t.prototype._callback=function t(){var e=this;this._userManager.querySessionStatus().then(function(t){var r=!0;t?t.sub===e._sub?(r=!1,e._checkSessionIFrame.start(t.session_state),t.sid===e._sid?i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",t.session_state):(i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",t.session_state),e._userManager.events._raiseUserSessionChanged())):i.Log.debug("SessionMonitor._callback: Different subject signed into OP:",t.sub):i.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(e._sub?(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),e._userManager.events._raiseUserSignedOut()):(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed in event"),e._userManager.events._raiseUserSignedIn()))}).catch(function(t){e._sub&&(i.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",t.message),e._userManager.events._raiseUserSignedOut())})},n(t,[{key:"_settings",get:function t(){return this._userManager.settings}},{key:"_metadataService",get:function t(){return this._userManager.metadataService}},{key:"_client_id",get:function t(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function t(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function t(){return this._settings.stopCheckSessionOnError}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CheckSessionIFrame=void 0;var n=r(3);var i=2e3;e.CheckSessionIFrame=function(){function t(e,r,n,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._callback=e,this._client_id=r,this._url=n,this._interval=o||i,this._stopOnError=s;var u=n.indexOf("/",n.indexOf("//")+2);this._frame_origin=n.substr(0,u),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=n}return t.prototype.load=function t(){var e=this;return new Promise(function(t){e._frame.onload=function(){t()},window.document.body.appendChild(e._frame),e._boundMessageEvent=e._message.bind(e),window.addEventListener("message",e._boundMessageEvent,!1)})},t.prototype._message=function t(e){e.origin===this._frame_origin&&e.source===this._frame.contentWindow&&("error"===e.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===e.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+e.data+" message from check session op iframe"))},t.prototype.start=function t(e){var r=this;if(this._session_state!==e){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=e;var i=function t(){r._frame.contentWindow.postMessage(r._client_id+" "+r._session_state,r._frame_origin)};i(),this._timer=window.setInterval(i,this._interval)}},t.prototype.stop=function t(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenRevocationClient=void 0;var n=r(3),i=r(49),o=r(33);e.TokenRevocationClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=e,this._XMLHttpRequestCtor=r,this._metadataService=new s(this._settings)}return t.prototype.revoke=function t(e,r){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!e)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==o&&"refresh_token"!=o)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then(function(t){if(t){n.Log.debug("TokenRevocationClient.revoke: Revoking "+o);var s=i._settings.client_id,a=i._settings.client_secret;return i._revoke(t,s,a,e,o)}if(r)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")})},t.prototype._revoke=function t(e,r,i,o,s){var a=this;return new Promise(function(t,u){var c=new a._XMLHttpRequestCtor;c.open("POST",e),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?t():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var f="client_id="+encodeURIComponent(r);i&&(f+="&client_secret="+encodeURIComponent(i)),f+="&token_type_hint="+encodeURIComponent(s),f+="&token="+encodeURIComponent(o),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(f)})},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CordovaPopupWindow=void 0;var n=function(){function t(t,e){for(var r=0;ro;)z(e,n=i[o++],r[n]);return e},G=function t(e){var r=L.call(this,e=b(e,!0));return!(this===B&&i(j,e)&&!i(U,e))&&(!(r||!i(this,e)||!i(j,e)||i(this,D)&&this[D][e])||r)},X=function t(e,r){if(e=S(e),r=b(r,!0),e!==B||!i(j,r)||i(U,r)){var n=P(e,r);return!n||!i(j,r)||i(e,D)&&e[D][r]||(n.enumerable=!0),n}},$=function t(e){for(var r,n=T(S(e)),o=[],s=0;n.length>s;)i(j,r=n[s++])||r==D||r==u||o.push(r);return o},Q=function t(e){for(var r,n=e===B,o=T(n?U:S(e)),s=[],a=0;o.length>a;)!i(j,r=o[a++])||n&&!i(B,r)||s.push(j[r]);return s};H||(a((R=function t(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var e=l(arguments.length>0?arguments[0]:void 0),r=function(t){this===B&&r.call(U,t),i(this,D)&&i(this[D],e)&&(this[D][e]=!1),q(this,e,w(1,t))};return o&&K&&q(B,e,{configurable:!0,set:r}),W(e)}).prototype,"toString",function t(){return this._k}),x.f=X,A.f=z,r(39).f=E.f=$,r(52).f=G,r(57).f=Q,o&&!r(30)&&a(B,"propertyIsEnumerable",G,!0),d.f=function(t){return W(p(t))}),s(s.G+s.W+s.F*!H,{Symbol:R});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Z.length>tt;)p(Z[tt++]);for(var et=k(p.store),rt=0;et.length>rt;)g(et[rt++]);s(s.S+s.F*!H,"Symbol",{for:function(t){return i(M,t+="")?M[t]:M[t]=R(t)},keyFor:function t(e){if(!J(e))throw TypeError(e+" is not a symbol!");for(var r in M)if(M[r]===e)return r},useSetter:function(){K=!0},useSimple:function(){K=!1}}),s(s.S+s.F*!H,"Object",{create:function t(e,r){return void 0===r?F(e):Y(F(e),r)},defineProperty:z,defineProperties:Y,getOwnPropertyDescriptor:X,getOwnPropertyNames:$,getOwnPropertySymbols:Q}),I&&s(s.S+s.F*(!H||c(function(){var t=R();return"[null]"!=O([t])||"{}"!=O({a:t})||"{}"!=O(Object(t))})),"JSON",{stringify:function t(e){for(var r,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=r=i[1],(_(r)||void 0!==e)&&!J(e))return y(r)||(r=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!J(e))return e}),i[1]=r,O.apply(I,i)}}),R.prototype[N]||r(12)(R.prototype,N,R.prototype.valueOf),h(R,"Symbol"),h(Math,"Math",!0),h(n.JSON,"JSON",!0)},function(t,e,r){t.exports=r(50)("native-function-to-string",Function.toString)},function(t,e,r){var n=r(36),i=r(57),o=r(52);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var s,a=r(t),u=o.f,c=0;a.length>c;)u.call(t,s=a[c++])&&e.push(s);return e}},function(t,e,r){var n=r(0);n(n.S,"Object",{create:r(38)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperty:r(9).f})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperties:r(106)})},function(t,e,r){var n=r(16),i=r(17).f;r(26)("getOwnPropertyDescriptor",function(){return function t(e,r){return i(n(e),r)}})},function(t,e,r){var n=r(10),i=r(18);r(26)("getPrototypeOf",function(){return function t(e){return i(n(e))}})},function(t,e,r){var n=r(10),i=r(36);r(26)("keys",function(){return function t(e){return i(n(e))}})},function(t,e,r){r(26)("getOwnPropertyNames",function(){return r(107).f})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("freeze",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("seal",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("preventExtensions",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5);r(26)("isFrozen",function(t){return function e(r){return!n(r)||!!t&&t(r)}})},function(t,e,r){var n=r(5);r(26)("isSealed",function(t){return function e(r){return!n(r)||!!t&&t(r)}})},function(t,e,r){var n=r(5);r(26)("isExtensible",function(t){return function e(r){return!!n(r)&&(!t||t(r))}})},function(t,e,r){var n=r(0);n(n.S+n.F,"Object",{assign:r(108)})},function(t,e,r){var n=r(0);n(n.S,"Object",{is:r(109)})},function(t,e,r){var n=r(0);n(n.S,"Object",{setPrototypeOf:r(77).set})},function(t,e,r){"use strict";var n=r(46),i={};i[r(6)("toStringTag")]="z",i+""!="[object z]"&&r(13)(Object.prototype,"toString",function t(){return"[object "+n(this)+"]"},!0)},function(t,e,r){var n=r(0);n(n.P,"Function",{bind:r(110)})},function(t,e,r){var n=r(9).f,i=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in i||r(8)&&n(i,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},function(t,e,r){"use strict";var n=r(5),i=r(18),o=r(6)("hasInstance"),s=Function.prototype;o in s||r(9).f(s,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,r){var n=r(0),i=r(112);n(n.G+n.F*(parseInt!=i),{parseInt:i})},function(t,e,r){var n=r(0),i=r(113);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},function(t,e,r){"use strict";var n=r(2),i=r(15),o=r(21),s=r(79),a=r(24),u=r(4),c=r(39).f,f=r(17).f,h=r(9).f,l=r(47).trim,p=n.Number,d=p,g=p.prototype,v="Number"==o(r(38)(g)),y="trim"in String.prototype,m=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){var r,n,i,o=(e=y?e.trim():l(e,3)).charCodeAt(0);if(43===o||45===o){if(88===(r=e.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var s,u=e.slice(2),c=0,f=u.length;ci)return NaN;return parseInt(u,n)}}return+e};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function t(e){var r=arguments.length<1?0:e,n=this;return n instanceof p&&(v?u(function(){g.valueOf.call(n)}):"Number"!=o(n))?s(new d(m(r)),n,p):m(r)};for(var _,S=r(8)?c(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),b=0;S.length>b;b++)i(d,_=S[b])&&!i(p,_)&&h(p,_,f(d,_));p.prototype=g,g.constructor=p,r(13)(n,"Number",p)}},function(t,e,r){"use strict";var n=r(0),i=r(22),o=r(114),s=r(80),a=1..toFixed,u=Math.floor,c=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",h=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*c[r],c[r]=n%1e7,n=u(n/1e7)},l=function(t){for(var e=6,r=0;--e>=0;)r+=c[e],c[e]=u(r/t),r=r%t*1e7},p=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==c[t]){var r=String(c[t]);e=""===e?r:e+s.call("0",7-r.length)+r}return e},d=function(t,e,r){return 0===e?r:e%2==1?d(t,e-1,r*t):d(t*t,e/2,r)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(4)(function(){a.call({})})),"Number",{toFixed:function t(e){var r,n,a,u,c=o(this,f),g=i(e),v="",y="0";if(g<0||g>20)throw RangeError(f);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(v="-",c=-c),c>1e-21)if(n=(r=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}(c*d(2,69,1))-69)<0?c*d(2,-r,1):c/d(2,r,1),n*=4503599627370496,(r=52-r)>0){for(h(0,n),a=g;a>=7;)h(1e7,0),a-=7;for(h(d(10,a,1),0),a=r-1;a>=23;)l(1<<23),a-=23;l(1<0?v+((u=y.length)<=g?"0."+s.call("0",g-u)+y:y.slice(0,u-g)+"."+y.slice(u-g)):v+y}})},function(t,e,r){"use strict";var n=r(0),i=r(4),o=r(114),s=1..toPrecision;n(n.P+n.F*(i(function(){return"1"!==s.call(1,void 0)})||!i(function(){s.call({})})),"Number",{toPrecision:function t(e){var r=o(this,"Number#toPrecision: incorrect invocation!");return void 0===e?s.call(r):s.call(r,e)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,r){var n=r(0),i=r(2).isFinite;n(n.S,"Number",{isFinite:function t(e){return"number"==typeof e&&i(e)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{isInteger:r(115)})},function(t,e,r){var n=r(0);n(n.S,"Number",{isNaN:function t(e){return e!=e}})},function(t,e,r){var n=r(0),i=r(115),o=Math.abs;n(n.S,"Number",{isSafeInteger:function t(e){return i(e)&&o(e)<=9007199254740991}})},function(t,e,r){var n=r(0);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){var n=r(0);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,r){var n=r(0),i=r(113);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,e,r){var n=r(0),i=r(112);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,e,r){var n=r(0),i=r(116),o=Math.sqrt,s=Math.acosh;n(n.S+n.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function t(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:i(e-1+o(e-1)*o(e+1))}})},function(t,e,r){var n=r(0),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Math.log(e+Math.sqrt(e*e+1)):e}})},function(t,e,r){var n=r(0),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function t(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(t,e,r){var n=r(0),i=r(81);n(n.S,"Math",{cbrt:function t(e){return i(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clz32:function t(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(t,e,r){var n=r(0),i=Math.exp;n(n.S,"Math",{cosh:function t(e){return(i(e=+e)+i(-e))/2}})},function(t,e,r){var n=r(0),i=r(82);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,e,r){var n=r(0);n(n.S,"Math",{fround:r(117)})},function(t,e,r){var n=r(0),i=Math.abs;n(n.S,"Math",{hypot:function t(e,r){for(var n,o,s=0,a=0,u=arguments.length,c=0;a0?(o=n/c)*o:n;return c===1/0?1/0:c*Math.sqrt(s)}})},function(t,e,r){var n=r(0),i=Math.imul;n(n.S+n.F*r(4)(function(){return-5!=i(4294967295,5)||2!=i.length}),"Math",{imul:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i;return 0|o*s+((65535&n>>>16)*s+o*(65535&i>>>16)<<16>>>0)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log10:function t(e){return Math.log(e)*Math.LOG10E}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log1p:r(116)})},function(t,e,r){var n=r(0);n(n.S,"Math",{log2:function t(e){return Math.log(e)/Math.LN2}})},function(t,e,r){var n=r(0);n(n.S,"Math",{sign:r(81)})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S+n.F*r(4)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function t(e){return Math.abs(e=+e)<1?(i(e)-i(-e))/2:(o(e-1)-o(-e-1))*(Math.E/2)}})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S,"Math",{tanh:function t(e){var r=i(e=+e),n=i(-e);return r==1/0?1:n==1/0?-1:(r-n)/(o(e)+o(-e))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{trunc:function t(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(t,e,r){var n=r(0),i=r(37),o=String.fromCharCode,s=String.fromCodePoint;n(n.S+n.F*(!!s&&1!=s.length),"String",{fromCodePoint:function t(e){for(var r,n=[],s=arguments.length,a=0;s>a;){if(r=+arguments[a++],i(r,1114111)!==r)throw RangeError(r+" is not a valid code point");n.push(r<65536?o(r):o(55296+((r-=65536)>>10),r%1024+56320))}return n.join("")}})},function(t,e,r){var n=r(0),i=r(16),o=r(7);n(n.S,"String",{raw:function t(e){for(var r=i(e.raw),n=o(r.length),s=arguments.length,a=[],u=0;n>u;)a.push(String(r[u++])),u=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e,r){"use strict";var n=r(0),i=r(59)(!1);n(n.P,"String",{codePointAt:function t(e){return i(this,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".endsWith;n(n.P+n.F*r(86)("endsWith"),"String",{endsWith:function t(e){var r=o(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,a=i(r.length),u=void 0===n?a:Math.min(i(n),a),c=String(e);return s?s.call(r,c,u):r.slice(u-c.length,u)===c}})},function(t,e,r){"use strict";var n=r(0),i=r(85);n(n.P+n.F*r(86)("includes"),"String",{includes:function t(e){return!!~i(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(t,e,r){var n=r(0);n(n.P,"String",{repeat:r(80)})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".startsWith;n(n.P+n.F*r(86)("startsWith"),"String",{startsWith:function t(e){var r=o(this,e,"startsWith"),n=i(Math.min(arguments.length>1?arguments[1]:void 0,r.length)),a=String(e);return s?s.call(r,a,n):r.slice(n,n+a.length)===a}})},function(t,e,r){"use strict";r(14)("anchor",function(t){return function e(r){return t(this,"a","name",r)}})},function(t,e,r){"use strict";r(14)("big",function(t){return function e(){return t(this,"big","","")}})},function(t,e,r){"use strict";r(14)("blink",function(t){return function e(){return t(this,"blink","","")}})},function(t,e,r){"use strict";r(14)("bold",function(t){return function e(){return t(this,"b","","")}})},function(t,e,r){"use strict";r(14)("fixed",function(t){return function e(){return t(this,"tt","","")}})},function(t,e,r){"use strict";r(14)("fontcolor",function(t){return function e(r){return t(this,"font","color",r)}})},function(t,e,r){"use strict";r(14)("fontsize",function(t){return function e(r){return t(this,"font","size",r)}})},function(t,e,r){"use strict";r(14)("italics",function(t){return function e(){return t(this,"i","","")}})},function(t,e,r){"use strict";r(14)("link",function(t){return function e(r){return t(this,"a","href",r)}})},function(t,e,r){"use strict";r(14)("small",function(t){return function e(){return t(this,"small","","")}})},function(t,e,r){"use strict";r(14)("strike",function(t){return function e(){return t(this,"strike","","")}})},function(t,e,r){"use strict";r(14)("sub",function(t){return function e(){return t(this,"sub","","")}})},function(t,e,r){"use strict";r(14)("sup",function(t){return function e(){return t(this,"sup","","")}})},function(t,e,r){var n=r(0);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24);n(n.P+n.F*r(4)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function t(e){var r=i(this),n=o(r);return"number"!=typeof n||isFinite(n)?r.toISOString():null}})},function(t,e,r){var n=r(0),i=r(234);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},function(t,e,r){"use strict";var n=r(4),i=Date.prototype.getTime,o=Date.prototype.toISOString,s=function(t){return t>9?t:"0"+t};t.exports=n(function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-5e13-1))})||!n(function(){o.call(new Date(NaN))})?function t(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var e=this,r=e.getUTCFullYear(),n=e.getUTCMilliseconds(),o=r<0?"-":r>9999?"+":"";return o+("00000"+Math.abs(r)).slice(o?-6:-4)+"-"+s(e.getUTCMonth()+1)+"-"+s(e.getUTCDate())+"T"+s(e.getUTCHours())+":"+s(e.getUTCMinutes())+":"+s(e.getUTCSeconds())+"."+(n>99?n:"0"+s(n))+"Z"}:o},function(t,e,r){var n=Date.prototype,i=n.toString,o=n.getTime;new Date(NaN)+""!="Invalid Date"&&r(13)(n,"toString",function t(){var e=o.call(this);return e==e?i.call(this):"Invalid Date"})},function(t,e,r){var n=r(6)("toPrimitive"),i=Date.prototype;n in i||r(12)(i,n,r(237))},function(t,e,r){"use strict";var n=r(1),i=r(24);t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),"number"!=t)}},function(t,e,r){var n=r(0);n(n.S,"Array",{isArray:r(58)})},function(t,e,r){"use strict";var n=r(20),i=r(0),o=r(10),s=r(118),a=r(87),u=r(7),c=r(88),f=r(89);i(i.S+i.F*!r(61)(function(t){Array.from(t)}),"Array",{from:function t(e){var r,i,h,l,p=o(e),d="function"==typeof this?this:Array,g=arguments.length,v=g>1?arguments[1]:void 0,y=void 0!==v,m=0,_=f(p);if(y&&(v=n(v,g>2?arguments[2]:void 0,2)),void 0==_||d==Array&&a(_))for(i=new d(r=u(p.length));r>m;m++)c(i,m,y?v(p[m],m):p[m]);else for(l=_.call(p),i=new d;!(h=l.next()).done;m++)c(i,m,y?s(l,v,[h.value,m],!0):h.value);return i.length=m,i}})},function(t,e,r){"use strict";var n=r(0),i=r(88);n(n.S+n.F*r(4)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function t(){for(var e=0,r=arguments.length,n=new("function"==typeof this?this:Array)(r);r>e;)i(n,e,arguments[e++]);return n.length=r,n}})},function(t,e,r){"use strict";var n=r(0),i=r(16),o=[].join;n(n.P+n.F*(r(51)!=Object||!r(23)(o)),"Array",{join:function t(e){return o.call(i(this),void 0===e?",":e)}})},function(t,e,r){"use strict";var n=r(0),i=r(76),o=r(21),s=r(37),a=r(7),u=[].slice;n(n.P+n.F*r(4)(function(){i&&u.call(i)}),"Array",{slice:function t(e,r){var n=a(this.length),i=o(this);if(r=void 0===r?n:r,"Array"==i)return u.call(this,e,r);for(var c=s(e,n),f=s(r,n),h=a(f-c),l=new Array(h),p=0;p1&&(c=Math.min(c,o(arguments[1]))),c<0&&(c=n+c);c>=0;c--)if(c in r&&r[c]===e)return c||0;return-1}})},function(t,e,r){var n=r(0);n(n.P,"Array",{copyWithin:r(120)}),r(32)("copyWithin")},function(t,e,r){var n=r(0);n(n.P,"Array",{fill:r(91)}),r(32)("fill")},function(t,e,r){"use strict";var n=r(0),i=r(27)(5),o=!0;"find"in[]&&Array(1).find(function(){o=!1}),n(n.P+n.F*o,"Array",{find:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)("find")},function(t,e,r){"use strict";var n=r(0),i=r(27)(6),o="findIndex",s=!0;o in[]&&Array(1)[o](function(){s=!1}),n(n.P+n.F*s,"Array",{findIndex:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)(o)},function(t,e,r){r(40)("Array")},function(t,e,r){var n=r(2),i=r(79),o=r(9).f,s=r(39).f,a=r(60),u=r(53),c=n.RegExp,f=c,h=c.prototype,l=/a/g,p=/a/g,d=new c(l)!==l;if(r(8)&&(!d||r(4)(function(){return p[r(6)("match")]=!1,c(l)!=l||c(p)==p||"/a/i"!=c(l,"i")}))){c=function t(e,r){var n=this instanceof c,o=a(e),s=void 0===r;return!n&&o&&e.constructor===c&&s?e:i(d?new f(o&&!s?e.source:e,r):f((o=e instanceof c)?e.source:e,o&&s?u.call(e):r),n?this:h,c)};for(var g=function(t){t in c||o(c,t,{configurable:!0,get:function(){return f[t]},set:function(e){f[t]=e}})},v=s(f),y=0;v.length>y;)g(v[y++]);h.constructor=c,c.prototype=h,r(13)(n,"RegExp",c)}r(40)("RegExp")},function(t,e,r){"use strict";r(123);var n=r(1),i=r(53),o=r(8),s=/./.toString,a=function(t){r(13)(RegExp.prototype,"toString",t,!0)};r(4)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?a(function t(){var e=n(this);return"/".concat(e.source,"/","flags"in e?e.flags:!o&&e instanceof RegExp?i.call(e):void 0)}):"toString"!=s.name&&a(function t(){return s.call(this)})},function(t,e,r){"use strict";var n=r(1),i=r(7),o=r(94),s=r(62);r(63)("match",1,function(t,e,r,a){return[function r(n){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=a(r,t,this);if(e.done)return e.value;var u=n(t),c=String(this);if(!u.global)return s(u,c);var f=u.unicode;u.lastIndex=0;for(var h,l=[],p=0;null!==(h=s(u,c));){var d=String(h[0]);l[p]=d,""===d&&(u.lastIndex=o(c,i(u.lastIndex),f)),p++}return 0===p?null:l}]})},function(t,e,r){"use strict";var n=r(1),i=r(10),o=r(7),s=r(22),a=r(94),u=r(62),c=Math.max,f=Math.min,h=Math.floor,l=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;r(63)("replace",2,function(t,e,r,d){return[function n(i,o){var s=t(this),a=void 0==i?void 0:i[e];return void 0!==a?a.call(i,s,o):r.call(String(s),i,o)},function(t,e){var i=d(r,t,this,e);if(i.done)return i.value;var h=n(t),l=String(this),p="function"==typeof e;p||(e=String(e));var v=h.global;if(v){var y=h.unicode;h.lastIndex=0}for(var m=[];;){var _=u(h,l);if(null===_)break;if(m.push(_),!v)break;""===String(_[0])&&(h.lastIndex=a(l,o(h.lastIndex),y))}for(var S,b="",w=0,F=0;F=w&&(b+=l.slice(w,x)+T,w=x+E.length)}return b+l.slice(w)}];function g(t,e,n,o,s,a){var u=n+t.length,c=o.length,f=p;return void 0!==s&&(s=i(s),f=l),r.call(a,f,function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(u);case"<":a=s[i.slice(1,-1)];break;default:var f=+i;if(0===f)return r;if(f>c){var l=h(f/10);return 0===l?r:l<=c?void 0===o[l-1]?i.charAt(1):o[l-1]+i.charAt(1):r}a=o[f-1]}return void 0===a?"":a})}})},function(t,e,r){"use strict";var n=r(1),i=r(109),o=r(62);r(63)("search",1,function(t,e,r,s){return[function r(n){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=s(r,t,this);if(e.done)return e.value;var a=n(t),u=String(this),c=a.lastIndex;i(c,0)||(a.lastIndex=0);var f=o(a,u);return i(a.lastIndex,c)||(a.lastIndex=c),null===f?-1:f.index}]})},function(t,e,r){"use strict";var n=r(60),i=r(1),o=r(54),s=r(94),a=r(7),u=r(62),c=r(93),f=r(4),h=Math.min,l=[].push,p=!f(function(){RegExp(4294967295,"y")});r(63)("split",2,function(t,e,r,f){var d;return d="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!n(t))return r.call(i,t,e);for(var o,s,a,u=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,p=void 0===e?4294967295:e>>>0,d=new RegExp(t.source,f+"g");(o=c.call(d,i))&&!((s=d.lastIndex)>h&&(u.push(i.slice(h,o.index)),o.length>1&&o.index=p));)d.lastIndex===o.index&&d.lastIndex++;return h===i.length?!a&&d.test("")||u.push(""):u.push(i.slice(h)),u.length>p?u.slice(0,p):u}:"0".split(void 0,0).length?function(t,e){return void 0===t&&0===e?[]:r.call(this,t,e)}:r,[function r(n,i){var o=t(this),s=void 0==n?void 0:n[e];return void 0!==s?s.call(n,o,i):d.call(String(o),n,i)},function(t,e){var n=f(d,t,this,e,d!==r);if(n.done)return n.value;var c=i(t),l=String(this),g=o(c,RegExp),v=c.unicode,y=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(p?"y":"g"),m=new g(p?c:"^(?:"+c.source+")",y),_=void 0===e?4294967295:e>>>0;if(0===_)return[];if(0===l.length)return null===u(m,l)?[l]:[];for(var S=0,b=0,w=[];bo;)s(r[o++]);t._c=[],t._n=!1,e&&!t._h&&D(t)})}},D=function(t){y.call(u,function(){var e,r,n,i=t._v,o=N(t);if(o&&(e=S(function(){P?E.emit("unhandledRejection",i,t):(r=u.onunhandledrejection)?r({promise:t,reason:i}):(n=u.console)&&n.error&&n.error("Unhandled promise rejection",i)}),t._h=P||N(t)?2:1),t._a=void 0,o&&e.e)throw e.v})},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},L=function(t){y.call(u,function(){var e;P?E.emit("rejectionHandled",t):(e=u.onrejectionhandled)&&e({promise:t,reason:t._v})})},M=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),O(e,!0))},j=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw F("Promise can't be resolved itself");(e=I(t))?m(function(){var n={_w:r,_d:!1};try{e.call(t,c(j,n,1),c(M,n,1))}catch(t){M.call(n,t)}}):(r._v=t,r._s=1,O(r,!1))}catch(t){M.call({_w:r,_d:!1},t)}}};R||(k=function t(e){d(this,k,"Promise","_h"),p(e),n.call(this);try{e(c(j,this,1),c(M,this,1))}catch(t){M.call(this,t)}},(n=function t(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=r(43)(k.prototype,{then:function t(e,r){var n=T(v(this,k));return n.ok="function"!=typeof e||e,n.fail="function"==typeof r&&r,n.domain=P?E.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&O(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=c(j,t,1),this.reject=c(M,t,1)},_.f=T=function(t){return t===k||t===s?new o(t):i(t)}),h(h.G+h.W+h.F*!R,{Promise:k}),r(45)(k,"Promise"),r(40)("Promise"),s=r(19).Promise,h(h.S+h.F*!R,"Promise",{reject:function t(e){var r=T(this);return(0,r.reject)(e),r.promise}}),h(h.S+h.F*(a||!R),"Promise",{resolve:function t(e){return w(a&&this===s?k:this,e)}}),h(h.S+h.F*!(R&&r(61)(function(t){k.all(t).catch(C)})),"Promise",{all:function t(e){var r=this,n=T(r),i=n.resolve,o=n.reject,s=S(function(){var t=[],n=0,s=1;g(e,!1,function(e){var a=n++,u=!1;t.push(void 0),s++,r.resolve(e).then(function(e){u||(u=!0,t[a]=e,--s||i(t))},o)}),--s||i(t)});return s.e&&o(s.v),n.promise},race:function t(e){var r=this,n=T(r),i=n.reject,o=S(function(){g(e,!1,function(t){r.resolve(t).then(n.resolve,i)})});return o.e&&i(o.v),n.promise}})},function(t,e,r){"use strict";var n=r(130),i=r(44);r(65)("WeakSet",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function t(e){return n.def(i(this,"WeakSet"),e,!0)}},n,!1,!0)},function(t,e,r){"use strict";var n=r(0),i=r(66),o=r(98),s=r(1),a=r(37),u=r(7),c=r(5),f=r(2).ArrayBuffer,h=r(54),l=o.ArrayBuffer,p=o.DataView,d=i.ABV&&f.isView,g=l.prototype.slice,v=i.VIEW;n(n.G+n.W+n.F*(f!==l),{ArrayBuffer:l}),n(n.S+n.F*!i.CONSTR,"ArrayBuffer",{isView:function t(e){return d&&d(e)||c(e)&&v in e}}),n(n.P+n.U+n.F*r(4)(function(){return!new l(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function t(e,r){if(void 0!==g&&void 0===r)return g.call(s(this),e);for(var n=s(this).byteLength,i=a(e,n),o=a(void 0===r?n:r,n),c=new(h(this,l))(u(o-i)),f=new p(this),d=new p(c),v=0;i=e.length)return{value:void 0,done:!0}}while(!((t=e[this._i++])in this._t));return{value:t,done:!1}}),n(n.S,"Reflect",{enumerate:function t(e){return new o(e)}})},function(t,e,r){var n=r(17),i=r(18),o=r(15),s=r(0),a=r(5),u=r(1);s(s.S,"Reflect",{get:function t(e,r){var s,c,f=arguments.length<3?e:arguments[2];return u(e)===f?e[r]:(s=n.f(e,r))?o(s,"value")?s.value:void 0!==s.get?s.get.call(f):void 0:a(c=i(e))?t(c,r,f):void 0}})},function(t,e,r){var n=r(17),i=r(0),o=r(1);i(i.S,"Reflect",{getOwnPropertyDescriptor:function t(e,r){return n.f(o(e),r)}})},function(t,e,r){var n=r(0),i=r(18),o=r(1);n(n.S,"Reflect",{getPrototypeOf:function t(e){return i(o(e))}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{has:function t(e,r){return r in e}})},function(t,e,r){var n=r(0),i=r(1),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function t(e){return i(e),!o||o(e)}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{ownKeys:r(132)})},function(t,e,r){var n=r(0),i=r(1),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function t(e){i(e);try{return o&&o(e),!0}catch(t){return!1}}})},function(t,e,r){var n=r(9),i=r(17),o=r(18),s=r(15),a=r(0),u=r(34),c=r(1),f=r(5);a(a.S,"Reflect",{set:function t(e,r,a){var h,l,p=arguments.length<4?e:arguments[3],d=i.f(c(e),r);if(!d){if(f(l=o(e)))return t(l,r,a,p);d=u(0)}if(s(d,"value")){if(!1===d.writable||!f(p))return!1;if(h=i.f(p,r)){if(h.get||h.set||!1===h.writable)return!1;h.value=a,n.f(p,r,h)}else n.f(p,r,u(0,a));return!0}return void 0!==d.set&&(d.set.call(p,a),!0)}})},function(t,e,r){var n=r(0),i=r(77);i&&n(n.S,"Reflect",{setPrototypeOf:function t(e,r){i.check(e,r);try{return i.set(e,r),!0}catch(t){return!1}}})},function(t,e,r){"use strict";var n=r(0),i=r(56)(!0);n(n.P,"Array",{includes:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)("includes")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(11),u=r(90);n(n.P,"Array",{flatMap:function t(e){var r,n,c=o(this);return a(e),r=s(c.length),n=u(c,0),i(n,c,c,r,0,1,e,arguments[1]),n}}),r(32)("flatMap")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(22),u=r(90);n(n.P,"Array",{flatten:function t(){var e=arguments[0],r=o(this),n=s(r.length),c=u(r,0);return i(c,r,r,n,0,void 0===e?1:a(e)),c}}),r(32)("flatten")},function(t,e,r){"use strict";var n=r(0),i=r(59)(!0);n(n.P,"String",{at:function t(e){return i(this,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padStart:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padEnd:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,e,r){"use strict";r(47)("trimLeft",function(t){return function e(){return t(this,1)}},"trimStart")},function(t,e,r){"use strict";r(47)("trimRight",function(t){return function e(){return t(this,2)}},"trimEnd")},function(t,e,r){"use strict";var n=r(0),i=r(25),o=r(7),s=r(60),a=r(53),u=RegExp.prototype,c=function(t,e){this._r=t,this._s=e};r(84)(c,"RegExp String",function t(){var e=this._r.exec(this._s);return{value:e,done:null===e}}),n(n.P,"String",{matchAll:function t(e){if(i(this),!s(e))throw TypeError(e+" is not a regexp!");var r=String(this),n="flags"in u?String(e.flags):a.call(e),f=new RegExp(e.source,~n.indexOf("g")?n:"g"+n);return f.lastIndex=o(e.lastIndex),new c(f,r)}})},function(t,e,r){r(73)("asyncIterator")},function(t,e,r){r(73)("observable")},function(t,e,r){var n=r(0),i=r(132),o=r(16),s=r(17),a=r(88);n(n.S,"Object",{getOwnPropertyDescriptors:function t(e){for(var r,n,u=o(e),c=s.f,f=i(u),h={},l=0;f.length>l;)void 0!==(n=c(u,r=f[l++]))&&a(h,r,n);return h}})},function(t,e,r){var n=r(0),i=r(135)(!1);n(n.S,"Object",{values:function t(e){return i(e)}})},function(t,e,r){var n=r(0),i=r(135)(!0);n(n.S,"Object",{entries:function t(e){return i(e)}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineGetter__:function t(e,r){s.f(i(this),e,{get:o(r),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineSetter__:function t(e,r){s.f(i(this),e,{set:o(r),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupGetter__:function t(e){var r,n=i(this),u=o(e,!0);do{if(r=a(n,u))return r.get}while(n=s(n))}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupSetter__:function t(e){var r,n=i(this),u=o(e,!0);do{if(r=a(n,u))return r.set}while(n=s(n))}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Map",{toJSON:r(136)("Map")})},function(t,e,r){var n=r(0);n(n.P+n.R,"Set",{toJSON:r(136)("Set")})},function(t,e,r){r(68)("Map")},function(t,e,r){r(68)("Set")},function(t,e,r){r(68)("WeakMap")},function(t,e,r){r(68)("WeakSet")},function(t,e,r){r(69)("Map")},function(t,e,r){r(69)("Set")},function(t,e,r){r(69)("WeakMap")},function(t,e,r){r(69)("WeakSet")},function(t,e,r){var n=r(0);n(n.G,{global:r(2)})},function(t,e,r){var n=r(0);n(n.S,"System",{global:r(2)})},function(t,e,r){var n=r(0),i=r(21);n(n.S,"Error",{isError:function t(e){return"Error"===i(e)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clamp:function t(e,r,n){return Math.min(n,Math.max(r,e))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(t,e,r){var n=r(0),i=180/Math.PI;n(n.S,"Math",{degrees:function t(e){return e*i}})},function(t,e,r){var n=r(0),i=r(138),o=r(117);n(n.S,"Math",{fscale:function t(e,r,n,s,a){return o(i(e,r,n,s,a))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{iaddh:function t(e,r,n,i){var o=e>>>0,s=n>>>0;return(r>>>0)+(i>>>0)+((o&s|(o|s)&~(o+s>>>0))>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{isubh:function t(e,r,n,i){var o=e>>>0,s=n>>>0;return(r>>>0)-(i>>>0)-((~o&s|~(o^s)&o-s>>>0)>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{imulh:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i,a=n>>16,u=i>>16,c=(a*s>>>0)+(o*s>>>16);return a*u+(c>>16)+((o*u>>>0)+(65535&c)>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(t,e,r){var n=r(0),i=Math.PI/180;n(n.S,"Math",{radians:function t(e){return e*i}})},function(t,e,r){var n=r(0);n(n.S,"Math",{scale:r(138)})},function(t,e,r){var n=r(0);n(n.S,"Math",{umulh:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i,a=n>>>16,u=i>>>16,c=(a*s>>>0)+(o*s>>>16);return a*u+(c>>>16)+((o*u>>>0)+(65535&c)>>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{signbit:function t(e){return(e=+e)!=e?e:0==e?1/e==1/0:e>0}})},function(t,e,r){"use strict";var n=r(0),i=r(19),o=r(2),s=r(54),a=r(125);n(n.P+n.R,"Promise",{finally:function(t){var e=s(this,i.Promise||o.Promise),r="function"==typeof t;return this.then(r?function(r){return a(e,t()).then(function(){return r})}:t,r?function(r){return a(e,t()).then(function(){throw r})}:t)}})},function(t,e,r){"use strict";var n=r(0),i=r(97),o=r(124);n(n.S,"Promise",{try:function(t){var e=i.f(this),r=o(t);return(r.e?e.reject:e.resolve)(r.v),e.promise}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.set;n.exp({defineMetadata:function t(e,r,n,a){s(e,r,i(n),o(a))}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.map,a=n.store;n.exp({deleteMetadata:function t(e,r){var n=arguments.length<3?void 0:o(arguments[2]),u=s(i(r),n,!1);if(void 0===u||!u.delete(e))return!1;if(u.size)return!0;var c=a.get(r);return c.delete(n),!!c.size||a.delete(r)}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.get,u=n.key,c=function(t,e,r){if(s(t,e,r))return a(t,e,r);var n=o(e);return null!==n?c(t,n,r):void 0};n.exp({getMetadata:function t(e,r){return c(e,i(r),arguments.length<3?void 0:u(arguments[2]))}})},function(t,e,r){var n=r(128),i=r(137),o=r(29),s=r(1),a=r(18),u=o.keys,c=o.key,f=function(t,e){var r=u(t,e),o=a(t);if(null===o)return r;var s=f(o,e);return s.length?r.length?i(new n(r.concat(s))):s:r};o.exp({getMetadataKeys:function t(e){return f(s(e),arguments.length<2?void 0:c(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.get,s=n.key;n.exp({getOwnMetadata:function t(e,r){return o(e,i(r),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.keys,s=n.key;n.exp({getOwnMetadataKeys:function t(e){return o(i(e),arguments.length<2?void 0:s(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.key,u=function(t,e,r){if(s(t,e,r))return!0;var n=o(e);return null!==n&&u(t,n,r)};n.exp({hasMetadata:function t(e,r){return u(e,i(r),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.has,s=n.key;n.exp({hasOwnMetadata:function t(e,r){return o(e,i(r),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(11),s=n.key,a=n.set;n.exp({metadata:function t(e,r){return function t(n,u){a(e,r,(void 0!==u?i:o)(n),s(u))}}})},function(t,e,r){var n=r(0),i=r(96)(),o=r(2).process,s="process"==r(21)(o);n(n.G,{asap:function t(e){var r=s&&o.domain;i(r?r.bind(e):e)}})},function(t,e,r){"use strict";var n=r(0),i=r(2),o=r(19),s=r(96)(),a=r(6)("observable"),u=r(11),c=r(1),f=r(41),h=r(43),l=r(12),p=r(42),d=p.RETURN,g=function(t){return null==t?void 0:u(t)},v=function(t){var e=t._c;e&&(t._c=void 0,e())},y=function(t){return void 0===t._o},m=function(t){y(t)||(t._o=void 0,v(t))},_=function(t,e){c(t),this._c=void 0,this._o=t,t=new S(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:u(r),this._c=r)}catch(e){return void t.error(e)}y(this)&&v(this)};_.prototype=h({},{unsubscribe:function t(){m(this)}});var S=function(t){this._s=t};S.prototype=h({},{next:function t(e){var r=this._s;if(!y(r)){var n=r._o;try{var i=g(n.next);if(i)return i.call(n,e)}catch(t){try{m(r)}finally{throw t}}}},error:function t(e){var r=this._s;if(y(r))throw e;var n=r._o;r._o=void 0;try{var i=g(n.error);if(!i)throw e;e=i.call(n,e)}catch(t){try{v(r)}finally{throw t}}return v(r),e},complete:function t(e){var r=this._s;if(!y(r)){var n=r._o;r._o=void 0;try{var i=g(n.complete);e=i?i.call(n,e):void 0}catch(t){try{v(r)}finally{throw t}}return v(r),e}}});var b=function t(e){f(this,b,"Observable","_f")._f=u(e)};h(b.prototype,{subscribe:function t(e){return new _(e,this._f)},forEach:function t(e){var r=this;return new(o.Promise||i.Promise)(function(t,n){u(e);var i=r.subscribe({next:function(t){try{return e(t)}catch(t){n(t),i.unsubscribe()}},error:n,complete:t})})}}),h(b,{from:function t(e){var r="function"==typeof this?this:b,n=g(c(e)[a]);if(n){var i=c(n.call(e));return i.constructor===r?i:new r(function(t){return i.subscribe(t)})}return new r(function(t){var r=!1;return s(function(){if(!r){try{if(p(e,!1,function(e){if(t.next(e),r)return d})===d)return}catch(e){if(r)throw e;return void t.error(e)}t.complete()}}),function(){r=!0}})},of:function t(){for(var e=0,r=arguments.length,n=new Array(r);e2,i=!!n&&s.call(arguments,2);return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,r)}};i(i.G+i.B+i.F*a,{setTimeout:u(n.setTimeout),setInterval:u(n.setInterval)})},function(t,e,r){var n=r(0),i=r(95);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},function(t,e,r){for(var n=r(92),i=r(36),o=r(13),s=r(2),a=r(12),u=r(48),c=r(6),f=c("iterator"),h=c("toStringTag"),l=u.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=i(p),g=0;g=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return n("end");if(s.tryLoc<=this.prev){var u=i.call(s,"catchLoc"),c=i.call(s,"finallyLoc");if(u&&c){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),C(r),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;C(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:R(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),g}}}function S(t,e,r,n){var i=e&&e.prototype instanceof w?e:w,o=Object.create(i.prototype),s=new T(n||[]);return o._invoke=function a(t,e,r){var n=h;return function i(o,s){if(n===p)throw new Error("Generator is already running");if(n===d){if("throw"===o)throw s;return I()}for(r.method=o,r.arg=s;;){var a=r.delegate;if(a){var u=k(a,r);if(u){if(u===g)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===h)throw n=d,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=p;var c=b(t,e,r);if("normal"===c.type){if(n=r.done?d:l,c.arg===g)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n=d,r.method="throw",r.arg=c.arg)}}}(t,r,s),o}function b(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function w(){}function F(){}function E(){}function x(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function A(t){function r(e,n,o,s){var a=b(t[e],t,n);if("throw"!==a.type){var u=a.arg,c=u.value;return c&&"object"==typeof c&&i.call(c,"__await")?Promise.resolve(c.__await).then(function(t){r("next",t,o,s)},function(t){r("throw",t,o,s)}):Promise.resolve(c).then(function(t){u.value=t,o(u)},s)}s(a.arg)}var n;"object"==typeof e.process&&e.process.domain&&(r=e.process.domain.bind(r)),this._invoke=function o(t,e){function i(){return new Promise(function(n,i){r(t,e,n,i)})}return n=n?n.then(i,i):i()}}function k(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,k(t,e),"throw"===e.method))return g;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var i=b(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,g;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,g):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,g)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function C(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function R(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n1&&void 0!==arguments[1]?arguments[1]:o.MetadataService,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.UserInfoService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.JoseUtil,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:a.TokenClient;if(function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("ResponseValidator.ctor: No settings passed to ResponseValidator"),new Error("settings");this._settings=e,this._metadataService=new r(this._settings),this._userInfoService=new n(this._settings),this._joseUtil=u,this._tokenClient=new f(this._settings)}return t.prototype.validateSigninResponse=function t(e,r){var n=this;return i.Log.debug("ResponseValidator.validateSigninResponse"),this._processSigninParams(e,r).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: state processed"),n._validateTokens(e,t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: tokens validated"),n._processClaims(e,t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: claims processed"),t})})})},t.prototype.validateSignoutResponse=function t(e,r){return e.id!==r.state?(i.Log.error("ResponseValidator.validateSignoutResponse: State does not match"),Promise.reject(new Error("State does not match"))):(i.Log.debug("ResponseValidator.validateSignoutResponse: state validated"),r.state=e.data,r.error?(i.Log.warn("ResponseValidator.validateSignoutResponse: Response was error",r.error),Promise.reject(new u.ErrorResponse(r))):Promise.resolve(r))},t.prototype._processSigninParams=function t(e,r){if(e.id!==r.state)return i.Log.error("ResponseValidator._processSigninParams: State does not match"),Promise.reject(new Error("State does not match"));if(!e.client_id)return i.Log.error("ResponseValidator._processSigninParams: No client_id on state"),Promise.reject(new Error("No client_id on state"));if(!e.authority)return i.Log.error("ResponseValidator._processSigninParams: No authority on state"),Promise.reject(new Error("No authority on state"));if(this._settings.authority){if(this._settings.authority&&this._settings.authority!==e.authority)return i.Log.error("ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state"),Promise.reject(new Error("authority mismatch on settings vs. signin state"))}else this._settings.authority=e.authority;if(this._settings.client_id){if(this._settings.client_id&&this._settings.client_id!==e.client_id)return i.Log.error("ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state"),Promise.reject(new Error("client_id mismatch on settings vs. signin state"))}else this._settings.client_id=e.client_id;return i.Log.debug("ResponseValidator._processSigninParams: state validated"),r.state=e.data,r.error?(i.Log.warn("ResponseValidator._processSigninParams: Response was error",r.error),Promise.reject(new u.ErrorResponse(r))):e.nonce&&!r.id_token?(i.Log.error("ResponseValidator._processSigninParams: Expecting id_token in response"),Promise.reject(new Error("No id_token in response"))):!e.nonce&&r.id_token?(i.Log.error("ResponseValidator._processSigninParams: Not expecting id_token in response"),Promise.reject(new Error("Unexpected id_token in response"))):e.code_verifier&&!r.code?(i.Log.error("ResponseValidator._processSigninParams: Expecting code in response"),Promise.reject(new Error("No code in response"))):!e.code_verifier&&r.code?(i.Log.error("ResponseValidator._processSigninParams: Not expecting code in response"),Promise.reject(new Error("Unexpected code in response"))):(r.scope||(r.scope=e.scope),Promise.resolve(r))},t.prototype._processClaims=function t(e,r){var n=this;if(r.isOpenIdConnect){if(i.Log.debug("ResponseValidator._processClaims: response is OIDC, processing claims"),r.profile=this._filterProtocolClaims(r.profile),!0!==e.skipUserInfo&&this._settings.loadUserInfo&&r.access_token)return i.Log.debug("ResponseValidator._processClaims: loading user info"),this._userInfoService.getClaims(r.access_token).then(function(t){return i.Log.debug("ResponseValidator._processClaims: user info claims received from user info endpoint"),t.sub!==r.profile.sub?(i.Log.error("ResponseValidator._processClaims: sub from user info endpoint does not match sub in access_token"),Promise.reject(new Error("sub from user info endpoint does not match sub in access_token"))):(r.profile=n._mergeClaims(r.profile,t),i.Log.debug("ResponseValidator._processClaims: user info claims received, updated profile:",r.profile),r)});i.Log.debug("ResponseValidator._processClaims: not loading user info")}else i.Log.debug("ResponseValidator._processClaims: response is not OIDC, not processing claims");return Promise.resolve(r)},t.prototype._mergeClaims=function t(e,r){var i=Object.assign({},e);for(var o in r){var s=r[o];Array.isArray(s)||(s=[s]);for(var a=0;a1)return i.Log.error("ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));u=a[0]}if(!u)return i.Log.error("ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var c=e.client_id,f=n._settings.clockSkew;return i.Log.debug("ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: ",f),n._joseUtil.validateJwt(r.id_token,u,t,c,f).then(function(){return i.Log.debug("ResponseValidator._validateIdToken: JWT validation successful"),o.payload.sub?(r.profile=o.payload,r):(i.Log.error("ResponseValidator._validateIdToken: No sub present in id_token"),Promise.reject(new Error("No sub present in id_token")))})})})},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith("RS"))n="RSA";else if(r.startsWith("PS"))n="PS";else{if(!r.startsWith("ES"))return i.Log.debug("ResponseValidator._filterByAlg: alg not supported: ",r),[];n="EC"}return i.Log.debug("ResponseValidator._filterByAlg: Looking for keys that match kty: ",n),e=e.filter(function(t){return t.kty===n}),i.Log.debug("ResponseValidator._filterByAlg: Number of keys that match kty: ",n,e.length),e},t.prototype._validateAccessToken=function t(e){if(!e.profile)return i.Log.error("ResponseValidator._validateAccessToken: No profile loaded from id_token"),Promise.reject(new Error("No profile loaded from id_token"));if(!e.profile.at_hash)return i.Log.error("ResponseValidator._validateAccessToken: No at_hash in id_token"),Promise.reject(new Error("No at_hash in id_token"));if(!e.id_token)return i.Log.error("ResponseValidator._validateAccessToken: No id_token"),Promise.reject(new Error("No id_token"));var r=this._joseUtil.parseJwt(e.id_token);if(!r||!r.header)return i.Log.error("ResponseValidator._validateAccessToken: Failed to parse id_token",r),Promise.reject(new Error("Failed to parse id_token"));var n=r.header.alg;if(!n||5!==n.length)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n),Promise.reject(new Error("Unsupported alg: "+n));var o=n.substr(2,3);if(!o)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,o),Promise.reject(new Error("Unsupported alg: "+n));if(256!==(o=parseInt(o))&&384!==o&&512!==o)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,o),Promise.reject(new Error("Unsupported alg: "+n));var s="sha"+o,a=this._joseUtil.hashString(e.access_token,s);if(!a)return i.Log.error("ResponseValidator._validateAccessToken: access_token hash failed:",s),Promise.reject(new Error("Failed to validate at_hash"));var u=a.substr(0,a.length/2),c=this._joseUtil.hexToBase64Url(u);return c!==e.profile.at_hash?(i.Log.error("ResponseValidator._validateAccessToken: Failed to validate at_hash",c,e.profile.at_hash),Promise.reject(new Error("Failed to validate at_hash"))):(i.Log.debug("ResponseValidator._validateAccessToken: success"),Promise.resolve(e))},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserInfoService=void 0;var n=r(101),i=r(49),o=r(3),s=r(70);e.UserInfoService=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s.JoseUtil;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw o.Log.error("UserInfoService.ctor: No settings passed"),new Error("settings");this._settings=e,this._jsonService=new r(void 0,void 0,this._getClaimsFromJwt.bind(this)),this._metadataService=new a(this._settings),this._joseUtil=u}return t.prototype.getClaims=function t(e){var r=this;return e?this._metadataService.getUserInfoEndpoint().then(function(t){return o.Log.debug("UserInfoService.getClaims: received userinfo url",t),r._jsonService.getJson(t,e).then(function(t){return o.Log.debug("UserInfoService.getClaims: claims received",t),t})}):(o.Log.error("UserInfoService.getClaims: No token passed"),Promise.reject(new Error("A token is required")))},t.prototype._getClaimsFromJwt=function t(e){var r=this;try{var n=this._joseUtil.parseJwt(e.responseText);if(!n||!n.header||!n.payload)return o.Log.error("UserInfoService._getClaimsFromJwt: Failed to parse JWT",n),Promise.reject(new Error("Failed to parse id_token"));var i=n.header.kid,s=void 0;switch(this._settings.userInfoJwtIssuer){case"OP":s=this._metadataService.getIssuer();break;case"ANY":s=Promise.resolve(n.payload.iss);break;default:s=Promise.resolve(this._settings.userInfoJwtIssuer)}return s.then(function(t){return o.Log.debug("UserInfoService._getClaimsFromJwt: Received issuer:"+t),r._metadataService.getSigningKeys().then(function(s){if(!s)return o.Log.error("UserInfoService._getClaimsFromJwt: No signing keys from metadata"),Promise.reject(new Error("No signing keys from metadata"));o.Log.debug("UserInfoService._getClaimsFromJwt: Received signing keys");var a=void 0;if(i)a=s.filter(function(t){return t.kid===i})[0];else{if((s=r._filterByAlg(s,n.header.alg)).length>1)return o.Log.error("UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));a=s[0]}if(!a)return o.Log.error("UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var u=r._settings.client_id,c=r._settings.clockSkew;return o.Log.debug("UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: ",c),r._joseUtil.validateJwt(e.responseText,a,t,u,c,void 0,!0).then(function(){return o.Log.debug("UserInfoService._getClaimsFromJwt: JWT validation successful"),n.payload})})})}catch(t){return o.Log.error("UserInfoService._getClaimsFromJwt: Error parsing JWT response",t.message),void reject(t)}},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith("RS"))n="RSA";else if(r.startsWith("PS"))n="PS";else{if(!r.startsWith("ES"))return o.Log.debug("UserInfoService._filterByAlg: alg not supported: ",r),[];n="EC"}return o.Log.debug("UserInfoService._filterByAlg: Looking for keys that match kty: ",n),e=e.filter(function(t){return t.kty===n}),o.Log.debug("UserInfoService._filterByAlg: Number of keys that match kty: ",n,e.length),e},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AllowedSigningAlgs=e.b64tohex=e.hextob64u=e.crypto=e.X509=e.KeyUtil=e.jws=void 0;var n=r(359);e.jws=n.jws,e.KeyUtil=n.KEYUTIL,e.X509=n.X509,e.crypto=n.crypto,e.hextob64u=n.hextob64u,e.b64tohex=n.b64tohex,e.AllowedSigningAlgs=["RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"]},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n={userAgent:!1},i={}; /*! Copyright (c) 2011, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: @@ -44,4 +44,4 @@ var Fr=function(){var t=new RegExp('(?:false|true|null|[\\{\\}\\[\\]]|(?:-?\\b(? * @author Feross Aboukhadijeh * @license MIT */ -var n=r(361),i=r(362),o=r(363);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,e){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function d(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return V(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return K(t).length;default:if(n)return V(t).length;e=(""+e).toLowerCase(),n=!0}}function g(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function v(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:y(t,e,r,n,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):y(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function y(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function c(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var f=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var h=!0,l=0;li&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function E(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function x(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+h<=r)switch(h){case 1:c<128&&(f=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(f=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(f=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(f=u)}null===f?(f=65533,h=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=h}return function l(t){var e=t.length;if(e<=P)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,n);case"utf8":case"utf-8":return x(this,e,n);case"ascii":return C(this,e,n);case"latin1":case"binary":return T(this,e,n);case"base64":return E(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}.apply(this,arguments)},u.prototype.equals=function t(e){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===u.compare(this,e)},u.prototype.inspect=function t(){var r="",n=e.INSPECT_MAX_BYTES;return this.length>0&&(r=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(r+=" ... ")),""},u.prototype.compare=function t(e,r,n,i,o){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,o>>>=0,this===e)return 0;for(var s=o-i,a=n-r,c=Math.min(s,a),f=this.slice(i,o),h=e.slice(r,n),l=0;lo)&&(n=o),e.length>0&&(n<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var s=!1;;)switch(i){case"hex":return m(this,e,r,n);case"utf8":case"utf-8":return _(this,e,r,n);case"ascii":return S(this,e,r,n);case"latin1":case"binary":return b(this,e,r,n);case"base64":return w(this,e,r,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return F(this,e,r,n);default:if(s)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),s=!0}},u.prototype.toJSON=function t(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var P=4096;function C(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function D(t,e,r,n,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function N(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function L(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function M(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(t,e,r,n,o){return o||M(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function U(t,e,r,n,o){return o||M(t,0,r,8),i.write(t,e,r,n,52,8),r+8}u.prototype.slice=function t(e,r){var n,i=this.length;if(e=~~e,r=void 0===r?i:~~r,e<0?(e+=i)<0&&(e=0):e>i&&(e=i),r<0?(r+=i)<0&&(r=0):r>i&&(r=i),r0&&(o*=256);)i+=this[e+--r]*o;return i},u.prototype.readUInt8=function t(e,r){return r||O(e,1,this.length),this[e]},u.prototype.readUInt16LE=function t(e,r){return r||O(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function t(e,r){return r||O(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function t(e,r){return r||O(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function t(e,r){return r||O(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function t(e,r,n){e|=0,r|=0,n||O(e,r,this.length);for(var i=this[e],o=1,s=0;++s=(o*=128)&&(i-=Math.pow(2,8*r)),i},u.prototype.readIntBE=function t(e,r,n){e|=0,r|=0,n||O(e,r,this.length);for(var i=r,o=1,s=this[e+--i];i>0&&(o*=256);)s+=this[e+--i]*o;return s>=(o*=128)&&(s-=Math.pow(2,8*r)),s},u.prototype.readInt8=function t(e,r){return r||O(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function t(e,r){r||O(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function t(e,r){r||O(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function t(e,r){return r||O(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function t(e,r){return r||O(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function t(e,r){return r||O(e,4,this.length),i.read(this,e,!0,23,4)},u.prototype.readFloatBE=function t(e,r){return r||O(e,4,this.length),i.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function t(e,r){return r||O(e,8,this.length),i.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function t(e,r){return r||O(e,8,this.length),i.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function t(e,r,n,i){(e=+e,r|=0,n|=0,i)||D(this,e,r,n,Math.pow(2,8*n)-1,0);var o=1,s=0;for(this[r]=255&e;++s=0&&(s*=256);)this[r+o]=e/s&255;return r+n},u.prototype.writeUInt8=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},u.prototype.writeUInt16LE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):N(this,e,r,!0),r+2},u.prototype.writeUInt16BE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):N(this,e,r,!1),r+2},u.prototype.writeUInt32LE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):L(this,e,r,!0),r+4},u.prototype.writeUInt32BE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):L(this,e,r,!1),r+4},u.prototype.writeIntLE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);D(this,e,r,n,o-1,-o)}var s=0,a=1,u=0;for(this[r]=255&e;++s>0)-u&255;return r+n},u.prototype.writeIntBE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);D(this,e,r,n,o-1,-o)}var s=n-1,a=1,u=0;for(this[r+s]=255&e;--s>=0&&(a*=256);)e<0&&0===u&&0!==this[r+s+1]&&(u=1),this[r+s]=(e/a>>0)-u&255;return r+n},u.prototype.writeInt8=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},u.prototype.writeInt16LE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):N(this,e,r,!0),r+2},u.prototype.writeInt16BE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):N(this,e,r,!1),r+2},u.prototype.writeInt32LE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):L(this,e,r,!0),r+4},u.prototype.writeInt32BE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):L(this,e,r,!1),r+4},u.prototype.writeFloatLE=function t(e,r,n){return j(this,e,r,!0,n)},u.prototype.writeFloatBE=function t(e,r,n){return j(this,e,r,!1,n)},u.prototype.writeDoubleLE=function t(e,r,n){return U(this,e,r,!0,n)},u.prototype.writeDoubleBE=function t(e,r,n){return U(this,e,r,!1,n)},u.prototype.copy=function t(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r=0;--o)e[o+r]=this[o+n];else if(s<1e3||!u.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(s=r;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function K(t){return n.toByteArray(function e(t){if((t=function e(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(71))},function(t,e,r){"use strict";e.byteLength=function n(t){var e=l(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function i(t){for(var e,r=l(t),n=r[0],i=r[1],o=new u(function s(t,e,r){return 3*(e+r)/4-r}(0,n,i)),c=0,f=i>0?n-4:n,h=0;h>16&255,o[c++]=e>>8&255,o[c++]=255&e;2===i&&(e=a[t.charCodeAt(h)]<<2|a[t.charCodeAt(h+1)]>>4,o[c++]=255&e);1===i&&(e=a[t.charCodeAt(h)]<<10|a[t.charCodeAt(h+1)]<<4|a[t.charCodeAt(h+2)]>>2,o[c++]=e>>8&255,o[c++]=255&e);return o},e.fromByteArray=function o(t){for(var e,r=t.length,n=r%3,i=[],o=0,a=r-n;oa?a:o+16383));1===n?(e=t[r-1],i.push(s[e>>2]+s[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],i.push(s[e>>10]+s[e>>4&63]+s[e<<2&63]+"="));return i.join("")};for(var s=[],a=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,h=c.length;f0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function p(t,e,r){for(var n,i,o=[],a=e;a>18&63]+s[i>>12&63]+s[i>>6&63]+s[63&i]);return o.join("")}a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,u=(1<>1,f=-7,h=r?i-1:0,l=r?-1:1,p=t[e+h];for(h+=l,o=p&(1<<-f)-1,p>>=-f,f+=a;f>0;o=256*o+t[e+h],h+=l,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=n;f>0;s=256*s+t[e+h],h+=l,f-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=c}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,f=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+h>=1?l/u:l*Math.pow(2,1-h))*u>=2&&(s++,u/=2),s+h>=f?(a=0,s=f):s+h>=1?(a=(e*u-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=d,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=d,s/=256,c-=8);t[r+p-d]|=128*g}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(t){var e=t.jws,r=t.KeyUtil,n=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){i.Log.debug("JoseUtil.parseJwt");try{var n=e.JWS.parse(r);return{header:n.headerObj,payload:n.payloadObj}}catch(t){i.Log.error(t)}},t.validateJwt=function e(o,s,u,c,f,h,l){i.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return i.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var p=a(s.x5c[0]);s=n.getPublicKeyFromCertHex(p)}else{if("EC"!==s.kty)return i.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return i.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,u,c,f,h,l)}catch(t){return i.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,n,o,s,a,u){s||(s=0),a||(a=parseInt(Date.now()/1e3));var c=t.parseJwt(r).payload;if(!c.iss)return i.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(c.iss!==n)return i.Log.error("JoseUtil._validateJwt: Invalid issuer in token",c.iss),Promise.reject(new Error("Invalid issuer in token: "+c.iss));if(!c.aud)return i.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));var f=c.aud===o||Array.isArray(c.aud)&&c.aud.indexOf(o)>=0;if(!f)return i.Log.error("JoseUtil._validateJwt: Invalid audience in token",c.aud),Promise.reject(new Error("Invalid audience in token: "+c.aud));if(c.azp&&c.azp!==o)return i.Log.error("JoseUtil._validateJwt: Invalid azp in token",c.azp),Promise.reject(new Error("Invalid azp in token: "+c.azp));if(!u){var h=a+s,l=a-s;if(!c.iat)return i.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(h>>((3&r)<<3)&255;return i}}},function(t,e){for(var r=[],n=0;n<256;++n)r[n]=(n+256).toString(16).substr(1);t.exports=function i(t,e){var n=e||0,i=r;return[i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]]].join("")}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninResponse=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:"#";!function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var o=i.UrlUtility.parseUrlFragment(e,r);this.error=o.error,this.error_description=o.error_description,this.error_uri=o.error_uri,this.code=o.code,this.state=o.state,this.id_token=o.id_token,this.session_state=o.session_state,this.access_token=o.access_token,this.token_type=o.token_type,this.scope=o.scope,this.profile=void 0,this.expires_in=o.expires_in}return n(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(3),i=r(55),o=r(102);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,u=e.data,c=e.extraQueryParams,f=e.request_type;if(function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var l in s&&(r=i.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=i.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),u&&(this.state=new o.State({data:u,request_type:f}),r=i.UrlUtility.addQueryParam(r,"state",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,l,c[l]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(55);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=n.UrlUtility.parseUrlFragment(e,"?");this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.state=i.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:h.TokenRevocationClient,d=arguments.length>4&&void 0!==arguments[4]?arguments[4]:l.TokenClient,g=arguments.length>5&&void 0!==arguments[5]?arguments[5]:p.JoseUtil;!function v(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var y=function m(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,r));return y._events=new u.UserManagerEvents(r),y._silentRenewService=new n(y),y.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),y.startSilentRenew()),y.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),y._sessionMonitor=new o(y)),y._tokenRevocationClient=new a(y._settings),y._tokenClient=new d(y._settings),y._joseUtil=g,y}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then(function(t){return t?(i.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(i.Log.info("UserManager.getUser: user not found in storage"),null)})},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then(function(){i.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()})},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then(function(){i.Log.info("UserManager.signinRedirect: successful")})},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then(function(t){return t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),t})},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t})):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t}).catch(function(t){i.Log.error(t.message)})},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).request_type="si:s",this._loadUser().then(function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))})},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then(function(t){return t?t.access_token?e._loadUser().then(function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then(function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then(function(){return e._events.load(r),r})})}return null}):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))})},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var n=this;return this._metadataService.getIssuer().then(function(t){return n._joseUtil.validateJwtAttributes(r,t,n._settings.client_id,n._settings.clockSkew).then(function(t){return t?t.sub!==e.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))})})},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t})):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t})},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then(function(t){var n=t.state;t.response;return"si:r"===n.request_type?r.signinRedirectCallback(e):"si:p"===n.request_type?r.signinPopupCallback(e):"si:s"===n.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))})},e.prototype.signoutCallback=function t(e,r){var n=this;return this.readSignoutResponseState(e).then(function(t){var i=t.state,o=t.response;return i?"so:r"===i.request_type?n.signoutRedirectCallback(e):"so:p"===i.request_type?n.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o})},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var n=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(r.redirect_uri=n,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:n,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then(function(t){return e.processSigninResponse(t.url).then(function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")}).catch(function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t})})):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,i).then(function(t){return n._signinEnd(t.url,e)})},e.prototype._signinStart=function t(e,r){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then(function(t){return i.Log.debug("UserManager._signinStart: got navigator window handle"),n.createSigninRequest(e).then(function(e){return i.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)}).catch(function(e){throw t.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e})})},e.prototype._signinEnd=function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then(function(t){i.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(n.current_sub){if(n.current_sub!==e.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then(function(){return i.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e})})},e.prototype._signinCallback=function t(e,r){return i.Log.debug("UserManager._signinCallback"),r.callback(e)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then(function(){i.Log.info("UserManager.signoutRedirect: successful")})},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then(function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t})},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then(function(){i.Log.info("UserManager.signoutPopup: successful")})},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then(function(){i.Log.info("UserManager.signoutPopupCallback: successful")})},e.prototype._signout=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,i).then(function(t){return n._signoutEnd(t.url)})},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,n=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(o).then(function(t){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then(function(n){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(n):Promise.resolve()).then(function(){var s=e.id_token_hint||n&&n.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then(function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then(function(e){return i.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)})})})}).catch(function(e){throw t.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e})})},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then(function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t})},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then(function(t){return e._revokeInternal(t,!0).then(function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then(function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)})})}).then(function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")})},e.prototype._revokeInternal=function t(e,r){var n=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then(function(t){return n._revokeRefreshTokenInternal(s,r).then(function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e})})}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then(function(){return!0})},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then(function(){return!0}):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then(function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)})},e.prototype.storeUser=function t(e){if(e){i.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,p=r.popupWindowFeatures,d=r.popupWindowTarget,g=r.silent_redirect_uri,v=r.silentRequestTimeout,y=r.automaticSilentRenew,m=void 0!==y&&y,_=r.validateSubOnSilentRenew,S=void 0!==_&&_,b=r.includeIdTokenInSilentRenew,w=void 0===b||b,F=r.monitorSession,E=void 0===F||F,x=r.monitorAnonymousSession,A=void 0!==x&&x,k=r.checkSessionInterval,P=void 0===k?l:k,C=r.stopCheckSessionOnError,T=void 0===C||C,R=r.query_status_response_type,I=r.revokeAccessTokenOnSignout,O=void 0!==I&&I,D=r.accessTokenExpiringNotificationTime,N=void 0===D?h:D,L=r.redirectNavigator,M=void 0===L?new o.RedirectNavigator:L,j=r.popupNavigator,U=void 0===j?new s.PopupNavigator:j,B=r.iframeNavigator,H=void 0===B?new a.IFrameNavigator:B,V=r.userStore,K=void 0===V?new u.WebStorageStateStore({store:c.Global.sessionStorage}):V;!function q(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var W=function J(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));return W._popup_redirect_uri=n,W._popup_post_logout_redirect_uri=i,W._popupWindowFeatures=p,W._popupWindowTarget=d,W._silent_redirect_uri=g,W._silentRequestTimeout=v,W._automaticSilentRenew=m,W._validateSubOnSilentRenew=S,W._includeIdTokenInSilentRenew=w,W._accessTokenExpiringNotificationTime=N,W._monitorSession=E,W._monitorAnonymousSession=A,W._checkSessionInterval=P,W._stopCheckSessionOnError=T,R?W._query_status_response_type=R:arguments[0]&&arguments[0].response_type?W._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":W._query_status_response_type="id_token",W._revokeAccessTokenOnSignout=O,W._redirectNavigator=M,W._popupNavigator=U,W._iframeNavigator=H,W._userStore=K,W}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),n(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),i&&this._userLoaded.raise(r)},e.prototype.unload=function e(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){n.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;!function s(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var a=function u(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,r));return a._timer=n,a._nowFunc=i||function(){return Date.now()/1e3},a}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var n=5;e=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function d(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return V(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return K(t).length;default:if(n)return V(t).length;e=(""+e).toLowerCase(),n=!0}}function g(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function v(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:y(t,e,r,n,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):y(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function y(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function c(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var f=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var h=!0,l=0;li&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function E(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function x(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+h<=r)switch(h){case 1:c<128&&(f=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(f=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(f=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(f=u)}null===f?(f=65533,h=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=h}return function l(t){var e=t.length;if(e<=P)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,n);case"utf8":case"utf-8":return x(this,e,n);case"ascii":return C(this,e,n);case"latin1":case"binary":return T(this,e,n);case"base64":return E(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}.apply(this,arguments)},u.prototype.equals=function t(e){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===u.compare(this,e)},u.prototype.inspect=function t(){var r="",n=e.INSPECT_MAX_BYTES;return this.length>0&&(r=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(r+=" ... ")),""},u.prototype.compare=function t(e,r,n,i,o){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,o>>>=0,this===e)return 0;for(var s=o-i,a=n-r,c=Math.min(s,a),f=this.slice(i,o),h=e.slice(r,n),l=0;lo)&&(n=o),e.length>0&&(n<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var s=!1;;)switch(i){case"hex":return m(this,e,r,n);case"utf8":case"utf-8":return _(this,e,r,n);case"ascii":return S(this,e,r,n);case"latin1":case"binary":return b(this,e,r,n);case"base64":return w(this,e,r,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return F(this,e,r,n);default:if(s)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),s=!0}},u.prototype.toJSON=function t(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var P=4096;function C(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function D(t,e,r,n,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function N(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function L(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function M(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(t,e,r,n,o){return o||M(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function U(t,e,r,n,o){return o||M(t,0,r,8),i.write(t,e,r,n,52,8),r+8}u.prototype.slice=function t(e,r){var n,i=this.length;if(e=~~e,r=void 0===r?i:~~r,e<0?(e+=i)<0&&(e=0):e>i&&(e=i),r<0?(r+=i)<0&&(r=0):r>i&&(r=i),r0&&(o*=256);)i+=this[e+--r]*o;return i},u.prototype.readUInt8=function t(e,r){return r||O(e,1,this.length),this[e]},u.prototype.readUInt16LE=function t(e,r){return r||O(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function t(e,r){return r||O(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function t(e,r){return r||O(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function t(e,r){return r||O(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function t(e,r,n){e|=0,r|=0,n||O(e,r,this.length);for(var i=this[e],o=1,s=0;++s=(o*=128)&&(i-=Math.pow(2,8*r)),i},u.prototype.readIntBE=function t(e,r,n){e|=0,r|=0,n||O(e,r,this.length);for(var i=r,o=1,s=this[e+--i];i>0&&(o*=256);)s+=this[e+--i]*o;return s>=(o*=128)&&(s-=Math.pow(2,8*r)),s},u.prototype.readInt8=function t(e,r){return r||O(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function t(e,r){r||O(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function t(e,r){r||O(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function t(e,r){return r||O(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function t(e,r){return r||O(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function t(e,r){return r||O(e,4,this.length),i.read(this,e,!0,23,4)},u.prototype.readFloatBE=function t(e,r){return r||O(e,4,this.length),i.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function t(e,r){return r||O(e,8,this.length),i.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function t(e,r){return r||O(e,8,this.length),i.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function t(e,r,n,i){(e=+e,r|=0,n|=0,i)||D(this,e,r,n,Math.pow(2,8*n)-1,0);var o=1,s=0;for(this[r]=255&e;++s=0&&(s*=256);)this[r+o]=e/s&255;return r+n},u.prototype.writeUInt8=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},u.prototype.writeUInt16LE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):N(this,e,r,!0),r+2},u.prototype.writeUInt16BE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):N(this,e,r,!1),r+2},u.prototype.writeUInt32LE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):L(this,e,r,!0),r+4},u.prototype.writeUInt32BE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):L(this,e,r,!1),r+4},u.prototype.writeIntLE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);D(this,e,r,n,o-1,-o)}var s=0,a=1,u=0;for(this[r]=255&e;++s>0)-u&255;return r+n},u.prototype.writeIntBE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);D(this,e,r,n,o-1,-o)}var s=n-1,a=1,u=0;for(this[r+s]=255&e;--s>=0&&(a*=256);)e<0&&0===u&&0!==this[r+s+1]&&(u=1),this[r+s]=(e/a>>0)-u&255;return r+n},u.prototype.writeInt8=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},u.prototype.writeInt16LE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):N(this,e,r,!0),r+2},u.prototype.writeInt16BE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):N(this,e,r,!1),r+2},u.prototype.writeInt32LE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):L(this,e,r,!0),r+4},u.prototype.writeInt32BE=function t(e,r,n){return e=+e,r|=0,n||D(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):L(this,e,r,!1),r+4},u.prototype.writeFloatLE=function t(e,r,n){return j(this,e,r,!0,n)},u.prototype.writeFloatBE=function t(e,r,n){return j(this,e,r,!1,n)},u.prototype.writeDoubleLE=function t(e,r,n){return U(this,e,r,!0,n)},u.prototype.writeDoubleBE=function t(e,r,n){return U(this,e,r,!1,n)},u.prototype.copy=function t(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r=0;--o)e[o+r]=this[o+n];else if(s<1e3||!u.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(s=r;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function K(t){return n.toByteArray(function e(t){if((t=function e(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(71))},function(t,e,r){"use strict";e.byteLength=function n(t){var e=l(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function i(t){for(var e,r=l(t),n=r[0],i=r[1],o=new u(function s(t,e,r){return 3*(e+r)/4-r}(0,n,i)),c=0,f=i>0?n-4:n,h=0;h>16&255,o[c++]=e>>8&255,o[c++]=255&e;2===i&&(e=a[t.charCodeAt(h)]<<2|a[t.charCodeAt(h+1)]>>4,o[c++]=255&e);1===i&&(e=a[t.charCodeAt(h)]<<10|a[t.charCodeAt(h+1)]<<4|a[t.charCodeAt(h+2)]>>2,o[c++]=e>>8&255,o[c++]=255&e);return o},e.fromByteArray=function o(t){for(var e,r=t.length,n=r%3,i=[],o=0,a=r-n;oa?a:o+16383));1===n?(e=t[r-1],i.push(s[e>>2]+s[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],i.push(s[e>>10]+s[e>>4&63]+s[e<<2&63]+"="));return i.join("")};for(var s=[],a=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,h=c.length;f0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function p(t,e,r){for(var n,i,o=[],a=e;a>18&63]+s[i>>12&63]+s[i>>6&63]+s[63&i]);return o.join("")}a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,u=(1<>1,f=-7,h=r?i-1:0,l=r?-1:1,p=t[e+h];for(h+=l,o=p&(1<<-f)-1,p>>=-f,f+=a;f>0;o=256*o+t[e+h],h+=l,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=n;f>0;s=256*s+t[e+h],h+=l,f-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=c}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,f=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+h>=1?l/u:l*Math.pow(2,1-h))*u>=2&&(s++,u/=2),s+h>=f?(a=0,s=f):s+h>=1?(a=(e*u-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=d,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=d,s/=256,c-=8);t[r+p-d]|=128*g}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(t){var e=t.jws,r=t.KeyUtil,n=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){i.Log.debug("JoseUtil.parseJwt");try{var n=e.JWS.parse(r);return{header:n.headerObj,payload:n.payloadObj}}catch(t){i.Log.error(t)}},t.validateJwt=function e(o,s,u,c,f,h,l){i.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return i.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var p=a(s.x5c[0]);s=n.getPublicKeyFromCertHex(p)}else{if("EC"!==s.kty)return i.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return i.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,u,c,f,h,l)}catch(t){return i.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,n,o,s,a,u){s||(s=0),a||(a=parseInt(Date.now()/1e3));var c=t.parseJwt(r).payload;if(!c.iss)return i.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(c.iss!==n)return i.Log.error("JoseUtil._validateJwt: Invalid issuer in token",c.iss),Promise.reject(new Error("Invalid issuer in token: "+c.iss));if(!c.aud)return i.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));var f=c.aud===o||Array.isArray(c.aud)&&c.aud.indexOf(o)>=0;if(!f)return i.Log.error("JoseUtil._validateJwt: Invalid audience in token",c.aud),Promise.reject(new Error("Invalid audience in token: "+c.aud));if(c.azp&&c.azp!==o)return i.Log.error("JoseUtil._validateJwt: Invalid azp in token",c.azp),Promise.reject(new Error("Invalid azp in token: "+c.azp));if(!u){var h=a+s,l=a-s;if(!c.iat)return i.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(h>>((3&r)<<3)&255;return i}}},function(t,e){for(var r=[],n=0;n<256;++n)r[n]=(n+256).toString(16).substr(1);t.exports=function i(t,e){var n=e||0,i=r;return[i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],"-",i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]],i[t[n++]]].join("")}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninResponse=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:"#";!function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var o=i.UrlUtility.parseUrlFragment(e,r);this.error=o.error,this.error_description=o.error_description,this.error_uri=o.error_uri,this.code=o.code,this.state=o.state,this.id_token=o.id_token,this.session_state=o.session_state,this.access_token=o.access_token,this.token_type=o.token_type,this.scope=o.scope,this.profile=void 0,this.expires_in=o.expires_in}return n(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(3),i=r(55),o=r(102);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,u=e.data,c=e.extraQueryParams,f=e.request_type;if(function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var l in s&&(r=i.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=i.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),u&&(this.state=new o.State({data:u,request_type:f}),r=i.UrlUtility.addQueryParam(r,"state",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,l,c[l]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(55);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=n.UrlUtility.parseUrlFragment(e,"?");this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.state=i.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:h.TokenRevocationClient,d=arguments.length>4&&void 0!==arguments[4]?arguments[4]:l.TokenClient,g=arguments.length>5&&void 0!==arguments[5]?arguments[5]:p.JoseUtil;!function v(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var y=function m(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,r));return y._events=new u.UserManagerEvents(r),y._silentRenewService=new n(y),y.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),y.startSilentRenew()),y.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),y._sessionMonitor=new o(y)),y._tokenRevocationClient=new a(y._settings),y._tokenClient=new d(y._settings),y._joseUtil=g,y}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then(function(t){return t?(i.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(i.Log.info("UserManager.getUser: user not found in storage"),null)})},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then(function(){i.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()})},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then(function(){i.Log.info("UserManager.signinRedirect: successful")})},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then(function(t){return t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),t})},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t})):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t}).catch(function(t){i.Log.error(t.message)})},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).request_type="si:s",this._loadUser().then(function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))})},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then(function(t){return t?t.access_token?e._loadUser().then(function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then(function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then(function(){return e._events.load(r),r})})}return null}):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))})},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var n=this;return this._metadataService.getIssuer().then(function(t){return n._joseUtil.validateJwtAttributes(r,t,n._settings.client_id,n._settings.clockSkew).then(function(t){return t?t.sub!==e.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))})})},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t})):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then(function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t})},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then(function(t){var n=t.state;t.response;return"si:r"===n.request_type?r.signinRedirectCallback(e):"si:p"===n.request_type?r.signinPopupCallback(e):"si:s"===n.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))})},e.prototype.signoutCallback=function t(e,r){var n=this;return this.readSignoutResponseState(e).then(function(t){var i=t.state,o=t.response;return i?"so:r"===i.request_type?n.signoutRedirectCallback(e):"so:p"===i.request_type?n.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o})},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var n=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(r.redirect_uri=n,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:n,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then(function(t){return e.processSigninResponse(t.url).then(function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")}).catch(function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t})})):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,i).then(function(t){return n._signinEnd(t.url,e)})},e.prototype._signinStart=function t(e,r){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then(function(t){return i.Log.debug("UserManager._signinStart: got navigator window handle"),n.createSigninRequest(e).then(function(e){return i.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)}).catch(function(e){throw t.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e})})},e.prototype._signinEnd=function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then(function(t){i.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(n.current_sub){if(n.current_sub!==e.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then(function(){return i.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e})})},e.prototype._signinCallback=function t(e,r){return i.Log.debug("UserManager._signinCallback"),r.callback(e)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then(function(){i.Log.info("UserManager.signoutRedirect: successful")})},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then(function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t})},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then(function(){i.Log.info("UserManager.signoutPopup: successful")})},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then(function(){i.Log.info("UserManager.signoutPopupCallback: successful")})},e.prototype._signout=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,i).then(function(t){return n._signoutEnd(t.url)})},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,n=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(o).then(function(t){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then(function(n){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(n):Promise.resolve()).then(function(){var s=e.id_token_hint||n&&n.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then(function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then(function(e){return i.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)})})})}).catch(function(e){throw t.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e})})},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then(function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t})},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then(function(t){return e._revokeInternal(t,!0).then(function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then(function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)})})}).then(function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")})},e.prototype._revokeInternal=function t(e,r){var n=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then(function(t){return n._revokeRefreshTokenInternal(s,r).then(function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e})})}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then(function(){return!0})},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then(function(){return!0}):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then(function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)})},e.prototype.storeUser=function t(e){if(e){i.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,p=r.popupWindowFeatures,d=r.popupWindowTarget,g=r.silent_redirect_uri,v=r.silentRequestTimeout,y=r.automaticSilentRenew,m=void 0!==y&&y,_=r.validateSubOnSilentRenew,S=void 0!==_&&_,b=r.includeIdTokenInSilentRenew,w=void 0===b||b,F=r.monitorSession,E=void 0===F||F,x=r.monitorAnonymousSession,A=void 0!==x&&x,k=r.checkSessionInterval,P=void 0===k?l:k,C=r.stopCheckSessionOnError,T=void 0===C||C,R=r.query_status_response_type,I=r.revokeAccessTokenOnSignout,O=void 0!==I&&I,D=r.accessTokenExpiringNotificationTime,N=void 0===D?h:D,L=r.redirectNavigator,M=void 0===L?new o.RedirectNavigator:L,j=r.popupNavigator,U=void 0===j?new s.PopupNavigator:j,B=r.iframeNavigator,H=void 0===B?new a.IFrameNavigator:B,V=r.userStore,K=void 0===V?new u.WebStorageStateStore({store:c.Global.sessionStorage}):V;!function q(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var W=function J(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));return W._popup_redirect_uri=n,W._popup_post_logout_redirect_uri=i,W._popupWindowFeatures=p,W._popupWindowTarget=d,W._silent_redirect_uri=g,W._silentRequestTimeout=v,W._automaticSilentRenew=m,W._validateSubOnSilentRenew=S,W._includeIdTokenInSilentRenew=w,W._accessTokenExpiringNotificationTime=N,W._monitorSession=E,W._monitorAnonymousSession=A,W._checkSessionInterval=P,W._stopCheckSessionOnError=T,R?W._query_status_response_type=R:arguments[0]&&arguments[0].response_type?W._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":W._query_status_response_type="id_token",W._revokeAccessTokenOnSignout=O,W._redirectNavigator=M,W._popupNavigator=U,W._iframeNavigator=H,W._userStore=K,W}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),n(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),i&&this._userLoaded.raise(r)},e.prototype.unload=function e(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){n.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;!function s(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var a=function u(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,r));return a._timer=n,a._nowFunc=i||function(){return Date.now()/1e3},a}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var n=5;e=4){for(var t=arguments.length,r=Array(t),n=0;n=3){for(var t=arguments.length,r=Array(t),n=0;n=2){for(var t=arguments.length,r=Array(t),n=0;n=1){for(var t=arguments.length,r=Array(t),n=0;n1&&void 0!==arguments[1]?arguments[1]:i.JsonService;if(function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw o.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=t,this._jsonService=new r(["application/jwk-set+json"])}return e.prototype.getMetadata=function e(){var t=this;return this._settings.metadata?(o.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(o.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then(function(e){return o.Log.debug("MetadataService.getMetadata: json received"),t._settings.metadata=e,e})):(o.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},e.prototype.getIssuer=function e(){return this._getMetadataProperty("issuer")},e.prototype.getAuthorizationEndpoint=function e(){return this._getMetadataProperty("authorization_endpoint")},e.prototype.getUserInfoEndpoint=function e(){return this._getMetadataProperty("userinfo_endpoint")},e.prototype.getTokenEndpoint=function e(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",t)},e.prototype.getCheckSessionIframe=function e(){return this._getMetadataProperty("check_session_iframe",!0)},e.prototype.getEndSessionEndpoint=function e(){return this._getMetadataProperty("end_session_endpoint",!0)},e.prototype.getRevocationEndpoint=function e(){return this._getMetadataProperty("revocation_endpoint",!0)},e.prototype.getKeysEndpoint=function e(){return this._getMetadataProperty("jwks_uri",!0)},e.prototype._getMetadataProperty=function e(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o.Log.debug("MetadataService.getMetadataProperty for: "+t),this.getMetadata().then(function(e){if(o.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===e[t]){if(!0===r)return void o.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+t);throw o.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+t),new Error("Metadata does not contain property "+t)}return e[t]})},e.prototype.getSigningKeys=function e(){var t=this;return this._settings.signingKeys?(o.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then(function(e){return o.Log.debug("MetadataService.getSigningKeys: jwks_uri received",e),t._jsonService.getJson(e).then(function(e){if(o.Log.debug("MetadataService.getSigningKeys: key set received",e),!e.keys)throw o.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return t._settings.signingKeys=e.keys,t._settings.signingKeys})})},n(e,[{key:"metadataUrl",get:function e(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),e}()},function(e,t){var r={}.toString;e.exports=function(e){return r.call(e).slice(8,-1)}},function(e,t,r){var n=r(2),o=r(8),i=r(19),s=r(24)("src"),a=r(68),u=(""+a).split("toString");r(3).inspectSource=function(e){return a.call(e)},(e.exports=function(e,t,r,a){var c="function"==typeof r;c&&(i(r,"name")||o(r,"name",t)),e[t]!==r&&(c&&(i(r,s)||o(r,s,e[t]?""+e[t]:u.join(String(t)))),e===n?e[t]=r:a?e[t]?e[t]=r:o(e,t,r):(delete e[t],o(e,t,r)))})(Function.prototype,"toString",function e(){return"function"==typeof this&&this[s]||a.call(this)})},function(e,t,r){e.exports=!r(18)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,r){var n=r(14);e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){e.exports={}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UrlUtility=void 0;var n=r(0),o=r(4);t.UrlUtility=function(){function e(){!function t(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,e)}return e.addQueryParam=function e(t,r,n){return t.indexOf("?")<0&&(t+="?"),"?"!==t[t.length-1]&&(t+="&"),t+=encodeURIComponent(r),t+="=",t+=encodeURIComponent(n)},e.parseUrlFragment=function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.Global;"string"!=typeof t&&(t=i.location.href);var s=t.lastIndexOf(r);s>=0&&(t=t.substr(s+1)),"?"===r&&(s=t.indexOf("#"))>=0&&(t=t.substr(0,s));for(var a,u={},c=/([^&=]+)=([^&]*)/g,l=0;a=c.exec(t);)if(u[decodeURIComponent(a[1])]=decodeURIComponent(a[2]),l++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",t),{error:"Response exceeded expected number of parameters"};for(var p in u)return u;return{}},e}()},function(e,t,r){var n=r(5),o=r(66),i=r(67),s=Object.defineProperty;t.f=r(12)?Object.defineProperty:function e(t,r,a){if(n(t),r=i(r,!0),n(a),o)try{return s(t,r,a)}catch(e){}if("get"in a||"set"in a)throw TypeError("Accessors not supported!");return"value"in a&&(t[r]=a.value),t}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){var r={}.hasOwnProperty;e.exports=function(e,t){return r.call(e,t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JoseUtil=void 0;var n=r(116),o=function i(e){return e&&e.__esModule?e:{default:e}}(r(121));t.JoseUtil=(0,o.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(e,t,r){var n=r(10),o=r(1)("toStringTag"),i="Arguments"==n(function(){return arguments}());e.exports=function(e){var t,r,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?r:i?n(t):"Object"==(s=n(t))&&"function"==typeof t.callee?"Arguments":s}},function(e,t,r){var n=r(3),o=r(2),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:n.version,mode:r(23)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports=!1},function(e,t){var r=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++r+n).toString(36))}},function(e,t,r){var n=r(6),o=r(2).document,i=n(o)&&n(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t){var r=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:r)(e)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,r){var n=r(74),o=r(41);e.exports=Object.keys||function e(t){return n(t,o)}},function(e,t,r){var n=r(30),o=r(27);e.exports=function(e){return n(o(e))}},function(e,t,r){var n=r(10);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},function(e,t,r){var n=r(26),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},function(e,t,r){var n=r(22)("keys"),o=r(24);e.exports=function(e){return n[e]||(n[e]=o(e))}},function(e,t,r){var n=r(17).f,o=r(19),i=r(1)("toStringTag");e.exports=function(e,t,r){e&&!o(e=r?e:e.prototype,i)&&n(e,i,{configurable:!0,value:t})}},function(e,t,r){var n=r(27);e.exports=function(e){return Object(n(e))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=t.authority,o=t.metadataUrl,i=t.metadata,d=t.signingKeys,h=t.client_id,g=t.client_secret,_=t.response_type,v=void 0===_?c:_,y=t.scope,m=void 0===y?l:y,b=t.redirect_uri,S=t.post_logout_redirect_uri,w=t.prompt,k=t.display,T=t.max_age,P=t.ui_locales,E=t.acr_values,L=t.resource,R=t.response_mode,x=t.filterProtocolClaims,C=void 0===x||x,U=t.loadUserInfo,M=void 0===U||U,O=t.staleStateAge,j=void 0===O?p:O,I=t.clockSkew,A=void 0===I?f:I,N=t.userInfoJwtIssuer,q=void 0===N?"OP":N,F=t.stateStore,J=void 0===F?new s.WebStorageStateStore:F,B=t.ResponseValidatorCtor,V=void 0===B?a.ResponseValidator:B,W=t.MetadataServiceCtor,D=void 0===W?u.MetadataService:W,H=t.extraQueryParams,z=void 0===H?{}:H;!function K(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._authority=r,this._metadataUrl=o,this._metadata=i,this._signingKeys=d,this._client_id=h,this._client_secret=g,this._response_type=v,this._scope=m,this._redirect_uri=b,this._post_logout_redirect_uri=S,this._prompt=w,this._display=k,this._max_age=T,this._ui_locales=P,this._acr_values=E,this._resource=L,this._response_mode=R,this._filterProtocolClaims=!!C,this._loadUserInfo=!!M,this._staleStateAge=j,this._clockSkew=A,this._userInfoJwtIssuer=q,this._stateStore=J,this._validator=new V(this),this._metadataService=new D(this),this._extraQueryParams="object"===(void 0===z?"undefined":n(z))?z:{}}return o(e,[{key:"client_id",get:function e(){return this._client_id},set:function e(t){if(this._client_id)throw i.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=t}},{key:"client_secret",get:function e(){return this._client_secret}},{key:"response_type",get:function e(){return this._response_type}},{key:"scope",get:function e(){return this._scope}},{key:"redirect_uri",get:function e(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function e(){return this._post_logout_redirect_uri}},{key:"prompt",get:function e(){return this._prompt}},{key:"display",get:function e(){return this._display}},{key:"max_age",get:function e(){return this._max_age}},{key:"ui_locales",get:function e(){return this._ui_locales}},{key:"acr_values",get:function e(){return this._acr_values}},{key:"resource",get:function e(){return this._resource}},{key:"response_mode",get:function e(){return this._response_mode}},{key:"authority",get:function e(){return this._authority},set:function e(t){if(this._authority)throw i.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=t}},{key:"metadataUrl",get:function e(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function e(){return this._metadata},set:function e(t){this._metadata=t}},{key:"signingKeys",get:function e(){return this._signingKeys},set:function e(t){this._signingKeys=t}},{key:"filterProtocolClaims",get:function e(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function e(){return this._loadUserInfo}},{key:"staleStateAge",get:function e(){return this._staleStateAge}},{key:"clockSkew",get:function e(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function e(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function e(){return this._stateStore}},{key:"validator",get:function e(){return this._validator}},{key:"metadataService",get:function e(){return this._metadataService}},{key:"extraQueryParams",get:function e(){return this._extraQueryParams},set:function e(t){"object"===(void 0===t?"undefined":n(t))?this._extraQueryParams=t:this._extraQueryParams={}}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WebStorageStateStore=void 0;var n=r(0),o=r(4);t.WebStorageStateStore=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.prefix,n=void 0===r?"oidc.":r,i=t.store,s=void 0===i?o.Global.localStorage:i;!function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._store=s,this._prefix=n}return e.prototype.set=function e(t,r){return n.Log.debug("WebStorageStateStore.set",t),t=this._prefix+t,this._store.setItem(t,r),Promise.resolve()},e.prototype.get=function e(t){n.Log.debug("WebStorageStateStore.get",t),t=this._prefix+t;var r=this._store.getItem(t);return Promise.resolve(r)},e.prototype.remove=function e(t){n.Log.debug("WebStorageStateStore.remove",t),t=this._prefix+t;var r=this._store.getItem(t);return this._store.removeItem(t),Promise.resolve(r)},e.prototype.getAllKeys=function e(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var t=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t&&Array.isArray(t)?this._contentTypes=t.slice():this._contentTypes=[],this._contentTypes.push("application/json"),n&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=r,this._jwtHandler=n}return e.prototype.getJson=function e(t,r){var o=this;if(!t)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",t),new Promise(function(e,i){var s=new o._XMLHttpRequest;s.open("GET",t);var a=o._contentTypes,u=o._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var r=s.getResponseHeader("Content-Type");if(r){var o=a.find(function(e){if(r.startsWith(e))return!0});if("application/jwt"==o)return void u(s).then(e,i);if(o)try{return void e(JSON.parse(s.responseText))}catch(e){return n.Log.error("JsonService.getJson: Error parsing JSON response",e.message),void i(e)}}i(Error("Invalid response Content-Type: "+r+", from URL: "+t))}else i(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),i(Error("Network Error"))},r&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+r)),s.send()})},e.prototype.postForm=function e(t,r){var o=this;if(!t)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",t),new Promise(function(e,i){var s=new o._XMLHttpRequest;s.open("POST",t);var a=o._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status)if(o=s.getResponseHeader("Content-Type"))if(a.find(function(e){if(o.startsWith(e))return!0}))try{var r=JSON.parse(s.responseText);if(r&&r.error)return n.Log.error("JsonService.postForm: Error from server: ",r.error),void i(new Error(r.error))}catch(e){return n.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void i(e)}i(Error(s.statusText+" ("+s.status+")"))}else{var o;if((o=s.getResponseHeader("Content-Type"))&&a.find(function(e){if(o.startsWith(e))return!0}))try{return void e(JSON.parse(s.responseText))}catch(e){return n.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void i(e)}i(Error("Invalid response Content-Type: "+o+", from URL: "+t))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),i(Error("Network Error"))};var u="";for(var c in r){var l=r[c];l&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(l))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)})},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.State=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=t.id,n=t.data,o=t.created,s=t.request_type;!function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._id=r||(0,i.default)(),this._data=n,this._created="number"==typeof o&&o>0?o:parseInt(Date.now()/1e3),this._request_type=s}return e.prototype.toStorageString=function e(){return o.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},e.fromStorageString=function t(r){return o.Log.debug("State.fromStorageString"),new e(JSON.parse(r))},e.clearStaleState=function t(r,n){var i=Date.now()/1e3-n;return r.getAllKeys().then(function(t){o.Log.debug("State.clearStaleState: got keys",t);for(var n=[],s=function s(a){var c=t[a];u=r.get(c).then(function(t){var n=!1;if(t)try{var s=e.fromStorageString(t);o.Log.debug("State.clearStaleState: got item from key: ",c,s.created),s.created<=i&&(n=!0)}catch(e){o.Log.error("State.clearStaleState: Error parsing state for key",c,e.message),n=!0}else o.Log.debug("State.clearStaleState: no item in storage for key: ",c),n=!0;if(n)return o.Log.debug("State.clearStaleState: removed item for key: ",c),r.remove(c)}),n.push(u)},a=0;ao;)r.push(arguments[o++]);return v[++_]=function(){a("function"==typeof t?t:Function(t),r)},n(_),_},d=function e(t){delete v[t]},"process"==r(10)(p)?n=function(e){p.nextTick(s(y,e,1))}:g&&g.now?n=function(e){g.now(s(y,e,1))}:h?(i=(o=new h).port2,o.port1.onmessage=m,n=s(i.postMessage,i,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(n=function(e){l.postMessage(e+"","*")},l.addEventListener("message",m,!1)):n="onreadystatechange"in c("script")?function(e){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),y.call(e)}}:function(e){setTimeout(s(y,e,1),0)}),e.exports={set:f,clear:d}},function(e,t){e.exports=function(e,t,r){var n=void 0===r;switch(t.length){case 0:return n?e():e.call(r);case 1:return n?e(t[0]):e.call(r,t[0]);case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}return e.apply(r,t)}},function(e,t,r){"use strict";var n=r(14);e.exports.f=function(e){return new function t(e){var t,r;this.promise=new e(function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n}),this.resolve=n(t),this.reject=n(r)}(e)}},function(e,t,r){var n=r(13),o=r(30),i=r(34),s=r(31),a=r(105);e.exports=function(e,t){var r=1==e,u=2==e,c=3==e,l=4==e,p=6==e,f=5==e||p,d=t||a;return function(t,a,h){for(var g,_,v=i(t),y=o(v),m=n(a,h,3),b=s(y.length),S=0,w=r?d(t,b):u?d(t,0):void 0;b>S;S++)if((f||S in y)&&(_=m(g=y[S],S,v),e))if(r)w[S]=_;else if(_)switch(e){case 3:return!0;case 5:return g;case 6:return S;case 2:w.push(g)}else if(l)return!1;return p?-1:c||l?l:w}}},function(e,t,r){var n=r(10);e.exports=Array.isArray||function e(t){return"Array"==n(t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OidcClient=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};!function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t instanceof i.OidcClientSettings?this._settings=t:this._settings=new i.OidcClientSettings(t)}return e.prototype.createSigninRequest=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.response_type,i=r.scope,s=r.redirect_uri,u=r.data,c=r.state,l=r.prompt,p=r.display,f=r.max_age,d=r.ui_locales,h=r.id_token_hint,g=r.login_hint,_=r.acr_values,v=r.resource,y=r.request,m=r.request_uri,b=r.response_mode,S=r.extraQueryParams,w=r.extraTokenParams,k=r.request_type,T=r.skipUserInfo,P=arguments[1];o.Log.debug("OidcClient.createSigninRequest");var E=this._settings.client_id;n=n||this._settings.response_type,i=i||this._settings.scope,s=s||this._settings.redirect_uri,l=l||this._settings.prompt,p=p||this._settings.display,f=f||this._settings.max_age,d=d||this._settings.ui_locales,_=_||this._settings.acr_values,v=v||this._settings.resource,b=b||this._settings.response_mode,S=S||this._settings.extraQueryParams;var L=this._settings.authority;return a.SigninRequest.isCode(n)&&"code"!==n?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then(function(e){o.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",e);var r=new a.SigninRequest({url:e,client_id:E,redirect_uri:s,response_type:n,scope:i,data:u||c,authority:L,prompt:l,display:p,max_age:f,ui_locales:d,id_token_hint:h,login_hint:g,acr_values:_,resource:v,request:y,request_uri:m,extraQueryParams:S,extraTokenParams:w,request_type:k,response_mode:b,client_secret:t._settings.client_secret,skipUserInfo:T}),R=r.state;return(P=P||t._stateStore).set(R.id,R.toStorageString()).then(function(){return r})})},e.prototype.readSigninResponseState=function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];o.Log.debug("OidcClient.readSigninResponseState");var i="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",s=new u.SigninResponse(t,i);return s.state?(r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(s.state).then(function(e){if(!e)throw o.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:p.SigninState.fromStorageString(e),response:s}})):(o.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},e.prototype.processSigninResponse=function e(t,r){var n=this;return o.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(t,r,!0).then(function(e){var t=e.state,r=e.response;return o.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),n._validator.validateSigninResponse(t,r)})},e.prototype.createSignoutRequest=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.id_token_hint,i=r.data,s=r.state,a=r.post_logout_redirect_uri,u=r.extraQueryParams,l=r.request_type,p=arguments[1];return o.Log.debug("OidcClient.createSignoutRequest"),a=a||this._settings.post_logout_redirect_uri,u=u||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then(function(e){if(!e)throw o.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");o.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",e);var r=new c.SignoutRequest({url:e,id_token_hint:n,post_logout_redirect_uri:a,data:i||s,extraQueryParams:u,request_type:l}),f=r.state;return f&&(o.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(p=p||t._stateStore).set(f.id,f.toStorageString())),r})},e.prototype.readSignoutResponseState=function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];o.Log.debug("OidcClient.readSignoutResponseState");var i=new l.SignoutResponse(t);if(!i.state)return o.Log.debug("OidcClient.readSignoutResponseState: No state in response"),i.error?(o.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",i.error),Promise.reject(new s.ErrorResponse(i))):Promise.resolve({undefined:void 0,response:i});var a=i.state;return r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(a).then(function(e){if(!e)throw o.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:f.State.fromStorageString(e),response:i}})},e.prototype.processSignoutResponse=function e(t,r){var n=this;return o.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(t,r,!0).then(function(e){var t=e.state,r=e.response;return t?(o.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),n._validator.validateSignoutResponse(t,r)):(o.Log.debug("OidcClient.processSignoutResponse: No state from storage; skipping validating response"),r)})},e.prototype.clearStaleState=function e(t){return o.Log.debug("OidcClient.clearStaleState"),t=t||this._stateStore,f.State.clearStaleState(t,this.settings.staleStateAge)},n(e,[{key:"_stateStore",get:function e(){return this.settings.stateStore}},{key:"_validator",get:function e(){return this.settings.validator}},{key:"_metadataService",get:function e(){return this.settings.metadataService}},{key:"settings",get:function e(){return this._settings}},{key:"metadataService",get:function e(){return this._metadataService}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenClient=void 0;var n=r(37),o=r(9),i=r(0);t.TokenClient=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.MetadataService;if(function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw i.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new r,this._metadataService=new s(this._settings)}return e.prototype.exchangeCode=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"authorization_code",r.client_id=r.client_id||this._settings.client_id,r.redirect_uri=r.redirect_uri||this._settings.redirect_uri,r.code?r.redirect_uri?r.code_verifier?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(e){return i.Log.debug("TokenClient.exchangeCode: Received token endpoint"),t._jsonService.postForm(e,r).then(function(e){return i.Log.debug("TokenClient.exchangeCode: response received"),e})}):(i.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(i.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(i.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(i.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},e.prototype.exchangeRefreshToken=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"refresh_token",r.client_id=r.client_id||this._settings.client_id,r.client_secret=r.client_secret||this._settings.client_secret,r.refresh_token?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(e){return i.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),t._jsonService.postForm(e,r).then(function(e){return i.Log.debug("TokenClient.exchangeRefreshToken: response received"),e})}):(i.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(i.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ErrorResponse=void 0;var n=r(0);t.ErrorResponse=function(e){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=r.error,i=r.error_description,s=r.error_uri,a=r.state,u=r.session_state;if(function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),!o)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var l=function p(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,i||o));return l.name="ErrorResponse",l.error=o,l.error_description=i,l.error_uri=s,l.state=a,l.session_state=u,l}return function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(Error)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninRequest=void 0;var n=r(0),o=r(16),i=r(53);t.SigninRequest=function(){function e(t){var r=t.url,s=t.client_id,a=t.redirect_uri,u=t.response_type,c=t.scope,l=t.authority,p=t.data,f=t.prompt,d=t.display,h=t.max_age,g=t.ui_locales,_=t.id_token_hint,v=t.login_hint,y=t.acr_values,m=t.resource,b=t.response_mode,S=t.request,w=t.request_uri,k=t.extraQueryParams,T=t.request_type,P=t.client_secret,E=t.extraTokenParams,L=t.skipUserInfo;if(function R(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!r)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!s)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!a)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!u)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!c)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!l)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var x=e.isOidc(u),C=e.isCode(u);b||(b=e.isCode(u)?"query":null),this.state=new i.SigninState({nonce:x,data:p,client_id:s,authority:l,redirect_uri:a,code_verifier:C,request_type:T,response_mode:b,client_secret:P,scope:c,extraTokenParams:E,skipUserInfo:L}),r=o.UrlUtility.addQueryParam(r,"client_id",s),r=o.UrlUtility.addQueryParam(r,"redirect_uri",a),r=o.UrlUtility.addQueryParam(r,"response_type",u),r=o.UrlUtility.addQueryParam(r,"scope",c),r=o.UrlUtility.addQueryParam(r,"state",this.state.id),x&&(r=o.UrlUtility.addQueryParam(r,"nonce",this.state.nonce)),C&&(r=o.UrlUtility.addQueryParam(r,"code_challenge",this.state.code_challenge),r=o.UrlUtility.addQueryParam(r,"code_challenge_method","S256"));var U={prompt:f,display:d,max_age:h,ui_locales:g,id_token_hint:_,login_hint:v,acr_values:y,resource:m,request:S,request_uri:w,response_mode:b};for(var M in U)U[M]&&(r=o.UrlUtility.addQueryParam(r,M,U[M]));for(var O in k)r=o.UrlUtility.addQueryParam(r,O,k[O]);this.url=r}return e.isOidc=function e(t){return!!t.split(/\s+/g).filter(function(e){return"id_token"===e})[0]},e.isOAuth=function e(t){return!!t.split(/\s+/g).filter(function(e){return"token"===e})[0]},e.isCode=function e(t){return!!t.split(/\s+/g).filter(function(e){return"code"===e})[0]},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninState=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.nonce,o=r.authority,i=r.client_id,u=r.redirect_uri,c=r.code_verifier,l=r.response_mode,p=r.client_secret,f=r.scope,d=r.extraTokenParams,h=r.skipUserInfo;!function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var _=function v(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,arguments[0]));if(!0===n?_._nonce=(0,a.default)():n&&(_._nonce=n),!0===c?_._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():c&&(_._code_verifier=c),_.code_verifier){var y=s.JoseUtil.hashString(_.code_verifier,"SHA256");_._code_challenge=s.JoseUtil.hexToBase64Url(y)}return _._redirect_uri=u,_._authority=o,_._client_id=i,_._response_mode=l,_._client_secret=p,_._scope=f,_._extraTokenParams=d,_._skipUserInfo=h,_}return function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.toStorageString=function e(){return o.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode,client_secret:this.client_secret,scope:this.scope,extraTokenParams:this.extraTokenParams,skipUserInfo:this.skipUserInfo})},t.fromStorageString=function e(r){return o.Log.debug("SigninState.fromStorageString"),new t(JSON.parse(r))},n(t,[{key:"nonce",get:function e(){return this._nonce}},{key:"authority",get:function e(){return this._authority}},{key:"client_id",get:function e(){return this._client_id}},{key:"redirect_uri",get:function e(){return this._redirect_uri}},{key:"code_verifier",get:function e(){return this._code_verifier}},{key:"code_challenge",get:function e(){return this._code_challenge}},{key:"response_mode",get:function e(){return this._response_mode}},{key:"client_secret",get:function e(){return this._client_secret}},{key:"scope",get:function e(){return this._scope}},{key:"extraTokenParams",get:function e(){return this._extraTokenParams}},{key:"skipUserInfo",get:function e(){return this._skipUserInfo}}]),t}(i.State)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function n(){return(0,o.default)().replace(/-/g,"")};var o=function i(e){return e&&e.__esModule?e:{default:e}}(r(122));e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.User=void 0;var n=function(){function e(e,t){for(var r=0;r0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function e(){var t=this.expires_in;if(void 0!==t)return t<=0}},{key:"scopes",get:function e(){return(this.scope||"").split(" ")}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AccessTokenEvents=void 0;var n=r(0),o=r(137);var i=60;t.AccessTokenEvents=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.accessTokenExpiringNotificationTime,n=void 0===r?i:r,s=t.accessTokenExpiringTimer,a=void 0===s?new o.Timer("Access token expiring"):s,u=t.accessTokenExpiredTimer,c=void 0===u?new o.Timer("Access token expired"):u;!function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._accessTokenExpiringNotificationTime=n,this._accessTokenExpiring=a,this._accessTokenExpired=c}return e.prototype.load=function e(t){if(t.access_token&&void 0!==t.expires_in){var r=t.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",r),r>0){var o=r-this._accessTokenExpiringNotificationTime;o<=0&&(o=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",o),this._accessTokenExpiring.init(o)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var i=r+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",i),this._accessTokenExpired.init(i)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.unload=function e(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.addAccessTokenExpiring=function e(t){this._accessTokenExpiring.addHandler(t)},e.prototype.removeAccessTokenExpiring=function e(t){this._accessTokenExpiring.removeHandler(t)},e.prototype.addAccessTokenExpired=function e(t){this._accessTokenExpired.addHandler(t)},e.prototype.removeAccessTokenExpired=function e(t){this._accessTokenExpired.removeHandler(t)},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Event=void 0;var n=r(0);t.Event=function(){function e(t){!function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._name=t,this._callbacks=[]}return e.prototype.addHandler=function e(t){this._callbacks.push(t)},e.prototype.removeHandler=function e(t){var r=this._callbacks.findIndex(function(e){return e===t});r>=0&&this._callbacks.splice(r,1)},e.prototype.raise=function e(){n.Log.debug("Event: Raising event: "+this._name);for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:i.CheckSessionIFrame,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.Global.timer;if(function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw o.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=t,this._CheckSessionIFrameCtor=n,this._timer=a,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then(function(e){e?r._start(e):r._settings.monitorAnonymousSession&&r._userManager.querySessionStatus().then(function(e){var t={session_state:e.session_state};e.sub&&e.sid&&(t.profile={sub:e.sub,sid:e.sid}),r._start(t)}).catch(function(e){o.Log.error("SessionMonitor ctor: error from querySessionStatus:",e.message)})}).catch(function(e){o.Log.error("SessionMonitor ctor: error from getUser:",e.message)})}return e.prototype._start=function e(t){var r=this,n=t.session_state;n&&(t.profile?(this._sub=t.profile.sub,this._sid=t.profile.sid,o.Log.debug("SessionMonitor._start: session_state:",n,", sub:",this._sub)):(this._sub=void 0,this._sid=void 0,o.Log.debug("SessionMonitor._start: session_state:",n,", anonymous user")),this._checkSessionIFrame?this._checkSessionIFrame.start(n):this._metadataService.getCheckSessionIframe().then(function(e){if(e){o.Log.debug("SessionMonitor._start: Initializing check session iframe");var t=r._client_id,i=r._checkSessionInterval,s=r._stopCheckSessionOnError;r._checkSessionIFrame=new r._CheckSessionIFrameCtor(r._callback.bind(r),t,e,i,s),r._checkSessionIFrame.load().then(function(){r._checkSessionIFrame.start(n)})}else o.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")}).catch(function(e){o.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",e.message)}))},e.prototype._stop=function e(){var t=this;if(this._sub=void 0,this._sid=void 0,this._checkSessionIFrame&&(o.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop()),this._settings.monitorAnonymousSession)var r=this._timer.setInterval(function(){t._timer.clearInterval(r),t._userManager.querySessionStatus().then(function(e){var r={session_state:e.session_state};e.sub&&e.sid&&(r.profile={sub:e.sub,sid:e.sid}),t._start(r)}).catch(function(e){o.Log.error("SessionMonitor: error from querySessionStatus:",e.message)})},1e3)},e.prototype._callback=function e(){var t=this;this._userManager.querySessionStatus().then(function(e){var r=!0;e?e.sub===t._sub?(r=!1,t._checkSessionIFrame.start(e.session_state),e.sid===t._sid?o.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",e.session_state):(o.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",e.session_state),t._userManager.events._raiseUserSessionChanged())):o.Log.debug("SessionMonitor._callback: Different subject signed into OP:",e.sub):o.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(t._sub?(o.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),t._userManager.events._raiseUserSignedOut()):(o.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed in event"),t._userManager.events._raiseUserSignedIn()))}).catch(function(e){t._sub&&(o.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",e.message),t._userManager.events._raiseUserSignedOut())})},n(e,[{key:"_settings",get:function e(){return this._userManager.settings}},{key:"_metadataService",get:function e(){return this._userManager.metadataService}},{key:"_client_id",get:function e(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function e(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function e(){return this._settings.stopCheckSessionOnError}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CheckSessionIFrame=void 0;var n=r(0);var o=2e3;t.CheckSessionIFrame=function(){function e(t,r,n,i){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._callback=t,this._client_id=r,this._url=n,this._interval=i||o,this._stopOnError=s;var u=n.indexOf("/",n.indexOf("//")+2);this._frame_origin=n.substr(0,u),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=n}return e.prototype.load=function e(){var t=this;return new Promise(function(e){t._frame.onload=function(){e()},window.document.body.appendChild(t._frame),t._boundMessageEvent=t._message.bind(t),window.addEventListener("message",t._boundMessageEvent,!1)})},e.prototype._message=function e(t){t.origin===this._frame_origin&&t.source===this._frame.contentWindow&&("error"===t.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===t.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+t.data+" message from check session op iframe"))},e.prototype.start=function e(t){var r=this;if(this._session_state!==t){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=t;var o=function e(){r._frame.contentWindow.postMessage(r._client_id+" "+r._session_state,r._frame_origin)};o(),this._timer=window.setInterval(o,this._interval)}},e.prototype.stop=function e(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenRevocationClient=void 0;var n=r(0),o=r(9),i=r(4);t.TokenRevocationClient=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.MetadataService;if(function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=t,this._XMLHttpRequestCtor=r,this._metadataService=new s(this._settings)}return e.prototype.revoke=function e(t,r){var o=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!t)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==i&&"refresh_token"!=i)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then(function(e){if(e){n.Log.debug("TokenRevocationClient.revoke: Revoking "+i);var s=o._settings.client_id,a=o._settings.client_secret;return o._revoke(e,s,a,t,i)}if(r)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")})},e.prototype._revoke=function e(t,r,o,i,s){var a=this;return new Promise(function(e,u){var c=new a._XMLHttpRequestCtor;c.open("POST",t),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?e():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var l="client_id="+encodeURIComponent(r);o&&(l+="&client_secret="+encodeURIComponent(o)),l+="&token_type_hint="+encodeURIComponent(s),l+="&token="+encodeURIComponent(i),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(l)})},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CordovaPopupWindow=void 0;var n=function(){function e(e,t){for(var r=0;r=t.length?{value:void 0,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})})},function(e,t,r){var n=r(26),o=r(27);e.exports=function(e){return function(t,r){var i,s,a=String(o(t)),u=n(r),c=a.length;return u<0||u>=c?e?"":void 0:(i=a.charCodeAt(u))<55296||i>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?e?a.charAt(u):i:e?a.slice(u,u+2):s-56320+(i-55296<<10)+65536}}},function(e,t,r){"use strict";var n=r(72),o=r(39),i=r(33),s={};r(8)(s,r(1)("iterator"),function(){return this}),e.exports=function(e,t,r){e.prototype=n(s,{next:o(1,r)}),i(e,t+" Iterator")}},function(e,t,r){var n=r(5),o=r(73),i=r(41),s=r(32)("IE_PROTO"),a=function(){},u=function(){var e,t=r(25)("iframe"),n=i.length;for(t.style.display="none",r(42).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("