appium-adb 9.2.3 → 9.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/adb.js +19 -1
- package/build/lib/helpers.js +1 -1
- package/build/lib/logcat.js +1 -1
- package/build/lib/logger.js +1 -1
- package/build/lib/tools/aab-utils.js +1 -1
- package/build/lib/tools/adb-commands.js +1 -1
- package/build/lib/tools/adb-emu-commands.js +1 -1
- package/build/lib/tools/android-manifest.js +1 -1
- package/build/lib/tools/apk-signing.js +1 -1
- package/build/lib/tools/apk-utils.js +1 -1
- package/build/lib/tools/apks-utils.js +1 -1
- package/build/lib/tools/keyboard-commands.js +1 -1
- package/build/lib/tools/lockmgmt.js +1 -1
- package/build/lib/tools/settings-client-commands.js +1 -1
- package/build/lib/tools/system-calls.js +27 -11
- package/lib/adb.js +23 -0
- package/lib/tools/system-calls.js +40 -9
- package/package.json +2 -2
package/build/lib/adb.js
CHANGED
|
@@ -85,6 +85,24 @@ class ADB {
|
|
|
85
85
|
this.executable.defaultArgs.push('-P', this.adbPort);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
clone(opts = {}) {
|
|
89
|
+
const originalOptions = _lodash.default.cloneDeep(_lodash.default.pick(this, Object.keys(DEFAULT_OPTS)));
|
|
90
|
+
|
|
91
|
+
const cloneOptions = _lodash.default.defaultsDeep(opts, originalOptions);
|
|
92
|
+
|
|
93
|
+
const defaultArgs = cloneOptions.executable.defaultArgs;
|
|
94
|
+
|
|
95
|
+
if (cloneOptions.remoteAdbHost && defaultArgs.includes('-H')) {
|
|
96
|
+
defaultArgs.splice(defaultArgs.indexOf('-H'), 2);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (defaultArgs.includes('-P')) {
|
|
100
|
+
defaultArgs.splice(defaultArgs.indexOf('-P'), 2);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return new ADB(cloneOptions);
|
|
104
|
+
}
|
|
105
|
+
|
|
88
106
|
}
|
|
89
107
|
|
|
90
108
|
exports.ADB = ADB;
|
|
@@ -111,4 +129,4 @@ var _default = ADB;
|
|
|
111
129
|
exports.default = _default;require('source-map-support').install();
|
|
112
130
|
|
|
113
131
|
|
|
114
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
132
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2FkYi5qcyIsIm5hbWVzIjpbIkRFRkFVTFRfQURCX1BPUlQiLCJERUZBVUxUX09QVFMiLCJzZGtSb290IiwiZ2V0U2RrUm9vdEZyb21FbnYiLCJ1ZGlkIiwiYXBwRGV2aWNlUmVhZHlUaW1lb3V0IiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsImV4ZWN1dGFibGUiLCJwYXRoIiwiZGVmYXVsdEFyZ3MiLCJ0bXBEaXIiLCJvcyIsInRtcGRpciIsImN1ckRldmljZUlkIiwiZW11bGF0b3JQb3J0IiwibG9nY2F0IiwiYmluYXJpZXMiLCJpbnN0cnVtZW50UHJvYyIsInN1cHByZXNzS2lsbFNlcnZlciIsImphcnMiLCJhZGJQb3J0IiwiYWRiSG9zdCIsImFkYkV4ZWNUaW1lb3V0IiwiREVGQVVMVF9BREJfRVhFQ19USU1FT1VUIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsImFsbG93T2ZmbGluZURldmljZXMiLCJhbGxvd0RlbGF5QWRiIiwiQURCIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiT2JqZWN0IiwiYXNzaWduIiwiXyIsImRlZmF1bHRzRGVlcCIsImNsb25lRGVlcCIsInJlbW90ZUFkYkhvc3QiLCJwdXNoIiwicmVtb3RlQWRiUG9ydCIsImNsb25lIiwib3JpZ2luYWxPcHRpb25zIiwicGljayIsImtleXMiLCJjbG9uZU9wdGlvbnMiLCJpbmNsdWRlcyIsInNwbGljZSIsImluZGV4T2YiLCJjcmVhdGVBREIiLCJhZGIiLCJyZXF1aXJlU2RrUm9vdCIsImdldEFkYldpdGhDb3JyZWN0QWRiUGF0aCIsImFkYkV4ZWMiLCJlIiwibG9nIiwid2FybiIsInN0ZGVyciIsIm1lc3NhZ2UiLCJmbk5hbWUiLCJmbiIsInRvUGFpcnMiLCJtZXRob2RzIiwicHJvdG90eXBlIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2FkYi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBtZXRob2RzLCB7IGdldEFuZHJvaWRCaW5hcnlQYXRoIH0gZnJvbSAnLi90b29scy9pbmRleC5qcyc7XG5pbXBvcnQge1xuICBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQsIHJlcXVpcmVTZGtSb290LCBnZXRTZGtSb290RnJvbUVudlxufSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlci5qcyc7XG5cbmNvbnN0IERFRkFVTFRfQURCX1BPUlQgPSA1MDM3O1xuY29uc3QgREVGQVVMVF9PUFRTID0ge1xuICBzZGtSb290OiBnZXRTZGtSb290RnJvbUVudigpIHx8IG51bGwsXG4gIHVkaWQ6IG51bGwsXG4gIGFwcERldmljZVJlYWR5VGltZW91dDogbnVsbCxcbiAgdXNlS2V5c3RvcmU6IG51bGwsXG4gIGtleXN0b3JlUGF0aDogbnVsbCxcbiAga2V5c3RvcmVQYXNzd29yZDogbnVsbCxcbiAga2V5QWxpYXM6IG51bGwsXG4gIGtleVBhc3N3b3JkOiBudWxsLFxuICBleGVjdXRhYmxlOiB7cGF0aDogJ2FkYicsIGRlZmF1bHRBcmdzOiBbXX0sXG4gIHRtcERpcjogb3MudG1wZGlyKCksXG4gIGN1ckRldmljZUlkOiBudWxsLFxuICBlbXVsYXRvclBvcnQ6IG51bGwsXG4gIGxvZ2NhdDogbnVsbCxcbiAgYmluYXJpZXM6IHt9LFxuICBpbnN0cnVtZW50UHJvYzogbnVsbCxcbiAgc3VwcHJlc3NLaWxsU2VydmVyOiBudWxsLFxuICBqYXJzOiB7fSxcbiAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgYWRiSG9zdDogbnVsbCxcbiAgYWRiRXhlY1RpbWVvdXQ6IERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCxcbiAgcmVtb3RlQXBwc0NhY2hlTGltaXQ6IDEwLFxuICBidWlsZFRvb2xzVmVyc2lvbjogbnVsbCxcbiAgYWxsb3dPZmZsaW5lRGV2aWNlczogZmFsc2UsXG4gIGFsbG93RGVsYXlBZGI6IHRydWUsXG59O1xuXG5jbGFzcyBBREIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBvcHRzKTtcbiAgICBfLmRlZmF1bHRzRGVlcCh0aGlzLCBfLmNsb25lRGVlcChERUZBVUxUX09QVFMpKTtcblxuICAgIGlmIChvcHRzLnJlbW90ZUFkYkhvc3QpIHtcbiAgICAgIHRoaXMuZXhlY3V0YWJsZS5kZWZhdWx0QXJncy5wdXNoKCctSCcsIG9wdHMucmVtb3RlQWRiSG9zdCk7XG4gICAgICB0aGlzLmFkYkhvc3QgPSBvcHRzLnJlbW90ZUFkYkhvc3Q7XG4gICAgfVxuICAgIC8vIFRPRE8gZmlndXJlIG91dCB3aHkgd2UgaGF2ZSB0aGlzIG9wdGlvbiBhcyBpdCBkb2VzIG5vdCBhcHBlYXIgdG8gYmVcbiAgICAvLyB1c2VkIGFueXdoZXJlLiBQcm9iYWJseSBkZXByZWNhdGUgaW4gZmF2b3Igb2Ygc2ltcGxlIG9wdHMuYWRiUG9ydFxuICAgIGlmIChvcHRzLnJlbW90ZUFkYlBvcnQpIHtcbiAgICAgIHRoaXMuYWRiUG9ydCA9IG9wdHMucmVtb3RlQWRiUG9ydDtcbiAgICB9XG4gICAgdGhpcy5leGVjdXRhYmxlLmRlZmF1bHRBcmdzLnB1c2goJy1QJywgdGhpcy5hZGJQb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYEFEQmAgdGhhdCBpbmhlcml0cyBjb25maWd1cmF0aW9uIGZyb20gdGhpcyBgQURCYCBpbnN0YW5jZS5cbiAgICogVGhpcyBhdm9pZHMgdGhlIG5lZWQgdG8gY2FsbCBgQURCLmNyZWF0ZUFEQigpYCBtdWx0aXBsZSB0aW1lcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdHMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgbWFwcGluZyB0byBwYXNzIHRvIHRoZSBgQURCYCBjb25zdHJ1Y3Rvci5cbiAgICogQHJldHVybnMge0FEQn0gVGhlIHJlc3VsdGluZyBjbGFzcyBpbnN0YW5jZS5cbiAgICovXG4gIGNsb25lIChvcHRzID0ge30pIHtcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbnMgPSBfLmNsb25lRGVlcChfLnBpY2sodGhpcywgT2JqZWN0LmtleXMoREVGQVVMVF9PUFRTKSkpO1xuICAgIGNvbnN0IGNsb25lT3B0aW9ucyA9IF8uZGVmYXVsdHNEZWVwKG9wdHMsIG9yaWdpbmFsT3B0aW9ucyk7XG5cbiAgICAvLyBSZXNldCBkZWZhdWx0IGFyZ3VtZW50cyBjcmVhdGVkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAvLyBXaXRob3V0IHRoaXMgY29kZSwgLUggYW5kIC1QIGNhbiBiZSBpbmplY3RlZCBpbnRvIGRlZmF1bHRBcmdzIG11bHRpcGxlIHRpbWVzLlxuICAgIGNvbnN0IGRlZmF1bHRBcmdzID0gY2xvbmVPcHRpb25zLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3M7XG4gICAgaWYgKGNsb25lT3B0aW9ucy5yZW1vdGVBZGJIb3N0ICYmIGRlZmF1bHRBcmdzLmluY2x1ZGVzKCctSCcpKSB7XG4gICAgICBkZWZhdWx0QXJncy5zcGxpY2UoZGVmYXVsdEFyZ3MuaW5kZXhPZignLUgnKSwgMik7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0QXJncy5pbmNsdWRlcygnLVAnKSkge1xuICAgICAgZGVmYXVsdEFyZ3Muc3BsaWNlKGRlZmF1bHRBcmdzLmluZGV4T2YoJy1QJyksIDIpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQURCKGNsb25lT3B0aW9ucyk7XG4gIH1cbn1cblxuQURCLmNyZWF0ZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFEQiAob3B0cykge1xuICBjb25zdCBhZGIgPSBuZXcgQURCKG9wdHMpO1xuICBhZGIuc2RrUm9vdCA9IGF3YWl0IHJlcXVpcmVTZGtSb290KGFkYi5zZGtSb290KTtcbiAgYXdhaXQgYWRiLmdldEFkYldpdGhDb3JyZWN0QWRiUGF0aCgpO1xuICB0cnkge1xuICAgIGF3YWl0IGFkYi5hZGJFeGVjKFsnc3RhcnQtc2VydmVyJ10pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLndhcm4oZS5zdGRlcnIgfHwgZS5tZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gYWRiO1xufTtcblxuLy8gYWRkIGFsbCB0aGUgbWV0aG9kcyB0byB0aGUgQURCIHByb3RvdHlwZVxuZm9yIChjb25zdCBbZm5OYW1lLCBmbl0gb2YgXy50b1BhaXJzKG1ldGhvZHMpKSB7XG4gIEFEQi5wcm90b3R5cGVbZm5OYW1lXSA9IGZuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBBREI7XG5leHBvcnQgeyBBREIsIERFRkFVTFRfQURCX1BPUlQsIGdldEFuZHJvaWRCaW5hcnlQYXRoLCBnZXRTZGtSb290RnJvbUVudiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOzs7Ozs7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxJQUF6Qjs7QUFDQSxNQUFNQyxZQUFZLEdBQUc7RUFDbkJDLE9BQU8sRUFBRSxJQUFBQywwQkFBQSxPQUF1QixJQURiO0VBRW5CQyxJQUFJLEVBQUUsSUFGYTtFQUduQkMscUJBQXFCLEVBQUUsSUFISjtFQUluQkMsV0FBVyxFQUFFLElBSk07RUFLbkJDLFlBQVksRUFBRSxJQUxLO0VBTW5CQyxnQkFBZ0IsRUFBRSxJQU5DO0VBT25CQyxRQUFRLEVBQUUsSUFQUztFQVFuQkMsV0FBVyxFQUFFLElBUk07RUFTbkJDLFVBQVUsRUFBRTtJQUFDQyxJQUFJLEVBQUUsS0FBUDtJQUFjQyxXQUFXLEVBQUU7RUFBM0IsQ0FUTztFQVVuQkMsTUFBTSxFQUFFQyxXQUFBLENBQUdDLE1BQUgsRUFWVztFQVduQkMsV0FBVyxFQUFFLElBWE07RUFZbkJDLFlBQVksRUFBRSxJQVpLO0VBYW5CQyxNQUFNLEVBQUUsSUFiVztFQWNuQkMsUUFBUSxFQUFFLEVBZFM7RUFlbkJDLGNBQWMsRUFBRSxJQWZHO0VBZ0JuQkMsa0JBQWtCLEVBQUUsSUFoQkQ7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
|
package/build/lib/helpers.js
CHANGED
|
@@ -865,4 +865,4 @@ function escapeShellArg(arg) {
|
|
|
865
865
|
}require('source-map-support').install();
|
|
866
866
|
|
|
867
867
|
|
|
868
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2hlbHBlcnMuanMiLCJuYW1lcyI6WyJyb290RGlyIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIkFQS1NfRVhURU5TSU9OIiwiQVBLX0VYVEVOU0lPTiIsIkFQS19JTlNUQUxMX1RJTUVPVVQiLCJBUEtTX0lOU1RBTExfVElNRU9VVCIsIkRFRkFVTFRfQURCX0VYRUNfVElNRU9VVCIsImdldFNka1Jvb3RGcm9tRW52IiwiQU5EUk9JRF9IT01FIiwiQU5EUk9JRF9TREtfUk9PVCIsInJlcXVpcmVTZGtSb290IiwiY3VzdG9tUm9vdCIsInNka1Jvb3QiLCJkb2NNc2ciLCJfIiwiaXNFbXB0eSIsIkVycm9yIiwiZnMiLCJleGlzdHMiLCJzdGF0cyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgiLCJwcm9wc1BhdGhzIiwiZ2xvYiIsImN3ZCIsImFic29sdXRlIiwicGxhdGZvcm1zTWFwcGluZyIsInByb3BzUGF0aCIsInByb3BzQ29udGVudCIsInJlYWRGaWxlIiwicGxhdGZvcm1QYXRoIiwiZGlybmFtZSIsInBsYXRmb3JtIiwiYmFzZW5hbWUiLCJtYXRjaCIsImV4ZWMiLCJsb2ciLCJ3YXJuIiwicGFyc2VJbnQiLCJyZWNlbnRTZGtWZXJzaW9uIiwia2V5cyIsInNvcnQiLCJyZXZlcnNlIiwicmVzdWx0IiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwidW56aXBGaWxlIiwiemlwUGF0aCIsImRzdFJvb3QiLCJ6aXAiLCJhc3NlcnRWYWxpZFppcCIsImV4dHJhY3RBbGxUbyIsInVuc2lnbkFwayIsImFwa1BhdGgiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJtZXRhSW5mRm9sZGVyTmFtZSIsImhhc01ldGFJbmYiLCJyZWFkRW50cmllcyIsImVudHJ5IiwiZmlsZU5hbWUiLCJzdGFydHNXaXRoIiwidG1wWmlwUm9vdCIsInJpbXJhZiIsInRtcFJlc3VsdFBhdGgiLCJ0b0FyY2hpdmUiLCJ1bmxpbmsiLCJtdiIsImdldElNRUxpc3RGcm9tT3V0cHV0Iiwic3Rkb3V0IiwiZW5naW5lcyIsImxpbmUiLCJzcGxpdCIsImxlbmd0aCIsInB1c2giLCJ0cmltIiwicmVwbGFjZSIsImdldEphdmFIb21lIiwibWVtb2l6ZSIsIkpBVkFfSE9NRSIsImdldEphdmFGb3JPcyIsImphdmFIb21lIiwiZXJyTXNnIiwiZXJyIiwibWVzc2FnZSIsImV4ZWN1dGFibGVOYW1lIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwicmVzdWx0UGF0aCIsIndoaWNoIiwiaWduIiwiZ2V0T3BlblNzbEZvck9zIiwiYmluYXJ5TmFtZSIsImdldEFwa3NpZ25lckZvck9zIiwic3lzSGVscGVycyIsImdldEJpbmFyeUZyb21TZGtSb290IiwiZ2V0QXBrYW5hbHl6ZXJGb3JPcyIsImlzU2hvd2luZ0xvY2tzY3JlZW4iLCJkdW1wc3lzIiwic29tZSIsIngiLCJpbmNsdWRlcyIsImV2ZXJ5IiwidGVzdCIsImlzQ3VycmVudEZvY3VzT25LZXlndWFyZCIsIm0iLCJnZXRTdXJmYWNlT3JpZW50YXRpb24iLCJpc1NjcmVlbk9uRnVsbHkiLCJidWlsZFN0YXJ0Q21kIiwic3RhcnRBcHBPcHRpb25zIiwiYXBpTGV2ZWwiLCJ1c2VyIiwid2FpdEZvckxhdW5jaCIsInBrZyIsImFjdGl2aXR5IiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJzdG9wQXBwIiwiZmxhZ3MiLCJjbWQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsInBhcnNlS2V5VmFsdWUiLCJzdHIiLCJzcGFjZSIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJyZSIsImFyZ3MiLCJhcHBseSIsImZsYWciLCJmbGFnUG9zIiwicHJldkFyZ3MiLCJnZXRTZGtUb29sc1ZlcnNpb24iLCJhbmRyb2lkSG9tZSIsInByb3BlcnRpZXNQYXRoIiwicHJvcGVydGllc0NvbnRlbnQiLCJ2ZXJzaW9uTWF0Y2hlciIsIlJlZ0V4cCIsIm1ham9yIiwibWlub3IiLCJidWlsZCIsImdldEJ1aWxkVG9vbHNEaXJzIiwiYnVpbGRUb29sc0RpcnMiLCJtYXAiLCJkaXIiLCJhIiwiYiIsInNlbXZlciIsInJjb21wYXJlIiwicGFpciIsInBhaXJzIiwiQiIsIm10aW1lIiwidmFsdWVPZiIsImluZm8iLCJleHRyYWN0TWF0Y2hpbmdQZXJtaXNzaW9ucyIsImR1bXBzeXNPdXRwdXQiLCJncm91cE5hbWVzIiwiZ3JhbnRlZFN0YXRlIiwiZ3JvdXBQYXR0ZXJuQnlOYW1lIiwiZ3JvdXBOYW1lIiwiZXNjYXBlUmVnRXhwIiwiaW5kZW50UGF0dGVybiIsInBlcm1pc3Npb25OYW1lUGF0dGVybiIsImdyYW50ZWRTdGF0ZVBhdHRlcm4iLCJncm91cE1hdGNoIiwibGluZXMiLCJ0aXRsZUluZGVudCIsInNlYXJjaCIsInNsaWNlIiwiY3VycmVudEluZGVudCIsInBlcm1pc3Npb25OYW1lTWF0Y2giLCJpdGVtIiwicGVybWlzc2lvbiIsImdyYW50ZWRTdGF0ZU1hdGNoIiwiZ3JhbnRlZCIsImZpbHRlcmVkUmVzdWx0IiwiZmlsdGVyIiwiaXNCb29sZWFuIiwicGx1cmFsaXplIiwiYnVpbGRJbnN0YWxsQXJncyIsIm9wdGlvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsInVzZVNkY2FyZCIsImdyYW50UGVybWlzc2lvbnMiLCJwYXJ0aWFsSW5zdGFsbCIsInBhcnNlTWFuaWZlc3QiLCJtYW5pZmVzdCIsInBhY2thZ2UiLCJ2ZXJzaW9uQ29kZSIsInZlcnNpb25OYW1lIiwiYXBwbGljYXRpb24iLCJhY3Rpdml0aWVzIiwiYWN0aXZpdHlBbGlhc2VzIiwiZW5hYmxlZCIsImludGVudEZpbHRlcnMiLCJhY3Rpb25zIiwiY2F0ZWdvcmllcyIsImlzTWFpbkFjdGlvbiIsIm5hbWUiLCJpc0xhdW5jaGVyQ2F0ZWdvcnkiLCJwYXJzZUFhcHRTdHJpbmdzIiwicmF3T3V0cHV0IiwiY29uZmlnTWFya2VyIiwibm9ybWFsaXplU3RyaW5nTWF0Y2giLCJzIiwiYXBrU3RyaW5ncyIsImlzSW5Db25maWciLCJjdXJyZW50UmVzb3VyY2VJZCIsImlzSW5QbHVyYWxHcm91cCIsInF1b3RlZFN0cmluZ1BhdHRlcm4iLCJvcyIsIkVPTCIsInRyaW1tZWRMaW5lIiwicGFyc2VBYXB0MlN0cmluZ3MiLCJhbGxMaW5lcyIsImV4dHJhY3RDb250ZW50Iiwic3RhcnRJZHgiLCJpZHgiLCJzdGFydENoYXJQb3MiLCJ0ZXJtaW5hdGlvbkNoYXJNYXRjaCIsInRlcm1pbmF0aW9uQ2hhclBvcyIsImluZGV4IiwidHJpbVN0YXJ0IiwiaXNJbkN1cnJlbnRDb25maWciLCJsaW5lSW5kZXgiLCJjb250ZW50IiwiaXNTdHJpbmciLCJmb3JtYXRDb25maWdNYXJrZXIiLCJjb25maWdzR2V0dGVyIiwiZGVzaXJlZE1hcmtlciIsImRlZmF1bHRNYXJrZXIiLCJjb25maWdzIiwidG9Mb3dlckNhc2UiLCJwYXJzZUpzb25EYXRhIiwib3V0cHV0IiwiZW50aXR5TmFtZSIsImpzb25TdHIiLCJwYXJzZSIsImUiLCJ0b0F2ZExvY2FsZUFyZ3MiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJ0b1VwcGVyQ2FzZSIsImxvY2FsZSIsImdldEFuZHJvaWRQcmVmc1Jvb3QiLCJsb2NhdGlvbiIsIkFORFJPSURfRU1VTEFUT1JfSE9NRSIsImRpckV4aXN0cyIsImhvbWUiLCJIT01FIiwiVVNFUlBST0ZJTEUiLCJlc2NhcGVTaGVsbEFyZyIsImFyZyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgemlwLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5cbmNvbnN0IHJvb3REaXIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBwcm9jZXNzLmVudi5OT19QUkVDT01QSUxFID8gJy4uJyA6ICcuLi8uLicpO1xuY29uc3QgQVBLU19FWFRFTlNJT04gPSAnLmFwa3MnO1xuY29uc3QgQVBLX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IEFQS19JTlNUQUxMX1RJTUVPVVQgPSA2MDAwMDtcbmNvbnN0IEFQS1NfSU5TVEFMTF9USU1FT1VUID0gQVBLX0lOU1RBTExfVElNRU9VVCAqIDI7XG5jb25zdCBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQgPSAyMDAwMDsgLy8gaW4gbWlsbGlzZWNvbmRzXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhY3R1YWwgcGF0aCB0byBTREsgcm9vdCBmb2xkZXIgZnJvbSB0aGUgc3lzdGVtIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybiB7P3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKi9cbmZ1bmN0aW9uIGdldFNka1Jvb3RGcm9tRW52ICgpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkFORFJPSURfSE9NRSB8fCBwcm9jZXNzLmVudi5BTkRST0lEX1NES19ST09UO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBTREsgcm9vdCBmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBlaXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgZW52IHZhcmlhYmxlIGlzIHVuc2V0IG9yIGlzXG4gKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGZpbGUgc3lzdGVtIGVudHJ5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVTZGtSb290IChjdXN0b21Sb290ID0gbnVsbCkge1xuICBjb25zdCBzZGtSb290ID0gY3VzdG9tUm9vdCB8fCBnZXRTZGtSb290RnJvbUVudigpO1xuICBjb25zdCBkb2NNc2cgPSAnUmVhZCBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vY29tbWFuZC1saW5lL3ZhcmlhYmxlcyBmb3IgbW9yZSBkZXRhaWxzJztcbiAgaWYgKF8uaXNFbXB0eShzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTmVpdGhlciBBTkRST0lEX0hPTUUgbm9yIEFORFJPSURfU0RLX1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUgd2FzIGV4cG9ydGVkLiAke2RvY01zZ31gKTtcbiAgfVxuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHNka1Jvb3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCBmb2xkZXIgJyR7c2RrUm9vdH0nIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHNka1Jvb3QpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBbmRyb2lkIFNESyByb290ICcke3Nka1Jvb3R9JyBtdXN0IGJlIGEgZm9sZGVyLiAke2RvY01zZ31gKTtcbiAgfVxuICByZXR1cm4gc2RrUm9vdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQbGF0Zm9ybUluZm9cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm0gLSBUaGUgcGxhdGZvcm0gbmFtZSwgZm9yIGV4YW1wbGUgYGFuZHJvaWQtMjRgXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwbGF0Zm9ybVBhdGggLSBGdWxsIHBhdGggdG8gdGhlIHBsYXRmb3JtIFNESyBmb2xkZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICovXG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHBhdGggdG8gdGhlIHJlY2VudCBpbnN0YWxsZWQgQW5kcm9pZCBwbGF0Zm9ybS5cbiAqXG4gKiBAcmV0dXJuIHtQbGF0Zm9ybUluZm99IFRoZSByZXN1bHRpbmcgcGF0aCB0byB0aGUgbmV3ZXN0IGluc3RhbGxlZCBwbGF0Zm9ybS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCAoc2RrUm9vdCkge1xuICBjb25zdCBwcm9wc1BhdGhzID0gYXdhaXQgZnMuZ2xvYignKi9idWlsZC5wcm9wJywge1xuICAgIGN3ZDogcGF0aC5yZXNvbHZlKHNka1Jvb3QsICdwbGF0Zm9ybXMnKSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IHBsYXRmb3Jtc01hcHBpbmcgPSB7fTtcbiAgZm9yIChjb25zdCBwcm9wc1BhdGggb2YgcHJvcHNQYXRocykge1xuICAgIGNvbnN0IHByb3BzQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BzUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGxhdGZvcm1QYXRoID0gcGF0aC5kaXJuYW1lKHByb3BzUGF0aCk7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBwYXRoLmJhc2VuYW1lKHBsYXRmb3JtUGF0aCk7XG4gICAgY29uc3QgbWF0Y2ggPSAvcm9cXC5idWlsZFxcLnZlcnNpb25cXC5zZGs9KFxcZCspLy5leGVjKHByb3BzQ29udGVudCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCByZWFkIHRoZSBTREsgdmVyc2lvbiBmcm9tICcke3Byb3BzUGF0aH0nLiBTa2lwcGluZyAnJHtwbGF0Zm9ybX0nYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcGxhdGZvcm1zTWFwcGluZ1twYXJzZUludChtYXRjaFsxXSwgMTApXSA9IHtcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgcGxhdGZvcm1QYXRoLFxuICAgIH07XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShwbGF0Zm9ybXNNYXBwaW5nKSkge1xuICAgIGxvZy53YXJuKGBGb3VuZCB6ZXJvIHBsYXRmb3JtIGZvbGRlcnMgYXQgJyR7cGF0aC5yZXNvbHZlKHNka1Jvb3QsICdwbGF0Zm9ybXMnKX0nLiBgICtcbiAgICAgIGBEbyB5b3UgaGF2ZSBhbnkgQW5kcm9pZCBTREtzIGluc3RhbGxlZD9gKTtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IG51bGwsXG4gICAgICBwbGF0Zm9ybVBhdGg6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlY2VudFNka1ZlcnNpb24gPSBfLmtleXMocGxhdGZvcm1zTWFwcGluZykuc29ydCgpLnJldmVyc2UoKVswXTtcbiAgY29uc3QgcmVzdWx0ID0gcGxhdGZvcm1zTWFwcGluZ1tyZWNlbnRTZGtWZXJzaW9uXTtcbiAgbG9nLmRlYnVnKGBGb3VuZCB0aGUgbW9zdCByZWNlbnQgQW5kcm9pZCBwbGF0Zm9ybTogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bnppcEZpbGUgKHppcFBhdGgsIGRzdFJvb3QgPSBwYXRoLmRpcm5hbWUoemlwUGF0aCkpIHtcbiAgbG9nLmRlYnVnKGBVbnppcHBpbmcgJyR7emlwUGF0aH0nIHRvICcke2RzdFJvb3R9J2ApO1xuICBhd2FpdCB6aXAuYXNzZXJ0VmFsaWRaaXAoemlwUGF0aCk7XG4gIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oemlwUGF0aCwgZHN0Um9vdCk7XG4gIGxvZy5kZWJ1ZygnVW56aXAgc3VjY2Vzc2Z1bCcpO1xufVxuXG4vKipcbiAqIFVuc2lnbnMgdGhlIGdpdmVuIGFwayBieSByZW1vdmluZyB0aGVcbiAqIE1FVEEtSU5GIGZvbGRlciByZWN1cnNpdmVseSBmcm9tIHRoZSBhcmNoaXZlLlxuICogISEhIFRoZSBmdW5jdGlvbiBvdmVyd3JpdGVzIHRoZSBnaXZlbiBhcGsgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnNpZ25pbmcgISEhXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa1BhdGggVGhlIHBhdGggdG8gdGhlIGFwa1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYXBrIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseVxuICogdW5zaWduZWQgYW5kIG92ZXJ3cml0dGVuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyB0aGUgdW5zaWduIG9wZXJhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiB1bnNpZ25BcGsgKGFwa1BhdGgpIHtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCBtZXRhSW5mRm9sZGVyTmFtZSA9ICdNRVRBLUlORic7XG4gIHRyeSB7XG4gICAgbGV0IGhhc01ldGFJbmYgPSBmYWxzZTtcbiAgICBhd2FpdCB6aXAucmVhZEVudHJpZXMoYXBrUGF0aCwgKHtlbnRyeX0pID0+IHtcbiAgICAgIGhhc01ldGFJbmYgPSBlbnRyeS5maWxlTmFtZS5zdGFydHNXaXRoKGAke21ldGFJbmZGb2xkZXJOYW1lfS9gKTtcbiAgICAgIC8vIGVudHJpZXMgaXRlcmF0aW9uIHN0b3BzIGFmdGVyIGBmYWxzZWAgaXMgcmV0dXJuZWRcbiAgICAgIHJldHVybiAhaGFzTWV0YUluZjtcbiAgICB9KTtcbiAgICBpZiAoIWhhc01ldGFJbmYpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdG1wWmlwUm9vdCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAnYXBrJyk7XG4gICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhhcGtQYXRoLCB0bXBaaXBSb290KTtcbiAgICBhd2FpdCBmcy5yaW1yYWYocGF0aC5yZXNvbHZlKHRtcFppcFJvb3QsIG1ldGFJbmZGb2xkZXJOYW1lKSk7XG4gICAgY29uc3QgdG1wUmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCBwYXRoLmJhc2VuYW1lKGFwa1BhdGgpKTtcbiAgICBhd2FpdCB6aXAudG9BcmNoaXZlKHRtcFJlc3VsdFBhdGgsIHtcbiAgICAgIGN3ZDogdG1wWmlwUm9vdCxcbiAgICB9KTtcbiAgICBhd2FpdCBmcy51bmxpbmsoYXBrUGF0aCk7XG4gICAgYXdhaXQgZnMubXYodG1wUmVzdWx0UGF0aCwgYXBrUGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldElNRUxpc3RGcm9tT3V0cHV0IChzdGRvdXQpIHtcbiAgbGV0IGVuZ2luZXMgPSBbXTtcbiAgZm9yIChsZXQgbGluZSBvZiBzdGRvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoID4gMCAmJiBsaW5lWzBdICE9PSAnICcpIHtcbiAgICAgIC8vIHJlbW92ZSBuZXdsaW5lIGFuZCB0cmFpbGluZyBjb2xvbiwgYW5kIGFkZCB0byB0aGUgbGlzdFxuICAgICAgZW5naW5lcy5wdXNoKGxpbmUudHJpbSgpLnJlcGxhY2UoLzokLywgJycpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVuZ2luZXM7XG59XG5cbmNvbnN0IGdldEphdmFIb21lID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFIb21lICgpIHtcbiAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzcy5lbnYuSkFWQV9IT01FO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIEpBVkFfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IGZvciB0aGUgY3VycmVudCBwcm9jZXNzJyk7XG4gIH1cbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEpBVkFfSE9NRSBsb2NhdGlvbiAnJHtyZXN1bHR9JyBtdXN0IGV4aXN0YCk7XG4gIH1cbiAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHJlc3VsdCk7XG4gIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEpBVkFfSE9NRSBsb2NhdGlvbiAnJHtyZXN1bHR9JyBtdXN0IGJlIGEgdmFsaWQgZm9sZGVyYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5jb25zdCBnZXRKYXZhRm9yT3MgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0SmF2YUZvck9zICgpIHtcbiAgbGV0IGphdmFIb21lO1xuICBsZXQgZXJyTXNnO1xuICB0cnkge1xuICAgIGphdmFIb21lID0gYXdhaXQgZ2V0SmF2YUhvbWUoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyTXNnID0gZXJyLm1lc3NhZ2U7XG4gIH1cbiAgY29uc3QgZXhlY3V0YWJsZU5hbWUgPSBgamF2YSR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbiAgaWYgKGphdmFIb21lKSB7XG4gICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShqYXZhSG9tZSwgJ2JpbicsIGV4ZWN1dGFibGVOYW1lKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMud2hpY2goZXhlY3V0YWJsZU5hbWUpO1xuICB9IGNhdGNoIChpZ24pIHt9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlICcke2V4ZWN1dGFibGVOYW1lfScgYmluYXJ5IGNvdWxkIG5vdCBiZSBmb3VuZCBgICtcbiAgICBgbmVpdGhlciBpbiBQQVRIIG5vciB1bmRlciBKQVZBX0hPTUUgKCR7ZXJyTXNnIHx8IHBhdGgucmVzb2x2ZShqYXZhSG9tZSwgJ2JpbicpfSlgKTtcbn0pO1xuXG5jb25zdCBnZXRPcGVuU3NsRm9yT3MgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpbmFyeU5hbWUgPSBgb3BlbnNzbCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMud2hpY2goYmluYXJ5TmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG9wZW5zc2wgdG9vbCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtIGFuZCBhdmFpbGFibGUgb24gdGhlIHBhdGgnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggdG8gYXBrc2lnbmVyIHRvb2xcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3lzSGVscGVycyAtIEFuIGluc3RhbmNlIGNvbnRhaW5pbmcgc3lzdGVtQ2FsbE1ldGhvZHMgaGVscGVyIG1ldGhvZHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEFuIGFic29sdXRlIHBhdGggdG8gYXBrc2lnbmVyIHRvb2wuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHRvb2wgaXMgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBcGtzaWduZXJGb3JPcyAoc3lzSGVscGVycykge1xuICByZXR1cm4gYXdhaXQgc3lzSGVscGVycy5nZXRCaW5hcnlGcm9tU2RrUm9vdCgnYXBrc2lnbmVyLmphcicpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCB0byBhcGthbmFseXplciB0b29sLlxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS9hcGthbmFseXplci5odG1sXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN5c0hlbHBlcnMgLSBBbiBpbnN0YW5jZSBjb250YWluaW5nIHN5c3RlbUNhbGxNZXRob2RzIGhlbHBlciBtZXRob2RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBbiBhYnNvbHV0ZSBwYXRoIHRvIGFwa2FuYWx5emVyIHRvb2wuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHRvb2wgaXMgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBcGthbmFseXplckZvck9zIChzeXNIZWxwZXJzKSB7XG4gIHJldHVybiBhd2FpdCBzeXNIZWxwZXJzLmdldEJpbmFyeUZyb21TZGtSb290KCdhcGthbmFseXplcicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBtU2hvd2luZ0xvY2tzY3JlZW4gb3IgbURyZWFtaW5nTG9ja3NjcmVlbiBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmVcbiAqIGlmIGxvY2sgc2NyZWVuIGlzIHNob3dpbmdcbiAqXG4gKiBBIG5vdGU6IGBhZGIgc2hlbGwgZHVtcHN5cyB0cnVzdGAgcGVyZm9ybXMgYmV0dGVyIHdoaWxlIGRldGVjdGluZyB0aGUgbG9ja2VkIHNjcmVlbiBzdGF0ZVxuICogaW4gY29tcGFyaXNvbiB0byBgYWRiIGR1bXBzeXMgd2luZG93YCBvdXRwdXQgcGFyc2luZy5cbiAqIEJ1dCB0aGUgdHJ1c3QgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGZvciBgU3dpcGVgIHVubG9jayBwYXR0ZXJuLlxuICpcbiAqIEluIHNvbWUgQW5kcm9pZCBkZXZpY2VzIChQcm9iYWJseSBhcm91bmQgQW5kcm9pZCAxMCspLCBgbVNob3dpbmdMb2Nrc2NyZWVuYCBhbmQgYG1EcmVhbWluZ0xvY2tzY3JlZW5gXG4gKiBkbyBub3Qgd29yayB0byBkZXRlY3QgbG9jayBzdGF0dXMuIEluc3RlYWQsIGtleWd1YXJkIHByZWZlcmVuY2VzIGhlbHBzIHRvIGRldGVjdCB0aGUgbG9jayBjb25kaXRpb24uXG4gKiBTb21lIGRldmljZXMgc3VjaCBhcyBBbmRyb2lkIFRWIGRvIG5vdCBoYXZlIGtleWd1YXJkLCBzbyB3ZSBzaG91bGQga2VlcFxuICogc2NyZWVuIGNvbmRpdGlvbiBhcyB0aGlzIHByaW1hcnkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkdW1wc3lzIC0gVGhlIG91dHB1dCBvZiBkdW1wc3lzIHdpbmRvdyBjb21tYW5kLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBsb2NrIHNjcmVlbiBpcyBzaG93aW5nLlxuICovXG5mdW5jdGlvbiBpc1Nob3dpbmdMb2Nrc2NyZWVuIChkdW1wc3lzKSB7XG4gIHJldHVybiBfLnNvbWUoWydtU2hvd2luZ0xvY2tzY3JlZW49dHJ1ZScsICdtRHJlYW1pbmdMb2Nrc2NyZWVuPXRydWUnXSwgKHgpID0+IGR1bXBzeXMuaW5jbHVkZXMoeCkpXG4gICAgLy8gYG1Jc1Nob3dpbmdgIGFuZCBgbUlucHV0UmVzdHJpY3RlZGAgYXJlIGB0cnVlYCBpbiBsb2NrIGNvbmRpdGlvbi4gYGZhbHNlYCBpcyB1bmxvY2sgY29uZGl0aW9uLlxuICAgIHx8IF8uZXZlcnkoWy9LZXlndWFyZFN0YXRlTW9uaXRvcltcXG5cXHNdK21Jc1Nob3dpbmc9dHJ1ZS8sIC9cXHMrbUlucHV0UmVzdHJpY3RlZD10cnVlL10sICh4KSA9PiB4LnRlc3QoZHVtcHN5cykpO1xufVxuXG4vKlxuICogQ2hlY2tzIG1DdXJyZW50Rm9jdXMgaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lIGlmIEtleWd1YXJkIGlzIGFjdGl2YXRlZFxuICovXG5mdW5jdGlvbiBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQgKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvbUN1cnJlbnRGb2N1cy4rS2V5Z3VhcmQvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuIChtICYmIG0ubGVuZ3RoICYmIG1bMF0pID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKlxuICogUmVhZHMgU3VyZmFjZU9yaWVudGF0aW9uIGluIGR1bXBzeXMgb3V0cHV0XG4gKi9cbmZ1bmN0aW9uIGdldFN1cmZhY2VPcmllbnRhdGlvbiAoZHVtcHN5cykge1xuICBsZXQgbSA9IC9TdXJmYWNlT3JpZW50YXRpb246IFxcZC9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gbSAmJiBwYXJzZUludChtWzBdLnNwbGl0KCc6JylbMV0sIDEwKTtcbn1cblxuLypcbiAqIENoZWNrcyBtU2NyZWVuT25GdWxseSBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmUgaWYgc2NyZWVuIGlzIHNob3dpbmdcbiAqIERlZmF1bHQgaXMgdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1NjcmVlbk9uRnVsbHkgKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvbVNjcmVlbk9uRnVsbHk9XFx3Ky9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gIW0gfHwgLy8gaWYgaW5mb3JtYXRpb24gaXMgbWlzc2luZyB3ZSBhc3N1bWUgc2NyZWVuIGlzIGZ1bGx5IG9uXG4gICAgICAgICAobSAmJiBtLmxlbmd0aCA+IDAgJiYgbVswXS5zcGxpdCgnPScpWzFdID09PSAndHJ1ZScpIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb21tYW5kIGxpbmUgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBnaXZlblxuICogYXBwbGljYXRpb24gc3RhcnR1cCBvcHRpb25zXG4gKlxuICogQHBhcmFtIHtTdGFydEFwcE9wdGlvbnN9IHN0YXJ0QXBwT3B0aW9ucyAtIEFwcGxpY2F0aW9uIG9wdGlvbnMgbWFwcGluZ1xuICogQHBhcmFtIHtudW1iZXJ9IGFwaUxldmVsIC0gVGhlIGFjdHVhbCBPUyBBUEkgbGV2ZWxcbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgYWN0dWFsIGNvbW1hbmQgbGluZSBhcnJheVxuICovXG5mdW5jdGlvbiBidWlsZFN0YXJ0Q21kIChzdGFydEFwcE9wdGlvbnMsIGFwaUxldmVsKSB7XG4gIGNvbnN0IHtcbiAgICB1c2VyLFxuICAgIHdhaXRGb3JMYXVuY2gsXG4gICAgcGtnLFxuICAgIGFjdGl2aXR5LFxuICAgIGFjdGlvbixcbiAgICBjYXRlZ29yeSxcbiAgICBzdG9wQXBwLFxuICAgIGZsYWdzLFxuICB9ID0gc3RhcnRBcHBPcHRpb25zO1xuICBjb25zdCBjbWQgPSBbJ2FtJywgJ3N0YXJ0J107XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGlmICh3YWl0Rm9yTGF1bmNoKSB7XG4gICAgY21kLnB1c2goJy1XJyk7XG4gIH1cbiAgaWYgKGFjdGl2aXR5ICYmIHBrZykge1xuICAgIGNtZC5wdXNoKCctbicsIGAke3BrZ30vJHthY3Rpdml0eX1gKTtcbiAgfVxuICBpZiAoc3RvcEFwcCAmJiBhcGlMZXZlbCA+PSAxNSkge1xuICAgIGNtZC5wdXNoKCctUycpO1xuICB9XG4gIGlmIChhY3Rpb24pIHtcbiAgICBjbWQucHVzaCgnLWEnLCBhY3Rpb24pO1xuICB9XG4gIGlmIChjYXRlZ29yeSkge1xuICAgIGNtZC5wdXNoKCctYycsIGNhdGVnb3J5KTtcbiAgfVxuICBpZiAoZmxhZ3MpIHtcbiAgICBjbWQucHVzaCgnLWYnLCBmbGFncyk7XG4gIH1cbiAgaWYgKHN0YXJ0QXBwT3B0aW9ucy5vcHRpb25hbEludGVudEFyZ3VtZW50cykge1xuICAgIC8vIGV4cGVjdCBvcHRpb25hbEludGVudEFyZ3VtZW50cyB0byBiZSBhIHNpbmdsZSBzdHJpbmcgb2YgdGhlIGZvcm06XG4gICAgLy8gICAgIFwiLWZsYWcga2V5XCJcbiAgICAvLyAgICAgXCItZmxhZyBrZXkgdmFsdWVcIlxuICAgIC8vIG9yIGEgY29tYmluYXRpb24gb2YgdGhlc2UgKGUuZy4sIFwiLWZsYWcxIGtleTEgLWZsYWcyIGtleTIgdmFsdWUyXCIpXG5cbiAgICAvLyB0YWtlIGEgc3RyaW5nIGFuZCBwYXJzZSBvdXQgdGhlIHBhcnQgYmVmb3JlIGFueSBzcGFjZXMsIGFuZCBhbnl0aGluZyBhZnRlclxuICAgIC8vIHRoZSBmaXJzdCBzcGFjZVxuICAgIGxldCBwYXJzZUtleVZhbHVlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICAgIGxldCBzcGFjZSA9IHN0ci5pbmRleE9mKCcgJyk7XG4gICAgICBpZiAoc3BhY2UgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHIubGVuZ3RoID8gW3N0cl0gOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbc3RyLnN1YnN0cmluZygwLCBzcGFjZSkudHJpbSgpLCBzdHIuc3Vic3RyaW5nKHNwYWNlICsgMSkudHJpbSgpXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY3ljbGUgdGhyb3VnaCB0aGUgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgYW5kIHB1bGwgb3V0IHRoZSBhcmd1bWVudHNcbiAgICAvLyBhZGQgYSBzcGFjZSBpbml0aWFsbHkgc28gZmxhZ3MgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhcmd1bWVudHMgdGhhdFxuICAgIC8vIGhhdmUgaW50ZXJuYWwgaHlwaGVuc1xuICAgIGxldCBvcHRpb25hbEludGVudEFyZ3VtZW50cyA9IGAgJHtzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHN9YDtcbiAgICBsZXQgcmUgPSAvICgtW15cXHNdKykgKC4rKS87XG4gICAgd2hpbGUgKHRydWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgIGxldCBhcmdzID0gcmUuZXhlYyhvcHRpb25hbEludGVudEFyZ3VtZW50cyk7XG4gICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgaWYgKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIG5vIG1vcmUgZmxhZ3MsIHNvIHRoZSByZW1haW5kZXIgY2FuIGJlIHRyZWF0ZWQgYXMgJ2tleScgb3IgJ2tleSB2YWx1ZSdcbiAgICAgICAgICBjbWQucHVzaC5hcHBseShjbWQsIHBhcnNlS2V5VmFsdWUob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBhcmUgZG9uZVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gdGFrZSB0aGUgZmxhZyBhbmQgc2VlIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZ1xuICAgICAgLy8gaWYgaXQgaXMgbm90LCB0aGVuIGl0IG1lYW5zIHdlIGhhdmUgYmVlbiB0aHJvdWdoIGFscmVhZHksIGFuZFxuICAgICAgLy8gd2hhdCBpcyBiZWZvcmUgdGhlIGZsYWcgaXMgdGhlIGFyZ3VtZW50IGZvciB0aGUgcHJldmlvdXMgZmxhZ1xuICAgICAgbGV0IGZsYWcgPSBhcmdzWzFdO1xuICAgICAgbGV0IGZsYWdQb3MgPSBvcHRpb25hbEludGVudEFyZ3VtZW50cy5pbmRleE9mKGZsYWcpO1xuICAgICAgaWYgKGZsYWdQb3MgIT09IDApIHtcbiAgICAgICAgbGV0IHByZXZBcmdzID0gb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMuc3Vic3RyaW5nKDAsIGZsYWdQb3MpO1xuICAgICAgICBjbWQucHVzaC5hcHBseShjbWQsIHBhcnNlS2V5VmFsdWUocHJldkFyZ3MpKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRoZSBmbGFnLCBhcyB0aGVyZSBhcmUgbm8gbW9yZSBlYXJsaWVyIGFyZ3VtZW50c1xuICAgICAgY21kLnB1c2goZmxhZyk7XG5cbiAgICAgIC8vIG1ha2Ugb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgaG9sZCB0aGUgcmVtYWluZGVyXG4gICAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyA9IGFyZ3NbMl07XG4gICAgfVxuICB9XG4gIHJldHVybiBjbWQ7XG59XG5cbmNvbnN0IGdldFNka1Rvb2xzVmVyc2lvbiA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTZGtUb29sc1ZlcnNpb24gKCkge1xuICBjb25zdCBhbmRyb2lkSG9tZSA9IHByb2Nlc3MuZW52LkFORFJPSURfSE9NRTtcbiAgaWYgKCFhbmRyb2lkSG9tZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQU5EUk9JRF9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGV4cGVjdGVkIHRvIGJlIHNldCcpO1xuICB9XG4gIGNvbnN0IHByb3BlcnRpZXNQYXRoID0gcGF0aC5yZXNvbHZlKGFuZHJvaWRIb21lLCAndG9vbHMnLCAnc291cmNlLnByb3BlcnRpZXMnKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocHJvcGVydGllc1BhdGgpKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCBmaW5kICR7cHJvcGVydGllc1BhdGh9IGZpbGUgdG8gcmVhZCBTREsgdmVyc2lvbiBmcm9tYCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHByb3BlcnRpZXNDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocHJvcGVydGllc1BhdGgsICd1dGY4Jyk7XG4gIGNvbnN0IHZlcnNpb25NYXRjaGVyID0gbmV3IFJlZ0V4cCgvUGtnXFwuUmV2aXNpb249KFxcZCspXFwuPyhcXGQrKT9cXC4/KFxcZCspPy8pO1xuICBjb25zdCBtYXRjaCA9IHZlcnNpb25NYXRjaGVyLmV4ZWMocHJvcGVydGllc0NvbnRlbnQpO1xuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFqb3I6IHBhcnNlSW50KG1hdGNoWzFdLCAxMCksXG4gICAgICBtaW5vcjogbWF0Y2hbMl0gPyBwYXJzZUludChtYXRjaFsyXSwgMTApIDogMCxcbiAgICAgIGJ1aWxkOiBtYXRjaFszXSA/IHBhcnNlSW50KG1hdGNoWzNdLCAxMCkgOiAwXG4gICAgfTtcbiAgfVxuICBsb2cud2FybihgQ2Fubm90IHBhcnNlIFwiUGtnLlJldmlzaW9uXCIgdmFsdWUgZnJvbSAke3Byb3BlcnRpZXNQYXRofWApO1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIGZ1bGwgcGF0aHMgdG8gYWxsICdidWlsZC10b29scycgc3ViZm9sZGVycyB1bmRlciB0aGUgcGFydGljdWxhclxuICogU0RLIHJvb3QgZm9sZGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNka1Jvb3QgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBBbmRyb2lkIFNESyByb290IGZvbGRlclxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBmdWxsIHBhdGhzIHRvIHRoZSByZXN1bHRpbmcgZm9sZGVycyBzb3J0ZWQgYnlcbiAqIG1vZGlmaWNhdGlvbiBkYXRlICh0aGUgbmV3ZXN0IGNvbWVzIGZpcnN0KSBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIG1hY3RoZXMgd2VyZSBmb3VuZFxuICovXG5jb25zdCBnZXRCdWlsZFRvb2xzRGlycyA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRCdWlsZFRvb2xzRGlycyAoc2RrUm9vdCkge1xuICBsZXQgYnVpbGRUb29sc0RpcnMgPSBhd2FpdCBmcy5nbG9iKCcqLycsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAnYnVpbGQtdG9vbHMnKSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYnVpbGRUb29sc0RpcnMgPSBidWlsZFRvb2xzRGlyc1xuICAgICAgLm1hcCgoZGlyKSA9PiBbcGF0aC5iYXNlbmFtZShkaXIpLCBkaXJdKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHNlbXZlci5yY29tcGFyZShhWzBdLCBiWzBdKSlcbiAgICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IHNvcnQgYnVpbGQtdG9vbHMgZm9sZGVycyAke0pTT04uc3RyaW5naWZ5KGJ1aWxkVG9vbHNEaXJzLm1hcCgoZGlyKSA9PiBwYXRoLmJhc2VuYW1lKGRpcikpKX0gYCArXG4gICAgICBgYnkgc2VtYW50aWMgdmVyc2lvbiBuYW1lcy5gKTtcbiAgICBsb2cud2FybihgRmFsbGluZyBiYWNrIHRvIHNvcnRpbmcgYnkgbW9kaWZpY2F0aW9uIGRhdGUuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGNvbnN0IHBhaXJzID0gYXdhaXQgQi5tYXAoYnVpbGRUb29sc0RpcnMsIGFzeW5jIChkaXIpID0+IFsoYXdhaXQgZnMuc3RhdChkaXIpKS5tdGltZS52YWx1ZU9mKCksIGRpcl0pO1xuICAgIGJ1aWxkVG9vbHNEaXJzID0gcGFpcnNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhWzBdIDwgYlswXSlcbiAgICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pO1xuICB9XG4gIGxvZy5pbmZvKGBGb3VuZCAke2J1aWxkVG9vbHNEaXJzLmxlbmd0aH0gJ2J1aWxkLXRvb2xzJyBmb2xkZXJzIHVuZGVyICcke3Nka1Jvb3R9JyAobmV3ZXN0IGZpcnN0KTpgKTtcbiAgZm9yIChsZXQgZGlyIG9mIGJ1aWxkVG9vbHNEaXJzKSB7XG4gICAgbG9nLmluZm8oYCAgICAke2Rpcn1gKTtcbiAgfVxuICByZXR1cm4gYnVpbGRUb29sc0RpcnM7XG59KTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbiBuYW1lcyBlbmNvZGVkIGluIGBkdW1wc3lzIHBhY2thZ2VgIGNvbW1hbmQgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkdW1wc3lzT3V0cHV0IC0gVGhlIGFjdHVhbCBjb21tYW5kIG91dHB1dC5cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZ3JvdXBOYW1lcyAtIFRoZSBsaXN0IG9mIGdyb3VwIG5hbWVzIHRvIGxpc3QgcGVybWlzc2lvbnMgZm9yLlxuICogQHBhcmFtIHs/Ym9vbGVhbn0gZ3JhbnRlZFN0YXRlIC0gVGhlIGV4cGVjdGVkIHN0YXRlIG9mIGBncmFudGVkYCBhdHRyaWJ1dGUgdG8gZmlsdGVyIHdpdGguXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBmaWx0ZXJpbmcgaXMgZG9uZSBpZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGxpc3Qgb2YgbWF0Y2hlZCBwZXJtaXNzaW9uIG5hbWVzIG9yIGFuIGVtcHR5IGxpc3QgaWYgbm8gbWF0Y2hlcyB3ZXJlIGZvdW5kLlxuICovXG5jb25zdCBleHRyYWN0TWF0Y2hpbmdQZXJtaXNzaW9ucyA9IGZ1bmN0aW9uIChkdW1wc3lzT3V0cHV0LCBncm91cE5hbWVzLCBncmFudGVkU3RhdGUgPSBudWxsKSB7XG4gIGNvbnN0IGdyb3VwUGF0dGVybkJ5TmFtZSA9IChncm91cE5hbWUpID0+IG5ldyBSZWdFeHAoYF4oXFxcXHMqJHtfLmVzY2FwZVJlZ0V4cChncm91cE5hbWUpfSBwZXJtaXNzaW9uczpbXFxcXHNcXFxcU10rKWAsICdtJyk7XG4gIGNvbnN0IGluZGVudFBhdHRlcm4gPSAvXFxTfCQvO1xuICBjb25zdCBwZXJtaXNzaW9uTmFtZVBhdHRlcm4gPSAvYW5kcm9pZFxcLlxcdypcXC4/cGVybWlzc2lvblxcLlxcdysvO1xuICBjb25zdCBncmFudGVkU3RhdGVQYXR0ZXJuID0gL1xcYmdyYW50ZWQ9KFxcdyspLztcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAoY29uc3QgZ3JvdXBOYW1lIG9mIGdyb3VwTmFtZXMpIHtcbiAgICBjb25zdCBncm91cE1hdGNoID0gZ3JvdXBQYXR0ZXJuQnlOYW1lKGdyb3VwTmFtZSkuZXhlYyhkdW1wc3lzT3V0cHV0KTtcbiAgICBpZiAoIWdyb3VwTWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVzID0gZ3JvdXBNYXRjaFsxXS5zcGxpdCgnXFxuJyk7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRpdGxlSW5kZW50ID0gbGluZXNbMF0uc2VhcmNoKGluZGVudFBhdHRlcm4pO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcy5zbGljZSgxKSkge1xuICAgICAgY29uc3QgY3VycmVudEluZGVudCA9IGxpbmUuc2VhcmNoKGluZGVudFBhdHRlcm4pO1xuICAgICAgaWYgKGN1cnJlbnRJbmRlbnQgPD0gdGl0bGVJbmRlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBlcm1pc3Npb25OYW1lTWF0Y2ggPSBwZXJtaXNzaW9uTmFtZVBhdHRlcm4uZXhlYyhsaW5lKTtcbiAgICAgIGlmICghcGVybWlzc2lvbk5hbWVNYXRjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgIHBlcm1pc3Npb246IHBlcm1pc3Npb25OYW1lTWF0Y2hbMF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZ3JhbnRlZFN0YXRlTWF0Y2ggPSBncmFudGVkU3RhdGVQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAoZ3JhbnRlZFN0YXRlTWF0Y2gpIHtcbiAgICAgICAgaXRlbS5ncmFudGVkID0gZ3JhbnRlZFN0YXRlTWF0Y2hbMV0gPT09ICd0cnVlJztcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkUmVzdWx0ID0gcmVzdWx0XG4gICAgLmZpbHRlcigoaXRlbSkgPT4gIV8uaXNCb29sZWFuKGdyYW50ZWRTdGF0ZSkgfHwgaXRlbS5ncmFudGVkID09PSBncmFudGVkU3RhdGUpXG4gICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5wZXJtaXNzaW9uKTtcbiAgbG9nLmRlYnVnKGBSZXRyaWV2ZWQgJHt1dGlsLnBsdXJhbGl6ZSgncGVybWlzc2lvbicsIGZpbHRlcmVkUmVzdWx0Lmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgIGBmcm9tICR7Z3JvdXBOYW1lc30gJHt1dGlsLnBsdXJhbGl6ZSgnZ3JvdXAnLCBncm91cE5hbWVzLmxlbmd0aCwgZmFsc2UpfWApO1xuICByZXR1cm4gZmlsdGVyZWRSZXN1bHQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFydGlhbEluc3RhbGwgW2ZhbHNlXSAtIEluc3RhbGwgYXBrcyBwYXJ0aWFsbHkuIEl0IGlzIHVzZWQgZm9yICdpbnN0YWxsLW11bHRpcGxlJy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9hbmRyb2lkLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTEwNjQvd2hhdC1pcy1hLXBhcnRpYWwtYXBwbGljYXRpb24taW5zdGFsbC12aWEtYWRiXG4gKi9cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGdpdmVuIG9wdGlvbnMgaW50byB0aGUgbGlzdCBvZiBgYWRiIGluc3RhbGwuaW5zdGFsbC1tdWx0aXBsZWAgY29tbWFuZCBhcmd1bWVudHNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYXBpTGV2ZWwgLSBUaGUgY3VycmVudCBBUEkgbGV2ZWxcbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgbWFwcGluZyB0byB0cmFuc2Zvcm1cbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgYXJyYXkgb2YgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSW5zdGFsbEFyZ3MgKGFwaUxldmVsLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG9wdGlvbnMucmVwbGFjZSkgfHwgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgcmVzdWx0LnB1c2goJy1yJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuYWxsb3dUZXN0UGFja2FnZXMpIHtcbiAgICByZXN1bHQucHVzaCgnLXQnKTtcbiAgfVxuICBpZiAob3B0aW9ucy51c2VTZGNhcmQpIHtcbiAgICByZXN1bHQucHVzaCgnLXMnKTtcbiAgfVxuICBpZiAob3B0aW9ucy5ncmFudFBlcm1pc3Npb25zKSB7XG4gICAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2tpcHBpbmcgcGVybWlzc2lvbnMgZ3JhbnQgb3B0aW9uLCBzaW5jZSBgICtcbiAgICAgICAgICAgICAgICBgdGhlIGN1cnJlbnQgQVBJIGxldmVsICR7YXBpTGV2ZWx9IGRvZXMgbm90IHN1cHBvcnQgYXBwbGljYXRpb25zIGAgK1xuICAgICAgICAgICAgICAgIGBwZXJtaXNzaW9ucyBjdXN0b21pemF0aW9uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKCctZycpO1xuICAgIH1cbiAgfVxuICAvLyBGb3IgbXVsdGlwbGUtaW5zdGFsbFxuICBpZiAob3B0aW9ucy5wYXJ0aWFsSW5zdGFsbCkge1xuICAgIHJlc3VsdC5wdXNoKCctcCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYW5pZmVzdEluZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwa2cgLSBUaGUgYXBwbGljYXRpb24gaWRlbnRpZmllclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGl2aXR5IC0gVGhlIG5hbWUgb2YgdGhlIG1haW4gcGFja2FnZSBhY3Rpdml0eVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB2ZXJzaW9uQ29kZSAtIFRoZSB2ZXJzaW9uIGNvZGUgbnVtYmVyIChtaWdodCBiZSBgTmFOYClcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmVyc2lvbk5hbWUgLSBUaGUgdmVyc2lvbiBuYW1lIChtaWdodCBiZSBgbnVsbGApXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHBhcnNpbmcgb2YgdGhlIG1hbmlmZXN0IG9iamVjdCBpbiBvcmRlclxuICogdG8gZXh0cmFjdCBzb21lIHZpdGFsIHZhbHVlcyBmcm9tIGl0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG1hbmlmZXN0IFRoZSBtYW5pZmVzdCBjb250ZW50IGZvcm1hdHRlZCBhcyBKU09OXG4gKiBTZWUgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYWRia2l0LWFwa3JlYWRlciBmb3IgZGV0YWlsZWQgZm9ybWF0IGRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyB7TWFuaWZlc3RJbmZvfVxuICovXG5mdW5jdGlvbiBwYXJzZU1hbmlmZXN0IChtYW5pZmVzdCkge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgcGtnOiBtYW5pZmVzdC5wYWNrYWdlLFxuICAgIHZlcnNpb25Db2RlOiBwYXJzZUludChtYW5pZmVzdC52ZXJzaW9uQ29kZSwgMTApLFxuICAgIHZlcnNpb25OYW1lOiBtYW5pZmVzdC52ZXJzaW9uTmFtZSB8fCBudWxsLFxuICB9O1xuICBpZiAoIW1hbmlmZXN0LmFwcGxpY2F0aW9uKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIExvb2sgZm9yIGVuYWJsZWQgYWN0aXZpdHkgb3IgYWN0aXZpdHktYWxpYXMgd2l0aFxuICAvLyBhY3Rpb24gPT0gYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4gYW5kXG4gIC8vIGNhdGVnb3J5ID09IGFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSXG4gIGZvciAoY29uc3QgYWN0aXZpdHkgb2YgW1xuICAgIC4uLm1hbmlmZXN0LmFwcGxpY2F0aW9uLmFjdGl2aXRpZXMsXG4gICAgLi4ubWFuaWZlc3QuYXBwbGljYXRpb24uYWN0aXZpdHlBbGlhc2VzLFxuICBdKSB7XG4gICAgaWYgKGFjdGl2aXR5LmVuYWJsZWQgPT09IGZhbHNlIHx8IF8uaXNFbXB0eShhY3Rpdml0eS5pbnRlbnRGaWx0ZXJzKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7YWN0aW9ucywgY2F0ZWdvcmllc30gb2YgYWN0aXZpdHkuaW50ZW50RmlsdGVycykge1xuICAgICAgaWYgKF8uaXNFbXB0eShhY3Rpb25zKSB8fCBfLmlzRW1wdHkoY2F0ZWdvcmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzTWFpbkFjdGlvbiA9IGFjdGlvbnNcbiAgICAgICAgLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyk7XG4gICAgICBjb25zdCBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBjYXRlZ29yaWVzXG4gICAgICAgIC5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT09ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicpO1xuICAgICAgaWYgKGlzTWFpbkFjdGlvbiAmJiBpc0xhdW5jaGVyQ2F0ZWdvcnkpIHtcbiAgICAgICAgcmVzdWx0LmFjdGl2aXR5ID0gYWN0aXZpdHkubmFtZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYXBrIHN0cmluZ3MgZnJvbSBhYXB0IHRvb2wgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd091dHB1dCBUaGUgYWN0dWFsIHRvb2wgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnTWFya2VyIFRoZSBjb25maWcgbWFya2VyLiBVc3VhbGx5XG4gKiBhIGxhbmd1YWdlIGFiYnJldmlhdGlvbiBvciBgKGRlZmF1bHQpYFxuICogQHJldHVybnMge09iamVjdH0gU3RyaW5ncyBpZHMgdG8gdmFsdWVzIG1hcHBpbmcuIFBsdXJhbFxuICogdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyBhcnJheXMuIElmIG5vIGNvbmZpZyBmb3VuZCBmb3IgdGhlXG4gKiBnaXZlbiBtYXJrZXIgdGhlbiBhbiBlbXB0eSBtYXBwaW5nIGlzIHJldHVybmVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUFhcHRTdHJpbmdzIChyYXdPdXRwdXQsIGNvbmZpZ01hcmtlcikge1xuICBjb25zdCBub3JtYWxpemVTdHJpbmdNYXRjaCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvXCIkLywgJycpLnJlcGxhY2UoL15cIi8sICcnKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJyk7XG4gIH07XG5cbiAgY29uc3QgYXBrU3RyaW5ncyA9IHt9O1xuICBsZXQgaXNJbkNvbmZpZyA9IGZhbHNlO1xuICBsZXQgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICBsZXQgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gIC8vIFRoZSBwYXR0ZXJuIG1hdGNoZXMgYW55IHF1b3RlZCBjb250ZW50IGluY2x1ZGluZyBlc2NhcGVkIHF1b3Rlc1xuICBjb25zdCBxdW90ZWRTdHJpbmdQYXR0ZXJuID0gL1wiW15cIlxcXFxdKig/OlxcXFwuW15cIlxcXFxdKikqXCIvO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3T3V0cHV0LnNwbGl0KG9zLkVPTCkpIHtcbiAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgIGlmIChfLmlzRW1wdHkodHJpbW1lZExpbmUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoWydjb25maWcnLCAndHlwZScsICdzcGVjJywgJ1BhY2thZ2UnXS5zb21lKCh4KSA9PiB0cmltbWVkTGluZS5zdGFydHNXaXRoKHgpKSkge1xuICAgICAgaXNJbkNvbmZpZyA9IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYGNvbmZpZyAke2NvbmZpZ01hcmtlcn06YCk7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNJbkNvbmZpZykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJ3Jlc291cmNlJykpIHtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuXG4gICAgICBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJzpzdHJpbmcvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvOnN0cmluZ1xcLyhcXFMrKTovLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6cGx1cmFscy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC86cGx1cmFsc1xcLyhcXFMrKTovLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlzSW5QbHVyYWxHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCAmJiB0cmltbWVkTGluZS5zdGFydHNXaXRoKCcoc3RyaW5nJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gcXVvdGVkU3RyaW5nUGF0dGVybi5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IG5vcm1hbGl6ZVN0cmluZ01hdGNoKG1hdGNoWzBdKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCAmJiBpc0luUGx1cmFsR3JvdXAgJiYgdHJpbW1lZExpbmUuaW5jbHVkZXMoJzogKHN0cmluZycpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHF1b3RlZFN0cmluZ1BhdHRlcm4uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBbXG4gICAgICAgICAgLi4uKGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdIHx8IFtdKSxcbiAgICAgICAgICBub3JtYWxpemVTdHJpbmdNYXRjaChtYXRjaFswXSksXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFwa1N0cmluZ3M7XG59XG5cbi8qKlxuICogUGFyc2VzIGFwayBzdHJpbmdzIGZyb20gYWFwdDIgdG9vbCBvdXRwdXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3T3V0cHV0IFRoZSBhY3R1YWwgdG9vbCBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWdNYXJrZXIgVGhlIGNvbmZpZyBtYXJrZXIuIFVzdWFsbHlcbiAqIGEgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uIG9yIGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgb25lXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTdHJpbmdzIGlkcyB0byB2YWx1ZXMgbWFwcGluZy4gUGx1cmFsXG4gKiB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIGFycmF5cy4gSWYgbm8gY29uZmlnIGZvdW5kIGZvciB0aGVcbiAqIGdpdmVuIG1hcmtlciB0aGVuIGFuIGVtcHR5IG1hcHBpbmcgaXMgcmV0dXJuZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQWFwdDJTdHJpbmdzIChyYXdPdXRwdXQsIGNvbmZpZ01hcmtlcikge1xuICBjb25zdCBhbGxMaW5lcyA9IHJhd091dHB1dC5zcGxpdChvcy5FT0wpO1xuICBmdW5jdGlvbiBleHRyYWN0Q29udGVudCAoc3RhcnRJZHgpIHtcbiAgICBsZXQgaWR4ID0gc3RhcnRJZHg7XG4gICAgY29uc3Qgc3RhcnRDaGFyUG9zID0gYWxsTGluZXNbc3RhcnRJZHhdLmluZGV4T2YoJ1wiJyk7XG4gICAgaWYgKHN0YXJ0Q2hhclBvcyA8IDApIHtcbiAgICAgIHJldHVybiBbbnVsbCwgaWR4XTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIHdoaWxlIChpZHggPCBhbGxMaW5lcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0aW9uQ2hhck1hdGNoID0gL1wiJC8uZXhlYyhhbGxMaW5lc1tpZHhdKTtcbiAgICAgIGlmICh0ZXJtaW5hdGlvbkNoYXJNYXRjaCkge1xuICAgICAgICBjb25zdCB0ZXJtaW5hdGlvbkNoYXJQb3MgPSB0ZXJtaW5hdGlvbkNoYXJNYXRjaC5pbmRleDtcbiAgICAgICAgaWYgKHN0YXJ0SWR4ID09PSBpZHgpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoc3RhcnRDaGFyUG9zICsgMSwgdGVybWluYXRpb25DaGFyUG9zKSxcbiAgICAgICAgICAgIGlkeFxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgJHtyZXN1bHR9XFxcXG4ke18udHJpbVN0YXJ0KGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKDAsIHRlcm1pbmF0aW9uQ2hhclBvcykpfWAsXG4gICAgICAgICAgaWR4LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgaWYgKGlkeCA+IHN0YXJ0SWR4KSB7XG4gICAgICAgIHJlc3VsdCArPSBgXFxcXG4ke18udHJpbVN0YXJ0KGFsbExpbmVzW2lkeF0pfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoc3RhcnRDaGFyUG9zICsgMSk7XG4gICAgICB9XG4gICAgICArK2lkeDtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXN1bHQsIGlkeF07XG4gIH1cblxuICBjb25zdCBhcGtTdHJpbmdzID0ge307XG4gIGxldCBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gIGxldCBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgbGV0IGlzSW5DdXJyZW50Q29uZmlnID0gZmFsc2U7XG4gIGxldCBsaW5lSW5kZXggPSAwO1xuICB3aGlsZSAobGluZUluZGV4IDwgYWxsTGluZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBhbGxMaW5lc1tsaW5lSW5kZXhdLnRyaW0oKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRyaW1tZWRMaW5lKSkge1xuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoWyd0eXBlJywgJ1BhY2thZ2UnXS5zb21lKCh4KSA9PiB0cmltbWVkTGluZS5zdGFydHNXaXRoKHgpKSkge1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgncmVzb3VyY2UnKSkge1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuXG4gICAgICBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJ3N0cmluZy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9zdHJpbmdcXC8oXFxTKykvLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCdwbHVyYWxzLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL3BsdXJhbHNcXC8oXFxTKykvLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlzSW5QbHVyYWxHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRSZXNvdXJjZUlkKSB7XG4gICAgICBpZiAoaXNJblBsdXJhbEdyb3VwKSB7XG4gICAgICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCcoJykpIHtcbiAgICAgICAgICBpc0luQ3VycmVudENvbmZpZyA9IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYCgke2NvbmZpZ01hcmtlcn0pYCk7XG4gICAgICAgICAgKytsaW5lSW5kZXg7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSW5DdXJyZW50Q29uZmlnKSB7XG4gICAgICAgICAgY29uc3QgW2NvbnRlbnQsIGlkeF0gPSBleHRyYWN0Q29udGVudChsaW5lSW5kZXgpO1xuICAgICAgICAgIGxpbmVJbmRleCA9IGlkeDtcbiAgICAgICAgICBpZiAoXy5pc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBbXG4gICAgICAgICAgICAgIC4uLihhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSB8fCBbXSksXG4gICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKGAoJHtjb25maWdNYXJrZXJ9KWApKSB7XG4gICAgICAgIGNvbnN0IFtjb250ZW50LCBpZHhdID0gZXh0cmFjdENvbnRlbnQobGluZUluZGV4KTtcbiAgICAgICAgbGluZUluZGV4ID0gaWR4O1xuICAgICAgICBpZiAoXy5pc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgICsrbGluZUluZGV4O1xuICB9XG4gIHJldHVybiBhcGtTdHJpbmdzO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGNvbmZpZyBtYXJrZXIsIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHBhcnNlLi4gbWV0aG9kc1xuICogdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGggcmVzb3VyY2UgZm9ybWF0cyBnZW5lcmF0ZWQgYnkgYWFwdCgyKSB0b29sXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZmlnc0dldHRlciBUaGUgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IGlzIGEgbGlzdFxuICogb2YgYXBrIGNvbmZpZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNpcmVkTWFya2VyIFRoZSBkZXNpcmVkIGNvbmZpZyBtYXJrZXIgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWZhdWx0TWFya2VyIFRoZSBkZWZhdWx0IGNvbmZpZyBtYXJrZXIgdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBjb25maWcgbWFya2VyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENvbmZpZ01hcmtlciAoY29uZmlnc0dldHRlciwgZGVzaXJlZE1hcmtlciwgZGVmYXVsdE1hcmtlcikge1xuICBsZXQgY29uZmlnTWFya2VyID0gZGVzaXJlZE1hcmtlciB8fCBkZWZhdWx0TWFya2VyO1xuICBpZiAoY29uZmlnTWFya2VyLmluY2x1ZGVzKCctJykgJiYgIWNvbmZpZ01hcmtlci5pbmNsdWRlcygnLXInKSkge1xuICAgIGNvbmZpZ01hcmtlciA9IGNvbmZpZ01hcmtlci5yZXBsYWNlKCctJywgJy1yJyk7XG4gIH1cbiAgY29uc3QgY29uZmlncyA9IGF3YWl0IGNvbmZpZ3NHZXR0ZXIoKTtcbiAgbG9nLmRlYnVnKGBSZXNvdXJjZSBjb25maWd1cmF0aW9uczogJHtKU09OLnN0cmluZ2lmeShjb25maWdzKX1gKTtcbiAgLy8gQXNzdW1lIHRoZSAnZW4nIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGRlZmF1bHQgb25lXG4gIGlmIChjb25maWdNYXJrZXIudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdlbicpXG4gICAgJiYgIWNvbmZpZ3Muc29tZSgoeCkgPT4geC50cmltKCkgPT09IGNvbmZpZ01hcmtlcikpIHtcbiAgICBsb2cuZGVidWcoYFJlc291cmNlIGNvbmZpZ3VyYXRpb24gbmFtZSAnJHtjb25maWdNYXJrZXJ9JyBpcyB1bmtub3duLiBgICtcbiAgICAgIGBSZXBsYWNpbmcgaXQgd2l0aCAnJHtkZWZhdWx0TWFya2VyfSdgKTtcbiAgICBjb25maWdNYXJrZXIgPSBkZWZhdWx0TWFya2VyO1xuICB9IGVsc2Uge1xuICAgIGxvZy5kZWJ1ZyhgU2VsZWN0ZWQgY29uZmlndXJhdGlvbjogJyR7Y29uZmlnTWFya2VyfSdgKTtcbiAgfVxuICByZXR1cm4gY29uZmlnTWFya2VyO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgb3V0cHV0IGluIEpTT04gZm9ybWF0IHJldHJpZXZlZCBmcm9tXG4gKiB0aGUgY29ycmVzcG9uZGluZyBBcHBpdW0gU2V0dGluZ3MgYnJvYWRjYXN0IGNhbGxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dCBUaGUgYWN0dWFsIGNvbW1hbmQgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gZW50aXR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW50aXR5IHdoaWNoIGlzXG4gKiBnb2luZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBwYXJzZWQgSlNPTiBvYmplY3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgb3V0cHV0IGNhbm5vdCBiZSBwYXJzZWRcbiAqIGFzIGEgdmFsaWQgSlNPTlxuICovXG5mdW5jdGlvbiBwYXJzZUpzb25EYXRhIChvdXRwdXQsIGVudGl0eU5hbWUpIHtcbiAgaWYgKCEvXFxicmVzdWx0PS0xXFxiLy50ZXN0KG91dHB1dCkgfHwgIS9cXGJkYXRhPVwiLy50ZXN0KG91dHB1dCkpIHtcbiAgICBsb2cuZGVidWcob3V0cHV0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gL1xcYmRhdGE9KFwiLispLy5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICBsb2cuZGVidWcob3V0cHV0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0LiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbiAgY29uc3QganNvblN0ciA9IF8udHJpbShtYXRjaFsxXSkucmVwbGFjZSgvKF5cIil8KFwiJCkvZywgJycpO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGpzb25TdHIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlICR7ZW50aXR5TmFtZX0gZnJvbSB0aGUgcmVzdWx0aW5nIGRhdGEgc3RyaW5nLiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBnaXZlbiBsYW5ndWFnZSBhbmQgY291bnRyeSBhYmJyZXZpYXRpb25zXG4gKiB0byBBVkQgYXJndW1lbnRzIGFycmF5XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSBMYW5ndWFnZSBuYW1lLCBmb3IgZXhhbXBsZSAnZnInXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNvdW50cnkgQ291bnRyeSBuYW1lLCBmb3IgZXhhbXBsZSAnQ0EnXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGdlbmVyYXRlZCBhcmd1bWVudHMuIFRoZVxuICogcmVzdWx0aW5nIGFycmF5IG1pZ2h0IGJlIGVtcHR5IGlmIGJvdGggYXJndW1lbnRzIGFyZSBlbXB0eVxuICovXG5mdW5jdGlvbiB0b0F2ZExvY2FsZUFyZ3MgKGxhbmd1YWdlLCBjb3VudHJ5KSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBpZiAobGFuZ3VhZ2UgJiYgXy5pc1N0cmluZyhsYW5ndWFnZSkpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMubGFuZ3VhZ2U9JHtsYW5ndWFnZS50b0xvd2VyQ2FzZSgpfWApO1xuICB9XG4gIGlmIChjb3VudHJ5ICYmIF8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMuY291bnRyeT0ke2NvdW50cnkudG9VcHBlckNhc2UoKX1gKTtcbiAgfVxuICBsZXQgbG9jYWxlO1xuICBpZiAoXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSAmJiBsYW5ndWFnZSAmJiBjb3VudHJ5KSB7XG4gICAgbG9jYWxlID0gbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSArICctJyArIGNvdW50cnkudG9VcHBlckNhc2UoKTtcbiAgfSBlbHNlIGlmIChsYW5ndWFnZSAmJiBfLmlzU3RyaW5nKGxhbmd1YWdlKSkge1xuICAgIGxvY2FsZSA9IGxhbmd1YWdlLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAoY291bnRyeSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgbG9jYWxlID0gY291bnRyeTtcbiAgfVxuICBpZiAobG9jYWxlKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmxvY2FsZT0ke2xvY2FsZX1gKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBBbmRyb2lkIHByZWZlcmVuY2VzIHJvb3RcbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZm9sZGVyIG9yIGBudWxsYCBpZiB0aGUgZm9sZGVyIGNhbm5vdCBiZSBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBbmRyb2lkUHJlZnNSb290ICgpIHtcbiAgbGV0IGxvY2F0aW9uID0gcHJvY2Vzcy5lbnYuQU5EUk9JRF9FTVVMQVRPUl9IT01FO1xuICBpZiAoYXdhaXQgZGlyRXhpc3RzKGxvY2F0aW9uKSkge1xuICAgIHJldHVybiBsb2NhdGlvbjtcbiAgfVxuXG4gIGlmIChsb2NhdGlvbikge1xuICAgIGxvZy53YXJuKGBUaGUgdmFsdWUgb2YgdGhlIEFORFJPSURfRU1VTEFUT1JfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJHtsb2NhdGlvbn0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgfVxuXG4gIGNvbnN0IGhvbWUgPSBwcm9jZXNzLmVudi5IT01FIHx8IHByb2Nlc3MuZW52LlVTRVJQUk9GSUxFO1xuICBpZiAoaG9tZSkge1xuICAgIGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGhvbWUsICcuYW5kcm9pZCcpO1xuICB9XG5cbiAgaWYgKCFhd2FpdCBkaXJFeGlzdHMobG9jYXRpb24pKSB7XG4gICAgbG9nLmRlYnVnKGBBbmRyb2lkIGNvbmZpZyByb290ICcke2xvY2F0aW9ufScgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgcGF0aCBleGlzdHMgb24gdGhlIGZpbGVzeXN0ZW0gYW5kIGlzIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsb2NhdGlvbiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnlcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5hc3luYyBmdW5jdGlvbiBkaXJFeGlzdHMgKGxvY2F0aW9uKSB7XG4gIHJldHVybiBsb2NhdGlvblxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhsb2NhdGlvbilcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChsb2NhdGlvbikpLmlzRGlyZWN0b3J5KCk7XG59XG5cbi8qKlxuICogRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiAqIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHBvc3NpYmxlIGlzc3VlcyB3aXRoIGhvdyBzeXN0ZW0gYHNwYXduYFxuICogY2FsbCBoYW5kbGVzIHRoZW0uXG4gKiBTZWUgaHR0cHM6Ly9kaXNjdXNzLmFwcGl1bS5pby90L2hvdy10by1tb2RpZnktd2QtcHJveHktYW5kLXVpYXV0b21hdG9yMi1zb3VyY2UtY29kZS10by1zdXBwb3J0LXVuaWNvZGUvMzM0NjZcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZyBOb24tZXNjYXBlZCBhcmd1bWVudCBzdHJpbmdcbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVNoZWxsQXJnIChhcmcpIHtcbiAgYXJnID0gYCR7YXJnfWA7XG4gIGlmIChzeXN0ZW0uaXNXaW5kb3dzKCkpIHtcbiAgICByZXR1cm4gL1smfF5cXHNdLy50ZXN0KGFyZykgPyBgXCIke2FyZy5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYCA6IGFyZztcbiAgfVxuICByZXR1cm4gYXJnLnJlcGxhY2UoLyYvZywgJ1xcXFwmJyk7XG59XG5cbmV4cG9ydCB7XG4gIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgsIHVuemlwRmlsZSxcbiAgZ2V0SU1FTGlzdEZyb21PdXRwdXQsIGdldEphdmFGb3JPcywgaXNTaG93aW5nTG9ja3NjcmVlbiwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkLFxuICBnZXRTdXJmYWNlT3JpZW50YXRpb24sIGlzU2NyZWVuT25GdWxseSwgYnVpbGRTdGFydENtZCwgZ2V0SmF2YUhvbWUsXG4gIHJvb3REaXIsIGdldFNka1Rvb2xzVmVyc2lvbiwgZ2V0QXBrc2lnbmVyRm9yT3MsIGdldEJ1aWxkVG9vbHNEaXJzLFxuICBnZXRBcGthbmFseXplckZvck9zLCBnZXRPcGVuU3NsRm9yT3MsIGV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zLCBBUEtTX0VYVEVOU0lPTixcbiAgQVBLX0lOU1RBTExfVElNRU9VVCwgQVBLU19JTlNUQUxMX1RJTUVPVVQsIGJ1aWxkSW5zdGFsbEFyZ3MsIEFQS19FWFRFTlNJT04sXG4gIERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCwgcGFyc2VNYW5pZmVzdCwgcGFyc2VBYXB0U3RyaW5ncywgcGFyc2VBYXB0MlN0cmluZ3MsXG4gIGZvcm1hdENvbmZpZ01hcmtlciwgcGFyc2VKc29uRGF0YSwgdW5zaWduQXBrLCB0b0F2ZExvY2FsZUFyZ3MsIHJlcXVpcmVTZGtSb290LFxuICBnZXRTZGtSb290RnJvbUVudiwgZ2V0QW5kcm9pZFByZWZzUm9vdCwgZGlyRXhpc3RzLCBlc2NhcGVTaGVsbEFyZyxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE9BQU8sR0FBR0MsY0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsYUFBWixHQUE0QixJQUE1QixHQUFtQyxPQUEzRCxDQUFoQjs7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHLE9BQXZCOztBQUNBLE1BQU1DLGFBQWEsR0FBRyxNQUF0Qjs7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxLQUE1Qjs7QUFDQSxNQUFNQyxvQkFBb0IsR0FBR0QsbUJBQW1CLEdBQUcsQ0FBbkQ7O0FBQ0EsTUFBTUUsd0JBQXdCLEdBQUcsS0FBakM7OztBQU9BLFNBQVNDLGlCQUFULEdBQThCO0VBQzVCLE9BQU9SLE9B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
|
|
868
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2hlbHBlcnMuanMiLCJuYW1lcyI6WyJyb290RGlyIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIkFQS1NfRVhURU5TSU9OIiwiQVBLX0VYVEVOU0lPTiIsIkFQS19JTlNUQUxMX1RJTUVPVVQiLCJBUEtTX0lOU1RBTExfVElNRU9VVCIsIkRFRkFVTFRfQURCX0VYRUNfVElNRU9VVCIsImdldFNka1Jvb3RGcm9tRW52IiwiQU5EUk9JRF9IT01FIiwiQU5EUk9JRF9TREtfUk9PVCIsInJlcXVpcmVTZGtSb290IiwiY3VzdG9tUm9vdCIsInNka1Jvb3QiLCJkb2NNc2ciLCJfIiwiaXNFbXB0eSIsIkVycm9yIiwiZnMiLCJleGlzdHMiLCJzdGF0cyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgiLCJwcm9wc1BhdGhzIiwiZ2xvYiIsImN3ZCIsImFic29sdXRlIiwicGxhdGZvcm1zTWFwcGluZyIsInByb3BzUGF0aCIsInByb3BzQ29udGVudCIsInJlYWRGaWxlIiwicGxhdGZvcm1QYXRoIiwiZGlybmFtZSIsInBsYXRmb3JtIiwiYmFzZW5hbWUiLCJtYXRjaCIsImV4ZWMiLCJsb2ciLCJ3YXJuIiwicGFyc2VJbnQiLCJyZWNlbnRTZGtWZXJzaW9uIiwia2V5cyIsInNvcnQiLCJyZXZlcnNlIiwicmVzdWx0IiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwidW56aXBGaWxlIiwiemlwUGF0aCIsImRzdFJvb3QiLCJ6aXAiLCJhc3NlcnRWYWxpZFppcCIsImV4dHJhY3RBbGxUbyIsInVuc2lnbkFwayIsImFwa1BhdGgiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJtZXRhSW5mRm9sZGVyTmFtZSIsImhhc01ldGFJbmYiLCJyZWFkRW50cmllcyIsImVudHJ5IiwiZmlsZU5hbWUiLCJzdGFydHNXaXRoIiwidG1wWmlwUm9vdCIsInJpbXJhZiIsInRtcFJlc3VsdFBhdGgiLCJ0b0FyY2hpdmUiLCJ1bmxpbmsiLCJtdiIsImdldElNRUxpc3RGcm9tT3V0cHV0Iiwic3Rkb3V0IiwiZW5naW5lcyIsImxpbmUiLCJzcGxpdCIsImxlbmd0aCIsInB1c2giLCJ0cmltIiwicmVwbGFjZSIsImdldEphdmFIb21lIiwibWVtb2l6ZSIsIkpBVkFfSE9NRSIsImdldEphdmFGb3JPcyIsImphdmFIb21lIiwiZXJyTXNnIiwiZXJyIiwibWVzc2FnZSIsImV4ZWN1dGFibGVOYW1lIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwicmVzdWx0UGF0aCIsIndoaWNoIiwiaWduIiwiZ2V0T3BlblNzbEZvck9zIiwiYmluYXJ5TmFtZSIsImdldEFwa3NpZ25lckZvck9zIiwic3lzSGVscGVycyIsImdldEJpbmFyeUZyb21TZGtSb290IiwiZ2V0QXBrYW5hbHl6ZXJGb3JPcyIsImlzU2hvd2luZ0xvY2tzY3JlZW4iLCJkdW1wc3lzIiwic29tZSIsIngiLCJpbmNsdWRlcyIsImV2ZXJ5IiwidGVzdCIsImlzQ3VycmVudEZvY3VzT25LZXlndWFyZCIsIm0iLCJnZXRTdXJmYWNlT3JpZW50YXRpb24iLCJpc1NjcmVlbk9uRnVsbHkiLCJidWlsZFN0YXJ0Q21kIiwic3RhcnRBcHBPcHRpb25zIiwiYXBpTGV2ZWwiLCJ1c2VyIiwid2FpdEZvckxhdW5jaCIsInBrZyIsImFjdGl2aXR5IiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJzdG9wQXBwIiwiZmxhZ3MiLCJjbWQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsInBhcnNlS2V5VmFsdWUiLCJzdHIiLCJzcGFjZSIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJyZSIsImFyZ3MiLCJhcHBseSIsImZsYWciLCJmbGFnUG9zIiwicHJldkFyZ3MiLCJnZXRTZGtUb29sc1ZlcnNpb24iLCJhbmRyb2lkSG9tZSIsInByb3BlcnRpZXNQYXRoIiwicHJvcGVydGllc0NvbnRlbnQiLCJ2ZXJzaW9uTWF0Y2hlciIsIlJlZ0V4cCIsIm1ham9yIiwibWlub3IiLCJidWlsZCIsImdldEJ1aWxkVG9vbHNEaXJzIiwiYnVpbGRUb29sc0RpcnMiLCJtYXAiLCJkaXIiLCJhIiwiYiIsInNlbXZlciIsInJjb21wYXJlIiwicGFpciIsInBhaXJzIiwiQiIsIm10aW1lIiwidmFsdWVPZiIsImluZm8iLCJleHRyYWN0TWF0Y2hpbmdQZXJtaXNzaW9ucyIsImR1bXBzeXNPdXRwdXQiLCJncm91cE5hbWVzIiwiZ3JhbnRlZFN0YXRlIiwiZ3JvdXBQYXR0ZXJuQnlOYW1lIiwiZ3JvdXBOYW1lIiwiZXNjYXBlUmVnRXhwIiwiaW5kZW50UGF0dGVybiIsInBlcm1pc3Npb25OYW1lUGF0dGVybiIsImdyYW50ZWRTdGF0ZVBhdHRlcm4iLCJncm91cE1hdGNoIiwibGluZXMiLCJ0aXRsZUluZGVudCIsInNlYXJjaCIsInNsaWNlIiwiY3VycmVudEluZGVudCIsInBlcm1pc3Npb25OYW1lTWF0Y2giLCJpdGVtIiwicGVybWlzc2lvbiIsImdyYW50ZWRTdGF0ZU1hdGNoIiwiZ3JhbnRlZCIsImZpbHRlcmVkUmVzdWx0IiwiZmlsdGVyIiwiaXNCb29sZWFuIiwicGx1cmFsaXplIiwiYnVpbGRJbnN0YWxsQXJncyIsIm9wdGlvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsInVzZVNkY2FyZCIsImdyYW50UGVybWlzc2lvbnMiLCJwYXJ0aWFsSW5zdGFsbCIsInBhcnNlTWFuaWZlc3QiLCJtYW5pZmVzdCIsInBhY2thZ2UiLCJ2ZXJzaW9uQ29kZSIsInZlcnNpb25OYW1lIiwiYXBwbGljYXRpb24iLCJhY3Rpdml0aWVzIiwiYWN0aXZpdHlBbGlhc2VzIiwiZW5hYmxlZCIsImludGVudEZpbHRlcnMiLCJhY3Rpb25zIiwiY2F0ZWdvcmllcyIsImlzTWFpbkFjdGlvbiIsIm5hbWUiLCJpc0xhdW5jaGVyQ2F0ZWdvcnkiLCJwYXJzZUFhcHRTdHJpbmdzIiwicmF3T3V0cHV0IiwiY29uZmlnTWFya2VyIiwibm9ybWFsaXplU3RyaW5nTWF0Y2giLCJzIiwiYXBrU3RyaW5ncyIsImlzSW5Db25maWciLCJjdXJyZW50UmVzb3VyY2VJZCIsImlzSW5QbHVyYWxHcm91cCIsInF1b3RlZFN0cmluZ1BhdHRlcm4iLCJvcyIsIkVPTCIsInRyaW1tZWRMaW5lIiwicGFyc2VBYXB0MlN0cmluZ3MiLCJhbGxMaW5lcyIsImV4dHJhY3RDb250ZW50Iiwic3RhcnRJZHgiLCJpZHgiLCJzdGFydENoYXJQb3MiLCJ0ZXJtaW5hdGlvbkNoYXJNYXRjaCIsInRlcm1pbmF0aW9uQ2hhclBvcyIsImluZGV4IiwidHJpbVN0YXJ0IiwiaXNJbkN1cnJlbnRDb25maWciLCJsaW5lSW5kZXgiLCJjb250ZW50IiwiaXNTdHJpbmciLCJmb3JtYXRDb25maWdNYXJrZXIiLCJjb25maWdzR2V0dGVyIiwiZGVzaXJlZE1hcmtlciIsImRlZmF1bHRNYXJrZXIiLCJjb25maWdzIiwidG9Mb3dlckNhc2UiLCJwYXJzZUpzb25EYXRhIiwib3V0cHV0IiwiZW50aXR5TmFtZSIsImpzb25TdHIiLCJwYXJzZSIsImUiLCJ0b0F2ZExvY2FsZUFyZ3MiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJ0b1VwcGVyQ2FzZSIsImxvY2FsZSIsImdldEFuZHJvaWRQcmVmc1Jvb3QiLCJsb2NhdGlvbiIsIkFORFJPSURfRU1VTEFUT1JfSE9NRSIsImRpckV4aXN0cyIsImhvbWUiLCJIT01FIiwiVVNFUlBST0ZJTEUiLCJlc2NhcGVTaGVsbEFyZyIsImFyZyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgemlwLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5cbmNvbnN0IHJvb3REaXIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBwcm9jZXNzLmVudi5OT19QUkVDT01QSUxFID8gJy4uJyA6ICcuLi8uLicpO1xuY29uc3QgQVBLU19FWFRFTlNJT04gPSAnLmFwa3MnO1xuY29uc3QgQVBLX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IEFQS19JTlNUQUxMX1RJTUVPVVQgPSA2MDAwMDtcbmNvbnN0IEFQS1NfSU5TVEFMTF9USU1FT1VUID0gQVBLX0lOU1RBTExfVElNRU9VVCAqIDI7XG5jb25zdCBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQgPSAyMDAwMDsgLy8gaW4gbWlsbGlzZWNvbmRzXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhY3R1YWwgcGF0aCB0byBTREsgcm9vdCBmb2xkZXIgZnJvbSB0aGUgc3lzdGVtIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybiB7P3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKi9cbmZ1bmN0aW9uIGdldFNka1Jvb3RGcm9tRW52ICgpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkFORFJPSURfSE9NRSB8fCBwcm9jZXNzLmVudi5BTkRST0lEX1NES19ST09UO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBTREsgcm9vdCBmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBlaXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgZW52IHZhcmlhYmxlIGlzIHVuc2V0IG9yIGlzXG4gKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGZpbGUgc3lzdGVtIGVudHJ5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVTZGtSb290IChjdXN0b21Sb290ID0gbnVsbCkge1xuICBjb25zdCBzZGtSb290ID0gY3VzdG9tUm9vdCB8fCBnZXRTZGtSb290RnJvbUVudigpO1xuICBjb25zdCBkb2NNc2cgPSAnUmVhZCBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vY29tbWFuZC1saW5lL3ZhcmlhYmxlcyBmb3IgbW9yZSBkZXRhaWxzJztcbiAgaWYgKF8uaXNFbXB0eShzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTmVpdGhlciBBTkRST0lEX0hPTUUgbm9yIEFORFJPSURfU0RLX1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUgd2FzIGV4cG9ydGVkLiAke2RvY01zZ31gKTtcbiAgfVxuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHNka1Jvb3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCBmb2xkZXIgJyR7c2RrUm9vdH0nIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHNka1Jvb3QpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBbmRyb2lkIFNESyByb290ICcke3Nka1Jvb3R9JyBtdXN0IGJlIGEgZm9sZGVyLiAke2RvY01zZ31gKTtcbiAgfVxuICByZXR1cm4gc2RrUm9vdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQbGF0Zm9ybUluZm9cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm0gLSBUaGUgcGxhdGZvcm0gbmFtZSwgZm9yIGV4YW1wbGUgYGFuZHJvaWQtMjRgXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwbGF0Zm9ybVBhdGggLSBGdWxsIHBhdGggdG8gdGhlIHBsYXRmb3JtIFNESyBmb2xkZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICovXG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHBhdGggdG8gdGhlIHJlY2VudCBpbnN0YWxsZWQgQW5kcm9pZCBwbGF0Zm9ybS5cbiAqXG4gKiBAcmV0dXJuIHtQbGF0Zm9ybUluZm99IFRoZSByZXN1bHRpbmcgcGF0aCB0byB0aGUgbmV3ZXN0IGluc3RhbGxlZCBwbGF0Zm9ybS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCAoc2RrUm9vdCkge1xuICBjb25zdCBwcm9wc1BhdGhzID0gYXdhaXQgZnMuZ2xvYignKi9idWlsZC5wcm9wJywge1xuICAgIGN3ZDogcGF0aC5yZXNvbHZlKHNka1Jvb3QsICdwbGF0Zm9ybXMnKSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IHBsYXRmb3Jtc01hcHBpbmcgPSB7fTtcbiAgZm9yIChjb25zdCBwcm9wc1BhdGggb2YgcHJvcHNQYXRocykge1xuICAgIGNvbnN0IHByb3BzQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BzUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGxhdGZvcm1QYXRoID0gcGF0aC5kaXJuYW1lKHByb3BzUGF0aCk7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBwYXRoLmJhc2VuYW1lKHBsYXRmb3JtUGF0aCk7XG4gICAgY29uc3QgbWF0Y2ggPSAvcm9cXC5idWlsZFxcLnZlcnNpb25cXC5zZGs9KFxcZCspLy5leGVjKHByb3BzQ29udGVudCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCByZWFkIHRoZSBTREsgdmVyc2lvbiBmcm9tICcke3Byb3BzUGF0aH0nLiBTa2lwcGluZyAnJHtwbGF0Zm9ybX0nYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcGxhdGZvcm1zTWFwcGluZ1twYXJzZUludChtYXRjaFsxXSwgMTApXSA9IHtcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgcGxhdGZvcm1QYXRoLFxuICAgIH07XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShwbGF0Zm9ybXNNYXBwaW5nKSkge1xuICAgIGxvZy53YXJuKGBGb3VuZCB6ZXJvIHBsYXRmb3JtIGZvbGRlcnMgYXQgJyR7cGF0aC5yZXNvbHZlKHNka1Jvb3QsICdwbGF0Zm9ybXMnKX0nLiBgICtcbiAgICAgIGBEbyB5b3UgaGF2ZSBhbnkgQW5kcm9pZCBTREtzIGluc3RhbGxlZD9gKTtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IG51bGwsXG4gICAgICBwbGF0Zm9ybVBhdGg6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlY2VudFNka1ZlcnNpb24gPSBfLmtleXMocGxhdGZvcm1zTWFwcGluZykuc29ydCgpLnJldmVyc2UoKVswXTtcbiAgY29uc3QgcmVzdWx0ID0gcGxhdGZvcm1zTWFwcGluZ1tyZWNlbnRTZGtWZXJzaW9uXTtcbiAgbG9nLmRlYnVnKGBGb3VuZCB0aGUgbW9zdCByZWNlbnQgQW5kcm9pZCBwbGF0Zm9ybTogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bnppcEZpbGUgKHppcFBhdGgsIGRzdFJvb3QgPSBwYXRoLmRpcm5hbWUoemlwUGF0aCkpIHtcbiAgbG9nLmRlYnVnKGBVbnppcHBpbmcgJyR7emlwUGF0aH0nIHRvICcke2RzdFJvb3R9J2ApO1xuICBhd2FpdCB6aXAuYXNzZXJ0VmFsaWRaaXAoemlwUGF0aCk7XG4gIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oemlwUGF0aCwgZHN0Um9vdCk7XG4gIGxvZy5kZWJ1ZygnVW56aXAgc3VjY2Vzc2Z1bCcpO1xufVxuXG4vKipcbiAqIFVuc2lnbnMgdGhlIGdpdmVuIGFwayBieSByZW1vdmluZyB0aGVcbiAqIE1FVEEtSU5GIGZvbGRlciByZWN1cnNpdmVseSBmcm9tIHRoZSBhcmNoaXZlLlxuICogISEhIFRoZSBmdW5jdGlvbiBvdmVyd3JpdGVzIHRoZSBnaXZlbiBhcGsgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnNpZ25pbmcgISEhXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa1BhdGggVGhlIHBhdGggdG8gdGhlIGFwa1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYXBrIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseVxuICogdW5zaWduZWQgYW5kIG92ZXJ3cml0dGVuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyB0aGUgdW5zaWduIG9wZXJhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiB1bnNpZ25BcGsgKGFwa1BhdGgpIHtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCBtZXRhSW5mRm9sZGVyTmFtZSA9ICdNRVRBLUlORic7XG4gIHRyeSB7XG4gICAgbGV0IGhhc01ldGFJbmYgPSBmYWxzZTtcbiAgICBhd2FpdCB6aXAucmVhZEVudHJpZXMoYXBrUGF0aCwgKHtlbnRyeX0pID0+IHtcbiAgICAgIGhhc01ldGFJbmYgPSBlbnRyeS5maWxlTmFtZS5zdGFydHNXaXRoKGAke21ldGFJbmZGb2xkZXJOYW1lfS9gKTtcbiAgICAgIC8vIGVudHJpZXMgaXRlcmF0aW9uIHN0b3BzIGFmdGVyIGBmYWxzZWAgaXMgcmV0dXJuZWRcbiAgICAgIHJldHVybiAhaGFzTWV0YUluZjtcbiAgICB9KTtcbiAgICBpZiAoIWhhc01ldGFJbmYpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdG1wWmlwUm9vdCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAnYXBrJyk7XG4gICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhhcGtQYXRoLCB0bXBaaXBSb290KTtcbiAgICBhd2FpdCBmcy5yaW1yYWYocGF0aC5yZXNvbHZlKHRtcFppcFJvb3QsIG1ldGFJbmZGb2xkZXJOYW1lKSk7XG4gICAgY29uc3QgdG1wUmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCBwYXRoLmJhc2VuYW1lKGFwa1BhdGgpKTtcbiAgICBhd2FpdCB6aXAudG9BcmNoaXZlKHRtcFJlc3VsdFBhdGgsIHtcbiAgICAgIGN3ZDogdG1wWmlwUm9vdCxcbiAgICB9KTtcbiAgICBhd2FpdCBmcy51bmxpbmsoYXBrUGF0aCk7XG4gICAgYXdhaXQgZnMubXYodG1wUmVzdWx0UGF0aCwgYXBrUGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldElNRUxpc3RGcm9tT3V0cHV0IChzdGRvdXQpIHtcbiAgbGV0IGVuZ2luZXMgPSBbXTtcbiAgZm9yIChsZXQgbGluZSBvZiBzdGRvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoID4gMCAmJiBsaW5lWzBdICE9PSAnICcpIHtcbiAgICAgIC8vIHJlbW92ZSBuZXdsaW5lIGFuZCB0cmFpbGluZyBjb2xvbiwgYW5kIGFkZCB0byB0aGUgbGlzdFxuICAgICAgZW5naW5lcy5wdXNoKGxpbmUudHJpbSgpLnJlcGxhY2UoLzokLywgJycpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVuZ2luZXM7XG59XG5cbmNvbnN0IGdldEphdmFIb21lID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFIb21lICgpIHtcbiAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzcy5lbnYuSkFWQV9IT01FO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIEpBVkFfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IGZvciB0aGUgY3VycmVudCBwcm9jZXNzJyk7XG4gIH1cbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEpBVkFfSE9NRSBsb2NhdGlvbiAnJHtyZXN1bHR9JyBtdXN0IGV4aXN0YCk7XG4gIH1cbiAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHJlc3VsdCk7XG4gIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEpBVkFfSE9NRSBsb2NhdGlvbiAnJHtyZXN1bHR9JyBtdXN0IGJlIGEgdmFsaWQgZm9sZGVyYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5jb25zdCBnZXRKYXZhRm9yT3MgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0SmF2YUZvck9zICgpIHtcbiAgbGV0IGphdmFIb21lO1xuICBsZXQgZXJyTXNnO1xuICB0cnkge1xuICAgIGphdmFIb21lID0gYXdhaXQgZ2V0SmF2YUhvbWUoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyTXNnID0gZXJyLm1lc3NhZ2U7XG4gIH1cbiAgY29uc3QgZXhlY3V0YWJsZU5hbWUgPSBgamF2YSR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbiAgaWYgKGphdmFIb21lKSB7XG4gICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShqYXZhSG9tZSwgJ2JpbicsIGV4ZWN1dGFibGVOYW1lKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMud2hpY2goZXhlY3V0YWJsZU5hbWUpO1xuICB9IGNhdGNoIChpZ24pIHt9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlICcke2V4ZWN1dGFibGVOYW1lfScgYmluYXJ5IGNvdWxkIG5vdCBiZSBmb3VuZCBgICtcbiAgICBgbmVpdGhlciBpbiBQQVRIIG5vciB1bmRlciBKQVZBX0hPTUUgKCR7ZXJyTXNnIHx8IHBhdGgucmVzb2x2ZShqYXZhSG9tZSwgJ2JpbicpfSlgKTtcbn0pO1xuXG5jb25zdCBnZXRPcGVuU3NsRm9yT3MgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpbmFyeU5hbWUgPSBgb3BlbnNzbCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMud2hpY2goYmluYXJ5TmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG9wZW5zc2wgdG9vbCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtIGFuZCBhdmFpbGFibGUgb24gdGhlIHBhdGgnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggdG8gYXBrc2lnbmVyIHRvb2xcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3lzSGVscGVycyAtIEFuIGluc3RhbmNlIGNvbnRhaW5pbmcgc3lzdGVtQ2FsbE1ldGhvZHMgaGVscGVyIG1ldGhvZHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEFuIGFic29sdXRlIHBhdGggdG8gYXBrc2lnbmVyIHRvb2wuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHRvb2wgaXMgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBcGtzaWduZXJGb3JPcyAoc3lzSGVscGVycykge1xuICByZXR1cm4gYXdhaXQgc3lzSGVscGVycy5nZXRCaW5hcnlGcm9tU2RrUm9vdCgnYXBrc2lnbmVyLmphcicpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCB0byBhcGthbmFseXplciB0b29sLlxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS9hcGthbmFseXplci5odG1sXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN5c0hlbHBlcnMgLSBBbiBpbnN0YW5jZSBjb250YWluaW5nIHN5c3RlbUNhbGxNZXRob2RzIGhlbHBlciBtZXRob2RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBbiBhYnNvbHV0ZSBwYXRoIHRvIGFwa2FuYWx5emVyIHRvb2wuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHRvb2wgaXMgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBcGthbmFseXplckZvck9zIChzeXNIZWxwZXJzKSB7XG4gIHJldHVybiBhd2FpdCBzeXNIZWxwZXJzLmdldEJpbmFyeUZyb21TZGtSb290KCdhcGthbmFseXplcicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBtU2hvd2luZ0xvY2tzY3JlZW4gb3IgbURyZWFtaW5nTG9ja3NjcmVlbiBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmVcbiAqIGlmIGxvY2sgc2NyZWVuIGlzIHNob3dpbmdcbiAqXG4gKiBBIG5vdGU6IGBhZGIgc2hlbGwgZHVtcHN5cyB0cnVzdGAgcGVyZm9ybXMgYmV0dGVyIHdoaWxlIGRldGVjdGluZyB0aGUgbG9ja2VkIHNjcmVlbiBzdGF0ZVxuICogaW4gY29tcGFyaXNvbiB0byBgYWRiIGR1bXBzeXMgd2luZG93YCBvdXRwdXQgcGFyc2luZy5cbiAqIEJ1dCB0aGUgdHJ1c3QgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGZvciBgU3dpcGVgIHVubG9jayBwYXR0ZXJuLlxuICpcbiAqIEluIHNvbWUgQW5kcm9pZCBkZXZpY2VzIChQcm9iYWJseSBhcm91bmQgQW5kcm9pZCAxMCspLCBgbVNob3dpbmdMb2Nrc2NyZWVuYCBhbmQgYG1EcmVhbWluZ0xvY2tzY3JlZW5gXG4gKiBkbyBub3Qgd29yayB0byBkZXRlY3QgbG9jayBzdGF0dXMuIEluc3RlYWQsIGtleWd1YXJkIHByZWZlcmVuY2VzIGhlbHBzIHRvIGRldGVjdCB0aGUgbG9jayBjb25kaXRpb24uXG4gKiBTb21lIGRldmljZXMgc3VjaCBhcyBBbmRyb2lkIFRWIGRvIG5vdCBoYXZlIGtleWd1YXJkLCBzbyB3ZSBzaG91bGQga2VlcFxuICogc2NyZWVuIGNvbmRpdGlvbiBhcyB0aGlzIHByaW1hcnkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkdW1wc3lzIC0gVGhlIG91dHB1dCBvZiBkdW1wc3lzIHdpbmRvdyBjb21tYW5kLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBsb2NrIHNjcmVlbiBpcyBzaG93aW5nLlxuICovXG5mdW5jdGlvbiBpc1Nob3dpbmdMb2Nrc2NyZWVuIChkdW1wc3lzKSB7XG4gIHJldHVybiBfLnNvbWUoWydtU2hvd2luZ0xvY2tzY3JlZW49dHJ1ZScsICdtRHJlYW1pbmdMb2Nrc2NyZWVuPXRydWUnXSwgKHgpID0+IGR1bXBzeXMuaW5jbHVkZXMoeCkpXG4gICAgLy8gYG1Jc1Nob3dpbmdgIGFuZCBgbUlucHV0UmVzdHJpY3RlZGAgYXJlIGB0cnVlYCBpbiBsb2NrIGNvbmRpdGlvbi4gYGZhbHNlYCBpcyB1bmxvY2sgY29uZGl0aW9uLlxuICAgIHx8IF8uZXZlcnkoWy9LZXlndWFyZFN0YXRlTW9uaXRvcltcXG5cXHNdK21Jc1Nob3dpbmc9dHJ1ZS8sIC9cXHMrbUlucHV0UmVzdHJpY3RlZD10cnVlL10sICh4KSA9PiB4LnRlc3QoZHVtcHN5cykpO1xufVxuXG4vKlxuICogQ2hlY2tzIG1DdXJyZW50Rm9jdXMgaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lIGlmIEtleWd1YXJkIGlzIGFjdGl2YXRlZFxuICovXG5mdW5jdGlvbiBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQgKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvbUN1cnJlbnRGb2N1cy4rS2V5Z3VhcmQvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuIChtICYmIG0ubGVuZ3RoICYmIG1bMF0pID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKlxuICogUmVhZHMgU3VyZmFjZU9yaWVudGF0aW9uIGluIGR1bXBzeXMgb3V0cHV0XG4gKi9cbmZ1bmN0aW9uIGdldFN1cmZhY2VPcmllbnRhdGlvbiAoZHVtcHN5cykge1xuICBsZXQgbSA9IC9TdXJmYWNlT3JpZW50YXRpb246IFxcZC9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gbSAmJiBwYXJzZUludChtWzBdLnNwbGl0KCc6JylbMV0sIDEwKTtcbn1cblxuLypcbiAqIENoZWNrcyBtU2NyZWVuT25GdWxseSBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmUgaWYgc2NyZWVuIGlzIHNob3dpbmdcbiAqIERlZmF1bHQgaXMgdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1NjcmVlbk9uRnVsbHkgKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvbVNjcmVlbk9uRnVsbHk9XFx3Ky9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gIW0gfHwgLy8gaWYgaW5mb3JtYXRpb24gaXMgbWlzc2luZyB3ZSBhc3N1bWUgc2NyZWVuIGlzIGZ1bGx5IG9uXG4gICAgICAgICAobSAmJiBtLmxlbmd0aCA+IDAgJiYgbVswXS5zcGxpdCgnPScpWzFdID09PSAndHJ1ZScpIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb21tYW5kIGxpbmUgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBnaXZlblxuICogYXBwbGljYXRpb24gc3RhcnR1cCBvcHRpb25zXG4gKlxuICogQHBhcmFtIHtTdGFydEFwcE9wdGlvbnN9IHN0YXJ0QXBwT3B0aW9ucyAtIEFwcGxpY2F0aW9uIG9wdGlvbnMgbWFwcGluZ1xuICogQHBhcmFtIHtudW1iZXJ9IGFwaUxldmVsIC0gVGhlIGFjdHVhbCBPUyBBUEkgbGV2ZWxcbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgYWN0dWFsIGNvbW1hbmQgbGluZSBhcnJheVxuICovXG5mdW5jdGlvbiBidWlsZFN0YXJ0Q21kIChzdGFydEFwcE9wdGlvbnMsIGFwaUxldmVsKSB7XG4gIGNvbnN0IHtcbiAgICB1c2VyLFxuICAgIHdhaXRGb3JMYXVuY2gsXG4gICAgcGtnLFxuICAgIGFjdGl2aXR5LFxuICAgIGFjdGlvbixcbiAgICBjYXRlZ29yeSxcbiAgICBzdG9wQXBwLFxuICAgIGZsYWdzLFxuICB9ID0gc3RhcnRBcHBPcHRpb25zO1xuICBjb25zdCBjbWQgPSBbJ2FtJywgJ3N0YXJ0J107XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGlmICh3YWl0Rm9yTGF1bmNoKSB7XG4gICAgY21kLnB1c2goJy1XJyk7XG4gIH1cbiAgaWYgKGFjdGl2aXR5ICYmIHBrZykge1xuICAgIGNtZC5wdXNoKCctbicsIGAke3BrZ30vJHthY3Rpdml0eX1gKTtcbiAgfVxuICBpZiAoc3RvcEFwcCAmJiBhcGlMZXZlbCA+PSAxNSkge1xuICAgIGNtZC5wdXNoKCctUycpO1xuICB9XG4gIGlmIChhY3Rpb24pIHtcbiAgICBjbWQucHVzaCgnLWEnLCBhY3Rpb24pO1xuICB9XG4gIGlmIChjYXRlZ29yeSkge1xuICAgIGNtZC5wdXNoKCctYycsIGNhdGVnb3J5KTtcbiAgfVxuICBpZiAoZmxhZ3MpIHtcbiAgICBjbWQucHVzaCgnLWYnLCBmbGFncyk7XG4gIH1cbiAgaWYgKHN0YXJ0QXBwT3B0aW9ucy5vcHRpb25hbEludGVudEFyZ3VtZW50cykge1xuICAgIC8vIGV4cGVjdCBvcHRpb25hbEludGVudEFyZ3VtZW50cyB0byBiZSBhIHNpbmdsZSBzdHJpbmcgb2YgdGhlIGZvcm06XG4gICAgLy8gICAgIFwiLWZsYWcga2V5XCJcbiAgICAvLyAgICAgXCItZmxhZyBrZXkgdmFsdWVcIlxuICAgIC8vIG9yIGEgY29tYmluYXRpb24gb2YgdGhlc2UgKGUuZy4sIFwiLWZsYWcxIGtleTEgLWZsYWcyIGtleTIgdmFsdWUyXCIpXG5cbiAgICAvLyB0YWtlIGEgc3RyaW5nIGFuZCBwYXJzZSBvdXQgdGhlIHBhcnQgYmVmb3JlIGFueSBzcGFjZXMsIGFuZCBhbnl0aGluZyBhZnRlclxuICAgIC8vIHRoZSBmaXJzdCBzcGFjZVxuICAgIGxldCBwYXJzZUtleVZhbHVlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICAgIGxldCBzcGFjZSA9IHN0ci5pbmRleE9mKCcgJyk7XG4gICAgICBpZiAoc3BhY2UgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHIubGVuZ3RoID8gW3N0cl0gOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbc3RyLnN1YnN0cmluZygwLCBzcGFjZSkudHJpbSgpLCBzdHIuc3Vic3RyaW5nKHNwYWNlICsgMSkudHJpbSgpXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY3ljbGUgdGhyb3VnaCB0aGUgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgYW5kIHB1bGwgb3V0IHRoZSBhcmd1bWVudHNcbiAgICAvLyBhZGQgYSBzcGFjZSBpbml0aWFsbHkgc28gZmxhZ3MgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhcmd1bWVudHMgdGhhdFxuICAgIC8vIGhhdmUgaW50ZXJuYWwgaHlwaGVuc1xuICAgIGxldCBvcHRpb25hbEludGVudEFyZ3VtZW50cyA9IGAgJHtzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHN9YDtcbiAgICBsZXQgcmUgPSAvICgtW15cXHNdKykgKC4rKS87XG4gICAgd2hpbGUgKHRydWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgIGxldCBhcmdzID0gcmUuZXhlYyhvcHRpb25hbEludGVudEFyZ3VtZW50cyk7XG4gICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgaWYgKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIG5vIG1vcmUgZmxhZ3MsIHNvIHRoZSByZW1haW5kZXIgY2FuIGJlIHRyZWF0ZWQgYXMgJ2tleScgb3IgJ2tleSB2YWx1ZSdcbiAgICAgICAgICBjbWQucHVzaC5hcHBseShjbWQsIHBhcnNlS2V5VmFsdWUob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBhcmUgZG9uZVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gdGFrZSB0aGUgZmxhZyBhbmQgc2VlIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZ1xuICAgICAgLy8gaWYgaXQgaXMgbm90LCB0aGVuIGl0IG1lYW5zIHdlIGhhdmUgYmVlbiB0aHJvdWdoIGFscmVhZHksIGFuZFxuICAgICAgLy8gd2hhdCBpcyBiZWZvcmUgdGhlIGZsYWcgaXMgdGhlIGFyZ3VtZW50IGZvciB0aGUgcHJldmlvdXMgZmxhZ1xuICAgICAgbGV0IGZsYWcgPSBhcmdzWzFdO1xuICAgICAgbGV0IGZsYWdQb3MgPSBvcHRpb25hbEludGVudEFyZ3VtZW50cy5pbmRleE9mKGZsYWcpO1xuICAgICAgaWYgKGZsYWdQb3MgIT09IDApIHtcbiAgICAgICAgbGV0IHByZXZBcmdzID0gb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMuc3Vic3RyaW5nKDAsIGZsYWdQb3MpO1xuICAgICAgICBjbWQucHVzaC5hcHBseShjbWQsIHBhcnNlS2V5VmFsdWUocHJldkFyZ3MpKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRoZSBmbGFnLCBhcyB0aGVyZSBhcmUgbm8gbW9yZSBlYXJsaWVyIGFyZ3VtZW50c1xuICAgICAgY21kLnB1c2goZmxhZyk7XG5cbiAgICAgIC8vIG1ha2Ugb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgaG9sZCB0aGUgcmVtYWluZGVyXG4gICAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyA9IGFyZ3NbMl07XG4gICAgfVxuICB9XG4gIHJldHVybiBjbWQ7XG59XG5cbmNvbnN0IGdldFNka1Rvb2xzVmVyc2lvbiA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTZGtUb29sc1ZlcnNpb24gKCkge1xuICBjb25zdCBhbmRyb2lkSG9tZSA9IHByb2Nlc3MuZW52LkFORFJPSURfSE9NRTtcbiAgaWYgKCFhbmRyb2lkSG9tZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQU5EUk9JRF9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGV4cGVjdGVkIHRvIGJlIHNldCcpO1xuICB9XG4gIGNvbnN0IHByb3BlcnRpZXNQYXRoID0gcGF0aC5yZXNvbHZlKGFuZHJvaWRIb21lLCAndG9vbHMnLCAnc291cmNlLnByb3BlcnRpZXMnKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocHJvcGVydGllc1BhdGgpKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCBmaW5kICR7cHJvcGVydGllc1BhdGh9IGZpbGUgdG8gcmVhZCBTREsgdmVyc2lvbiBmcm9tYCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHByb3BlcnRpZXNDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocHJvcGVydGllc1BhdGgsICd1dGY4Jyk7XG4gIGNvbnN0IHZlcnNpb25NYXRjaGVyID0gbmV3IFJlZ0V4cCgvUGtnXFwuUmV2aXNpb249KFxcZCspXFwuPyhcXGQrKT9cXC4/KFxcZCspPy8pO1xuICBjb25zdCBtYXRjaCA9IHZlcnNpb25NYXRjaGVyLmV4ZWMocHJvcGVydGllc0NvbnRlbnQpO1xuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFqb3I6IHBhcnNlSW50KG1hdGNoWzFdLCAxMCksXG4gICAgICBtaW5vcjogbWF0Y2hbMl0gPyBwYXJzZUludChtYXRjaFsyXSwgMTApIDogMCxcbiAgICAgIGJ1aWxkOiBtYXRjaFszXSA/IHBhcnNlSW50KG1hdGNoWzNdLCAxMCkgOiAwXG4gICAgfTtcbiAgfVxuICBsb2cud2FybihgQ2Fubm90IHBhcnNlIFwiUGtnLlJldmlzaW9uXCIgdmFsdWUgZnJvbSAke3Byb3BlcnRpZXNQYXRofWApO1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIGZ1bGwgcGF0aHMgdG8gYWxsICdidWlsZC10b29scycgc3ViZm9sZGVycyB1bmRlciB0aGUgcGFydGljdWxhclxuICogU0RLIHJvb3QgZm9sZGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNka1Jvb3QgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBBbmRyb2lkIFNESyByb290IGZvbGRlclxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBmdWxsIHBhdGhzIHRvIHRoZSByZXN1bHRpbmcgZm9sZGVycyBzb3J0ZWQgYnlcbiAqIG1vZGlmaWNhdGlvbiBkYXRlICh0aGUgbmV3ZXN0IGNvbWVzIGZpcnN0KSBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIG1hY3RoZXMgd2VyZSBmb3VuZFxuICovXG5jb25zdCBnZXRCdWlsZFRvb2xzRGlycyA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRCdWlsZFRvb2xzRGlycyAoc2RrUm9vdCkge1xuICBsZXQgYnVpbGRUb29sc0RpcnMgPSBhd2FpdCBmcy5nbG9iKCcqLycsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAnYnVpbGQtdG9vbHMnKSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYnVpbGRUb29sc0RpcnMgPSBidWlsZFRvb2xzRGlyc1xuICAgICAgLm1hcCgoZGlyKSA9PiBbcGF0aC5iYXNlbmFtZShkaXIpLCBkaXJdKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHNlbXZlci5yY29tcGFyZShhWzBdLCBiWzBdKSlcbiAgICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IHNvcnQgYnVpbGQtdG9vbHMgZm9sZGVycyAke0pTT04uc3RyaW5naWZ5KGJ1aWxkVG9vbHNEaXJzLm1hcCgoZGlyKSA9PiBwYXRoLmJhc2VuYW1lKGRpcikpKX0gYCArXG4gICAgICBgYnkgc2VtYW50aWMgdmVyc2lvbiBuYW1lcy5gKTtcbiAgICBsb2cud2FybihgRmFsbGluZyBiYWNrIHRvIHNvcnRpbmcgYnkgbW9kaWZpY2F0aW9uIGRhdGUuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGNvbnN0IHBhaXJzID0gYXdhaXQgQi5tYXAoYnVpbGRUb29sc0RpcnMsIGFzeW5jIChkaXIpID0+IFsoYXdhaXQgZnMuc3RhdChkaXIpKS5tdGltZS52YWx1ZU9mKCksIGRpcl0pO1xuICAgIGJ1aWxkVG9vbHNEaXJzID0gcGFpcnNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhWzBdIDwgYlswXSlcbiAgICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pO1xuICB9XG4gIGxvZy5pbmZvKGBGb3VuZCAke2J1aWxkVG9vbHNEaXJzLmxlbmd0aH0gJ2J1aWxkLXRvb2xzJyBmb2xkZXJzIHVuZGVyICcke3Nka1Jvb3R9JyAobmV3ZXN0IGZpcnN0KTpgKTtcbiAgZm9yIChsZXQgZGlyIG9mIGJ1aWxkVG9vbHNEaXJzKSB7XG4gICAgbG9nLmluZm8oYCAgICAke2Rpcn1gKTtcbiAgfVxuICByZXR1cm4gYnVpbGRUb29sc0RpcnM7XG59KTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbiBuYW1lcyBlbmNvZGVkIGluIGBkdW1wc3lzIHBhY2thZ2VgIGNvbW1hbmQgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkdW1wc3lzT3V0cHV0IC0gVGhlIGFjdHVhbCBjb21tYW5kIG91dHB1dC5cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZ3JvdXBOYW1lcyAtIFRoZSBsaXN0IG9mIGdyb3VwIG5hbWVzIHRvIGxpc3QgcGVybWlzc2lvbnMgZm9yLlxuICogQHBhcmFtIHs/Ym9vbGVhbn0gZ3JhbnRlZFN0YXRlIC0gVGhlIGV4cGVjdGVkIHN0YXRlIG9mIGBncmFudGVkYCBhdHRyaWJ1dGUgdG8gZmlsdGVyIHdpdGguXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBmaWx0ZXJpbmcgaXMgZG9uZSBpZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGxpc3Qgb2YgbWF0Y2hlZCBwZXJtaXNzaW9uIG5hbWVzIG9yIGFuIGVtcHR5IGxpc3QgaWYgbm8gbWF0Y2hlcyB3ZXJlIGZvdW5kLlxuICovXG5jb25zdCBleHRyYWN0TWF0Y2hpbmdQZXJtaXNzaW9ucyA9IGZ1bmN0aW9uIChkdW1wc3lzT3V0cHV0LCBncm91cE5hbWVzLCBncmFudGVkU3RhdGUgPSBudWxsKSB7XG4gIGNvbnN0IGdyb3VwUGF0dGVybkJ5TmFtZSA9IChncm91cE5hbWUpID0+IG5ldyBSZWdFeHAoYF4oXFxcXHMqJHtfLmVzY2FwZVJlZ0V4cChncm91cE5hbWUpfSBwZXJtaXNzaW9uczpbXFxcXHNcXFxcU10rKWAsICdtJyk7XG4gIGNvbnN0IGluZGVudFBhdHRlcm4gPSAvXFxTfCQvO1xuICBjb25zdCBwZXJtaXNzaW9uTmFtZVBhdHRlcm4gPSAvYW5kcm9pZFxcLlxcdypcXC4/cGVybWlzc2lvblxcLlxcdysvO1xuICBjb25zdCBncmFudGVkU3RhdGVQYXR0ZXJuID0gL1xcYmdyYW50ZWQ9KFxcdyspLztcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAoY29uc3QgZ3JvdXBOYW1lIG9mIGdyb3VwTmFtZXMpIHtcbiAgICBjb25zdCBncm91cE1hdGNoID0gZ3JvdXBQYXR0ZXJuQnlOYW1lKGdyb3VwTmFtZSkuZXhlYyhkdW1wc3lzT3V0cHV0KTtcbiAgICBpZiAoIWdyb3VwTWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVzID0gZ3JvdXBNYXRjaFsxXS5zcGxpdCgnXFxuJyk7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRpdGxlSW5kZW50ID0gbGluZXNbMF0uc2VhcmNoKGluZGVudFBhdHRlcm4pO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcy5zbGljZSgxKSkge1xuICAgICAgY29uc3QgY3VycmVudEluZGVudCA9IGxpbmUuc2VhcmNoKGluZGVudFBhdHRlcm4pO1xuICAgICAgaWYgKGN1cnJlbnRJbmRlbnQgPD0gdGl0bGVJbmRlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBlcm1pc3Npb25OYW1lTWF0Y2ggPSBwZXJtaXNzaW9uTmFtZVBhdHRlcm4uZXhlYyhsaW5lKTtcbiAgICAgIGlmICghcGVybWlzc2lvbk5hbWVNYXRjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgIHBlcm1pc3Npb246IHBlcm1pc3Npb25OYW1lTWF0Y2hbMF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZ3JhbnRlZFN0YXRlTWF0Y2ggPSBncmFudGVkU3RhdGVQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAoZ3JhbnRlZFN0YXRlTWF0Y2gpIHtcbiAgICAgICAgaXRlbS5ncmFudGVkID0gZ3JhbnRlZFN0YXRlTWF0Y2hbMV0gPT09ICd0cnVlJztcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkUmVzdWx0ID0gcmVzdWx0XG4gICAgLmZpbHRlcigoaXRlbSkgPT4gIV8uaXNCb29sZWFuKGdyYW50ZWRTdGF0ZSkgfHwgaXRlbS5ncmFudGVkID09PSBncmFudGVkU3RhdGUpXG4gICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5wZXJtaXNzaW9uKTtcbiAgbG9nLmRlYnVnKGBSZXRyaWV2ZWQgJHt1dGlsLnBsdXJhbGl6ZSgncGVybWlzc2lvbicsIGZpbHRlcmVkUmVzdWx0Lmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgIGBmcm9tICR7Z3JvdXBOYW1lc30gJHt1dGlsLnBsdXJhbGl6ZSgnZ3JvdXAnLCBncm91cE5hbWVzLmxlbmd0aCwgZmFsc2UpfWApO1xuICByZXR1cm4gZmlsdGVyZWRSZXN1bHQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFydGlhbEluc3RhbGwgW2ZhbHNlXSAtIEluc3RhbGwgYXBrcyBwYXJ0aWFsbHkuIEl0IGlzIHVzZWQgZm9yICdpbnN0YWxsLW11bHRpcGxlJy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9hbmRyb2lkLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTEwNjQvd2hhdC1pcy1hLXBhcnRpYWwtYXBwbGljYXRpb24taW5zdGFsbC12aWEtYWRiXG4gKi9cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGdpdmVuIG9wdGlvbnMgaW50byB0aGUgbGlzdCBvZiBgYWRiIGluc3RhbGwuaW5zdGFsbC1tdWx0aXBsZWAgY29tbWFuZCBhcmd1bWVudHNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYXBpTGV2ZWwgLSBUaGUgY3VycmVudCBBUEkgbGV2ZWxcbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgbWFwcGluZyB0byB0cmFuc2Zvcm1cbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgYXJyYXkgb2YgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSW5zdGFsbEFyZ3MgKGFwaUxldmVsLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG9wdGlvbnMucmVwbGFjZSkgfHwgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgcmVzdWx0LnB1c2goJy1yJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuYWxsb3dUZXN0UGFja2FnZXMpIHtcbiAgICByZXN1bHQucHVzaCgnLXQnKTtcbiAgfVxuICBpZiAob3B0aW9ucy51c2VTZGNhcmQpIHtcbiAgICByZXN1bHQucHVzaCgnLXMnKTtcbiAgfVxuICBpZiAob3B0aW9ucy5ncmFudFBlcm1pc3Npb25zKSB7XG4gICAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2tpcHBpbmcgcGVybWlzc2lvbnMgZ3JhbnQgb3B0aW9uLCBzaW5jZSBgICtcbiAgICAgICAgICAgICAgICBgdGhlIGN1cnJlbnQgQVBJIGxldmVsICR7YXBpTGV2ZWx9IGRvZXMgbm90IHN1cHBvcnQgYXBwbGljYXRpb25zIGAgK1xuICAgICAgICAgICAgICAgIGBwZXJtaXNzaW9ucyBjdXN0b21pemF0aW9uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKCctZycpO1xuICAgIH1cbiAgfVxuICAvLyBGb3IgbXVsdGlwbGUtaW5zdGFsbFxuICBpZiAob3B0aW9ucy5wYXJ0aWFsSW5zdGFsbCkge1xuICAgIHJlc3VsdC5wdXNoKCctcCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYW5pZmVzdEluZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwa2cgLSBUaGUgYXBwbGljYXRpb24gaWRlbnRpZmllclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGl2aXR5IC0gVGhlIG5hbWUgb2YgdGhlIG1haW4gcGFja2FnZSBhY3Rpdml0eVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB2ZXJzaW9uQ29kZSAtIFRoZSB2ZXJzaW9uIGNvZGUgbnVtYmVyIChtaWdodCBiZSBgTmFOYClcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmVyc2lvbk5hbWUgLSBUaGUgdmVyc2lvbiBuYW1lIChtaWdodCBiZSBgbnVsbGApXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHBhcnNpbmcgb2YgdGhlIG1hbmlmZXN0IG9iamVjdCBpbiBvcmRlclxuICogdG8gZXh0cmFjdCBzb21lIHZpdGFsIHZhbHVlcyBmcm9tIGl0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG1hbmlmZXN0IFRoZSBtYW5pZmVzdCBjb250ZW50IGZvcm1hdHRlZCBhcyBKU09OXG4gKiBTZWUgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYWRia2l0LWFwa3JlYWRlciBmb3IgZGV0YWlsZWQgZm9ybWF0IGRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyB7TWFuaWZlc3RJbmZvfVxuICovXG5mdW5jdGlvbiBwYXJzZU1hbmlmZXN0IChtYW5pZmVzdCkge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgcGtnOiBtYW5pZmVzdC5wYWNrYWdlLFxuICAgIHZlcnNpb25Db2RlOiBwYXJzZUludChtYW5pZmVzdC52ZXJzaW9uQ29kZSwgMTApLFxuICAgIHZlcnNpb25OYW1lOiBtYW5pZmVzdC52ZXJzaW9uTmFtZSB8fCBudWxsLFxuICB9O1xuICBpZiAoIW1hbmlmZXN0LmFwcGxpY2F0aW9uKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIExvb2sgZm9yIGVuYWJsZWQgYWN0aXZpdHkgb3IgYWN0aXZpdHktYWxpYXMgd2l0aFxuICAvLyBhY3Rpb24gPT0gYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4gYW5kXG4gIC8vIGNhdGVnb3J5ID09IGFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSXG4gIGZvciAoY29uc3QgYWN0aXZpdHkgb2YgW1xuICAgIC4uLm1hbmlmZXN0LmFwcGxpY2F0aW9uLmFjdGl2aXRpZXMsXG4gICAgLi4ubWFuaWZlc3QuYXBwbGljYXRpb24uYWN0aXZpdHlBbGlhc2VzLFxuICBdKSB7XG4gICAgaWYgKGFjdGl2aXR5LmVuYWJsZWQgPT09IGZhbHNlIHx8IF8uaXNFbXB0eShhY3Rpdml0eS5pbnRlbnRGaWx0ZXJzKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7YWN0aW9ucywgY2F0ZWdvcmllc30gb2YgYWN0aXZpdHkuaW50ZW50RmlsdGVycykge1xuICAgICAgaWYgKF8uaXNFbXB0eShhY3Rpb25zKSB8fCBfLmlzRW1wdHkoY2F0ZWdvcmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzTWFpbkFjdGlvbiA9IGFjdGlvbnNcbiAgICAgICAgLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyk7XG4gICAgICBjb25zdCBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBjYXRlZ29yaWVzXG4gICAgICAgIC5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT09ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicpO1xuICAgICAgaWYgKGlzTWFpbkFjdGlvbiAmJiBpc0xhdW5jaGVyQ2F0ZWdvcnkpIHtcbiAgICAgICAgcmVzdWx0LmFjdGl2aXR5ID0gYWN0aXZpdHkubmFtZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYXBrIHN0cmluZ3MgZnJvbSBhYXB0IHRvb2wgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd091dHB1dCBUaGUgYWN0dWFsIHRvb2wgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnTWFya2VyIFRoZSBjb25maWcgbWFya2VyLiBVc3VhbGx5XG4gKiBhIGxhbmd1YWdlIGFiYnJldmlhdGlvbiBvciBgKGRlZmF1bHQpYFxuICogQHJldHVybnMge09iamVjdH0gU3RyaW5ncyBpZHMgdG8gdmFsdWVzIG1hcHBpbmcuIFBsdXJhbFxuICogdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyBhcnJheXMuIElmIG5vIGNvbmZpZyBmb3VuZCBmb3IgdGhlXG4gKiBnaXZlbiBtYXJrZXIgdGhlbiBhbiBlbXB0eSBtYXBwaW5nIGlzIHJldHVybmVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUFhcHRTdHJpbmdzIChyYXdPdXRwdXQsIGNvbmZpZ01hcmtlcikge1xuICBjb25zdCBub3JtYWxpemVTdHJpbmdNYXRjaCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvXCIkLywgJycpLnJlcGxhY2UoL15cIi8sICcnKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJyk7XG4gIH07XG5cbiAgY29uc3QgYXBrU3RyaW5ncyA9IHt9O1xuICBsZXQgaXNJbkNvbmZpZyA9IGZhbHNlO1xuICBsZXQgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICBsZXQgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gIC8vIFRoZSBwYXR0ZXJuIG1hdGNoZXMgYW55IHF1b3RlZCBjb250ZW50IGluY2x1ZGluZyBlc2NhcGVkIHF1b3Rlc1xuICBjb25zdCBxdW90ZWRTdHJpbmdQYXR0ZXJuID0gL1wiW15cIlxcXFxdKig/OlxcXFwuW15cIlxcXFxdKikqXCIvO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3T3V0cHV0LnNwbGl0KG9zLkVPTCkpIHtcbiAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgIGlmIChfLmlzRW1wdHkodHJpbW1lZExpbmUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoWydjb25maWcnLCAndHlwZScsICdzcGVjJywgJ1BhY2thZ2UnXS5zb21lKCh4KSA9PiB0cmltbWVkTGluZS5zdGFydHNXaXRoKHgpKSkge1xuICAgICAgaXNJbkNvbmZpZyA9IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYGNvbmZpZyAke2NvbmZpZ01hcmtlcn06YCk7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNJbkNvbmZpZykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJ3Jlc291cmNlJykpIHtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuXG4gICAgICBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJzpzdHJpbmcvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvOnN0cmluZ1xcLyhcXFMrKTovLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6cGx1cmFscy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC86cGx1cmFsc1xcLyhcXFMrKTovLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlzSW5QbHVyYWxHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCAmJiB0cmltbWVkTGluZS5zdGFydHNXaXRoKCcoc3RyaW5nJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gcXVvdGVkU3RyaW5nUGF0dGVybi5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IG5vcm1hbGl6ZVN0cmluZ01hdGNoKG1hdGNoWzBdKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCAmJiBpc0luUGx1cmFsR3JvdXAgJiYgdHJpbW1lZExpbmUuaW5jbHVkZXMoJzogKHN0cmluZycpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHF1b3RlZFN0cmluZ1BhdHRlcm4uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBbXG4gICAgICAgICAgLi4uKGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdIHx8IFtdKSxcbiAgICAgICAgICBub3JtYWxpemVTdHJpbmdNYXRjaChtYXRjaFswXSksXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFwa1N0cmluZ3M7XG59XG5cbi8qKlxuICogUGFyc2VzIGFwayBzdHJpbmdzIGZyb20gYWFwdDIgdG9vbCBvdXRwdXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3T3V0cHV0IFRoZSBhY3R1YWwgdG9vbCBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWdNYXJrZXIgVGhlIGNvbmZpZyBtYXJrZXIuIFVzdWFsbHlcbiAqIGEgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uIG9yIGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgb25lXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTdHJpbmdzIGlkcyB0byB2YWx1ZXMgbWFwcGluZy4gUGx1cmFsXG4gKiB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIGFycmF5cy4gSWYgbm8gY29uZmlnIGZvdW5kIGZvciB0aGVcbiAqIGdpdmVuIG1hcmtlciB0aGVuIGFuIGVtcHR5IG1hcHBpbmcgaXMgcmV0dXJuZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQWFwdDJTdHJpbmdzIChyYXdPdXRwdXQsIGNvbmZpZ01hcmtlcikge1xuICBjb25zdCBhbGxMaW5lcyA9IHJhd091dHB1dC5zcGxpdChvcy5FT0wpO1xuICBmdW5jdGlvbiBleHRyYWN0Q29udGVudCAoc3RhcnRJZHgpIHtcbiAgICBsZXQgaWR4ID0gc3RhcnRJZHg7XG4gICAgY29uc3Qgc3RhcnRDaGFyUG9zID0gYWxsTGluZXNbc3RhcnRJZHhdLmluZGV4T2YoJ1wiJyk7XG4gICAgaWYgKHN0YXJ0Q2hhclBvcyA8IDApIHtcbiAgICAgIHJldHVybiBbbnVsbCwgaWR4XTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIHdoaWxlIChpZHggPCBhbGxMaW5lcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0aW9uQ2hhck1hdGNoID0gL1wiJC8uZXhlYyhhbGxMaW5lc1tpZHhdKTtcbiAgICAgIGlmICh0ZXJtaW5hdGlvbkNoYXJNYXRjaCkge1xuICAgICAgICBjb25zdCB0ZXJtaW5hdGlvbkNoYXJQb3MgPSB0ZXJtaW5hdGlvbkNoYXJNYXRjaC5pbmRleDtcbiAgICAgICAgaWYgKHN0YXJ0SWR4ID09PSBpZHgpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoc3RhcnRDaGFyUG9zICsgMSwgdGVybWluYXRpb25DaGFyUG9zKSxcbiAgICAgICAgICAgIGlkeFxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgJHtyZXN1bHR9XFxcXG4ke18udHJpbVN0YXJ0KGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKDAsIHRlcm1pbmF0aW9uQ2hhclBvcykpfWAsXG4gICAgICAgICAgaWR4LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgaWYgKGlkeCA+IHN0YXJ0SWR4KSB7XG4gICAgICAgIHJlc3VsdCArPSBgXFxcXG4ke18udHJpbVN0YXJ0KGFsbExpbmVzW2lkeF0pfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoc3RhcnRDaGFyUG9zICsgMSk7XG4gICAgICB9XG4gICAgICArK2lkeDtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXN1bHQsIGlkeF07XG4gIH1cblxuICBjb25zdCBhcGtTdHJpbmdzID0ge307XG4gIGxldCBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gIGxldCBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgbGV0IGlzSW5DdXJyZW50Q29uZmlnID0gZmFsc2U7XG4gIGxldCBsaW5lSW5kZXggPSAwO1xuICB3aGlsZSAobGluZUluZGV4IDwgYWxsTGluZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBhbGxMaW5lc1tsaW5lSW5kZXhdLnRyaW0oKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRyaW1tZWRMaW5lKSkge1xuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoWyd0eXBlJywgJ1BhY2thZ2UnXS5zb21lKCh4KSA9PiB0cmltbWVkTGluZS5zdGFydHNXaXRoKHgpKSkge1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgncmVzb3VyY2UnKSkge1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuXG4gICAgICBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJ3N0cmluZy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9zdHJpbmdcXC8oXFxTKykvLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCdwbHVyYWxzLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL3BsdXJhbHNcXC8oXFxTKykvLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlzSW5QbHVyYWxHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRSZXNvdXJjZUlkKSB7XG4gICAgICBpZiAoaXNJblBsdXJhbEdyb3VwKSB7XG4gICAgICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCcoJykpIHtcbiAgICAgICAgICBpc0luQ3VycmVudENvbmZpZyA9IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYCgke2NvbmZpZ01hcmtlcn0pYCk7XG4gICAgICAgICAgKytsaW5lSW5kZXg7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSW5DdXJyZW50Q29uZmlnKSB7XG4gICAgICAgICAgY29uc3QgW2NvbnRlbnQsIGlkeF0gPSBleHRyYWN0Q29udGVudChsaW5lSW5kZXgpO1xuICAgICAgICAgIGxpbmVJbmRleCA9IGlkeDtcbiAgICAgICAgICBpZiAoXy5pc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBbXG4gICAgICAgICAgICAgIC4uLihhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSB8fCBbXSksXG4gICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKGAoJHtjb25maWdNYXJrZXJ9KWApKSB7XG4gICAgICAgIGNvbnN0IFtjb250ZW50LCBpZHhdID0gZXh0cmFjdENvbnRlbnQobGluZUluZGV4KTtcbiAgICAgICAgbGluZUluZGV4ID0gaWR4O1xuICAgICAgICBpZiAoXy5pc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgICsrbGluZUluZGV4O1xuICB9XG4gIHJldHVybiBhcGtTdHJpbmdzO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGNvbmZpZyBtYXJrZXIsIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHBhcnNlLi4gbWV0aG9kc1xuICogdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGggcmVzb3VyY2UgZm9ybWF0cyBnZW5lcmF0ZWQgYnkgYWFwdCgyKSB0b29sXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZmlnc0dldHRlciBUaGUgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IGlzIGEgbGlzdFxuICogb2YgYXBrIGNvbmZpZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNpcmVkTWFya2VyIFRoZSBkZXNpcmVkIGNvbmZpZyBtYXJrZXIgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWZhdWx0TWFya2VyIFRoZSBkZWZhdWx0IGNvbmZpZyBtYXJrZXIgdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBjb25maWcgbWFya2VyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENvbmZpZ01hcmtlciAoY29uZmlnc0dldHRlciwgZGVzaXJlZE1hcmtlciwgZGVmYXVsdE1hcmtlcikge1xuICBsZXQgY29uZmlnTWFya2VyID0gZGVzaXJlZE1hcmtlciB8fCBkZWZhdWx0TWFya2VyO1xuICBpZiAoY29uZmlnTWFya2VyLmluY2x1ZGVzKCctJykgJiYgIWNvbmZpZ01hcmtlci5pbmNsdWRlcygnLXInKSkge1xuICAgIGNvbmZpZ01hcmtlciA9IGNvbmZpZ01hcmtlci5yZXBsYWNlKCctJywgJy1yJyk7XG4gIH1cbiAgY29uc3QgY29uZmlncyA9IGF3YWl0IGNvbmZpZ3NHZXR0ZXIoKTtcbiAgbG9nLmRlYnVnKGBSZXNvdXJjZSBjb25maWd1cmF0aW9uczogJHtKU09OLnN0cmluZ2lmeShjb25maWdzKX1gKTtcbiAgLy8gQXNzdW1lIHRoZSAnZW4nIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGRlZmF1bHQgb25lXG4gIGlmIChjb25maWdNYXJrZXIudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdlbicpXG4gICAgJiYgIWNvbmZpZ3Muc29tZSgoeCkgPT4geC50cmltKCkgPT09IGNvbmZpZ01hcmtlcikpIHtcbiAgICBsb2cuZGVidWcoYFJlc291cmNlIGNvbmZpZ3VyYXRpb24gbmFtZSAnJHtjb25maWdNYXJrZXJ9JyBpcyB1bmtub3duLiBgICtcbiAgICAgIGBSZXBsYWNpbmcgaXQgd2l0aCAnJHtkZWZhdWx0TWFya2VyfSdgKTtcbiAgICBjb25maWdNYXJrZXIgPSBkZWZhdWx0TWFya2VyO1xuICB9IGVsc2Uge1xuICAgIGxvZy5kZWJ1ZyhgU2VsZWN0ZWQgY29uZmlndXJhdGlvbjogJyR7Y29uZmlnTWFya2VyfSdgKTtcbiAgfVxuICByZXR1cm4gY29uZmlnTWFya2VyO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgb3V0cHV0IGluIEpTT04gZm9ybWF0IHJldHJpZXZlZCBmcm9tXG4gKiB0aGUgY29ycmVzcG9uZGluZyBBcHBpdW0gU2V0dGluZ3MgYnJvYWRjYXN0IGNhbGxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dCBUaGUgYWN0dWFsIGNvbW1hbmQgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gZW50aXR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW50aXR5IHdoaWNoIGlzXG4gKiBnb2luZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBwYXJzZWQgSlNPTiBvYmplY3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgb3V0cHV0IGNhbm5vdCBiZSBwYXJzZWRcbiAqIGFzIGEgdmFsaWQgSlNPTlxuICovXG5mdW5jdGlvbiBwYXJzZUpzb25EYXRhIChvdXRwdXQsIGVudGl0eU5hbWUpIHtcbiAgaWYgKCEvXFxicmVzdWx0PS0xXFxiLy50ZXN0KG91dHB1dCkgfHwgIS9cXGJkYXRhPVwiLy50ZXN0KG91dHB1dCkpIHtcbiAgICBsb2cuZGVidWcob3V0cHV0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gL1xcYmRhdGE9KFwiLispLy5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICBsb2cuZGVidWcob3V0cHV0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0LiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbiAgY29uc3QganNvblN0ciA9IF8udHJpbShtYXRjaFsxXSkucmVwbGFjZSgvKF5cIil8KFwiJCkvZywgJycpO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGpzb25TdHIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlICR7ZW50aXR5TmFtZX0gZnJvbSB0aGUgcmVzdWx0aW5nIGRhdGEgc3RyaW5nLiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBnaXZlbiBsYW5ndWFnZSBhbmQgY291bnRyeSBhYmJyZXZpYXRpb25zXG4gKiB0byBBVkQgYXJndW1lbnRzIGFycmF5XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSBMYW5ndWFnZSBuYW1lLCBmb3IgZXhhbXBsZSAnZnInXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNvdW50cnkgQ291bnRyeSBuYW1lLCBmb3IgZXhhbXBsZSAnQ0EnXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGdlbmVyYXRlZCBhcmd1bWVudHMuIFRoZVxuICogcmVzdWx0aW5nIGFycmF5IG1pZ2h0IGJlIGVtcHR5IGlmIGJvdGggYXJndW1lbnRzIGFyZSBlbXB0eVxuICovXG5mdW5jdGlvbiB0b0F2ZExvY2FsZUFyZ3MgKGxhbmd1YWdlLCBjb3VudHJ5KSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBpZiAobGFuZ3VhZ2UgJiYgXy5pc1N0cmluZyhsYW5ndWFnZSkpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMubGFuZ3VhZ2U9JHtsYW5ndWFnZS50b0xvd2VyQ2FzZSgpfWApO1xuICB9XG4gIGlmIChjb3VudHJ5ICYmIF8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMuY291bnRyeT0ke2NvdW50cnkudG9VcHBlckNhc2UoKX1gKTtcbiAgfVxuICBsZXQgbG9jYWxlO1xuICBpZiAoXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSAmJiBsYW5ndWFnZSAmJiBjb3VudHJ5KSB7XG4gICAgbG9jYWxlID0gbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSArICctJyArIGNvdW50cnkudG9VcHBlckNhc2UoKTtcbiAgfSBlbHNlIGlmIChsYW5ndWFnZSAmJiBfLmlzU3RyaW5nKGxhbmd1YWdlKSkge1xuICAgIGxvY2FsZSA9IGxhbmd1YWdlLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAoY291bnRyeSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgbG9jYWxlID0gY291bnRyeTtcbiAgfVxuICBpZiAobG9jYWxlKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmxvY2FsZT0ke2xvY2FsZX1gKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBBbmRyb2lkIHByZWZlcmVuY2VzIHJvb3RcbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZm9sZGVyIG9yIGBudWxsYCBpZiB0aGUgZm9sZGVyIGNhbm5vdCBiZSBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBbmRyb2lkUHJlZnNSb290ICgpIHtcbiAgbGV0IGxvY2F0aW9uID0gcHJvY2Vzcy5lbnYuQU5EUk9JRF9FTVVMQVRPUl9IT01FO1xuICBpZiAoYXdhaXQgZGlyRXhpc3RzKGxvY2F0aW9uKSkge1xuICAgIHJldHVybiBsb2NhdGlvbjtcbiAgfVxuXG4gIGlmIChsb2NhdGlvbikge1xuICAgIGxvZy53YXJuKGBUaGUgdmFsdWUgb2YgdGhlIEFORFJPSURfRU1VTEFUT1JfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJHtsb2NhdGlvbn0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgfVxuXG4gIGNvbnN0IGhvbWUgPSBwcm9jZXNzLmVudi5IT01FIHx8IHByb2Nlc3MuZW52LlVTRVJQUk9GSUxFO1xuICBpZiAoaG9tZSkge1xuICAgIGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGhvbWUsICcuYW5kcm9pZCcpO1xuICB9XG5cbiAgaWYgKCFhd2FpdCBkaXJFeGlzdHMobG9jYXRpb24pKSB7XG4gICAgbG9nLmRlYnVnKGBBbmRyb2lkIGNvbmZpZyByb290ICcke2xvY2F0aW9ufScgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgcGF0aCBleGlzdHMgb24gdGhlIGZpbGVzeXN0ZW0gYW5kIGlzIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsb2NhdGlvbiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnlcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5hc3luYyBmdW5jdGlvbiBkaXJFeGlzdHMgKGxvY2F0aW9uKSB7XG4gIHJldHVybiBsb2NhdGlvblxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhsb2NhdGlvbilcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChsb2NhdGlvbikpLmlzRGlyZWN0b3J5KCk7XG59XG5cbi8qKlxuICogRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiAqIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHBvc3NpYmxlIGlzc3VlcyB3aXRoIGhvdyBzeXN0ZW0gYHNwYXduYFxuICogY2FsbCBoYW5kbGVzIHRoZW0uXG4gKiBTZWUgaHR0cHM6Ly9kaXNjdXNzLmFwcGl1bS5pby90L2hvdy10by1tb2RpZnktd2QtcHJveHktYW5kLXVpYXV0b21hdG9yMi1zb3VyY2UtY29kZS10by1zdXBwb3J0LXVuaWNvZGUvMzM0NjZcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZyBOb24tZXNjYXBlZCBhcmd1bWVudCBzdHJpbmdcbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVNoZWxsQXJnIChhcmcpIHtcbiAgYXJnID0gYCR7YXJnfWA7XG4gIGlmIChzeXN0ZW0uaXNXaW5kb3dzKCkpIHtcbiAgICByZXR1cm4gL1smfF5cXHNdLy50ZXN0KGFyZykgPyBgXCIke2FyZy5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYCA6IGFyZztcbiAgfVxuICByZXR1cm4gYXJnLnJlcGxhY2UoLyYvZywgJ1xcXFwmJyk7XG59XG5cbmV4cG9ydCB7XG4gIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgsIHVuemlwRmlsZSxcbiAgZ2V0SU1FTGlzdEZyb21PdXRwdXQsIGdldEphdmFGb3JPcywgaXNTaG93aW5nTG9ja3NjcmVlbiwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkLFxuICBnZXRTdXJmYWNlT3JpZW50YXRpb24sIGlzU2NyZWVuT25GdWxseSwgYnVpbGRTdGFydENtZCwgZ2V0SmF2YUhvbWUsXG4gIHJvb3REaXIsIGdldFNka1Rvb2xzVmVyc2lvbiwgZ2V0QXBrc2lnbmVyRm9yT3MsIGdldEJ1aWxkVG9vbHNEaXJzLFxuICBnZXRBcGthbmFseXplckZvck9zLCBnZXRPcGVuU3NsRm9yT3MsIGV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zLCBBUEtTX0VYVEVOU0lPTixcbiAgQVBLX0lOU1RBTExfVElNRU9VVCwgQVBLU19JTlNUQUxMX1RJTUVPVVQsIGJ1aWxkSW5zdGFsbEFyZ3MsIEFQS19FWFRFTlNJT04sXG4gIERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCwgcGFyc2VNYW5pZmVzdCwgcGFyc2VBYXB0U3RyaW5ncywgcGFyc2VBYXB0MlN0cmluZ3MsXG4gIGZvcm1hdENvbmZpZ01hcmtlciwgcGFyc2VKc29uRGF0YSwgdW5zaWduQXBrLCB0b0F2ZExvY2FsZUFyZ3MsIHJlcXVpcmVTZGtSb290LFxuICBnZXRTZGtSb290RnJvbUVudiwgZ2V0QW5kcm9pZFByZWZzUm9vdCwgZGlyRXhpc3RzLCBlc2NhcGVTaGVsbEFyZyxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE9BQU8sR0FBR0MsYUFBQSxDQUFLQyxPQUFMLENBQWFDLFNBQWIsRUFBd0JDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxhQUFaLEdBQTRCLElBQTVCLEdBQW1DLE9BQTNELENBQWhCOzs7QUFDQSxNQUFNQyxjQUFjLEdBQUcsT0FBdkI7O0FBQ0EsTUFBTUMsYUFBYSxHQUFHLE1BQXRCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLEtBQTVCOztBQUNBLE1BQU1DLG9CQUFvQixHQUFHRCxtQkFBbUIsR0FBRyxDQUFuRDs7QUFDQSxNQUFNRSx3QkFBd0IsR0FBRyxLQUFqQzs7O0FBT0EsU0FBU0MsaUJBQVQsR0FBOEI7RUFDNUIsT0FB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
|
package/build/lib/logcat.js
CHANGED
|
@@ -218,4 +218,4 @@ var _default = Logcat;
|
|
|
218
218
|
exports.default = _default;require('source-map-support').install();
|
|
219
219
|
|
|
220
220
|
|
|
221
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2NhdC5qcyIsIm5hbWVzIjpbIkV2ZW50RW1pdHRlciIsImV2ZW50cyIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIk1BWF9CVUZGRVJfU0laRSIsIkxPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCIsIlNVUFBPUlRFRF9GT1JNQVRTIiwiU1VQUE9SVEVEX1BSSU9SSVRJRVMiLCJERUZBVUxUX1BSSU9SSVRZIiwiREVGQVVMVF9UQUciLCJERUZBVUxUX0ZPUk1BVCIsInJlcXVpcmVGb3JtYXQiLCJmb3JtYXQiLCJpbmNsdWRlcyIsImluZm8iLCJyZXF1aXJlU3BlYyIsInNwZWMiLCJ0YWciLCJwcmlvcml0eSIsInNwbGl0IiwicmVzdWx0VGFnIiwic29tZSIsInAiLCJfIiwidG9Mb3dlciIsImZvcm1hdEZpbHRlclNwZWNzIiwiZmlsdGVyU3BlY3MiLCJpc0FycmF5IiwiZmlsdGVyIiwiaXNTdHJpbmciLCJzdGFydHNXaXRoIiwibWFwIiwiTG9nY2F0IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiYWRiIiwiY2xlYXJMb2dzIiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImRlYnVnIiwiZGVidWdUcmFjZSIsIm1heEJ1ZmZlclNpemUiLCJsb2dzIiwibG9nSWR4U2luY2VMYXN0UmVxdWVzdCIsInN0YXJ0Q2FwdHVyZSIsInN0YXJ0ZWQiLCJCIiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwicmVzb2x2ZSIsImFyZ3MiLCJyZWplY3QiLCJjbGVhciIsImNtZCIsImRlZmF1bHRBcmdzIiwidXRpbCIsInF1b3RlIiwicGF0aCIsInByb2MiLCJTdWJQcm9jZXNzIiwib24iLCJjb2RlIiwic2lnbmFsIiwiZXJyb3IiLCJ3YXJuIiwibGluZXMiLCJsaW5lIiwidGVzdCIsIkVycm9yIiwib3V0cHV0SGFuZGxlciIsInRyaW0iLCJzdGFydCIsInNldFRpbWVvdXQiLCJvdXRwdXQiLCJwcmVmaXgiLCJsZW5ndGgiLCJzaGlmdCIsIm91dHB1dE9iaiIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJsZXZlbCIsIm1lc3NhZ2UiLCJwdXNoIiwiZW1pdCIsImlzVHJhY2UiLCJzdG9wQ2FwdHVyZSIsImlzUnVubmluZyIsInJlbW92ZUFsbExpc3RlbmVycyIsInN0b3AiLCJnZXRMb2dzIiwicmVzdWx0Iiwic2xpY2UiLCJnZXRBbGxMb2dzIiwiZXJyIiwic3RkZXJyIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2xvZ2NhdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSBldmVudHM7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignTG9nY2F0Jyk7XG5jb25zdCBNQVhfQlVGRkVSX1NJWkUgPSAxMDAwMDtcbmNvbnN0IExPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgU1VQUE9SVEVEX0ZPUk1BVFMgPSBbJ2JyaWVmJywgJ3Byb2Nlc3MnLCAndGFnJywgJ3RocmVhZCcsICdyYXcnLCAndGltZScsICd0aHJlYWR0aW1lJywgJ2xvbmcnXTtcbmNvbnN0IFNVUFBPUlRFRF9QUklPUklUSUVTID0gWyd2JywgJ2QnLCAnaScsICd3JywgJ2UnLCAnZicsICdzJ107XG5jb25zdCBERUZBVUxUX1BSSU9SSVRZID0gJ3YnO1xuY29uc3QgREVGQVVMVF9UQUcgPSAnKic7XG5jb25zdCBERUZBVUxUX0ZPUk1BVCA9ICd0aHJlYWR0aW1lJztcblxuZnVuY3Rpb24gcmVxdWlyZUZvcm1hdCAoZm9ybWF0KSB7XG4gIGlmICghU1VQUE9SVEVEX0ZPUk1BVFMuaW5jbHVkZXMoZm9ybWF0KSkge1xuICAgIGxvZy5pbmZvKGBUaGUgZm9ybWF0IHZhbHVlICcke2Zvcm1hdH0nIGlzIHVua25vd24uIFN1cHBvcnRlZCB2YWx1ZXMgYXJlOiAke1NVUFBPUlRFRF9GT1JNQVRTfWApO1xuICAgIGxvZy5pbmZvKGBEZWZhdWx0aW5nIHRvICcke0RFRkFVTFRfRk9STUFUfSdgKTtcbiAgICByZXR1cm4gREVGQVVMVF9GT1JNQVQ7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdDtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZVNwZWMgKHNwZWMpIHtcbiAgY29uc3QgW3RhZywgcHJpb3JpdHldID0gc3BlYy5zcGxpdCgnOicpO1xuICBsZXQgcmVzdWx0VGFnID0gdGFnO1xuICBpZiAoIXJlc3VsdFRhZykge1xuICAgIGxvZy5pbmZvKGBUaGUgdGFnIHZhbHVlIGluIHNwZWMgJyR7c3BlY30nIGNhbm5vdCBiZSBlbXB0eWApO1xuICAgIGxvZy5pbmZvKGBEZWZhdWx0aW5nIHRvICcke0RFRkFVTFRfVEFHfSdgKTtcbiAgICByZXN1bHRUYWcgPSBERUZBVUxUX1RBRztcbiAgfVxuICBpZiAoIXByaW9yaXR5KSB7XG4gICAgbG9nLmluZm8oYFRoZSBwcmlvcml0eSB2YWx1ZSBpbiBzcGVjICcke3NwZWN9JyBpcyBlbXB0eS4gRGVmYXVsdGluZyB0byBWZXJib3NlICgke0RFRkFVTFRfUFJJT1JJVFl9KWApO1xuICAgIHJldHVybiBgJHtyZXN1bHRUYWd9OiR7REVGQVVMVF9QUklPUklUWX1gO1xuICB9XG4gIGlmICghU1VQUE9SVEVEX1BSSU9SSVRJRVMuc29tZSgocCkgPT4gXy50b0xvd2VyKHByaW9yaXR5KSA9PT0gXy50b0xvd2VyKHApKSkge1xuICAgIGxvZy5pbmZvKGBUaGUgcHJpb3JpdHkgdmFsdWUgaW4gc3BlYyAnJHtzcGVjfScgaXMgdW5rbm93bi4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7U1VQUE9SVEVEX1BSSU9SSVRJRVN9YCk7XG4gICAgbG9nLmluZm8oYERlZmF1bHRpbmcgdG8gVmVyYm9zZSAoJHtERUZBVUxUX1BSSU9SSVRZfSlgKTtcbiAgICByZXR1cm4gYCR7cmVzdWx0VGFnfToke0RFRkFVTFRfUFJJT1JJVFl9YDtcbiAgfVxuICByZXR1cm4gc3BlYztcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyU3BlY3MgKGZpbHRlclNwZWNzKSB7XG4gIGlmICghXy5pc0FycmF5KGZpbHRlclNwZWNzKSkge1xuICAgIGZpbHRlclNwZWNzID0gW2ZpbHRlclNwZWNzXTtcbiAgfVxuICByZXR1cm4gZmlsdGVyU3BlY3NcbiAgICAuZmlsdGVyKChzcGVjKSA9PiBzcGVjICYmIF8uaXNTdHJpbmcoc3BlYykgJiYgIXNwZWMuc3RhcnRzV2l0aCgnLScpKVxuICAgIC5tYXAoKHNwZWMpID0+IHNwZWMuaW5jbHVkZXMoJzonKSA/IHJlcXVpcmVTcGVjKHNwZWMpIDogc3BlYyk7XG59XG5cblxuY2xhc3MgTG9nY2F0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGIgPSBvcHRzLmFkYjtcbiAgICB0aGlzLmNsZWFyTG9ncyA9IG9wdHMuY2xlYXJEZXZpY2VMb2dzT25TdGFydCB8fCBmYWxzZTtcbiAgICB0aGlzLmRlYnVnID0gb3B0cy5kZWJ1ZztcbiAgICB0aGlzLmRlYnVnVHJhY2UgPSBvcHRzLmRlYnVnVHJhY2U7XG4gICAgdGhpcy5tYXhCdWZmZXJTaXplID0gb3B0cy5tYXhCdWZmZXJTaXplIHx8IE1BWF9CVUZGRVJfU0laRTtcbiAgICB0aGlzLmxvZ3MgPSBbXTtcbiAgICB0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPSAwO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDYXB0dXJlIChvcHRzID0ge30pIHtcbiAgICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBhd2FpdCBuZXcgQihhc3luYyAoX3Jlc29sdmUsIF9yZWplY3QpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3BhcmFtLW5hbWVzXG4gICAgICBjb25zdCByZXNvbHZlID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIF9yZXNvbHZlKC4uLmFyZ3MpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlamVjdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBfcmVqZWN0KC4uLmFyZ3MpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuY2xlYXJMb2dzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYXIoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBmb3JtYXQgPSBERUZBVUxUX0ZPUk1BVCxcbiAgICAgICAgZmlsdGVyU3BlY3MgPSBbXSxcbiAgICAgIH0gPSBvcHRzO1xuICAgICAgY29uc3QgY21kID0gW1xuICAgICAgICAuLi50aGlzLmFkYi5kZWZhdWx0QXJncyxcbiAgICAgICAgJ2xvZ2NhdCcsXG4gICAgICAgICctdicsIHJlcXVpcmVGb3JtYXQoZm9ybWF0KSxcbiAgICAgICAgLi4uZm9ybWF0RmlsdGVyU3BlY3MoZmlsdGVyU3BlY3MpLFxuICAgICAgXTtcbiAgICAgIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgbG9ncyBjYXB0dXJlIHdpdGggY29tbWFuZDogJHt1dGlsLnF1b3RlKFt0aGlzLmFkYi5wYXRoLCAuLi5jbWRdKX1gKTtcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuYWRiLnBhdGgsIGNtZCk7XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgTG9nY2F0IHRlcm1pbmF0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgICAgbG9nLndhcm4oJ0xvZ2NhdCBub3Qgc3RhcnRlZC4gQ29udGludWluZycpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2xpbmVzLXN0ZGVycicsIChsaW5lcykgPT4ge1xuICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgaWYgKC9leGVjdnBcXChcXCkvLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignTG9nY2F0IHByb2Nlc3MgZmFpbGVkIHRvIHN0YXJ0Jyk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBMb2djYXQgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQuIHN0ZGVycjogJHtsaW5lfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vdXRwdXRIYW5kbGVyKF8udHJpbShsaW5lKSwgJ1NUREVSUjogJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2xpbmVzLXN0ZG91dCcsIChsaW5lcykgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICB0aGlzLm91dHB1dEhhbmRsZXIoXy50cmltKGxpbmUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgICAvLyByZXNvbHZlIGFmdGVyIGEgdGltZW91dCwgZXZlbiBpZiBubyBvdXRwdXQgd2FzIHJlY29yZGVkXG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIExPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCk7XG4gICAgfSk7XG4gIH1cblxuICBvdXRwdXRIYW5kbGVyIChvdXRwdXQsIHByZWZpeCA9ICcnKSB7XG4gICAgaWYgKCFvdXRwdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dzLmxlbmd0aCA+PSB0aGlzLm1heEJ1ZmZlclNpemUpIHtcbiAgICAgIHRoaXMubG9ncy5zaGlmdCgpO1xuICAgICAgaWYgKHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA+IDApIHtcbiAgICAgICAgLS10aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3Q7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dE9iaiA9IHtcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGxldmVsOiAnQUxMJyxcbiAgICAgIG1lc3NhZ2U6IG91dHB1dCxcbiAgICB9O1xuICAgIHRoaXMubG9ncy5wdXNoKG91dHB1dE9iaik7XG4gICAgdGhpcy5lbWl0KCdvdXRwdXQnLCBvdXRwdXRPYmopO1xuICAgIGNvbnN0IGlzVHJhY2UgPSAvV1xcL1RyYWNlLy50ZXN0KG91dHB1dCk7XG4gICAgaWYgKHRoaXMuZGVidWcgJiYgKCFpc1RyYWNlIHx8IHRoaXMuZGVidWdUcmFjZSkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhwcmVmaXggKyBvdXRwdXQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3BDYXB0dXJlICgpIHtcbiAgICBsb2cuZGVidWcoJ1N0b3BwaW5nIGxvZ2NhdCBjYXB0dXJlJyk7XG4gICAgaWYgKCF0aGlzLnByb2MgfHwgIXRoaXMucHJvYy5pc1J1bm5pbmcpIHtcbiAgICAgIGxvZy5kZWJ1ZygnTG9nY2F0IGFscmVhZHkgc3RvcHBlZCcpO1xuICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jLnJlbW92ZUFsbExpc3RlbmVycygnZXhpdCcpO1xuICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgfVxuXG4gIGdldExvZ3MgKCkge1xuICAgIGlmICh0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPCB0aGlzLmxvZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmxvZ3Muc2xpY2UodGhpcy5sb2dJZHhTaW5jZUxhc3RSZXF1ZXN0KTtcbiAgICAgIHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA9IHRoaXMubG9ncy5sZW5ndGg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRBbGxMb2dzICgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2dzO1xuICB9XG5cbiAgYXN5bmMgY2xlYXIgKCkge1xuICAgIGxvZy5kZWJ1ZygnQ2xlYXJpbmcgbG9nY2F0IGxvZ3MgZnJvbSBkZXZpY2UnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXJncyA9IFsuLi50aGlzLmFkYi5kZWZhdWx0QXJncywgJ2xvZ2NhdCcsICctYyddO1xuICAgICAgYXdhaXQgZXhlYyh0aGlzLmFkYi5wYXRoLCBhcmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBGYWlsZWQgdG8gY2xlYXIgbG9nY2F0IGxvZ3M6ICR7ZXJyLnN0ZGVyciB8fCBlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nY2F0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQURBLE1BQU07RUFBRUE7QUFBRixJQUFtQkMsZUFBekI7O0FBR0EsTUFBTUMsR0FBRyxHQUFHQyxnQkFBT0MsU0FBUCxDQUFpQixRQUFqQixDQUFaOztBQUNBLE1BQU1DLGVBQWUsR0FBRyxLQUF4QjtBQUNBLE1BQU1DLDJCQUEyQixHQUFHLEtBQXBDO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxPQUFELEVBQVUsU0FBVixFQUFxQixLQUFyQixFQUE0QixRQUE1QixFQUFzQyxLQUF0QyxFQUE2QyxNQUE3QyxFQUFxRCxZQUFyRCxFQUFtRSxNQUFuRSxDQUExQjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLEdBQWhCLEVBQXFCLEdBQXJCLEVBQTBCLEdBQTFCLEVBQStCLEdBQS9CLENBQTdCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsR0FBekI7QUFDQSxNQUFNQyxXQUFXLEdBQUcsR0FBcEI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsWUFBdkI7O0FBRUEsU0FBU0MsYUFBVCxDQUF3QkMsTUFBeEIsRUFBZ0M7RUFDOUIsSUFBSSxDQUFDTixpQkFBaUIsQ0FBQ08sUUFBbEIsQ0FBMkJELE1BQTNCLENBQUwsRUFBeUM7SUFDdkNYLEdBQUcsQ0FBQ2EsSUFBSixDQUFVLHFCQUFvQkYsTUFBTyx1Q0FBc0NOLGlCQUFrQixFQUE3RjtJQUNBTCxHQUFHLENBQUNhLElBQUosQ0FBVSxrQkFBaUJKLGNBQWUsR0FBMUM7SUFDQSxPQUFPQSxjQUFQO0VBQ0Q7O0VBQ0QsT0FBT0UsTUFBUDtBQUNEOztBQUVELFNBQVNHLFdBQVQsQ0FBc0JDLElBQXRCLEVBQTRCO0VBQzFCLE1BQU0sQ0FBQ0MsR0FBRCxFQUFNQyxRQUFOLElBQWtCRixJQUFJLENBQUNHLEtBQUwsQ0FBVyxHQUFYLENBQXhCO0VBQ0EsSUFBSUMsU0FBUyxHQUFHSCxHQUFoQjs7RUFDQSxJQUFJLENBQUNHLFNBQUwsRUFBZ0I7SUFDZG5CLEdBQUcsQ0FBQ2EsSUFBSixDQUFVLDBCQUF5QkUsSUFBSyxtQkFBeEM7SUFDQWYsR0FBRyxDQUFDYSxJQUFKLENBQVUsa0JBQWlCTCxXQUFZLEdBQXZDO0lBQ0FXLFNBQVMsR0FBR1gsV0FBWjtFQUNEOztFQUNELElBQUksQ0FBQ1MsUUFBTCxFQUFlO0lBQ2JqQixHQUFHLENBQUNhLElBQUosQ0FBVSwrQkFBOEJFLElBQUssc0NBQXFDUixnQkFBaUIsR0FBbkc7SUFDQSxPQUFRLEdBQUVZLFNBQVUsSUFBR1osZ0JBQWlCLEVBQXhDO0VBQ0Q7O0VBQ0QsSUFBSSxDQUFDRCxvQkFBb0IsQ0FBQ2MsSUFBckIsQ0FBMkJDLENBQUQsSUFBT0MsZ0JBQUVDLE9BQUYsQ0FBVU4sUUFBVixNQUF3QkssZ0JBQUVDLE9BQUYsQ0FBVUYsQ0FBVixDQUF6RCxDQUFMLEVBQTZFO0lBQzNFckIsR0FBRyxDQUFDYSxJQUFKLENBQVUsK0JBQThCRSxJQUFLLHVDQUFzQ1Qsb0JBQXFCLEVBQXhHO0lBQ0FOLEdBQUcsQ0FBQ2EsSUFBSixDQUFVLDBCQUF5Qk4sZ0JBQWlCLEdBQXBEO0lBQ0EsT0FBUSxHQUFFWSxTQUFVLElBQUdaLGdCQUFpQixFQUF4QztFQUNEOztFQUNELE9BQU9RLElBQVA7QUFDRDs7QUFFRCxTQUFTUyxpQkFBVCxDQUE0QkMsV0FBNUIsRUFBeUM7RUFDdkMsSUFBSSxDQUFDSCxnQkFBRUksT0FBRixDQUFVRCxXQUFWLENBQUwsRUFBNkI7SUFDM0JBLFdBQVcsR0FBRyxDQUFDQSxXQUFELENBQWQ7RUFDRDs7RUFDRCxPQUFPQSxXQUFXLENBQ2ZFLE1BREksQ0FDSVosSUFBRCxJQUFVQSxJQUFJLElBQUlPLGdCQUFFTSxRQUFGLENBQVdiLElBQVgsQ0FBUixJQUE0QixDQUFDQSxJQUFJLENBQUNjLFVBQUwsQ0FBZ0IsR0FBaEIsQ0FEMUMsRUFFSkMsR0FGSSxDQUVDZixJQUFELElBQVVBLElBQUksQ0FBQ0gsUUFBTCxDQUFjLEdBQWQsSUFBcUJFLFdBQVcsQ0FBQ0MsSUFBRCxDQUFoQyxHQUF5Q0EsSUFGbkQsQ0FBUDtBQUdEOztBQUdELE1BQU1nQixNQUFOLFNBQXFCakMsWUFBckIsQ0FBa0M7RUFDaENrQyxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7SUFDdEI7SUFDQSxLQUFLQyxHQUFMLEdBQVdELElBQUksQ0FBQ0MsR0FBaEI7SUFDQSxLQUFLQyxTQUFMLEdBQWlCRixJQUFJLENBQUNHLHNCQUFMLElBQStCLEtBQWhEO0lBQ0EsS0FBS0MsS0FBTCxHQUFhSixJQUFJLENBQUNJLEtBQWxCO0lBQ0EsS0FBS0MsVUFBTCxHQUFrQkwsSUFBSSxDQUFDSyxVQUF2QjtJQUNBLEtBQUtDLGFBQUwsR0FBcUJOLElBQUksQ0FBQ00sYUFBTCxJQUFzQnBDLGVBQTNDO0lBQ0EsS0FBS3FDLElBQUwsR0FBWSxFQUFaO0lBQ0EsS0FBS0Msc0JBQUwsR0FBOEIsQ0FBOUI7RUFDRDs7RUFFaUIsTUFBWkMsWUFBWSxDQUFFVCxJQUFJLEdBQUcsRUFBVCxFQUFhO0lBQzdCLElBQUlVLE9BQU8sR0FBRyxLQUFkO0lBQ0EsT0FBTyxNQUFNLElBQUlDLGlCQUFKLENBQU0sT0FBT0MsUUFBUCxFQUFpQkMsT0FBakIsS0FBNkI7TUFDOUMsTUFBTUMsT0FBTyxHQUFHLFVBQVUsR0FBR0MsSUFBYixFQUFtQjtRQUNqQ0wsT0FBTyxHQUFHLElBQVY7O1FBQ0FFLFFBQVEsQ0FBQyxHQUFHRyxJQUFKLENBQVI7TUFDRCxDQUhEOztNQUlBLE1BQU1DLE1BQU0sR0FBRyxVQUFVLEdBQUdELElBQWIsRUFBbUI7UUFDaENMLE9BQU8sR0FBRyxJQUFWOztRQUNBRyxPQUFPLENBQUMsR0FBR0UsSUFBSixDQUFQO01BQ0QsQ0FIRDs7TUFLQSxJQUFJLEtBQUtiLFNBQVQsRUFBb0I7UUFDbEIsTUFBTSxLQUFLZSxLQUFMLEVBQU47TUFDRDs7TUFFRCxNQUFNO1FBQ0p2QyxNQUFNLEdBQUdGLGNBREw7UUFFSmdCLFdBQVcsR0FBRztNQUZWLElBR0ZRLElBSEo7TUFJQSxNQUFNa0IsR0FBRyxHQUFHLENBQ1YsR0FBRyxLQUFLakIsR0FBTCxDQUFTa0IsV0FERixFQUVWLFFBRlUsRUFHVixJQUhVLEVBR0oxQyxhQUFhLENBQUNDLE1BQUQsQ0FIVCxFQUlWLEdBQUdhLGlCQUFpQixDQUFDQyxXQUFELENBSlYsQ0FBWjtNQU1BekIsR0FBRyxDQUFDcUMsS0FBSixDQUFXLHVDQUFzQ2dCLGNBQUtDLEtBQUwsQ0FBVyxDQUFDLEtBQUtwQixHQUFMLENBQVNxQixJQUFWLEVBQWdCLEdBQUdKLEdBQW5CLENBQVgsQ0FBb0MsRUFBckY7TUFDQSxLQUFLSyxJQUFMLEdBQVksSUFBSUMsd0JBQUosQ0FBZSxLQUFLdkIsR0FBTCxDQUFTcUIsSUFBeEIsRUFBOEJKLEdBQTlCLENBQVo7TUFDQSxLQUFLSyxJQUFMLENBQVVFLEVBQVYsQ0FBYSxNQUFiLEVBQXFCLENBQUNDLElBQUQsRUFBT0MsTUFBUCxLQUFrQjtRQUNyQzVELEdBQUcsQ0FBQzZELEtBQUosQ0FBVywrQkFBOEJGLElBQUssWUFBV0MsTUFBTyxFQUFoRTtRQUNBLEtBQUtKLElBQUwsR0FBWSxJQUFaOztRQUNBLElBQUksQ0FBQ2IsT0FBTCxFQUFjO1VBQ1ozQyxHQUFHLENBQUM4RCxJQUFKLENBQVMsZ0NBQVQ7VUFDQWYsT0FBTztRQUNSO01BQ0YsQ0FQRDtNQVFBLEtBQUtTLElBQUwsQ0FBVUUsRUFBVixDQUFhLGNBQWIsRUFBOEJLLEtBQUQsSUFBVztRQUN0QyxLQUFLLElBQUlDLElBQVQsSUFBaUJELEtBQWpCLEVBQXdCO1VBQ3RCLElBQUksYUFBYUUsSUFBYixDQUFrQkQsSUFBbEIsQ0FBSixFQUE2QjtZQUMzQmhFLEdBQUcsQ0FBQzZELEtBQUosQ0FBVSxnQ0FBVjtZQUNBWixNQUFNLENBQUMsSUFBSWlCLEtBQUosQ0FBVywyQ0FBMENGLElBQUssRUFBMUQsQ0FBRCxDQUFOO1VBQ0Q7O1VBQ0QsS0FBS0csYUFBTCxDQUFtQjdDLGdCQUFFOEMsSUFBRixDQUFPSixJQUFQLENBQW5CLEVBQWlDLFVBQWpDO1FBQ0Q7O1FBQ0RqQixPQUFPO01BQ1IsQ0FURDtNQVVBLEtBQUtTLElBQUwsQ0FBVUUsRUFBVixDQUFhLGNBQWIsRUFBOEJLLEtBQUQsSUFBVztRQUN0Q2hCLE9BQU87O1FBQ1AsS0FBSyxJQUFJaUIsSUFBVCxJQUFpQkQsS0FBakIsRUFBd0I7VUFDdEIsS0FBS0ksYUFBTCxDQUFtQjdDLGdCQUFFOEMsSUFBRixDQUFPSixJQUFQLENBQW5CO1FBQ0Q7TUFDRixDQUxEO01BTUEsTUFBTSxLQUFLUixJQUFMLENBQVVhLEtBQVYsQ0FBZ0IsQ0FBaEIsQ0FBTjtNQUVBQyxVQUFVLENBQUN2QixPQUFELEVBQVUzQywyQkFBVixDQUFWO0lBQ0QsQ0FyRFksQ0FBYjtFQXNERDs7RUFFRCtELGFBQWEsQ0FBRUksTUFBRixFQUFVQyxNQUFNLEdBQUcsRUFBbkIsRUFBdUI7SUFDbEMsSUFBSSxDQUFDRCxNQUFMLEVBQWE7TUFDWDtJQUNEOztJQUVELElBQUksS0FBSy9CLElBQUwsQ0FBVWlDLE1BQVYsSUFBb0IsS0FBS2xDLGFBQTdCLEVBQTRDO01BQzFDLEtBQUtDLElBQUwsQ0FBVWtDLEtBQVY7O01BQ0EsSUFBSSxLQUFLakMsc0JBQUwsR0FBOEIsQ0FBbEMsRUFBcUM7UUFDbkMsRUFBRSxLQUFLQSxzQkFBUDtNQUNEO0lBQ0Y7O0lBQ0QsTUFBTWtDLFNBQVMsR0FBRztNQUNoQkMsU0FBUyxFQUFFQyxJQUFJLENBQUNDLEdBQUwsRUFESztNQUVoQkMsS0FBSyxFQUFFLEtBRlM7TUFHaEJDLE9BQU8sRUFBRVQ7SUFITyxDQUFsQjtJQUtBLEtBQUsvQixJQUFMLENBQVV5QyxJQUFWLENBQWVOLFNBQWY7SUFDQSxLQUFLTyxJQUFMLENBQVUsUUFBVixFQUFvQlAsU0FBcEI7SUFDQSxNQUFNUSxPQUFPLEdBQUcsV0FBV2xCLElBQVgsQ0FBZ0JNLE1BQWhCLENBQWhCOztJQUNBLElBQUksS0FBS2xDLEtBQUwsS0FBZSxDQUFDOEMsT0FBRCxJQUFZLEtBQUs3QyxVQUFoQyxDQUFKLEVBQWlEO01BQy9DdEMsR0FBRyxDQUFDcUMsS0FBSixDQUFVbUMsTUFBTSxHQUFHRCxNQUFuQjtJQUNEO0VBQ0Y7O0VBRWdCLE1BQVhhLFdBQVcsR0FBSTtJQUNuQnBGLEdBQUcsQ0FBQ3FDLEtBQUosQ0FBVSx5QkFBVjs7SUFDQSxJQUFJLENBQUMsS0FBS21CLElBQU4sSUFBYyxDQUFDLEtBQUtBLElBQUwsQ0FBVTZCLFNBQTdCLEVBQXdDO01BQ3RDckYsR0FBRyxDQUFDcUMsS0FBSixDQUFVLHdCQUFWO01BQ0EsS0FBS21CLElBQUwsR0FBWSxJQUFaO01BQ0E7SUFDRDs7SUFDRCxLQUFLQSxJQUFMLENBQVU4QixrQkFBVixDQUE2QixNQUE3QjtJQUNBLE1BQU0sS0FBSzlCLElBQUwsQ0FBVStCLElBQVYsRUFBTjtJQUNBLEtBQUsvQixJQUFMLEdBQVksSUFBWjtFQUNEOztFQUVEZ0MsT0FBTyxHQUFJO0lBQ1QsSUFBSSxLQUFLL0Msc0JBQUwsR0FBOEIsS0FBS0QsSUFBTCxDQUFVaUMsTUFBNUMsRUFBb0Q7TUFDbEQsTUFBTWdCLE1BQU0sR0FBRyxLQUFLakQsSUFBTCxDQUFVa0QsS0FBVixDQUFnQixLQUFLakQsc0JBQXJCLENBQWY7TUFDQSxLQUFLQSxzQkFBTCxHQUE4QixLQUFLRCxJQUFMLENBQVVpQyxNQUF4QztNQUNBLE9BQU9nQixNQUFQO0lBQ0Q7O0lBQ0QsT0FBTyxFQUFQO0VBQ0Q7O0VBRURFLFVBQVUsR0FBSTtJQUNaLE9BQU8sS0FBS25ELElBQVo7RUFDRDs7RUFFVSxNQUFMVSxLQUFLLEdBQUk7SUFDYmxELEdBQUcsQ0FBQ3FDLEtBQUosQ0FBVSxrQ0FBVjs7SUFDQSxJQUFJO01BQ0YsTUFBTVcsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLZCxHQUFMLENBQVNrQixXQUFiLEVBQTBCLFFBQTFCLEVBQW9DLElBQXBDLENBQWI7TUFDQSxNQUFNLHdCQUFLLEtBQUtsQixHQUFMLENBQVNxQixJQUFkLEVBQW9CUCxJQUFwQixDQUFOO0lBQ0QsQ0FIRCxDQUdFLE9BQU80QyxHQUFQLEVBQVk7TUFDWjVGLEdBQUcsQ0FBQzhELElBQUosQ0FBVSxnQ0FBK0I4QixHQUFHLENBQUNDLE1BQUosSUFBY0QsR0FBRyxDQUFDWixPQUFRLEVBQW5FO0lBQ0Q7RUFDRjs7QUEvSCtCOztlQWtJbkJqRCxNIn0=
|
|
221
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2NhdC5qcyIsIm5hbWVzIjpbIkV2ZW50RW1pdHRlciIsImV2ZW50cyIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIk1BWF9CVUZGRVJfU0laRSIsIkxPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCIsIlNVUFBPUlRFRF9GT1JNQVRTIiwiU1VQUE9SVEVEX1BSSU9SSVRJRVMiLCJERUZBVUxUX1BSSU9SSVRZIiwiREVGQVVMVF9UQUciLCJERUZBVUxUX0ZPUk1BVCIsInJlcXVpcmVGb3JtYXQiLCJmb3JtYXQiLCJpbmNsdWRlcyIsImluZm8iLCJyZXF1aXJlU3BlYyIsInNwZWMiLCJ0YWciLCJwcmlvcml0eSIsInNwbGl0IiwicmVzdWx0VGFnIiwic29tZSIsInAiLCJfIiwidG9Mb3dlciIsImZvcm1hdEZpbHRlclNwZWNzIiwiZmlsdGVyU3BlY3MiLCJpc0FycmF5IiwiZmlsdGVyIiwiaXNTdHJpbmciLCJzdGFydHNXaXRoIiwibWFwIiwiTG9nY2F0IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiYWRiIiwiY2xlYXJMb2dzIiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImRlYnVnIiwiZGVidWdUcmFjZSIsIm1heEJ1ZmZlclNpemUiLCJsb2dzIiwibG9nSWR4U2luY2VMYXN0UmVxdWVzdCIsInN0YXJ0Q2FwdHVyZSIsInN0YXJ0ZWQiLCJCIiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwicmVzb2x2ZSIsImFyZ3MiLCJyZWplY3QiLCJjbGVhciIsImNtZCIsImRlZmF1bHRBcmdzIiwidXRpbCIsInF1b3RlIiwicGF0aCIsInByb2MiLCJTdWJQcm9jZXNzIiwib24iLCJjb2RlIiwic2lnbmFsIiwiZXJyb3IiLCJ3YXJuIiwibGluZXMiLCJsaW5lIiwidGVzdCIsIkVycm9yIiwib3V0cHV0SGFuZGxlciIsInRyaW0iLCJzdGFydCIsInNldFRpbWVvdXQiLCJvdXRwdXQiLCJwcmVmaXgiLCJsZW5ndGgiLCJzaGlmdCIsIm91dHB1dE9iaiIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJsZXZlbCIsIm1lc3NhZ2UiLCJwdXNoIiwiZW1pdCIsImlzVHJhY2UiLCJzdG9wQ2FwdHVyZSIsImlzUnVubmluZyIsInJlbW92ZUFsbExpc3RlbmVycyIsInN0b3AiLCJnZXRMb2dzIiwicmVzdWx0Iiwic2xpY2UiLCJnZXRBbGxMb2dzIiwiZXhlYyIsImVyciIsInN0ZGVyciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2djYXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGxvZ2dlciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5jb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gZXZlbnRzO1xuaW1wb3J0IHsgU3ViUHJvY2VzcywgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0xvZ2NhdCcpO1xuY29uc3QgTUFYX0JVRkZFUl9TSVpFID0gMTAwMDA7XG5jb25zdCBMT0dDQVRfUFJPQ19TVEFSVFVQX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IFNVUFBPUlRFRF9GT1JNQVRTID0gWydicmllZicsICdwcm9jZXNzJywgJ3RhZycsICd0aHJlYWQnLCAncmF3JywgJ3RpbWUnLCAndGhyZWFkdGltZScsICdsb25nJ107XG5jb25zdCBTVVBQT1JURURfUFJJT1JJVElFUyA9IFsndicsICdkJywgJ2knLCAndycsICdlJywgJ2YnLCAncyddO1xuY29uc3QgREVGQVVMVF9QUklPUklUWSA9ICd2JztcbmNvbnN0IERFRkFVTFRfVEFHID0gJyonO1xuY29uc3QgREVGQVVMVF9GT1JNQVQgPSAndGhyZWFkdGltZSc7XG5cbmZ1bmN0aW9uIHJlcXVpcmVGb3JtYXQgKGZvcm1hdCkge1xuICBpZiAoIVNVUFBPUlRFRF9GT1JNQVRTLmluY2x1ZGVzKGZvcm1hdCkpIHtcbiAgICBsb2cuaW5mbyhgVGhlIGZvcm1hdCB2YWx1ZSAnJHtmb3JtYXR9JyBpcyB1bmtub3duLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZTogJHtTVVBQT1JURURfRk9STUFUU31gKTtcbiAgICBsb2cuaW5mbyhgRGVmYXVsdGluZyB0byAnJHtERUZBVUxUX0ZPUk1BVH0nYCk7XG4gICAgcmV0dXJuIERFRkFVTFRfRk9STUFUO1xuICB9XG4gIHJldHVybiBmb3JtYXQ7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVTcGVjIChzcGVjKSB7XG4gIGNvbnN0IFt0YWcsIHByaW9yaXR5XSA9IHNwZWMuc3BsaXQoJzonKTtcbiAgbGV0IHJlc3VsdFRhZyA9IHRhZztcbiAgaWYgKCFyZXN1bHRUYWcpIHtcbiAgICBsb2cuaW5mbyhgVGhlIHRhZyB2YWx1ZSBpbiBzcGVjICcke3NwZWN9JyBjYW5ub3QgYmUgZW1wdHlgKTtcbiAgICBsb2cuaW5mbyhgRGVmYXVsdGluZyB0byAnJHtERUZBVUxUX1RBR30nYCk7XG4gICAgcmVzdWx0VGFnID0gREVGQVVMVF9UQUc7XG4gIH1cbiAgaWYgKCFwcmlvcml0eSkge1xuICAgIGxvZy5pbmZvKGBUaGUgcHJpb3JpdHkgdmFsdWUgaW4gc3BlYyAnJHtzcGVjfScgaXMgZW1wdHkuIERlZmF1bHRpbmcgdG8gVmVyYm9zZSAoJHtERUZBVUxUX1BSSU9SSVRZfSlgKTtcbiAgICByZXR1cm4gYCR7cmVzdWx0VGFnfToke0RFRkFVTFRfUFJJT1JJVFl9YDtcbiAgfVxuICBpZiAoIVNVUFBPUlRFRF9QUklPUklUSUVTLnNvbWUoKHApID0+IF8udG9Mb3dlcihwcmlvcml0eSkgPT09IF8udG9Mb3dlcihwKSkpIHtcbiAgICBsb2cuaW5mbyhgVGhlIHByaW9yaXR5IHZhbHVlIGluIHNwZWMgJyR7c3BlY30nIGlzIHVua25vd24uIFN1cHBvcnRlZCB2YWx1ZXMgYXJlOiAke1NVUFBPUlRFRF9QUklPUklUSUVTfWApO1xuICAgIGxvZy5pbmZvKGBEZWZhdWx0aW5nIHRvIFZlcmJvc2UgKCR7REVGQVVMVF9QUklPUklUWX0pYCk7XG4gICAgcmV0dXJuIGAke3Jlc3VsdFRhZ306JHtERUZBVUxUX1BSSU9SSVRZfWA7XG4gIH1cbiAgcmV0dXJuIHNwZWM7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlclNwZWNzIChmaWx0ZXJTcGVjcykge1xuICBpZiAoIV8uaXNBcnJheShmaWx0ZXJTcGVjcykpIHtcbiAgICBmaWx0ZXJTcGVjcyA9IFtmaWx0ZXJTcGVjc107XG4gIH1cbiAgcmV0dXJuIGZpbHRlclNwZWNzXG4gICAgLmZpbHRlcigoc3BlYykgPT4gc3BlYyAmJiBfLmlzU3RyaW5nKHNwZWMpICYmICFzcGVjLnN0YXJ0c1dpdGgoJy0nKSlcbiAgICAubWFwKChzcGVjKSA9PiBzcGVjLmluY2x1ZGVzKCc6JykgPyByZXF1aXJlU3BlYyhzcGVjKSA6IHNwZWMpO1xufVxuXG5cbmNsYXNzIExvZ2NhdCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRiID0gb3B0cy5hZGI7XG4gICAgdGhpcy5jbGVhckxvZ3MgPSBvcHRzLmNsZWFyRGV2aWNlTG9nc09uU3RhcnQgfHwgZmFsc2U7XG4gICAgdGhpcy5kZWJ1ZyA9IG9wdHMuZGVidWc7XG4gICAgdGhpcy5kZWJ1Z1RyYWNlID0gb3B0cy5kZWJ1Z1RyYWNlO1xuICAgIHRoaXMubWF4QnVmZmVyU2l6ZSA9IG9wdHMubWF4QnVmZmVyU2l6ZSB8fCBNQVhfQlVGRkVSX1NJWkU7XG4gICAgdGhpcy5sb2dzID0gW107XG4gICAgdGhpcy5sb2dJZHhTaW5jZUxhc3RSZXF1ZXN0ID0gMDtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q2FwdHVyZSAob3B0cyA9IHt9KSB7XG4gICAgbGV0IHN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoYXN5bmMgKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wYXJhbS1uYW1lc1xuICAgICAgY29uc3QgcmVzb2x2ZSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBfcmVzb2x2ZSguLi5hcmdzKTtcbiAgICAgIH07XG4gICAgICBjb25zdCByZWplY3QgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICBzdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgX3JlamVjdCguLi5hcmdzKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmNsZWFyTG9ncykge1xuICAgICAgICBhd2FpdCB0aGlzLmNsZWFyKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZm9ybWF0ID0gREVGQVVMVF9GT1JNQVQsXG4gICAgICAgIGZpbHRlclNwZWNzID0gW10sXG4gICAgICB9ID0gb3B0cztcbiAgICAgIGNvbnN0IGNtZCA9IFtcbiAgICAgICAgLi4udGhpcy5hZGIuZGVmYXVsdEFyZ3MsXG4gICAgICAgICdsb2djYXQnLFxuICAgICAgICAnLXYnLCByZXF1aXJlRm9ybWF0KGZvcm1hdCksXG4gICAgICAgIC4uLmZvcm1hdEZpbHRlclNwZWNzKGZpbHRlclNwZWNzKSxcbiAgICAgIF07XG4gICAgICBsb2cuZGVidWcoYFN0YXJ0aW5nIGxvZ3MgY2FwdHVyZSB3aXRoIGNvbW1hbmQ6ICR7dXRpbC5xdW90ZShbdGhpcy5hZGIucGF0aCwgLi4uY21kXSl9YCk7XG4gICAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmFkYi5wYXRoLCBjbWQpO1xuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBsb2cuZXJyb3IoYExvZ2NhdCB0ZXJtaW5hdGVkIHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YCk7XG4gICAgICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgICAgIGlmICghc3RhcnRlZCkge1xuICAgICAgICAgIGxvZy53YXJuKCdMb2djYXQgbm90IHN0YXJ0ZWQuIENvbnRpbnVpbmcnKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9jLm9uKCdsaW5lcy1zdGRlcnInLCAobGluZXMpID0+IHtcbiAgICAgICAgZm9yIChsZXQgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIGlmICgvZXhlY3ZwXFwoXFwpLy50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0xvZ2NhdCBwcm9jZXNzIGZhaWxlZCB0byBzdGFydCcpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgTG9nY2F0IHByb2Nlc3MgZmFpbGVkIHRvIHN0YXJ0LiBzdGRlcnI6ICR7bGluZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3V0cHV0SGFuZGxlcihfLnRyaW0obGluZSksICdTVERFUlI6ICcpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9jLm9uKCdsaW5lcy1zdGRvdXQnLCAobGluZXMpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy5vdXRwdXRIYW5kbGVyKF8udHJpbShsaW5lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KDApO1xuICAgICAgLy8gcmVzb2x2ZSBhZnRlciBhIHRpbWVvdXQsIGV2ZW4gaWYgbm8gb3V0cHV0IHdhcyByZWNvcmRlZFxuICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBMT0dDQVRfUFJPQ19TVEFSVFVQX1RJTUVPVVQpO1xuICAgIH0pO1xuICB9XG5cbiAgb3V0cHV0SGFuZGxlciAob3V0cHV0LCBwcmVmaXggPSAnJykge1xuICAgIGlmICghb3V0cHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9ncy5sZW5ndGggPj0gdGhpcy5tYXhCdWZmZXJTaXplKSB7XG4gICAgICB0aGlzLmxvZ3Muc2hpZnQoKTtcbiAgICAgIGlmICh0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPiAwKSB7XG4gICAgICAgIC0tdGhpcy5sb2dJZHhTaW5jZUxhc3RSZXF1ZXN0O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvdXRwdXRPYmogPSB7XG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBsZXZlbDogJ0FMTCcsXG4gICAgICBtZXNzYWdlOiBvdXRwdXQsXG4gICAgfTtcbiAgICB0aGlzLmxvZ3MucHVzaChvdXRwdXRPYmopO1xuICAgIHRoaXMuZW1pdCgnb3V0cHV0Jywgb3V0cHV0T2JqKTtcbiAgICBjb25zdCBpc1RyYWNlID0gL1dcXC9UcmFjZS8udGVzdChvdXRwdXQpO1xuICAgIGlmICh0aGlzLmRlYnVnICYmICghaXNUcmFjZSB8fCB0aGlzLmRlYnVnVHJhY2UpKSB7XG4gICAgICBsb2cuZGVidWcocHJlZml4ICsgb3V0cHV0KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9wQ2FwdHVyZSAoKSB7XG4gICAgbG9nLmRlYnVnKCdTdG9wcGluZyBsb2djYXQgY2FwdHVyZScpO1xuICAgIGlmICghdGhpcy5wcm9jIHx8ICF0aGlzLnByb2MuaXNSdW5uaW5nKSB7XG4gICAgICBsb2cuZGVidWcoJ0xvZ2NhdCBhbHJlYWR5IHN0b3BwZWQnKTtcbiAgICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvYy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2V4aXQnKTtcbiAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gIH1cblxuICBnZXRMb2dzICgpIHtcbiAgICBpZiAodGhpcy5sb2dJZHhTaW5jZUxhc3RSZXF1ZXN0IDwgdGhpcy5sb2dzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5sb2dzLnNsaWNlKHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCk7XG4gICAgICB0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPSB0aGlzLmxvZ3MubGVuZ3RoO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0QWxsTG9ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9ncztcbiAgfVxuXG4gIGFzeW5jIGNsZWFyICgpIHtcbiAgICBsb2cuZGVidWcoJ0NsZWFyaW5nIGxvZ2NhdCBsb2dzIGZyb20gZGV2aWNlJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBbLi4udGhpcy5hZGIuZGVmYXVsdEFyZ3MsICdsb2djYXQnLCAnLWMnXTtcbiAgICAgIGF3YWl0IGV4ZWModGhpcy5hZGIucGF0aCwgYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgRmFpbGVkIHRvIGNsZWFyIGxvZ2NhdCBsb2dzOiAke2Vyci5zdGRlcnIgfHwgZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ2NhdDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFEQSxNQUFNO0VBQUVBO0FBQUYsSUFBbUJDLGVBQXpCOztBQUdBLE1BQU1DLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLFFBQWpCLENBQVo7O0FBQ0EsTUFBTUMsZUFBZSxHQUFHLEtBQXhCO0FBQ0EsTUFBTUMsMkJBQTJCLEdBQUcsS0FBcEM7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCLEtBQXJCLEVBQTRCLFFBQTVCLEVBQXNDLEtBQXRDLEVBQTZDLE1BQTdDLEVBQXFELFlBQXJELEVBQW1FLE1BQW5FLENBQTFCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcs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
|
package/build/lib/logger.js
CHANGED
|
@@ -15,4 +15,4 @@ var _default = log;
|
|
|
15
15
|
exports.default = _default;require('source-map-support').install();
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQURCJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBRUEsTUFBTUEsR0FBRyxHQUFHQyxlQUFBLENBQU9DLFNBQVAsQ0FBaUIsS0FBakIsQ0FBWjs7ZUFFZUYsRyJ9
|
|
@@ -154,4 +154,4 @@ var _default = aabUtilsMethods;
|
|
|
154
154
|
exports.default = _default;require('source-map-support').install();
|
|
155
155
|
|
|
156
156
|
|
|
157
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2FhYi11dGlscy5qcyIsIm5hbWVzIjpbIkFBQl9DQUNIRSIsIkxSVSIsIm1heCIsImRpc3Bvc2UiLCJoYXNoIiwiZXh0cmFjdGVkRmlsZXNSb290IiwiZnMiLCJyaW1yYWYiLCJBQUJfQ0FDSEVfR1VBUkQiLCJBc3luY0xvY2siLCJVTklWRVJTQUxfQVBLIiwiYWFiVXRpbHNNZXRob2RzIiwicHJvY2VzcyIsIm9uIiwic2l6ZSIsInBhdGhzIiwidmFsdWVzIiwibG9nIiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiYXBwUGF0aCIsInJpbXJhZlN5bmMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJleHRyYWN0VW5pdmVyc2FsQXBrIiwiYWFiUGF0aCIsIm9wdHMiLCJleGlzdHMiLCJFcnJvciIsImFhYk5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJhcGtOYW1lIiwic3Vic3RyaW5nIiwiZXh0bmFtZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInRtcEFwa3NQYXRoIiwiam9pbiIsImFjcXVpcmUiLCJhYWJIYXNoIiwia2V5c3RvcmUiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsImNhY2hlSGFzaCIsImtleXN0b3JlSGFzaCIsImtleUFsaWFzSGFzaCIsImNyeXB0byIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJoYXMiLCJyZXN1bHRQYXRoIiwicmVzb2x2ZSIsImdldCIsImRlbCIsImluaXRBYXB0MiIsImFyZ3MiLCJiaW5hcmllcyIsImFhcHQyIiwiZXhlY0J1bmRsZXRvb2wiLCJ1bml2ZXJzYWxBcGtQYXRoIiwiZmlsZURlbGV0aW9uUHJvbWlzZXMiLCJhbGxGaWxlTmFtZXMiLCJyZWFkZGlyIiwiZmlsZU5hbWUiLCJmdWxsUGF0aCIsInB1c2giLCJCIiwiYWxsIiwiaWduIiwibXYiLCJzZXQiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvdG9vbHMvYWFiLXV0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHsgdW56aXBGaWxlIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5jb25zdCBBQUJfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiAxMCxcbiAgZGlzcG9zZTogKGhhc2gsIGV4dHJhY3RlZEZpbGVzUm9vdCkgPT4gZnMucmltcmFmKGV4dHJhY3RlZEZpbGVzUm9vdCksXG59KTtcbmNvbnN0IEFBQl9DQUNIRV9HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFVOSVZFUlNBTF9BUEsgPSAndW5pdmVyc2FsLmFwayc7XG5cbmNvbnN0IGFhYlV0aWxzTWV0aG9kcyA9IHt9O1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoIUFBQl9DQUNIRS5zaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGF0aHMgPSBbLi4uQUFCX0NBQ0hFLnZhbHVlcygpXTtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGNsZWFudXAgb2YgJHtwYXRocy5sZW5ndGh9IGNhY2hlZCAuYWFiIGAgK1xuICAgIHV0aWwucGx1cmFsaXplKCdwYWNrYWdlJywgcGF0aHMubGVuZ3RoKSk7XG4gIGZvciAoY29uc3QgYXBwUGF0aCBvZiBwYXRocykge1xuICAgIHRyeSB7XG4gICAgICAvLyBBc3luY2hyb25vdXMgY2FsbHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gb25FeGl0IGhhbmRsZXJcbiAgICAgIGZzLnJpbXJhZlN5bmMoYXBwUGF0aCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwa0NyZWF0aW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleXN0b3JlIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgZGVwbG95bWVudCBrZXlzdG9yZSB1c2VkXG4gKiB0byBzaWduIHRoZSBBUEtzLiBUaGlzIGZsYWcgaXMgb3B0aW9uYWwuIElmIHlvdSBkb24ndCBpbmNsdWRlIGl0LFxuICogYnVuZGxldG9vbCBhdHRlbXB0cyB0byBzaWduIHlvdXIgQVBLcyB3aXRoIGEgZGVidWcgc2lnbmluZyBrZXkuXG4gKiBJZiB0aGUgLmFwayBoYXMgYmVlbiBhbHJlYWR5IHNpZ25lZCBhbmQgY2FjaGVkIHRoZW4gaXQgaXMgbm90IGdvaW5nIHRvIGJlIHJlc2lnbmVkXG4gKiB1bmxlc3MgYSBkaWZmZXJlbnQga2V5c3RvcmUgb3Iga2V5IGFsaWFzIGlzIHVzZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5c3RvcmVQYXNzd29yZCBTcGVjaWZpZXMgeW91ciBrZXlzdG9yZeKAmXMgcGFzc3dvcmQuXG4gKiBJdCBpcyBtYW5kYXRvcnkgdG8gcHJvdmlkZSB0aGlzIHZhbHVlIGlmIGBrZXlzdG9yZWAgb25lIGlzIGFzc2lnbmVkXG4gKiBvdGhlcndpc2UgaXQgaXMgZ29pbmcgdG8gYmUgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlBbGlhcyBTcGVjaWZpZXMgdGhlIGFsaWFzIG9mIHRoZSBzaWduaW5nIGtleSB5b3Ugd2FudCB0byB1c2UuXG4gKiBJdCBpcyBtYW5kYXRvcnkgdG8gcHJvdmlkZSB0aGlzIHZhbHVlIGlmIGBrZXlzdG9yZWAgb25lIGlzIGFzc2lnbmVkXG4gKiBvdGhlcndpc2UgaXQgaXMgZ29pbmcgdG8gYmUgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlQYXNzd29yZCBTcGVjaWZpZXMgdGhlIHBhc3N3b3JkIGZvciB0aGUgc2lnbmluZyBrZXkuXG4gKiBJdCBpcyBtYW5kYXRvcnkgdG8gcHJvdmlkZSB0aGlzIHZhbHVlIGlmIGBrZXlzdG9yZWAgb25lIGlzIGFzc2lnbmVkXG4gKiBvdGhlcndpc2UgaXQgaXMgZ29pbmcgdG8gYmUgaWdub3JlZC5cbiAqL1xuXG4vKipcbiAqIEJ1aWxkcyBhIHVuaXZlcnNhbCAuYXBrIGZyb20gdGhlIGdpdmVuIC5hYWIgcGFja2FnZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vY29tbWFuZC1saW5lL2J1bmRsZXRvb2wjZ2VuZXJhdGVfYXBrc1xuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWFiUGF0aCBGdWxsIHBhdGggdG8gdGhlIHNvdXJjZSAuYWFiIHBhY2thZ2VcbiAqIEBwYXJhbSB7QXBrQ3JlYXRpb25PcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGUgcmVzdWx0aW5nIHVuaXZlcnNhbCAuYXBrLiBUaGUgLmFwayBpcyBzdG9yZWQgaW4gdGhlIGludGVybmFsIGNhY2hlXG4gKiBieSBkZWZhdWx0LlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgdW5pdmVyc2FsIC5hcGtcbiAqL1xuYWFiVXRpbHNNZXRob2RzLmV4dHJhY3RVbml2ZXJzYWxBcGsgPSBhc3luYyBmdW5jdGlvbiBleHRyYWN0VW5pdmVyc2FsQXBrIChhYWJQYXRoLCBvcHRzID0ge30pIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYWFiUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2FhYlBhdGh9JyBlaXRoZXIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuXG4gIGNvbnN0IGFhYk5hbWUgPSBwYXRoLmJhc2VuYW1lKGFhYlBhdGgpO1xuICBjb25zdCBhcGtOYW1lID0gYWFiTmFtZS5zdWJzdHJpbmcoMCwgYWFiTmFtZS5sZW5ndGggLSBwYXRoLmV4dG5hbWUoYWFiTmFtZSkubGVuZ3RoKSArICcuYXBrJztcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCB0bXBBcGtzUGF0aCA9IHBhdGguam9pbih0bXBSb290LCBgJHthYWJOYW1lfS5hcGtzYCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IEFBQl9DQUNIRV9HVUFSRC5hY3F1aXJlKGFhYlBhdGgsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFhYkhhc2ggPSBhd2FpdCBmcy5oYXNoKGFhYlBhdGgpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBrZXlzdG9yZSxcbiAgICAgICAga2V5c3RvcmVQYXNzd29yZCxcbiAgICAgICAga2V5QWxpYXMsXG4gICAgICAgIGtleVBhc3N3b3JkLFxuICAgICAgfSA9IG9wdHM7XG4gICAgICBsZXQgY2FjaGVIYXNoID0gYWFiSGFzaDtcbiAgICAgIGlmIChrZXlzdG9yZSkge1xuICAgICAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhrZXlzdG9yZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBrZXlzdG9yZSBmaWxlIGF0ICcke2tleXN0b3JlfScgZWl0aGVyIGRvZXMgbm90IGV4aXN0IGAgK1xuICAgICAgICAgICAgYG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFrZXlzdG9yZVBhc3N3b3JkIHx8ICFrZXlBbGlhcyB8fCAha2V5UGFzc3dvcmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIG1hbmRhdG9yeSB0byBhbHNvIHByb3ZpZGUga2V5c3RvcmUgcGFzc3dvcmQsIGtleSBhbGlhcywgJyArXG4gICAgICAgICAgICAnYW5kIGtleSBwYXNzd29yZCBpZiB0aGUga2V5c3RvcmUgcGF0aCBpcyBzZXQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlzdG9yZUhhc2ggPSBhd2FpdCBmcy5oYXNoKGtleXN0b3JlKTtcbiAgICAgICAgY29uc3Qga2V5QWxpYXNIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKTtcbiAgICAgICAga2V5QWxpYXNIYXNoLnVwZGF0ZShrZXlBbGlhcyk7XG4gICAgICAgIGNhY2hlSGFzaCA9IFtjYWNoZUhhc2gsIGtleXN0b3JlSGFzaCwga2V5QWxpYXNIYXNoLmRpZ2VzdCgnaGV4JyldLmpvaW4oJzonKTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgQ2FsY3VsYXRlZCB0aGUgY2FjaGUga2V5IGZvciAnJHthYWJQYXRofSc6ICR7Y2FjaGVIYXNofWApO1xuICAgICAgaWYgKEFBQl9DQUNIRS5oYXMoY2FjaGVIYXNoKSkge1xuICAgICAgICBjb25zdCByZXN1bHRQYXRoID0gcGF0aC5yZXNvbHZlKEFBQl9DQUNIRS5nZXQoY2FjaGVIYXNoKSwgYXBrTmFtZSk7XG4gICAgICAgIGlmIChhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICAgICAgfVxuICAgICAgICBBQUJfQ0FDSEUuZGVsKGNhY2hlSGFzaCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQyKCk7XG4gICAgICBjb25zdCBhcmdzID0gW1xuICAgICAgICAnYnVpbGQtYXBrcycsXG4gICAgICAgICctLWFhcHQyJywgdGhpcy5iaW5hcmllcy5hYXB0MixcbiAgICAgICAgJy0tYnVuZGxlJywgYWFiUGF0aCxcbiAgICAgICAgJy0tb3V0cHV0JywgdG1wQXBrc1BhdGgsXG4gICAgICAgIC4uLihrZXlzdG9yZSA/IFtcbiAgICAgICAgICAnLS1rcycsIGtleXN0b3JlLFxuICAgICAgICAgICctLWtzLXBhc3MnLCBgcGFzczoke2tleXN0b3JlUGFzc3dvcmR9YCxcbiAgICAgICAgICAnLS1rcy1rZXktYWxpYXMnLCBrZXlBbGlhcyxcbiAgICAgICAgICAnLS1rZXktcGFzcycsIGBwYXNzOiR7a2V5UGFzc3dvcmR9YCxcbiAgICAgICAgXSA6IFtdKSxcbiAgICAgICAgJy0tbW9kZT11bml2ZXJzYWwnXG4gICAgICBdO1xuICAgICAgbG9nLmRlYnVnKGBQcmVwYXJpbmcgdW5pdmVyc2FsIC5hcGtzIGJ1bmRsZSBmcm9tICcke2FhYlBhdGh9J2ApO1xuICAgICAgYXdhaXQgdGhpcy5leGVjQnVuZGxldG9vbChhcmdzLCBgQ2Fubm90IGJ1aWxkIGEgdW5pdmVyc2FsIC5hcGtzIGJ1bmRsZSBmcm9tICcke2FhYlBhdGh9J2ApO1xuXG4gICAgICBsb2cuZGVidWcoYFVucGFja2luZyB1bml2ZXJzYWwgYXBwbGljYXRpb24gYnVuZGxlIGF0ICcke3RtcEFwa3NQYXRofScgdG8gJyR7dG1wUm9vdH0nYCk7XG4gICAgICBhd2FpdCB1bnppcEZpbGUodG1wQXBrc1BhdGgsIHRtcFJvb3QpO1xuICAgICAgbGV0IHVuaXZlcnNhbEFwa1BhdGg7XG4gICAgICBjb25zdCBmaWxlRGVsZXRpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgY29uc3QgYWxsRmlsZU5hbWVzID0gYXdhaXQgZnMucmVhZGRpcih0bXBSb290KTtcbiAgICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgYWxsRmlsZU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKHRtcFJvb3QsIGZpbGVOYW1lKTtcbiAgICAgICAgaWYgKGZpbGVOYW1lID09PSBVTklWRVJTQUxfQVBLKSB7XG4gICAgICAgICAgdW5pdmVyc2FsQXBrUGF0aCA9IGZ1bGxQYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbGVEZWxldGlvblByb21pc2VzLnB1c2goZnMucmltcmFmKGZ1bGxQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEIuYWxsKGZpbGVEZWxldGlvblByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgIGlmICghdW5pdmVyc2FsQXBrUGF0aCkge1xuICAgICAgICBsb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgaXRlbXMgd2VyZSBleHRyYWN0ZWQgZnJvbSB0aGUgLmFhYiBidW5kbGU6ICR7YWxsRmlsZU5hbWVzfWApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7VU5JVkVSU0FMX0FQS30gY2Fubm90IGJlIGZvdW5kIGluICcke2FhYlBhdGh9JyBidW5kbGUuIGAgK1xuICAgICAgICAgIGBEb2VzIHRoZSBhcmNoaXZlIGNvbnRhaW4gYSB2YWxpZCBhcHBsaWNhdGlvbiBidW5kbGU/YCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHRQYXRoID0gcGF0aC5qb2luKHRtcFJvb3QsIGFwa05hbWUpO1xuICAgICAgbG9nLmRlYnVnKGBGb3VuZCAke1VOSVZFUlNBTF9BUEt9IGF0ICcke3VuaXZlcnNhbEFwa1BhdGh9Jy4gQ2FjaGluZyBpdCB0byAnJHtyZXN1bHRQYXRofSdgKTtcbiAgICAgIGF3YWl0IGZzLm12KHVuaXZlcnNhbEFwa1BhdGgsIHJlc3VsdFBhdGgpO1xuICAgICAgQUFCX0NBQ0hFLnNldChjYWNoZUhhc2gsIHRtcFJvb3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgYWFiVXRpbHNNZXRob2RzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFNBQVMsR0FBRyxJQUFJQyxpQkFBSixDQUFRO0VBQ3hCQyxHQUFHLEVBQUUsRUFEbUI7RUFFeEJDLE9BQU8sRUFBRSxDQUFDQyxJQUFELEVBQU9D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
|
|
157
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL2FhYi11dGlscy5qcyIsIm5hbWVzIjpbIkFBQl9DQUNIRSIsIkxSVSIsIm1heCIsImRpc3Bvc2UiLCJoYXNoIiwiZXh0cmFjdGVkRmlsZXNSb290IiwiZnMiLCJyaW1yYWYiLCJBQUJfQ0FDSEVfR1VBUkQiLCJBc3luY0xvY2siLCJVTklWRVJTQUxfQVBLIiwiYWFiVXRpbHNNZXRob2RzIiwicHJvY2VzcyIsIm9uIiwic2l6ZSIsInBhdGhzIiwidmFsdWVzIiwibG9nIiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiYXBwUGF0aCIsInJpbXJhZlN5bmMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJleHRyYWN0VW5pdmVyc2FsQXBrIiwiYWFiUGF0aCIsIm9wdHMiLCJleGlzdHMiLCJFcnJvciIsImFhYk5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJhcGtOYW1lIiwic3Vic3RyaW5nIiwiZXh0bmFtZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInRtcEFwa3NQYXRoIiwiam9pbiIsImFjcXVpcmUiLCJhYWJIYXNoIiwia2V5c3RvcmUiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsImNhY2hlSGFzaCIsImtleXN0b3JlSGFzaCIsImtleUFsaWFzSGFzaCIsImNyeXB0byIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJoYXMiLCJyZXN1bHRQYXRoIiwicmVzb2x2ZSIsImdldCIsImRlbCIsImluaXRBYXB0MiIsImFyZ3MiLCJiaW5hcmllcyIsImFhcHQyIiwiZXhlY0J1bmRsZXRvb2wiLCJ1bnppcEZpbGUiLCJ1bml2ZXJzYWxBcGtQYXRoIiwiZmlsZURlbGV0aW9uUHJvbWlzZXMiLCJhbGxGaWxlTmFtZXMiLCJyZWFkZGlyIiwiZmlsZU5hbWUiLCJmdWxsUGF0aCIsInB1c2giLCJCIiwiYWxsIiwiaWduIiwibXYiLCJzZXQiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvdG9vbHMvYWFiLXV0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHsgdW56aXBGaWxlIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5jb25zdCBBQUJfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiAxMCxcbiAgZGlzcG9zZTogKGhhc2gsIGV4dHJhY3RlZEZpbGVzUm9vdCkgPT4gZnMucmltcmFmKGV4dHJhY3RlZEZpbGVzUm9vdCksXG59KTtcbmNvbnN0IEFBQl9DQUNIRV9HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFVOSVZFUlNBTF9BUEsgPSAndW5pdmVyc2FsLmFwayc7XG5cbmNvbnN0IGFhYlV0aWxzTWV0aG9kcyA9IHt9O1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoIUFBQl9DQUNIRS5zaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGF0aHMgPSBbLi4uQUFCX0NBQ0hFLnZhbHVlcygpXTtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGNsZWFudXAgb2YgJHtwYXRocy5sZW5ndGh9IGNhY2hlZCAuYWFiIGAgK1xuICAgIHV0aWwucGx1cmFsaXplKCdwYWNrYWdlJywgcGF0aHMubGVuZ3RoKSk7XG4gIGZvciAoY29uc3QgYXBwUGF0aCBvZiBwYXRocykge1xuICAgIHRyeSB7XG4gICAgICAvLyBBc3luY2hyb25vdXMgY2FsbHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gb25FeGl0IGhhbmRsZXJcbiAgICAgIGZzLnJpbXJhZlN5bmMoYXBwUGF0aCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwa0NyZWF0aW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleXN0b3JlIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgZGVwbG95bWVudCBrZXlzdG9yZSB1c2VkXG4gKiB0byBzaWduIHRoZSBBUEtzLiBUaGlzIGZsYWcgaXMgb3B0aW9uYWwuIElmIHlvdSBkb24ndCBpbmNsdWRlIGl0LFxuICogYnVuZGxldG9vbCBhdHRlbXB0cyB0byBzaWduIHlvdXIgQVBLcyB3aXRoIGEgZGVidWcgc2lnbmluZyBrZXkuXG4gKiBJZiB0aGUgLmFwayBoYXMgYmVlbiBhbHJlYWR5IHNpZ25lZCBhbmQgY2FjaGVkIHRoZW4gaXQgaXMgbm90IGdvaW5nIHRvIGJlIHJlc2lnbmVkXG4gKiB1bmxlc3MgYSBkaWZmZXJlbnQga2V5c3RvcmUgb3Iga2V5IGFsaWFzIGlzIHVzZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5c3RvcmVQYXNzd29yZCBTcGVjaWZpZXMgeW91ciBrZXlzdG9yZeKAmXMgcGFzc3dvcmQuXG4gKiBJdCBpcyBtYW5kYXRvcnkgdG8gcHJvdmlkZSB0aGlzIHZhbHVlIGlmIGBrZXlzdG9yZWAgb25lIGlzIGFzc2lnbmVkXG4gKiBvdGhlcndpc2UgaXQgaXMgZ29pbmcgdG8gYmUgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlBbGlhcyBTcGVjaWZpZXMgdGhlIGFsaWFzIG9mIHRoZSBzaWduaW5nIGtleSB5b3Ugd2FudCB0byB1c2UuXG4gKiBJdCBpcyBtYW5kYXRvcnkgdG8gcHJvdmlkZSB0aGlzIHZhbHVlIGlmIGBrZXlzdG9yZWAgb25lIGlzIGFzc2lnbmVkXG4gKiBvdGhlcndpc2UgaXQgaXMgZ29pbmcgdG8gYmUgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlQYXNzd29yZCBTcGVjaWZpZXMgdGhlIHBhc3N3b3JkIGZvciB0aGUgc2lnbmluZyBrZXkuXG4gKiBJdCBpcyBtYW5kYXRvcnkgdG8gcHJvdmlkZSB0aGlzIHZhbHVlIGlmIGBrZXlzdG9yZWAgb25lIGlzIGFzc2lnbmVkXG4gKiBvdGhlcndpc2UgaXQgaXMgZ29pbmcgdG8gYmUgaWdub3JlZC5cbiAqL1xuXG4vKipcbiAqIEJ1aWxkcyBhIHVuaXZlcnNhbCAuYXBrIGZyb20gdGhlIGdpdmVuIC5hYWIgcGFja2FnZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vY29tbWFuZC1saW5lL2J1bmRsZXRvb2wjZ2VuZXJhdGVfYXBrc1xuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWFiUGF0aCBGdWxsIHBhdGggdG8gdGhlIHNvdXJjZSAuYWFiIHBhY2thZ2VcbiAqIEBwYXJhbSB7QXBrQ3JlYXRpb25PcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGUgcmVzdWx0aW5nIHVuaXZlcnNhbCAuYXBrLiBUaGUgLmFwayBpcyBzdG9yZWQgaW4gdGhlIGludGVybmFsIGNhY2hlXG4gKiBieSBkZWZhdWx0LlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgdW5pdmVyc2FsIC5hcGtcbiAqL1xuYWFiVXRpbHNNZXRob2RzLmV4dHJhY3RVbml2ZXJzYWxBcGsgPSBhc3luYyBmdW5jdGlvbiBleHRyYWN0VW5pdmVyc2FsQXBrIChhYWJQYXRoLCBvcHRzID0ge30pIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYWFiUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2FhYlBhdGh9JyBlaXRoZXIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuXG4gIGNvbnN0IGFhYk5hbWUgPSBwYXRoLmJhc2VuYW1lKGFhYlBhdGgpO1xuICBjb25zdCBhcGtOYW1lID0gYWFiTmFtZS5zdWJzdHJpbmcoMCwgYWFiTmFtZS5sZW5ndGggLSBwYXRoLmV4dG5hbWUoYWFiTmFtZSkubGVuZ3RoKSArICcuYXBrJztcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCB0bXBBcGtzUGF0aCA9IHBhdGguam9pbih0bXBSb290LCBgJHthYWJOYW1lfS5hcGtzYCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IEFBQl9DQUNIRV9HVUFSRC5hY3F1aXJlKGFhYlBhdGgsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFhYkhhc2ggPSBhd2FpdCBmcy5oYXNoKGFhYlBhdGgpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBrZXlzdG9yZSxcbiAgICAgICAga2V5c3RvcmVQYXNzd29yZCxcbiAgICAgICAga2V5QWxpYXMsXG4gICAgICAgIGtleVBhc3N3b3JkLFxuICAgICAgfSA9IG9wdHM7XG4gICAgICBsZXQgY2FjaGVIYXNoID0gYWFiSGFzaDtcbiAgICAgIGlmIChrZXlzdG9yZSkge1xuICAgICAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhrZXlzdG9yZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBrZXlzdG9yZSBmaWxlIGF0ICcke2tleXN0b3JlfScgZWl0aGVyIGRvZXMgbm90IGV4aXN0IGAgK1xuICAgICAgICAgICAgYG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFrZXlzdG9yZVBhc3N3b3JkIHx8ICFrZXlBbGlhcyB8fCAha2V5UGFzc3dvcmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIG1hbmRhdG9yeSB0byBhbHNvIHByb3ZpZGUga2V5c3RvcmUgcGFzc3dvcmQsIGtleSBhbGlhcywgJyArXG4gICAgICAgICAgICAnYW5kIGtleSBwYXNzd29yZCBpZiB0aGUga2V5c3RvcmUgcGF0aCBpcyBzZXQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlzdG9yZUhhc2ggPSBhd2FpdCBmcy5oYXNoKGtleXN0b3JlKTtcbiAgICAgICAgY29uc3Qga2V5QWxpYXNIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKTtcbiAgICAgICAga2V5QWxpYXNIYXNoLnVwZGF0ZShrZXlBbGlhcyk7XG4gICAgICAgIGNhY2hlSGFzaCA9IFtjYWNoZUhhc2gsIGtleXN0b3JlSGFzaCwga2V5QWxpYXNIYXNoLmRpZ2VzdCgnaGV4JyldLmpvaW4oJzonKTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgQ2FsY3VsYXRlZCB0aGUgY2FjaGUga2V5IGZvciAnJHthYWJQYXRofSc6ICR7Y2FjaGVIYXNofWApO1xuICAgICAgaWYgKEFBQl9DQUNIRS5oYXMoY2FjaGVIYXNoKSkge1xuICAgICAgICBjb25zdCByZXN1bHRQYXRoID0gcGF0aC5yZXNvbHZlKEFBQl9DQUNIRS5nZXQoY2FjaGVIYXNoKSwgYXBrTmFtZSk7XG4gICAgICAgIGlmIChhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICAgICAgfVxuICAgICAgICBBQUJfQ0FDSEUuZGVsKGNhY2hlSGFzaCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQyKCk7XG4gICAgICBjb25zdCBhcmdzID0gW1xuICAgICAgICAnYnVpbGQtYXBrcycsXG4gICAgICAgICctLWFhcHQyJywgdGhpcy5iaW5hcmllcy5hYXB0MixcbiAgICAgICAgJy0tYnVuZGxlJywgYWFiUGF0aCxcbiAgICAgICAgJy0tb3V0cHV0JywgdG1wQXBrc1BhdGgsXG4gICAgICAgIC4uLihrZXlzdG9yZSA/IFtcbiAgICAgICAgICAnLS1rcycsIGtleXN0b3JlLFxuICAgICAgICAgICctLWtzLXBhc3MnLCBgcGFzczoke2tleXN0b3JlUGFzc3dvcmR9YCxcbiAgICAgICAgICAnLS1rcy1rZXktYWxpYXMnLCBrZXlBbGlhcyxcbiAgICAgICAgICAnLS1rZXktcGFzcycsIGBwYXNzOiR7a2V5UGFzc3dvcmR9YCxcbiAgICAgICAgXSA6IFtdKSxcbiAgICAgICAgJy0tbW9kZT11bml2ZXJzYWwnXG4gICAgICBdO1xuICAgICAgbG9nLmRlYnVnKGBQcmVwYXJpbmcgdW5pdmVyc2FsIC5hcGtzIGJ1bmRsZSBmcm9tICcke2FhYlBhdGh9J2ApO1xuICAgICAgYXdhaXQgdGhpcy5leGVjQnVuZGxldG9vbChhcmdzLCBgQ2Fubm90IGJ1aWxkIGEgdW5pdmVyc2FsIC5hcGtzIGJ1bmRsZSBmcm9tICcke2FhYlBhdGh9J2ApO1xuXG4gICAgICBsb2cuZGVidWcoYFVucGFja2luZyB1bml2ZXJzYWwgYXBwbGljYXRpb24gYnVuZGxlIGF0ICcke3RtcEFwa3NQYXRofScgdG8gJyR7dG1wUm9vdH0nYCk7XG4gICAgICBhd2FpdCB1bnppcEZpbGUodG1wQXBrc1BhdGgsIHRtcFJvb3QpO1xuICAgICAgbGV0IHVuaXZlcnNhbEFwa1BhdGg7XG4gICAgICBjb25zdCBmaWxlRGVsZXRpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgY29uc3QgYWxsRmlsZU5hbWVzID0gYXdhaXQgZnMucmVhZGRpcih0bXBSb290KTtcbiAgICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgYWxsRmlsZU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKHRtcFJvb3QsIGZpbGVOYW1lKTtcbiAgICAgICAgaWYgKGZpbGVOYW1lID09PSBVTklWRVJTQUxfQVBLKSB7XG4gICAgICAgICAgdW5pdmVyc2FsQXBrUGF0aCA9IGZ1bGxQYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbGVEZWxldGlvblByb21pc2VzLnB1c2goZnMucmltcmFmKGZ1bGxQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEIuYWxsKGZpbGVEZWxldGlvblByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgIGlmICghdW5pdmVyc2FsQXBrUGF0aCkge1xuICAgICAgICBsb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgaXRlbXMgd2VyZSBleHRyYWN0ZWQgZnJvbSB0aGUgLmFhYiBidW5kbGU6ICR7YWxsRmlsZU5hbWVzfWApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7VU5JVkVSU0FMX0FQS30gY2Fubm90IGJlIGZvdW5kIGluICcke2FhYlBhdGh9JyBidW5kbGUuIGAgK1xuICAgICAgICAgIGBEb2VzIHRoZSBhcmNoaXZlIGNvbnRhaW4gYSB2YWxpZCBhcHBsaWNhdGlvbiBidW5kbGU/YCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHRQYXRoID0gcGF0aC5qb2luKHRtcFJvb3QsIGFwa05hbWUpO1xuICAgICAgbG9nLmRlYnVnKGBGb3VuZCAke1VOSVZFUlNBTF9BUEt9IGF0ICcke3VuaXZlcnNhbEFwa1BhdGh9Jy4gQ2FjaGluZyBpdCB0byAnJHtyZXN1bHRQYXRofSdgKTtcbiAgICAgIGF3YWl0IGZzLm12KHVuaXZlcnNhbEFwa1BhdGgsIHJlc3VsdFBhdGgpO1xuICAgICAgQUFCX0NBQ0hFLnNldChjYWNoZUhhc2gsIHRtcFJvb3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgYWFiVXRpbHNNZXRob2RzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFNBQVMsR0FBRyxJQUFJQyxpQkFBSixDQUFRO0VBQ3hCQyxHQUFHLEVBQUUsRUFEbUI7RUFFeEJDLE9BQU8sRUFBRSxDQUFDQyxJQUFELEVBQU9DLGtCQUFQLEtBQThCQyxXQUFBLENBQUdDLE1BQUgsQ0FBVUYsa0JBQVY7QUFGZixDQUFSLENBQWxCO0FBSUEsTUFBTUcsZUFBZSxHQUFHLElBQUlDLGtCQUFKLEVBQXhCO0FBQ0EsTUFBTUMsYUFBYSxHQUFHLGVBQXRCO0FBRUEsTUFBTUMsZUFBZSxHQUFHLEVBQXhCO0FBRUFDLE9BQU8sQ0FBQ0MsRUFBUixDQUFXLE1BQVgsRUFBbUIsTUFBTTtFQUN2QixJQUFJLENBQUNiLFNBQVMsQ0FBQ2MsSUFBZixFQUFxQjtJQUNuQjtFQUNEOztFQUVELE1BQU1DLEtBQUssR0FBRyxDQUFDLEdBQUdmLFNBQVMsQ0FBQ2dCLE1BQVYsRUFBSixDQUFkOztFQUNBQyxlQUFBLENBQUlDLEtBQUosQ0FBVyx5QkFBd0JILEtBQUssQ0FBQ0ksTUFBTyxlQUF0QyxHQUNSQyxhQUFBLENBQUtDLFNBQUwsQ0FBZSxTQUFmLEVBQTBCTixLQUFLLENBQUNJLE1BQWhDLENBREY7O0VBRUEsS0FBSyxNQUFNRyxPQUFYLElBQXNCUCxLQUF0QixFQUE2QjtJQUMzQixJQUFJO01BRUZULFdBQUEsQ0FBR2lCLFVBQUgsQ0FBY0QsT0FBZDtJQUNELENBSEQsQ0FHRSxPQUFPRSxDQUFQLEVBQVU7TUFDVlAsZUFBQSxDQUFJUSxJQUFKLENBQVNELENBQUMsQ0FBQ0UsT0FBWDtJQUNEO0VBQ0Y7QUFDRixDQWhCRDs7QUErQ0FmLGVBQWUsQ0FBQ2dCLG1CQUFoQixHQUFzQyxlQUFlQSxtQkFBZixDQUFvQ0MsT0FBcEMsRUFBNkNDLElBQUksR0FBRyxFQUFwRCxFQUF3RDtFQUM1RixJQUFJLEVBQUMsTUFBTXZCLFdBQUEsQ0FBR3dCLE1BQUgsQ0FBVUYsT0FBVixDQUFQLENBQUosRUFBK0I7SUFDN0IsTUFBTSxJQUFJRyxLQUFKLENBQVcsZ0JBQWVILE9BQVEsOENBQWxDLENBQU47RUFDRDs7RUFFRCxNQUFNSSxPQUFPLEdBQUdDLGFBQUEsQ0FBS0MsUUFBTCxDQUFjTixPQUFkLENBQWhCOztFQUNBLE1BQU1PLE9BQU8sR0FBR0gsT0FBTyxDQUFDSSxTQUFSLENBQWtCLENBQWxCLEVBQXFCSixPQUFPLENBQUNiLE1BQVIsR0FBaUJjLGFBQUEsQ0FBS0ksT0FBTCxDQUFhTCxPQUFiLEVBQXNCYixNQUE1RCxJQUFzRSxNQUF0RjtFQUNBLE1BQU1tQixPQUFPLEdBQUcsTUFBTUMsZ0JBQUEsQ0FBUUMsT0FBUixFQUF0Qjs7RUFDQSxNQUFNQyxXQUFXLEdBQUdSLGFBQUEsQ0FBS1MsSUFBTCxDQUFVSixPQUFWLEVBQW9CLEdBQUVOLE9BQVEsT0FBOUIsQ0FBcEI7O0VBQ0EsSUFBSTtJQUNGLE9BQU8sTUFBTXhCLGVBQWUsQ0FBQ21DLE9BQWhCLENBQXdCZixPQUF4QixFQUFpQyxZQUFZO01BQ3hELE1BQU1nQixPQUFPLEdBQUcsTUFBTXRDLFdBQUEsQ0FBR0YsSUFBSCxDQUFRd0IsT0FBUixDQUF0QjtNQUNBLE1BQU07UUFDSmlCLFFBREk7UUFFSkMsZ0JBRkk7UUFHSkMsUUFISTtRQUlKQztNQUpJLElBS0ZuQixJQUxKO01BTUEsSUFBSW9CLFNBQVMsR0FBR0wsT0FBaEI7O01BQ0EsSUFBSUMsUUFBSixFQUFjO1FBQ1osSUFBSSxFQUFDLE1BQU12QyxXQUFBLENBQUd3QixNQUFILENBQVVlLFFBQVYsQ0FBUCxDQUFKLEVBQWdDO1VBQzlCLE1BQU0sSUFBSWQsS0FBSixDQUFXLHlCQUF3QmMsUUFBUywwQkFBbEMsR0FDYixzQkFERyxDQUFOO1FBRUQ7O1FBQ0QsSUFBSSxDQUFDQyxnQkFBRCxJQUFxQixDQUFDQyxRQUF0QixJQUFrQyxDQUFDQyxXQUF2QyxFQUFvRDtVQUNsRCxNQUFNLElBQUlqQixLQUFKLENBQVUsbUVBQ2QsOENBREksQ0FBTjtRQUVEOztRQUNELE1BQU1tQixZQUFZLEdBQUcsTUFBTTVDLFdBQUEsQ0FBR0YsSUFBSCxDQUFReUMsUUFBUixDQUEzQjs7UUFDQSxNQUFNTSxZQUFZLEdBQUdDLGVBQUEsQ0FBT0MsVUFBUCxDQUFrQixNQUFsQixDQUFyQjs7UUFDQUYsWUFBWSxDQUFDRyxNQUFiLENBQW9CUCxRQUFwQjtRQUNBRSxTQUFTLEdBQUcsQ0FBQ0EsU0FBRCxFQUFZQyxZQUFaLEVBQTBCQyxZQUFZLENBQUNJLE1BQWIsQ0FBb0IsS0FBcEIsQ0FBMUIsRUFBc0RiLElBQXRELENBQTJELEdBQTNELENBQVo7TUFDRDs7TUFDRHpCLGVBQUEsQ0FBSUMsS0FBSixDQUFXLGlDQUFnQ1UsT0FBUSxNQUFLcUIsU0FBVSxFQUFsRTs7TUFDQSxJQUFJakQsU0FBUyxDQUFDd0QsR0FBVixDQUFjUCxTQUFkLENBQUosRUFBOEI7UUFDNUIsTUFBTVEsVUFBVSxHQUFHeEIsYUFBQSxDQUFLeUIsT0FBTCxDQUFhMUQsU0FBUyxDQUFDMkQsR0FBVixDQUFjVixTQUFkLENBQWIsRUFBdUNkLE9BQXZDLENBQW5COztRQUNBLElBQUksTUFBTTdCLFdBQUEsQ0FBR3dCLE1BQUgsQ0FBVTJCLFVBQVYsQ0FBVixFQUFpQztVQUMvQixPQUFPQSxVQUFQO1FBQ0Q7O1FBQ0R6RCxTQUFTLENBQUM0RCxHQUFWLENBQWNYLFNBQWQ7TUFDRDs7TUFFRCxNQUFNLEtBQUtZLFNBQUwsRUFBTjtNQUNBLE1BQU1DLElBQUksR0FBRyxDQUNYLFlBRFcsRUFFWCxTQUZXLEVBRUEsS0FBS0MsUUFBTCxDQUFjQyxLQUZkLEVBR1gsVUFIVyxFQUdDcEMsT0FIRCxFQUlYLFVBSlcsRUFJQ2EsV0FKRCxFQUtYLElBQUlJLFFBQVEsR0FBRyxDQUNiLE1BRGEsRUFDTEEsUUFESyxFQUViLFdBRmEsRUFFQyxRQUFPQyxnQkFBaUIsRUFGekIsRUFHYixnQkFIYSxFQUdLQyxRQUhMLEVBSWIsWUFKYSxFQUlFLFFBQU9DLFdBQVksRUFKckIsQ0FBSCxHQUtSLEVBTEosQ0FMVyxFQVdYLGtCQVhXLENBQWI7O01BYUEvQixlQUFBLENBQUlDLEtBQUosQ0FBVywwQ0FBeUNVLE9BQVEsR0FBNUQ7O01BQ0EsTUFBTSxLQUFLcUMsY0FBTCxDQUFvQkgsSUFBcEIsRUFBMkIsK0NBQThDbEMsT0FBUSxHQUFqRixDQUFOOztNQUVBWCxlQUFBLENBQUlDLEtBQUosQ0FBVyw4Q0FBNkN1QixXQUFZLFNBQVFILE9BQVEsR0FBcEY7O01BQ0EsTUFBTSxJQUFBNEIsa0JBQUEsRUFBVXpCLFdBQVYsRUFBdUJILE9BQXZCLENBQU47TUFDQSxJQUFJNkIsZ0JBQUo7TUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxFQUE3QjtNQUNBLE1BQU1DLFlBQVksR0FBRyxNQUFNL0QsV0FBQSxDQUFHZ0UsT0FBSCxDQUFXaEMsT0FBWCxDQUEzQjs7TUFDQSxLQUFLLE1BQU1pQyxRQUFYLElBQXVCRixZQUF2QixFQUFxQztRQUNuQyxNQUFNRyxRQUFRLEdBQUd2QyxhQUFBLENBQUtTLElBQUwsQ0FBVUosT0FBVixFQUFtQmlDLFFBQW5CLENBQWpCOztRQUNBLElBQUlBLFFBQVEsS0FBSzdELGFBQWpCLEVBQWdDO1VBQzlCeUQsZ0JBQWdCLEdBQUdLLFFBQW5CO1FBQ0QsQ0FGRCxNQUVPO1VBQ0xKLG9CQUFvQixDQUFDSyxJQUFyQixDQUEwQm5FLFdBQUEsQ0FBR0MsTUFBSCxDQUFVaUUsUUFBVixDQUExQjtRQUNEO01BQ0Y7O01BQ0QsSUFBSTtRQUNGLE1BQU1FLGlCQUFBLENBQUVDLEdBQUYsQ0FBTVAsb0JBQU4sQ0FBTjtNQUNELENBRkQsQ0FFRSxPQUFPUSxHQUFQLEVBQVksQ0FBRTs7TUFDaEIsSUFBSSxDQUFDVCxnQkFBTCxFQUF1QjtRQUNyQmxELGVBQUEsQ0FBSUMsS0FBSixDQUFXLDREQUEyRG1ELFlBQWEsRUFBbkY7O1FBQ0EsTUFBTSxJQUFJdEMsS0FBSixDQUFXLEdBQUVyQixhQUFjLHdCQUF1QmtCLE9BQVEsWUFBaEQsR0FDYixzREFERyxDQUFOO01BRUQ7O01BQ0QsTUFBTTZCLFVBQVUsR0FBR3hCLGFBQUEsQ0FBS1MsSUFBTCxDQUFVSixPQUFWLEVBQW1CSCxPQUFuQixDQUFuQjs7TUFDQWxCLGVBQUEsQ0FBSUMsS0FBSixDQUFXLFNBQVFSLGFBQWMsUUFBT3lELGdCQUFpQixxQkFBb0JWLFVBQVcsR0FBeEY7O01BQ0EsTUFBTW5ELFdBQUEsQ0FBR3VFLEVBQUgsQ0FBTVYsZ0JBQU4sRUFBd0JWLFVBQXhCLENBQU47TUFDQXpELFNBQVMsQ0FBQzhFLEdBQVYsQ0FBYzdCLFNBQWQsRUFBeUJYLE9BQXpCO01BQ0EsT0FBT21CLFVBQVA7SUFDRCxDQTNFWSxDQUFiO0VBNEVELENBN0VELENBNkVFLE9BQU9qQyxDQUFQLEVBQVU7SUFDVixNQUFNbEIsV0FBQSxDQUFHQyxNQUFILENBQVUrQixPQUFWLENBQU47SUFDQSxNQUFNZCxDQUFOO0VBQ0Q7QUFDRixDQTFGRDs7ZUE0RmViLGUifQ==
|