obsidian-integration-testing 3.0.0 → 3.0.1
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/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/transport-desktop-cli.cjs +32 -1
- package/dist/lib/cjs/transport-desktop-cli.d.cts +11 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/transport-desktop-cli.d.mts +11 -0
- package/dist/lib/esm/transport-desktop-cli.mjs +32 -1
- package/dist/obsidian-integration-testing-3.0.1.tgz +0 -0
- package/package.json +1 -1
- package/dist/obsidian-integration-testing-3.0.0.tgz +0 -0
package/dist/lib/cjs/library.cjs
CHANGED
|
@@ -21,7 +21,7 @@ __export(library_exports, {
|
|
|
21
21
|
LIBRARY_VERSION: () => LIBRARY_VERSION
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(library_exports);
|
|
24
|
-
const LIBRARY_VERSION = false ? "dev" : "
|
|
24
|
+
const LIBRARY_VERSION = false ? "dev" : "3.0.0";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
LIBRARY_VERSION
|
|
@@ -177,6 +177,10 @@ ${diagnostics}`);
|
|
|
177
177
|
(0, import_obsidian_config.registerVaultInConfig)(vaultPath);
|
|
178
178
|
(0, import_log.log)("[cli-transport] Vault entry written. Opening vault via URI protocol...");
|
|
179
179
|
await openVaultViaUri(vaultPath);
|
|
180
|
+
await this.pollVaultReady(vaultPath);
|
|
181
|
+
await this.enablePluginsInLocalStorage(vaultPath, vaultPath);
|
|
182
|
+
await this.dismissTrustDialog(vaultPath);
|
|
183
|
+
return;
|
|
180
184
|
}
|
|
181
185
|
await this.pollVaultReady(vaultPath);
|
|
182
186
|
}
|
|
@@ -227,6 +231,33 @@ ${diagnostics}`);
|
|
|
227
231
|
throw new Error("Obsidian CLI is not available. Ensure Obsidian is installed and its CLI is in your PATH.");
|
|
228
232
|
}
|
|
229
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Dismisses the "Do you trust the author of this vault?" dialog if present.
|
|
236
|
+
*
|
|
237
|
+
* Clicks the "Trust author and enable plugins" button (`.mod-cta`) inside any
|
|
238
|
+
* modal whose text includes "Do you trust the author". This is needed when a
|
|
239
|
+
* vault with community plugins is opened without a prior `enable-plugin-<id>`
|
|
240
|
+
* entry in localStorage (e.g., the very first vault registered via config file).
|
|
241
|
+
*
|
|
242
|
+
* @param vaultPath - The vault path to evaluate in.
|
|
243
|
+
*/
|
|
244
|
+
async dismissTrustDialog(vaultPath) {
|
|
245
|
+
await (0, import_namespace_bootstrap.ensureNamespaceBootstrapped)(this, vaultPath);
|
|
246
|
+
const dismissExpr = `(function() {
|
|
247
|
+
var modals = document.querySelectorAll('.modal-container');
|
|
248
|
+
for (var i = 0; i < modals.length; i++) {
|
|
249
|
+
if (modals[i].textContent.includes('Do you trust the author')) {
|
|
250
|
+
var btn = modals[i].querySelector('.mod-cta');
|
|
251
|
+
if (btn) { btn.click(); return true; }
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return false;
|
|
255
|
+
})()`;
|
|
256
|
+
const result = await this.evaluate(dismissExpr, { cwd: vaultPath });
|
|
257
|
+
if (result === "true") {
|
|
258
|
+
(0, import_log.log)('[cli-transport] Dismissed "Do you trust the author" dialog.');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
230
261
|
/**
|
|
231
262
|
* Sets `enable-plugin-<vaultId>` in Obsidian's localStorage to prevent
|
|
232
263
|
* the "Do you trust the author of this vault?" dialog from appearing
|
|
@@ -474,4 +505,4 @@ async function openVaultViaUri(vaultPath) {
|
|
|
474
505
|
DesktopCliTransport,
|
|
475
506
|
invokeAndWriteResult
|
|
476
507
|
});
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgdW5saW5rLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBFeGVjUmVzdWx0IH0gZnJvbSAnLi9leGVjLmNqcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLmNqcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9uLWV4cHJlc3Npb24uY2pzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLmNqcyc7XG5pbXBvcnQgeyBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQgfSBmcm9tICcuL25hbWVzcGFjZS1ib290c3RyYXAuY2pzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL25vb3AuY2pzJztcbmltcG9ydCB7XG4gIGVuYWJsZUNsaUluQ29uZmlnLFxuICBnZXRBbnlSZWdpc3RlcmVkVmF1bHRQYXRoLFxuICBnZXRSZWdpc3RlcmVkVmF1bHRzLFxuICBnZXRWYXVsdElkLFxuICBpc0NsaUVuYWJsZWQsXG4gIGlzVmF1bHRPcGVuLFxuICBpc1ZhdWx0UmVnaXN0ZXJlZCxcbiAgcmVnaXN0ZXJWYXVsdEluQ29uZmlnLFxuICByZW1vdmVWYXVsdEZyb21Db25maWdcbn0gZnJvbSAnLi9vYnNpZGlhbi1jb25maWcuY2pzJztcbmltcG9ydCB7IHNlcmlhbGl6ZUVycm9yIH0gZnJvbSAnLi9zZXJpYWxpemUtZXJyb3IuY2pzJztcblxuaW50ZXJmYWNlIEludm9rZUFuZFdyaXRlUmVzdWx0UGFyYW1zIHtcbiAgZXZhbHVhdGUoKTogUHJvbWlzZTx1bmtub3duPjtcbiAgcmVzdWx0UGF0aDogc3RyaW5nO1xuICBzZXJpYWxpemVFcnJvcihlcnJvcjogdW5rbm93bik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIGVudmVsb3BlIHdyaXR0ZW4gYnkgdGhlIHRlbXBvcmFyeSBzY3JpcHQgZmlsZS5cbiAqXG4gKiAtIGB7IHZhbHVlOiBzdHJpbmcsIHR5cGU6ICdlcnJvcicgfWAgXHUyMDE0IHRoZSBleHByZXNzaW9uIHRocmV3OyBgdmFsdWVgIGlzIHRoZSBlcnJvciBtZXNzYWdlLlxuICogLSBgeyB2YWx1ZTogJycsIHR5cGU6ICdudWxsJyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gcmV0dXJuZWQgYG51bGxgLlxuICogLSBgeyB2YWx1ZTogJycsIHR5cGU6ICd1bmRlZmluZWQnIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBgdW5kZWZpbmVkYC5cbiAqIC0gYHsgdmFsdWU6IHN0cmluZyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gcmV0dXJuZWQgYSBzdHJpbmcgdmFsdWUgKG5vIGB0eXBlYCBmaWVsZCkuXG4gKi9cbnR5cGUgU2NyaXB0UmVzdWx0RW52ZWxvcGUgPVxuICB8IHsgdHlwZTogJ2Vycm9yJyB8ICdudWxsJyB8ICd1bmRlZmluZWQnOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHZhbHVlOiBzdHJpbmcgfTtcblxuY29uc3QgVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4gPSAndW5hYmxlIHRvIGZpbmQgT2JzaWRpYW4nO1xuY29uc3QgQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5jb25zdCBWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX0NMT1NFX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBWQVVMVF9FVkFMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTAwMDA7XG5cbmludGVyZmFjZSBCdWlsZERpYWdub3N0aWNzUGFyYW1zIHtcbiAgY29tbWFuZDogc3RyaW5nW107XG4gIGN3ZDogc3RyaW5nO1xuICBleGVjUmVzdWx0OiBFeGVjUmVzdWx0IHwgdW5kZWZpbmVkO1xuICByZXN1bHRQYXRoOiBzdHJpbmc7XG4gIHNjcmlwdENvbnRlbnQ6IHN0cmluZztcbiAgc2NyaXB0UGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRyYW5zcG9ydCB0aGF0IGNvbW11bmljYXRlcyB3aXRoIERlc2t0b3AgT2JzaWRpYW4gdmlhIHRoZSBgb2JzaWRpYW4gZXZhbGAgQ0xJIGNvbW1hbmRcbiAqIGFuZCBtYW5hZ2VzIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5leHBvcnQgY2xhc3MgRGVza3RvcENsaVRyYW5zcG9ydCBpbXBsZW1lbnRzIE9ic2lkaWFuVHJhbnNwb3J0IHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgdHJhbnNwb3J0IGlzIGZvciBhIG1vYmlsZSBwbGF0Zm9ybS4gQWx3YXlzIGBmYWxzZWAgZm9yIHRoaXMgdHJhbnNwb3J0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBpbnNpZGUgT2JzaWRpYW4gdmlhIGBvYnNpZGlhbiBldmFsYC5cbiAgICpcbiAgICogV3JpdGVzIHRoZSBleHByZXNzaW9uIHRvIGEgdGVtcG9yYXJ5IGAuY2pzYCBmaWxlIGFuZCBleGVjdXRlcyBhIHRpbnlcbiAgICogYHJlcXVpcmUoKS5pbnZva2UoKWAgY2FsbCB2aWEgdGhlIENMSS4gVGhlIHJlc3VsdCBpcyB3cml0dGVuIHRvIGFcbiAgICogYC5yZXN1bHQuanNvbmAgZmlsZSBieSB0aGUgc2NyaXB0LCBhdm9pZGluZyBDTEkgc3Rkb3V0IHNpemUgbGltaXRzXG4gICAqIGFuZCBJUEMgYnVmZmVyIGlzc3Vlcy5cbiAgICpcbiAgICogSGFuZGxlcyBhdXRvLXN0YXJ0OiBpZiBPYnNpZGlhbiBpcyBub3QgcnVubmluZywgbGF1bmNoZXMgaXQgdmlhIFVSSSBwcm90b2NvbFxuICAgKiBhbmQgcmV0cmllcyB1bnRpbCBpdCBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgSmF2YVNjcmlwdCBleHByZXNzaW9uIHRvIGV2YWx1YXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcmVzdWx0IHN0cmluZyAodHJhbnNwb3J0LXNwZWNpZmljIHByZWZpeGVzIHN0cmlwcGVkKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBldmFsdWF0ZShleHByZXNzaW9uOiBzdHJpbmcsIG9wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gICAgY29uc3Qgc2NyaXB0SWQgPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICAgIGNvbnN0IHNjcmlwdERpciA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IGpvaW4oc2NyaXB0RGlyLCBgJHtzY3JpcHRJZH0uanNgKTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5yZXN1bHQuanNvbmApO1xuXG4gICAgYXdhaXQgbWtkaXIoc2NyaXB0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHNjcmlwdENvbnRlbnQgPSBidWlsZFNjcmlwdEZpbGUoZXhwcmVzc2lvbiwgcmVzdWx0UGF0aCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHNjcmlwdFBhdGgsIHNjcmlwdENvbnRlbnQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhZmVTY3JpcHRQYXRoID0gc2NyaXB0UGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICBjb25zdCBjbGlFeHByID0gYCgke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhleGVjdXRlU2NyaXB0RmlsZSl9KSgke0pTT04uc3RyaW5naWZ5KHNhZmVTY3JpcHRQYXRoKX0pYDtcbiAgICAgIGNvbnN0IHZhdWx0SWQgPSBnZXRWYXVsdElkKG9wdGlvbnMuY3dkKTtcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBbJ29ic2lkaWFuJywgLi4uKHZhdWx0SWQgPyBbYHZhdWx0PSR7dmF1bHRJZH1gXSA6IFtdKSwgJ2V2YWwnLCAnLS1hbGxvdy1mb2N1cy1zdGVhbCcsIGBjb2RlPSR7Y2xpRXhwcn1gXTtcblxuICAgICAgbGV0IGV4ZWNSZXN1bHQ6IEV4ZWNSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjUmVzdWx0ID0gYXdhaXQgZXhlYyhjb21tYW5kLCB7XG4gICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICBpc1F1aWV0OiB0cnVlLFxuICAgICAgICAgIHNob3VsZEluY2x1ZGVEZXRhaWxzOiB0cnVlLFxuICAgICAgICAgIC4uLihvcHRpb25zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9KVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFVOQUJMRV9UT19GSU5EX09CU0lESUFOKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlT2JzaWRpYW5SdW5uaW5nQW5kUmV0cnkoY29tbWFuZCwgb3B0aW9ucy5jd2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhpc3RzU3luYyhyZXN1bHRQYXRoKSkge1xuICAgICAgICBjb25zdCBkaWFnbm9zdGljcyA9IGF3YWl0IGJ1aWxkRGlhZ25vc3RpY3Moe1xuICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICBleGVjUmVzdWx0LFxuICAgICAgICAgIHJlc3VsdFBhdGgsXG4gICAgICAgICAgc2NyaXB0Q29udGVudCxcbiAgICAgICAgICBzY3JpcHRQYXRoXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmlwdCBkaWQgbm90IGV4ZWN1dGUgZm9yIHBhdGg6ICR7b3B0aW9ucy5jd2R9XFxuJHtkaWFnbm9zdGljc31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0U3RyID0gYXdhaXQgcmVhZEZpbGUocmVzdWx0UGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBlbnZlbG9wZSA9IEpTT04ucGFyc2UocmVzdWx0U3RyKSBhcyBTY3JpcHRSZXN1bHRFbnZlbG9wZTtcblxuICAgICAgaWYgKCd0eXBlJyBpbiBlbnZlbG9wZSkge1xuICAgICAgICBpZiAoZW52ZWxvcGUudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGVycm9yIGluIE9ic2lkaWFuIGZvciBwYXRoOiAke29wdGlvbnMuY3dkfTogJHtlbnZlbG9wZS52YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnZlbG9wZS52YWx1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdW5saW5rKHNjcmlwdFBhdGgpLmNhdGNoKG5vb3ApO1xuICAgICAgYXdhaXQgdW5saW5rKHJlc3VsdFBhdGgpLmNhdGNoKG5vb3ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIENMSS1zcGVjaWZpYyBwcmVmbGlnaHQgY2hlY2tzLlxuICAgKlxuICAgKiBWZXJpZmllcyB0aGF0IHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkLCBDTEkgaXMgZW5hYmxlZCBpbiBPYnNpZGlhbiBzZXR0aW5ncyxcbiAgICogYW5kIHRoZSBgb2JzaWRpYW5gIENMSSBiaW5hcnkgaXMgYXZhaWxhYmxlIGluIFBBVEguIElmIHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkXG4gICAqIGJ1dCBub3Qgb3Blbiwgb3BlbnMgaXQgdmlhIFVSSSBwcm90b2NvbCBhbmQgcG9sbHMgdW50aWwgaXQgaXMgcmVhZHkuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZWZsaWdodENoZWNrKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUnVubmluZyBwcmVmbGlnaHQgY2hlY2sgZm9yIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBpZiAoIWlzVmF1bHRSZWdpc3RlcmVkKHZhdWx0UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFZhdWx0IGlzIG5vdCByZWdpc3RlcmVkIGluIE9ic2lkaWFuOiAke3ZhdWx0UGF0aH0uIFJlZ2lzdGVyIHRoZSB2YXVsdCBmaXJzdCB3aXRoIHJlZ2lzdGVyVmF1bHQoKSBvciBUZW1wVmF1bHQucmVnaXN0ZXIoKS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNDbGlFbmFibGVkKCkpIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIENMSSBpcyBkaXNhYmxlZCBpbiBvYnNpZGlhbi5qc29uLiBFbmFibGluZyBhbmQgcmVzdGFydGluZyBPYnNpZGlhbi4uLicpO1xuICAgICAgZW5hYmxlQ2xpSW5Db25maWcoKTtcbiAgICAgIGF3YWl0IHRoaXMucmVzdGFydE9ic2lkaWFuKHZhdWx0UGF0aCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hc3NlcnRDbGlBdmFpbGFibGUoKTtcblxuICAgIGlmICghaXNWYXVsdE9wZW4odmF1bHRQYXRoKSkge1xuICAgICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVmF1bHQgaXMgcmVnaXN0ZXJlZCBidXQgbm90IG9wZW46ICR7dmF1bHRQYXRofS4gT3BlbmluZyB2aWEgVVJJLi4uYCk7XG4gICAgICBhd2FpdCBvcGVuVmF1bHRWaWFVcmkodmF1bHRQYXRoKTtcbiAgICAgIGF3YWl0IHRoaXMucG9sbFZhdWx0UmVhZHkodmF1bHRQYXRoKTtcbiAgICB9XG5cbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBQcmVmbGlnaHQgY2hlY2sgcGFzc2VkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBFbGVjdHJvbiBJUEMuXG4gICAqXG4gICAqIFVzZXMgYHZhdWx0LW9wZW5gIElQQyB0byByZWdpc3RlciBhbmQgb3BlbiB0aGUgdmF1bHQsIHRoZW4gcG9sbHMgdW50aWxcbiAgICogdGhlIHZhdWx0J3MgQ0xJIGlzIHJlYWR5IGFuZCBgZ2V0QmFzZVBhdGgoKWAgbWF0Y2hlcyBgdmF1bHRQYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0UGF0aCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcblxuICAgIGlmIChleGlzdGluZ1ZhdWx0UGF0aCkge1xuICAgICAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRoaXMsIGV4aXN0aW5nVmF1bHRQYXRoKTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyRXhwciA9IGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy5pcGNTZW5kU3luYygke0pTT04uc3RyaW5naWZ5KHsgYXJnczogW3ZhdWx0UGF0aCwgZmFsc2VdLCBjaGFubmVsOiAndmF1bHQtb3BlbicgfSl9KWA7XG4gICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlZ2lzdGVyRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRQYXRoIH0pO1xuICAgICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoLCBleGlzdGluZ1ZhdWx0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE5vIGV4aXN0aW5nIHZhdWx0IHJlZ2lzdGVyZWQuIFdyaXRpbmcgdmF1bHQgZW50cnkgZGlyZWN0bHkgdG8gb2JzaWRpYW4uanNvbi4uLicpO1xuICAgICAgcmVnaXN0ZXJWYXVsdEluQ29uZmlnKHZhdWx0UGF0aCk7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCBlbnRyeSB3cml0dGVuLiBPcGVuaW5nIHZhdWx0IHZpYSBVUkkgcHJvdG9jb2wuLi4nKTtcbiAgICAgIGF3YWl0IG9wZW5WYXVsdFZpYVVyaSh2YXVsdFBhdGgpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucG9sbFZhdWx0UmVhZHkodmF1bHRQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhIHZhdWx0IGZyb20gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UuXG4gICAqXG4gICAqIFNjaGVkdWxlcyB0aGUgdmF1bHQgd2luZG93IHRvIGNsb3NlLCB3YWl0cywgdGhlbiByZW1vdmVzIHRoZSB2YXVsdFxuICAgKiBmcm9tIHRoZSByZWdpc3RyeSB2aWEgYHZhdWx0LXJlbW92ZWAgSVBDLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bnJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBVbnJlZ2lzdGVyaW5nIHZhdWx0OiBjbG9zaW5nIHdpbmRvdyBmb3IgJHt2YXVsdFBhdGh9Li4uYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCB2YXVsdFBhdGgpO1xuICAgICAgY29uc3QgZGVzdHJveUV4cHIgPSAnd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcuZGVzdHJveUN1cnJlbnRXaW5kb3coKSc7XG4gICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKGRlc3Ryb3lFeHByLCB7IGN3ZDogdmF1bHRQYXRoLCB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSk7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBXaW5kb3cgZGVzdHJveSBjb21tYW5kIHNlbnQuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFdpbmRvdyBkZXN0cm95IGZhaWxlZCAobm9uLWZhdGFsKTogJHtzZXJpYWxpemVFcnJvcihlcnJvcil9YCk7XG4gICAgfVxuXG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gV2FpdGluZyBmb3Igd2luZG93IHRvIGNsb3NlLi4uJyk7XG4gICAgYXdhaXQgZGVsYXkoVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFJlbW92aW5nIHZhdWx0IGZyb20gcmVnaXN0cnkuLi4nKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGV4aXN0aW5nVmF1bHRGb3JSZW1vdmFsKSB7XG4gICAgICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCBleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZUV4cHIgPSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcuaXBjU2VuZFN5bmMoJHtKU09OLnN0cmluZ2lmeSh7IGFyZ3M6IFt2YXVsdFBhdGhdLCBjaGFubmVsOiAndmF1bHQtcmVtb3ZlJyB9KX0pYDtcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsdWF0ZShyZW1vdmVFeHByLCB7IGN3ZDogZXhpc3RpbmdWYXVsdEZvclJlbW92YWwsIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogVkFVTFRfRVZBTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE5vIGV4aXN0aW5nIHZhdWx0IHRvIHRhcmdldCBmb3IgcmVtb3ZhbCBJUEMgXHUyMDE0IHJlbW92aW5nIGRpcmVjdGx5IGZyb20gb2JzaWRpYW4uanNvbi4nKTtcbiAgICAgICAgcmVtb3ZlVmF1bHRGcm9tQ29uZmlnKHZhdWx0UGF0aCk7XG4gICAgICB9XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCByZW1vdmVkIGZyb20gcmVnaXN0cnkuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFZhdWx0IHJlZ2lzdHJ5IHJlbW92YWwgZmFpbGVkIChub24tZmF0YWwpOiAke3NlcmlhbGl6ZUVycm9yKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIE9ic2lkaWFuIENMSSBiaW5hcnkgaXMgYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0gUEFUSC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYXNzZXJ0Q2xpQXZhaWxhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZSBvYnNpZGlhbicgOiAnd2hpY2ggb2JzaWRpYW4nO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2JzaWRpYW4gQ0xJIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSBPYnNpZGlhbiBpcyBpbnN0YWxsZWQgYW5kIGl0cyBDTEkgaXMgaW4geW91ciBQQVRILicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGBlbmFibGUtcGx1Z2luLTx2YXVsdElkPmAgaW4gT2JzaWRpYW4ncyBsb2NhbFN0b3JhZ2UgdG8gcHJldmVudFxuICAgKiB0aGUgXCJEbyB5b3UgdHJ1c3QgdGhlIGF1dGhvciBvZiB0aGlzIHZhdWx0P1wiIGRpYWxvZyBmcm9tIGFwcGVhcmluZ1xuICAgKiB3aGVuIGEgdmF1bHQgd2l0aCBjb21tdW5pdHkgcGx1Z2lucyBpcyBvcGVuZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKlxuICAgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgYHZhdWx0LW9wZW5gIElQQyAoc28gdGhlIHZhdWx0IElEIGV4aXN0cyBpblxuICAgKiBgb2JzaWRpYW4uanNvbmApIGFuZCBiZWZvcmUgdGhlIG5ldyB2YXVsdCB3aW5kb3cgZmluaXNoZXMgbG9hZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqIEBwYXJhbSBldmFsVGFyZ2V0VmF1bHRQYXRoIC0gVGhlIHZhdWx0IHBhdGggdG8gdXNlIGFzIGV2YWwgdGFyZ2V0IChhbiBleGlzdGluZywgbG9hZGVkIHZhdWx0KS5cbiAgICogICBsb2NhbFN0b3JhZ2UgaXMgc2hhcmVkIGFjcm9zcyBhbGwgT2JzaWRpYW4gd2luZG93cyAoc2FtZSBFbGVjdHJvbiBvcmlnaW4pLCBzbyB0aGVcbiAgICogICBgbG9jYWxTdG9yYWdlLnNldEl0ZW1gIGNhbGwgY2FuIHJ1biBpbiBhbnkgbG9hZGVkIHZhdWx0IHdpbmRvdy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5hYmxlUGx1Z2luc0luTG9jYWxTdG9yYWdlKHZhdWx0UGF0aDogc3RyaW5nLCBldmFsVGFyZ2V0VmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2YXVsdElkID0gZ2V0VmF1bHRJZCh2YXVsdFBhdGgpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gQ291bGQgbm90IGZpbmQgdmF1bHQgSUQgXHUyMDE0IHNraXBwaW5nIGxvY2FsU3RvcmFnZSB0cnVzdCBmbGFnLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCBldmFsVGFyZ2V0VmF1bHRQYXRoKTtcbiAgICBjb25zdCBlbmFibGVFeHByID0gYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnNldExvY2FsU3RvcmFnZUl0ZW0oJHtKU09OLnN0cmluZ2lmeSh7IGtleTogYGVuYWJsZS1wbHVnaW4tJHt2YXVsdElkfWAsIHZhbHVlOiAndHJ1ZScgfSl9KWA7XG4gICAgYXdhaXQgdGhpcy5ldmFsdWF0ZShlbmFibGVFeHByLCB7IGN3ZDogZXZhbFRhcmdldFZhdWx0UGF0aCB9KTtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBTZXQgZW5hYmxlLXBsdWdpbi0ke3ZhdWx0SWR9IGluIGxvY2FsU3RvcmFnZS5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXVuY2hlcyBPYnNpZGlhbiBiaW5hcnkgYW5kIHJldHJpZXMgdGhlIGV2YWwgdW50aWwgaXQgcmVzcG9uZHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIENMSSBjb21tYW5kIGFycmF5IHRvIHJldHJ5LlxuICAgKiBAcGFyYW0gY3dkIC0gVGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kOiBzdHJpbmdbXSwgY3dkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBpcyBub3QgcnVubmluZy4gU3RhcnRpbmcgT2JzaWRpYW4uLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCgpLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBUaGUgbGF1bmNoIGNvbW1hbmQgbWF5IGZhaWwgb24gc29tZSBzeXN0ZW1zIFx1MjAxNCB3ZSdsbCBzdGlsbCB0cnkgcG9sbGluZy5cbiAgICB9XG5cbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBQb2xsaW5nIGZvciBPYnNpZGlhbiBDTEkgKHRpbWVvdXQ9JHtTdHJpbmcoQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICBhd2FpdCBkZWxheShBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgeyBjd2QsIGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE9ic2lkaWFuIENMSSByZXNwb25kZWQuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGlmICghbWVzc2FnZS5pbmNsdWRlcyhVTkFCTEVfVE9fRklORF9PQlNJRElBTikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBub3QgcmVhZHkgeWV0LCByZXRyeWluZy4uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgT2JzaWRpYW4gZGlkIG5vdCBzdGFydCB3aXRoaW4gJHtTdHJpbmcoQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuYCk7XG4gIH1cblxuICAvKipcbiAgICogUG9sbHMgdW50aWwgdGhlIHZhdWx0IGlzIHJlYWR5IGFuZCByZXNwb25kaW5nIHRvIGV2YWwgY2FsbHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwb2xsVmF1bHRSZWFkeSh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBvbGxFeHByID0gJ3dpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnBvbGxWYXVsdEJhc2VQYXRoKCknO1xuXG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUG9sbGluZyBmb3IgdmF1bHQgcmVhZGluZXNzICh0aW1lb3V0PSR7U3RyaW5nKFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgbGV0IGlzQm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFpc0Jvb3RzdHJhcHBlZCkge1xuICAgICAgICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCB2YXVsdFBhdGgpO1xuICAgICAgICAgIGlzQm9vdHN0cmFwcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYXNlUGF0aCA9IGF3YWl0IHRoaXMuZXZhbHVhdGUocG9sbEV4cHIsIHsgY3dkOiB2YXVsdFBhdGggfSk7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKGJhc2VQYXRoKSA9PT0gdmF1bHRQYXRoKSB7XG4gICAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gVmF1bHQgaXMgcmVhZHkuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVmF1bHQgbm90IHJlYWR5IHlldCBcdTIwMTQgbmFtZXNwYWNlIG1heSBub3QgYmUgYm9vdHN0cmFwcGVkIHlldCBlaXRoZXIuXG4gICAgICAgIGlzQm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBhd2FpdCBkZWxheShWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVmF1bHQgYXQgJHt2YXVsdFBhdGh9IGRpZCBub3QgYmVjb21lIHJlYWR5IHdpdGhpbiAke1N0cmluZyhWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tc2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RhcnRzIE9ic2lkaWFuIGJ5IGtpbGxpbmcgdGhlIHJ1bm5pbmcgcHJvY2VzcyBhbmQgcmVsYXVuY2hpbmcgaXQuXG4gICAqXG4gICAqIFVzZWQgd2hlbiBhIGNvbmZpZyBjaGFuZ2UgKGxpa2UgZW5hYmxpbmcgQ0xJKSByZXF1aXJlcyBhIHJlc3RhcnQgdG8gdGFrZSBlZmZlY3QuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCB0byB1c2UgZm9yIHBvbGxpbmcgYWZ0ZXIgcmVzdGFydC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydE9ic2lkaWFuKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gS2lsbGluZyBPYnNpZGlhbiBwcm9jZXNzLi4uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoZ2V0S2lsbE9ic2lkaWFuQ29tbWFuZCgpLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBQcm9jZXNzIG1heSBub3QgYmUgcnVubmluZyBcdTIwMTQgdGhhdCdzIGZpbmUuXG4gICAgfVxuXG4gICAgYXdhaXQgZGVsYXkoVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIGNvbnN0IHJlc3RhcnRWYXVsdElkID0gZ2V0VmF1bHRJZCh2YXVsdFBhdGgpO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBbJ29ic2lkaWFuJywgLi4uKHJlc3RhcnRWYXVsdElkID8gW2B2YXVsdD0ke3Jlc3RhcnRWYXVsdElkfWBdIDogW10pLCAnZXZhbCcsICdjb2RlPVwiMVwiJ107XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kLCB2YXVsdFBhdGgpO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIGFuIGV4cHJlc3Npb24sIHdyaXRlcyB0aGUgcmVzdWx0IHRvIGEgSlNPTiBmaWxlLlxuICpcbiAqIFNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgZXhlY3V0ZWQgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGludm9jYXRpb24gcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludm9rZUFuZFdyaXRlUmVzdWx0KHBhcmFtczogSW52b2tlQW5kV3JpdGVSZXN1bHRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyB3cml0ZUZpbGU6IHdyaXRlUmVzdWx0RmlsZSB9ID0gd2luZG93LnJlcXVpcmUoJ25vZGU6ZnMvcHJvbWlzZXMnKSBhcyB0eXBlb2YgaW1wb3J0KCdub2RlOmZzL3Byb21pc2VzJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFyYW1zLmV2YWx1YXRlKCk7XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB3cml0ZVJlc3VsdEZpbGUocGFyYW1zLnJlc3VsdFBhdGgsIEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3VuZGVmaW5lZCcsIHZhbHVlOiAnJyB9KSk7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIGF3YWl0IHdyaXRlUmVzdWx0RmlsZShwYXJhbXMucmVzdWx0UGF0aCwgSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAnbnVsbCcsIHZhbHVlOiAnJyB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tYmFzZS10by1zdHJpbmcgLS0gSW50ZW50aW9uYWw6IHJlc3VsdCBpcyBhbiBhcmJpdHJhcnkgdmFsdWUgZnJvbSB0aGUgZXZhbHVhdGVkIGV4cHJlc3Npb24uXG4gICAgICBhd2FpdCB3cml0ZVJlc3VsdEZpbGUocGFyYW1zLnJlc3VsdFBhdGgsIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFN0cmluZyhyZXN1bHQpIH0pKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGF3YWl0IHdyaXRlUmVzdWx0RmlsZShwYXJhbXMucmVzdWx0UGF0aCwgSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAnZXJyb3InLCB2YWx1ZTogcGFyYW1zLnNlcmlhbGl6ZUVycm9yKGVycikgfSkpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGEgZGV0YWlsZWQgZGlhZ25vc3RpYyBzdHJpbmcgZm9yIHRoZSBcIlNjcmlwdCBkaWQgbm90IGV4ZWN1dGVcIiBlcnJvci5cbiAqXG4gKiBQZXJmb3JtcyBsaXZlIGVudmlyb25tZW50IGNoZWNrcyAocHJvY2VzcyBsaXN0LCB2YXVsdCByZWdpc3RyeSwgQ0xJIGNvbmZpZylcbiAqIGFuZCBpbmNsdWRlcyB0aGUgY29tbWFuZCwgZXhlYyBvdXRwdXQsIGFuZCBzY3JpcHQgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRpYWdub3N0aWMgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIEEgZm9ybWF0dGVkIGRpYWdub3N0aWMgc3RyaW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZERpYWdub3N0aWNzKHBhcmFtczogQnVpbGREaWFnbm9zdGljc1BhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxpbmVzLnB1c2goYCAgQ29tbWFuZDogJHtwYXJhbXMuY29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIGxpbmVzLnB1c2goYCAgV29ya2luZyBkaXJlY3Rvcnk6ICR7cGFyYW1zLmN3ZH1gKTtcbiAgbGluZXMucHVzaChgICBTY3JpcHQgcGF0aDogJHtwYXJhbXMuc2NyaXB0UGF0aH1gKTtcbiAgbGluZXMucHVzaChgICBFeHBlY3RlZCByZXN1bHQgZmlsZTogJHtwYXJhbXMucmVzdWx0UGF0aH1gKTtcblxuICBpZiAocGFyYW1zLmV4ZWNSZXN1bHQpIHtcbiAgICBsaW5lcy5wdXNoKGAgIEV4aXQgY29kZTogJHtwYXJhbXMuZXhlY1Jlc3VsdC5leGl0Q29kZSA9PT0gbnVsbCA/ICcobnVsbCBcdTIwMTQgcHJvY2VzcyBkaWQgbm90IGV4aXQgbm9ybWFsbHkpJyA6IFN0cmluZyhwYXJhbXMuZXhlY1Jlc3VsdC5leGl0Q29kZSl9YCk7XG4gICAgaWYgKHBhcmFtcy5leGVjUmVzdWx0LmV4aXRTaWduYWwpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgRXhpdCBzaWduYWw6ICR7cGFyYW1zLmV4ZWNSZXN1bHQuZXhpdFNpZ25hbH1gKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5leGVjUmVzdWx0LnN0ZG91dC50cmltKCkpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgc3Rkb3V0OiAke3BhcmFtcy5leGVjUmVzdWx0LnN0ZG91dC50cmltKCl9YCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZXhlY1Jlc3VsdC5zdGRlcnIudHJpbSgpKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgIHN0ZGVycjogJHtwYXJhbXMuZXhlY1Jlc3VsdC5zdGRlcnIudHJpbSgpfWApO1xuICAgIH1cbiAgICBpZiAoIXBhcmFtcy5leGVjUmVzdWx0LnN0ZG91dC50cmltKCkgJiYgIXBhcmFtcy5leGVjUmVzdWx0LnN0ZGVyci50cmltKCkpIHtcbiAgICAgIGxpbmVzLnB1c2goJyAgc3Rkb3V0L3N0ZGVycjogKGVtcHR5KScpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKCcgIGV4ZWMgcmVzdWx0OiAobm90IGF2YWlsYWJsZSBcdTIwMTQgT2JzaWRpYW4gd2FzIGF1dG8tc3RhcnRlZCBhbmQgcmV0cmllZCknKTtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJ0Vudmlyb25tZW50IGNoZWNrczonKTtcbiAgbGluZXMucHVzaChgICBPYnNpZGlhbiBydW5uaW5nOiAke2F3YWl0IGlzT2JzaWRpYW5SdW5uaW5nKCkgPyAneWVzJyA6ICdOTyd9YCk7XG4gIGxpbmVzLnB1c2goYCAgQ0xJIGVuYWJsZWQgaW4gb2JzaWRpYW4uanNvbjogJHtpc0NsaUVuYWJsZWQoKSA/ICd5ZXMnIDogJ05PJ31gKTtcbiAgbGluZXMucHVzaChgICBWYXVsdCByZWdpc3RlcmVkOiAke2lzVmF1bHRSZWdpc3RlcmVkKHBhcmFtcy5jd2QpID8gJ3llcycgOiAnTk8nfWApO1xuICBsaW5lcy5wdXNoKGAgIFNjcmlwdCBmaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKHBhcmFtcy5zY3JpcHRQYXRoKSA/ICd5ZXMnIDogJ25vIChhbHJlYWR5IGNsZWFuZWQgdXApJ31gKTtcbiAgbGluZXMucHVzaChgICBSZXN1bHQgZmlsZSBleGlzdHM6ICR7ZXhpc3RzU3luYyhwYXJhbXMucmVzdWx0UGF0aCkgPyAneWVzJyA6ICdubyd9YCk7XG5cbiAgY29uc3QgcmVnaXN0ZXJlZFZhdWx0cyA9IGdldFJlZ2lzdGVyZWRWYXVsdHMoKTtcbiAgaWYgKHJlZ2lzdGVyZWRWYXVsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgbGluZXMucHVzaCgnICBSZWdpc3RlcmVkIHZhdWx0czogKG5vbmUpJyk7XG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaCgnICBSZWdpc3RlcmVkIHZhdWx0czonKTtcbiAgICBmb3IgKGNvbnN0IHZhdWx0IG9mIHJlZ2lzdGVyZWRWYXVsdHMpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAtICR7dmF1bHQucGF0aH0gKG9wZW46ICR7U3RyaW5nKHZhdWx0Lm9wZW4pfSlgKTtcbiAgICB9XG4gIH1cblxuICBsaW5lcy5wdXNoKGAgIFNjcmlwdCBjb250ZW50OlxcbiR7cGFyYW1zLnNjcmlwdENvbnRlbnR9YCk7XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29udGVudCBvZiBhIHRlbXBvcmFyeSBzY3JpcHQgZmlsZS5cbiAqXG4gKiBTZXJpYWxpemVzIHtAbGluayBpbnZva2VBbmRXcml0ZVJlc3VsdH0gaW50byBhIHNlbGYtY29udGFpbmVkIElJRkUgdGhhdFxuICogZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uLCB3cml0ZXMgdGhlIHJlc3VsdCAob3IgZXJyb3IpIHRvIGByZXN1bHRQYXRoYC5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gKiBAcGFyYW0gcmVzdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByZXN1bHQgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBzY3JpcHQgZmlsZSBjb250ZW50LlxuICovXG5mdW5jdGlvbiBidWlsZFNjcmlwdEZpbGUoZXhwcmVzc2lvbjogc3RyaW5nLCByZXN1bHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmblN0ciA9IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhpbnZva2VBbmRXcml0ZVJlc3VsdCk7XG4gIGNvbnN0IHNlcmlhbGl6ZUVycm9yU3RyID0gZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKHNlcmlhbGl6ZUVycm9yKTtcbiAgY29uc3QgcmVzdWx0UGF0aEpzb24gPSBKU09OLnN0cmluZ2lmeShyZXN1bHRQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKSk7XG4gIHJldHVybiBgKCR7Zm5TdHJ9KSh7IGV2YWx1YXRlOiBhc3luYyAoKSA9PiAoJHtleHByZXNzaW9ufSksIHJlc3VsdFBhdGg6ICR7cmVzdWx0UGF0aEpzb259LCBzZXJpYWxpemVFcnJvcjogJHtzZXJpYWxpemVFcnJvclN0cn0gfSlgO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgc2NyaXB0IGZpbGUgZnJvbSBkaXNrLCBsb2dzIGl0cyBjb250ZW50LCBhbmQgZXhlY3V0ZXMgaXQgdmlhIGBuZXcgRnVuY3Rpb25gLlxuICpcbiAqIFNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgZXhlY3V0ZWQgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqXG4gKiBAcGFyYW0gc2NyaXB0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBzY3JpcHQgZmlsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNjcmlwdEZpbGUoc2NyaXB0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZzUHJvbWlzZXMgPSB3aW5kb3cucmVxdWlyZSgnbm9kZTpmcy9wcm9taXNlcycpIGFzIHR5cGVvZiBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGZzUHJvbWlzZXMuYWNjZXNzKHNjcmlwdFBhdGgpO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGZpbGUgbm90IGZvdW5kOiAke3NjcmlwdFBhdGh9YCwgeyBjYXVzZSB9KTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdCA9IGF3YWl0IGZzUHJvbWlzZXMucmVhZEZpbGUoc2NyaXB0UGF0aCwgJ3V0Zi04Jyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlIC0tIERpYWdub3N0aWMgbG9nZ2luZyBpbnNpZGUgT2JzaWRpYW4gcHJvY2Vzczsgbm8gbG9nZ2VyIGF2YWlsYWJsZS5cbiAgY29uc29sZS5kZWJ1ZyhgRXhlY3V0aW5nICR7c2NyaXB0UGF0aH06XFxuJHtzY3JpcHR9YCk7XG5cbiAgbGV0IGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsLCBuby1uZXctZnVuYyAtLSBUaGUgc2NyaXB0IGlzIGEgdHJ1c3RlZCwgc2VsZi1nZW5lcmF0ZWQgSUlGRSBleHByZXNzaW9uLlxuICAgIGZuID0gbmV3IEZ1bmN0aW9uKGByZXR1cm4gJHtzY3JpcHR9YCkgYXMgKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcgJHtzY3JpcHRQYXRofWAsIHsgY2F1c2UgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGZuKCk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBleGVjdXRpbmcgJHtzY3JpcHRQYXRofWAsIHsgY2F1c2UgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb21tYW5kIHRvIGtpbGwgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gKlxuICogQHJldHVybnMgVGhlIHNoZWxsIGNvbW1hbmQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRLaWxsT2JzaWRpYW5Db21tYW5kKCk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuICd0YXNra2lsbCAvSU0gT2JzaWRpYW4uZXhlIC9GJztcbiAgfVxuXG4gIHJldHVybiAncGtpbGwgLWYgT2JzaWRpYW4nO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgdG8gbGF1bmNoIHRoZSBPYnNpZGlhbiBiaW5hcnkuXG4gKlxuICogQHJldHVybnMgVGhlIHNoZWxsIGNvbW1hbmQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRPYnNpZGlhbkxhdW5jaENvbW1hbmQoKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBsb2NhbEFwcERhdGEgPSBwcm9jZXNzLmVudlsnTE9DQUxBUFBEQVRBJ10gPz8gJyc7XG4gICAgcmV0dXJuIGBzdGFydCBcIlwiIFwiJHtsb2NhbEFwcERhdGF9XFxcXFByb2dyYW1zXFxcXE9ic2lkaWFuXFxcXE9ic2lkaWFuLmV4ZVwiYDtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiAnL0FwcGxpY2F0aW9ucy9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW4gJic7XG4gIH1cblxuICByZXR1cm4gJ29ic2lkaWFuICYnO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgdG8gb3BlbiBhIFVSSS5cbiAqXG4gKiBAcGFyYW0gdXJpIC0gVGhlIFVSSSB0byBvcGVuLlxuICogQHJldHVybnMgVGhlIHNoZWxsIGNvbW1hbmQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRPcGVuVXJpQ29tbWFuZCh1cmk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGBzdGFydCBcIlwiIFwiJHt1cml9XCJgO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGBvcGVuIFwiJHt1cml9XCJgO1xuICB9XG5cbiAgcmV0dXJuIGB4ZGctb3BlbiBcIiR7dXJpfVwiYDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgT2JzaWRpYW4gcHJvY2VzcyBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIE9ic2lkaWFuIHByb2Nlc3MgaXMgZm91bmQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5hc3luYyBmdW5jdGlvbiBpc09ic2lkaWFuUnVubmluZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMidcbiAgICA/ICd0YXNrbGlzdCAvRkkgXCJJTUFHRU5BTUUgZXEgT2JzaWRpYW4uZXhlXCIgL05IJ1xuICAgIDogJ3BncmVwIC1mIE9ic2lkaWFuJztcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgcmV0dXJuIG91dHB1dC5pbmNsdWRlcygnT2JzaWRpYW4uZXhlJyk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQudHJpbSgpLmxlbmd0aCA+IDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIE9wZW5zIGEgdmF1bHQgaW4gT2JzaWRpYW4gdXNpbmcgdGhlIGBvYnNpZGlhbjovL29wZW5gIFVSSSBwcm90b2NvbC5cbiAqXG4gKiBUaGlzIHdvcmtzIHdoZXRoZXIgT2JzaWRpYW4gaXMgYWxyZWFkeSBydW5uaW5nIChzaWduYWxzIGl0IHRvIG9wZW4gdGhlIHZhdWx0KVxuICogb3Igbm90IChsYXVuY2hlcyBPYnNpZGlhbiB3aXRoIHRoZSB2YXVsdCkuIFRoZSBVUkkgcHJvdG9jb2wgaXMgaGFuZGxlZCBieSB0aGVcbiAqIE9TLCB3aGljaCByb3V0ZXMgaXQgdG8gdGhlIHJlZ2lzdGVyZWQgT2JzaWRpYW4gaGFuZGxlci5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gb3BlblZhdWx0VmlhVXJpKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHZhdWx0SWQgPSBnZXRWYXVsdElkKHZhdWx0UGF0aCk7XG4gIGlmICghdmF1bHRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG9wZW4gdmF1bHQgdmlhIFVSSTogdmF1bHQgaXMgbm90IHJlZ2lzdGVyZWQgaW4gb2JzaWRpYW4uanNvbjogJHt2YXVsdFBhdGh9YCk7XG4gIH1cbiAgY29uc3QgdXJpID0gYG9ic2lkaWFuOi8vb3Blbj92YXVsdD0ke2VuY29kZVVSSUNvbXBvbmVudCh2YXVsdElkKX1gO1xuICBjb25zdCBjb21tYW5kID0gZ2V0T3BlblVyaUNvbW1hbmQodXJpKTtcbiAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gT3BlbmluZyB2YXVsdCB2aWEgVVJJOiAke3VyaX1gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBVUkkgb3BlbiBmYWlsZWQgKG5vbi1mYXRhbCk6ICR7c2VyaWFsaXplRXJyb3IoZXJyb3IpfWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0EscUJBQTJCO0FBQzNCLHNCQUtPO0FBQ1AscUJBQXVCO0FBQ3ZCLHVCQUFxQjtBQUNyQiwwQkFBb0I7QUFRcEIsa0JBQXFCO0FBQ3JCLGlDQUE0QztBQUM1QyxpQkFBb0I7QUFDcEIsaUNBQTRDO0FBQzVDLGtCQUFxQjtBQUNyQiw2QkFVTztBQUNQLDZCQUErQjtBQW9CL0IsTUFBTSwwQkFBMEI7QUFDaEMsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxxQ0FBcUM7QUFDM0MsTUFBTSxzQ0FBc0M7QUFDNUMsTUFBTSxxQ0FBcUM7QUFDM0MsTUFBTSxvQ0FBb0M7QUFDMUMsTUFBTSxxQ0FBcUM7QUFlcEMsTUFBTSxvQkFBaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUk1QyxXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFpQjNCLE1BQWEsU0FBUyxZQUFvQixTQUFnRDtBQUN4RixVQUFNLGNBQWM7QUFDcEIsVUFBTSxXQUFXLE9BQU8sS0FBSyxPQUFPLENBQUMsRUFBRSxNQUFNLFdBQVc7QUFDeEQsVUFBTSxnQkFBWSwyQkFBSyx1QkFBTyxHQUFHLDhCQUE4QjtBQUMvRCxVQUFNLGlCQUFhLHVCQUFLLFdBQVcsR0FBRyxRQUFRLEtBQUs7QUFDbkQsVUFBTSxpQkFBYSx1QkFBSyxXQUFXLEdBQUcsUUFBUSxjQUFjO0FBRTVELGNBQU0sdUJBQU0sV0FBVyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBRTFDLFVBQU0sZ0JBQWdCLGdCQUFnQixZQUFZLFVBQVU7QUFDNUQsY0FBTSwyQkFBVSxZQUFZLGFBQWE7QUFFekMsUUFBSTtBQUNGLFlBQU0saUJBQWlCLFdBQVcsUUFBUSxPQUFPLEdBQUc7QUFDcEQsWUFBTSxVQUFVLFFBQUksd0RBQTRCLGlCQUFpQixDQUFDLEtBQUssS0FBSyxVQUFVLGNBQWMsQ0FBQztBQUNyRyxZQUFNLGNBQVUsbUNBQVcsUUFBUSxHQUFHO0FBQ3RDLFlBQU0sVUFBVSxDQUFDLFlBQVksR0FBSSxVQUFVLENBQUMsU0FBUyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUksUUFBUSx1QkFBdUIsUUFBUSxPQUFPLEVBQUU7QUFFdkgsVUFBSTtBQUNKLFVBQUk7QUFDRixxQkFBYSxVQUFNLGtCQUFLLFNBQVM7QUFBQSxVQUMvQixLQUFLLFFBQVE7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULHNCQUFzQjtBQUFBLFVBQ3RCLEdBQUksUUFBUSwwQkFBMEIsVUFBYSxFQUFFLHVCQUF1QixRQUFRLHNCQUFzQjtBQUFBLFFBQzVHLENBQUM7QUFBQSxNQUNILFNBQVMsT0FBTztBQUNkLGNBQU0sVUFBVSxpQkFBaUIsUUFBUSxNQUFNLFVBQVUsT0FBTyxLQUFLO0FBQ3JFLFlBQUksUUFBUSxTQUFTLHVCQUF1QixHQUFHO0FBQzdDLGdCQUFNLEtBQUssOEJBQThCLFNBQVMsUUFBUSxHQUFHO0FBQUEsUUFDL0QsT0FBTztBQUNMLGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLEtBQUMsMkJBQVcsVUFBVSxHQUFHO0FBQzNCLGNBQU0sY0FBYyxNQUFNLGlCQUFpQjtBQUFBLFVBQ3pDO0FBQUEsVUFDQSxLQUFLLFFBQVE7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBQ0QsY0FBTSxJQUFJLE1BQU0sb0NBQW9DLFFBQVEsR0FBRztBQUFBLEVBQUssV0FBVyxFQUFFO0FBQUEsTUFDbkY7QUFFQSxZQUFNLFlBQVksVUFBTSwwQkFBUyxZQUFZLE9BQU87QUFDcEQsWUFBTSxXQUFXLEtBQUssTUFBTSxTQUFTO0FBRXJDLFVBQUksVUFBVSxVQUFVO0FBQ3RCLFlBQUksU0FBUyxTQUFTLFNBQVM7QUFDN0IsZ0JBQU0sSUFBSSxNQUFNLHNDQUFzQyxRQUFRLEdBQUcsS0FBSyxTQUFTLEtBQUssRUFBRTtBQUFBLFFBQ3hGO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLFNBQVM7QUFBQSxJQUNsQixVQUFFO0FBQ0EsZ0JBQU0sd0JBQU8sVUFBVSxFQUFFLE1BQU0sZ0JBQUk7QUFDbkMsZ0JBQU0sd0JBQU8sVUFBVSxFQUFFLE1BQU0sZ0JBQUk7QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdBLE1BQWEsZUFBZSxXQUFrQztBQUM1RCx3QkFBSSxzREFBc0QsU0FBUyxFQUFFO0FBQ3JFLFFBQUksS0FBQywwQ0FBa0IsU0FBUyxHQUFHO0FBQ2pDLFlBQU0sSUFBSTtBQUFBLFFBQ1Isd0NBQXdDLFNBQVM7QUFBQSxNQUNuRDtBQUFBLElBQ0Y7QUFFQSxRQUFJLEtBQUMscUNBQWEsR0FBRztBQUNuQiwwQkFBSSx1RkFBdUY7QUFDM0Ysb0RBQWtCO0FBQ2xCLFlBQU0sS0FBSyxnQkFBZ0IsU0FBUztBQUFBLElBQ3RDO0FBRUEsVUFBTSxLQUFLLG1CQUFtQjtBQUU5QixRQUFJLEtBQUMsb0NBQVksU0FBUyxHQUFHO0FBQzNCLDBCQUFJLHFEQUFxRCxTQUFTLHNCQUFzQjtBQUN4RixZQUFNLGdCQUFnQixTQUFTO0FBQy9CLFlBQU0sS0FBSyxlQUFlLFNBQVM7QUFBQSxJQUNyQztBQUVBLHdCQUFJLHlDQUF5QztBQUFBLEVBQy9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsTUFBYSxjQUFjLFdBQWtDO0FBQzNELHdCQUFJLHNDQUFzQyxTQUFTLEVBQUU7QUFDckQsVUFBTSx3QkFBb0Isa0RBQTBCO0FBRXBELFFBQUksbUJBQW1CO0FBQ3JCLGdCQUFNLHdEQUE0QixNQUFNLGlCQUFpQjtBQUN6RCxZQUFNLGVBQWUsbURBQW1ELEtBQUssVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEtBQUssR0FBRyxTQUFTLGFBQWEsQ0FBQyxDQUFDO0FBQzNJLFlBQU0sS0FBSyxTQUFTLGNBQWMsRUFBRSxLQUFLLGtCQUFrQixDQUFDO0FBQzVELFlBQU0sS0FBSyw0QkFBNEIsV0FBVyxpQkFBaUI7QUFBQSxJQUNyRSxPQUFPO0FBQ0wsMEJBQUksZ0dBQWdHO0FBQ3BHLHdEQUFzQixTQUFTO0FBQy9CLDBCQUFJLHdFQUF3RTtBQUM1RSxZQUFNLGdCQUFnQixTQUFTO0FBQUEsSUFDakM7QUFFQSxVQUFNLEtBQUssZUFBZSxTQUFTO0FBQUEsRUFDckM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxNQUFhLGdCQUFnQixXQUFrQztBQUM3RCx3QkFBSSwyREFBMkQsU0FBUyxLQUFLO0FBQzdFLFFBQUk7QUFDRixnQkFBTSx3REFBNEIsTUFBTSxTQUFTO0FBQ2pELFlBQU0sY0FBYztBQUNwQixZQUFNLEtBQUssU0FBUyxhQUFhLEVBQUUsS0FBSyxXQUFXLHVCQUF1QixtQ0FBbUMsQ0FBQztBQUM5RywwQkFBSSw4Q0FBOEM7QUFBQSxJQUNwRCxTQUFTLE9BQWdCO0FBQ3ZCLDBCQUFJLDBEQUFzRCx1Q0FBZSxLQUFLLENBQUMsRUFBRTtBQUFBLElBQ25GO0FBRUEsd0JBQUksZ0RBQWdEO0FBQ3BELFVBQU0sTUFBTSxpQ0FBaUM7QUFFN0Msd0JBQUksaURBQWlEO0FBQ3JELFVBQU0sOEJBQTBCLGtEQUEwQjtBQUMxRCxRQUFJO0FBQ0YsVUFBSSx5QkFBeUI7QUFDM0Isa0JBQU0sd0RBQTRCLE1BQU0sdUJBQXVCO0FBQy9ELGNBQU0sYUFBYSxtREFBbUQsS0FBSyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDO0FBQ3BJLGNBQU0sS0FBSyxTQUFTLFlBQVksRUFBRSxLQUFLLHlCQUF5Qix1QkFBdUIsbUNBQW1DLENBQUM7QUFBQSxNQUM3SCxPQUFPO0FBQ0wsNEJBQUksMEdBQXFHO0FBQ3pHLDBEQUFzQixTQUFTO0FBQUEsTUFDakM7QUFDQSwwQkFBSSw4Q0FBOEM7QUFBQSxJQUNwRCxTQUFTLE9BQWdCO0FBQ3ZCLDBCQUFJLGtFQUE4RCx1Q0FBZSxLQUFLLENBQUMsRUFBRTtBQUFBLElBQzNGO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBYyxxQkFBb0M7QUFDaEQsVUFBTSxVQUFVLG9CQUFBQSxRQUFRLGFBQWEsVUFBVSx1QkFBdUI7QUFDdEUsUUFBSTtBQUNGLGdCQUFNLGtCQUFLLFNBQVMsRUFBRSxTQUFTLEtBQUssQ0FBQztBQUFBLElBQ3ZDLFFBQVE7QUFDTixZQUFNLElBQUksTUFBTSwwRkFBMEY7QUFBQSxJQUM1RztBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZUEsTUFBYyw0QkFBNEIsV0FBbUIscUJBQTRDO0FBQ3ZHLFVBQU0sY0FBVSxtQ0FBVyxTQUFTO0FBQ3BDLFFBQUksQ0FBQyxTQUFTO0FBQ1osMEJBQUksa0ZBQTZFO0FBQ2pGO0FBQUEsSUFDRjtBQUVBLGNBQU0sd0RBQTRCLE1BQU0sbUJBQW1CO0FBQzNELFVBQU0sYUFBYSwyREFBMkQsS0FBSyxVQUFVLEVBQUUsS0FBSyxpQkFBaUIsT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLENBQUM7QUFDaEosVUFBTSxLQUFLLFNBQVMsWUFBWSxFQUFFLEtBQUssb0JBQW9CLENBQUM7QUFDNUQsd0JBQUkscUNBQXFDLE9BQU8sbUJBQW1CO0FBQUEsRUFDckU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWMsOEJBQThCLFNBQW1CLEtBQTRCO0FBQ3pGLHdCQUFJLCtEQUErRDtBQUVuRSxRQUFJO0FBQ0YsZ0JBQU0sa0JBQUsseUJBQXlCLEdBQUcsRUFBRSxTQUFTLEtBQUssQ0FBQztBQUFBLElBQzFELFFBQVE7QUFBQSxJQUVSO0FBRUEsd0JBQUkscURBQXFELE9BQU8sa0NBQWtDLENBQUMsUUFBUTtBQUMzRyxVQUFNLFdBQVcsS0FBSyxJQUFJLElBQUk7QUFDOUIsV0FBTyxLQUFLLElBQUksSUFBSSxVQUFVO0FBQzVCLFlBQU0sTUFBTSx3Q0FBd0M7QUFDcEQsVUFBSTtBQUNGLGtCQUFNLGtCQUFLLFNBQVMsRUFBRSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQzFDLDRCQUFJLHlDQUF5QztBQUM3QztBQUFBLE1BQ0YsU0FBUyxPQUFPO0FBQ2QsY0FBTSxVQUFVLGlCQUFpQixRQUFRLE1BQU0sVUFBVSxPQUFPLEtBQUs7QUFDckUsWUFBSSxDQUFDLFFBQVEsU0FBUyx1QkFBdUIsR0FBRztBQUM5QyxnQkFBTTtBQUFBLFFBQ1I7QUFDQSw0QkFBSSxxREFBcUQ7QUFBQSxNQUMzRDtBQUFBLElBQ0Y7QUFFQSxVQUFNLElBQUksTUFBTSxpQ0FBaUMsT0FBTyxrQ0FBa0MsQ0FBQyxLQUFLO0FBQUEsRUFDbEc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUFjLGVBQWUsV0FBa0M7QUFDN0QsVUFBTSxXQUFXO0FBRWpCLHdCQUFJLHdEQUF3RCxPQUFPLGtDQUFrQyxDQUFDLFFBQVE7QUFDOUcsVUFBTSxXQUFXLEtBQUssSUFBSSxJQUFJO0FBQzlCLFFBQUksaUJBQWlCO0FBQ3JCLFdBQU8sS0FBSyxJQUFJLElBQUksVUFBVTtBQUM1QixVQUFJO0FBQ0YsWUFBSSxDQUFDLGdCQUFnQjtBQUNuQixvQkFBTSx3REFBNEIsTUFBTSxTQUFTO0FBQ2pELDJCQUFpQjtBQUFBLFFBQ25CO0FBQ0EsY0FBTSxXQUFXLE1BQU0sS0FBSyxTQUFTLFVBQVUsRUFBRSxLQUFLLFVBQVUsQ0FBQztBQUNqRSxZQUFJLEtBQUssTUFBTSxRQUFRLE1BQU0sV0FBVztBQUN0Qyw4QkFBSSxpQ0FBaUM7QUFDckM7QUFBQSxRQUNGO0FBQUEsTUFDRixRQUFRO0FBRU4seUJBQWlCO0FBQUEsTUFDbkI7QUFDQSxZQUFNLE1BQU0sbUNBQW1DO0FBQUEsSUFDakQ7QUFDQSxVQUFNLElBQUksTUFBTSxZQUFZLFNBQVMsZ0NBQWdDLE9BQU8sa0NBQWtDLENBQUMsSUFBSTtBQUFBLEVBQ3JIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNBLE1BQWMsZ0JBQWdCLFdBQWtDO0FBQzlELHdCQUFJLDZDQUE2QztBQUNqRCxRQUFJO0FBQ0YsZ0JBQU0sa0JBQUssdUJBQXVCLEdBQUcsRUFBRSxTQUFTLEtBQUssQ0FBQztBQUFBLElBQ3hELFFBQVE7QUFBQSxJQUVSO0FBRUEsVUFBTSxNQUFNLGlDQUFpQztBQUU3QyxVQUFNLHFCQUFpQixtQ0FBVyxTQUFTO0FBQzNDLFVBQU0sVUFBVSxDQUFDLFlBQVksR0FBSSxpQkFBaUIsQ0FBQyxTQUFTLGNBQWMsRUFBRSxJQUFJLENBQUMsR0FBSSxRQUFRLFVBQVU7QUFDdkcsVUFBTSxLQUFLLDhCQUE4QixTQUFTLFNBQVM7QUFBQSxFQUM3RDtBQUNGO0FBVUEsZUFBc0IscUJBQXFCLFFBQW1EO0FBQzVGLFFBQU0sRUFBRSxXQUFXLGdCQUFnQixJQUFJLE9BQU8sUUFBUSxrQkFBa0I7QUFDeEUsTUFBSTtBQUNGLFVBQU0sU0FBUyxNQUFNLE9BQU8sU0FBUztBQUNyQyxRQUFJLFdBQVcsUUFBVztBQUN4QixZQUFNLGdCQUFnQixPQUFPLFlBQVksS0FBSyxVQUFVLEVBQUUsTUFBTSxhQUFhLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFBQSxJQUMzRixXQUFXLFdBQVcsTUFBTTtBQUMxQixZQUFNLGdCQUFnQixPQUFPLFlBQVksS0FBSyxVQUFVLEVBQUUsTUFBTSxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFBQSxJQUN0RixPQUFPO0FBRUwsWUFBTSxnQkFBZ0IsT0FBTyxZQUFZLEtBQUssVUFBVSxFQUFFLE9BQU8sT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDcEY7QUFBQSxFQUNGLFNBQVMsS0FBSztBQUNaLFVBQU0sZ0JBQWdCLE9BQU8sWUFBWSxLQUFLLFVBQVUsRUFBRSxNQUFNLFNBQVMsT0FBTyxPQUFPLGVBQWUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUFBLEVBQy9HO0FBQ0Y7QUFXQSxlQUFlLGlCQUFpQixRQUFpRDtBQUMvRSxRQUFNLFFBQWtCLENBQUM7QUFFekIsUUFBTSxLQUFLLGNBQWMsT0FBTyxRQUFRLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDbkQsUUFBTSxLQUFLLHdCQUF3QixPQUFPLEdBQUcsRUFBRTtBQUMvQyxRQUFNLEtBQUssa0JBQWtCLE9BQU8sVUFBVSxFQUFFO0FBQ2hELFFBQU0sS0FBSywyQkFBMkIsT0FBTyxVQUFVLEVBQUU7QUFFekQsTUFBSSxPQUFPLFlBQVk7QUFDckIsVUFBTSxLQUFLLGdCQUFnQixPQUFPLFdBQVcsYUFBYSxPQUFPLGdEQUEyQyxPQUFPLE9BQU8sV0FBVyxRQUFRLENBQUMsRUFBRTtBQUNoSixRQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2hDLFlBQU0sS0FBSyxrQkFBa0IsT0FBTyxXQUFXLFVBQVUsRUFBRTtBQUFBLElBQzdEO0FBQ0EsUUFBSSxPQUFPLFdBQVcsT0FBTyxLQUFLLEdBQUc7QUFDbkMsWUFBTSxLQUFLLGFBQWEsT0FBTyxXQUFXLE9BQU8sS0FBSyxDQUFDLEVBQUU7QUFBQSxJQUMzRDtBQUNBLFFBQUksT0FBTyxXQUFXLE9BQU8sS0FBSyxHQUFHO0FBQ25DLFlBQU0sS0FBSyxhQUFhLE9BQU8sV0FBVyxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQUEsSUFDM0Q7QUFDQSxRQUFJLENBQUMsT0FBTyxXQUFXLE9BQU8sS0FBSyxLQUFLLENBQUMsT0FBTyxXQUFXLE9BQU8sS0FBSyxHQUFHO0FBQ3hFLFlBQU0sS0FBSywwQkFBMEI7QUFBQSxJQUN2QztBQUFBLEVBQ0YsT0FBTztBQUNMLFVBQU0sS0FBSyw2RUFBd0U7QUFBQSxFQUNyRjtBQUVBLFFBQU0sS0FBSyxxQkFBcUI7QUFDaEMsUUFBTSxLQUFLLHVCQUF1QixNQUFNLGtCQUFrQixJQUFJLFFBQVEsSUFBSSxFQUFFO0FBQzVFLFFBQU0sS0FBSyx1Q0FBbUMscUNBQWEsSUFBSSxRQUFRLElBQUksRUFBRTtBQUM3RSxRQUFNLEtBQUssMkJBQXVCLDBDQUFrQixPQUFPLEdBQUcsSUFBSSxRQUFRLElBQUksRUFBRTtBQUNoRixRQUFNLEtBQUssNkJBQXlCLDJCQUFXLE9BQU8sVUFBVSxJQUFJLFFBQVEseUJBQXlCLEVBQUU7QUFDdkcsUUFBTSxLQUFLLDZCQUF5QiwyQkFBVyxPQUFPLFVBQVUsSUFBSSxRQUFRLElBQUksRUFBRTtBQUVsRixRQUFNLHVCQUFtQiw0Q0FBb0I7QUFDN0MsTUFBSSxpQkFBaUIsV0FBVyxHQUFHO0FBQ2pDLFVBQU0sS0FBSyw2QkFBNkI7QUFBQSxFQUMxQyxPQUFPO0FBQ0wsVUFBTSxLQUFLLHNCQUFzQjtBQUNqQyxlQUFXLFNBQVMsa0JBQWtCO0FBQ3BDLFlBQU0sS0FBSyxTQUFTLE1BQU0sSUFBSSxXQUFXLE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRztBQUFBLElBQ2hFO0FBQUEsRUFDRjtBQUVBLFFBQU0sS0FBSztBQUFBLEVBQXNCLE9BQU8sYUFBYSxFQUFFO0FBRXZELFNBQU8sTUFBTSxLQUFLLElBQUk7QUFDeEI7QUFZQSxTQUFTLGdCQUFnQixZQUFvQixZQUE0QjtBQUN2RSxRQUFNLFlBQVEsd0RBQTRCLG9CQUFvQjtBQUM5RCxRQUFNLHdCQUFvQix3REFBNEIscUNBQWM7QUFDcEUsUUFBTSxpQkFBaUIsS0FBSyxVQUFVLFdBQVcsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNwRSxTQUFPLElBQUksS0FBSyw4QkFBOEIsVUFBVSxrQkFBa0IsY0FBYyxxQkFBcUIsaUJBQWlCO0FBQ2hJO0FBUUEsU0FBUyxNQUFNLElBQTJCO0FBQ3hDLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixlQUFXLFNBQVMsRUFBRTtBQUFBLEVBQ3hCLENBQUM7QUFDSDtBQVVBLGVBQWUsa0JBQWtCLFlBQW1DO0FBQ2xFLFFBQU0sYUFBYSxPQUFPLFFBQVEsa0JBQWtCO0FBRXBELE1BQUk7QUFDRixVQUFNLFdBQVcsT0FBTyxVQUFVO0FBQUEsRUFDcEMsU0FBUyxPQUFPO0FBQ2QsVUFBTSxJQUFJLE1BQU0sMEJBQTBCLFVBQVUsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUFBLEVBQ25FO0FBRUEsUUFBTSxTQUFTLE1BQU0sV0FBVyxTQUFTLFlBQVksT0FBTztBQUU1RCxVQUFRLE1BQU0sYUFBYSxVQUFVO0FBQUEsRUFBTSxNQUFNLEVBQUU7QUFFbkQsTUFBSTtBQUNKLE1BQUk7QUFFRixTQUFLLElBQUksU0FBUyxVQUFVLE1BQU0sRUFBRTtBQUFBLEVBQ3RDLFNBQVMsT0FBTztBQUNkLFVBQU0sSUFBSSxNQUFNLGlCQUFpQixVQUFVLElBQUksRUFBRSxNQUFNLENBQUM7QUFBQSxFQUMxRDtBQUVBLE1BQUk7QUFDRixVQUFNLEdBQUc7QUFBQSxFQUNYLFNBQVMsT0FBTztBQUNkLFVBQU0sSUFBSSxNQUFNLG1CQUFtQixVQUFVLElBQUksRUFBRSxNQUFNLENBQUM7QUFBQSxFQUM1RDtBQUNGO0FBT0EsU0FBUyx5QkFBaUM7QUFDeEMsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFNBQVM7QUFDaEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQ1Q7QUFPQSxTQUFTLDJCQUFtQztBQUMxQyxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsU0FBUztBQUNoQyxVQUFNLGVBQWUsb0JBQUFBLFFBQVEsSUFBSSxjQUFjLEtBQUs7QUFDcEQsV0FBTyxhQUFhLFlBQVk7QUFBQSxFQUNsQztBQUVBLE1BQUksb0JBQUFBLFFBQVEsYUFBYSxVQUFVO0FBQ2pDLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUNUO0FBUUEsU0FBUyxrQkFBa0IsS0FBcUI7QUFDOUMsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFNBQVM7QUFDaEMsV0FBTyxhQUFhLEdBQUc7QUFBQSxFQUN6QjtBQUVBLE1BQUksb0JBQUFBLFFBQVEsYUFBYSxVQUFVO0FBQ2pDLFdBQU8sU0FBUyxHQUFHO0FBQUEsRUFDckI7QUFFQSxTQUFPLGFBQWEsR0FBRztBQUN6QjtBQU9BLGVBQWUsb0JBQXNDO0FBQ25ELFFBQU0sVUFBVSxvQkFBQUEsUUFBUSxhQUFhLFVBQ2pDLGlEQUNBO0FBQ0osTUFBSTtBQUNGLFVBQU0sU0FBUyxVQUFNLGtCQUFLLFNBQVMsRUFBRSxTQUFTLEtBQUssQ0FBQztBQUNwRCxRQUFJLG9CQUFBQSxRQUFRLGFBQWEsU0FBUztBQUNoQyxhQUFPLE9BQU8sU0FBUyxjQUFjO0FBQUEsSUFDdkM7QUFDQSxXQUFPLE9BQU8sS0FBSyxFQUFFLFNBQVM7QUFBQSxFQUNoQyxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQVdBLGVBQWUsZ0JBQWdCLFdBQWtDO0FBQy9ELFFBQU0sY0FBVSxtQ0FBVyxTQUFTO0FBQ3BDLE1BQUksQ0FBQyxTQUFTO0FBQ1osVUFBTSxJQUFJLE1BQU0sd0VBQXdFLFNBQVMsRUFBRTtBQUFBLEVBQ3JHO0FBQ0EsUUFBTSxNQUFNLHlCQUF5QixtQkFBbUIsT0FBTyxDQUFDO0FBQ2hFLFFBQU0sVUFBVSxrQkFBa0IsR0FBRztBQUNyQyxzQkFBSSwwQ0FBMEMsR0FBRyxFQUFFO0FBQ25ELE1BQUk7QUFDRixjQUFNLGtCQUFLLFNBQVMsRUFBRSxTQUFTLEtBQUssQ0FBQztBQUFBLEVBQ3ZDLFNBQVMsT0FBZ0I7QUFDdkIsd0JBQUksb0RBQWdELHVDQUFlLEtBQUssQ0FBQyxFQUFFO0FBQUEsRUFDN0U7QUFDRjsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
|
|
508
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgdW5saW5rLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBFeGVjUmVzdWx0IH0gZnJvbSAnLi9leGVjLmNqcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLmNqcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9uLWV4cHJlc3Npb24uY2pzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLmNqcyc7XG5pbXBvcnQgeyBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQgfSBmcm9tICcuL25hbWVzcGFjZS1ib290c3RyYXAuY2pzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL25vb3AuY2pzJztcbmltcG9ydCB7XG4gIGVuYWJsZUNsaUluQ29uZmlnLFxuICBnZXRBbnlSZWdpc3RlcmVkVmF1bHRQYXRoLFxuICBnZXRSZWdpc3RlcmVkVmF1bHRzLFxuICBnZXRWYXVsdElkLFxuICBpc0NsaUVuYWJsZWQsXG4gIGlzVmF1bHRPcGVuLFxuICBpc1ZhdWx0UmVnaXN0ZXJlZCxcbiAgcmVnaXN0ZXJWYXVsdEluQ29uZmlnLFxuICByZW1vdmVWYXVsdEZyb21Db25maWdcbn0gZnJvbSAnLi9vYnNpZGlhbi1jb25maWcuY2pzJztcbmltcG9ydCB7IHNlcmlhbGl6ZUVycm9yIH0gZnJvbSAnLi9zZXJpYWxpemUtZXJyb3IuY2pzJztcblxuaW50ZXJmYWNlIEludm9rZUFuZFdyaXRlUmVzdWx0UGFyYW1zIHtcbiAgZXZhbHVhdGUoKTogUHJvbWlzZTx1bmtub3duPjtcbiAgcmVzdWx0UGF0aDogc3RyaW5nO1xuICBzZXJpYWxpemVFcnJvcihlcnJvcjogdW5rbm93bik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIGVudmVsb3BlIHdyaXR0ZW4gYnkgdGhlIHRlbXBvcmFyeSBzY3JpcHQgZmlsZS5cbiAqXG4gKiAtIGB7IHZhbHVlOiBzdHJpbmcsIHR5cGU6ICdlcnJvcicgfWAgXHUyMDE0IHRoZSBleHByZXNzaW9uIHRocmV3OyBgdmFsdWVgIGlzIHRoZSBlcnJvciBtZXNzYWdlLlxuICogLSBgeyB2YWx1ZTogJycsIHR5cGU6ICdudWxsJyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gcmV0dXJuZWQgYG51bGxgLlxuICogLSBgeyB2YWx1ZTogJycsIHR5cGU6ICd1bmRlZmluZWQnIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBgdW5kZWZpbmVkYC5cbiAqIC0gYHsgdmFsdWU6IHN0cmluZyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gcmV0dXJuZWQgYSBzdHJpbmcgdmFsdWUgKG5vIGB0eXBlYCBmaWVsZCkuXG4gKi9cbnR5cGUgU2NyaXB0UmVzdWx0RW52ZWxvcGUgPVxuICB8IHsgdHlwZTogJ2Vycm9yJyB8ICdudWxsJyB8ICd1bmRlZmluZWQnOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHZhbHVlOiBzdHJpbmcgfTtcblxuY29uc3QgVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4gPSAndW5hYmxlIHRvIGZpbmQgT2JzaWRpYW4nO1xuY29uc3QgQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5jb25zdCBWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX0NMT1NFX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBWQVVMVF9FVkFMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTAwMDA7XG5cbmludGVyZmFjZSBCdWlsZERpYWdub3N0aWNzUGFyYW1zIHtcbiAgY29tbWFuZDogc3RyaW5nW107XG4gIGN3ZDogc3RyaW5nO1xuICBleGVjUmVzdWx0OiBFeGVjUmVzdWx0IHwgdW5kZWZpbmVkO1xuICByZXN1bHRQYXRoOiBzdHJpbmc7XG4gIHNjcmlwdENvbnRlbnQ6IHN0cmluZztcbiAgc2NyaXB0UGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRyYW5zcG9ydCB0aGF0IGNvbW11bmljYXRlcyB3aXRoIERlc2t0b3AgT2JzaWRpYW4gdmlhIHRoZSBgb2JzaWRpYW4gZXZhbGAgQ0xJIGNvbW1hbmRcbiAqIGFuZCBtYW5hZ2VzIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5leHBvcnQgY2xhc3MgRGVza3RvcENsaVRyYW5zcG9ydCBpbXBsZW1lbnRzIE9ic2lkaWFuVHJhbnNwb3J0IHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgdHJhbnNwb3J0IGlzIGZvciBhIG1vYmlsZSBwbGF0Zm9ybS4gQWx3YXlzIGBmYWxzZWAgZm9yIHRoaXMgdHJhbnNwb3J0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBpbnNpZGUgT2JzaWRpYW4gdmlhIGBvYnNpZGlhbiBldmFsYC5cbiAgICpcbiAgICogV3JpdGVzIHRoZSBleHByZXNzaW9uIHRvIGEgdGVtcG9yYXJ5IGAuY2pzYCBmaWxlIGFuZCBleGVjdXRlcyBhIHRpbnlcbiAgICogYHJlcXVpcmUoKS5pbnZva2UoKWAgY2FsbCB2aWEgdGhlIENMSS4gVGhlIHJlc3VsdCBpcyB3cml0dGVuIHRvIGFcbiAgICogYC5yZXN1bHQuanNvbmAgZmlsZSBieSB0aGUgc2NyaXB0LCBhdm9pZGluZyBDTEkgc3Rkb3V0IHNpemUgbGltaXRzXG4gICAqIGFuZCBJUEMgYnVmZmVyIGlzc3Vlcy5cbiAgICpcbiAgICogSGFuZGxlcyBhdXRvLXN0YXJ0OiBpZiBPYnNpZGlhbiBpcyBub3QgcnVubmluZywgbGF1bmNoZXMgaXQgdmlhIFVSSSBwcm90b2NvbFxuICAgKiBhbmQgcmV0cmllcyB1bnRpbCBpdCBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgSmF2YVNjcmlwdCBleHByZXNzaW9uIHRvIGV2YWx1YXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcmVzdWx0IHN0cmluZyAodHJhbnNwb3J0LXNwZWNpZmljIHByZWZpeGVzIHN0cmlwcGVkKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBldmFsdWF0ZShleHByZXNzaW9uOiBzdHJpbmcsIG9wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gICAgY29uc3Qgc2NyaXB0SWQgPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICAgIGNvbnN0IHNjcmlwdERpciA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IGpvaW4oc2NyaXB0RGlyLCBgJHtzY3JpcHRJZH0uanNgKTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5yZXN1bHQuanNvbmApO1xuXG4gICAgYXdhaXQgbWtkaXIoc2NyaXB0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHNjcmlwdENvbnRlbnQgPSBidWlsZFNjcmlwdEZpbGUoZXhwcmVzc2lvbiwgcmVzdWx0UGF0aCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHNjcmlwdFBhdGgsIHNjcmlwdENvbnRlbnQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhZmVTY3JpcHRQYXRoID0gc2NyaXB0UGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICBjb25zdCBjbGlFeHByID0gYCgke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhleGVjdXRlU2NyaXB0RmlsZSl9KSgke0pTT04uc3RyaW5naWZ5KHNhZmVTY3JpcHRQYXRoKX0pYDtcbiAgICAgIGNvbnN0IHZhdWx0SWQgPSBnZXRWYXVsdElkKG9wdGlvbnMuY3dkKTtcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBbJ29ic2lkaWFuJywgLi4uKHZhdWx0SWQgPyBbYHZhdWx0PSR7dmF1bHRJZH1gXSA6IFtdKSwgJ2V2YWwnLCAnLS1hbGxvdy1mb2N1cy1zdGVhbCcsIGBjb2RlPSR7Y2xpRXhwcn1gXTtcblxuICAgICAgbGV0IGV4ZWNSZXN1bHQ6IEV4ZWNSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjUmVzdWx0ID0gYXdhaXQgZXhlYyhjb21tYW5kLCB7XG4gICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICBpc1F1aWV0OiB0cnVlLFxuICAgICAgICAgIHNob3VsZEluY2x1ZGVEZXRhaWxzOiB0cnVlLFxuICAgICAgICAgIC4uLihvcHRpb25zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9KVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFVOQUJMRV9UT19GSU5EX09CU0lESUFOKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlT2JzaWRpYW5SdW5uaW5nQW5kUmV0cnkoY29tbWFuZCwgb3B0aW9ucy5jd2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhpc3RzU3luYyhyZXN1bHRQYXRoKSkge1xuICAgICAgICBjb25zdCBkaWFnbm9zdGljcyA9IGF3YWl0IGJ1aWxkRGlhZ25vc3RpY3Moe1xuICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICBleGVjUmVzdWx0LFxuICAgICAgICAgIHJlc3VsdFBhdGgsXG4gICAgICAgICAgc2NyaXB0Q29udGVudCxcbiAgICAgICAgICBzY3JpcHRQYXRoXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmlwdCBkaWQgbm90IGV4ZWN1dGUgZm9yIHBhdGg6ICR7b3B0aW9ucy5jd2R9XFxuJHtkaWFnbm9zdGljc31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0U3RyID0gYXdhaXQgcmVhZEZpbGUocmVzdWx0UGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBlbnZlbG9wZSA9IEpTT04ucGFyc2UocmVzdWx0U3RyKSBhcyBTY3JpcHRSZXN1bHRFbnZlbG9wZTtcblxuICAgICAgaWYgKCd0eXBlJyBpbiBlbnZlbG9wZSkge1xuICAgICAgICBpZiAoZW52ZWxvcGUudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGVycm9yIGluIE9ic2lkaWFuIGZvciBwYXRoOiAke29wdGlvbnMuY3dkfTogJHtlbnZlbG9wZS52YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnZlbG9wZS52YWx1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdW5saW5rKHNjcmlwdFBhdGgpLmNhdGNoKG5vb3ApO1xuICAgICAgYXdhaXQgdW5saW5rKHJlc3VsdFBhdGgpLmNhdGNoKG5vb3ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIENMSS1zcGVjaWZpYyBwcmVmbGlnaHQgY2hlY2tzLlxuICAgKlxuICAgKiBWZXJpZmllcyB0aGF0IHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkLCBDTEkgaXMgZW5hYmxlZCBpbiBPYnNpZGlhbiBzZXR0aW5ncyxcbiAgICogYW5kIHRoZSBgb2JzaWRpYW5gIENMSSBiaW5hcnkgaXMgYXZhaWxhYmxlIGluIFBBVEguIElmIHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkXG4gICAqIGJ1dCBub3Qgb3Blbiwgb3BlbnMgaXQgdmlhIFVSSSBwcm90b2NvbCBhbmQgcG9sbHMgdW50aWwgaXQgaXMgcmVhZHkuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZWZsaWdodENoZWNrKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUnVubmluZyBwcmVmbGlnaHQgY2hlY2sgZm9yIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBpZiAoIWlzVmF1bHRSZWdpc3RlcmVkKHZhdWx0UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFZhdWx0IGlzIG5vdCByZWdpc3RlcmVkIGluIE9ic2lkaWFuOiAke3ZhdWx0UGF0aH0uIFJlZ2lzdGVyIHRoZSB2YXVsdCBmaXJzdCB3aXRoIHJlZ2lzdGVyVmF1bHQoKSBvciBUZW1wVmF1bHQucmVnaXN0ZXIoKS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNDbGlFbmFibGVkKCkpIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIENMSSBpcyBkaXNhYmxlZCBpbiBvYnNpZGlhbi5qc29uLiBFbmFibGluZyBhbmQgcmVzdGFydGluZyBPYnNpZGlhbi4uLicpO1xuICAgICAgZW5hYmxlQ2xpSW5Db25maWcoKTtcbiAgICAgIGF3YWl0IHRoaXMucmVzdGFydE9ic2lkaWFuKHZhdWx0UGF0aCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hc3NlcnRDbGlBdmFpbGFibGUoKTtcblxuICAgIGlmICghaXNWYXVsdE9wZW4odmF1bHRQYXRoKSkge1xuICAgICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVmF1bHQgaXMgcmVnaXN0ZXJlZCBidXQgbm90IG9wZW46ICR7dmF1bHRQYXRofS4gT3BlbmluZyB2aWEgVVJJLi4uYCk7XG4gICAgICBhd2FpdCBvcGVuVmF1bHRWaWFVcmkodmF1bHRQYXRoKTtcbiAgICAgIGF3YWl0IHRoaXMucG9sbFZhdWx0UmVhZHkodmF1bHRQYXRoKTtcbiAgICB9XG5cbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBQcmVmbGlnaHQgY2hlY2sgcGFzc2VkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBFbGVjdHJvbiBJUEMuXG4gICAqXG4gICAqIFVzZXMgYHZhdWx0LW9wZW5gIElQQyB0byByZWdpc3RlciBhbmQgb3BlbiB0aGUgdmF1bHQsIHRoZW4gcG9sbHMgdW50aWxcbiAgICogdGhlIHZhdWx0J3MgQ0xJIGlzIHJlYWR5IGFuZCBgZ2V0QmFzZVBhdGgoKWAgbWF0Y2hlcyBgdmF1bHRQYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0UGF0aCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcblxuICAgIGlmIChleGlzdGluZ1ZhdWx0UGF0aCkge1xuICAgICAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRoaXMsIGV4aXN0aW5nVmF1bHRQYXRoKTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyRXhwciA9IGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy5pcGNTZW5kU3luYygke0pTT04uc3RyaW5naWZ5KHsgYXJnczogW3ZhdWx0UGF0aCwgZmFsc2VdLCBjaGFubmVsOiAndmF1bHQtb3BlbicgfSl9KWA7XG4gICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlZ2lzdGVyRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRQYXRoIH0pO1xuICAgICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoLCBleGlzdGluZ1ZhdWx0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE5vIGV4aXN0aW5nIHZhdWx0IHJlZ2lzdGVyZWQuIFdyaXRpbmcgdmF1bHQgZW50cnkgZGlyZWN0bHkgdG8gb2JzaWRpYW4uanNvbi4uLicpO1xuICAgICAgcmVnaXN0ZXJWYXVsdEluQ29uZmlnKHZhdWx0UGF0aCk7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCBlbnRyeSB3cml0dGVuLiBPcGVuaW5nIHZhdWx0IHZpYSBVUkkgcHJvdG9jb2wuLi4nKTtcbiAgICAgIGF3YWl0IG9wZW5WYXVsdFZpYVVyaSh2YXVsdFBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5wb2xsVmF1bHRSZWFkeSh2YXVsdFBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoLCB2YXVsdFBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5kaXNtaXNzVHJ1c3REaWFsb2codmF1bHRQYXRoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnBvbGxWYXVsdFJlYWR5KHZhdWx0UGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgYSB2YXVsdCBmcm9tIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBTY2hlZHVsZXMgdGhlIHZhdWx0IHdpbmRvdyB0byBjbG9zZSwgd2FpdHMsIHRoZW4gcmVtb3ZlcyB0aGUgdmF1bHRcbiAgICogZnJvbSB0aGUgcmVnaXN0cnkgdmlhIGB2YXVsdC1yZW1vdmVgIElQQy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5yZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVW5yZWdpc3RlcmluZyB2YXVsdDogY2xvc2luZyB3aW5kb3cgZm9yICR7dmF1bHRQYXRofS4uLmApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQodGhpcywgdmF1bHRQYXRoKTtcbiAgICAgIGNvbnN0IGRlc3Ryb3lFeHByID0gJ3dpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLmRlc3Ryb3lDdXJyZW50V2luZG93KCknO1xuICAgICAgYXdhaXQgdGhpcy5ldmFsdWF0ZShkZXN0cm95RXhwciwgeyBjd2Q6IHZhdWx0UGF0aCwgdGltZW91dEluTWlsbGlzZWNvbmRzOiBWQVVMVF9FVkFMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0pO1xuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gV2luZG93IGRlc3Ryb3kgY29tbWFuZCBzZW50LicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBXaW5kb3cgZGVzdHJveSBmYWlsZWQgKG5vbi1mYXRhbCk6ICR7c2VyaWFsaXplRXJyb3IoZXJyb3IpfWApO1xuICAgIH1cblxuICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFdhaXRpbmcgZm9yIHdpbmRvdyB0byBjbG9zZS4uLicpO1xuICAgIGF3YWl0IGRlbGF5KFZBVUxUX0NMT1NFX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBSZW1vdmluZyB2YXVsdCBmcm9tIHJlZ2lzdHJ5Li4uJyk7XG4gICAgY29uc3QgZXhpc3RpbmdWYXVsdEZvclJlbW92YWwgPSBnZXRBbnlSZWdpc3RlcmVkVmF1bHRQYXRoKCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCkge1xuICAgICAgICBhd2FpdCBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQodGhpcywgZXhpc3RpbmdWYXVsdEZvclJlbW92YWwpO1xuICAgICAgICBjb25zdCByZW1vdmVFeHByID0gYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLmlwY1NlbmRTeW5jKCR7SlNPTi5zdHJpbmdpZnkoeyBhcmdzOiBbdmF1bHRQYXRoXSwgY2hhbm5lbDogJ3ZhdWx0LXJlbW92ZScgfSl9KWA7XG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUocmVtb3ZlRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRGb3JSZW1vdmFsLCB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBObyBleGlzdGluZyB2YXVsdCB0byB0YXJnZXQgZm9yIHJlbW92YWwgSVBDIFx1MjAxNCByZW1vdmluZyBkaXJlY3RseSBmcm9tIG9ic2lkaWFuLmpzb24uJyk7XG4gICAgICAgIHJlbW92ZVZhdWx0RnJvbUNvbmZpZyh2YXVsdFBhdGgpO1xuICAgICAgfVxuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gVmF1bHQgcmVtb3ZlZCBmcm9tIHJlZ2lzdHJ5LicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBWYXVsdCByZWdpc3RyeSByZW1vdmFsIGZhaWxlZCAobm9uLWZhdGFsKTogJHtzZXJpYWxpemVFcnJvcihlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBPYnNpZGlhbiBDTEkgYmluYXJ5IGlzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtIFBBVEguXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFzc2VydENsaUF2YWlsYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21tYW5kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICd3aGVyZS5leGUgb2JzaWRpYW4nIDogJ3doaWNoIG9ic2lkaWFuJztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhjb21tYW5kLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ic2lkaWFuIENMSSBpcyBub3QgYXZhaWxhYmxlLiBFbnN1cmUgT2JzaWRpYW4gaXMgaW5zdGFsbGVkIGFuZCBpdHMgQ0xJIGlzIGluIHlvdXIgUEFUSC4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHRoZSBcIkRvIHlvdSB0cnVzdCB0aGUgYXV0aG9yIG9mIHRoaXMgdmF1bHQ/XCIgZGlhbG9nIGlmIHByZXNlbnQuXG4gICAqXG4gICAqIENsaWNrcyB0aGUgXCJUcnVzdCBhdXRob3IgYW5kIGVuYWJsZSBwbHVnaW5zXCIgYnV0dG9uIChgLm1vZC1jdGFgKSBpbnNpZGUgYW55XG4gICAqIG1vZGFsIHdob3NlIHRleHQgaW5jbHVkZXMgXCJEbyB5b3UgdHJ1c3QgdGhlIGF1dGhvclwiLiBUaGlzIGlzIG5lZWRlZCB3aGVuIGFcbiAgICogdmF1bHQgd2l0aCBjb21tdW5pdHkgcGx1Z2lucyBpcyBvcGVuZWQgd2l0aG91dCBhIHByaW9yIGBlbmFibGUtcGx1Z2luLTxpZD5gXG4gICAqIGVudHJ5IGluIGxvY2FsU3RvcmFnZSAoZS5nLiwgdGhlIHZlcnkgZmlyc3QgdmF1bHQgcmVnaXN0ZXJlZCB2aWEgY29uZmlnIGZpbGUpLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIHZhdWx0IHBhdGggdG8gZXZhbHVhdGUgaW4uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRpc21pc3NUcnVzdERpYWxvZyh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCB2YXVsdFBhdGgpO1xuICAgIGNvbnN0IGRpc21pc3NFeHByID0gYChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBtb2RhbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubW9kYWwtY29udGFpbmVyJyk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobW9kYWxzW2ldLnRleHRDb250ZW50LmluY2x1ZGVzKCdEbyB5b3UgdHJ1c3QgdGhlIGF1dGhvcicpKSB7XG4gICAgICAgICAgdmFyIGJ0biA9IG1vZGFsc1tpXS5xdWVyeVNlbGVjdG9yKCcubW9kLWN0YScpO1xuICAgICAgICAgIGlmIChidG4pIHsgYnRuLmNsaWNrKCk7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KSgpYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV2YWx1YXRlKGRpc21pc3NFeHByLCB7IGN3ZDogdmF1bHRQYXRoIH0pO1xuICAgIGlmIChyZXN1bHQgPT09ICd0cnVlJykge1xuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gRGlzbWlzc2VkIFwiRG8geW91IHRydXN0IHRoZSBhdXRob3JcIiBkaWFsb2cuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYGVuYWJsZS1wbHVnaW4tPHZhdWx0SWQ+YCBpbiBPYnNpZGlhbidzIGxvY2FsU3RvcmFnZSB0byBwcmV2ZW50XG4gICAqIHRoZSBcIkRvIHlvdSB0cnVzdCB0aGUgYXV0aG9yIG9mIHRoaXMgdmF1bHQ/XCIgZGlhbG9nIGZyb20gYXBwZWFyaW5nXG4gICAqIHdoZW4gYSB2YXVsdCB3aXRoIGNvbW11bml0eSBwbHVnaW5zIGlzIG9wZW5lZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBgdmF1bHQtb3BlbmAgSVBDIChzbyB0aGUgdmF1bHQgSUQgZXhpc3RzIGluXG4gICAqIGBvYnNpZGlhbi5qc29uYCkgYW5kIGJlZm9yZSB0aGUgbmV3IHZhdWx0IHdpbmRvdyBmaW5pc2hlcyBsb2FkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICogQHBhcmFtIGV2YWxUYXJnZXRWYXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCB0byB1c2UgYXMgZXZhbCB0YXJnZXQgKGFuIGV4aXN0aW5nLCBsb2FkZWQgdmF1bHQpLlxuICAgKiAgIGxvY2FsU3RvcmFnZSBpcyBzaGFyZWQgYWNyb3NzIGFsbCBPYnNpZGlhbiB3aW5kb3dzIChzYW1lIEVsZWN0cm9uIG9yaWdpbiksIHNvIHRoZVxuICAgKiAgIGBsb2NhbFN0b3JhZ2Uuc2V0SXRlbWAgY2FsbCBjYW4gcnVuIGluIGFueSBsb2FkZWQgdmF1bHQgd2luZG93LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoOiBzdHJpbmcsIGV2YWxUYXJnZXRWYXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhdWx0SWQgPSBnZXRWYXVsdElkKHZhdWx0UGF0aCk7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBDb3VsZCBub3QgZmluZCB2YXVsdCBJRCBcdTIwMTQgc2tpcHBpbmcgbG9jYWxTdG9yYWdlIHRydXN0IGZsYWcuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRoaXMsIGV2YWxUYXJnZXRWYXVsdFBhdGgpO1xuICAgIGNvbnN0IGVuYWJsZUV4cHIgPSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmcuc2V0TG9jYWxTdG9yYWdlSXRlbSgke0pTT04uc3RyaW5naWZ5KHsga2V5OiBgZW5hYmxlLXBsdWdpbi0ke3ZhdWx0SWR9YCwgdmFsdWU6ICd0cnVlJyB9KX0pYDtcbiAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKGVuYWJsZUV4cHIsIHsgY3dkOiBldmFsVGFyZ2V0VmF1bHRQYXRoIH0pO1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFNldCBlbmFibGUtcGx1Z2luLSR7dmF1bHRJZH0gaW4gbG9jYWxTdG9yYWdlLmApO1xuICB9XG5cbiAgLyoqXG4gICAqIExhdW5jaGVzIE9ic2lkaWFuIGJpbmFyeSBhbmQgcmV0cmllcyB0aGUgZXZhbCB1bnRpbCBpdCByZXNwb25kcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgQ0xJIGNvbW1hbmQgYXJyYXkgdG8gcmV0cnkuXG4gICAqIEBwYXJhbSBjd2QgLSBUaGUgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZU9ic2lkaWFuUnVubmluZ0FuZFJldHJ5KGNvbW1hbmQ6IHN0cmluZ1tdLCBjd2Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE9ic2lkaWFuIGlzIG5vdCBydW5uaW5nLiBTdGFydGluZyBPYnNpZGlhbi4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoZ2V0T2JzaWRpYW5MYXVuY2hDb21tYW5kKCksIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFRoZSBsYXVuY2ggY29tbWFuZCBtYXkgZmFpbCBvbiBzb21lIHN5c3RlbXMgXHUyMDE0IHdlJ2xsIHN0aWxsIHRyeSBwb2xsaW5nLlxuICAgIH1cblxuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFBvbGxpbmcgZm9yIE9ic2lkaWFuIENMSSAodGltZW91dD0ke1N0cmluZyhBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcykuLi5gKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGF3YWl0IGRlbGF5KEFVVE9fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXhlYyhjb21tYW5kLCB7IGN3ZCwgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gQ0xJIHJlc3BvbmRlZC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgaWYgKCFtZXNzYWdlLmluY2x1ZGVzKFVOQUJMRV9UT19GSU5EX09CU0lESUFOKSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE9ic2lkaWFuIG5vdCByZWFkeSB5ZXQsIHJldHJ5aW5nLi4uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBPYnNpZGlhbiBkaWQgbm90IHN0YXJ0IHdpdGhpbiAke1N0cmluZyhBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xscyB1bnRpbCB0aGUgdmF1bHQgaXMgcmVhZHkgYW5kIHJlc3BvbmRpbmcgdG8gZXZhbCBjYWxscy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBvbGxWYXVsdFJlYWR5KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcG9sbEV4cHIgPSAnd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcucG9sbFZhdWx0QmFzZVBhdGgoKSc7XG5cbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBQb2xsaW5nIGZvciB2YXVsdCByZWFkaW5lc3MgKHRpbWVvdXQ9JHtTdHJpbmcoVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICBsZXQgaXNCb290c3RyYXBwZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWlzQm9vdHN0cmFwcGVkKSB7XG4gICAgICAgICAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRoaXMsIHZhdWx0UGF0aCk7XG4gICAgICAgICAgaXNCb290c3RyYXBwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gYXdhaXQgdGhpcy5ldmFsdWF0ZShwb2xsRXhwciwgeyBjd2Q6IHZhdWx0UGF0aCB9KTtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UoYmFzZVBhdGgpID09PSB2YXVsdFBhdGgpIHtcbiAgICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCBpcyByZWFkeS4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBWYXVsdCBub3QgcmVhZHkgeWV0IFx1MjAxNCBuYW1lc3BhY2UgbWF5IG5vdCBiZSBib290c3RyYXBwZWQgeWV0IGVpdGhlci5cbiAgICAgICAgaXNCb290c3RyYXBwZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGRlbGF5KFZBVUxUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBhdCAke3ZhdWx0UGF0aH0gZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zYCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdGFydHMgT2JzaWRpYW4gYnkga2lsbGluZyB0aGUgcnVubmluZyBwcm9jZXNzIGFuZCByZWxhdW5jaGluZyBpdC5cbiAgICpcbiAgICogVXNlZCB3aGVuIGEgY29uZmlnIGNoYW5nZSAobGlrZSBlbmFibGluZyBDTEkpIHJlcXVpcmVzIGEgcmVzdGFydCB0byB0YWtlIGVmZmVjdC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSB2YXVsdCBwYXRoIHRvIHVzZSBmb3IgcG9sbGluZyBhZnRlciByZXN0YXJ0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0T2JzaWRpYW4odmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBLaWxsaW5nIE9ic2lkaWFuIHByb2Nlc3MuLi4nKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhnZXRLaWxsT2JzaWRpYW5Db21tYW5kKCksIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFByb2Nlc3MgbWF5IG5vdCBiZSBydW5uaW5nIFx1MjAxNCB0aGF0J3MgZmluZS5cbiAgICB9XG5cbiAgICBhd2FpdCBkZWxheShWQVVMVF9DTE9TRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgY29uc3QgcmVzdGFydFZhdWx0SWQgPSBnZXRWYXVsdElkKHZhdWx0UGF0aCk7XG4gICAgY29uc3QgY29tbWFuZCA9IFsnb2JzaWRpYW4nLCAuLi4ocmVzdGFydFZhdWx0SWQgPyBbYHZhdWx0PSR7cmVzdGFydFZhdWx0SWR9YF0gOiBbXSksICdldmFsJywgJ2NvZGU9XCIxXCInXTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZU9ic2lkaWFuUnVubmluZ0FuZFJldHJ5KGNvbW1hbmQsIHZhdWx0UGF0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgYW4gZXhwcmVzc2lvbiwgd3JpdGVzIHRoZSByZXN1bHQgdG8gYSBKU09OIGZpbGUuXG4gKlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgaW52b2NhdGlvbiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52b2tlQW5kV3JpdGVSZXN1bHQocGFyYW1zOiBJbnZva2VBbmRXcml0ZVJlc3VsdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHdyaXRlRmlsZTogd3JpdGVSZXN1bHRGaWxlIH0gPSB3aW5kb3cucmVxdWlyZSgnbm9kZTpmcy9wcm9taXNlcycpIGFzIHR5cGVvZiBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXJhbXMuZXZhbHVhdGUoKTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGF3YWl0IHdyaXRlUmVzdWx0RmlsZShwYXJhbXMucmVzdWx0UGF0aCwgSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAndW5kZWZpbmVkJywgdmFsdWU6ICcnIH0pKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgYXdhaXQgd3JpdGVSZXN1bHRGaWxlKHBhcmFtcy5yZXN1bHRQYXRoLCBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdudWxsJywgdmFsdWU6ICcnIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1iYXNlLXRvLXN0cmluZyAtLSBJbnRlbnRpb25hbDogcmVzdWx0IGlzIGFuIGFyYml0cmFyeSB2YWx1ZSBmcm9tIHRoZSBldmFsdWF0ZWQgZXhwcmVzc2lvbi5cbiAgICAgIGF3YWl0IHdyaXRlUmVzdWx0RmlsZShwYXJhbXMucmVzdWx0UGF0aCwgSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZTogU3RyaW5nKHJlc3VsdCkgfSkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYXdhaXQgd3JpdGVSZXN1bHRGaWxlKHBhcmFtcy5yZXN1bHRQYXRoLCBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdlcnJvcicsIHZhbHVlOiBwYXJhbXMuc2VyaWFsaXplRXJyb3IoZXJyKSB9KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBkZXRhaWxlZCBkaWFnbm9zdGljIHN0cmluZyBmb3IgdGhlIFwiU2NyaXB0IGRpZCBub3QgZXhlY3V0ZVwiIGVycm9yLlxuICpcbiAqIFBlcmZvcm1zIGxpdmUgZW52aXJvbm1lbnQgY2hlY2tzIChwcm9jZXNzIGxpc3QsIHZhdWx0IHJlZ2lzdHJ5LCBDTEkgY29uZmlnKVxuICogYW5kIGluY2x1ZGVzIHRoZSBjb21tYW5kLCBleGVjIG91dHB1dCwgYW5kIHNjcmlwdCBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGlhZ25vc3RpYyBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSBmb3JtYXR0ZWQgZGlhZ25vc3RpYyBzdHJpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkRGlhZ25vc3RpY3MocGFyYW1zOiBCdWlsZERpYWdub3N0aWNzUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgbGluZXMucHVzaChgICBDb21tYW5kOiAke3BhcmFtcy5jb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgbGluZXMucHVzaChgICBXb3JraW5nIGRpcmVjdG9yeTogJHtwYXJhbXMuY3dkfWApO1xuICBsaW5lcy5wdXNoKGAgIFNjcmlwdCBwYXRoOiAke3BhcmFtcy5zY3JpcHRQYXRofWApO1xuICBsaW5lcy5wdXNoKGAgIEV4cGVjdGVkIHJlc3VsdCBmaWxlOiAke3BhcmFtcy5yZXN1bHRQYXRofWApO1xuXG4gIGlmIChwYXJhbXMuZXhlY1Jlc3VsdCkge1xuICAgIGxpbmVzLnB1c2goYCAgRXhpdCBjb2RlOiAke3BhcmFtcy5leGVjUmVzdWx0LmV4aXRDb2RlID09PSBudWxsID8gJyhudWxsIFx1MjAxNCBwcm9jZXNzIGRpZCBub3QgZXhpdCBub3JtYWxseSknIDogU3RyaW5nKHBhcmFtcy5leGVjUmVzdWx0LmV4aXRDb2RlKX1gKTtcbiAgICBpZiAocGFyYW1zLmV4ZWNSZXN1bHQuZXhpdFNpZ25hbCkge1xuICAgICAgbGluZXMucHVzaChgICBFeGl0IHNpZ25hbDogJHtwYXJhbXMuZXhlY1Jlc3VsdC5leGl0U2lnbmFsfWApO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmV4ZWNSZXN1bHQuc3Rkb3V0LnRyaW0oKSkge1xuICAgICAgbGluZXMucHVzaChgICBzdGRvdXQ6ICR7cGFyYW1zLmV4ZWNSZXN1bHQuc3Rkb3V0LnRyaW0oKX1gKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5leGVjUmVzdWx0LnN0ZGVyci50cmltKCkpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgc3RkZXJyOiAke3BhcmFtcy5leGVjUmVzdWx0LnN0ZGVyci50cmltKCl9YCk7XG4gICAgfVxuICAgIGlmICghcGFyYW1zLmV4ZWNSZXN1bHQuc3Rkb3V0LnRyaW0oKSAmJiAhcGFyYW1zLmV4ZWNSZXN1bHQuc3RkZXJyLnRyaW0oKSkge1xuICAgICAgbGluZXMucHVzaCgnICBzdGRvdXQvc3RkZXJyOiAoZW1wdHkpJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goJyAgZXhlYyByZXN1bHQ6IChub3QgYXZhaWxhYmxlIFx1MjAxNCBPYnNpZGlhbiB3YXMgYXV0by1zdGFydGVkIGFuZCByZXRyaWVkKScpO1xuICB9XG5cbiAgbGluZXMucHVzaCgnRW52aXJvbm1lbnQgY2hlY2tzOicpO1xuICBsaW5lcy5wdXNoKGAgIE9ic2lkaWFuIHJ1bm5pbmc6ICR7YXdhaXQgaXNPYnNpZGlhblJ1bm5pbmcoKSA/ICd5ZXMnIDogJ05PJ31gKTtcbiAgbGluZXMucHVzaChgICBDTEkgZW5hYmxlZCBpbiBvYnNpZGlhbi5qc29uOiAke2lzQ2xpRW5hYmxlZCgpID8gJ3llcycgOiAnTk8nfWApO1xuICBsaW5lcy5wdXNoKGAgIFZhdWx0IHJlZ2lzdGVyZWQ6ICR7aXNWYXVsdFJlZ2lzdGVyZWQocGFyYW1zLmN3ZCkgPyAneWVzJyA6ICdOTyd9YCk7XG4gIGxpbmVzLnB1c2goYCAgU2NyaXB0IGZpbGUgZXhpc3RzOiAke2V4aXN0c1N5bmMocGFyYW1zLnNjcmlwdFBhdGgpID8gJ3llcycgOiAnbm8gKGFscmVhZHkgY2xlYW5lZCB1cCknfWApO1xuICBsaW5lcy5wdXNoKGAgIFJlc3VsdCBmaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKHBhcmFtcy5yZXN1bHRQYXRoKSA/ICd5ZXMnIDogJ25vJ31gKTtcblxuICBjb25zdCByZWdpc3RlcmVkVmF1bHRzID0gZ2V0UmVnaXN0ZXJlZFZhdWx0cygpO1xuICBpZiAocmVnaXN0ZXJlZFZhdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICBsaW5lcy5wdXNoKCcgIFJlZ2lzdGVyZWQgdmF1bHRzOiAobm9uZSknKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKCcgIFJlZ2lzdGVyZWQgdmF1bHRzOicpO1xuICAgIGZvciAoY29uc3QgdmF1bHQgb2YgcmVnaXN0ZXJlZFZhdWx0cykge1xuICAgICAgbGluZXMucHVzaChgICAgIC0gJHt2YXVsdC5wYXRofSAob3BlbjogJHtTdHJpbmcodmF1bHQub3Blbil9KWApO1xuICAgIH1cbiAgfVxuXG4gIGxpbmVzLnB1c2goYCAgU2NyaXB0IGNvbnRlbnQ6XFxuJHtwYXJhbXMuc2NyaXB0Q29udGVudH1gKTtcblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb250ZW50IG9mIGEgdGVtcG9yYXJ5IHNjcmlwdCBmaWxlLlxuICpcbiAqIFNlcmlhbGl6ZXMge0BsaW5rIGludm9rZUFuZFdyaXRlUmVzdWx0fSBpbnRvIGEgc2VsZi1jb250YWluZWQgSUlGRSB0aGF0XG4gKiBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24sIHdyaXRlcyB0aGUgcmVzdWx0IChvciBlcnJvcikgdG8gYHJlc3VsdFBhdGhgLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSByZXN1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHJlc3VsdCBmaWxlLlxuICogQHJldHVybnMgVGhlIHNjcmlwdCBmaWxlIGNvbnRlbnQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2NyaXB0RmlsZShleHByZXNzaW9uOiBzdHJpbmcsIHJlc3VsdFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGZuU3RyID0gZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGludm9rZUFuZFdyaXRlUmVzdWx0KTtcbiAgY29uc3Qgc2VyaWFsaXplRXJyb3JTdHIgPSBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoc2VyaWFsaXplRXJyb3IpO1xuICBjb25zdCByZXN1bHRQYXRoSnNvbiA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdFBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpKTtcbiAgcmV0dXJuIGAoJHtmblN0cn0pKHsgZXZhbHVhdGU6IGFzeW5jICgpID0+ICgke2V4cHJlc3Npb259KSwgcmVzdWx0UGF0aDogJHtyZXN1bHRQYXRoSnNvbn0sIHNlcmlhbGl6ZUVycm9yOiAke3NlcmlhbGl6ZUVycm9yU3RyfSB9KWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVhZHMgYSBzY3JpcHQgZmlsZSBmcm9tIGRpc2ssIGxvZ3MgaXRzIGNvbnRlbnQsIGFuZCBleGVjdXRlcyBpdCB2aWEgYG5ldyBGdW5jdGlvbmAuXG4gKlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlLlxuICpcbiAqIEBwYXJhbSBzY3JpcHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHNjcmlwdCBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlU2NyaXB0RmlsZShzY3JpcHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZnNQcm9taXNlcyA9IHdpbmRvdy5yZXF1aXJlKCdub2RlOmZzL3Byb21pc2VzJykgYXMgdHlwZW9mIGltcG9ydCgnbm9kZTpmcy9wcm9taXNlcycpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZnNQcm9taXNlcy5hY2Nlc3Moc2NyaXB0UGF0aCk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTY3JpcHQgZmlsZSBub3QgZm91bmQ6ICR7c2NyaXB0UGF0aH1gLCB7IGNhdXNlIH0pO1xuICB9XG5cbiAgY29uc3Qgc2NyaXB0ID0gYXdhaXQgZnNQcm9taXNlcy5yZWFkRmlsZShzY3JpcHRQYXRoLCAndXRmLTgnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gRGlhZ25vc3RpYyBsb2dnaW5nIGluc2lkZSBPYnNpZGlhbiBwcm9jZXNzOyBubyBsb2dnZXIgYXZhaWxhYmxlLlxuICBjb25zb2xlLmRlYnVnKGBFeGVjdXRpbmcgJHtzY3JpcHRQYXRofTpcXG4ke3NjcmlwdH1gKTtcblxuICBsZXQgZm46ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWwsIG5vLW5ldy1mdW5jIC0tIFRoZSBzY3JpcHQgaXMgYSB0cnVzdGVkLCBzZWxmLWdlbmVyYXRlZCBJSUZFIGV4cHJlc3Npb24uXG4gICAgZm4gPSBuZXcgRnVuY3Rpb24oYHJldHVybiAke3NjcmlwdH1gKSBhcyAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgcGFyc2luZyAke3NjcmlwdFBhdGh9YCwgeyBjYXVzZSB9KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZm4oKTtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGV4ZWN1dGluZyAke3NjcmlwdFBhdGh9YCwgeyBjYXVzZSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgdG8ga2lsbCB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldEtpbGxPYnNpZGlhbkNvbW1hbmQoKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gJ3Rhc2traWxsIC9JTSBPYnNpZGlhbi5leGUgL0YnO1xuICB9XG5cbiAgcmV0dXJuICdwa2lsbCAtZiBPYnNpZGlhbic7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBsYXVuY2ggdGhlIE9ic2lkaWFuIGJpbmFyeS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCgpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/PyAnJztcbiAgICByZXR1cm4gYHN0YXJ0IFwiXCIgXCIke2xvY2FsQXBwRGF0YX1cXFxcUHJvZ3JhbXNcXFxcT2JzaWRpYW5cXFxcT2JzaWRpYW4uZXhlXCJgO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbiAmJztcbiAgfVxuXG4gIHJldHVybiAnb2JzaWRpYW4gJic7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBvcGVuIGEgVVJJLlxuICpcbiAqIEBwYXJhbSB1cmkgLSBUaGUgVVJJIHRvIG9wZW4uXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE9wZW5VcmlDb21tYW5kKHVyaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gYHN0YXJ0IFwiXCIgXCIke3VyaX1cImA7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gYG9wZW4gXCIke3VyaX1cImA7XG4gIH1cblxuICByZXR1cm4gYHhkZy1vcGVuIFwiJHt1cml9XCJgO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBPYnNpZGlhbiBwcm9jZXNzIGlzIGN1cnJlbnRseSBydW5uaW5nLlxuICpcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgT2JzaWRpYW4gcHJvY2VzcyBpcyBmb3VuZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzT2JzaWRpYW5SdW5uaW5nKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBjb21tYW5kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICAgID8gJ3Rhc2tsaXN0IC9GSSBcIklNQUdFTkFNRSBlcSBPYnNpZGlhbi5leGVcIiAvTkgnXG4gICAgOiAncGdyZXAgLWYgT2JzaWRpYW4nO1xuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGV4ZWMoY29tbWFuZCwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICByZXR1cm4gb3V0cHV0LmluY2x1ZGVzKCdPYnNpZGlhbi5leGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC50cmltKCkubGVuZ3RoID4gMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogT3BlbnMgYSB2YXVsdCBpbiBPYnNpZGlhbiB1c2luZyB0aGUgYG9ic2lkaWFuOi8vb3BlbmAgVVJJIHByb3RvY29sLlxuICpcbiAqIFRoaXMgd29ya3Mgd2hldGhlciBPYnNpZGlhbiBpcyBhbHJlYWR5IHJ1bm5pbmcgKHNpZ25hbHMgaXQgdG8gb3BlbiB0aGUgdmF1bHQpXG4gKiBvciBub3QgKGxhdW5jaGVzIE9ic2lkaWFuIHdpdGggdGhlIHZhdWx0KS4gVGhlIFVSSSBwcm90b2NvbCBpcyBoYW5kbGVkIGJ5IHRoZVxuICogT1MsIHdoaWNoIHJvdXRlcyBpdCB0byB0aGUgcmVnaXN0ZXJlZCBPYnNpZGlhbiBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICovXG5hc3luYyBmdW5jdGlvbiBvcGVuVmF1bHRWaWFVcmkodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdmF1bHRJZCA9IGdldFZhdWx0SWQodmF1bHRQYXRoKTtcbiAgaWYgKCF2YXVsdElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3BlbiB2YXVsdCB2aWEgVVJJOiB2YXVsdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiBvYnNpZGlhbi5qc29uOiAke3ZhdWx0UGF0aH1gKTtcbiAgfVxuICBjb25zdCB1cmkgPSBgb2JzaWRpYW46Ly9vcGVuP3ZhdWx0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhdWx0SWQpfWA7XG4gIGNvbnN0IGNvbW1hbmQgPSBnZXRPcGVuVXJpQ29tbWFuZCh1cmkpO1xuICBsb2coYFtjbGktdHJhbnNwb3J0XSBPcGVuaW5nIHZhdWx0IHZpYSBVUkk6ICR7dXJpfWApO1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFVSSSBvcGVuIGZhaWxlZCAobm9uLWZhdGFsKTogJHtzZXJpYWxpemVFcnJvcihlcnJvcil9YCk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSxxQkFBMkI7QUFDM0Isc0JBS087QUFDUCxxQkFBdUI7QUFDdkIsdUJBQXFCO0FBQ3JCLDBCQUFvQjtBQVFwQixrQkFBcUI7QUFDckIsaUNBQTRDO0FBQzVDLGlCQUFvQjtBQUNwQixpQ0FBNEM7QUFDNUMsa0JBQXFCO0FBQ3JCLDZCQVVPO0FBQ1AsNkJBQStCO0FBb0IvQixNQUFNLDBC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
|
|
@@ -67,6 +67,17 @@ export declare class DesktopCliTransport implements ObsidianTransport {
|
|
|
67
67
|
* Checks whether the Obsidian CLI binary is available in the system PATH.
|
|
68
68
|
*/
|
|
69
69
|
private assertCliAvailable;
|
|
70
|
+
/**
|
|
71
|
+
* Dismisses the "Do you trust the author of this vault?" dialog if present.
|
|
72
|
+
*
|
|
73
|
+
* Clicks the "Trust author and enable plugins" button (`.mod-cta`) inside any
|
|
74
|
+
* modal whose text includes "Do you trust the author". This is needed when a
|
|
75
|
+
* vault with community plugins is opened without a prior `enable-plugin-<id>`
|
|
76
|
+
* entry in localStorage (e.g., the very first vault registered via config file).
|
|
77
|
+
*
|
|
78
|
+
* @param vaultPath - The vault path to evaluate in.
|
|
79
|
+
*/
|
|
80
|
+
private dismissTrustDialog;
|
|
70
81
|
/**
|
|
71
82
|
* Sets `enable-plugin-<vaultId>` in Obsidian's localStorage to prevent
|
|
72
83
|
* the "Do you trust the author of this vault?" dialog from appearing
|
package/dist/lib/esm/library.mjs
CHANGED
|
@@ -67,6 +67,17 @@ export declare class DesktopCliTransport implements ObsidianTransport {
|
|
|
67
67
|
* Checks whether the Obsidian CLI binary is available in the system PATH.
|
|
68
68
|
*/
|
|
69
69
|
private assertCliAvailable;
|
|
70
|
+
/**
|
|
71
|
+
* Dismisses the "Do you trust the author of this vault?" dialog if present.
|
|
72
|
+
*
|
|
73
|
+
* Clicks the "Trust author and enable plugins" button (`.mod-cta`) inside any
|
|
74
|
+
* modal whose text includes "Do you trust the author". This is needed when a
|
|
75
|
+
* vault with community plugins is opened without a prior `enable-plugin-<id>`
|
|
76
|
+
* entry in localStorage (e.g., the very first vault registered via config file).
|
|
77
|
+
*
|
|
78
|
+
* @param vaultPath - The vault path to evaluate in.
|
|
79
|
+
*/
|
|
80
|
+
private dismissTrustDialog;
|
|
70
81
|
/**
|
|
71
82
|
* Sets `enable-plugin-<vaultId>` in Obsidian's localStorage to prevent
|
|
72
83
|
* the "Do you trust the author of this vault?" dialog from appearing
|
|
@@ -158,6 +158,10 @@ ${diagnostics}`);
|
|
|
158
158
|
registerVaultInConfig(vaultPath);
|
|
159
159
|
log("[cli-transport] Vault entry written. Opening vault via URI protocol...");
|
|
160
160
|
await openVaultViaUri(vaultPath);
|
|
161
|
+
await this.pollVaultReady(vaultPath);
|
|
162
|
+
await this.enablePluginsInLocalStorage(vaultPath, vaultPath);
|
|
163
|
+
await this.dismissTrustDialog(vaultPath);
|
|
164
|
+
return;
|
|
161
165
|
}
|
|
162
166
|
await this.pollVaultReady(vaultPath);
|
|
163
167
|
}
|
|
@@ -208,6 +212,33 @@ ${diagnostics}`);
|
|
|
208
212
|
throw new Error("Obsidian CLI is not available. Ensure Obsidian is installed and its CLI is in your PATH.");
|
|
209
213
|
}
|
|
210
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Dismisses the "Do you trust the author of this vault?" dialog if present.
|
|
217
|
+
*
|
|
218
|
+
* Clicks the "Trust author and enable plugins" button (`.mod-cta`) inside any
|
|
219
|
+
* modal whose text includes "Do you trust the author". This is needed when a
|
|
220
|
+
* vault with community plugins is opened without a prior `enable-plugin-<id>`
|
|
221
|
+
* entry in localStorage (e.g., the very first vault registered via config file).
|
|
222
|
+
*
|
|
223
|
+
* @param vaultPath - The vault path to evaluate in.
|
|
224
|
+
*/
|
|
225
|
+
async dismissTrustDialog(vaultPath) {
|
|
226
|
+
await ensureNamespaceBootstrapped(this, vaultPath);
|
|
227
|
+
const dismissExpr = `(function() {
|
|
228
|
+
var modals = document.querySelectorAll('.modal-container');
|
|
229
|
+
for (var i = 0; i < modals.length; i++) {
|
|
230
|
+
if (modals[i].textContent.includes('Do you trust the author')) {
|
|
231
|
+
var btn = modals[i].querySelector('.mod-cta');
|
|
232
|
+
if (btn) { btn.click(); return true; }
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return false;
|
|
236
|
+
})()`;
|
|
237
|
+
const result = await this.evaluate(dismissExpr, { cwd: vaultPath });
|
|
238
|
+
if (result === "true") {
|
|
239
|
+
log('[cli-transport] Dismissed "Do you trust the author" dialog.');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
211
242
|
/**
|
|
212
243
|
* Sets `enable-plugin-<vaultId>` in Obsidian's localStorage to prevent
|
|
213
244
|
* the "Do you trust the author of this vault?" dialog from appearing
|
|
@@ -454,4 +485,4 @@ export {
|
|
|
454
485
|
DesktopCliTransport,
|
|
455
486
|
invokeAndWriteResult
|
|
456
487
|
};
|
|
457
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgdW5saW5rLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBFeGVjUmVzdWx0IH0gZnJvbSAnLi9leGVjLm1qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLm1qcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9uLWV4cHJlc3Npb24ubWpzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLm1qcyc7XG5pbXBvcnQgeyBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQgfSBmcm9tICcuL25hbWVzcGFjZS1ib290c3RyYXAubWpzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL25vb3AubWpzJztcbmltcG9ydCB7XG4gIGVuYWJsZUNsaUluQ29uZmlnLFxuICBnZXRBbnlSZWdpc3RlcmVkVmF1bHRQYXRoLFxuICBnZXRSZWdpc3RlcmVkVmF1bHRzLFxuICBnZXRWYXVsdElkLFxuICBpc0NsaUVuYWJsZWQsXG4gIGlzVmF1bHRPcGVuLFxuICBpc1ZhdWx0UmVnaXN0ZXJlZCxcbiAgcmVnaXN0ZXJWYXVsdEluQ29uZmlnLFxuICByZW1vdmVWYXVsdEZyb21Db25maWdcbn0gZnJvbSAnLi9vYnNpZGlhbi1jb25maWcubWpzJztcbmltcG9ydCB7IHNlcmlhbGl6ZUVycm9yIH0gZnJvbSAnLi9zZXJpYWxpemUtZXJyb3IubWpzJztcblxuaW50ZXJmYWNlIEludm9rZUFuZFdyaXRlUmVzdWx0UGFyYW1zIHtcbiAgZXZhbHVhdGUoKTogUHJvbWlzZTx1bmtub3duPjtcbiAgcmVzdWx0UGF0aDogc3RyaW5nO1xuICBzZXJpYWxpemVFcnJvcihlcnJvcjogdW5rbm93bik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIGVudmVsb3BlIHdyaXR0ZW4gYnkgdGhlIHRlbXBvcmFyeSBzY3JpcHQgZmlsZS5cbiAqXG4gKiAtIGB7IHZhbHVlOiBzdHJpbmcsIHR5cGU6ICdlcnJvcicgfWAgXHUyMDE0IHRoZSBleHByZXNzaW9uIHRocmV3OyBgdmFsdWVgIGlzIHRoZSBlcnJvciBtZXNzYWdlLlxuICogLSBgeyB2YWx1ZTogJycsIHR5cGU6ICdudWxsJyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gcmV0dXJuZWQgYG51bGxgLlxuICogLSBgeyB2YWx1ZTogJycsIHR5cGU6ICd1bmRlZmluZWQnIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBgdW5kZWZpbmVkYC5cbiAqIC0gYHsgdmFsdWU6IHN0cmluZyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gcmV0dXJuZWQgYSBzdHJpbmcgdmFsdWUgKG5vIGB0eXBlYCBmaWVsZCkuXG4gKi9cbnR5cGUgU2NyaXB0UmVzdWx0RW52ZWxvcGUgPVxuICB8IHsgdHlwZTogJ2Vycm9yJyB8ICdudWxsJyB8ICd1bmRlZmluZWQnOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHZhbHVlOiBzdHJpbmcgfTtcblxuY29uc3QgVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4gPSAndW5hYmxlIHRvIGZpbmQgT2JzaWRpYW4nO1xuY29uc3QgQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5jb25zdCBWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX0NMT1NFX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBWQVVMVF9FVkFMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTAwMDA7XG5cbmludGVyZmFjZSBCdWlsZERpYWdub3N0aWNzUGFyYW1zIHtcbiAgY29tbWFuZDogc3RyaW5nW107XG4gIGN3ZDogc3RyaW5nO1xuICBleGVjUmVzdWx0OiBFeGVjUmVzdWx0IHwgdW5kZWZpbmVkO1xuICByZXN1bHRQYXRoOiBzdHJpbmc7XG4gIHNjcmlwdENvbnRlbnQ6IHN0cmluZztcbiAgc2NyaXB0UGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRyYW5zcG9ydCB0aGF0IGNvbW11bmljYXRlcyB3aXRoIERlc2t0b3AgT2JzaWRpYW4gdmlhIHRoZSBgb2JzaWRpYW4gZXZhbGAgQ0xJIGNvbW1hbmRcbiAqIGFuZCBtYW5hZ2VzIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5leHBvcnQgY2xhc3MgRGVza3RvcENsaVRyYW5zcG9ydCBpbXBsZW1lbnRzIE9ic2lkaWFuVHJhbnNwb3J0IHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgdHJhbnNwb3J0IGlzIGZvciBhIG1vYmlsZSBwbGF0Zm9ybS4gQWx3YXlzIGBmYWxzZWAgZm9yIHRoaXMgdHJhbnNwb3J0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBpbnNpZGUgT2JzaWRpYW4gdmlhIGBvYnNpZGlhbiBldmFsYC5cbiAgICpcbiAgICogV3JpdGVzIHRoZSBleHByZXNzaW9uIHRvIGEgdGVtcG9yYXJ5IGAuY2pzYCBmaWxlIGFuZCBleGVjdXRlcyBhIHRpbnlcbiAgICogYHJlcXVpcmUoKS5pbnZva2UoKWAgY2FsbCB2aWEgdGhlIENMSS4gVGhlIHJlc3VsdCBpcyB3cml0dGVuIHRvIGFcbiAgICogYC5yZXN1bHQuanNvbmAgZmlsZSBieSB0aGUgc2NyaXB0LCBhdm9pZGluZyBDTEkgc3Rkb3V0IHNpemUgbGltaXRzXG4gICAqIGFuZCBJUEMgYnVmZmVyIGlzc3Vlcy5cbiAgICpcbiAgICogSGFuZGxlcyBhdXRvLXN0YXJ0OiBpZiBPYnNpZGlhbiBpcyBub3QgcnVubmluZywgbGF1bmNoZXMgaXQgdmlhIFVSSSBwcm90b2NvbFxuICAgKiBhbmQgcmV0cmllcyB1bnRpbCBpdCBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgSmF2YVNjcmlwdCBleHByZXNzaW9uIHRvIGV2YWx1YXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcmVzdWx0IHN0cmluZyAodHJhbnNwb3J0LXNwZWNpZmljIHByZWZpeGVzIHN0cmlwcGVkKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBldmFsdWF0ZShleHByZXNzaW9uOiBzdHJpbmcsIG9wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gICAgY29uc3Qgc2NyaXB0SWQgPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICAgIGNvbnN0IHNjcmlwdERpciA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IGpvaW4oc2NyaXB0RGlyLCBgJHtzY3JpcHRJZH0uanNgKTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5yZXN1bHQuanNvbmApO1xuXG4gICAgYXdhaXQgbWtkaXIoc2NyaXB0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHNjcmlwdENvbnRlbnQgPSBidWlsZFNjcmlwdEZpbGUoZXhwcmVzc2lvbiwgcmVzdWx0UGF0aCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHNjcmlwdFBhdGgsIHNjcmlwdENvbnRlbnQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhZmVTY3JpcHRQYXRoID0gc2NyaXB0UGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICBjb25zdCBjbGlFeHByID0gYCgke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhleGVjdXRlU2NyaXB0RmlsZSl9KSgke0pTT04uc3RyaW5naWZ5KHNhZmVTY3JpcHRQYXRoKX0pYDtcbiAgICAgIGNvbnN0IHZhdWx0SWQgPSBnZXRWYXVsdElkKG9wdGlvbnMuY3dkKTtcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBbJ29ic2lkaWFuJywgLi4uKHZhdWx0SWQgPyBbYHZhdWx0PSR7dmF1bHRJZH1gXSA6IFtdKSwgJ2V2YWwnLCAnLS1hbGxvdy1mb2N1cy1zdGVhbCcsIGBjb2RlPSR7Y2xpRXhwcn1gXTtcblxuICAgICAgbGV0IGV4ZWNSZXN1bHQ6IEV4ZWNSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjUmVzdWx0ID0gYXdhaXQgZXhlYyhjb21tYW5kLCB7XG4gICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICBpc1F1aWV0OiB0cnVlLFxuICAgICAgICAgIHNob3VsZEluY2x1ZGVEZXRhaWxzOiB0cnVlLFxuICAgICAgICAgIC4uLihvcHRpb25zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9KVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFVOQUJMRV9UT19GSU5EX09CU0lESUFOKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlT2JzaWRpYW5SdW5uaW5nQW5kUmV0cnkoY29tbWFuZCwgb3B0aW9ucy5jd2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhpc3RzU3luYyhyZXN1bHRQYXRoKSkge1xuICAgICAgICBjb25zdCBkaWFnbm9zdGljcyA9IGF3YWl0IGJ1aWxkRGlhZ25vc3RpY3Moe1xuICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICBleGVjUmVzdWx0LFxuICAgICAgICAgIHJlc3VsdFBhdGgsXG4gICAgICAgICAgc2NyaXB0Q29udGVudCxcbiAgICAgICAgICBzY3JpcHRQYXRoXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmlwdCBkaWQgbm90IGV4ZWN1dGUgZm9yIHBhdGg6ICR7b3B0aW9ucy5jd2R9XFxuJHtkaWFnbm9zdGljc31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0U3RyID0gYXdhaXQgcmVhZEZpbGUocmVzdWx0UGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBlbnZlbG9wZSA9IEpTT04ucGFyc2UocmVzdWx0U3RyKSBhcyBTY3JpcHRSZXN1bHRFbnZlbG9wZTtcblxuICAgICAgaWYgKCd0eXBlJyBpbiBlbnZlbG9wZSkge1xuICAgICAgICBpZiAoZW52ZWxvcGUudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGVycm9yIGluIE9ic2lkaWFuIGZvciBwYXRoOiAke29wdGlvbnMuY3dkfTogJHtlbnZlbG9wZS52YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnZlbG9wZS52YWx1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdW5saW5rKHNjcmlwdFBhdGgpLmNhdGNoKG5vb3ApO1xuICAgICAgYXdhaXQgdW5saW5rKHJlc3VsdFBhdGgpLmNhdGNoKG5vb3ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIENMSS1zcGVjaWZpYyBwcmVmbGlnaHQgY2hlY2tzLlxuICAgKlxuICAgKiBWZXJpZmllcyB0aGF0IHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkLCBDTEkgaXMgZW5hYmxlZCBpbiBPYnNpZGlhbiBzZXR0aW5ncyxcbiAgICogYW5kIHRoZSBgb2JzaWRpYW5gIENMSSBiaW5hcnkgaXMgYXZhaWxhYmxlIGluIFBBVEguIElmIHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkXG4gICAqIGJ1dCBub3Qgb3Blbiwgb3BlbnMgaXQgdmlhIFVSSSBwcm90b2NvbCBhbmQgcG9sbHMgdW50aWwgaXQgaXMgcmVhZHkuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZWZsaWdodENoZWNrKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUnVubmluZyBwcmVmbGlnaHQgY2hlY2sgZm9yIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBpZiAoIWlzVmF1bHRSZWdpc3RlcmVkKHZhdWx0UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFZhdWx0IGlzIG5vdCByZWdpc3RlcmVkIGluIE9ic2lkaWFuOiAke3ZhdWx0UGF0aH0uIFJlZ2lzdGVyIHRoZSB2YXVsdCBmaXJzdCB3aXRoIHJlZ2lzdGVyVmF1bHQoKSBvciBUZW1wVmF1bHQucmVnaXN0ZXIoKS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNDbGlFbmFibGVkKCkpIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIENMSSBpcyBkaXNhYmxlZCBpbiBvYnNpZGlhbi5qc29uLiBFbmFibGluZyBhbmQgcmVzdGFydGluZyBPYnNpZGlhbi4uLicpO1xuICAgICAgZW5hYmxlQ2xpSW5Db25maWcoKTtcbiAgICAgIGF3YWl0IHRoaXMucmVzdGFydE9ic2lkaWFuKHZhdWx0UGF0aCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hc3NlcnRDbGlBdmFpbGFibGUoKTtcblxuICAgIGlmICghaXNWYXVsdE9wZW4odmF1bHRQYXRoKSkge1xuICAgICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVmF1bHQgaXMgcmVnaXN0ZXJlZCBidXQgbm90IG9wZW46ICR7dmF1bHRQYXRofS4gT3BlbmluZyB2aWEgVVJJLi4uYCk7XG4gICAgICBhd2FpdCBvcGVuVmF1bHRWaWFVcmkodmF1bHRQYXRoKTtcbiAgICAgIGF3YWl0IHRoaXMucG9sbFZhdWx0UmVhZHkodmF1bHRQYXRoKTtcbiAgICB9XG5cbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBQcmVmbGlnaHQgY2hlY2sgcGFzc2VkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBFbGVjdHJvbiBJUEMuXG4gICAqXG4gICAqIFVzZXMgYHZhdWx0LW9wZW5gIElQQyB0byByZWdpc3RlciBhbmQgb3BlbiB0aGUgdmF1bHQsIHRoZW4gcG9sbHMgdW50aWxcbiAgICogdGhlIHZhdWx0J3MgQ0xJIGlzIHJlYWR5IGFuZCBgZ2V0QmFzZVBhdGgoKWAgbWF0Y2hlcyBgdmF1bHRQYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0UGF0aCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcblxuICAgIGlmIChleGlzdGluZ1ZhdWx0UGF0aCkge1xuICAgICAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRoaXMsIGV4aXN0aW5nVmF1bHRQYXRoKTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyRXhwciA9IGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy5pcGNTZW5kU3luYygke0pTT04uc3RyaW5naWZ5KHsgYXJnczogW3ZhdWx0UGF0aCwgZmFsc2VdLCBjaGFubmVsOiAndmF1bHQtb3BlbicgfSl9KWA7XG4gICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlZ2lzdGVyRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRQYXRoIH0pO1xuICAgICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoLCBleGlzdGluZ1ZhdWx0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE5vIGV4aXN0aW5nIHZhdWx0IHJlZ2lzdGVyZWQuIFdyaXRpbmcgdmF1bHQgZW50cnkgZGlyZWN0bHkgdG8gb2JzaWRpYW4uanNvbi4uLicpO1xuICAgICAgcmVnaXN0ZXJWYXVsdEluQ29uZmlnKHZhdWx0UGF0aCk7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCBlbnRyeSB3cml0dGVuLiBPcGVuaW5nIHZhdWx0IHZpYSBVUkkgcHJvdG9jb2wuLi4nKTtcbiAgICAgIGF3YWl0IG9wZW5WYXVsdFZpYVVyaSh2YXVsdFBhdGgpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucG9sbFZhdWx0UmVhZHkodmF1bHRQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhIHZhdWx0IGZyb20gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2UuXG4gICAqXG4gICAqIFNjaGVkdWxlcyB0aGUgdmF1bHQgd2luZG93IHRvIGNsb3NlLCB3YWl0cywgdGhlbiByZW1vdmVzIHRoZSB2YXVsdFxuICAgKiBmcm9tIHRoZSByZWdpc3RyeSB2aWEgYHZhdWx0LXJlbW92ZWAgSVBDLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bnJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBVbnJlZ2lzdGVyaW5nIHZhdWx0OiBjbG9zaW5nIHdpbmRvdyBmb3IgJHt2YXVsdFBhdGh9Li4uYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCB2YXVsdFBhdGgpO1xuICAgICAgY29uc3QgZGVzdHJveUV4cHIgPSAnd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcuZGVzdHJveUN1cnJlbnRXaW5kb3coKSc7XG4gICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKGRlc3Ryb3lFeHByLCB7IGN3ZDogdmF1bHRQYXRoLCB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSk7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBXaW5kb3cgZGVzdHJveSBjb21tYW5kIHNlbnQuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFdpbmRvdyBkZXN0cm95IGZhaWxlZCAobm9uLWZhdGFsKTogJHtzZXJpYWxpemVFcnJvcihlcnJvcil9YCk7XG4gICAgfVxuXG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gV2FpdGluZyBmb3Igd2luZG93IHRvIGNsb3NlLi4uJyk7XG4gICAgYXdhaXQgZGVsYXkoVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFJlbW92aW5nIHZhdWx0IGZyb20gcmVnaXN0cnkuLi4nKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGV4aXN0aW5nVmF1bHRGb3JSZW1vdmFsKSB7XG4gICAgICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCBleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZUV4cHIgPSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcuaXBjU2VuZFN5bmMoJHtKU09OLnN0cmluZ2lmeSh7IGFyZ3M6IFt2YXVsdFBhdGhdLCBjaGFubmVsOiAndmF1bHQtcmVtb3ZlJyB9KX0pYDtcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsdWF0ZShyZW1vdmVFeHByLCB7IGN3ZDogZXhpc3RpbmdWYXVsdEZvclJlbW92YWwsIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogVkFVTFRfRVZBTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE5vIGV4aXN0aW5nIHZhdWx0IHRvIHRhcmdldCBmb3IgcmVtb3ZhbCBJUEMgXHUyMDE0IHJlbW92aW5nIGRpcmVjdGx5IGZyb20gb2JzaWRpYW4uanNvbi4nKTtcbiAgICAgICAgcmVtb3ZlVmF1bHRGcm9tQ29uZmlnKHZhdWx0UGF0aCk7XG4gICAgICB9XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCByZW1vdmVkIGZyb20gcmVnaXN0cnkuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFZhdWx0IHJlZ2lzdHJ5IHJlbW92YWwgZmFpbGVkIChub24tZmF0YWwpOiAke3NlcmlhbGl6ZUVycm9yKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIE9ic2lkaWFuIENMSSBiaW5hcnkgaXMgYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0gUEFUSC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYXNzZXJ0Q2xpQXZhaWxhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZSBvYnNpZGlhbicgOiAnd2hpY2ggb2JzaWRpYW4nO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2JzaWRpYW4gQ0xJIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSBPYnNpZGlhbiBpcyBpbnN0YWxsZWQgYW5kIGl0cyBDTEkgaXMgaW4geW91ciBQQVRILicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGBlbmFibGUtcGx1Z2luLTx2YXVsdElkPmAgaW4gT2JzaWRpYW4ncyBsb2NhbFN0b3JhZ2UgdG8gcHJldmVudFxuICAgKiB0aGUgXCJEbyB5b3UgdHJ1c3QgdGhlIGF1dGhvciBvZiB0aGlzIHZhdWx0P1wiIGRpYWxvZyBmcm9tIGFwcGVhcmluZ1xuICAgKiB3aGVuIGEgdmF1bHQgd2l0aCBjb21tdW5pdHkgcGx1Z2lucyBpcyBvcGVuZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgKlxuICAgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgYHZhdWx0LW9wZW5gIElQQyAoc28gdGhlIHZhdWx0IElEIGV4aXN0cyBpblxuICAgKiBgb2JzaWRpYW4uanNvbmApIGFuZCBiZWZvcmUgdGhlIG5ldyB2YXVsdCB3aW5kb3cgZmluaXNoZXMgbG9hZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqIEBwYXJhbSBldmFsVGFyZ2V0VmF1bHRQYXRoIC0gVGhlIHZhdWx0IHBhdGggdG8gdXNlIGFzIGV2YWwgdGFyZ2V0IChhbiBleGlzdGluZywgbG9hZGVkIHZhdWx0KS5cbiAgICogICBsb2NhbFN0b3JhZ2UgaXMgc2hhcmVkIGFjcm9zcyBhbGwgT2JzaWRpYW4gd2luZG93cyAoc2FtZSBFbGVjdHJvbiBvcmlnaW4pLCBzbyB0aGVcbiAgICogICBgbG9jYWxTdG9yYWdlLnNldEl0ZW1gIGNhbGwgY2FuIHJ1biBpbiBhbnkgbG9hZGVkIHZhdWx0IHdpbmRvdy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5hYmxlUGx1Z2luc0luTG9jYWxTdG9yYWdlKHZhdWx0UGF0aDogc3RyaW5nLCBldmFsVGFyZ2V0VmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2YXVsdElkID0gZ2V0VmF1bHRJZCh2YXVsdFBhdGgpO1xuICAgIGlmICghdmF1bHRJZCkge1xuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gQ291bGQgbm90IGZpbmQgdmF1bHQgSUQgXHUyMDE0IHNraXBwaW5nIGxvY2FsU3RvcmFnZSB0cnVzdCBmbGFnLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCBldmFsVGFyZ2V0VmF1bHRQYXRoKTtcbiAgICBjb25zdCBlbmFibGVFeHByID0gYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnNldExvY2FsU3RvcmFnZUl0ZW0oJHtKU09OLnN0cmluZ2lmeSh7IGtleTogYGVuYWJsZS1wbHVnaW4tJHt2YXVsdElkfWAsIHZhbHVlOiAndHJ1ZScgfSl9KWA7XG4gICAgYXdhaXQgdGhpcy5ldmFsdWF0ZShlbmFibGVFeHByLCB7IGN3ZDogZXZhbFRhcmdldFZhdWx0UGF0aCB9KTtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBTZXQgZW5hYmxlLXBsdWdpbi0ke3ZhdWx0SWR9IGluIGxvY2FsU3RvcmFnZS5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXVuY2hlcyBPYnNpZGlhbiBiaW5hcnkgYW5kIHJldHJpZXMgdGhlIGV2YWwgdW50aWwgaXQgcmVzcG9uZHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIENMSSBjb21tYW5kIGFycmF5IHRvIHJldHJ5LlxuICAgKiBAcGFyYW0gY3dkIC0gVGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kOiBzdHJpbmdbXSwgY3dkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBpcyBub3QgcnVubmluZy4gU3RhcnRpbmcgT2JzaWRpYW4uLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCgpLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBUaGUgbGF1bmNoIGNvbW1hbmQgbWF5IGZhaWwgb24gc29tZSBzeXN0ZW1zIFx1MjAxNCB3ZSdsbCBzdGlsbCB0cnkgcG9sbGluZy5cbiAgICB9XG5cbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBQb2xsaW5nIGZvciBPYnNpZGlhbiBDTEkgKHRpbWVvdXQ9JHtTdHJpbmcoQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICBhd2FpdCBkZWxheShBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgeyBjd2QsIGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE9ic2lkaWFuIENMSSByZXNwb25kZWQuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGlmICghbWVzc2FnZS5pbmNsdWRlcyhVTkFCTEVfVE9fRklORF9PQlNJRElBTikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBPYnNpZGlhbiBub3QgcmVhZHkgeWV0LCByZXRyeWluZy4uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgT2JzaWRpYW4gZGlkIG5vdCBzdGFydCB3aXRoaW4gJHtTdHJpbmcoQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuYCk7XG4gIH1cblxuICAvKipcbiAgICogUG9sbHMgdW50aWwgdGhlIHZhdWx0IGlzIHJlYWR5IGFuZCByZXNwb25kaW5nIHRvIGV2YWwgY2FsbHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwb2xsVmF1bHRSZWFkeSh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBvbGxFeHByID0gJ3dpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnBvbGxWYXVsdEJhc2VQYXRoKCknO1xuXG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUG9sbGluZyBmb3IgdmF1bHQgcmVhZGluZXNzICh0aW1lb3V0PSR7U3RyaW5nKFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgbGV0IGlzQm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFpc0Jvb3RzdHJhcHBlZCkge1xuICAgICAgICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCB2YXVsdFBhdGgpO1xuICAgICAgICAgIGlzQm9vdHN0cmFwcGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYXNlUGF0aCA9IGF3YWl0IHRoaXMuZXZhbHVhdGUocG9sbEV4cHIsIHsgY3dkOiB2YXVsdFBhdGggfSk7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKGJhc2VQYXRoKSA9PT0gdmF1bHRQYXRoKSB7XG4gICAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gVmF1bHQgaXMgcmVhZHkuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVmF1bHQgbm90IHJlYWR5IHlldCBcdTIwMTQgbmFtZXNwYWNlIG1heSBub3QgYmUgYm9vdHN0cmFwcGVkIHlldCBlaXRoZXIuXG4gICAgICAgIGlzQm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBhd2FpdCBkZWxheShWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVmF1bHQgYXQgJHt2YXVsdFBhdGh9IGRpZCBub3QgYmVjb21lIHJlYWR5IHdpdGhpbiAke1N0cmluZyhWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tc2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RhcnRzIE9ic2lkaWFuIGJ5IGtpbGxpbmcgdGhlIHJ1bm5pbmcgcHJvY2VzcyBhbmQgcmVsYXVuY2hpbmcgaXQuXG4gICAqXG4gICAqIFVzZWQgd2hlbiBhIGNvbmZpZyBjaGFuZ2UgKGxpa2UgZW5hYmxpbmcgQ0xJKSByZXF1aXJlcyBhIHJlc3RhcnQgdG8gdGFrZSBlZmZlY3QuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCB0byB1c2UgZm9yIHBvbGxpbmcgYWZ0ZXIgcmVzdGFydC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydE9ic2lkaWFuKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gS2lsbGluZyBPYnNpZGlhbiBwcm9jZXNzLi4uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoZ2V0S2lsbE9ic2lkaWFuQ29tbWFuZCgpLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBQcm9jZXNzIG1heSBub3QgYmUgcnVubmluZyBcdTIwMTQgdGhhdCdzIGZpbmUuXG4gICAgfVxuXG4gICAgYXdhaXQgZGVsYXkoVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIGNvbnN0IHJlc3RhcnRWYXVsdElkID0gZ2V0VmF1bHRJZCh2YXVsdFBhdGgpO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBbJ29ic2lkaWFuJywgLi4uKHJlc3RhcnRWYXVsdElkID8gW2B2YXVsdD0ke3Jlc3RhcnRWYXVsdElkfWBdIDogW10pLCAnZXZhbCcsICdjb2RlPVwiMVwiJ107XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVPYnNpZGlhblJ1bm5pbmdBbmRSZXRyeShjb21tYW5kLCB2YXVsdFBhdGgpO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIGFuIGV4cHJlc3Npb24sIHdyaXRlcyB0aGUgcmVzdWx0IHRvIGEgSlNPTiBmaWxlLlxuICpcbiAqIFNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgZXhlY3V0ZWQgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGludm9jYXRpb24gcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludm9rZUFuZFdyaXRlUmVzdWx0KHBhcmFtczogSW52b2tlQW5kV3JpdGVSZXN1bHRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyB3cml0ZUZpbGU6IHdyaXRlUmVzdWx0RmlsZSB9ID0gd2luZG93LnJlcXVpcmUoJ25vZGU6ZnMvcHJvbWlzZXMnKSBhcyB0eXBlb2YgaW1wb3J0KCdub2RlOmZzL3Byb21pc2VzJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFyYW1zLmV2YWx1YXRlKCk7XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB3cml0ZVJlc3VsdEZpbGUocGFyYW1zLnJlc3VsdFBhdGgsIEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3VuZGVmaW5lZCcsIHZhbHVlOiAnJyB9KSk7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIGF3YWl0IHdyaXRlUmVzdWx0RmlsZShwYXJhbXMucmVzdWx0UGF0aCwgSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAnbnVsbCcsIHZhbHVlOiAnJyB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tYmFzZS10by1zdHJpbmcgLS0gSW50ZW50aW9uYWw6IHJlc3VsdCBpcyBhbiBhcmJpdHJhcnkgdmFsdWUgZnJvbSB0aGUgZXZhbHVhdGVkIGV4cHJlc3Npb24uXG4gICAgICBhd2FpdCB3cml0ZVJlc3VsdEZpbGUocGFyYW1zLnJlc3VsdFBhdGgsIEpTT04uc3RyaW5naWZ5KHsgdmFsdWU6IFN0cmluZyhyZXN1bHQpIH0pKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGF3YWl0IHdyaXRlUmVzdWx0RmlsZShwYXJhbXMucmVzdWx0UGF0aCwgSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAnZXJyb3InLCB2YWx1ZTogcGFyYW1zLnNlcmlhbGl6ZUVycm9yKGVycikgfSkpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGEgZGV0YWlsZWQgZGlhZ25vc3RpYyBzdHJpbmcgZm9yIHRoZSBcIlNjcmlwdCBkaWQgbm90IGV4ZWN1dGVcIiBlcnJvci5cbiAqXG4gKiBQZXJmb3JtcyBsaXZlIGVudmlyb25tZW50IGNoZWNrcyAocHJvY2VzcyBsaXN0LCB2YXVsdCByZWdpc3RyeSwgQ0xJIGNvbmZpZylcbiAqIGFuZCBpbmNsdWRlcyB0aGUgY29tbWFuZCwgZXhlYyBvdXRwdXQsIGFuZCBzY3JpcHQgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRpYWdub3N0aWMgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIEEgZm9ybWF0dGVkIGRpYWdub3N0aWMgc3RyaW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZERpYWdub3N0aWNzKHBhcmFtczogQnVpbGREaWFnbm9zdGljc1BhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxpbmVzLnB1c2goYCAgQ29tbWFuZDogJHtwYXJhbXMuY29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIGxpbmVzLnB1c2goYCAgV29ya2luZyBkaXJlY3Rvcnk6ICR7cGFyYW1zLmN3ZH1gKTtcbiAgbGluZXMucHVzaChgICBTY3JpcHQgcGF0aDogJHtwYXJhbXMuc2NyaXB0UGF0aH1gKTtcbiAgbGluZXMucHVzaChgICBFeHBlY3RlZCByZXN1bHQgZmlsZTogJHtwYXJhbXMucmVzdWx0UGF0aH1gKTtcblxuICBpZiAocGFyYW1zLmV4ZWNSZXN1bHQpIHtcbiAgICBsaW5lcy5wdXNoKGAgIEV4aXQgY29kZTogJHtwYXJhbXMuZXhlY1Jlc3VsdC5leGl0Q29kZSA9PT0gbnVsbCA/ICcobnVsbCBcdTIwMTQgcHJvY2VzcyBkaWQgbm90IGV4aXQgbm9ybWFsbHkpJyA6IFN0cmluZyhwYXJhbXMuZXhlY1Jlc3VsdC5leGl0Q29kZSl9YCk7XG4gICAgaWYgKHBhcmFtcy5leGVjUmVzdWx0LmV4aXRTaWduYWwpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgRXhpdCBzaWduYWw6ICR7cGFyYW1zLmV4ZWNSZXN1bHQuZXhpdFNpZ25hbH1gKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5leGVjUmVzdWx0LnN0ZG91dC50cmltKCkpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgc3Rkb3V0OiAke3BhcmFtcy5leGVjUmVzdWx0LnN0ZG91dC50cmltKCl9YCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZXhlY1Jlc3VsdC5zdGRlcnIudHJpbSgpKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgIHN0ZGVycjogJHtwYXJhbXMuZXhlY1Jlc3VsdC5zdGRlcnIudHJpbSgpfWApO1xuICAgIH1cbiAgICBpZiAoIXBhcmFtcy5leGVjUmVzdWx0LnN0ZG91dC50cmltKCkgJiYgIXBhcmFtcy5leGVjUmVzdWx0LnN0ZGVyci50cmltKCkpIHtcbiAgICAgIGxpbmVzLnB1c2goJyAgc3Rkb3V0L3N0ZGVycjogKGVtcHR5KScpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKCcgIGV4ZWMgcmVzdWx0OiAobm90IGF2YWlsYWJsZSBcdTIwMTQgT2JzaWRpYW4gd2FzIGF1dG8tc3RhcnRlZCBhbmQgcmV0cmllZCknKTtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJ0Vudmlyb25tZW50IGNoZWNrczonKTtcbiAgbGluZXMucHVzaChgICBPYnNpZGlhbiBydW5uaW5nOiAke2F3YWl0IGlzT2JzaWRpYW5SdW5uaW5nKCkgPyAneWVzJyA6ICdOTyd9YCk7XG4gIGxpbmVzLnB1c2goYCAgQ0xJIGVuYWJsZWQgaW4gb2JzaWRpYW4uanNvbjogJHtpc0NsaUVuYWJsZWQoKSA/ICd5ZXMnIDogJ05PJ31gKTtcbiAgbGluZXMucHVzaChgICBWYXVsdCByZWdpc3RlcmVkOiAke2lzVmF1bHRSZWdpc3RlcmVkKHBhcmFtcy5jd2QpID8gJ3llcycgOiAnTk8nfWApO1xuICBsaW5lcy5wdXNoKGAgIFNjcmlwdCBmaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKHBhcmFtcy5zY3JpcHRQYXRoKSA/ICd5ZXMnIDogJ25vIChhbHJlYWR5IGNsZWFuZWQgdXApJ31gKTtcbiAgbGluZXMucHVzaChgICBSZXN1bHQgZmlsZSBleGlzdHM6ICR7ZXhpc3RzU3luYyhwYXJhbXMucmVzdWx0UGF0aCkgPyAneWVzJyA6ICdubyd9YCk7XG5cbiAgY29uc3QgcmVnaXN0ZXJlZFZhdWx0cyA9IGdldFJlZ2lzdGVyZWRWYXVsdHMoKTtcbiAgaWYgKHJlZ2lzdGVyZWRWYXVsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgbGluZXMucHVzaCgnICBSZWdpc3RlcmVkIHZhdWx0czogKG5vbmUpJyk7XG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaCgnICBSZWdpc3RlcmVkIHZhdWx0czonKTtcbiAgICBmb3IgKGNvbnN0IHZhdWx0IG9mIHJlZ2lzdGVyZWRWYXVsdHMpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAtICR7dmF1bHQucGF0aH0gKG9wZW46ICR7U3RyaW5nKHZhdWx0Lm9wZW4pfSlgKTtcbiAgICB9XG4gIH1cblxuICBsaW5lcy5wdXNoKGAgIFNjcmlwdCBjb250ZW50OlxcbiR7cGFyYW1zLnNjcmlwdENvbnRlbnR9YCk7XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29udGVudCBvZiBhIHRlbXBvcmFyeSBzY3JpcHQgZmlsZS5cbiAqXG4gKiBTZXJpYWxpemVzIHtAbGluayBpbnZva2VBbmRXcml0ZVJlc3VsdH0gaW50byBhIHNlbGYtY29udGFpbmVkIElJRkUgdGhhdFxuICogZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uLCB3cml0ZXMgdGhlIHJlc3VsdCAob3IgZXJyb3IpIHRvIGByZXN1bHRQYXRoYC5cbiAqXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gKiBAcGFyYW0gcmVzdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByZXN1bHQgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBzY3JpcHQgZmlsZSBjb250ZW50LlxuICovXG5mdW5jdGlvbiBidWlsZFNjcmlwdEZpbGUoZXhwcmVzc2lvbjogc3RyaW5nLCByZXN1bHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmblN0ciA9IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhpbnZva2VBbmRXcml0ZVJlc3VsdCk7XG4gIGNvbnN0IHNlcmlhbGl6ZUVycm9yU3RyID0gZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKHNlcmlhbGl6ZUVycm9yKTtcbiAgY29uc3QgcmVzdWx0UGF0aEpzb24gPSBKU09OLnN0cmluZ2lmeShyZXN1bHRQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKSk7XG4gIHJldHVybiBgKCR7Zm5TdHJ9KSh7IGV2YWx1YXRlOiBhc3luYyAoKSA9PiAoJHtleHByZXNzaW9ufSksIHJlc3VsdFBhdGg6ICR7cmVzdWx0UGF0aEpzb259LCBzZXJpYWxpemVFcnJvcjogJHtzZXJpYWxpemVFcnJvclN0cn0gfSlgO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgc2NyaXB0IGZpbGUgZnJvbSBkaXNrLCBsb2dzIGl0cyBjb250ZW50LCBhbmQgZXhlY3V0ZXMgaXQgdmlhIGBuZXcgRnVuY3Rpb25gLlxuICpcbiAqIFNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgZXhlY3V0ZWQgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICogTXVzdCBOT1QgcmVmZXJlbmNlIGFueSBvdXRlciBzY29wZS5cbiAqXG4gKiBAcGFyYW0gc2NyaXB0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBzY3JpcHQgZmlsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNjcmlwdEZpbGUoc2NyaXB0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZzUHJvbWlzZXMgPSB3aW5kb3cucmVxdWlyZSgnbm9kZTpmcy9wcm9taXNlcycpIGFzIHR5cGVvZiBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGZzUHJvbWlzZXMuYWNjZXNzKHNjcmlwdFBhdGgpO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGZpbGUgbm90IGZvdW5kOiAke3NjcmlwdFBhdGh9YCwgeyBjYXVzZSB9KTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdCA9IGF3YWl0IGZzUHJvbWlzZXMucmVhZEZpbGUoc2NyaXB0UGF0aCwgJ3V0Zi04Jyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlIC0tIERpYWdub3N0aWMgbG9nZ2luZyBpbnNpZGUgT2JzaWRpYW4gcHJvY2Vzczsgbm8gbG9nZ2VyIGF2YWlsYWJsZS5cbiAgY29uc29sZS5kZWJ1ZyhgRXhlY3V0aW5nICR7c2NyaXB0UGF0aH06XFxuJHtzY3JpcHR9YCk7XG5cbiAgbGV0IGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsLCBuby1uZXctZnVuYyAtLSBUaGUgc2NyaXB0IGlzIGEgdHJ1c3RlZCwgc2VsZi1nZW5lcmF0ZWQgSUlGRSBleHByZXNzaW9uLlxuICAgIGZuID0gbmV3IEZ1bmN0aW9uKGByZXR1cm4gJHtzY3JpcHR9YCkgYXMgKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcgJHtzY3JpcHRQYXRofWAsIHsgY2F1c2UgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGZuKCk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBleGVjdXRpbmcgJHtzY3JpcHRQYXRofWAsIHsgY2F1c2UgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb21tYW5kIHRvIGtpbGwgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gKlxuICogQHJldHVybnMgVGhlIHNoZWxsIGNvbW1hbmQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRLaWxsT2JzaWRpYW5Db21tYW5kKCk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuICd0YXNra2lsbCAvSU0gT2JzaWRpYW4uZXhlIC9GJztcbiAgfVxuXG4gIHJldHVybiAncGtpbGwgLWYgT2JzaWRpYW4nO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgdG8gbGF1bmNoIHRoZSBPYnNpZGlhbiBiaW5hcnkuXG4gKlxuICogQHJldHVybnMgVGhlIHNoZWxsIGNvbW1hbmQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRPYnNpZGlhbkxhdW5jaENvbW1hbmQoKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBsb2NhbEFwcERhdGEgPSBwcm9jZXNzLmVudlsnTE9DQUxBUFBEQVRBJ10gPz8gJyc7XG4gICAgcmV0dXJuIGBzdGFydCBcIlwiIFwiJHtsb2NhbEFwcERhdGF9XFxcXFByb2dyYW1zXFxcXE9ic2lkaWFuXFxcXE9ic2lkaWFuLmV4ZVwiYDtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiAnL0FwcGxpY2F0aW9ucy9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW4gJic7XG4gIH1cblxuICByZXR1cm4gJ29ic2lkaWFuICYnO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgdG8gb3BlbiBhIFVSSS5cbiAqXG4gKiBAcGFyYW0gdXJpIC0gVGhlIFVSSSB0byBvcGVuLlxuICogQHJldHVybnMgVGhlIHNoZWxsIGNvbW1hbmQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRPcGVuVXJpQ29tbWFuZCh1cmk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGBzdGFydCBcIlwiIFwiJHt1cml9XCJgO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGBvcGVuIFwiJHt1cml9XCJgO1xuICB9XG5cbiAgcmV0dXJuIGB4ZGctb3BlbiBcIiR7dXJpfVwiYDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgT2JzaWRpYW4gcHJvY2VzcyBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIE9ic2lkaWFuIHByb2Nlc3MgaXMgZm91bmQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5hc3luYyBmdW5jdGlvbiBpc09ic2lkaWFuUnVubmluZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMidcbiAgICA/ICd0YXNrbGlzdCAvRkkgXCJJTUFHRU5BTUUgZXEgT2JzaWRpYW4uZXhlXCIgL05IJ1xuICAgIDogJ3BncmVwIC1mIE9ic2lkaWFuJztcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgcmV0dXJuIG91dHB1dC5pbmNsdWRlcygnT2JzaWRpYW4uZXhlJyk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQudHJpbSgpLmxlbmd0aCA+IDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIE9wZW5zIGEgdmF1bHQgaW4gT2JzaWRpYW4gdXNpbmcgdGhlIGBvYnNpZGlhbjovL29wZW5gIFVSSSBwcm90b2NvbC5cbiAqXG4gKiBUaGlzIHdvcmtzIHdoZXRoZXIgT2JzaWRpYW4gaXMgYWxyZWFkeSBydW5uaW5nIChzaWduYWxzIGl0IHRvIG9wZW4gdGhlIHZhdWx0KVxuICogb3Igbm90IChsYXVuY2hlcyBPYnNpZGlhbiB3aXRoIHRoZSB2YXVsdCkuIFRoZSBVUkkgcHJvdG9jb2wgaXMgaGFuZGxlZCBieSB0aGVcbiAqIE9TLCB3aGljaCByb3V0ZXMgaXQgdG8gdGhlIHJlZ2lzdGVyZWQgT2JzaWRpYW4gaGFuZGxlci5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gb3BlblZhdWx0VmlhVXJpKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHZhdWx0SWQgPSBnZXRWYXVsdElkKHZhdWx0UGF0aCk7XG4gIGlmICghdmF1bHRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG9wZW4gdmF1bHQgdmlhIFVSSTogdmF1bHQgaXMgbm90IHJlZ2lzdGVyZWQgaW4gb2JzaWRpYW4uanNvbjogJHt2YXVsdFBhdGh9YCk7XG4gIH1cbiAgY29uc3QgdXJpID0gYG9ic2lkaWFuOi8vb3Blbj92YXVsdD0ke2VuY29kZVVSSUNvbXBvbmVudCh2YXVsdElkKX1gO1xuICBjb25zdCBjb21tYW5kID0gZ2V0T3BlblVyaUNvbW1hbmQodXJpKTtcbiAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gT3BlbmluZyB2YXVsdCB2aWEgVVJJOiAke3VyaX1gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjKGNvbW1hbmQsIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBVUkkgb3BlbiBmYWlsZWQgKG5vbi1mYXRhbCk6ICR7c2VyaWFsaXplRXJyb3IoZXJyb3IpfWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFTQSxTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsWUFBWTtBQUNyQixPQUFPLGFBQWE7QUFRcEIsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsV0FBVztBQUNwQixTQUFTLG1DQUFtQztBQUM1QyxTQUFTLFlBQVk7QUFDckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxzQkFBc0I7QUFvQi9CLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0sMkNBQTJDO0FBQ2pELE1BQU0scUNBQXFDO0FBQzNDLE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0scUNBQXFDO0FBQzNDLE1BQU0sb0NBQW9DO0FBQzFDLE1BQU0scUNBQXFDO0FBZXBDLE1BQU0sb0JBQWlEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJNUMsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBaUIzQixNQUFhLFNBQVMsWUFBb0IsU0FBZ0Q7QUFDeEYsVUFBTSxjQUFjO0FBQ3BCLFVBQU0sV0FBVyxPQUFPLEtBQUssT0FBTyxDQUFDLEVBQUUsTUFBTSxXQUFXO0FBQ3hELFVBQU0sWUFBWSxLQUFLLE9BQU8sR0FBRyw4QkFB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
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0xJIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBgb2JzaWRpYW4gZXZhbGAgYW5kIG1hbmFnZXNcbiAqIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIG1rZGlyLFxuICByZWFkRmlsZSxcbiAgdW5saW5rLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUgeyBFeGVjUmVzdWx0IH0gZnJvbSAnLi9leGVjLm1qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLm1qcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcgfSBmcm9tICcuL2Z1bmN0aW9uLWV4cHJlc3Npb24ubWpzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLm1qcyc7XG5pbXBvcnQgeyBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQgfSBmcm9tICcuL25hbWVzcGFjZS1ib290c3RyYXAubWpzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL25vb3AubWpzJztcbmltcG9ydCB7XG4gIGVuYWJsZUNsaUluQ29uZmlnLFxuICBnZXRBbnlSZWdpc3RlcmVkVmF1bHRQYXRoLFxuICBnZXRSZWdpc3RlcmVkVmF1bHRzLFxuICBnZXRWYXVsdElkLFxuICBpc0NsaUVuYWJsZWQsXG4gIGlzVmF1bHRPcGVuLFxuICBpc1ZhdWx0UmVnaXN0ZXJlZCxcbiAgcmVnaXN0ZXJWYXVsdEluQ29uZmlnLFxuICByZW1vdmVWYXVsdEZyb21Db25maWdcbn0gZnJvbSAnLi9vYnNpZGlhbi1jb25maWcubWpzJztcbmltcG9ydCB7IHNlcmlhbGl6ZUVycm9yIH0gZnJvbSAnLi9zZXJpYWxpemUtZXJyb3IubWpzJztcblxuaW50ZXJmYWNlIEludm9rZUFuZFdyaXRlUmVzdWx0UGFyYW1zIHtcbiAgZXZhbHVhdGUoKTogUHJvbWlzZTx1bmtub3duPjtcbiAgcmVzdWx0UGF0aDogc3RyaW5nO1xuICBzZXJpYWxpemVFcnJvcihlcnJvcjogdW5rbm93bik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEaXNjcmltaW5hdGVkIGVudmVsb3BlIHdyaXR0ZW4gYnkgdGhlIHRlbXBvcmFyeSBzY3JpcHQgZmlsZS5cbiAqXG4gKiAtIGB7IHZhbHVlOiBzdHJpbmcsIHR5cGU6ICdlcnJvcicgfWAgXHUyMDE0IHRoZSBleHByZXNzaW9uIHRocmV3OyBgdmFsdWVgIGlzIHRoZSBlcnJvciBtZXNzYWdlLlxuICogLSBgeyB2YWx1ZTogJycsIHR5cGU6ICdudWxsJyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gcmV0dXJuZWQgYG51bGxgLlxuICogLSBgeyB2YWx1ZTogJycsIHR5cGU6ICd1bmRlZmluZWQnIH1gIFx1MjAxNCB0aGUgZXhwcmVzc2lvbiByZXR1cm5lZCBgdW5kZWZpbmVkYC5cbiAqIC0gYHsgdmFsdWU6IHN0cmluZyB9YCBcdTIwMTQgdGhlIGV4cHJlc3Npb24gcmV0dXJuZWQgYSBzdHJpbmcgdmFsdWUgKG5vIGB0eXBlYCBmaWVsZCkuXG4gKi9cbnR5cGUgU2NyaXB0UmVzdWx0RW52ZWxvcGUgPVxuICB8IHsgdHlwZTogJ2Vycm9yJyB8ICdudWxsJyB8ICd1bmRlZmluZWQnOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHZhbHVlOiBzdHJpbmcgfTtcblxuY29uc3QgVU5BQkxFX1RPX0ZJTkRfT0JTSURJQU4gPSAndW5hYmxlIHRvIGZpbmQgT2JzaWRpYW4nO1xuY29uc3QgQVVUT19TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwMDA7XG5jb25zdCBWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX0NMT1NFX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBWQVVMVF9FVkFMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTAwMDA7XG5cbmludGVyZmFjZSBCdWlsZERpYWdub3N0aWNzUGFyYW1zIHtcbiAgY29tbWFuZDogc3RyaW5nW107XG4gIGN3ZDogc3RyaW5nO1xuICBleGVjUmVzdWx0OiBFeGVjUmVzdWx0IHwgdW5kZWZpbmVkO1xuICByZXN1bHRQYXRoOiBzdHJpbmc7XG4gIHNjcmlwdENvbnRlbnQ6IHN0cmluZztcbiAgc2NyaXB0UGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRyYW5zcG9ydCB0aGF0IGNvbW11bmljYXRlcyB3aXRoIERlc2t0b3AgT2JzaWRpYW4gdmlhIHRoZSBgb2JzaWRpYW4gZXZhbGAgQ0xJIGNvbW1hbmRcbiAqIGFuZCBtYW5hZ2VzIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICovXG5leHBvcnQgY2xhc3MgRGVza3RvcENsaVRyYW5zcG9ydCBpbXBsZW1lbnRzIE9ic2lkaWFuVHJhbnNwb3J0IHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgdHJhbnNwb3J0IGlzIGZvciBhIG1vYmlsZSBwbGF0Zm9ybS4gQWx3YXlzIGBmYWxzZWAgZm9yIHRoaXMgdHJhbnNwb3J0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBpbnNpZGUgT2JzaWRpYW4gdmlhIGBvYnNpZGlhbiBldmFsYC5cbiAgICpcbiAgICogV3JpdGVzIHRoZSBleHByZXNzaW9uIHRvIGEgdGVtcG9yYXJ5IGAuY2pzYCBmaWxlIGFuZCBleGVjdXRlcyBhIHRpbnlcbiAgICogYHJlcXVpcmUoKS5pbnZva2UoKWAgY2FsbCB2aWEgdGhlIENMSS4gVGhlIHJlc3VsdCBpcyB3cml0dGVuIHRvIGFcbiAgICogYC5yZXN1bHQuanNvbmAgZmlsZSBieSB0aGUgc2NyaXB0LCBhdm9pZGluZyBDTEkgc3Rkb3V0IHNpemUgbGltaXRzXG4gICAqIGFuZCBJUEMgYnVmZmVyIGlzc3Vlcy5cbiAgICpcbiAgICogSGFuZGxlcyBhdXRvLXN0YXJ0OiBpZiBPYnNpZGlhbiBpcyBub3QgcnVubmluZywgbGF1bmNoZXMgaXQgdmlhIFVSSSBwcm90b2NvbFxuICAgKiBhbmQgcmV0cmllcyB1bnRpbCBpdCBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgSmF2YVNjcmlwdCBleHByZXNzaW9uIHRvIGV2YWx1YXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcmVzdWx0IHN0cmluZyAodHJhbnNwb3J0LXNwZWNpZmljIHByZWZpeGVzIHN0cmlwcGVkKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBldmFsdWF0ZShleHByZXNzaW9uOiBzdHJpbmcsIG9wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBTTElDRV9TVEFSVCA9IDI7XG4gICAgY29uc3Qgc2NyaXB0SWQgPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoU0xJQ0VfU1RBUlQpO1xuICAgIGNvbnN0IHNjcmlwdERpciA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IGpvaW4oc2NyaXB0RGlyLCBgJHtzY3JpcHRJZH0uanNgKTtcbiAgICBjb25zdCByZXN1bHRQYXRoID0gam9pbihzY3JpcHREaXIsIGAke3NjcmlwdElkfS5yZXN1bHQuanNvbmApO1xuXG4gICAgYXdhaXQgbWtkaXIoc2NyaXB0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHNjcmlwdENvbnRlbnQgPSBidWlsZFNjcmlwdEZpbGUoZXhwcmVzc2lvbiwgcmVzdWx0UGF0aCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHNjcmlwdFBhdGgsIHNjcmlwdENvbnRlbnQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhZmVTY3JpcHRQYXRoID0gc2NyaXB0UGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICBjb25zdCBjbGlFeHByID0gYCgke2dldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhleGVjdXRlU2NyaXB0RmlsZSl9KSgke0pTT04uc3RyaW5naWZ5KHNhZmVTY3JpcHRQYXRoKX0pYDtcbiAgICAgIGNvbnN0IHZhdWx0SWQgPSBnZXRWYXVsdElkKG9wdGlvbnMuY3dkKTtcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBbJ29ic2lkaWFuJywgLi4uKHZhdWx0SWQgPyBbYHZhdWx0PSR7dmF1bHRJZH1gXSA6IFtdKSwgJ2V2YWwnLCAnLS1hbGxvdy1mb2N1cy1zdGVhbCcsIGBjb2RlPSR7Y2xpRXhwcn1gXTtcblxuICAgICAgbGV0IGV4ZWNSZXN1bHQ6IEV4ZWNSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjUmVzdWx0ID0gYXdhaXQgZXhlYyhjb21tYW5kLCB7XG4gICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICBpc1F1aWV0OiB0cnVlLFxuICAgICAgICAgIHNob3VsZEluY2x1ZGVEZXRhaWxzOiB0cnVlLFxuICAgICAgICAgIC4uLihvcHRpb25zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9KVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFVOQUJMRV9UT19GSU5EX09CU0lESUFOKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlT2JzaWRpYW5SdW5uaW5nQW5kUmV0cnkoY29tbWFuZCwgb3B0aW9ucy5jd2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhpc3RzU3luYyhyZXN1bHRQYXRoKSkge1xuICAgICAgICBjb25zdCBkaWFnbm9zdGljcyA9IGF3YWl0IGJ1aWxkRGlhZ25vc3RpY3Moe1xuICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICBleGVjUmVzdWx0LFxuICAgICAgICAgIHJlc3VsdFBhdGgsXG4gICAgICAgICAgc2NyaXB0Q29udGVudCxcbiAgICAgICAgICBzY3JpcHRQYXRoXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmlwdCBkaWQgbm90IGV4ZWN1dGUgZm9yIHBhdGg6ICR7b3B0aW9ucy5jd2R9XFxuJHtkaWFnbm9zdGljc31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0U3RyID0gYXdhaXQgcmVhZEZpbGUocmVzdWx0UGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBlbnZlbG9wZSA9IEpTT04ucGFyc2UocmVzdWx0U3RyKSBhcyBTY3JpcHRSZXN1bHRFbnZlbG9wZTtcblxuICAgICAgaWYgKCd0eXBlJyBpbiBlbnZlbG9wZSkge1xuICAgICAgICBpZiAoZW52ZWxvcGUudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IGVycm9yIGluIE9ic2lkaWFuIGZvciBwYXRoOiAke29wdGlvbnMuY3dkfTogJHtlbnZlbG9wZS52YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnZlbG9wZS52YWx1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdW5saW5rKHNjcmlwdFBhdGgpLmNhdGNoKG5vb3ApO1xuICAgICAgYXdhaXQgdW5saW5rKHJlc3VsdFBhdGgpLmNhdGNoKG5vb3ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIENMSS1zcGVjaWZpYyBwcmVmbGlnaHQgY2hlY2tzLlxuICAgKlxuICAgKiBWZXJpZmllcyB0aGF0IHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkLCBDTEkgaXMgZW5hYmxlZCBpbiBPYnNpZGlhbiBzZXR0aW5ncyxcbiAgICogYW5kIHRoZSBgb2JzaWRpYW5gIENMSSBiaW5hcnkgaXMgYXZhaWxhYmxlIGluIFBBVEguIElmIHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkXG4gICAqIGJ1dCBub3Qgb3Blbiwgb3BlbnMgaXQgdmlhIFVSSSBwcm90b2NvbCBhbmQgcG9sbHMgdW50aWwgaXQgaXMgcmVhZHkuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZWZsaWdodENoZWNrKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gUnVubmluZyBwcmVmbGlnaHQgY2hlY2sgZm9yIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBpZiAoIWlzVmF1bHRSZWdpc3RlcmVkKHZhdWx0UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFZhdWx0IGlzIG5vdCByZWdpc3RlcmVkIGluIE9ic2lkaWFuOiAke3ZhdWx0UGF0aH0uIFJlZ2lzdGVyIHRoZSB2YXVsdCBmaXJzdCB3aXRoIHJlZ2lzdGVyVmF1bHQoKSBvciBUZW1wVmF1bHQucmVnaXN0ZXIoKS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNDbGlFbmFibGVkKCkpIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIENMSSBpcyBkaXNhYmxlZCBpbiBvYnNpZGlhbi5qc29uLiBFbmFibGluZyBhbmQgcmVzdGFydGluZyBPYnNpZGlhbi4uLicpO1xuICAgICAgZW5hYmxlQ2xpSW5Db25maWcoKTtcbiAgICAgIGF3YWl0IHRoaXMucmVzdGFydE9ic2lkaWFuKHZhdWx0UGF0aCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hc3NlcnRDbGlBdmFpbGFibGUoKTtcblxuICAgIGlmICghaXNWYXVsdE9wZW4odmF1bHRQYXRoKSkge1xuICAgICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVmF1bHQgaXMgcmVnaXN0ZXJlZCBidXQgbm90IG9wZW46ICR7dmF1bHRQYXRofS4gT3BlbmluZyB2aWEgVVJJLi4uYCk7XG4gICAgICBhd2FpdCBvcGVuVmF1bHRWaWFVcmkodmF1bHRQYXRoKTtcbiAgICAgIGF3YWl0IHRoaXMucG9sbFZhdWx0UmVhZHkodmF1bHRQYXRoKTtcbiAgICB9XG5cbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBQcmVmbGlnaHQgY2hlY2sgcGFzc2VkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBFbGVjdHJvbiBJUEMuXG4gICAqXG4gICAqIFVzZXMgYHZhdWx0LW9wZW5gIElQQyB0byByZWdpc3RlciBhbmQgb3BlbiB0aGUgdmF1bHQsIHRoZW4gcG9sbHMgdW50aWxcbiAgICogdGhlIHZhdWx0J3MgQ0xJIGlzIHJlYWR5IGFuZCBgZ2V0QmFzZVBhdGgoKWAgbWF0Y2hlcyBgdmF1bHRQYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCBleGlzdGluZ1ZhdWx0UGF0aCA9IGdldEFueVJlZ2lzdGVyZWRWYXVsdFBhdGgoKTtcblxuICAgIGlmIChleGlzdGluZ1ZhdWx0UGF0aCkge1xuICAgICAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRoaXMsIGV4aXN0aW5nVmF1bHRQYXRoKTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyRXhwciA9IGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy5pcGNTZW5kU3luYygke0pTT04uc3RyaW5naWZ5KHsgYXJnczogW3ZhdWx0UGF0aCwgZmFsc2VdLCBjaGFubmVsOiAndmF1bHQtb3BlbicgfSl9KWA7XG4gICAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKHJlZ2lzdGVyRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRQYXRoIH0pO1xuICAgICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoLCBleGlzdGluZ1ZhdWx0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE5vIGV4aXN0aW5nIHZhdWx0IHJlZ2lzdGVyZWQuIFdyaXRpbmcgdmF1bHQgZW50cnkgZGlyZWN0bHkgdG8gb2JzaWRpYW4uanNvbi4uLicpO1xuICAgICAgcmVnaXN0ZXJWYXVsdEluQ29uZmlnKHZhdWx0UGF0aCk7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCBlbnRyeSB3cml0dGVuLiBPcGVuaW5nIHZhdWx0IHZpYSBVUkkgcHJvdG9jb2wuLi4nKTtcbiAgICAgIGF3YWl0IG9wZW5WYXVsdFZpYVVyaSh2YXVsdFBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5wb2xsVmF1bHRSZWFkeSh2YXVsdFBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5lbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoLCB2YXVsdFBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5kaXNtaXNzVHJ1c3REaWFsb2codmF1bHRQYXRoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnBvbGxWYXVsdFJlYWR5KHZhdWx0UGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgYSB2YXVsdCBmcm9tIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlLlxuICAgKlxuICAgKiBTY2hlZHVsZXMgdGhlIHZhdWx0IHdpbmRvdyB0byBjbG9zZSwgd2FpdHMsIHRoZW4gcmVtb3ZlcyB0aGUgdmF1bHRcbiAgICogZnJvbSB0aGUgcmVnaXN0cnkgdmlhIGB2YXVsdC1yZW1vdmVgIElQQy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5yZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nKGBbY2xpLXRyYW5zcG9ydF0gVW5yZWdpc3RlcmluZyB2YXVsdDogY2xvc2luZyB3aW5kb3cgZm9yICR7dmF1bHRQYXRofS4uLmApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQodGhpcywgdmF1bHRQYXRoKTtcbiAgICAgIGNvbnN0IGRlc3Ryb3lFeHByID0gJ3dpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLmRlc3Ryb3lDdXJyZW50V2luZG93KCknO1xuICAgICAgYXdhaXQgdGhpcy5ldmFsdWF0ZShkZXN0cm95RXhwciwgeyBjd2Q6IHZhdWx0UGF0aCwgdGltZW91dEluTWlsbGlzZWNvbmRzOiBWQVVMVF9FVkFMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0pO1xuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gV2luZG93IGRlc3Ryb3kgY29tbWFuZCBzZW50LicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBXaW5kb3cgZGVzdHJveSBmYWlsZWQgKG5vbi1mYXRhbCk6ICR7c2VyaWFsaXplRXJyb3IoZXJyb3IpfWApO1xuICAgIH1cblxuICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIFdhaXRpbmcgZm9yIHdpbmRvdyB0byBjbG9zZS4uLicpO1xuICAgIGF3YWl0IGRlbGF5KFZBVUxUX0NMT1NFX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBSZW1vdmluZyB2YXVsdCBmcm9tIHJlZ2lzdHJ5Li4uJyk7XG4gICAgY29uc3QgZXhpc3RpbmdWYXVsdEZvclJlbW92YWwgPSBnZXRBbnlSZWdpc3RlcmVkVmF1bHRQYXRoKCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChleGlzdGluZ1ZhdWx0Rm9yUmVtb3ZhbCkge1xuICAgICAgICBhd2FpdCBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQodGhpcywgZXhpc3RpbmdWYXVsdEZvclJlbW92YWwpO1xuICAgICAgICBjb25zdCByZW1vdmVFeHByID0gYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLmlwY1NlbmRTeW5jKCR7SlNPTi5zdHJpbmdpZnkoeyBhcmdzOiBbdmF1bHRQYXRoXSwgY2hhbm5lbDogJ3ZhdWx0LXJlbW92ZScgfSl9KWA7XG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbHVhdGUocmVtb3ZlRXhwciwgeyBjd2Q6IGV4aXN0aW5nVmF1bHRGb3JSZW1vdmFsLCB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IFZBVUxUX0VWQUxfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBObyBleGlzdGluZyB2YXVsdCB0byB0YXJnZXQgZm9yIHJlbW92YWwgSVBDIFx1MjAxNCByZW1vdmluZyBkaXJlY3RseSBmcm9tIG9ic2lkaWFuLmpzb24uJyk7XG4gICAgICAgIHJlbW92ZVZhdWx0RnJvbUNvbmZpZyh2YXVsdFBhdGgpO1xuICAgICAgfVxuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gVmF1bHQgcmVtb3ZlZCBmcm9tIHJlZ2lzdHJ5LicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBWYXVsdCByZWdpc3RyeSByZW1vdmFsIGZhaWxlZCAobm9uLWZhdGFsKTogJHtzZXJpYWxpemVFcnJvcihlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBPYnNpZGlhbiBDTEkgYmluYXJ5IGlzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtIFBBVEguXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFzc2VydENsaUF2YWlsYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21tYW5kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICd3aGVyZS5leGUgb2JzaWRpYW4nIDogJ3doaWNoIG9ic2lkaWFuJztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhjb21tYW5kLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ic2lkaWFuIENMSSBpcyBub3QgYXZhaWxhYmxlLiBFbnN1cmUgT2JzaWRpYW4gaXMgaW5zdGFsbGVkIGFuZCBpdHMgQ0xJIGlzIGluIHlvdXIgUEFUSC4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHRoZSBcIkRvIHlvdSB0cnVzdCB0aGUgYXV0aG9yIG9mIHRoaXMgdmF1bHQ/XCIgZGlhbG9nIGlmIHByZXNlbnQuXG4gICAqXG4gICAqIENsaWNrcyB0aGUgXCJUcnVzdCBhdXRob3IgYW5kIGVuYWJsZSBwbHVnaW5zXCIgYnV0dG9uIChgLm1vZC1jdGFgKSBpbnNpZGUgYW55XG4gICAqIG1vZGFsIHdob3NlIHRleHQgaW5jbHVkZXMgXCJEbyB5b3UgdHJ1c3QgdGhlIGF1dGhvclwiLiBUaGlzIGlzIG5lZWRlZCB3aGVuIGFcbiAgICogdmF1bHQgd2l0aCBjb21tdW5pdHkgcGx1Z2lucyBpcyBvcGVuZWQgd2l0aG91dCBhIHByaW9yIGBlbmFibGUtcGx1Z2luLTxpZD5gXG4gICAqIGVudHJ5IGluIGxvY2FsU3RvcmFnZSAoZS5nLiwgdGhlIHZlcnkgZmlyc3QgdmF1bHQgcmVnaXN0ZXJlZCB2aWEgY29uZmlnIGZpbGUpLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIHZhdWx0IHBhdGggdG8gZXZhbHVhdGUgaW4uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRpc21pc3NUcnVzdERpYWxvZyh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0aGlzLCB2YXVsdFBhdGgpO1xuICAgIGNvbnN0IGRpc21pc3NFeHByID0gYChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBtb2RhbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubW9kYWwtY29udGFpbmVyJyk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobW9kYWxzW2ldLnRleHRDb250ZW50LmluY2x1ZGVzKCdEbyB5b3UgdHJ1c3QgdGhlIGF1dGhvcicpKSB7XG4gICAgICAgICAgdmFyIGJ0biA9IG1vZGFsc1tpXS5xdWVyeVNlbGVjdG9yKCcubW9kLWN0YScpO1xuICAgICAgICAgIGlmIChidG4pIHsgYnRuLmNsaWNrKCk7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KSgpYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV2YWx1YXRlKGRpc21pc3NFeHByLCB7IGN3ZDogdmF1bHRQYXRoIH0pO1xuICAgIGlmIChyZXN1bHQgPT09ICd0cnVlJykge1xuICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gRGlzbWlzc2VkIFwiRG8geW91IHRydXN0IHRoZSBhdXRob3JcIiBkaWFsb2cuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYGVuYWJsZS1wbHVnaW4tPHZhdWx0SWQ+YCBpbiBPYnNpZGlhbidzIGxvY2FsU3RvcmFnZSB0byBwcmV2ZW50XG4gICAqIHRoZSBcIkRvIHlvdSB0cnVzdCB0aGUgYXV0aG9yIG9mIHRoaXMgdmF1bHQ/XCIgZGlhbG9nIGZyb20gYXBwZWFyaW5nXG4gICAqIHdoZW4gYSB2YXVsdCB3aXRoIGNvbW11bml0eSBwbHVnaW5zIGlzIG9wZW5lZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBgdmF1bHQtb3BlbmAgSVBDIChzbyB0aGUgdmF1bHQgSUQgZXhpc3RzIGluXG4gICAqIGBvYnNpZGlhbi5qc29uYCkgYW5kIGJlZm9yZSB0aGUgbmV3IHZhdWx0IHdpbmRvdyBmaW5pc2hlcyBsb2FkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICogQHBhcmFtIGV2YWxUYXJnZXRWYXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCB0byB1c2UgYXMgZXZhbCB0YXJnZXQgKGFuIGV4aXN0aW5nLCBsb2FkZWQgdmF1bHQpLlxuICAgKiAgIGxvY2FsU3RvcmFnZSBpcyBzaGFyZWQgYWNyb3NzIGFsbCBPYnNpZGlhbiB3aW5kb3dzIChzYW1lIEVsZWN0cm9uIG9yaWdpbiksIHNvIHRoZVxuICAgKiAgIGBsb2NhbFN0b3JhZ2Uuc2V0SXRlbWAgY2FsbCBjYW4gcnVuIGluIGFueSBsb2FkZWQgdmF1bHQgd2luZG93LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbmFibGVQbHVnaW5zSW5Mb2NhbFN0b3JhZ2UodmF1bHRQYXRoOiBzdHJpbmcsIGV2YWxUYXJnZXRWYXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhdWx0SWQgPSBnZXRWYXVsdElkKHZhdWx0UGF0aCk7XG4gICAgaWYgKCF2YXVsdElkKSB7XG4gICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBDb3VsZCBub3QgZmluZCB2YXVsdCBJRCBcdTIwMTQgc2tpcHBpbmcgbG9jYWxTdG9yYWdlIHRydXN0IGZsYWcuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRoaXMsIGV2YWxUYXJnZXRWYXVsdFBhdGgpO1xuICAgIGNvbnN0IGVuYWJsZUV4cHIgPSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmcuc2V0TG9jYWxTdG9yYWdlSXRlbSgke0pTT04uc3RyaW5naWZ5KHsga2V5OiBgZW5hYmxlLXBsdWdpbi0ke3ZhdWx0SWR9YCwgdmFsdWU6ICd0cnVlJyB9KX0pYDtcbiAgICBhd2FpdCB0aGlzLmV2YWx1YXRlKGVuYWJsZUV4cHIsIHsgY3dkOiBldmFsVGFyZ2V0VmF1bHRQYXRoIH0pO1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFNldCBlbmFibGUtcGx1Z2luLSR7dmF1bHRJZH0gaW4gbG9jYWxTdG9yYWdlLmApO1xuICB9XG5cbiAgLyoqXG4gICAqIExhdW5jaGVzIE9ic2lkaWFuIGJpbmFyeSBhbmQgcmV0cmllcyB0aGUgZXZhbCB1bnRpbCBpdCByZXNwb25kcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgQ0xJIGNvbW1hbmQgYXJyYXkgdG8gcmV0cnkuXG4gICAqIEBwYXJhbSBjd2QgLSBUaGUgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZU9ic2lkaWFuUnVubmluZ0FuZFJldHJ5KGNvbW1hbmQ6IHN0cmluZ1tdLCBjd2Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE9ic2lkaWFuIGlzIG5vdCBydW5uaW5nLiBTdGFydGluZyBPYnNpZGlhbi4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoZ2V0T2JzaWRpYW5MYXVuY2hDb21tYW5kKCksIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFRoZSBsYXVuY2ggY29tbWFuZCBtYXkgZmFpbCBvbiBzb21lIHN5c3RlbXMgXHUyMDE0IHdlJ2xsIHN0aWxsIHRyeSBwb2xsaW5nLlxuICAgIH1cblxuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFBvbGxpbmcgZm9yIE9ic2lkaWFuIENMSSAodGltZW91dD0ke1N0cmluZyhBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcykuLi5gKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGF3YWl0IGRlbGF5KEFVVE9fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXhlYyhjb21tYW5kLCB7IGN3ZCwgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICAgICAgbG9nKCdbY2xpLXRyYW5zcG9ydF0gT2JzaWRpYW4gQ0xJIHJlc3BvbmRlZC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgaWYgKCFtZXNzYWdlLmluY2x1ZGVzKFVOQUJMRV9UT19GSU5EX09CU0lESUFOKSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGxvZygnW2NsaS10cmFuc3BvcnRdIE9ic2lkaWFuIG5vdCByZWFkeSB5ZXQsIHJldHJ5aW5nLi4uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBPYnNpZGlhbiBkaWQgbm90IHN0YXJ0IHdpdGhpbiAke1N0cmluZyhBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xscyB1bnRpbCB0aGUgdmF1bHQgaXMgcmVhZHkgYW5kIHJlc3BvbmRpbmcgdG8gZXZhbCBjYWxscy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBvbGxWYXVsdFJlYWR5KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcG9sbEV4cHIgPSAnd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmcucG9sbFZhdWx0QmFzZVBhdGgoKSc7XG5cbiAgICBsb2coYFtjbGktdHJhbnNwb3J0XSBQb2xsaW5nIGZvciB2YXVsdCByZWFkaW5lc3MgKHRpbWVvdXQ9JHtTdHJpbmcoVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICBsZXQgaXNCb290c3RyYXBwZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWlzQm9vdHN0cmFwcGVkKSB7XG4gICAgICAgICAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRoaXMsIHZhdWx0UGF0aCk7XG4gICAgICAgICAgaXNCb290c3RyYXBwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gYXdhaXQgdGhpcy5ldmFsdWF0ZShwb2xsRXhwciwgeyBjd2Q6IHZhdWx0UGF0aCB9KTtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UoYmFzZVBhdGgpID09PSB2YXVsdFBhdGgpIHtcbiAgICAgICAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBWYXVsdCBpcyByZWFkeS4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBWYXVsdCBub3QgcmVhZHkgeWV0IFx1MjAxNCBuYW1lc3BhY2UgbWF5IG5vdCBiZSBib290c3RyYXBwZWQgeWV0IGVpdGhlci5cbiAgICAgICAgaXNCb290c3RyYXBwZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGRlbGF5KFZBVUxUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBhdCAke3ZhdWx0UGF0aH0gZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zYCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdGFydHMgT2JzaWRpYW4gYnkga2lsbGluZyB0aGUgcnVubmluZyBwcm9jZXNzIGFuZCByZWxhdW5jaGluZyBpdC5cbiAgICpcbiAgICogVXNlZCB3aGVuIGEgY29uZmlnIGNoYW5nZSAobGlrZSBlbmFibGluZyBDTEkpIHJlcXVpcmVzIGEgcmVzdGFydCB0byB0YWtlIGVmZmVjdC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSB2YXVsdCBwYXRoIHRvIHVzZSBmb3IgcG9sbGluZyBhZnRlciByZXN0YXJ0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0T2JzaWRpYW4odmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2coJ1tjbGktdHJhbnNwb3J0XSBLaWxsaW5nIE9ic2lkaWFuIHByb2Nlc3MuLi4nKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyhnZXRLaWxsT2JzaWRpYW5Db21tYW5kKCksIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFByb2Nlc3MgbWF5IG5vdCBiZSBydW5uaW5nIFx1MjAxNCB0aGF0J3MgZmluZS5cbiAgICB9XG5cbiAgICBhd2FpdCBkZWxheShWQVVMVF9DTE9TRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgY29uc3QgcmVzdGFydFZhdWx0SWQgPSBnZXRWYXVsdElkKHZhdWx0UGF0aCk7XG4gICAgY29uc3QgY29tbWFuZCA9IFsnb2JzaWRpYW4nLCAuLi4ocmVzdGFydFZhdWx0SWQgPyBbYHZhdWx0PSR7cmVzdGFydFZhdWx0SWR9YF0gOiBbXSksICdldmFsJywgJ2NvZGU9XCIxXCInXTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZU9ic2lkaWFuUnVubmluZ0FuZFJldHJ5KGNvbW1hbmQsIHZhdWx0UGF0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgYW4gZXhwcmVzc2lvbiwgd3JpdGVzIHRoZSByZXN1bHQgdG8gYSBKU09OIGZpbGUuXG4gKlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgaW52b2NhdGlvbiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52b2tlQW5kV3JpdGVSZXN1bHQocGFyYW1zOiBJbnZva2VBbmRXcml0ZVJlc3VsdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHdyaXRlRmlsZTogd3JpdGVSZXN1bHRGaWxlIH0gPSB3aW5kb3cucmVxdWlyZSgnbm9kZTpmcy9wcm9taXNlcycpIGFzIHR5cGVvZiBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXJhbXMuZXZhbHVhdGUoKTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGF3YWl0IHdyaXRlUmVzdWx0RmlsZShwYXJhbXMucmVzdWx0UGF0aCwgSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAndW5kZWZpbmVkJywgdmFsdWU6ICcnIH0pKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgYXdhaXQgd3JpdGVSZXN1bHRGaWxlKHBhcmFtcy5yZXN1bHRQYXRoLCBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdudWxsJywgdmFsdWU6ICcnIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1iYXNlLXRvLXN0cmluZyAtLSBJbnRlbnRpb25hbDogcmVzdWx0IGlzIGFuIGFyYml0cmFyeSB2YWx1ZSBmcm9tIHRoZSBldmFsdWF0ZWQgZXhwcmVzc2lvbi5cbiAgICAgIGF3YWl0IHdyaXRlUmVzdWx0RmlsZShwYXJhbXMucmVzdWx0UGF0aCwgSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZTogU3RyaW5nKHJlc3VsdCkgfSkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYXdhaXQgd3JpdGVSZXN1bHRGaWxlKHBhcmFtcy5yZXN1bHRQYXRoLCBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdlcnJvcicsIHZhbHVlOiBwYXJhbXMuc2VyaWFsaXplRXJyb3IoZXJyKSB9KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBkZXRhaWxlZCBkaWFnbm9zdGljIHN0cmluZyBmb3IgdGhlIFwiU2NyaXB0IGRpZCBub3QgZXhlY3V0ZVwiIGVycm9yLlxuICpcbiAqIFBlcmZvcm1zIGxpdmUgZW52aXJvbm1lbnQgY2hlY2tzIChwcm9jZXNzIGxpc3QsIHZhdWx0IHJlZ2lzdHJ5LCBDTEkgY29uZmlnKVxuICogYW5kIGluY2x1ZGVzIHRoZSBjb21tYW5kLCBleGVjIG91dHB1dCwgYW5kIHNjcmlwdCBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGlhZ25vc3RpYyBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSBmb3JtYXR0ZWQgZGlhZ25vc3RpYyBzdHJpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkRGlhZ25vc3RpY3MocGFyYW1zOiBCdWlsZERpYWdub3N0aWNzUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgbGluZXMucHVzaChgICBDb21tYW5kOiAke3BhcmFtcy5jb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgbGluZXMucHVzaChgICBXb3JraW5nIGRpcmVjdG9yeTogJHtwYXJhbXMuY3dkfWApO1xuICBsaW5lcy5wdXNoKGAgIFNjcmlwdCBwYXRoOiAke3BhcmFtcy5zY3JpcHRQYXRofWApO1xuICBsaW5lcy5wdXNoKGAgIEV4cGVjdGVkIHJlc3VsdCBmaWxlOiAke3BhcmFtcy5yZXN1bHRQYXRofWApO1xuXG4gIGlmIChwYXJhbXMuZXhlY1Jlc3VsdCkge1xuICAgIGxpbmVzLnB1c2goYCAgRXhpdCBjb2RlOiAke3BhcmFtcy5leGVjUmVzdWx0LmV4aXRDb2RlID09PSBudWxsID8gJyhudWxsIFx1MjAxNCBwcm9jZXNzIGRpZCBub3QgZXhpdCBub3JtYWxseSknIDogU3RyaW5nKHBhcmFtcy5leGVjUmVzdWx0LmV4aXRDb2RlKX1gKTtcbiAgICBpZiAocGFyYW1zLmV4ZWNSZXN1bHQuZXhpdFNpZ25hbCkge1xuICAgICAgbGluZXMucHVzaChgICBFeGl0IHNpZ25hbDogJHtwYXJhbXMuZXhlY1Jlc3VsdC5leGl0U2lnbmFsfWApO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmV4ZWNSZXN1bHQuc3Rkb3V0LnRyaW0oKSkge1xuICAgICAgbGluZXMucHVzaChgICBzdGRvdXQ6ICR7cGFyYW1zLmV4ZWNSZXN1bHQuc3Rkb3V0LnRyaW0oKX1gKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5leGVjUmVzdWx0LnN0ZGVyci50cmltKCkpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgc3RkZXJyOiAke3BhcmFtcy5leGVjUmVzdWx0LnN0ZGVyci50cmltKCl9YCk7XG4gICAgfVxuICAgIGlmICghcGFyYW1zLmV4ZWNSZXN1bHQuc3Rkb3V0LnRyaW0oKSAmJiAhcGFyYW1zLmV4ZWNSZXN1bHQuc3RkZXJyLnRyaW0oKSkge1xuICAgICAgbGluZXMucHVzaCgnICBzdGRvdXQvc3RkZXJyOiAoZW1wdHkpJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goJyAgZXhlYyByZXN1bHQ6IChub3QgYXZhaWxhYmxlIFx1MjAxNCBPYnNpZGlhbiB3YXMgYXV0by1zdGFydGVkIGFuZCByZXRyaWVkKScpO1xuICB9XG5cbiAgbGluZXMucHVzaCgnRW52aXJvbm1lbnQgY2hlY2tzOicpO1xuICBsaW5lcy5wdXNoKGAgIE9ic2lkaWFuIHJ1bm5pbmc6ICR7YXdhaXQgaXNPYnNpZGlhblJ1bm5pbmcoKSA/ICd5ZXMnIDogJ05PJ31gKTtcbiAgbGluZXMucHVzaChgICBDTEkgZW5hYmxlZCBpbiBvYnNpZGlhbi5qc29uOiAke2lzQ2xpRW5hYmxlZCgpID8gJ3llcycgOiAnTk8nfWApO1xuICBsaW5lcy5wdXNoKGAgIFZhdWx0IHJlZ2lzdGVyZWQ6ICR7aXNWYXVsdFJlZ2lzdGVyZWQocGFyYW1zLmN3ZCkgPyAneWVzJyA6ICdOTyd9YCk7XG4gIGxpbmVzLnB1c2goYCAgU2NyaXB0IGZpbGUgZXhpc3RzOiAke2V4aXN0c1N5bmMocGFyYW1zLnNjcmlwdFBhdGgpID8gJ3llcycgOiAnbm8gKGFscmVhZHkgY2xlYW5lZCB1cCknfWApO1xuICBsaW5lcy5wdXNoKGAgIFJlc3VsdCBmaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKHBhcmFtcy5yZXN1bHRQYXRoKSA/ICd5ZXMnIDogJ25vJ31gKTtcblxuICBjb25zdCByZWdpc3RlcmVkVmF1bHRzID0gZ2V0UmVnaXN0ZXJlZFZhdWx0cygpO1xuICBpZiAocmVnaXN0ZXJlZFZhdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICBsaW5lcy5wdXNoKCcgIFJlZ2lzdGVyZWQgdmF1bHRzOiAobm9uZSknKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKCcgIFJlZ2lzdGVyZWQgdmF1bHRzOicpO1xuICAgIGZvciAoY29uc3QgdmF1bHQgb2YgcmVnaXN0ZXJlZFZhdWx0cykge1xuICAgICAgbGluZXMucHVzaChgICAgIC0gJHt2YXVsdC5wYXRofSAob3BlbjogJHtTdHJpbmcodmF1bHQub3Blbil9KWApO1xuICAgIH1cbiAgfVxuXG4gIGxpbmVzLnB1c2goYCAgU2NyaXB0IGNvbnRlbnQ6XFxuJHtwYXJhbXMuc2NyaXB0Q29udGVudH1gKTtcblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb250ZW50IG9mIGEgdGVtcG9yYXJ5IHNjcmlwdCBmaWxlLlxuICpcbiAqIFNlcmlhbGl6ZXMge0BsaW5rIGludm9rZUFuZFdyaXRlUmVzdWx0fSBpbnRvIGEgc2VsZi1jb250YWluZWQgSUlGRSB0aGF0XG4gKiBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24sIHdyaXRlcyB0aGUgcmVzdWx0IChvciBlcnJvcikgdG8gYHJlc3VsdFBhdGhgLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSByZXN1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHJlc3VsdCBmaWxlLlxuICogQHJldHVybnMgVGhlIHNjcmlwdCBmaWxlIGNvbnRlbnQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2NyaXB0RmlsZShleHByZXNzaW9uOiBzdHJpbmcsIHJlc3VsdFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGZuU3RyID0gZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKGludm9rZUFuZFdyaXRlUmVzdWx0KTtcbiAgY29uc3Qgc2VyaWFsaXplRXJyb3JTdHIgPSBnZXRGdW5jdGlvbkV4cHJlc3Npb25TdHJpbmcoc2VyaWFsaXplRXJyb3IpO1xuICBjb25zdCByZXN1bHRQYXRoSnNvbiA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdFBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpKTtcbiAgcmV0dXJuIGAoJHtmblN0cn0pKHsgZXZhbHVhdGU6IGFzeW5jICgpID0+ICgke2V4cHJlc3Npb259KSwgcmVzdWx0UGF0aDogJHtyZXN1bHRQYXRoSnNvbn0sIHNlcmlhbGl6ZUVycm9yOiAke3NlcmlhbGl6ZUVycm9yU3RyfSB9KWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVhZHMgYSBzY3JpcHQgZmlsZSBmcm9tIGRpc2ssIGxvZ3MgaXRzIGNvbnRlbnQsIGFuZCBleGVjdXRlcyBpdCB2aWEgYG5ldyBGdW5jdGlvbmAuXG4gKlxuICogU2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZCBleGVjdXRlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuXG4gKiBNdXN0IE5PVCByZWZlcmVuY2UgYW55IG91dGVyIHNjb3BlLlxuICpcbiAqIEBwYXJhbSBzY3JpcHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHNjcmlwdCBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlU2NyaXB0RmlsZShzY3JpcHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZnNQcm9taXNlcyA9IHdpbmRvdy5yZXF1aXJlKCdub2RlOmZzL3Byb21pc2VzJykgYXMgdHlwZW9mIGltcG9ydCgnbm9kZTpmcy9wcm9taXNlcycpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZnNQcm9taXNlcy5hY2Nlc3Moc2NyaXB0UGF0aCk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTY3JpcHQgZmlsZSBub3QgZm91bmQ6ICR7c2NyaXB0UGF0aH1gLCB7IGNhdXNlIH0pO1xuICB9XG5cbiAgY29uc3Qgc2NyaXB0ID0gYXdhaXQgZnNQcm9taXNlcy5yZWFkRmlsZShzY3JpcHRQYXRoLCAndXRmLTgnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gRGlhZ25vc3RpYyBsb2dnaW5nIGluc2lkZSBPYnNpZGlhbiBwcm9jZXNzOyBubyBsb2dnZXIgYXZhaWxhYmxlLlxuICBjb25zb2xlLmRlYnVnKGBFeGVjdXRpbmcgJHtzY3JpcHRQYXRofTpcXG4ke3NjcmlwdH1gKTtcblxuICBsZXQgZm46ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWwsIG5vLW5ldy1mdW5jIC0tIFRoZSBzY3JpcHQgaXMgYSB0cnVzdGVkLCBzZWxmLWdlbmVyYXRlZCBJSUZFIGV4cHJlc3Npb24uXG4gICAgZm4gPSBuZXcgRnVuY3Rpb24oYHJldHVybiAke3NjcmlwdH1gKSBhcyAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgcGFyc2luZyAke3NjcmlwdFBhdGh9YCwgeyBjYXVzZSB9KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZm4oKTtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGV4ZWN1dGluZyAke3NjcmlwdFBhdGh9YCwgeyBjYXVzZSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgdG8ga2lsbCB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldEtpbGxPYnNpZGlhbkNvbW1hbmQoKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gJ3Rhc2traWxsIC9JTSBPYnNpZGlhbi5leGUgL0YnO1xuICB9XG5cbiAgcmV0dXJuICdwa2lsbCAtZiBPYnNpZGlhbic7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBsYXVuY2ggdGhlIE9ic2lkaWFuIGJpbmFyeS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCgpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/PyAnJztcbiAgICByZXR1cm4gYHN0YXJ0IFwiXCIgXCIke2xvY2FsQXBwRGF0YX1cXFxcUHJvZ3JhbXNcXFxcT2JzaWRpYW5cXFxcT2JzaWRpYW4uZXhlXCJgO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbiAmJztcbiAgfVxuXG4gIHJldHVybiAnb2JzaWRpYW4gJic7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBvcGVuIGEgVVJJLlxuICpcbiAqIEBwYXJhbSB1cmkgLSBUaGUgVVJJIHRvIG9wZW4uXG4gKiBAcmV0dXJucyBUaGUgc2hlbGwgY29tbWFuZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldE9wZW5VcmlDb21tYW5kKHVyaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gYHN0YXJ0IFwiXCIgXCIke3VyaX1cImA7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gYG9wZW4gXCIke3VyaX1cImA7XG4gIH1cblxuICByZXR1cm4gYHhkZy1vcGVuIFwiJHt1cml9XCJgO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBPYnNpZGlhbiBwcm9jZXNzIGlzIGN1cnJlbnRseSBydW5uaW5nLlxuICpcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgT2JzaWRpYW4gcHJvY2VzcyBpcyBmb3VuZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzT2JzaWRpYW5SdW5uaW5nKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBjb21tYW5kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICAgID8gJ3Rhc2tsaXN0IC9GSSBcIklNQUdFTkFNRSBlcSBPYnNpZGlhbi5leGVcIiAvTkgnXG4gICAgOiAncGdyZXAgLWYgT2JzaWRpYW4nO1xuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGV4ZWMoY29tbWFuZCwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICByZXR1cm4gb3V0cHV0LmluY2x1ZGVzKCdPYnNpZGlhbi5leGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC50cmltKCkubGVuZ3RoID4gMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogT3BlbnMgYSB2YXVsdCBpbiBPYnNpZGlhbiB1c2luZyB0aGUgYG9ic2lkaWFuOi8vb3BlbmAgVVJJIHByb3RvY29sLlxuICpcbiAqIFRoaXMgd29ya3Mgd2hldGhlciBPYnNpZGlhbiBpcyBhbHJlYWR5IHJ1bm5pbmcgKHNpZ25hbHMgaXQgdG8gb3BlbiB0aGUgdmF1bHQpXG4gKiBvciBub3QgKGxhdW5jaGVzIE9ic2lkaWFuIHdpdGggdGhlIHZhdWx0KS4gVGhlIFVSSSBwcm90b2NvbCBpcyBoYW5kbGVkIGJ5IHRoZVxuICogT1MsIHdoaWNoIHJvdXRlcyBpdCB0byB0aGUgcmVnaXN0ZXJlZCBPYnNpZGlhbiBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICovXG5hc3luYyBmdW5jdGlvbiBvcGVuVmF1bHRWaWFVcmkodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdmF1bHRJZCA9IGdldFZhdWx0SWQodmF1bHRQYXRoKTtcbiAgaWYgKCF2YXVsdElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3BlbiB2YXVsdCB2aWEgVVJJOiB2YXVsdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiBvYnNpZGlhbi5qc29uOiAke3ZhdWx0UGF0aH1gKTtcbiAgfVxuICBjb25zdCB1cmkgPSBgb2JzaWRpYW46Ly9vcGVuP3ZhdWx0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhdWx0SWQpfWA7XG4gIGNvbnN0IGNvbW1hbmQgPSBnZXRPcGVuVXJpQ29tbWFuZCh1cmkpO1xuICBsb2coYFtjbGktdHJhbnNwb3J0XSBPcGVuaW5nIHZhdWx0IHZpYSBVUkk6ICR7dXJpfWApO1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgeyBpc1F1aWV0OiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZyhgW2NsaS10cmFuc3BvcnRdIFVSSSBvcGVuIGZhaWxlZCAobm9uLWZhdGFsKTogJHtzZXJpYWxpemVFcnJvcihlcnJvcil9YCk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQVNBLFNBQVMsa0JBQWtCO0FBQzNCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGNBQWM7QUFDdkIsU0FBUyxZQUFZO0FBQ3JCLE9BQU8sYUFBYTtBQVFwQixTQUFTLFlBQVk7QUFDckIsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsWUFBWTtBQUNyQjtBQUFBLEVBQ0U7QUFB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
|
|
Binary file
|
package/package.json
CHANGED
|
Binary file
|