@pipeline-builder/pipeline-manager 4.5.3 → 4.5.4

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.
Files changed (57) hide show
  1. package/README.md +61 -37
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +13 -7
  4. package/dist/commands/audit-stacks.d.ts +42 -1
  5. package/dist/commands/audit-stacks.d.ts.map +1 -1
  6. package/dist/commands/audit-stacks.js +104 -23
  7. package/dist/commands/audit-tokens.d.ts.map +1 -1
  8. package/dist/commands/audit-tokens.js +3 -4
  9. package/dist/commands/create-pat.d.ts.map +1 -1
  10. package/dist/commands/create-pat.js +9 -6
  11. package/dist/commands/login.d.ts +3 -2
  12. package/dist/commands/login.d.ts.map +1 -1
  13. package/dist/commands/login.js +19 -10
  14. package/dist/commands/logout.d.ts +24 -0
  15. package/dist/commands/logout.d.ts.map +1 -0
  16. package/dist/commands/logout.js +105 -0
  17. package/dist/commands/org-export.js +2 -2
  18. package/dist/commands/pipeline-remove.d.ts +26 -0
  19. package/dist/commands/pipeline-remove.d.ts.map +1 -0
  20. package/dist/commands/pipeline-remove.js +84 -0
  21. package/dist/commands/register.d.ts.map +1 -1
  22. package/dist/commands/register.js +3 -4
  23. package/dist/commands/status.d.ts +5 -2
  24. package/dist/commands/status.d.ts.map +1 -1
  25. package/dist/commands/status.js +65 -25
  26. package/dist/commands/toolchain.d.ts.map +1 -1
  27. package/dist/commands/toolchain.js +4 -3
  28. package/dist/commands/validate-templates.d.ts.map +1 -1
  29. package/dist/commands/validate-templates.js +4 -5
  30. package/dist/config/cli.constants.d.ts +8 -0
  31. package/dist/config/cli.constants.d.ts.map +1 -1
  32. package/dist/config/cli.constants.js +21 -2
  33. package/dist/types/plugin.d.ts +0 -6
  34. package/dist/types/plugin.d.ts.map +1 -1
  35. package/dist/types/plugin.js +1 -1
  36. package/dist/utils/command-utils.d.ts +13 -0
  37. package/dist/utils/command-utils.d.ts.map +1 -1
  38. package/dist/utils/command-utils.js +31 -17
  39. package/dist/utils/config-loader.d.ts +2 -1
  40. package/dist/utils/config-loader.d.ts.map +1 -1
  41. package/dist/utils/config-loader.js +14 -4
  42. package/dist/utils/credential-store.d.ts +9 -1
  43. package/dist/utils/credential-store.d.ts.map +1 -1
  44. package/dist/utils/credential-store.js +21 -2
  45. package/dist/utils/error-handler.d.ts +10 -1
  46. package/dist/utils/error-handler.d.ts.map +1 -1
  47. package/dist/utils/error-handler.js +20 -8
  48. package/dist/utils/plugin-resolver.d.ts +0 -2
  49. package/dist/utils/plugin-resolver.d.ts.map +1 -1
  50. package/dist/utils/plugin-resolver.js +3 -11
  51. package/dist/utils/response-utils.d.ts +11 -0
  52. package/dist/utils/response-utils.d.ts.map +1 -1
  53. package/dist/utils/response-utils.js +23 -1
  54. package/dist/utils/toolchain.d.ts +0 -2
  55. package/dist/utils/toolchain.d.ts.map +1 -1
  56. package/dist/utils/toolchain.js +4 -5
  57. package/package.json +4 -4
@@ -63,6 +63,21 @@ function writeStore(store) {
63
63
  fs.writeFileSync(tmp, `${JSON.stringify(store, null, 2)}\n`, { mode: 0o600 });
64
64
  fs.renameSync(tmp, STORE_FILE);
65
65
  }
66
+ /** The base URL in the form it is remembered as the active platform. */
67
+ function normalizeBaseUrl(baseUrl) {
68
+ return baseUrl.trim().replace(/\/+$/, '');
69
+ }
70
+ /** The platform the last `auth login` signed in to, or undefined. */
71
+ export function activePlatform() {
72
+ const value = readStore().activePlatform;
73
+ return typeof value === 'string' && value ? value : undefined;
74
+ }
75
+ /** Remember `baseUrl` as the platform later commands talk to. */
76
+ export function setActivePlatform(baseUrl) {
77
+ const store = readStore();
78
+ store.activePlatform = normalizeBaseUrl(baseUrl);
79
+ writeStore(store);
80
+ }
66
81
  /** Persist the session for `baseUrl`, replacing any previous one. */
67
82
  export function saveSession(baseUrl, session) {
68
83
  const store = readStore();
@@ -75,7 +90,11 @@ export function saveSession(baseUrl, session) {
75
90
  export function loadSession(baseUrl) {
76
91
  return readStore().sessions[storeKey(baseUrl)];
77
92
  }
78
- /** Forget the session for `baseUrl` (sign-out, or a refresh the platform rejected). */
93
+ /**
94
+ * Forget the session for `baseUrl` (sign-out, or a refresh the platform
95
+ * rejected). The active platform is kept: it is the platform the person chose,
96
+ * so the next `auth login` (whose `--url` defaults to it) signs back in there.
97
+ */
79
98
  export function clearSession(baseUrl) {
80
99
  const store = readStore();
81
100
  if (!(storeKey(baseUrl) in store.sessions))
@@ -145,4 +164,4 @@ export async function withRefreshLock(fn) {
145
164
  fs.rmSync(REFRESH_LOCK_FILE, { force: true });
146
165
  }
147
166
  }
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1zdG9yZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NyZWRlbnRpYWwtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUUvRCx5RUFBeUU7QUFDekUsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUM7QUFDckMsNkVBQTZFO0FBQzdFLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRWpDLHlFQUF5RTtBQUN6RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFtQjlCLGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FBQyxPQUFlO0lBQy9CLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVB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TSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDcEIsQ0FBQztZQUFTLENBQUM7UUFDVCxJQUFJLElBQUk7WUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBPbi1kaXNrIHNlc3Npb24gc3RvcmUgZm9yIGBhdXRoIGxvZ2luYC5cbiAqXG4gKiBgfi8ucGlwZWxpbmUtbWFuYWdlci9jcmVkZW50aWFscy5qc29uYCwgb3duZXItb25seSAoMDYwMCBmaWxlIGluc2lkZSB0aGUgMDcwMFxuICogZGlyZWN0b3J5IHRoZSBhdWRpdCBsb2cgYWxyZWFkeSBjcmVhdGVzKSwga2V5ZWQgYnkgcGxhdGZvcm0gYmFzZSBVUkwgc28gb25lXG4gKiBtYWNoaW5lIGNhbiBob2xkIHNlc3Npb25zIGZvciBzZXZlcmFsIHBsYXRmb3JtcyBhdCBvbmNlLlxuICpcbiAqIEl0IGhvbGRzIGEgcmVhbCBzZXNzaW9uIOKAlCB0aGUgYWNjZXNzIHRva2VuIEFORCBpdHMgcmVmcmVzaCB0b2tlbiDigJQgYmVjYXVzZVxuICogdGhhdCBpcyB3aGF0IHRoZSBkZXZpY2UgZmxvdyBoYW5kcyBiYWNrIGFuZCB3aGF0IGxldHMgdGhlIENMSSBrZWVwIHdvcmtpbmcgZm9yXG4gKiBkYXlzIHdpdGhvdXQgYW5vdGhlciBicm93c2VyIHJvdW5kIHRyaXAuIE5vdGhpbmcgZWxzZSBhYm91dCB0aGUgYWNjb3VudCBpc1xuICogc3RvcmVkOiBubyBwYXNzd29yZCAodGhlIENMSSBuZXZlciBob2xkcyBvbmUpIGFuZCBubyBpZGVudGlmaWVyLlxuICpcbiAqIFJlc29sdXRpb24gb3JkZXIgZXZlcnl3aGVyZSBlbHNlIGluIHRoZSBDTEkgaXMgdW5jaGFuZ2VkIGluIHNwaXJpdDogYW5cbiAqIGV4cGxpY2l0IGBQTEFURk9STV9UT0tFTmAgaW4gdGhlIGVudmlyb25tZW50IGFsd2F5cyB3aW5zLCBzbyBDSSBrZWVwcyB1c2luZyBhblxuICogYWNjZXNzIGtleSBhbmQgaXMgbmV2ZXIgYWZmZWN0ZWQgYnkgd2hhdGV2ZXIgYSBkZXZlbG9wZXIncyBsYXB0b3AgaGFzIGNhY2hlZC5cbiAqL1xuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuXG5jb25zdCBTVE9SRV9ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLnBpcGVsaW5lLW1hbmFnZXInKTtcbmNvbnN0IFNUT1JFX0ZJTEUgPSBwYXRoLmpvaW4oU1RPUkVfRElSLCAnY3JlZGVudGlhbHMuanNvbicpO1xuY29uc3QgUkVGUkVTSF9MT0NLX0ZJTEUgPSBwYXRoLmpvaW4oU1RPUkVfRElSLCAncmVmcmVzaC5sb2NrJyk7XG5cbi8qKiBBIGxvY2sgb2xkZXIgdGhhbiB0aGlzIGJlbG9uZ3MgdG8gYSBwcm9jZXNzIHRoYXQgZGllZCBtaWQtcmVmcmVzaC4gKi9cbmNvbnN0IFJFRlJFU0hfTE9DS19TVEFMRV9NUyA9IDMwXzAwMDtcbi8qKiBIb3cgbG9uZyBhIHNlY29uZCBwcm9jZXNzIHdhaXRzIGZvciB0aGUgZmlyc3Qgb25lJ3MgcmVmcmVzaCB0byBmaW5pc2guICovXG5jb25zdCBSRUZSRVNIX0xPQ0tfV0FJVF9NUyA9IDE1XzAwMDtcbmNvbnN0IFJFRlJFU0hfTE9DS19QT0xMX01TID0gMTAwO1xuXG4vKiogUmUtYXV0aGVudGljYXRlIHJhdGhlciB0aGFuIGhhbmQgb3V0IGEgdG9rZW4gdGhpcyBjbG9zZSB0byBleHBpcnkuICovXG5jb25zdCBFWFBJUllfU0tFV19NUyA9IDYwXzAwMDtcblxuLyoqIE9uZSBwbGF0Zm9ybSdzIHN0b3JlZCBzZXNzaW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZWRTZXNzaW9uIHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgLyoqIFJvdGF0ZWQgb24gZXZlcnkgcmVmcmVzaDsgYWJzZW50IG9ubHkgaWYgdGhlIHBsYXRmb3JtIHN0b3BwZWQgaXNzdWluZyBvbmUuICovXG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgLyoqIEVwb2NoIG1zIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcy4gKi9cbiAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIC8qKiBUaGUgb3JnIHRoZSBzZXNzaW9uIHdhcyBzY29wZWQgdG8gd2hlbiBpdCB3YXMgc3RvcmVkIChpbmZvcm1hdGlvbmFsKS4gKi9cbiAgb3JnYW5pemF0aW9uSWQ/OiBzdHJpbmc7XG4gIHNhdmVkQXQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN0b3JlRmlsZSB7XG4gIHZlcnNpb246IDE7XG4gIHNlc3Npb25zOiBSZWNvcmQ8c3RyaW5nLCBTdG9yZWRTZXNzaW9uPjtcbn1cblxuLyoqIFdoZXJlIHRoZSBzZXNzaW9ucyBsaXZlIOKAlCBzdXJmYWNlZCBpbiBoZWxwIHRleHQgYW5kIGVycm9ycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVkZW50aWFsU3RvcmVQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBTVE9SRV9GSUxFO1xufVxuXG4vKipcbiAqIFRyYWlsaW5nIHNsYXNoZXMgYW5kIGNhc2UgZGlmZmVyZW5jZXMgaW4gdGhlIGhvc3Qgd291bGQgb3RoZXJ3aXNlIHNwbGl0IG9uZVxuICogcGxhdGZvcm0gaW50byBzZXZlcmFsIGVudHJpZXMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JlS2V5KGJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBiYXNlVXJsLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sICcnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiByZWFkU3RvcmUoKTogU3RvcmVGaWxlIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTVE9SRV9GSUxFLCAndXRmLTgnKSk7XG4gICAgaWYgKHBhcnNlZD8udmVyc2lvbiA9PT0gMSAmJiBwYXJzZWQuc2Vzc2lvbnMgJiYgdHlwZW9mIHBhcnNlZC5zZXNzaW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJzZWQgYXMgU3RvcmVGaWxlO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTWlzc2luZyBvciB1bnJlYWRhYmxlOiB0cmVhdCBhcyBlbXB0eS4gQSBjb3JydXB0IGZpbGUgbXVzdCBub3QgYnJlYWsgZXZlcnlcbiAgICAvLyBjb21tYW5kIOKAlCB0aGUgbmV4dCBzdWNjZXNzZnVsIGxvZ2luIHJld3JpdGVzIGl0LlxuICB9XG4gIHJldHVybiB7IHZlcnNpb246IDEsIHNlc3Npb25zOiB7fSB9O1xufVxuXG5mdW5jdGlvbiB3cml0ZVN0b3JlKHN0b3JlOiBTdG9yZUZpbGUpOiB2b2lkIHtcbiAgZnMubWtkaXJTeW5jKFNUT1JFX0RJUiwgeyByZWN1cnNpdmU6IHRydWUsIG1vZGU6IDBvNzAwIH0pO1xuICAvLyBXcml0ZSB0aHJvdWdoIGEgdGVtcCBmaWxlIHNvIGFuIGludGVycnVwdGVkIHdyaXRlIGNhbid0IGxlYXZlIGEgdHJ1bmNhdGVkXG4gIC8vIHN0b3JlIGJlaGluZCwgYW5kIGNyZWF0ZSBpdCAwNjAwIGZyb20gdGhlIHN0YXJ0IChuZXZlciBicmllZmx5IHdvcmxkLXJlYWRhYmxlKS5cbiAgY29uc3QgdG1wID0gYCR7U1RPUkVfRklMRX0udG1wYDtcbiAgZnMud3JpdGVGaWxlU3luYyh0bXAsIGAke0pTT04uc3RyaW5naWZ5KHN0b3JlLCBudWxsLCAyKX1cXG5gLCB7IG1vZGU6IDBvNjAwIH0pO1xuICBmcy5yZW5hbWVTeW5jKHRtcCwgU1RPUkVfRklMRSk7XG59XG5cbi8qKiBQZXJzaXN0IHRoZSBzZXNzaW9uIGZvciBgYmFzZVVybGAsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgb25lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhdmVTZXNzaW9uKGJhc2VVcmw6IHN0cmluZywgc2Vzc2lvbjogT21pdDxTdG9yZWRTZXNzaW9uLCAnc2F2ZWRBdCc+KTogdm9pZCB7XG4gIGNvbnN0IHN0b3JlID0gcmVhZFN0b3JlKCk7XG4gIHN0b3JlLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXSA9IHsgLi4uc2Vzc2lvbiwgc2F2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH07XG4gIHdyaXRlU3RvcmUoc3RvcmUpO1xuICBwcmludERlYnVnKCdTZXNzaW9uIHN0b3JlZCcsIHsgcGF0aDogU1RPUkVfRklMRSwgcGxhdGZvcm06IHN0b3JlS2V5KGJhc2VVcmwpIH0pO1xufVxuXG4vKiogVGhlIHN0b3JlZCBzZXNzaW9uIGZvciBgYmFzZVVybGAsIG9yIHVuZGVmaW5lZC4gRXhwaXJ5IGlzIE5PVCBjaGVja2VkIGhlcmUg4oCUXG4gKiAgY2FsbGVycyBkZWNpZGUgd2hldGhlciB0byB1c2UsIHJlZnJlc2ggb3IgaWdub3JlIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTZXNzaW9uKGJhc2VVcmw6IHN0cmluZyk6IFN0b3JlZFNlc3Npb24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gcmVhZFN0b3JlKCkuc2Vzc2lvbnNbc3RvcmVLZXkoYmFzZVVybCldO1xufVxuXG4vKiogRm9yZ2V0IHRoZSBzZXNzaW9uIGZvciBgYmFzZVVybGAgKHNpZ24tb3V0LCBvciBhIHJlZnJlc2ggdGhlIHBsYXRmb3JtIHJlamVjdGVkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclNlc3Npb24oYmFzZVVybDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHN0b3JlID0gcmVhZFN0b3JlKCk7XG4gIGlmICghKHN0b3JlS2V5KGJhc2VVcmwpIGluIHN0b3JlLnNlc3Npb25zKSkgcmV0dXJuO1xuICBkZWxldGUgc3RvcmUuc2Vzc2lvbnNbc3RvcmVLZXkoYmFzZVVybCldO1xuICB0cnkge1xuICAgIHdyaXRlU3RvcmUoc3RvcmUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIExvc2luZyB0aGUgYWJpbGl0eSB0byBjbGVhciBhIGRlYWQgc2Vzc2lvbiBpcyBhIG51aXNhbmNlLCBub3QgYSBmYWlsdXJlLlxuICAgIHByaW50V2FybmluZygnQ291bGQgbm90IHVwZGF0ZSB0aGUgc3RvcmVkIGNyZWRlbnRpYWxzJywge1xuICAgICAgcGF0aDogU1RPUkVfRklMRSxcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhlIHN0b3JlZCBhY2Nlc3MgdG9rZW4gaXMgc3RpbGwgdXNhYmxlICh3aXRoIGEgbGl0dGxlIHNsYWNrKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Nlc3Npb25Vc2FibGUoc2Vzc2lvbjogU3RvcmVkU2Vzc2lvbiB8IHVuZGVmaW5lZCk6IHNlc3Npb24gaXMgU3RvcmVkU2Vzc2lvbiB7XG4gIHJldHVybiAhIXNlc3Npb24/LmFjY2Vzc1Rva2VuICYmIHNlc3Npb24uZXhwaXJlc0F0IC0gRVhQSVJZX1NLRVdfTVMgPiBEYXRlLm5vdygpO1xufVxuXG4vKipcbiAqIFJ1biBgZm5gIGhvbGRpbmcgdGhlIG1hY2hpbmUtd2lkZSBSRUZSRVNIIExPQ0sgKGB+Ly5waXBlbGluZS1tYW5hZ2VyL3JlZnJlc2gubG9ja2AsXG4gKiBjcmVhdGVkIGV4Y2x1c2l2ZWx5KS5cbiAqXG4gKiBBIHJlZnJlc2ggdG9rZW4gaXMgc2luZ2xlLXVzZTogdHdvIENMSSBwcm9jZXNzZXMgcmVuZXdpbmcgdGhlIHNhbWUgc3RvcmVkXG4gKiBzZXNzaW9uIGF0IG9uY2UgKGEgc2NyaXB0IGZhbm5pbmcgb3V0IGNvbW1hbmRzLCB0d28gdGVybWluYWxzKSB3b3VsZCBwcmVzZW50XG4gKiB0aGUgc2FtZSB0b2tlbiB0d2ljZSwgYW5kIG91dHNpZGUgdGhlIHBsYXRmb3JtJ3Mgc2hvcnQgcm90YXRpb24gZ3JhY2UgdGhlXG4gKiBzZWNvbmQgdXNlIHJlYWRzIGFzIFJFVVNFIOKAlCB3aGljaCByZXZva2VzIHRoZSBzZXNzaW9uLiBTZXJpYWxpemluZyB0aGUgcmVmcmVzaFxuICogbWVhbnMgdGhlIHNlY29uZCBwcm9jZXNzIHdhaXRzLCB0aGVuIChyZS1yZWFkaW5nIHRoZSBzdG9yZSkgZmluZHMgdGhlIHBhaXIgdGhlXG4gKiBmaXJzdCBvbmUgYWxyZWFkeSBzYXZlZCBpbnN0ZWFkIG9mIHNwZW5kaW5nIHRoZSBvbGQgdG9rZW4gYWdhaW4uXG4gKlxuICogQSBsb2NrIGxlZnQgYmVoaW5kIGJ5IGEgY3Jhc2hlZCBwcm9jZXNzIGlzIGJyb2tlbiBhZnRlclxuICoge0BsaW5rIFJFRlJFU0hfTE9DS19TVEFMRV9NU307IHdhaXRpbmcgZ2l2ZXMgdXAgYWZ0ZXIge0BsaW5rIFJFRlJFU0hfTE9DS19XQUlUX01TfVxuICogYW5kIHJ1bnMgYGZuYCBhbnl3YXkgKHRoZSBwbGF0Zm9ybSBncmFjZSBzdGlsbCBjb3ZlcnMgYSBuZWFyLXNpbXVsdGFuZW91cyB1c2UpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJlZnJlc2hMb2NrPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGZzLm1rZGlyU3luYyhTVE9SRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBtb2RlOiAwbzcwMCB9KTtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgUkVGUkVTSF9MT0NLX1dBSVRfTVM7XG4gIGxldCBoZWxkID0gZmFsc2U7XG4gIHdoaWxlICghaGVsZCkge1xuICAgIHRyeSB7XG4gICAgICBmcy5jbG9zZVN5bmMoZnMub3BlblN5bmMoUkVGUkVTSF9MT0NLX0ZJTEUsICd3eCcsIDBvNjAwKSk7XG4gICAgICBoZWxkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFRVhJU1QnKSBicmVhazsgLy8gY2FuJ3QgbG9jayBhdCBhbGwg4oCUIHByb2NlZWQgdW5sb2NrZWRcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gZnMuc3RhdFN5bmMoUkVGUkVTSF9MT0NLX0ZJTEUpLm10aW1lTXMgPiBSRUZSRVNIX0xPQ0tfU1RBTEVfTVMpIHtcbiAgICAgICAgICBmcy5ybVN5bmMoUkVGUkVTSF9MT0NLX0ZJTEUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb250aW51ZTsgLy8gdmFuaXNoZWQgYmV0d2VlbiBvcGVuIGFuZCBzdGF0IOKAlCB0cnkgYWdhaW5cbiAgICAgIH1cbiAgICAgIGlmIChEYXRlLm5vdygpID49IGRlYWRsaW5lKSBicmVhaztcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFJFRlJFU0hfTE9DS19QT0xMX01TKSk7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGhlbGQpIGZzLnJtU3luYyhSRUZSRVNIX0xPQ0tfRklMRSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuIl19
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1zdG9yZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NyZWRlbnRpYWwtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUUvRCx5RUFBeUU7QUFDekUsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUM7QUFDckMsNkVBQTZFO0FBQzdFLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRWpDLHlFQUF5RTtBQUN6RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUEwQjlCLGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FBQyxPQUFlO0lBQy9CLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVB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RSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFELElBQUksR0FBRyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUssS0FBK0IsQ0FBQyxJQUFJLEtBQUssUUFBUTtnQkFBRSxNQUFNLENBQUMsdUNBQXVDO1lBQ3RHLElBQUksQ0FBQztnQkFDSCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxHQUFHLHFCQUFxQixFQUFFLENBQUM7b0JBQ2hGLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDOUMsU0FBUztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxTQUFTLENBQUMsNkNBQTZDO1lBQ3pELENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxRQUFRO2dCQUFFLE1BQU07WUFDbEMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDcEIsQ0FBQztZQUFTLENBQUM7UUFDVCxJQUFJLElBQUk7WUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBPbi1kaXNrIHNlc3Npb24gc3RvcmUgZm9yIGBhdXRoIGxvZ2luYC5cbiAqXG4gKiBgfi8ucGlwZWxpbmUtbWFuYWdlci9jcmVkZW50aWFscy5qc29uYCwgb3duZXItb25seSAoMDYwMCBmaWxlIGluc2lkZSB0aGUgMDcwMFxuICogZGlyZWN0b3J5IHRoZSBhdWRpdCBsb2cgYWxyZWFkeSBjcmVhdGVzKSwga2V5ZWQgYnkgcGxhdGZvcm0gYmFzZSBVUkwgc28gb25lXG4gKiBtYWNoaW5lIGNhbiBob2xkIHNlc3Npb25zIGZvciBzZXZlcmFsIHBsYXRmb3JtcyBhdCBvbmNlLlxuICpcbiAqIEl0IGhvbGRzIGEgcmVhbCBzZXNzaW9uIOKAlCB0aGUgYWNjZXNzIHRva2VuIEFORCBpdHMgcmVmcmVzaCB0b2tlbiDigJQgYmVjYXVzZVxuICogdGhhdCBpcyB3aGF0IHRoZSBkZXZpY2UgZmxvdyBoYW5kcyBiYWNrIGFuZCB3aGF0IGxldHMgdGhlIENMSSBrZWVwIHdvcmtpbmcgZm9yXG4gKiBkYXlzIHdpdGhvdXQgYW5vdGhlciBicm93c2VyIHJvdW5kIHRyaXAuIE5vdGhpbmcgZWxzZSBhYm91dCB0aGUgYWNjb3VudCBpc1xuICogc3RvcmVkOiBubyBwYXNzd29yZCAodGhlIENMSSBuZXZlciBob2xkcyBvbmUpIGFuZCBubyBpZGVudGlmaWVyLlxuICpcbiAqIFJlc29sdXRpb24gb3JkZXIgZXZlcnl3aGVyZSBlbHNlIGluIHRoZSBDTEkgaXMgdW5jaGFuZ2VkIGluIHNwaXJpdDogYW5cbiAqIGV4cGxpY2l0IGBQTEFURk9STV9UT0tFTmAgaW4gdGhlIGVudmlyb25tZW50IGFsd2F5cyB3aW5zLCBzbyBDSSBrZWVwcyB1c2luZyBhblxuICogYWNjZXNzIGtleSBhbmQgaXMgbmV2ZXIgYWZmZWN0ZWQgYnkgd2hhdGV2ZXIgYSBkZXZlbG9wZXIncyBsYXB0b3AgaGFzIGNhY2hlZC5cbiAqL1xuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuXG5jb25zdCBTVE9SRV9ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLnBpcGVsaW5lLW1hbmFnZXInKTtcbmNvbnN0IFNUT1JFX0ZJTEUgPSBwYXRoLmpvaW4oU1RPUkVfRElSLCAnY3JlZGVudGlhbHMuanNvbicpO1xuY29uc3QgUkVGUkVTSF9MT0NLX0ZJTEUgPSBwYXRoLmpvaW4oU1RPUkVfRElSLCAncmVmcmVzaC5sb2NrJyk7XG5cbi8qKiBBIGxvY2sgb2xkZXIgdGhhbiB0aGlzIGJlbG9uZ3MgdG8gYSBwcm9jZXNzIHRoYXQgZGllZCBtaWQtcmVmcmVzaC4gKi9cbmNvbnN0IFJFRlJFU0hfTE9DS19TVEFMRV9NUyA9IDMwXzAwMDtcbi8qKiBIb3cgbG9uZyBhIHNlY29uZCBwcm9jZXNzIHdhaXRzIGZvciB0aGUgZmlyc3Qgb25lJ3MgcmVmcmVzaCB0byBmaW5pc2guICovXG5jb25zdCBSRUZSRVNIX0xPQ0tfV0FJVF9NUyA9IDE1XzAwMDtcbmNvbnN0IFJFRlJFU0hfTE9DS19QT0xMX01TID0gMTAwO1xuXG4vKiogUmUtYXV0aGVudGljYXRlIHJhdGhlciB0aGFuIGhhbmQgb3V0IGEgdG9rZW4gdGhpcyBjbG9zZSB0byBleHBpcnkuICovXG5jb25zdCBFWFBJUllfU0tFV19NUyA9IDYwXzAwMDtcblxuLyoqIE9uZSBwbGF0Zm9ybSdzIHN0b3JlZCBzZXNzaW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZWRTZXNzaW9uIHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgLyoqIFJvdGF0ZWQgb24gZXZlcnkgcmVmcmVzaDsgYWJzZW50IG9ubHkgaWYgdGhlIHBsYXRmb3JtIHN0b3BwZWQgaXNzdWluZyBvbmUuICovXG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgLyoqIEVwb2NoIG1zIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcy4gKi9cbiAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIC8qKiBUaGUgb3JnIHRoZSBzZXNzaW9uIHdhcyBzY29wZWQgdG8gd2hlbiBpdCB3YXMgc3RvcmVkIChpbmZvcm1hdGlvbmFsKS4gKi9cbiAgb3JnYW5pemF0aW9uSWQ/OiBzdHJpbmc7XG4gIHNhdmVkQXQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN0b3JlRmlsZSB7XG4gIHZlcnNpb246IDE7XG4gIHNlc3Npb25zOiBSZWNvcmQ8c3RyaW5nLCBTdG9yZWRTZXNzaW9uPjtcbiAgLyoqXG4gICAqIFRoZSBwbGF0Zm9ybSB0aGUgbGFzdCBgYXV0aCBsb2dpbmAgc2lnbmVkIGluIHRvLiBFdmVyeSBvdGhlciBjb21tYW5kIHJlYWRzXG4gICAqIGl0cyBiYXNlIFVSTCBmcm9tIHRoaXMgKGJlbG93IGBQTEFURk9STV9CQVNFX1VSTGAsIGFib3ZlIHRoZSBjb25maWcgZmlsZXMg4oCUXG4gICAqIHNlZSBjb25maWctbG9hZGVyKSwgc28gYGF1dGggbG9naW4gLS11cmwgWGAgaXMgZm9sbG93ZWQgYnkgY29tbWFuZHMgdGhhdFxuICAgKiB0YWxrIHRvIFgsIHdoaWNoIGlzIHdoZXJlIHRoZSBzZXNzaW9uIHdhcyBzdG9yZWQuXG4gICAqL1xuICBhY3RpdmVQbGF0Zm9ybT86IHN0cmluZztcbn1cblxuLyoqIFdoZXJlIHRoZSBzZXNzaW9ucyBsaXZlIOKAlCBzdXJmYWNlZCBpbiBoZWxwIHRleHQgYW5kIGVycm9ycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVkZW50aWFsU3RvcmVQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBTVE9SRV9GSUxFO1xufVxuXG4vKipcbiAqIFRyYWlsaW5nIHNsYXNoZXMgYW5kIGNhc2UgZGlmZmVyZW5jZXMgaW4gdGhlIGhvc3Qgd291bGQgb3RoZXJ3aXNlIHNwbGl0IG9uZVxuICogcGxhdGZvcm0gaW50byBzZXZlcmFsIGVudHJpZXMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JlS2V5KGJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBiYXNlVXJsLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sICcnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiByZWFkU3RvcmUoKTogU3RvcmVGaWxlIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTVE9SRV9GSUxFLCAndXRmLTgnKSk7XG4gICAgaWYgKHBhcnNlZD8udmVyc2lvbiA9PT0gMSAmJiBwYXJzZWQuc2Vzc2lvbnMgJiYgdHlwZW9mIHBhcnNlZC5zZXNzaW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJzZWQgYXMgU3RvcmVGaWxlO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTWlzc2luZyBvciB1bnJlYWRhYmxlOiB0cmVhdCBhcyBlbXB0eS4gQSBjb3JydXB0IGZpbGUgbXVzdCBub3QgYnJlYWsgZXZlcnlcbiAgICAvLyBjb21tYW5kIOKAlCB0aGUgbmV4dCBzdWNjZXNzZnVsIGxvZ2luIHJld3JpdGVzIGl0LlxuICB9XG4gIHJldHVybiB7IHZlcnNpb246IDEsIHNlc3Npb25zOiB7fSB9O1xufVxuXG5mdW5jdGlvbiB3cml0ZVN0b3JlKHN0b3JlOiBTdG9yZUZpbGUpOiB2b2lkIHtcbiAgZnMubWtkaXJTeW5jKFNUT1JFX0RJUiwgeyByZWN1cnNpdmU6IHRydWUsIG1vZGU6IDBvNzAwIH0pO1xuICAvLyBXcml0ZSB0aHJvdWdoIGEgdGVtcCBmaWxlIHNvIGFuIGludGVycnVwdGVkIHdyaXRlIGNhbid0IGxlYXZlIGEgdHJ1bmNhdGVkXG4gIC8vIHN0b3JlIGJlaGluZCwgYW5kIGNyZWF0ZSBpdCAwNjAwIGZyb20gdGhlIHN0YXJ0IChuZXZlciBicmllZmx5IHdvcmxkLXJlYWRhYmxlKS5cbiAgY29uc3QgdG1wID0gYCR7U1RPUkVfRklMRX0udG1wYDtcbiAgZnMud3JpdGVGaWxlU3luYyh0bXAsIGAke0pTT04uc3RyaW5naWZ5KHN0b3JlLCBudWxsLCAyKX1cXG5gLCB7IG1vZGU6IDBvNjAwIH0pO1xuICBmcy5yZW5hbWVTeW5jKHRtcCwgU1RPUkVfRklMRSk7XG59XG5cbi8qKiBUaGUgYmFzZSBVUkwgaW4gdGhlIGZvcm0gaXQgaXMgcmVtZW1iZXJlZCBhcyB0aGUgYWN0aXZlIHBsYXRmb3JtLiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmFzZVVybChiYXNlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZVVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG59XG5cbi8qKiBUaGUgcGxhdGZvcm0gdGhlIGxhc3QgYGF1dGggbG9naW5gIHNpZ25lZCBpbiB0bywgb3IgdW5kZWZpbmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2ZVBsYXRmb3JtKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlID0gcmVhZFN0b3JlKCkuYWN0aXZlUGxhdGZvcm07XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBSZW1lbWJlciBgYmFzZVVybGAgYXMgdGhlIHBsYXRmb3JtIGxhdGVyIGNvbW1hbmRzIHRhbGsgdG8uICovXG5leHBvcnQgZnVuY3Rpb24gc2V0QWN0aXZlUGxhdGZvcm0oYmFzZVVybDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHN0b3JlID0gcmVhZFN0b3JlKCk7XG4gIHN0b3JlLmFjdGl2ZVBsYXRmb3JtID0gbm9ybWFsaXplQmFzZVVybChiYXNlVXJsKTtcbiAgd3JpdGVTdG9yZShzdG9yZSk7XG59XG5cbi8qKiBQZXJzaXN0IHRoZSBzZXNzaW9uIGZvciBgYmFzZVVybGAsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgb25lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhdmVTZXNzaW9uKGJhc2VVcmw6IHN0cmluZywgc2Vzc2lvbjogT21pdDxTdG9yZWRTZXNzaW9uLCAnc2F2ZWRBdCc+KTogdm9pZCB7XG4gIGNvbnN0IHN0b3JlID0gcmVhZFN0b3JlKCk7XG4gIHN0b3JlLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXSA9IHsgLi4uc2Vzc2lvbiwgc2F2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH07XG4gIHdyaXRlU3RvcmUoc3RvcmUpO1xuICBwcmludERlYnVnKCdTZXNzaW9uIHN0b3JlZCcsIHsgcGF0aDogU1RPUkVfRklMRSwgcGxhdGZvcm06IHN0b3JlS2V5KGJhc2VVcmwpIH0pO1xufVxuXG4vKiogVGhlIHN0b3JlZCBzZXNzaW9uIGZvciBgYmFzZVVybGAsIG9yIHVuZGVmaW5lZC4gRXhwaXJ5IGlzIE5PVCBjaGVja2VkIGhlcmUg4oCUXG4gKiAgY2FsbGVycyBkZWNpZGUgd2hldGhlciB0byB1c2UsIHJlZnJlc2ggb3IgaWdub3JlIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTZXNzaW9uKGJhc2VVcmw6IHN0cmluZyk6IFN0b3JlZFNlc3Npb24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gcmVhZFN0b3JlKCkuc2Vzc2lvbnNbc3RvcmVLZXkoYmFzZVVybCldO1xufVxuXG4vKipcbiAqIEZvcmdldCB0aGUgc2Vzc2lvbiBmb3IgYGJhc2VVcmxgIChzaWduLW91dCwgb3IgYSByZWZyZXNoIHRoZSBwbGF0Zm9ybVxuICogcmVqZWN0ZWQpLiBUaGUgYWN0aXZlIHBsYXRmb3JtIGlzIGtlcHQ6IGl0IGlzIHRoZSBwbGF0Zm9ybSB0aGUgcGVyc29uIGNob3NlLFxuICogc28gdGhlIG5leHQgYGF1dGggbG9naW5gICh3aG9zZSBgLS11cmxgIGRlZmF1bHRzIHRvIGl0KSBzaWducyBiYWNrIGluIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTZXNzaW9uKGJhc2VVcmw6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBzdG9yZSA9IHJlYWRTdG9yZSgpO1xuICBpZiAoIShzdG9yZUtleShiYXNlVXJsKSBpbiBzdG9yZS5zZXNzaW9ucykpIHJldHVybjtcbiAgZGVsZXRlIHN0b3JlLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXTtcbiAgdHJ5IHtcbiAgICB3cml0ZVN0b3JlKHN0b3JlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBMb3NpbmcgdGhlIGFiaWxpdHkgdG8gY2xlYXIgYSBkZWFkIHNlc3Npb24gaXMgYSBudWlzYW5jZSwgbm90IGEgZmFpbHVyZS5cbiAgICBwcmludFdhcm5pbmcoJ0NvdWxkIG5vdCB1cGRhdGUgdGhlIHN0b3JlZCBjcmVkZW50aWFscycsIHtcbiAgICAgIHBhdGg6IFNUT1JFX0ZJTEUsXG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogVHJ1ZSB3aGVuIHRoZSBzdG9yZWQgYWNjZXNzIHRva2VuIGlzIHN0aWxsIHVzYWJsZSAod2l0aCBhIGxpdHRsZSBzbGFjaykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXNzaW9uVXNhYmxlKHNlc3Npb246IFN0b3JlZFNlc3Npb24gfCB1bmRlZmluZWQpOiBzZXNzaW9uIGlzIFN0b3JlZFNlc3Npb24ge1xuICByZXR1cm4gISFzZXNzaW9uPy5hY2Nlc3NUb2tlbiAmJiBzZXNzaW9uLmV4cGlyZXNBdCAtIEVYUElSWV9TS0VXX01TID4gRGF0ZS5ub3coKTtcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCBob2xkaW5nIHRoZSBtYWNoaW5lLXdpZGUgUkVGUkVTSCBMT0NLIChgfi8ucGlwZWxpbmUtbWFuYWdlci9yZWZyZXNoLmxvY2tgLFxuICogY3JlYXRlZCBleGNsdXNpdmVseSkuXG4gKlxuICogQSByZWZyZXNoIHRva2VuIGlzIHNpbmdsZS11c2U6IHR3byBDTEkgcHJvY2Vzc2VzIHJlbmV3aW5nIHRoZSBzYW1lIHN0b3JlZFxuICogc2Vzc2lvbiBhdCBvbmNlIChhIHNjcmlwdCBmYW5uaW5nIG91dCBjb21tYW5kcywgdHdvIHRlcm1pbmFscykgd291bGQgcHJlc2VudFxuICogdGhlIHNhbWUgdG9rZW4gdHdpY2UsIGFuZCBvdXRzaWRlIHRoZSBwbGF0Zm9ybSdzIHNob3J0IHJvdGF0aW9uIGdyYWNlIHRoZVxuICogc2Vjb25kIHVzZSByZWFkcyBhcyBSRVVTRSDigJQgd2hpY2ggcmV2b2tlcyB0aGUgc2Vzc2lvbi4gU2VyaWFsaXppbmcgdGhlIHJlZnJlc2hcbiAqIG1lYW5zIHRoZSBzZWNvbmQgcHJvY2VzcyB3YWl0cywgdGhlbiAocmUtcmVhZGluZyB0aGUgc3RvcmUpIGZpbmRzIHRoZSBwYWlyIHRoZVxuICogZmlyc3Qgb25lIGFscmVhZHkgc2F2ZWQgaW5zdGVhZCBvZiBzcGVuZGluZyB0aGUgb2xkIHRva2VuIGFnYWluLlxuICpcbiAqIEEgbG9jayBsZWZ0IGJlaGluZCBieSBhIGNyYXNoZWQgcHJvY2VzcyBpcyBicm9rZW4gYWZ0ZXJcbiAqIHtAbGluayBSRUZSRVNIX0xPQ0tfU1RBTEVfTVN9OyB3YWl0aW5nIGdpdmVzIHVwIGFmdGVyIHtAbGluayBSRUZSRVNIX0xPQ0tfV0FJVF9NU31cbiAqIGFuZCBydW5zIGBmbmAgYW55d2F5ICh0aGUgcGxhdGZvcm0gZ3JhY2Ugc3RpbGwgY292ZXJzIGEgbmVhci1zaW11bHRhbmVvdXMgdXNlKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhSZWZyZXNoTG9jazxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBmcy5ta2RpclN5bmMoU1RPUkVfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgbW9kZTogMG83MDAgfSk7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFJFRlJFU0hfTE9DS19XQUlUX01TO1xuICBsZXQgaGVsZCA9IGZhbHNlO1xuICB3aGlsZSAoIWhlbGQpIHtcbiAgICB0cnkge1xuICAgICAgZnMuY2xvc2VTeW5jKGZzLm9wZW5TeW5jKFJFRlJFU0hfTE9DS19GSUxFLCAnd3gnLCAwbzYwMCkpO1xuICAgICAgaGVsZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlICE9PSAnRUVYSVNUJykgYnJlYWs7IC8vIGNhbid0IGxvY2sgYXQgYWxsIOKAlCBwcm9jZWVkIHVubG9ja2VkXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIGZzLnN0YXRTeW5jKFJFRlJFU0hfTE9DS19GSUxFKS5tdGltZU1zID4gUkVGUkVTSF9MT0NLX1NUQUxFX01TKSB7XG4gICAgICAgICAgZnMucm1TeW5jKFJFRlJFU0hfTE9DS19GSUxFLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29udGludWU7IC8vIHZhbmlzaGVkIGJldHdlZW4gb3BlbiBhbmQgc3RhdCDigJQgdHJ5IGFnYWluXG4gICAgICB9XG4gICAgICBpZiAoRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkgYnJlYWs7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBSRUZSRVNIX0xPQ0tfUE9MTF9NUykpO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChoZWxkKSBmcy5ybVN5bmMoUkVGUkVTSF9MT0NLX0ZJTEUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -2,9 +2,18 @@ import { ERROR_CODES, type ErrorCode, type ErrorHandlerOptions } from '../types/
2
2
  export { ERROR_CODES };
3
3
  export type { ErrorCode };
4
4
  /**
5
- * Format and handle errors with colored output
5
+ * Format and handle errors with colored output: print the error (see
6
+ * {@link reportError}), then exit with its standard code — or, with
7
+ * `exit: false`, rethrow it.
6
8
  */
7
9
  export declare function handleError(err: unknown, code?: ErrorCode, options?: ErrorHandlerOptions): never;
10
+ /**
11
+ * Print an error the way {@link handleError} does and RETURN its standard exit
12
+ * code, without exiting or throwing — for commands with their own exit-code
13
+ * contract (the cron-friendly audits exit 2 on a scan failure). `handleError`
14
+ * with `exit: false` rethrows, so a `process.exit(2)` after it never ran.
15
+ */
16
+ export declare function reportError(err: unknown, code?: ErrorCode, options?: Omit<ErrorHandlerOptions, 'exit'>): ErrorCode;
8
17
  /**
9
18
  * Validation error class
10
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.d.ts","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,WAAW,EACX,KAAK,SAAS,EACd,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;GAEG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE,SAA+B,EACrC,OAAO,GAAE,mBAAwB,GAChC,KAAK,CAiHP;AAID;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,KAAK,CAAC,EAAE,MAAM;IACd,KAAK,CAAC,EAAE,OAAO;IACf,IAAI,CAAC,EAAE,MAAM;IACb,QAAQ,CAAC,EAAE,MAAM;IAL1B,YACE,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,KAAK,CAAC,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,QAAQ,CAAC,EAAE,MAAM,YAAA,EAKzB;CACF;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAG5B,GAAG,CAAC,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,KAAK;IACb,OAAO,CAAC,EAAE,MAAM;IAChB,WAAW,EAAE,OAAO;IACpB,gBAAgB,EAAE,OAAO;IANlC,YACE,OAAO,EAAE,MAAM,EACR,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,KAAK,CAAC,EAAE,KAAK,YAAA,EACb,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,WAAW,GAAE,OAAc,EAC3B,gBAAgB,GAAE,OAAe,EAKzC;CACF"}
1
+ {"version":3,"file":"error-handler.d.ts","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,WAAW,EACX,KAAK,SAAS,EACd,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE,SAA+B,EACrC,OAAO,GAAE,mBAAwB,GAChC,KAAK,CAOP;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE,SAA+B,EACrC,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAM,GAC9C,SAAS,CA2GX;AAID;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,KAAK,CAAC,EAAE,MAAM;IACd,KAAK,CAAC,EAAE,OAAO;IACf,IAAI,CAAC,EAAE,MAAM;IACb,QAAQ,CAAC,EAAE,MAAM;IAL1B,YACE,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,KAAK,CAAC,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,QAAQ,CAAC,EAAE,MAAM,YAAA,EAKzB;CACF;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAG5B,GAAG,CAAC,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,KAAK;IACb,OAAO,CAAC,EAAE,MAAM;IAChB,WAAW,EAAE,OAAO;IACpB,gBAAgB,EAAE,OAAO;IANlC,YACE,OAAO,EAAE,MAAM,EACR,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,KAAK,CAAC,EAAE,KAAK,YAAA,EACb,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,WAAW,GAAE,OAAc,EAC3B,gBAAgB,GAAE,OAAe,EAKzC;CACF"}
@@ -8,10 +8,26 @@ const { bold, dim, red, yellow, cyan } = pico;
8
8
  // Re-export for convenience
9
9
  export { ERROR_CODES };
10
10
  /**
11
- * Format and handle errors with colored output
11
+ * Format and handle errors with colored output: print the error (see
12
+ * {@link reportError}), then exit with its standard code — or, with
13
+ * `exit: false`, rethrow it.
12
14
  */
13
15
  export function handleError(err, code = ERROR_CODES.GENERAL, options = {}) {
14
- const { debug = false, exit = true, logToConsole = true, context, correlationId = generateExecutionId(), } = options;
16
+ const resolvedCode = reportError(err, code, options);
17
+ if (options.exit ?? true) {
18
+ process.exitCode = resolvedCode;
19
+ process.exit(resolvedCode);
20
+ }
21
+ throw err;
22
+ }
23
+ /**
24
+ * Print an error the way {@link handleError} does and RETURN its standard exit
25
+ * code, without exiting or throwing — for commands with their own exit-code
26
+ * contract (the cron-friendly audits exit 2 on a scan failure). `handleError`
27
+ * with `exit: false` rethrows, so a `process.exit(2)` after it never ran.
28
+ */
29
+ export function reportError(err, code = ERROR_CODES.GENERAL, options = {}) {
30
+ const { debug = false, logToConsole = true, context, correlationId = generateExecutionId(), } = options;
15
31
  // Derive the canonical exit code from the ACTUAL error (see resolveExitCode),
16
32
  // falling back to the caller's `code` for anything unclassifiable. This is what
17
33
  // makes every command emit the SAME exit code for the same class of failure,
@@ -103,11 +119,7 @@ export function handleError(err, code = ERROR_CODES.GENERAL, options = {}) {
103
119
  }
104
120
  console.error('');
105
121
  }
106
- if (exit) {
107
- process.exitCode = resolvedCode;
108
- process.exit(resolvedCode);
109
- }
110
- throw err;
122
+ return resolvedCode;
111
123
  }
112
124
  // --- Error classes (only those actually used) ---
113
125
  /**
@@ -310,4 +322,4 @@ function isAxiosError(err) {
310
322
  'isAxiosError' in err &&
311
323
  err.isAxiosError === true);
312
324
  }
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUNMLFdBQVcsR0FJWixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTlDLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFHdkI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixHQUFZLEVBQ1osSUFBSSxHQUFjLFdBQVcsQ0FBQyxPQUFPLEVBQ3JDLE9BQU8sR0FBd0IsRUFBRTtJQUVqQyxNQUFNLEVBQ0osS0FBSyxHQUFHLEtBQUssRUFDYixJQUFJLEdBQUcsSUFBSSxFQUNYLFlBQVksR0FBRyxJQUFJLEVBQ25CLE9BQU8sRUFDUCxhQUFhLEdBQUcsbUJBQW1CLEVBQUUsR0FDdEMsR0FBRyxPQUFPLENBQUM7SUFFWiw4RUFBOEU7SUFDOUUsZ0ZBQWdGO0lBQ2hGLDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsOEJBQThCO0lBQzlCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFaEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLE9BQU8sYUFBYSxFQUFFLENBQUM7UUFFdkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDekUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUU1QixJQUFJLEdBQUcsWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFbEQsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxJQUFJLEdBQUcsWUFBWSxlQUFlLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxHQUFHLENBQUMsS0FBSztvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxTQUFTO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDcEYsSUFBSSxHQUFHLENBQUMsSUFBSTtvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELElBQUksR0FBRyxDQUFDLFFBQVE7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7WUFFRCw2QkFBNkI7WUFDN0IsSUFBSSxHQUFHLFlBQVksWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksR0FBRyxDQUFDLEdBQUc7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLEdBQUcsQ0FBQyxPQUFPO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLEdBQUcsQ0FBQyxLQUFLO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckUsQ0FBQztZQUVELDJCQUEyQjtZQUMzQixJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztnQkFDcEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7Z0JBQzVCLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7Z0JBQ0QsSUFBSSxHQUFHO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO1lBQ0gsQ0FBQztZQUVELHVFQUF1RTtZQUN2RSxJQUFJLFFBQVEsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsQyxNQUFNLE1BQU0sR0FBSSxHQUFHLENBQUMsTUFBMEIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDNUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFOUMsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtvQkFDL0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM1RCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLEdBQUcsQ0FBQztBQUNaLENBQUM7QUFFRCxtREFBbUQ7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBRy9CLEtBQUs7SUFDTCxLQUFLO0lBQ0wsSUFBSTtJQUNKLFFBQVE7SUFMakIsWUFDRSxPQUFlLEVBQ1IsS0FBYyxFQUNkLEtBQWUsRUFDZixJQUFhLEVBQ2IsUUFBaUI7UUFFeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUxSLEtBQUs7cUJBQ0wsS0FBSztvQkFDTCxJQUFJO3dCQUNKLFFBQVE7UUFHZixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQzlCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxLQUFLO0lBRzVCLEdBQUc7SUFDSCxLQUFLO0lBQ0wsT0FBTztJQUNQLFdBQVc7SUFDWCxnQkFBZ0I7SUFOekIsWUFDRSxPQUFlLEVBQ1IsR0FBWSxFQUNaLEtBQWEsRUFDYixPQUFnQixFQUNoQixXQUFXLEdBQVksSUFBSSxFQUMzQixnQkFBZ0IsR0FBWSxLQUFLO1FBRXhDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzttQkFOUixHQUFHO3FCQUNILEtBQUs7dUJBQ0wsT0FBTzsyQkFDUCxXQUFXO2dDQUNYLGdCQUFnQjtRQUd2QixJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztRQUMzQixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFFRCwwQkFBMEI7QUFFMUI7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxlQUFlLENBQUMsR0FBWSxFQUFFLFFBQW1CO0lBQ3hELElBQUksR0FBRyxZQUFZLGVBQWU7UUFBRSxPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUM7SUFDbEUsSUFBSSxHQUFHLFlBQVksWUFBWTtRQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUVoRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3BDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssR0FBRztZQUFFLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUNwRSxJQUFJLE1BQU0sS0FBSyxHQUFHO1lBQUUsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQ3RELElBQUksTUFBTSxLQUFLLEdBQUc7WUFBRSxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDckQsSUFBSSxNQUFNLEtBQUssR0FBRztZQUFFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUNqRCxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxLQUFLLEdBQUc7WUFBRSxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDakUsd0VBQXdFO1FBQ3hFLHdFQUF3RTtRQUN4RSxJQUFJLE1BQU0sS0FBSyxHQUFHO1lBQUUsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQ3JELElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxHQUFHO1lBQUUsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQzVELDhFQUE4RTtRQUM5RSxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRO1lBQUUsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsTUFBTSxPQUFPLEdBQUksR0FBaUMsRUFBRSxJQUFJLENBQUM7SUFDekQsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3ZHLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssV0FBVztZQUFFLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUN4RCxJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkgsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBZTtJQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDL0UsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsTUFBYztJQUN2QyxNQUFNLFdBQVcsR0FBMkI7UUFDMUMsR0FBRyxFQUFFLGFBQWE7UUFDbEIsR0FBRyxFQUFFLGNBQWM7UUFDbkIsR0FBRyxFQUFFLFdBQVc7UUFDaEIsR0FBRyxFQUFFLFdBQVc7UUFDaEIsR0FBRyxFQUFFLGlCQUFpQjtRQUN0QixHQUFHLEVBQUUsVUFBVTtRQUNmLEdBQUcsRUFBRSxzQkFBc0I7UUFDM0IsR0FBRyxFQUFFLG1CQUFtQjtRQUN4QixHQUFHLEVBQUUsdUJBQXVCO1FBQzVCLEdBQUcsRUFBRSxhQUFhO1FBQ2xCLEdBQUcsRUFBRSxxQkFBcUI7UUFDMUIsR0FBRyxFQUFFLGlCQUFpQjtLQUN2QixDQUFDO0lBQ0YsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEdBQVksRUFBRSxJQUFlO0lBQ3ZELElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QyxPQUFPLGlFQUFpRSxDQUFDO0lBQzNFLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakMsT0FBTyxxREFBcUQsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sMERBQTBELENBQUM7SUFDcEUsQ0FBQztJQUNELElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxPQUFPLHlEQUF5RCxDQUFDO0lBQ25FLENBQUM7SUFDRCxJQUFJLEdBQUcsWUFBWSxLQUFLLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxPQUFPLHlGQUF5RixDQUFDO0lBQ25HLENBQUM7SUFDRCxJQUFJLEdBQUcsWUFBWSxlQUFlLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hELE9BQU8saUNBQWlDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUNwQyxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxLQUFLLEdBQUc7WUFBRSxPQUFPLGlEQUFpRCxDQUFDO1FBQy9GLDZFQUE2RTtRQUM3RSwwRUFBMEU7UUFDMUUsY0FBYztRQUNkLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTywyRkFBMkYsQ0FBQztRQUNyRyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssR0FBRztZQUFFLE9BQU8scURBQXFELENBQUM7UUFDakYsSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLEdBQUc7WUFBRSxPQUFPLG1EQUFtRCxDQUFDO0lBQzFGLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQWE7SUFDdEMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDMUMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlDLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQTZCLENBQUM7UUFDekQsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hHLElBQUksS0FBSyxJQUFJLFNBQVM7Z0JBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsR0FBVztJQUM5QixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDL0QsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25GLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNsQyxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNELE9BQU8sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyRSxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsS0FBYTtJQUN2QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsR0FBWTtJQUNoQyxPQUFPLENBQ0wsT0FBTyxHQUFHLEtBQUssUUFBUTtRQUN2QixHQUFHLEtBQUssSUFBSTtRQUNaLGNBQWMsSUFBSSxHQUFHO1FBQ3BCLEdBQStCLENBQUMsWUFBWSxLQUFLLElBQUksQ0FDdkQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgaXNRdW90YUV4Y2VlZGVkQm9keSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUV4ZWN1dGlvbklkIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHtcbiAgRVJST1JfQ09ERVMsXG4gIHR5cGUgRXJyb3JDb2RlLFxuICB0eXBlIEVycm9ySGFuZGxlck9wdGlvbnMsXG4gIHR5cGUgQXhpb3NFcnJvckxpa2UsXG59IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcblxuY29uc3QgeyBib2xkLCBkaW0sIHJlZCwgeWVsbG93LCBjeWFuIH0gPSBwaWNvO1xuXG4vLyBSZS1leHBvcnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgeyBFUlJPUl9DT0RFUyB9O1xuZXhwb3J0IHR5cGUgeyBFcnJvckNvZGUgfTtcblxuLyoqXG4gKiBGb3JtYXQgYW5kIGhhbmRsZSBlcnJvcnMgd2l0aCBjb2xvcmVkIG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRXJyb3IoXG4gIGVycjogdW5rbm93bixcbiAgY29kZTogRXJyb3JDb2RlID0gRVJST1JfQ09ERVMuR0VORVJBTCxcbiAgb3B0aW9uczogRXJyb3JIYW5kbGVyT3B0aW9ucyA9IHt9LFxuKTogbmV2ZXIge1xuICBjb25zdCB7XG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBleGl0ID0gdHJ1ZSxcbiAgICBsb2dUb0NvbnNvbGUgPSB0cnVlLFxuICAgIGNvbnRleHQsXG4gICAgY29ycmVsYXRpb25JZCA9IGdlbmVyYXRlRXhlY3V0aW9uSWQoKSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gRGVyaXZlIHRoZSBjYW5vbmljYWwgZXhpdCBjb2RlIGZyb20gdGhlIEFDVFVBTCBlcnJvciAoc2VlIHJlc29sdmVFeGl0Q29kZSksXG4gIC8vIGZhbGxpbmcgYmFjayB0byB0aGUgY2FsbGVyJ3MgYGNvZGVgIGZvciBhbnl0aGluZyB1bmNsYXNzaWZpYWJsZS4gVGhpcyBpcyB3aGF0XG4gIC8vIG1ha2VzIGV2ZXJ5IGNvbW1hbmQgZW1pdCB0aGUgU0FNRSBleGl0IGNvZGUgZm9yIHRoZSBzYW1lIGNsYXNzIG9mIGZhaWx1cmUsXG4gIC8vIHJhdGhlciB0aGFuIGEgYmxhbmtldCBBUElfUkVRVUVTVC9HRU5FUkFMLiBVc2VkIGZvciBkaXNwbGF5LCB0aGUgc3VnZ2VzdGlvbixcbiAgLy8gYW5kIHRoZSBwcm9jZXNzIGV4aXQgYmVsb3cuXG4gIGNvbnN0IHJlc29sdmVkQ29kZSA9IHJlc29sdmVFeGl0Q29kZShlcnIsIGNvZGUpO1xuXG4gIGlmIChsb2dUb0NvbnNvbGUpIHtcbiAgICBjb25zdCBkaXZpZGVyID0gJ+KUgCcucmVwZWF0KHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApO1xuICAgIGNvbnN0IGVycm9ySWQgPSBgRVJSLSR7Y29ycmVsYXRpb25JZH1gO1xuXG4gICAgY29uc29sZS5lcnJvcignXFxuJyArIHJlZChib2xkKCfinJcgRVJST1InKSkgKyBkaW0oYCBbJHtlcnJvcklkfV1gKSArICdcXG4nKTtcbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKGJvbGQoJ01lc3NhZ2U6JykpLCBlcnIubWVzc2FnZSk7XG5cbiAgICAgIGlmIChlcnIubmFtZSAhPT0gJ0Vycm9yJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnVHlwZTonKSwgZXJyLm5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IFZhbGlkYXRpb24gZXJyb3IgZGV0YWlsc1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICBpZiAoZXJyLmZpZWxkKSBjb25zb2xlLmVycm9yKHJlZCgnRmllbGQ6JyksIGVyci5maWVsZCk7XG4gICAgICAgIGlmIChlcnIudmFsdWUgIT09IHVuZGVmaW5lZCkgY29uc29sZS5lcnJvcihyZWQoJ1ZhbHVlOicpLCBzYW5pdGl6ZVZhbHVlKGVyci52YWx1ZSkpO1xuICAgICAgICBpZiAoZXJyLnJ1bGUpIGNvbnNvbGUuZXJyb3IocmVkKCdSdWxlOicpLCBlcnIucnVsZSk7XG4gICAgICAgIGlmIChlcnIuZXhwZWN0ZWQpIGNvbnNvbGUuZXJyb3IocmVkKCdFeHBlY3RlZDonKSwgZXJyLmV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBOZXR3b3JrIGVycm9yIGRldGFpbHNcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOZXR3b3JrRXJyb3IpIHtcbiAgICAgICAgaWYgKGVyci51cmwpIGNvbnNvbGUuZXJyb3IocmVkKCdVUkw6JyksIHNhbml0aXplVXJsKGVyci51cmwpKTtcbiAgICAgICAgaWYgKGVyci50aW1lb3V0KSBjb25zb2xlLmVycm9yKHJlZCgnVGltZW91dDonKSwgYCR7ZXJyLnRpbWVvdXR9bXNgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1JlcXVlc3QgTWFkZTonKSwgZXJyLnJlcXVlc3RNYWRlID8gJ1llcycgOiAnTm8nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1Jlc3BvbnNlIFJlY2VpdmVkOicpLCBlcnIucmVzcG9uc2VSZWNlaXZlZCA/ICdZZXMnIDogJ05vJyk7XG4gICAgICAgIGlmIChlcnIuY2F1c2UpIGNvbnNvbGUuZXJyb3IocmVkKCdDYXVzZWQgYnk6JyksIGVyci5jYXVzZS5tZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBBeGlvcyBlcnJvciBkZXRhaWxzXG4gICAgICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZXJyLnJlc3BvbnNlPy5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHVybCA9IGVyci5jb25maWc/LnVybDtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdTdGF0dXM6JyksIHN0YXR1cyk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1N0YXR1cyBUZXh0OicpLCBnZXRIdHRwU3RhdHVzVGV4dChzdGF0dXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXJsKSBjb25zb2xlLmVycm9yKHJlZCgnVVJMOicpLCBzYW5pdGl6ZVVybCh1cmwpKTtcbiAgICAgICAgaWYgKGVyci5yZXNwb25zZT8uZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdSZXNwb25zZTonKSk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVFcnJvckRhdGEoZXJyLnJlc3BvbnNlLmRhdGEpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBDREsvZXhlY1N5bmMgZXJyb3IgZGV0YWlscyAoc3RkZXJyIGNhcHR1cmVkIGZyb20gY2hpbGQgcHJvY2VzcylcbiAgICAgIGlmICgnc3RkZXJyJyBpbiBlcnIgJiYgZXJyLnN0ZGVycikge1xuICAgICAgICBjb25zdCBzdGRlcnIgPSAoZXJyLnN0ZGVyciBhcyBCdWZmZXIgfCBzdHJpbmcpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0NESyBPdXRwdXQ6JykpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGltKHN0ZGVycikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdDb2RlOicpLCBnZXRFcnJvckNvZGVOYW1lKHJlc29sdmVkQ29kZSkpO1xuICAgICAgY29uc29sZS5lcnJvcihkaW0oJ0Vycm9yIElEOicpLCBkaW0oZXJyb3JJZCkpO1xuXG4gICAgICBpZiAoY29udGV4dCAmJiBPYmplY3Qua2V5cyhjb250ZXh0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29udGV4dDonKSk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbnRleHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgJHtjeWFuKGtleSl9OmAsIGRpbShzYW5pdGl6ZVZhbHVlKHZhbHVlKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlYnVnICYmIGVyci5zdGFjaykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCcnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oJ1N0YWNrIHRyYWNlOicpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVTdGFja1RyYWNlKGVyci5zdGFjaykpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0Vycm9yOicpLCBTdHJpbmcoZXJyKSk7XG4gICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29kZTonKSwgZ2V0RXJyb3JDb2RlTmFtZShyZXNvbHZlZENvZGUpKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZGltKCdFcnJvciBJRDonKSwgZGltKGVycm9ySWQpKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoIWRlYnVnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBUaXA6JyksIGRpbSgnUnVuIHdpdGggLS1kZWJ1ZyBmbGFnIHRvIHNlZSBmdWxsIHN0YWNrIHRyYWNlJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBnZXRFcnJvclN1Z2dlc3Rpb24oZXJyLCByZXNvbHZlZENvZGUpO1xuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBTdWdnZXN0aW9uOicpLCBkaW0oc3VnZ2VzdGlvbikpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICB9XG5cbiAgaWYgKGV4aXQpIHtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gcmVzb2x2ZWRDb2RlO1xuICAgIHByb2Nlc3MuZXhpdChyZXNvbHZlZENvZGUpO1xuICB9XG5cbiAgdGhyb3cgZXJyO1xufVxuXG4vLyAtLS0gRXJyb3IgY2xhc3NlcyAob25seSB0aG9zZSBhY3R1YWxseSB1c2VkKSAtLS1cblxuLyoqXG4gKiBWYWxpZGF0aW9uIGVycm9yIGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgZmllbGQ/OiBzdHJpbmcsXG4gICAgcHVibGljIHZhbHVlPzogdW5rbm93bixcbiAgICBwdWJsaWMgcnVsZT86IHN0cmluZyxcbiAgICBwdWJsaWMgZXhwZWN0ZWQ/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdWYWxpZGF0aW9uRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbi8qKlxuICogTmV0d29yayBlcnJvciBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHVybD86IHN0cmluZyxcbiAgICBwdWJsaWMgY2F1c2U/OiBFcnJvcixcbiAgICBwdWJsaWMgdGltZW91dD86IG51bWJlcixcbiAgICBwdWJsaWMgcmVxdWVzdE1hZGU6IGJvb2xlYW4gPSB0cnVlLFxuICAgIHB1YmxpYyByZXNwb25zZVJlY2VpdmVkOiBib29sZWFuID0gZmFsc2UsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdOZXR3b3JrRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbi8vIC0tLSBQcml2YXRlIGhlbHBlcnMgLS0tXG5cbi8qKlxuICogTWFwIHRoZSBBQ1RVQUwgZXJyb3IgdG8gYSBjYW5vbmljYWwgZXhpdCBjb2RlIHNvIGV2ZXJ5IGNvbW1hbmQgZXhpdHMgd2l0aCB0aGVcbiAqIFNBTUUgY29kZSBmb3IgdGhlIHNhbWUgY2xhc3Mgb2YgZmFpbHVyZS4gVGhlIGNhbGxlci1zdXBwbGllZCBgZmFsbGJhY2tgIChlLmcuXG4gKiBBUElfUkVRVUVTVCkgaXMgdXNlZCBvbmx5IGZvciBlcnJvcnMgdGhpcyBjYW4ndCBjbGFzc2lmeS4gQ29kZXMgKHNyYy90eXBlcy9lcnJvci50cyk6XG4gKlxuICogICAxIEdFTkVSQUwgwrcgMiBWQUxJREFUSU9OIMK3IDMgQVBJX1JFUVVFU1QgwrcgNCBBVVRIRU5USUNBVElPTiDCtyA1IEFVVEhPUklaQVRJT05cbiAqICAgNiBOT1RfRk9VTkQgwrcgNyBORVRXT1JLIMK3IDggQ09ORklHVVJBVElPTiDCtyA5IEZJTEVfU1lTVEVNIMK3IDEwIFRJTUVPVVRcbiAqXG4gKiBQcmVjZWRlbmNlOiB0eXBlZCBDTEkgZXJyb3JzIOKGkiBIVFRQIHN0YXR1cyDihpIgTm9kZSBzeXN0ZW0gZXJyb3IgYGNvZGVgIOKGkiBmYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUV4aXRDb2RlKGVycjogdW5rbm93biwgZmFsbGJhY2s6IEVycm9yQ29kZSk6IEVycm9yQ29kZSB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IpIHJldHVybiBFUlJPUl9DT0RFUy5WQUxJREFUSU9OO1xuICBpZiAoZXJyIGluc3RhbmNlb2YgTmV0d29ya0Vycm9yKSByZXR1cm4gZXJyLnRpbWVvdXQgPyBFUlJPUl9DT0RFUy5USU1FT1VUIDogRVJST1JfQ09ERVMuTkVUV09SSztcblxuICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnIucmVzcG9uc2U/LnN0YXR1cztcbiAgICBpZiAoc3RhdHVzID09PSA0MDAgfHwgc3RhdHVzID09PSA0MjIpIHJldHVybiBFUlJPUl9DT0RFUy5WQUxJREFUSU9OO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMSkgcmV0dXJuIEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMykgcmV0dXJuIEVSUk9SX0NPREVTLkFVVEhPUklaQVRJT047XG4gICAgaWYgKHN0YXR1cyA9PT0gNDA0KSByZXR1cm4gRVJST1JfQ09ERVMuTk9UX0ZPVU5EO1xuICAgIGlmIChzdGF0dXMgPT09IDQwOCB8fCBzdGF0dXMgPT09IDUwNCkgcmV0dXJuIEVSUk9SX0NPREVTLlRJTUVPVVQ7XG4gICAgLy8gQ0xJRU5UX1VQR1JBREVfUkVRVUlSRUQ6IHRoaXMgQ0xJIGlzIGJlbG93IHRoZSBwbGF0Zm9ybSdzIG1pbmltdW0g4oCUIGFcbiAgICAvLyBsb2NhbC1pbnN0YWxsIHByb2JsZW0gKGZpeDogLS11cGdyYWRlKSwgc28gc2NyaXB0cyBjYW4gdGVsbCBpdCBhcGFydC5cbiAgICBpZiAoc3RhdHVzID09PSA0MjYpIHJldHVybiBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OO1xuICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzID49IDUwMCkgcmV0dXJuIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNUO1xuICAgIC8vIEEgcmVxdWVzdCB0aGF0IGdvdCBubyBIVFRQIHJlc3BvbnNlIG5ldmVyIHJlYWNoZWQgdGhlIHNlcnZlciAoRE5TIC8gcmVmdXNlZFxuICAgIC8vIC8gcmVzZXQpIOKAlCB0aGF0J3MgYSBuZXR3b3JrIGZhaWx1cmUsIG5vdCBhbiBBUEktcmVzcG9uc2UgZXJyb3IuXG4gICAgaWYgKCFlcnIucmVzcG9uc2UpIHJldHVybiBFUlJPUl9DT0RFUy5ORVRXT1JLO1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuXG4gIC8vIE5vZGUgc3lzdGVtIGVycm9ycyAoZnMgKyBzb2NrZXRzKSBjYXJyeSBhIHN0cmluZyBgY29kZWAuXG4gIGNvbnN0IHN5c0NvZGUgPSAoZXJyIGFzIHsgY29kZT86IHVua25vd24gfSB8IG51bGwpPy5jb2RlO1xuICBpZiAodHlwZW9mIHN5c0NvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKFsnRU5PRU5UJywgJ0VBQ0NFUycsICdFSVNESVInLCAnRU5PVERJUicsICdFRVhJU1QnLCAnRVBFUk0nLCAnRU5PU1BDJywgJ0VNRklMRSddLmluY2x1ZGVzKHN5c0NvZGUpKSB7XG4gICAgICByZXR1cm4gRVJST1JfQ09ERVMuRklMRV9TWVNURU07XG4gICAgfVxuICAgIGlmIChzeXNDb2RlID09PSAnRVRJTUVET1VUJykgcmV0dXJuIEVSUk9SX0NPREVTLlRJTUVPVVQ7XG4gICAgaWYgKFsnRUNPTk5SRUZVU0VEJywgJ0VOT1RGT1VORCcsICdFQ09OTlJFU0VUJywgJ0VIT1NUVU5SRUFDSCcsICdFTkVUVU5SRUFDSCcsICdFQUlfQUdBSU4nLCAnRVBJUEUnXS5pbmNsdWRlcyhzeXNDb2RlKSkge1xuICAgICAgcmV0dXJuIEVSUk9SX0NPREVTLk5FVFdPUks7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvckNvZGVOYW1lKGNvZGU6IEVycm9yQ29kZSk6IHN0cmluZyB7XG4gIGNvbnN0IGVudHJ5ID0gT2JqZWN0LmVudHJpZXMoRVJST1JfQ09ERVMpLmZpbmQoKFtfLCB2YWx1ZV0pID0+IHZhbHVlID09PSBjb2RlKTtcbiAgcmV0dXJuIGVudHJ5ID8gYCR7ZW50cnlbMF19ICgke2NvZGV9KWAgOiBTdHJpbmcoY29kZSk7XG59XG5cbmZ1bmN0aW9uIGdldEh0dHBTdGF0dXNUZXh0KHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzVGV4dHM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgNDAwOiAnQmFkIFJlcXVlc3QnLFxuICAgIDQwMTogJ1VuYXV0aG9yaXplZCcsXG4gICAgNDAzOiAnRm9yYmlkZGVuJyxcbiAgICA0MDQ6ICdOb3QgRm91bmQnLFxuICAgIDQwODogJ1JlcXVlc3QgVGltZW91dCcsXG4gICAgNDA5OiAnQ29uZmxpY3QnLFxuICAgIDQyMjogJ1VucHJvY2Vzc2FibGUgRW50aXR5JyxcbiAgICA0Mjk6ICdUb28gTWFueSBSZXF1ZXN0cycsXG4gICAgNTAwOiAnSW50ZXJuYWwgU2VydmVyIEVycm9yJyxcbiAgICA1MDI6ICdCYWQgR2F0ZXdheScsXG4gICAgNTAzOiAnU2VydmljZSBVbmF2YWlsYWJsZScsXG4gICAgNTA0OiAnR2F0ZXdheSBUaW1lb3V0JyxcbiAgfTtcbiAgcmV0dXJuIHN0YXR1c1RleHRzW3N0YXR1c10gfHwgJ1Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvclN1Z2dlc3Rpb24oZXJyOiB1bmtub3duLCBjb2RlOiBFcnJvckNvZGUpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKGNvZGUgPT09IEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKSB7XG4gICAgcmV0dXJuICdDaGVjayB0aGF0IFBMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCBjb3JyZWN0bHknO1xuICB9XG4gIGlmIChjb2RlID09PSBFUlJPUl9DT0RFUy5ORVRXT1JLKSB7XG4gICAgcmV0dXJuICdDaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIEFQSSBlbmRwb2ludCBVUkwnO1xuICB9XG4gIGlmIChjb2RlID09PSBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OKSB7XG4gICAgcmV0dXJuICdSdW4gXCJjbGkgdmVyc2lvbiAtLWNoZWNrLWNvbmZpZ1wiIHRvIHZlcmlmeSBjb25maWd1cmF0aW9uJztcbiAgfVxuICBpZiAoY29kZSA9PT0gRVJST1JfQ09ERVMuTk9UX0ZPVU5EKSB7XG4gICAgcmV0dXJuICdWZXJpZnkgdGhlIHJlc291cmNlIElEIGV4aXN0cyBhbmQgeW91IGhhdmUgYWNjZXNzIHRvIGl0JztcbiAgfVxuICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2NkaycpKSB7XG4gICAgcmV0dXJuICdDaGVjayB0aGUgQ0RLIG91dHB1dCBhYm92ZSBmb3IgQ2xvdWRGb3JtYXRpb24gZXJyb3JzLiBSdW4gd2l0aCAtLWRlYnVnIGZvciBmdWxsIGRldGFpbHMnO1xuICB9XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IgJiYgZXJyLmZpZWxkKSB7XG4gICAgcmV0dXJuIGBDaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgZm9yIFwiJHtlcnIuZmllbGR9XCJgO1xuICB9XG4gIGlmIChpc0F4aW9zRXJyb3IoZXJyKSkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGVyci5yZXNwb25zZT8uc3RhdHVzO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMSB8fCBzdGF0dXMgPT09IDQwMykgcmV0dXJuICdDaGVjayB5b3VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIGFuZCBwZXJtaXNzaW9ucyc7XG4gICAgLy8gQSBxdW90YSByZWZ1c2FsIHdvbid0IGNsZWFyIGJ5IHdhaXRpbmcgYSBtb21lbnQ6IHRoZSBtZXNzYWdlIGFscmVhZHkgbmFtZXNcbiAgICAvLyB0aGUgcmVzZXQgZGF0ZSBhbmQgdGhlIHVwZ3JhZGUgbGluayAoYXBpLWNsaWVudCkuIE9ubHkgYSBwbGFpbiA0MjkgaXMgYVxuICAgIC8vIHJhdGUgbGltaXQuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDI5ICYmIGlzUXVvdGFFeGNlZWRlZEJvZHkoZXJyLnJlc3BvbnNlPy5kYXRhKSkge1xuICAgICAgcmV0dXJuICdSZXRyeWluZyB3aWxsIG5vdCBoZWxwIHVudGlsIHRoZSBxdW90YSByZXNldHMg4oCUIHJhaXNlIHRoZSBsaW1pdCBhdCB0aGUgdXBncmFkZSBsaW5rIGFib3ZlJztcbiAgICB9XG4gICAgaWYgKHN0YXR1cyA9PT0gNDI5KSByZXR1cm4gJ1JhdGUgbGltaXQgZXhjZWVkZWQgLSB3YWl0IGEgbW9tZW50IGJlZm9yZSByZXRyeWluZyc7XG4gICAgaWYgKHN0YXR1cyAmJiBzdGF0dXMgPj0gNTAwKSByZXR1cm4gJ1NlcnZlciBlcnJvciAtIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUVycm9yRGF0YShkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgcmV0dXJuIGRhdGE7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHsgLi4uZGF0YSB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIFsndG9rZW4nLCAncGFzc3dvcmQnLCAnc2VjcmV0JywgJ2FwaUtleScsICdhdXRob3JpemF0aW9uJywgJ2p3dCcsICdjcmVkZW50aWFsJywgJ2JlYXJlciddLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkIGluIHNhbml0aXplZCkgc2FuaXRpemVkW2ZpZWxkXSA9ICdbUkVEQUNURURdJztcbiAgICB9KTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2FuaXRpemVkLCBudWxsLCAyKTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKGRhdGEpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuICAgIFsndG9rZW4nLCAna2V5JywgJ3NlY3JldCcsICdwYXNzd29yZCcsICdhcGlLZXknXS5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgIGlmICh1cmxPYmouc2VhcmNoUGFyYW1zLmhhcyhwYXJhbSkpIHVybE9iai5zZWFyY2hQYXJhbXMuc2V0KHBhcmFtLCAnW1JFREFDVEVEXScpO1xuICAgIH0pO1xuICAgIHJldHVybiB1cmxPYmoudG9TdHJpbmcoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMCAmJiAvXltBLVphLXowLTkrLz1fLV0rJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgOCl9Li4uW1JFREFDVEVEXWA7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiAxMDAgPyB2YWx1ZS5zdWJzdHJpbmcoMCwgOTcpICsgJy4uLicgOiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIHNhbml0aXplRXJyb3JEYXRhKHZhbHVlKTtcbiAgY29uc3Qgc3RyID0gU3RyaW5nKHZhbHVlKTtcbiAgcmV0dXJuIHN0ci5sZW5ndGggPiAxMDAgPyBzdHIuc3Vic3RyaW5nKDAsIDk3KSArICcuLi4nIDogc3RyO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVN0YWNrVHJhY2Uoc3RhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMCwgMTApLm1hcChsaW5lID0+IGxpbmUucmVwbGFjZSgvXFwvLio/XFwvL2csICcuLi4vJykpLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBpc0F4aW9zRXJyb3IoZXJyOiB1bmtub3duKTogZXJyIGlzIEF4aW9zRXJyb3JMaWtlIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgZXJyID09PSAnb2JqZWN0JyAmJlxuICAgIGVyciAhPT0gbnVsbCAmJlxuICAgICdpc0F4aW9zRXJyb3InIGluIGVyciAmJlxuICAgIChlcnIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZVxuICApO1xufVxuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUNMLFdBQVcsR0FJWixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTlDLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFHdkI7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQVksRUFDWixJQUFJLEdBQWMsV0FBVyxDQUFDLE9BQU8sRUFDckMsT0FBTyxHQUF3QixFQUFFO0lBRWpDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxNQUFNLEdBQUcsQ0FBQztBQUNaLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQVksRUFDWixJQUFJLEdBQWMsV0FBVyxDQUFDLE9BQU8sRUFDckMsT0FBTyxHQUFzQyxFQUFFO0lBRS9DLE1BQU0sRUFDSixLQUFLLEdBQUcsS0FBSyxFQUNiLFlBQVksR0FBRyxJQUFJLEVB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QUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsS0FBYTtJQUN2QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsR0FBWTtJQUNoQyxPQUFPLENBQ0wsT0FBTyxHQUFHLEtBQUssUUFBUTtRQUN2QixHQUFHLEtBQUssSUFBSTtRQUNaLGNBQWMsSUFBSSxHQUFHO1FBQ3BCLEdBQStCLENBQUMsWUFBWSxLQUFLLElBQUksQ0FDdkQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgaXNRdW90YUV4Y2VlZGVkQm9keSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUV4ZWN1dGlvbklkIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHtcbiAgRVJST1JfQ09ERVMsXG4gIHR5cGUgRXJyb3JDb2RlLFxuICB0eXBlIEVycm9ySGFuZGxlck9wdGlvbnMsXG4gIHR5cGUgQXhpb3NFcnJvckxpa2UsXG59IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcblxuY29uc3QgeyBib2xkLCBkaW0sIHJlZCwgeWVsbG93LCBjeWFuIH0gPSBwaWNvO1xuXG4vLyBSZS1leHBvcnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgeyBFUlJPUl9DT0RFUyB9O1xuZXhwb3J0IHR5cGUgeyBFcnJvckNvZGUgfTtcblxuLyoqXG4gKiBGb3JtYXQgYW5kIGhhbmRsZSBlcnJvcnMgd2l0aCBjb2xvcmVkIG91dHB1dDogcHJpbnQgdGhlIGVycm9yIChzZWVcbiAqIHtAbGluayByZXBvcnRFcnJvcn0pLCB0aGVuIGV4aXQgd2l0aCBpdHMgc3RhbmRhcmQgY29kZSDigJQgb3IsIHdpdGhcbiAqIGBleGl0OiBmYWxzZWAsIHJldGhyb3cgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFcnJvcihcbiAgZXJyOiB1bmtub3duLFxuICBjb2RlOiBFcnJvckNvZGUgPSBFUlJPUl9DT0RFUy5HRU5FUkFMLFxuICBvcHRpb25zOiBFcnJvckhhbmRsZXJPcHRpb25zID0ge30sXG4pOiBuZXZlciB7XG4gIGNvbnN0IHJlc29sdmVkQ29kZSA9IHJlcG9ydEVycm9yKGVyciwgY29kZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmV4aXQgPz8gdHJ1ZSkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSByZXNvbHZlZENvZGU7XG4gICAgcHJvY2Vzcy5leGl0KHJlc29sdmVkQ29kZSk7XG4gIH1cbiAgdGhyb3cgZXJyO1xufVxuXG4vKipcbiAqIFByaW50IGFuIGVycm9yIHRoZSB3YXkge0BsaW5rIGhhbmRsZUVycm9yfSBkb2VzIGFuZCBSRVRVUk4gaXRzIHN0YW5kYXJkIGV4aXRcbiAqIGNvZGUsIHdpdGhvdXQgZXhpdGluZyBvciB0aHJvd2luZyDigJQgZm9yIGNvbW1hbmRzIHdpdGggdGhlaXIgb3duIGV4aXQtY29kZVxuICogY29udHJhY3QgKHRoZSBjcm9uLWZyaWVuZGx5IGF1ZGl0cyBleGl0IDIgb24gYSBzY2FuIGZhaWx1cmUpLiBgaGFuZGxlRXJyb3JgXG4gKiB3aXRoIGBleGl0OiBmYWxzZWAgcmV0aHJvd3MsIHNvIGEgYHByb2Nlc3MuZXhpdCgyKWAgYWZ0ZXIgaXQgbmV2ZXIgcmFuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0RXJyb3IoXG4gIGVycjogdW5rbm93bixcbiAgY29kZTogRXJyb3JDb2RlID0gRVJST1JfQ09ERVMuR0VORVJBTCxcbiAgb3B0aW9uczogT21pdDxFcnJvckhhbmRsZXJPcHRpb25zLCAnZXhpdCc+ID0ge30sXG4pOiBFcnJvckNvZGUge1xuICBjb25zdCB7XG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBsb2dUb0NvbnNvbGUgPSB0cnVlLFxuICAgIGNvbnRleHQsXG4gICAgY29ycmVsYXRpb25JZCA9IGdlbmVyYXRlRXhlY3V0aW9uSWQoKSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gRGVyaXZlIHRoZSBjYW5vbmljYWwgZXhpdCBjb2RlIGZyb20gdGhlIEFDVFVBTCBlcnJvciAoc2VlIHJlc29sdmVFeGl0Q29kZSksXG4gIC8vIGZhbGxpbmcgYmFjayB0byB0aGUgY2FsbGVyJ3MgYGNvZGVgIGZvciBhbnl0aGluZyB1bmNsYXNzaWZpYWJsZS4gVGhpcyBpcyB3aGF0XG4gIC8vIG1ha2VzIGV2ZXJ5IGNvbW1hbmQgZW1pdCB0aGUgU0FNRSBleGl0IGNvZGUgZm9yIHRoZSBzYW1lIGNsYXNzIG9mIGZhaWx1cmUsXG4gIC8vIHJhdGhlciB0aGFuIGEgYmxhbmtldCBBUElfUkVRVUVTVC9HRU5FUkFMLiBVc2VkIGZvciBkaXNwbGF5LCB0aGUgc3VnZ2VzdGlvbixcbiAgLy8gYW5kIHRoZSBwcm9jZXNzIGV4aXQgYmVsb3cuXG4gIGNvbnN0IHJlc29sdmVkQ29kZSA9IHJlc29sdmVFeGl0Q29kZShlcnIsIGNvZGUpO1xuXG4gIGlmIChsb2dUb0NvbnNvbGUpIHtcbiAgICBjb25zdCBkaXZpZGVyID0gJ+KUgCcucmVwZWF0KHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApO1xuICAgIGNvbnN0IGVycm9ySWQgPSBgRVJSLSR7Y29ycmVsYXRpb25JZH1gO1xuXG4gICAgY29uc29sZS5lcnJvcignXFxuJyArIHJlZChib2xkKCfinJcgRVJST1InKSkgKyBkaW0oYCBbJHtlcnJvcklkfV1gKSArICdcXG4nKTtcbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKGJvbGQoJ01lc3NhZ2U6JykpLCBlcnIubWVzc2FnZSk7XG5cbiAgICAgIGlmIChlcnIubmFtZSAhPT0gJ0Vycm9yJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnVHlwZTonKSwgZXJyLm5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IFZhbGlkYXRpb24gZXJyb3IgZGV0YWlsc1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICBpZiAoZXJyLmZpZWxkKSBjb25zb2xlLmVycm9yKHJlZCgnRmllbGQ6JyksIGVyci5maWVsZCk7XG4gICAgICAgIGlmIChlcnIudmFsdWUgIT09IHVuZGVmaW5lZCkgY29uc29sZS5lcnJvcihyZWQoJ1ZhbHVlOicpLCBzYW5pdGl6ZVZhbHVlKGVyci52YWx1ZSkpO1xuICAgICAgICBpZiAoZXJyLnJ1bGUpIGNvbnNvbGUuZXJyb3IocmVkKCdSdWxlOicpLCBlcnIucnVsZSk7XG4gICAgICAgIGlmIChlcnIuZXhwZWN0ZWQpIGNvbnNvbGUuZXJyb3IocmVkKCdFeHBlY3RlZDonKSwgZXJyLmV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBOZXR3b3JrIGVycm9yIGRldGFpbHNcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOZXR3b3JrRXJyb3IpIHtcbiAgICAgICAgaWYgKGVyci51cmwpIGNvbnNvbGUuZXJyb3IocmVkKCdVUkw6JyksIHNhbml0aXplVXJsKGVyci51cmwpKTtcbiAgICAgICAgaWYgKGVyci50aW1lb3V0KSBjb25zb2xlLmVycm9yKHJlZCgnVGltZW91dDonKSwgYCR7ZXJyLnRpbWVvdXR9bXNgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1JlcXVlc3QgTWFkZTonKSwgZXJyLnJlcXVlc3RNYWRlID8gJ1llcycgOiAnTm8nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1Jlc3BvbnNlIFJlY2VpdmVkOicpLCBlcnIucmVzcG9uc2VSZWNlaXZlZCA/ICdZZXMnIDogJ05vJyk7XG4gICAgICAgIGlmIChlcnIuY2F1c2UpIGNvbnNvbGUuZXJyb3IocmVkKCdDYXVzZWQgYnk6JyksIGVyci5jYXVzZS5tZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBBeGlvcyBlcnJvciBkZXRhaWxzXG4gICAgICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZXJyLnJlc3BvbnNlPy5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHVybCA9IGVyci5jb25maWc/LnVybDtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdTdGF0dXM6JyksIHN0YXR1cyk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1N0YXR1cyBUZXh0OicpLCBnZXRIdHRwU3RhdHVzVGV4dChzdGF0dXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXJsKSBjb25zb2xlLmVycm9yKHJlZCgnVVJMOicpLCBzYW5pdGl6ZVVybCh1cmwpKTtcbiAgICAgICAgaWYgKGVyci5yZXNwb25zZT8uZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdSZXNwb25zZTonKSk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVFcnJvckRhdGEoZXJyLnJlc3BvbnNlLmRhdGEpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBDREsvZXhlY1N5bmMgZXJyb3IgZGV0YWlscyAoc3RkZXJyIGNhcHR1cmVkIGZyb20gY2hpbGQgcHJvY2VzcylcbiAgICAgIGlmICgnc3RkZXJyJyBpbiBlcnIgJiYgZXJyLnN0ZGVycikge1xuICAgICAgICBjb25zdCBzdGRlcnIgPSAoZXJyLnN0ZGVyciBhcyBCdWZmZXIgfCBzdHJpbmcpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0NESyBPdXRwdXQ6JykpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGltKHN0ZGVycikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdDb2RlOicpLCBnZXRFcnJvckNvZGVOYW1lKHJlc29sdmVkQ29kZSkpO1xuICAgICAgY29uc29sZS5lcnJvcihkaW0oJ0Vycm9yIElEOicpLCBkaW0oZXJyb3JJZCkpO1xuXG4gICAgICBpZiAoY29udGV4dCAmJiBPYmplY3Qua2V5cyhjb250ZXh0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29udGV4dDonKSk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbnRleHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgJHtjeWFuKGtleSl9OmAsIGRpbShzYW5pdGl6ZVZhbHVlKHZhbHVlKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlYnVnICYmIGVyci5zdGFjaykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCcnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oJ1N0YWNrIHRyYWNlOicpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVTdGFja1RyYWNlKGVyci5zdGFjaykpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0Vycm9yOicpLCBTdHJpbmcoZXJyKSk7XG4gICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29kZTonKSwgZ2V0RXJyb3JDb2RlTmFtZShyZXNvbHZlZENvZGUpKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZGltKCdFcnJvciBJRDonKSwgZGltKGVycm9ySWQpKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoIWRlYnVnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBUaXA6JyksIGRpbSgnUnVuIHdpdGggLS1kZWJ1ZyBmbGFnIHRvIHNlZSBmdWxsIHN0YWNrIHRyYWNlJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBnZXRFcnJvclN1Z2dlc3Rpb24oZXJyLCByZXNvbHZlZENvZGUpO1xuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBTdWdnZXN0aW9uOicpLCBkaW0oc3VnZ2VzdGlvbikpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVkQ29kZTtcbn1cblxuLy8gLS0tIEVycm9yIGNsYXNzZXMgKG9ubHkgdGhvc2UgYWN0dWFsbHkgdXNlZCkgLS0tXG5cbi8qKlxuICogVmFsaWRhdGlvbiBlcnJvciBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIGZpZWxkPzogc3RyaW5nLFxuICAgIHB1YmxpYyB2YWx1ZT86IHVua25vd24sXG4gICAgcHVibGljIHJ1bGU/OiBzdHJpbmcsXG4gICAgcHVibGljIGV4cGVjdGVkPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG4vKipcbiAqIE5ldHdvcmsgZXJyb3IgY2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyB1cmw/OiBzdHJpbmcsXG4gICAgcHVibGljIGNhdXNlPzogRXJyb3IsXG4gICAgcHVibGljIHRpbWVvdXQ/OiBudW1iZXIsXG4gICAgcHVibGljIHJlcXVlc3RNYWRlOiBib29sZWFuID0gdHJ1ZSxcbiAgICBwdWJsaWMgcmVzcG9uc2VSZWNlaXZlZDogYm9vbGVhbiA9IGZhbHNlLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnTmV0d29ya0Vycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG4vLyAtLS0gUHJpdmF0ZSBoZWxwZXJzIC0tLVxuXG4vKipcbiAqIE1hcCB0aGUgQUNUVUFMIGVycm9yIHRvIGEgY2Fub25pY2FsIGV4aXQgY29kZSBzbyBldmVyeSBjb21tYW5kIGV4aXRzIHdpdGggdGhlXG4gKiBTQU1FIGNvZGUgZm9yIHRoZSBzYW1lIGNsYXNzIG9mIGZhaWx1cmUuIFRoZSBjYWxsZXItc3VwcGxpZWQgYGZhbGxiYWNrYCAoZS5nLlxuICogQVBJX1JFUVVFU1QpIGlzIHVzZWQgb25seSBmb3IgZXJyb3JzIHRoaXMgY2FuJ3QgY2xhc3NpZnkuIENvZGVzIChzcmMvdHlwZXMvZXJyb3IudHMpOlxuICpcbiAqICAgMSBHRU5FUkFMIMK3IDIgVkFMSURBVElPTiDCtyAzIEFQSV9SRVFVRVNUIMK3IDQgQVVUSEVOVElDQVRJT04gwrcgNSBBVVRIT1JJWkFUSU9OXG4gKiAgIDYgTk9UX0ZPVU5EIMK3IDcgTkVUV09SSyDCtyA4IENPTkZJR1VSQVRJT04gwrcgOSBGSUxFX1NZU1RFTSDCtyAxMCBUSU1FT1VUXG4gKlxuICogUHJlY2VkZW5jZTogdHlwZWQgQ0xJIGVycm9ycyDihpIgSFRUUCBzdGF0dXMg4oaSIE5vZGUgc3lzdGVtIGVycm9yIGBjb2RlYCDihpIgZmFsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFeGl0Q29kZShlcnI6IHVua25vd24sIGZhbGxiYWNrOiBFcnJvckNvZGUpOiBFcnJvckNvZGUge1xuICBpZiAoZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSByZXR1cm4gRVJST1JfQ09ERVMuVkFMSURBVElPTjtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIE5ldHdvcmtFcnJvcikgcmV0dXJuIGVyci50aW1lb3V0ID8gRVJST1JfQ09ERVMuVElNRU9VVCA6IEVSUk9SX0NPREVTLk5FVFdPUks7XG5cbiAgaWYgKGlzQXhpb3NFcnJvcihlcnIpKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gZXJyLnJlc3BvbnNlPy5zdGF0dXM7XG4gICAgaWYgKHN0YXR1cyA9PT0gNDAwIHx8IHN0YXR1cyA9PT0gNDIyKSByZXR1cm4gRVJST1JfQ09ERVMuVkFMSURBVElPTjtcbiAgICBpZiAoc3RhdHVzID09PSA0MDEpIHJldHVybiBFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTjtcbiAgICBpZiAoc3RhdHVzID09PSA0MDMpIHJldHVybiBFUlJPUl9DT0RFUy5BVVRIT1JJWkFUSU9OO1xuICAgIGlmIChzdGF0dXMgPT09IDQwNCkgcmV0dXJuIEVSUk9SX0NPREVTLk5PVF9GT1VORDtcbiAgICBpZiAoc3RhdHVzID09PSA0MDggfHwgc3RhdHVzID09PSA1MDQpIHJldHVybiBFUlJPUl9DT0RFUy5USU1FT1VUO1xuICAgIC8vIENMSUVOVF9VUEdSQURFX1JFUVVJUkVEOiB0aGlzIENMSSBpcyBiZWxvdyB0aGUgcGxhdGZvcm0ncyBtaW5pbXVtIOKAlCBhXG4gICAgLy8gbG9jYWwtaW5zdGFsbCBwcm9ibGVtIChmaXg6IC0tdXBncmFkZSksIHNvIHNjcmlwdHMgY2FuIHRlbGwgaXQgYXBhcnQuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDI2KSByZXR1cm4gRVJST1JfQ09ERVMuQ09ORklHVVJBVElPTjtcbiAgICBpZiAoc3RhdHVzICYmIHN0YXR1cyA+PSA1MDApIHJldHVybiBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVDtcbiAgICAvLyBBIHJlcXVlc3QgdGhhdCBnb3Qgbm8gSFRUUCByZXNwb25zZSBuZXZlciByZWFjaGVkIHRoZSBzZXJ2ZXIgKEROUyAvIHJlZnVzZWRcbiAgICAvLyAvIHJlc2V0KSDigJQgdGhhdCdzIGEgbmV0d29yayBmYWlsdXJlLCBub3QgYW4gQVBJLXJlc3BvbnNlIGVycm9yLlxuICAgIGlmICghZXJyLnJlc3BvbnNlKSByZXR1cm4gRVJST1JfQ09ERVMuTkVUV09SSztcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cblxuICAvLyBOb2RlIHN5c3RlbSBlcnJvcnMgKGZzICsgc29ja2V0cykgY2FycnkgYSBzdHJpbmcgYGNvZGVgLlxuICBjb25zdCBzeXNDb2RlID0gKGVyciBhcyB7IGNvZGU/OiB1bmtub3duIH0gfCBudWxsKT8uY29kZTtcbiAgaWYgKHR5cGVvZiBzeXNDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChbJ0VOT0VOVCcsICdFQUNDRVMnLCAnRUlTRElSJywgJ0VOT1RESVInLCAnRUVYSVNUJywgJ0VQRVJNJywgJ0VOT1NQQycsICdFTUZJTEUnXS5pbmNsdWRlcyhzeXNDb2RlKSkge1xuICAgICAgcmV0dXJuIEVSUk9SX0NPREVTLkZJTEVfU1lTVEVNO1xuICAgIH1cbiAgICBpZiAoc3lzQ29kZSA9PT0gJ0VUSU1FRE9VVCcpIHJldHVybiBFUlJPUl9DT0RFUy5USU1FT1VUO1xuICAgIGlmIChbJ0VDT05OUkVGVVNFRCcsICdFTk9URk9VTkQnLCAnRUNPTk5SRVNFVCcsICdFSE9TVFVOUkVBQ0gnLCAnRU5FVFVOUkVBQ0gnLCAnRUFJX0FHQUlOJywgJ0VQSVBFJ10uaW5jbHVkZXMoc3lzQ29kZSkpIHtcbiAgICAgIHJldHVybiBFUlJPUl9DT0RFUy5ORVRXT1JLO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JDb2RlTmFtZShjb2RlOiBFcnJvckNvZGUpOiBzdHJpbmcge1xuICBjb25zdCBlbnRyeSA9IE9iamVjdC5lbnRyaWVzKEVSUk9SX0NPREVTKS5maW5kKChbXywgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gY29kZSk7XG4gIHJldHVybiBlbnRyeSA/IGAke2VudHJ5WzBdfSAoJHtjb2RlfSlgIDogU3RyaW5nKGNvZGUpO1xufVxuXG5mdW5jdGlvbiBnZXRIdHRwU3RhdHVzVGV4dChzdGF0dXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YXR1c1RleHRzOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAgIDQwMDogJ0JhZCBSZXF1ZXN0JyxcbiAgICA0MDE6ICdVbmF1dGhvcml6ZWQnLFxuICAgIDQwMzogJ0ZvcmJpZGRlbicsXG4gICAgNDA0OiAnTm90IEZvdW5kJyxcbiAgICA0MDg6ICdSZXF1ZXN0IFRpbWVvdXQnLFxuICAgIDQwOTogJ0NvbmZsaWN0JyxcbiAgICA0MjI6ICdVbnByb2Nlc3NhYmxlIEVudGl0eScsXG4gICAgNDI5OiAnVG9vIE1hbnkgUmVxdWVzdHMnLFxuICAgIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG4gICAgNTAyOiAnQmFkIEdhdGV3YXknLFxuICAgIDUwMzogJ1NlcnZpY2UgVW5hdmFpbGFibGUnLFxuICAgIDUwNDogJ0dhdGV3YXkgVGltZW91dCcsXG4gIH07XG4gIHJldHVybiBzdGF0dXNUZXh0c1tzdGF0dXNdIHx8ICdVbmtub3duJztcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JTdWdnZXN0aW9uKGVycjogdW5rbm93biwgY29kZTogRXJyb3JDb2RlKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChjb2RlID09PSBFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTikge1xuICAgIHJldHVybiAnQ2hlY2sgdGhhdCBQTEFURk9STV9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgY29ycmVjdGx5JztcbiAgfVxuICBpZiAoY29kZSA9PT0gRVJST1JfQ09ERVMuTkVUV09SSykge1xuICAgIHJldHVybiAnQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uIGFuZCBBUEkgZW5kcG9pbnQgVVJMJztcbiAgfVxuICBpZiAoY29kZSA9PT0gRVJST1JfQ09ERVMuQ09ORklHVVJBVElPTikge1xuICAgIHJldHVybiAnUnVuIFwiY2xpIHZlcnNpb24gLS1jaGVjay1jb25maWdcIiB0byB2ZXJpZnkgY29uZmlndXJhdGlvbic7XG4gIH1cbiAgaWYgKGNvZGUgPT09IEVSUk9SX0NPREVTLk5PVF9GT1VORCkge1xuICAgIHJldHVybiAnVmVyaWZ5IHRoZSByZXNvdXJjZSBJRCBleGlzdHMgYW5kIHlvdSBoYXZlIGFjY2VzcyB0byBpdCc7XG4gIH1cbiAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdjZGsnKSkge1xuICAgIHJldHVybiAnQ2hlY2sgdGhlIENESyBvdXRwdXQgYWJvdmUgZm9yIENsb3VkRm9ybWF0aW9uIGVycm9ycy4gUnVuIHdpdGggLS1kZWJ1ZyBmb3IgZnVsbCBkZXRhaWxzJztcbiAgfVxuICBpZiAoZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yICYmIGVyci5maWVsZCkge1xuICAgIHJldHVybiBgQ2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIGZvciBcIiR7ZXJyLmZpZWxkfVwiYDtcbiAgfVxuICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnIucmVzcG9uc2U/LnN0YXR1cztcbiAgICBpZiAoc3RhdHVzID09PSA0MDEgfHwgc3RhdHVzID09PSA0MDMpIHJldHVybiAnQ2hlY2sgeW91ciBhdXRoZW50aWNhdGlvbiB0b2tlbiBhbmQgcGVybWlzc2lvbnMnO1xuICAgIC8vIEEgcXVvdGEgcmVmdXNhbCB3b24ndCBjbGVhciBieSB3YWl0aW5nIGEgbW9tZW50OiB0aGUgbWVzc2FnZSBhbHJlYWR5IG5hbWVzXG4gICAgLy8gdGhlIHJlc2V0IGRhdGUgYW5kIHRoZSB1cGdyYWRlIGxpbmsgKGFwaS1jbGllbnQpLiBPbmx5IGEgcGxhaW4gNDI5IGlzIGFcbiAgICAvLyByYXRlIGxpbWl0LlxuICAgIGlmIChzdGF0dXMgPT09IDQyOSAmJiBpc1F1b3RhRXhjZWVkZWRCb2R5KGVyci5yZXNwb25zZT8uZGF0YSkpIHtcbiAgICAgIHJldHVybiAnUmV0cnlpbmcgd2lsbCBub3QgaGVscCB1bnRpbCB0aGUgcXVvdGEgcmVzZXRzIOKAlCByYWlzZSB0aGUgbGltaXQgYXQgdGhlIHVwZ3JhZGUgbGluayBhYm92ZSc7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDQyOSkgcmV0dXJuICdSYXRlIGxpbWl0IGV4Y2VlZGVkIC0gd2FpdCBhIG1vbWVudCBiZWZvcmUgcmV0cnlpbmcnO1xuICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzID49IDUwMCkgcmV0dXJuICdTZXJ2ZXIgZXJyb3IgLSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0JztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVFcnJvckRhdGEoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHJldHVybiBkYXRhO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgIT09IG51bGwpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSB7IC4uLmRhdGEgfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBbJ3Rva2VuJywgJ3Bhc3N3b3JkJywgJ3NlY3JldCcsICdhcGlLZXknLCAnYXV0aG9yaXphdGlvbicsICdqd3QnLCAnY3JlZGVudGlhbCcsICdiZWFyZXInXS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZCBpbiBzYW5pdGl6ZWQpIHNhbml0aXplZFtmaWVsZF0gPSAnW1JFREFDVEVEXSc7XG4gICAgfSk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNhbml0aXplZCwgbnVsbCwgMik7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhkYXRhKTtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICBbJ3Rva2VuJywgJ2tleScsICdzZWNyZXQnLCAncGFzc3dvcmQnLCAnYXBpS2V5J10uZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICBpZiAodXJsT2JqLnNlYXJjaFBhcmFtcy5oYXMocGFyYW0pKSB1cmxPYmouc2VhcmNoUGFyYW1zLnNldChwYXJhbSwgJ1tSRURBQ1RFRF0nKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdXJsT2JqLnRvU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FuaXRpemVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAndW5kZWZpbmVkJztcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID4gMjAgJiYgL15bQS1aYS16MC05Ky89Xy1dKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIDgpfS4uLltSRURBQ1RFRF1gO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID4gMTAwID8gdmFsdWUuc3Vic3RyaW5nKDAsIDk3KSArICcuLi4nIDogdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiBzYW5pdGl6ZUVycm9yRGF0YSh2YWx1ZSk7XG4gIGNvbnN0IHN0ciA9IFN0cmluZyh2YWx1ZSk7XG4gIHJldHVybiBzdHIubGVuZ3RoID4gMTAwID8gc3RyLnN1YnN0cmluZygwLCA5NykgKyAnLi4uJyA6IHN0cjtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVTdGFja1RyYWNlKHN0YWNrOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RhY2suc3BsaXQoJ1xcbicpLnNsaWNlKDAsIDEwKS5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoL1xcLy4qP1xcLy9nLCAnLi4uLycpKS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gaXNBeGlvc0Vycm9yKGVycjogdW5rbm93bik6IGVyciBpcyBBeGlvc0Vycm9yTGlrZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGVyciA9PT0gJ29iamVjdCcgJiZcbiAgICBlcnIgIT09IG51bGwgJiZcbiAgICAnaXNBeGlvc0Vycm9yJyBpbiBlcnIgJiZcbiAgICAoZXJyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5pc0F4aW9zRXJyb3IgPT09IHRydWVcbiAgKTtcbn1cbiJdfQ==
@@ -11,8 +11,6 @@ export declare function isManagedToolchainRef(ref: {
11
11
  publisher?: string;
12
12
  filter?: Record<string, unknown>;
13
13
  }): boolean;
14
- /** The pipeline's toolchain release pin (`props.toolchain.release`), when set. */
15
- export declare function toolchainReleasePin(props: Record<string, unknown>): string | undefined;
16
14
  /** The plugin service's error code on a refused answer, when it carries one. */
17
15
  export declare function serviceErrorCode(err: unknown): string | null;
18
16
  /** One plugin the synth could not use, as {@link PluginResolutionError} reports it. */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-resolver.d.ts","sources":["../../src/utils/plugin-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAC6D,KAAK,eAAe,EAAE,KAAK,aAAa,EAE3G,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAqH5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,OAAO,CAI3H;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAGtF;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,uFAAuF;AACvF,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE;IAAvD,YAAqB,QAAQ,EAAE,SAAS,aAAa,EAAE,EAKtD;CACF;AAmBD,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAG9E;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAOlF;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,aAAa,EAAE,EAC7B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoFlC"}
1
+ {"version":3,"file":"plugin-resolver.d.ts","sources":["../../src/utils/plugin-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAC6D,KAAK,eAAe,EAAE,KAAK,aAAa,EAE3G,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAqH5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,OAAO,CAE3H;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,uFAAuF;AACvF,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE;IAAvD,YAAqB,QAAQ,EAAE,SAAS,aAAa,EAAE,EAKtD;CACF;AAmBD,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAG9E;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAOlF;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,aAAa,EAAE,EAC7B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoFlC"}
@@ -1,6 +1,6 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { ErrorCode, errorMessage, isManagedToolchainPlugin } from '@pipeline-builder/api-core';
3
+ import { ErrorCode, errorMessage, managedToolchainRefName, toolchainReleasePin } from '@pipeline-builder/api-core';
4
4
  import { collectPluginSteps, exactPinNotFoundMessage, lookupNotFoundState, pluginArtifactAlias, pluginLookupFilter, summarizeLookupWarnings, unwrapLookup, } from '@pipeline-builder/pipeline-core';
5
5
  import pico from 'picocolors';
6
6
  import { ApiClient } from './api-client.js';
@@ -107,15 +107,7 @@ function exactVersionPin(ref) {
107
107
  * canary / platform default), never by its own version.
108
108
  */
109
109
  export function isManagedToolchainRef(ref) {
110
- if (ref.publisher)
111
- return false;
112
- const name = typeof ref.filter?.name === 'string' ? ref.filter.name : ref.name;
113
- return isManagedToolchainPlugin(name);
114
- }
115
- /** The pipeline's toolchain release pin (`props.toolchain.release`), when set. */
116
- export function toolchainReleasePin(props) {
117
- const toolchain = props.toolchain;
118
- return typeof toolchain?.release === 'string' && toolchain.release.length > 0 ? toolchain.release : undefined;
110
+ return !ref.publisher && managedToolchainRefName(ref) !== null;
119
111
  }
120
112
  /** The plugin service's error code on a refused answer, when it carries one. */
121
113
  export function serviceErrorCode(err) {
@@ -295,4 +287,4 @@ export async function resolvePluginsForProps(client, props, warningSink, toolcha
295
287
  throw new PluginResolutionError(fatal);
296
288
  return resolved;
297
289
  }
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGx1Z2luLXJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRixPQUFPLEVBQ0wsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQ2hFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLFlBQVksR0FDL0UsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVdqRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsR0FBYztJQUM5QixPQUFPLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsaUJBQWlCLENBQUMsS0FBOEI7SUFDdkQsTUFBTSxJQUFJLEdBQWdCLEVBQUUsQ0FBQztJQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUV2QyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQVksRUFBUSxFQUFFO1FBQ2xDLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDNUMsTUFBTSxDQUFDLEdBQUcsR0FBZ0IsQ0FBQztRQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4Qix3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNFLE1BQU0sSUFBSSxH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LENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsWUFBWSxDQUFDLFdBQVcsS0FBSyw0QkFBNEIsR0FBRyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQzVHLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxNQUFNLElBQUkscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBFcnJvckNvZGUsIGVycm9yTWVzc2FnZSwgaXNNYW5hZ2VkVG9vbGNoYWluUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHtcbiAgY29sbGVjdFBsdWdpblN0ZXBzLCBleGFjdFBpbk5vdEZvdW5kTWVzc2FnZSwgbG9va3VwTm90Rm91bmRTdGF0ZSwgdHlwZSBMb29rdXBUb29sY2hhaW4sIHR5cGUgTG9va3VwV2FybmluZywgdHlwZSBMb29rdXBXYXJuaW5nU2V2ZXJpdHksXG4gIHBsdWdpbkFydGlmYWN0QWxpYXMsIHBsdWdpbkxvb2t1cEZpbHRlciwgc3VtbWFyaXplTG9va3VwV2FybmluZ3MsIHVud3JhcExvb2t1cCxcbn0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5cbi8qKiBNaW5pbWFsIHBsdWdpbiByZWZlcmVuY2Ugc2hhcGUg4oCUIG1hdGNoZXMgUGx1Z2luT3B0aW9ucyBmcm9tIHBpcGVsaW5lLWNvcmUuICovXG5pbnRlcmZhY2UgUGx1Z2luUmVmIHtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogUHVibGlzaGVyIGhhbmRsZSBvZiBhbiBpbnN0YWxsZWQgbGlzdGluZy4gKi9cbiAgcHVibGlzaGVyPzogc3RyaW5nO1xuICBhbGlhcz86IHN0cmluZztcbiAgZmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQ2FjaGUga2V5IG1hdGNoaW5nIGBQbHVnaW5Mb29rdXAubm9ybWFsaXplKClgOiB0aGUgZXhwbGljaXQgYWxpYXMgd2hlbiBzZXQsXG4gKiBvdGhlcndpc2UgYFs8cHVibGlzaGVyPi1dPG5hbWU+LWFsaWFzYCDigJQgcGlwZWxpbmUtY29yZSdzXG4gKiBgcGx1Z2luQXJ0aWZhY3RBbGlhc2AsIHRoZSBvbmUgcnVsZSBldmVyeSBjb25zdW1lciBvZiB0aGlzIG1hcCB1c2VzLlxuICovXG5mdW5jdGlvbiBjYWNoZUtleShyZWY6IFBsdWdpblJlZik6IHN0cmluZyB7XG4gIHJldHVybiBwbHVnaW5BcnRpZmFjdEFsaWFzKHJlZik7XG59XG5cbi8qKlxuICogV2FsayB0aGUgcGlwZWxpbmUgcHJvcHMgdHJlZSB0byBjb2xsZWN0IGV2ZXJ5IHBsdWdpbiByZWZlcmVuY2UuIFBsdWdpbnNcbiAqIGFwcGVhciBhdCBgc3ludGgucGx1Z2luYCBhbmQgYXQgYHN0YWdlc1tdLnN0ZXBzW10ucGx1Z2luYC4gRW50cmllcyBhcmVcbiAqIGRlLWR1cGxpY2F0ZWQgYnkgYGNhY2hlS2V5KClgIOKAlCB0aGUgc2FtZSBrZXkgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgdXNlcyxcbiAqIHNvIHRoZSByZXNvbHZlZC1wbHVnaW5zIG1hcCBsb29rdXBzIG1hdGNoIGRvd25zdHJlYW0uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RQbHVnaW5SZWZzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBsdWdpblJlZltdIHtcbiAgY29uc3QgcmVmczogUGx1Z2luUmVmW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3QgcHVzaCA9IChyYXc6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuICAgIGNvbnN0IHIgPSByYXcgYXMgUGx1Z2luUmVmO1xuICAgIGlmICghci5uYW1lKSByZXR1cm47XG4gICAgY29uc3Qga2V5ID0gY2FjaGVLZXkocik7XG4gICAgLy8gVGhlIG5hbWUgdGhlIGxvb2t1cCB3aWxsIFRBUkdFVCDigJQgYW4gZXhwbGljaXQgYGZpbHRlci5uYW1lYCB3aW5zIChzZWVcbiAgICAvLyBiZWxvdyksIHNvIHR3byByZWZzIHRoYXQgcmVzb2x2ZSB0byB0aGUgc2FtZSBwbHVnaW4gYXJlIG5vdCBhIGNvbGxpc2lvbi5cbiAgICBjb25zdCBuYW1lID0gKHIuZmlsdGVyPy5uYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gci5uYW1lO1xuICAgIGNvbnN0IHRhcmdldCA9IHIucHVibGlzaGVyID8gYCR7ci5wdWJsaXNoZXJ9LyR7bmFtZX1gIDogbmFtZTtcbiAgICBjb25zdCBob2xkZXIgPSBzZWVuLmdldChrZXkpO1xuICAgIGlmIChob2xkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gT25lIGFsaWFzIGNhbiBvbmx5IGV2ZXIgbWVhbiBvbmUgcGx1Z2luLiBEZWR1cGxpY2F0aW5nIG9uIHRoZSBhbGlhc1xuICAgICAgLy8gYWxvbmUga2VwdCB0aGUgRklSU1QgcGx1Z2luIGFuZCBzaWxlbnRseSBkcm9wcGVkIHRoZSBzZWNvbmQsIHNvIGEgc3RlcFxuICAgICAgLy8gZGVjbGFyaW5nIGB7IG5hbWU6ICdtYXZlbi1idWlsZCcsIGFsaWFzOiAnYnVpbGQnIH1gIGFmdGVyIGFub3RoZXJcbiAgICAgIC8vIGRlY2xhcmluZyBgeyBuYW1lOiAnbm9kZWpzLWJ1aWxkJywgYWxpYXM6ICdidWlsZCcgfWAgcmFuIG5vZGVqcy1idWlsZCdzXG4gICAgICAvLyBpbWFnZSBhbmQgY29tbWFuZHMg4oCUIG5vIGVycm9yLCBqdXN0IHRoZSB3cm9uZyBidWlsZC5cbiAgICAgIGlmIChob2xkZXIgIT09IHRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFBsdWdpbiBhbGlhcyBcIiR7a2V5fVwiIGlzIHVzZWQgZm9yIHR3byBkaWZmZXJlbnQgcGx1Z2lucyAoXCIke2hvbGRlcn1cIiBhbmQgXCIke3RhcmdldH1cIikuIGBcbiAgICAgICAgICArICdHaXZlIGVhY2ggcGx1Z2luIGl0cyBvd24gYWxpYXMuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2Vlbi5zZXQoa2V5LCB0YXJnZXQpO1xuICAgIHJlZnMucHVzaChyKTtcbiAgfTtcblxuICBjb25zdCBzeW50aCA9IHByb3BzLnN5bnRoIGFzIHsgcGx1Z2luPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICBwdXNoKHN5bnRoPy5wbHVnaW4pO1xuXG4gIGNvbnN0IHN0YWdlcyA9IHByb3BzLnN0YWdlcyBhcyBBcnJheTx7IHN0ZXBzPzogQXJyYXk8eyBwbHVnaW4/OiB1bmtub3duIH0+IH0+IHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcyA/PyBbXSkge1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBzdGFnZS5zdGVwcyA/PyBbXSkge1xuICAgICAgcHVzaChzdGVwLnBsdWdpbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlZnM7XG59XG5cbi8qKlxuICogTG9va3VwIHJlZnVzYWxzIHRoYXQgbXVzdCBTVE9QIHRoZSBzeW50aCByYXRoZXIgdGhhbiBmYWxsIGJhY2sgdG9cbiAqIGRlcGxveS10aW1lIHJlc29sdXRpb246IGFuIGltYWdlIHdob3NlIHNpZ25hdHVyZSBkb2Vzbid0IHZlcmlmeSwgYSBsaXN0aW5nXG4gKiB0aGUgb3JnIGNhbid0IHVzZSAobm90IGluc3RhbGxlZCwgYmxvY2tlZCBieSBpdHMgYWxsb3cvZGVueSBwb2xpY3ksIHlhbmtlZFxuICogb3Igc3VzcGVuZGVkKSwgYW5kIGFuIG9yZyBwbHVnaW4gdGhhdCB3YXMgZGVsZXRlZC4gRmFsbGluZyBiYWNrIHdvdWxkXG4gKiBxdWlldGx5IHR1cm4gZWFjaCBpbnRvIGFuIHVucmVzb2x2ZWQgc3RlcCB0aGF0IGZhaWxzIGF0IHJ1biB0aW1lIGluc3RlYWQgb2ZcbiAqIG5vdy4gVnVsbmVyYWJpbGl0eSBzdGF0ZSBpcyBORVZFUiBvbmUgb2YgdGhlc2U6IGl0IGFycml2ZXMgYXMgZ3JhZGVkXG4gKiB3YXJuaW5ncyBiZXNpZGUgYSByZXNvbHZlZCBwbHVnaW4uXG4gKi9cbmNvbnN0IEZBVEFMX0xPT0tVUF9DT0RFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIEVycm9yQ29kZS5JTUFHRV9WRVJJRklDQVRJT05fRkFJTEVELFxuICBFcnJvckNvZGUuUExVR0lOX05PVF9JTlNUQUxMRUQsXG4gIEVycm9yQ29kZS5QTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1ksXG4gIEVycm9yQ29kZS5QTFVHSU5fVU5BVkFJTEFCTEUsXG4gIC8vIFRoZSBvcmcncyBvd24gcGx1Z2luIHdhcyBkZWxldGVkOiB0aGUgbG9va3VwIHJlZnVzZXMgaXQgcmF0aGVyIHRoYW4gZmFsbFxuICAvLyB0aHJvdWdoIHRvIGEgc2FtZS1uYW1lIGxpc3RpbmcuIChQbHVnaW4gc2VydmljZSBjb2RlOyBtYXRjaGVkIGFzIGEgc3RyaW5nLilcbiAgJ1BMVUdJTl9ERUxFVEVEJyxcbl07XG5cbi8qKiBUaGUgZXJyb3IgY29kZSBvZiBhIHBsdWdpbiBzZXJ2aWNlIGFuc3dlciwgd2hlbiBpdCBpcyBvbmUgb2Yge0BsaW5rIEZBVEFMX0xPT0tVUF9DT0RFU30uICovXG5mdW5jdGlvbiBmYXRhbExvb2t1cENvZGUoZXJyOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGRhdGEgPSAoZXJyIGFzIHsgcmVzcG9uc2U/OiB7IGRhdGE/OiB1bmtub3duIH0gfSB8IHVuZGVmaW5lZCk/LnJlc3BvbnNlPy5kYXRhO1xuICBjb25zdCBjb2RlID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyAoZGF0YSBhcyB7IGNvZGU/OiB1bmtub3duIH0pLmNvZGUgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycgJiYgRkFUQUxfTE9PS1VQX0NPREVTLmluY2x1ZGVzKGNvZGUpID8gY29kZSA6IG51bGw7XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBwbHVnaW4gc2VydmljZSBhbnN3ZXJlZCBcIm5vIHN1Y2ggcGx1Z2luL3ZlcnNpb25cIiAoNDA0IE5PVF9GT1VORCkuICovXG5mdW5jdGlvbiBpc05vdEZvdW5kKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCByZXNwb25zZSA9IChlcnIgYXMgeyByZXNwb25zZT86IHsgc3RhdHVzPzogdW5rbm93bjsgZGF0YT86IHVua25vd24gfSB9IHwgdW5kZWZpbmVkKT8ucmVzcG9uc2U7XG4gIGNvbnN0IGNvZGUgPSByZXNwb25zZT8uZGF0YSAmJiB0eXBlb2YgcmVzcG9uc2UuZGF0YSA9PT0gJ29iamVjdCcgPyAocmVzcG9uc2UuZGF0YSBhcyB7IGNvZGU/OiB1bmtub3duIH0pLmNvZGUgOiB1bmRlZmluZWQ7XG4gIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDQgfHwgY29kZSA9PT0gRXJyb3JDb2RlLk5PVF9GT1VORDtcbn1cblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBhIHJlZmVyZW5jZSBQSU5TIOKAlCBvbmUgZXhhY3QgYHgueS56Wy1wcmVdYCwgbm90IGEgcmFuZ2Ugb3JcbiAqIGBsYXRlc3RgLiBBIHBpbiBuYW1lcyBhIHZlcnNpb24gdGhhdCBtdXN0IGV4aXN0OiBpZiBpdCBkb2Vzbid0IChuZXZlclxuICogcHVibGlzaGVkLCBvciByZWZ1c2VkIGJ5IHRoZSBidWlsZCdzIHZ1bG5lcmFiaWxpdHkgZ2F0ZSwgd2hpY2ggc2F2ZXNcbiAqIG5vdGhpbmcpLCB0aGVyZSBpcyBubyBvdXRhZ2UgdG8gcmlkZSBvdXQgYW5kIG5vdGhpbmcgZm9yIHRoZSBkZXBsb3ktdGltZVxuICogbG9va3VwIHRvIGZpbmQgZWl0aGVyLlxuICovXG5mdW5jdGlvbiBleGFjdFZlcnNpb25QaW4ocmVmOiBQbHVnaW5SZWYpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgdmVyc2lvbiA9IHJlZi5maWx0ZXI/LnZlcnNpb247XG4gIHJldHVybiB0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycgJiYgL15cXGQrXFwuXFxkK1xcLlxcZCsoLVswLTlBLVphLXouLV0rKT8kLy50ZXN0KHZlcnNpb24pID8gdmVyc2lvbiA6IG51bGw7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHJlZmVyZW5jZSBuYW1lcyBhIG1hbmFnZWQgdG9vbGNoYWluIGhhbGYgKGBjZGstc3ludGhgKTogdGhlXG4gKiBzeXN0ZW0gb3JnJ3MsIG5ldmVyIGEgbGlzdGluZyDigJQgc28gbm8gcHVibGlzaGVyLiBJdCByZXNvbHZlcyB0aHJvdWdoIHRoZVxuICogdG9vbGNoYWluIHJlbGVhc2UgKHRoZSBwaXBlbGluZSdzIGB0b29sY2hhaW4ucmVsZWFzZWAgcGluLCBlbHNlIHRoZSBvcmcgL1xuICogY2FuYXJ5IC8gcGxhdGZvcm0gZGVmYXVsdCksIG5ldmVyIGJ5IGl0cyBvd24gdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFuYWdlZFRvb2xjaGFpblJlZihyZWY6IHsgbmFtZT86IHN0cmluZzsgcHVibGlzaGVyPzogc3RyaW5nOyBmaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KTogYm9vbGVhbiB7XG4gIGlmIChyZWYucHVibGlzaGVyKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG5hbWUgPSB0eXBlb2YgcmVmLmZpbHRlcj8ubmFtZSA9PT0gJ3N0cmluZycgPyByZWYuZmlsdGVyLm5hbWUgOiByZWYubmFtZTtcbiAgcmV0dXJuIGlzTWFuYWdlZFRvb2xjaGFpblBsdWdpbihuYW1lKTtcbn1cblxuLyoqIFRoZSBwaXBlbGluZSdzIHRvb2xjaGFpbiByZWxlYXNlIHBpbiAoYHByb3BzLnRvb2xjaGFpbi5yZWxlYXNlYCksIHdoZW4gc2V0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvb2xjaGFpblJlbGVhc2VQaW4ocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9vbGNoYWluID0gcHJvcHMudG9vbGNoYWluIGFzIHsgcmVsZWFzZT86IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHR5cGVvZiB0b29sY2hhaW4/LnJlbGVhc2UgPT09ICdzdHJpbmcnICYmIHRvb2xjaGFpbi5yZWxlYXNlLmxlbmd0aCA+IDAgPyB0b29sY2hhaW4ucmVsZWFzZSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRoZSBwbHVnaW4gc2VydmljZSdzIGVycm9yIGNvZGUgb24gYSByZWZ1c2VkIGFuc3dlciwgd2hlbiBpdCBjYXJyaWVzIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlRXJyb3JDb2RlKGVycjogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBkYXRhID0gKGVyciBhcyB7IHJlc3BvbnNlPzogeyBkYXRhPzogdW5rbm93biB9IH0gfCB1bmRlZmluZWQpPy5yZXNwb25zZT8uZGF0YTtcbiAgY29uc3QgY29kZSA9IGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gKGRhdGEgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUubGVuZ3RoID4gMCA/IGNvZGUgOiBudWxsO1xufVxuXG4vKiogT25lIHBsdWdpbiB0aGUgc3ludGggY291bGQgbm90IHVzZSwgYXMge0BsaW5rIFBsdWdpblJlc29sdXRpb25FcnJvcn0gcmVwb3J0cyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luUmVmdXNhbCB7XG4gIC8qKiBgWzxwdWJsaXNoZXI+L108bmFtZT5gIG9mIHRoZSByZWZlcmVuY2UuICovXG4gIHJlYWRvbmx5IHBsdWdpbjogc3RyaW5nO1xuICAvKiogVGhlIHBsdWdpbiBzZXJ2aWNlJ3MgZXJyb3IgY29kZSwgb3IgYSBsb2NhbCBvbmUgKGBQTFVHSU5fVkVSU0lPTl9OT1RfRk9VTkRgKS4gKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlcnkgZmF0YWwgcmVmdXNhbCBvZiBvbmUgcHJlLXJlc29sdXRpb24gcGFzcy4gQ2FycmllcyB0aGUgc3RydWN0dXJlZCBsaXN0XG4gKiBhcyB3ZWxsIGFzIHRoZSBodW1hbiBtZXNzYWdlLCBzbyB0aGUgc3ludGggY2FuIGVtaXQgYSBtYWNoaW5lLXJlYWRhYmxlXG4gKiBmYWlsdXJlIGxpbmUgKGBQQl9TWU5USF9GQUlMVVJFYCkgdGhlIGV4ZWN1dGlvbiBldmVudHMgcGljayB1cC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpblJlc29sdXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcmVmdXNhbHM6IHJlYWRvbmx5IFBsdWdpblJlZnVzYWxbXSkge1xuICAgIHN1cGVyKHJlZnVzYWxzLmxlbmd0aCA9PT0gMVxuICAgICAgPyByZWZ1c2Fsc1swXSEubWVzc2FnZVxuICAgICAgOiBgJHtyZWZ1c2Fscy5sZW5ndGh9IHBsdWdpbnMgY2FuJ3QgYmUgdXNlZDpcXG4ke3JlZnVzYWxzLm1hcCgocikgPT4gYCAgLSAke3IubWVzc2FnZX1gKS5qb2luKCdcXG4nKX1gKTtcbiAgICB0aGlzLm5hbWUgPSAnUGx1Z2luUmVzb2x1dGlvbkVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFdoeSBhbiBleGFjdCBwaW4gd2FzIG5vdCBmb3VuZCwgcGhyYXNlZCBmcm9tIHRoZSA0MDQncyBgZGV0YWlscy5zdGF0ZWBcbiAqIChgZGVsZXRlZGAgLyBgaW5hY3RpdmVgIC8gYHlhbmtlZGAgLyBgbWlzc2luZ2ApLiBXaXRob3V0IGEgc3RhdGUgdGhlIGFuc3dlclxuICogY2Fubm90IHRlbGwgdGhlIGNhc2VzIGFwYXJ0LCBzbyB0aGUgbWVzc2FnZSBuYW1lcyB0aGUgdHdvIGxpa2VsaWVzdC5cbiAqIFNoYXJlZCB3aXRoIHRoZSBkZXBsb3ktdGltZSBMYW1iZGEncyBDbG91ZEZvcm1hdGlvbiByZWFzb24gKHBpcGVsaW5lLWNvcmUpLlxuICovXG5mdW5jdGlvbiBwaW5Ob3RGb3VuZE1lc3NhZ2UobGFiZWw6IHN0cmluZywgcGluOiBzdHJpbmcsIGVycj86IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gZXhhY3RQaW5Ob3RGb3VuZE1lc3NhZ2UobGFiZWwsIHBpbiwgbG9va3VwTm90Rm91bmRTdGF0ZShlcnIpKTtcbn1cblxuY29uc3QgU0VWRVJJVFlfU1RZTEU6IFJlY29yZDxMb29rdXBXYXJuaW5nU2V2ZXJpdHksIChzOiBzdHJpbmcpID0+IHN0cmluZz4gPSB7XG4gIGluZm86IHBpY28uY3lhbixcbiAgd2FybmluZzogcGljby55ZWxsb3csXG4gIGVycm9yOiBwaWNvLnJlZCxcbiAgY3JpdGljYWw6ICh0KSA9PiBwaWNvLmJvbGQocGljby5yZWQodCkpLFxufTtcblxuLyoqIFByaW50IG9uZSBsb29rdXAgd2FybmluZywgcHJlZml4ZWQgYW5kIGNvbG91cmVkIGJ5IGl0cyBzZXZlcml0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludExvb2t1cFdhcm5pbmcobGFiZWw6IHN0cmluZywgd2FybmluZzogTG9va3VwV2FybmluZyk6IHZvaWQge1xuICBjb25zdCB0YWcgPSBTRVZFUklUWV9TVFlMRVt3YXJuaW5nLnNldmVyaXR5XShgWyR7d2FybmluZy5zZXZlcml0eS50b1VwcGVyQ2FzZSgpfV1gKTtcbiAgcHJpbnRXYXJuaW5nKGAke3RhZ30gUGx1Z2luIFwiJHtsYWJlbH1cIjogJHt3YXJuaW5nLm1lc3NhZ2V9YCk7XG59XG5cbi8qKiBQcmludCB0aGUgb25lLWxpbmUgc2V2ZXJpdHkgc3VtbWFyeSBvZiBhIHN5bnRoJ3MgbG9va3VwIHdhcm5pbmdzIChub3RoaW5nIHdoZW4gbm9uZSkuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMb29rdXBXYXJuaW5nU3VtbWFyeSh3YXJuaW5nczogcmVhZG9ubHkgTG9va3VwV2FybmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IGxpbmUgPSBzdW1tYXJpemVMb29rdXBXYXJuaW5ncyh3YXJuaW5ncyk7XG4gIGlmICghbGluZSkgcmV0dXJuO1xuICBjb25zdCB3b3JzdCA9IHdhcm5pbmdzLnNvbWUoKHcpID0+IHcuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpID8gJ2NyaXRpY2FsJ1xuICAgIDogd2FybmluZ3Muc29tZSgodykgPT4gdy5zZXZlcml0eSA9PT0gJ2Vycm9yJykgPyAnZXJyb3InXG4gICAgICA6IHdhcm5pbmdzLnNvbWUoKHcpID0+IHcuc2V2ZXJpdHkgPT09ICd3YXJuaW5nJykgPyAnd2FybmluZycgOiAnaW5mbyc7XG4gIHByaW50V2FybmluZyhTRVZFUklUWV9TVFlMRVt3b3JzdF0obGluZSkpO1xufVxuXG4vKiogVGhlIHBsdWdpbiBzZXJ2aWNlJ3Mgb3duIHJlZnVzYWwgbWVzc2FnZSwgd2hlbiB0aGUgYW5zd2VyIGNhcnJpZXMgb25lLiAqL1xuZnVuY3Rpb24gc2VydmljZU1lc3NhZ2UoZXJyOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGRhdGEgPSAoZXJyIGFzIHsgcmVzcG9uc2U/OiB7IGRhdGE/OiB1bmtub3duIH0gfSB8IHVuZGVmaW5lZCk/LnJlc3BvbnNlPy5kYXRhO1xuICBjb25zdCBtZXNzYWdlID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyAoZGF0YSBhcyB7IG1lc3NhZ2U/OiB1bmtub3duIH0pLm1lc3NhZ2UgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5sZW5ndGggPiAwID8gbWVzc2FnZSA6IG51bGw7XG59XG5cbi8qKlxuICogUHJlLXJlc29sdmUgcGx1Z2lucyBieSBjYWxsaW5nIHRoZSBzYW1lIGBQT1NUIC9hcGkvcGx1Z2lucy9sb29rdXBgIGVuZHBvaW50XG4gKiB0aGUgZGVwbG95LXRpbWUgY3VzdG9tIHJlc291cmNlIExhbWJkYSB1c2VzLiBSZXR1cm5pbmcgdGhlIGZ1bGwgUGx1Z2luXG4gKiByZWNvcmQgYXQgc3ludGggdGltZSBpcyB3aGF0IGFsbG93cyB0aGUgcmVzdWx0aW5nIENGTiB0ZW1wbGF0ZSB0byBzaGlwXG4gKiB3aXRoIHJlYWwgQ29kZUJ1aWxkIGltYWdlIFVSSXMgKGA8aG9zdD4vPG5zPi88bmFtZT46PHZlcnNpb24+YCkgcmF0aGVyIHRoYW5cbiAqIHRoZSBwaXBlbGluZSdzIGRlZmF1bHQgaW1hZ2UgdGhhdCB0aGUgc3ludGgtdGltZSB0b2tlbiBwYXRoIGZvcmNlcy5cbiAqXG4gKiBGYWlsdXJlcyBhcmUgbm9uLWZhdGFsOiBhIG1pc3NpbmcgcGx1Z2luIG9yIHVucmVhY2hhYmxlIEFQSSBsb2dzIGEgd2FybmluZ1xuICogYW5kIGZhbGxzIHRocm91Z2ggdG8gdGhlIGRlcGxveS10aW1lIGN1c3RvbSByZXNvdXJjZSBwYXRoIHNvIHBhcnRpYWxcbiAqIHBsYXRmb3JtIG91dGFnZXMgZG9uJ3QgYmxvY2sgc3ludGgvZGVwbG95LiBUaGUgZXhjZXB0aW9ucyBhYm9ydCB0aGUgc3ludGg6XG4gKiB0aGUge0BsaW5rIEZBVEFMX0xPT0tVUF9DT0RFU30gcmVmdXNhbHMsIGFuIGV4YWN0IHZlcnNpb24gcGluIHRoYXQgZG9lc1xuICogbm90IGV4aXN0LCBhbmQgQU5ZIGZhaWx1cmUgb24gYSBtYW5hZ2VkIHRvb2xjaGFpbiByZWZlcmVuY2UgKGBjZGstc3ludGhgKSxcbiAqIHdoaWNoIGhhcyBubyBkZXBsb3ktdGltZSBmYWxsYmFjayAoRDIpLiBBIG1hbmFnZWQgcmVmZXJlbmNlIHNlbmRzIHRoZVxuICogcGlwZWxpbmUncyBgdG9vbGNoYWluLnJlbGVhc2VgIGFzIGByZWxlYXNlUGluYCDigJQgdGhlIHNhbWUgcGluIHRoZSBib290c3RyYXBcbiAqIGxvb2t1cCBzZW5kcyDigJQgYW5kIGl0cyByZXNvbHZlZCByZWxlYXNlIGxhbmRzIGluIGB0b29sY2hhaW5TaW5rYCBieSBrZXkuXG4gKlxuICogRXZlcnkgcmVmZXJlbmNlIGlzIGxvb2tlZCB1cCBiZWZvcmUgYW55dGhpbmcgaXMgdGhyb3duLCBhbmQgQUxMIGZhdGFsXG4gKiByZWZ1c2FscyBhcmUgcmVwb3J0ZWQgdG9nZXRoZXIuIFN0b3BwaW5nIGF0IHRoZSBmaXJzdCBtZWFudCBhIHBpcGVsaW5lIHdpdGhcbiAqIHRocmVlIHJlZnVzZWQgcGx1Z2lucyB0b29rIHRocmVlIHN5bnRoIGF0dGVtcHRzIHRvIGxlYXJuIGFib3V0IGFsbCB0aHJlZS5cbiAqXG4gKiBFdmVyeSBsb29rdXAgd2FybmluZyBpcyBwcmludGVkLCBncmFkZWQgYnkgc2V2ZXJpdHksIGFuZCBhcHBlbmRlZCB0b1xuICogYHdhcm5pbmdTaW5rYCB3aGVuIGdpdmVuICh0aGUgc3ludGggcHJpbnRzIGEgb25lLWxpbmUgc3VtbWFyeSBhdCBpdHMgZW5kKS5cbiAqIEEgd2FybmluZyBuZXZlciBmYWlscyB0aGUgc3ludGgg4oCUIHZ1bG5lcmFiaWxpdHkgc3RhdGUgaXMgcmVwb3J0ZWQsIG5vdFxuICogZW5mb3JjZWQuXG4gKlxuICogV2hlbiB0aGUgcHJvcHMgY2FycnkgYSBgcGlwZWxpbmVJZGAsIGVhY2ggbG9va3VwIGFsc28gc2VuZHNcbiAqIGBjb250ZXh0OiB7IHBpcGVsaW5lSWQsIHN0ZXBLZXlzIH1gIOKAlCB0aGUgbGFiZWwgKGBwbHVnaW5TdGVwTGFiZWxgOiBgc3ludGhgIG9yXG4gKiBgPHN0YWdlPi88YWxpYXMgPz8gbmFtZT5gKSBvZiBFVkVSWSBzdGVwIHRoZSBkZS1kdXBsaWNhdGVkIHJlZmVyZW5jZSBzZXJ2ZXMg4oCUXG4gKiBzbyB0aGUgcGx1Z2luIHNlcnZpY2UgY2FuIHJlY29yZCB0aGUgd2FybmluZ3MgaXQgcmV0dXJucyBhZ2FpbnN0IGVhY2ggb2ZcbiAqIHRob3NlIHBpcGVsaW5lIHN0ZXBzLCBub3Qgb25seSBwcmludCB0aGVtIGludG8gdGhpcyBzeW50aCdzIGxvZy5cbiAqXG4gKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgdG8gbWF0Y2ggYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGx1Z2luc0ZvclByb3BzKFxuICBjbGllbnQ6IEFwaUNsaWVudCxcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB3YXJuaW5nU2luaz86IExvb2t1cFdhcm5pbmdbXSxcbiAgdG9vbGNoYWluU2luaz86IFJlY29yZDxzdHJpbmcsIExvb2t1cFRvb2xjaGFpbj4sXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IHJlZnMgPSBjb2xsZWN0UGx1Z2luUmVmcyhwcm9wcyk7XG4gIGlmIChyZWZzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IHBpcGVsaW5lSWQgPSB0eXBlb2YgcHJvcHMucGlwZWxpbmVJZCA9PT0gJ3N0cmluZycgJiYgcHJvcHMucGlwZWxpbmVJZC5sZW5ndGggPiAwID8gcHJvcHMucGlwZWxpbmVJZCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcmVsZWFzZVBpbiA9IHRvb2xjaGFpblJlbGVhc2VQaW4ocHJvcHMpO1xuICAvLyBPbmUgbG9va3VwIHBlciBhbGlhcyBtYXkgc2VydmUgc2V2ZXJhbCBzdGVwczogdGhlIGxhYmVscyBvZiBlYWNoLCBieSBhbGlhcy5cbiAgY29uc3Qgc3RlcEtleXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIGZvciAoY29uc3Qgc3RlcCBvZiBjb2xsZWN0UGx1Z2luU3RlcHMocHJvcHMpKSB7XG4gICAgY29uc3Qga2V5ID0gY2FjaGVLZXkoc3RlcCk7XG4gICAgc3RlcEtleXMuc2V0KGtleSwgWy4uLihzdGVwS2V5cy5nZXQoa2V5KSA/PyBbXSksIHN0ZXAubGFiZWxdKTtcbiAgfVxuICBjb25zdCByZXNvbHZlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgY29uc3QgZmF0YWw6IFBsdWdpblJlZnVzYWxbXSA9IFtdO1xuXG4gIGF3YWl0IFByb21pc2UuYWxsKHJlZnMubWFwKGFzeW5jIChyZWYpID0+IHtcbiAgICBjb25zdCBrZXkgPSBjYWNoZUtleShyZWYpO1xuICAgIGNvbnN0IGxhYmVsID0gcmVmLnB1Ymxpc2hlciA/IGAke3JlZi5wdWJsaXNoZXJ9LyR7cmVmLm5hbWV9YCA6IHJlZi5uYW1lO1xuICAgIC8vIFRoZSBwbHVnaW4gTkFNRSBsaXZlcyBvbiB0aGUgcmVmIChhIHNpYmxpbmcgb2YgYGZpbHRlcmApLCBOT1QgaW5zaWRlIHRoZVxuICAgIC8vIGZpbHRlciBvYmplY3Qg4oCUIGJ1dCB0aGUgbG9va3VwIG1hdGNoZXMgb24gdGhlIGZpbHRlci4gQSBmaWx0ZXIgd2l0aG91dFxuICAgIC8vIGBuYW1lYCAoZS5nLiBge3ZlcnNpb24sIHZpc2liaWxpdHksIGlzQWN0aXZlLCBpc0RlZmF1bHR9YCkgbWF0Y2hlcyBBTllcbiAgICAvLyBwbHVnaW4gd2l0aCB0aG9zZSBhdHRyaWJ1dGVzLCBhbmQgdGhlIGVuZHBvaW50IHJldHVybnMgYW4gYXJiaXRyYXJ5IG9uZVxuICAgIC8vIChzZWVuOiBgZG9ja2VyZmlsZS1tdWx0aS1wcm92aWRlcmApLiBUaGF0IG1hZGUgdGhlIHN5bnRoIGFuZCBldmVyeSBzdGVwXG4gICAgLy8gcmVzb2x2ZSB0byB0aGUgV1JPTkcgcGx1Z2luLiBTbyB3aGVuIHRoZSBmaWx0ZXIgb21pdHMgYG5hbWVgLCBmYWxsIGJhY2sgdG9cbiAgICAvLyB0aGUgcmVmJ3MgcGx1Z2luIG5hbWU7IGFuIGV4cGxpY2l0IGZpbHRlciBgbmFtZWAgc3RpbGwgdGFrZXMgcHJlY2VkZW5jZS5cbiAgICAvLyBTaGFyZWQgd2l0aCB0aGUgcGlwZWxpbmUgc2VydmljZSdzIGNvbnRyYWN0IGNoZWNrIChzYW1lIGZpbHRlciwgc2FtZSBwbHVnaW4pLlxuICAgIGNvbnN0IGZpbHRlciA9IHBsdWdpbkxvb2t1cEZpbHRlcihyZWYpO1xuICAgIGNvbnN0IHBpbiA9IGV4YWN0VmVyc2lvblBpbihyZWYpO1xuICAgIGNvbnN0IHJlZnVzZSA9IChjb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQgPT4geyBmYXRhbC5wdXNoKHsgcGx1Z2luOiBsYWJlbCwgY29kZSwgbWVzc2FnZSB9KTsgfTtcbiAgICAvLyBBIG1hbmFnZWQgdG9vbGNoYWluIGhhbGYgKGNkay1zeW50aCkgcmVzb2x2ZXMgdGhyb3VnaCB0aGUgUkVMRUFTRSDigJQgdGhlXG4gICAgLy8gc2FtZSBgcmVsZWFzZVBpbmAgdGhlIGJvb3RzdHJhcCBsb29rdXAgc2VuZHMsIHNvIGJvdGggaGFsdmVzIGNvbWUgZnJvbVxuICAgIC8vIG9uZSByZWxlYXNlIOKAlCBhbmQgaXQgaGFzIG5vIGRlcGxveS10aW1lIGZhbGxiYWNrOiBhbnkgZmFpbHVyZSBpcyBmYXRhbC5cbiAgICBjb25zdCBtYW5hZ2VkID0gaXNNYW5hZ2VkVG9vbGNoYWluUmVmKHJlZik7XG4gICAgY29uc3QgcmVmdXNlTWFuYWdlZCA9IChjb2RlOiBzdHJpbmcsIHdoeTogc3RyaW5nKTogdm9pZCA9PiByZWZ1c2UoY29kZSxcbiAgICAgIGBUb29sY2hhaW4gcGx1Z2luIFwiJHtsYWJlbH1cIiR7cmVsZWFzZVBpbiA/IGAgKHJlbGVhc2UgJHtyZWxlYXNlUGlufSlgIDogJyd9IGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJHt3aHl9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wb3N0PHVua25vd24+KCcvYXBpL3BsdWdpbnMvbG9va3VwJywge1xuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIC4uLihtYW5hZ2VkICYmIHJlbGVhc2VQaW4gPyB7IHJlbGVhc2VQaW4gfSA6IHt9KSxcbiAgICAgICAgLi4uKHBpcGVsaW5lSWQgJiYgc3RlcEtleXMuaGFzKGtleSkgPyB7IGNvbnRleHQ6IHsgcGlwZWxpbmVJZCwgc3RlcEtleXM6IHN0ZXBLZXlzLmdldChrZXkpIH0gfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgeyBwbHVnaW4sIHdhcm5pbmdzLCB0b29sY2hhaW4gfSA9IHVud3JhcExvb2t1cChyZXMpO1xuICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgICAgIHByaW50TG9va3VwV2FybmluZyhsYWJlbCwgd2FybmluZyk7XG4gICAgICAgIHdhcm5pbmdTaW5rPy5wdXNoKHdhcm5pbmcpO1xuICAgICAgfVxuICAgICAgaWYgKG1hbmFnZWQgJiYgKCFwbHVnaW4gfHwgIXRvb2xjaGFpbikpIHtcbiAgICAgICAgcmVmdXNlTWFuYWdlZChFcnJvckNvZGUuQk9PVFNUUkFQX0lNQUdFX1VOUkVTT0xWRUQsIHBsdWdpbiA/ICd0aGUgYW5zd2VyIGNhcnJpZWQgbm8gdG9vbGNoYWluIHJlbGVhc2UnIDogJ3RoZSBsb29rdXAgcmV0dXJuZWQgbm8gcmVjb3JkJyk7XG4gICAgICB9IGVsc2UgaWYgKHBsdWdpbikge1xuICAgICAgICByZXNvbHZlZFtrZXldID0gcGx1Z2luO1xuICAgICAgICBpZiAobWFuYWdlZCAmJiB0b29sY2hhaW4gJiYgdG9vbGNoYWluU2luaykgdG9vbGNoYWluU2lua1trZXldID0gdG9vbGNoYWluO1xuICAgICAgfSBlbHNlIGlmIChwaW4pIHtcbiAgICAgICAgcmVmdXNlKCdQTFVHSU5fVkVSU0lPTl9OT1RfRk9VTkQnLCBwaW5Ob3RGb3VuZE1lc3NhZ2UobGFiZWwsIHBpbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBQbHVnaW4gXCIke2xhYmVsfVwiIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQg4oCUIGZhbGxpbmcgYmFjayB0byBkZXBsb3ktdGltZSByZXNvbHV0aW9uYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAobWFuYWdlZCkge1xuICAgICAgICByZWZ1c2VNYW5hZ2VkKHNlcnZpY2VFcnJvckNvZGUoZXJyKSA/PyBFcnJvckNvZGUuQk9PVFNUUkFQX0lNQUdFX1VOUkVTT0xWRUQsIHNlcnZpY2VNZXNzYWdlKGVycikgPz8gZXJyb3JNZXNzYWdlKGVycikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBBIHBsdWdpbiB3aG9zZSBpbWFnZSBzaWduYXR1cmUgZG9lc24ndCB2ZXJpZnksIG9yIGEgbGlzdGluZyB0aGUgb3JnXG4gICAgICAvLyBjYW4ndCB1c2UsIGlzIE5PVCBhbiBvdXRhZ2UgdG8gcmlkZSBvdXQ6IGZhbGxpbmcgYmFjayB3b3VsZCBxdWlldGx5XG4gICAgICAvLyB0dXJuIGl0IGludG8gYW4gdW5yZXNvbHZlZCBzdGVwLiBTdG9wLlxuICAgICAgY29uc3QgY29kZSA9IGZhdGFsTG9va3VwQ29kZShlcnIpO1xuICAgICAgaWYgKGNvZGUgPT09IEVycm9yQ29kZS5JTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEKSB7XG4gICAgICAgIHJlZnVzZShjb2RlLCBgUGx1Z2luIFwiJHtsYWJlbH1cIiBpbWFnZSBmYWlsZWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbjogJHtlcnJvck1lc3NhZ2UoZXJyKX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgcmVmdXNlKGNvZGUsIGBQbHVnaW4gXCIke2xhYmVsfVwiIGNhbid0IGJlIHVzZWQgKCR7Y29kZX0pOiAke3NlcnZpY2VNZXNzYWdlKGVycikgPz8gZXJyb3JNZXNzYWdlKGVycil9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChwaW4gJiYgaXNOb3RGb3VuZChlcnIpKSB7XG4gICAgICAgIHJlZnVzZSgnUExVR0lOX1ZFUlNJT05fTk9UX0ZPVU5EJywgcGluTm90Rm91bmRNZXNzYWdlKGxhYmVsLCBwaW4sIGVycikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtc2cgPSBlcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgIHByaW50V2FybmluZyhgUGx1Z2luIFwiJHtsYWJlbH1cIiBwcmUtcmVzb2x1dGlvbiBmYWlsZWQgKCR7bXNnfSkg4oCUIGZhbGxpbmcgYmFjayB0byBkZXBsb3ktdGltZSByZXNvbHV0aW9uYCk7XG4gICAgfVxuICB9KSk7XG5cbiAgaWYgKGZhdGFsLmxlbmd0aCA+IDApIHRocm93IG5ldyBQbHVnaW5SZXNvbHV0aW9uRXJyb3IoZmF0YWwpO1xuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG4iXX0=
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGx1Z2luLXJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuSCxPQUFPLEVBQ0wsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQ2hFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLFlBQVksR0FDL0UsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVdqRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsR0FBYztJQUM5QixPQUFPLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsaUJBQWlCLENBQUMsS0FBOEI7SUFDdkQsTUFBTSxJQUFJLEdBQWdCLEVBQUUsQ0FBQztJQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUV2QyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQVksRUFBUSxFQUFFO1FBQ2xDLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDNUMsTUFBTSxDQUFDLEdBQUcsR0FBZ0IsQ0FBQztRQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4Qix3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNF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RTtZQUN0RSxzRUFBc0U7WUFDdEUseUNBQXlDO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLEtBQUssMENBQTBDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzVGLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsS0FBSyxvQkFBb0IsSUFBSSxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RyxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMzQixNQUFNLENBQUMsMEJBQTBCLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixZQUFZLENBQUMsV0FBVyxLQUFLLDRCQUE0QixHQUFHLDRDQUE0QyxDQUFDLENBQUM7UUFDNUcsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFSixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IEVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBtYW5hZ2VkVG9vbGNoYWluUmVmTmFtZSwgdG9vbGNoYWluUmVsZWFzZVBpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7XG4gIGNvbGxlY3RQbHVnaW5TdGVwcywgZXhhY3RQaW5Ob3RGb3VuZE1lc3NhZ2UsIGxvb2t1cE5vdEZvdW5kU3RhdGUsIHR5cGUgTG9va3VwVG9vbGNoYWluLCB0eXBlIExvb2t1cFdhcm5pbmcsIHR5cGUgTG9va3VwV2FybmluZ1NldmVyaXR5LFxuICBwbHVnaW5BcnRpZmFjdEFsaWFzLCBwbHVnaW5Mb29rdXBGaWx0ZXIsIHN1bW1hcml6ZUxvb2t1cFdhcm5pbmdzLCB1bndyYXBMb29rdXAsXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBBcGlDbGllbnQgfSBmcm9tICcuL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IHsgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKiogTWluaW1hbCBwbHVnaW4gcmVmZXJlbmNlIHNoYXBlIOKAlCBtYXRjaGVzIFBsdWdpbk9wdGlvbnMgZnJvbSBwaXBlbGluZS1jb3JlLiAqL1xuaW50ZXJmYWNlIFBsdWdpblJlZiB7XG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFB1Ymxpc2hlciBoYW5kbGUgb2YgYW4gaW5zdGFsbGVkIGxpc3RpbmcuICovXG4gIHB1Ymxpc2hlcj86IHN0cmluZztcbiAgYWxpYXM/OiBzdHJpbmc7XG4gIGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIENhY2hlIGtleSBtYXRjaGluZyBgUGx1Z2luTG9va3VwLm5vcm1hbGl6ZSgpYDogdGhlIGV4cGxpY2l0IGFsaWFzIHdoZW4gc2V0LFxuICogb3RoZXJ3aXNlIGBbPHB1Ymxpc2hlcj4tXTxuYW1lPi1hbGlhc2Ag4oCUIHBpcGVsaW5lLWNvcmUnc1xuICogYHBsdWdpbkFydGlmYWN0QWxpYXNgLCB0aGUgb25lIHJ1bGUgZXZlcnkgY29uc3VtZXIgb2YgdGhpcyBtYXAgdXNlcy5cbiAqL1xuZnVuY3Rpb24gY2FjaGVLZXkocmVmOiBQbHVnaW5SZWYpOiBzdHJpbmcge1xuICByZXR1cm4gcGx1Z2luQXJ0aWZhY3RBbGlhcyhyZWYpO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHBpcGVsaW5lIHByb3BzIHRyZWUgdG8gY29sbGVjdCBldmVyeSBwbHVnaW4gcmVmZXJlbmNlLiBQbHVnaW5zXG4gKiBhcHBlYXIgYXQgYHN5bnRoLnBsdWdpbmAgYW5kIGF0IGBzdGFnZXNbXS5zdGVwc1tdLnBsdWdpbmAuIEVudHJpZXMgYXJlXG4gKiBkZS1kdXBsaWNhdGVkIGJ5IGBjYWNoZUtleSgpYCDigJQgdGhlIHNhbWUga2V5IGBQbHVnaW5Mb29rdXAucGx1Z2luKClgIHVzZXMsXG4gKiBzbyB0aGUgcmVzb2x2ZWQtcGx1Z2lucyBtYXAgbG9va3VwcyBtYXRjaCBkb3duc3RyZWFtLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0UGx1Z2luUmVmcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQbHVnaW5SZWZbXSB7XG4gIGNvbnN0IHJlZnM6IFBsdWdpblJlZltdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIGNvbnN0IHB1c2ggPSAocmF3OiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBjb25zdCByID0gcmF3IGFzIFBsdWdpblJlZjtcbiAgICBpZiAoIXIubmFtZSkgcmV0dXJuO1xuICAgIGNvbnN0IGtleSA9IGNhY2hlS2V5KHIpO1xuICAgIC8vIFRoZSBuYW1lIHRoZSBsb29rdXAgd2lsbCBUQVJHRVQg4oCUIGFuIGV4cGxpY2l0IGBmaWx0ZXIubmFtZWAgd2lucyAoc2VlXG4gICAgLy8gYmVsb3cpLCBzbyB0d28gcmVmcyB0aGF0IHJlc29sdmUgdG8gdGhlIHNhbWUgcGx1Z2luIGFyZSBub3QgYSBjb2xsaXNpb24uXG4gICAgY29uc3QgbmFtZSA9IChyLmZpbHRlcj8ubmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IHIubmFtZTtcbiAgICBjb25zdCB0YXJnZXQgPSByLnB1Ymxpc2hlciA/IGAke3IucHVibGlzaGVyfS8ke25hbWV9YCA6IG5hbWU7XG4gICAgY29uc3QgaG9sZGVyID0gc2Vlbi5nZXQoa2V5KTtcbiAgICBpZiAoaG9sZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE9uZSBhbGlhcyBjYW4gb25seSBldmVyIG1lYW4gb25lIHBsdWdpbi4gRGVkdXBsaWNhdGluZyBvbiB0aGUgYWxpYXNcbiAgICAgIC8vIGFsb25lIGtlcHQgdGhlIEZJUlNUIHBsdWdpbiBhbmQgc2lsZW50bHkgZHJvcHBlZCB0aGUgc2Vjb25kLCBzbyBhIHN0ZXBcbiAgICAgIC8vIGRlY2xhcmluZyBgeyBuYW1lOiAnbWF2ZW4tYnVpbGQnLCBhbGlhczogJ2J1aWxkJyB9YCBhZnRlciBhbm90aGVyXG4gICAgICAvLyBkZWNsYXJpbmcgYHsgbmFtZTogJ25vZGVqcy1idWlsZCcsIGFsaWFzOiAnYnVpbGQnIH1gIHJhbiBub2RlanMtYnVpbGQnc1xuICAgICAgLy8gaW1hZ2UgYW5kIGNvbW1hbmRzIOKAlCBubyBlcnJvciwganVzdCB0aGUgd3JvbmcgYnVpbGQuXG4gICAgICBpZiAoaG9sZGVyICE9PSB0YXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQbHVnaW4gYWxpYXMgXCIke2tleX1cIiBpcyB1c2VkIGZvciB0d28gZGlmZmVyZW50IHBsdWdpbnMgKFwiJHtob2xkZXJ9XCIgYW5kIFwiJHt0YXJnZXR9XCIpLiBgXG4gICAgICAgICAgKyAnR2l2ZSBlYWNoIHBsdWdpbiBpdHMgb3duIGFsaWFzLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNlZW4uc2V0KGtleSwgdGFyZ2V0KTtcbiAgICByZWZzLnB1c2gocik7XG4gIH07XG5cbiAgY29uc3Qgc3ludGggPSBwcm9wcy5zeW50aCBhcyB7IHBsdWdpbj86IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgcHVzaChzeW50aD8ucGx1Z2luKTtcblxuICBjb25zdCBzdGFnZXMgPSBwcm9wcy5zdGFnZXMgYXMgQXJyYXk8eyBzdGVwcz86IEFycmF5PHsgcGx1Z2luPzogdW5rbm93biB9PiB9PiB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMgPz8gW10pIHtcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RhZ2Uuc3RlcHMgPz8gW10pIHtcbiAgICAgIHB1c2goc3RlcC5wbHVnaW4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWZzO1xufVxuXG4vKipcbiAqIExvb2t1cCByZWZ1c2FscyB0aGF0IG11c3QgU1RPUCB0aGUgc3ludGggcmF0aGVyIHRoYW4gZmFsbCBiYWNrIHRvXG4gKiBkZXBsb3ktdGltZSByZXNvbHV0aW9uOiBhbiBpbWFnZSB3aG9zZSBzaWduYXR1cmUgZG9lc24ndCB2ZXJpZnksIGEgbGlzdGluZ1xuICogdGhlIG9yZyBjYW4ndCB1c2UgKG5vdCBpbnN0YWxsZWQsIGJsb2NrZWQgYnkgaXRzIGFsbG93L2RlbnkgcG9saWN5LCB5YW5rZWRcbiAqIG9yIHN1c3BlbmRlZCksIGFuZCBhbiBvcmcgcGx1Z2luIHRoYXQgd2FzIGRlbGV0ZWQuIEZhbGxpbmcgYmFjayB3b3VsZFxuICogcXVpZXRseSB0dXJuIGVhY2ggaW50byBhbiB1bnJlc29sdmVkIHN0ZXAgdGhhdCBmYWlscyBhdCBydW4gdGltZSBpbnN0ZWFkIG9mXG4gKiBub3cuIFZ1bG5lcmFiaWxpdHkgc3RhdGUgaXMgTkVWRVIgb25lIG9mIHRoZXNlOiBpdCBhcnJpdmVzIGFzIGdyYWRlZFxuICogd2FybmluZ3MgYmVzaWRlIGEgcmVzb2x2ZWQgcGx1Z2luLlxuICovXG5jb25zdCBGQVRBTF9MT09LVVBfQ09ERVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICBFcnJvckNvZGUuSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCxcbiAgRXJyb3JDb2RlLlBMVUdJTl9OT1RfSU5TVEFMTEVELFxuICBFcnJvckNvZGUuUExVR0lOX0JMT0NLRURfQllfUE9MSUNZLFxuICBFcnJvckNvZGUuUExVR0lOX1VOQVZBSUxBQkxFLFxuICAvLyBUaGUgb3JnJ3Mgb3duIHBsdWdpbiB3YXMgZGVsZXRlZDogdGhlIGxvb2t1cCByZWZ1c2VzIGl0IHJhdGhlciB0aGFuIGZhbGxcbiAgLy8gdGhyb3VnaCB0byBhIHNhbWUtbmFtZSBsaXN0aW5nLiAoUGx1Z2luIHNlcnZpY2UgY29kZTsgbWF0Y2hlZCBhcyBhIHN0cmluZy4pXG4gICdQTFVHSU5fREVMRVRFRCcsXG5dO1xuXG4vKiogVGhlIGVycm9yIGNvZGUgb2YgYSBwbHVnaW4gc2VydmljZSBhbnN3ZXIsIHdoZW4gaXQgaXMgb25lIG9mIHtAbGluayBGQVRBTF9MT09LVVBfQ09ERVN9LiAqL1xuZnVuY3Rpb24gZmF0YWxMb29rdXBDb2RlKGVycjogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBkYXRhID0gKGVyciBhcyB7IHJlc3BvbnNlPzogeyBkYXRhPzogdW5rbm93biB9IH0gfCB1bmRlZmluZWQpPy5yZXNwb25zZT8uZGF0YTtcbiAgY29uc3QgY29kZSA9IGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gKGRhdGEgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIEZBVEFMX0xPT0tVUF9DT0RFUy5pbmNsdWRlcyhjb2RlKSA/IGNvZGUgOiBudWxsO1xufVxuXG4vKiogV2hldGhlciB0aGUgcGx1Z2luIHNlcnZpY2UgYW5zd2VyZWQgXCJubyBzdWNoIHBsdWdpbi92ZXJzaW9uXCIgKDQwNCBOT1RfRk9VTkQpLiAqL1xuZnVuY3Rpb24gaXNOb3RGb3VuZChlcnI6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3QgcmVzcG9uc2UgPSAoZXJyIGFzIHsgcmVzcG9uc2U/OiB7IHN0YXR1cz86IHVua25vd247IGRhdGE/OiB1bmtub3duIH0gfSB8IHVuZGVmaW5lZCk/LnJlc3BvbnNlO1xuICBjb25zdCBjb2RlID0gcmVzcG9uc2U/LmRhdGEgJiYgdHlwZW9mIHJlc3BvbnNlLmRhdGEgPT09ICdvYmplY3QnID8gKHJlc3BvbnNlLmRhdGEgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDA0IHx8IGNvZGUgPT09IEVycm9yQ29kZS5OT1RfRk9VTkQ7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gYSByZWZlcmVuY2UgUElOUyDigJQgb25lIGV4YWN0IGB4LnkuelstcHJlXWAsIG5vdCBhIHJhbmdlIG9yXG4gKiBgbGF0ZXN0YC4gQSBwaW4gbmFtZXMgYSB2ZXJzaW9uIHRoYXQgbXVzdCBleGlzdDogaWYgaXQgZG9lc24ndCAobmV2ZXJcbiAqIHB1Ymxpc2hlZCwgb3IgcmVmdXNlZCBieSB0aGUgYnVpbGQncyB2dWxuZXJhYmlsaXR5IGdhdGUsIHdoaWNoIHNhdmVzXG4gKiBub3RoaW5nKSwgdGhlcmUgaXMgbm8gb3V0YWdlIHRvIHJpZGUgb3V0IGFuZCBub3RoaW5nIGZvciB0aGUgZGVwbG95LXRpbWVcbiAqIGxvb2t1cCB0byBmaW5kIGVpdGhlci5cbiAqL1xuZnVuY3Rpb24gZXhhY3RWZXJzaW9uUGluKHJlZjogUGx1Z2luUmVmKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHZlcnNpb24gPSByZWYuZmlsdGVyPy52ZXJzaW9uO1xuICByZXR1cm4gdHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnICYmIC9eXFxkK1xcLlxcZCtcXC5cXGQrKC1bMC05QS1aYS16Li1dKyk/JC8udGVzdCh2ZXJzaW9uKSA/IHZlcnNpb24gOiBudWxsO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYSByZWZlcmVuY2UgbmFtZXMgYSBtYW5hZ2VkIHRvb2xjaGFpbiBoYWxmIChgY2RrLXN5bnRoYCk6IHRoZVxuICogc3lzdGVtIG9yZydzLCBuZXZlciBhIGxpc3Rpbmcg4oCUIHNvIG5vIHB1Ymxpc2hlci4gSXQgcmVzb2x2ZXMgdGhyb3VnaCB0aGVcbiAqIHRvb2xjaGFpbiByZWxlYXNlICh0aGUgcGlwZWxpbmUncyBgdG9vbGNoYWluLnJlbGVhc2VgIHBpbiwgZWxzZSB0aGUgb3JnIC9cbiAqIGNhbmFyeSAvIHBsYXRmb3JtIGRlZmF1bHQpLCBuZXZlciBieSBpdHMgb3duIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01hbmFnZWRUb29sY2hhaW5SZWYocmVmOiB7IG5hbWU/OiBzdHJpbmc7IHB1Ymxpc2hlcj86IHN0cmluZzsgZmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSk6IGJvb2xlYW4ge1xuICByZXR1cm4gIXJlZi5wdWJsaXNoZXIgJiYgbWFuYWdlZFRvb2xjaGFpblJlZk5hbWUocmVmKSAhPT0gbnVsbDtcbn1cblxuLyoqIFRoZSBwbHVnaW4gc2VydmljZSdzIGVycm9yIGNvZGUgb24gYSByZWZ1c2VkIGFuc3dlciwgd2hlbiBpdCBjYXJyaWVzIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlRXJyb3JDb2RlKGVycjogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBkYXRhID0gKGVyciBhcyB7IHJlc3BvbnNlPzogeyBkYXRhPzogdW5rbm93biB9IH0gfCB1bmRlZmluZWQpPy5yZXNwb25zZT8uZGF0YTtcbiAgY29uc3QgY29kZSA9IGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gKGRhdGEgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUubGVuZ3RoID4gMCA/IGNvZGUgOiBudWxsO1xufVxuXG4vKiogT25lIHBsdWdpbiB0aGUgc3ludGggY291bGQgbm90IHVzZSwgYXMge0BsaW5rIFBsdWdpblJlc29sdXRpb25FcnJvcn0gcmVwb3J0cyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luUmVmdXNhbCB7XG4gIC8qKiBgWzxwdWJsaXNoZXI+L108bmFtZT5gIG9mIHRoZSByZWZlcmVuY2UuICovXG4gIHJlYWRvbmx5IHBsdWdpbjogc3RyaW5nO1xuICAvKiogVGhlIHBsdWdpbiBzZXJ2aWNlJ3MgZXJyb3IgY29kZSwgb3IgYSBsb2NhbCBvbmUgKGBQTFVHSU5fVkVSU0lPTl9OT1RfRk9VTkRgKS4gKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlcnkgZmF0YWwgcmVmdXNhbCBvZiBvbmUgcHJlLXJlc29sdXRpb24gcGFzcy4gQ2FycmllcyB0aGUgc3RydWN0dXJlZCBsaXN0XG4gKiBhcyB3ZWxsIGFzIHRoZSBodW1hbiBtZXNzYWdlLCBzbyB0aGUgc3ludGggY2FuIGVtaXQgYSBtYWNoaW5lLXJlYWRhYmxlXG4gKiBmYWlsdXJlIGxpbmUgKGBQQl9TWU5USF9GQUlMVVJFYCkgdGhlIGV4ZWN1dGlvbiBldmVudHMgcGljayB1cC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpblJlc29sdXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcmVmdXNhbHM6IHJlYWRvbmx5IFBsdWdpblJlZnVzYWxbXSkge1xuICAgIHN1cGVyKHJlZnVzYWxzLmxlbmd0aCA9PT0gMVxuICAgICAgPyByZWZ1c2Fsc1swXSEubWVzc2FnZVxuICAgICAgOiBgJHtyZWZ1c2Fscy5sZW5ndGh9IHBsdWdpbnMgY2FuJ3QgYmUgdXNlZDpcXG4ke3JlZnVzYWxzLm1hcCgocikgPT4gYCAgLSAke3IubWVzc2FnZX1gKS5qb2luKCdcXG4nKX1gKTtcbiAgICB0aGlzLm5hbWUgPSAnUGx1Z2luUmVzb2x1dGlvbkVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFdoeSBhbiBleGFjdCBwaW4gd2FzIG5vdCBmb3VuZCwgcGhyYXNlZCBmcm9tIHRoZSA0MDQncyBgZGV0YWlscy5zdGF0ZWBcbiAqIChgZGVsZXRlZGAgLyBgaW5hY3RpdmVgIC8gYHlhbmtlZGAgLyBgbWlzc2luZ2ApLiBXaXRob3V0IGEgc3RhdGUgdGhlIGFuc3dlclxuICogY2Fubm90IHRlbGwgdGhlIGNhc2VzIGFwYXJ0LCBzbyB0aGUgbWVzc2FnZSBuYW1lcyB0aGUgdHdvIGxpa2VsaWVzdC5cbiAqIFNoYXJlZCB3aXRoIHRoZSBkZXBsb3ktdGltZSBMYW1iZGEncyBDbG91ZEZvcm1hdGlvbiByZWFzb24gKHBpcGVsaW5lLWNvcmUpLlxuICovXG5mdW5jdGlvbiBwaW5Ob3RGb3VuZE1lc3NhZ2UobGFiZWw6IHN0cmluZywgcGluOiBzdHJpbmcsIGVycj86IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gZXhhY3RQaW5Ob3RGb3VuZE1lc3NhZ2UobGFiZWwsIHBpbiwgbG9va3VwTm90Rm91bmRTdGF0ZShlcnIpKTtcbn1cblxuY29uc3QgU0VWRVJJVFlfU1RZTEU6IFJlY29yZDxMb29rdXBXYXJuaW5nU2V2ZXJpdHksIChzOiBzdHJpbmcpID0+IHN0cmluZz4gPSB7XG4gIGluZm86IHBpY28uY3lhbixcbiAgd2FybmluZzogcGljby55ZWxsb3csXG4gIGVycm9yOiBwaWNvLnJlZCxcbiAgY3JpdGljYWw6ICh0KSA9PiBwaWNvLmJvbGQocGljby5yZWQodCkpLFxufTtcblxuLyoqIFByaW50IG9uZSBsb29rdXAgd2FybmluZywgcHJlZml4ZWQgYW5kIGNvbG91cmVkIGJ5IGl0cyBzZXZlcml0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludExvb2t1cFdhcm5pbmcobGFiZWw6IHN0cmluZywgd2FybmluZzogTG9va3VwV2FybmluZyk6IHZvaWQge1xuICBjb25zdCB0YWcgPSBTRVZFUklUWV9TVFlMRVt3YXJuaW5nLnNldmVyaXR5XShgWyR7d2FybmluZy5zZXZlcml0eS50b1VwcGVyQ2FzZSgpfV1gKTtcbiAgcHJpbnRXYXJuaW5nKGAke3RhZ30gUGx1Z2luIFwiJHtsYWJlbH1cIjogJHt3YXJuaW5nLm1lc3NhZ2V9YCk7XG59XG5cbi8qKiBQcmludCB0aGUgb25lLWxpbmUgc2V2ZXJpdHkgc3VtbWFyeSBvZiBhIHN5bnRoJ3MgbG9va3VwIHdhcm5pbmdzIChub3RoaW5nIHdoZW4gbm9uZSkuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMb29rdXBXYXJuaW5nU3VtbWFyeSh3YXJuaW5nczogcmVhZG9ubHkgTG9va3VwV2FybmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IGxpbmUgPSBzdW1tYXJpemVMb29rdXBXYXJuaW5ncyh3YXJuaW5ncyk7XG4gIGlmICghbGluZSkgcmV0dXJuO1xuICBjb25zdCB3b3JzdCA9IHdhcm5pbmdzLnNvbWUoKHcpID0+IHcuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpID8gJ2NyaXRpY2FsJ1xuICAgIDogd2FybmluZ3Muc29tZSgodykgPT4gdy5zZXZlcml0eSA9PT0gJ2Vycm9yJykgPyAnZXJyb3InXG4gICAgICA6IHdhcm5pbmdzLnNvbWUoKHcpID0+IHcuc2V2ZXJpdHkgPT09ICd3YXJuaW5nJykgPyAnd2FybmluZycgOiAnaW5mbyc7XG4gIHByaW50V2FybmluZyhTRVZFUklUWV9TVFlMRVt3b3JzdF0obGluZSkpO1xufVxuXG4vKiogVGhlIHBsdWdpbiBzZXJ2aWNlJ3Mgb3duIHJlZnVzYWwgbWVzc2FnZSwgd2hlbiB0aGUgYW5zd2VyIGNhcnJpZXMgb25lLiAqL1xuZnVuY3Rpb24gc2VydmljZU1lc3NhZ2UoZXJyOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGRhdGEgPSAoZXJyIGFzIHsgcmVzcG9uc2U/OiB7IGRhdGE/OiB1bmtub3duIH0gfSB8IHVuZGVmaW5lZCk/LnJlc3BvbnNlPy5kYXRhO1xuICBjb25zdCBtZXNzYWdlID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyAoZGF0YSBhcyB7IG1lc3NhZ2U/OiB1bmtub3duIH0pLm1lc3NhZ2UgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5sZW5ndGggPiAwID8gbWVzc2FnZSA6IG51bGw7XG59XG5cbi8qKlxuICogUHJlLXJlc29sdmUgcGx1Z2lucyBieSBjYWxsaW5nIHRoZSBzYW1lIGBQT1NUIC9hcGkvcGx1Z2lucy9sb29rdXBgIGVuZHBvaW50XG4gKiB0aGUgZGVwbG95LXRpbWUgY3VzdG9tIHJlc291cmNlIExhbWJkYSB1c2VzLiBSZXR1cm5pbmcgdGhlIGZ1bGwgUGx1Z2luXG4gKiByZWNvcmQgYXQgc3ludGggdGltZSBpcyB3aGF0IGFsbG93cyB0aGUgcmVzdWx0aW5nIENGTiB0ZW1wbGF0ZSB0byBzaGlwXG4gKiB3aXRoIHJlYWwgQ29kZUJ1aWxkIGltYWdlIFVSSXMgKGA8aG9zdD4vPG5zPi88bmFtZT46PHZlcnNpb24+YCkgcmF0aGVyIHRoYW5cbiAqIHRoZSBwaXBlbGluZSdzIGRlZmF1bHQgaW1hZ2UgdGhhdCB0aGUgc3ludGgtdGltZSB0b2tlbiBwYXRoIGZvcmNlcy5cbiAqXG4gKiBGYWlsdXJlcyBhcmUgbm9uLWZhdGFsOiBhIG1pc3NpbmcgcGx1Z2luIG9yIHVucmVhY2hhYmxlIEFQSSBsb2dzIGEgd2FybmluZ1xuICogYW5kIGZhbGxzIHRocm91Z2ggdG8gdGhlIGRlcGxveS10aW1lIGN1c3RvbSByZXNvdXJjZSBwYXRoIHNvIHBhcnRpYWxcbiAqIHBsYXRmb3JtIG91dGFnZXMgZG9uJ3QgYmxvY2sgc3ludGgvZGVwbG95LiBUaGUgZXhjZXB0aW9ucyBhYm9ydCB0aGUgc3ludGg6XG4gKiB0aGUge0BsaW5rIEZBVEFMX0xPT0tVUF9DT0RFU30gcmVmdXNhbHMsIGFuIGV4YWN0IHZlcnNpb24gcGluIHRoYXQgZG9lc1xuICogbm90IGV4aXN0LCBhbmQgQU5ZIGZhaWx1cmUgb24gYSBtYW5hZ2VkIHRvb2xjaGFpbiByZWZlcmVuY2UgKGBjZGstc3ludGhgKSxcbiAqIHdoaWNoIGhhcyBubyBkZXBsb3ktdGltZSBmYWxsYmFjayAoRDIpLiBBIG1hbmFnZWQgcmVmZXJlbmNlIHNlbmRzIHRoZVxuICogcGlwZWxpbmUncyBgdG9vbGNoYWluLnJlbGVhc2VgIGFzIGByZWxlYXNlUGluYCDigJQgdGhlIHNhbWUgcGluIHRoZSBib290c3RyYXBcbiAqIGxvb2t1cCBzZW5kcyDigJQgYW5kIGl0cyByZXNvbHZlZCByZWxlYXNlIGxhbmRzIGluIGB0b29sY2hhaW5TaW5rYCBieSBrZXkuXG4gKlxuICogRXZlcnkgcmVmZXJlbmNlIGlzIGxvb2tlZCB1cCBiZWZvcmUgYW55dGhpbmcgaXMgdGhyb3duLCBhbmQgQUxMIGZhdGFsXG4gKiByZWZ1c2FscyBhcmUgcmVwb3J0ZWQgdG9nZXRoZXIuIFN0b3BwaW5nIGF0IHRoZSBmaXJzdCBtZWFudCBhIHBpcGVsaW5lIHdpdGhcbiAqIHRocmVlIHJlZnVzZWQgcGx1Z2lucyB0b29rIHRocmVlIHN5bnRoIGF0dGVtcHRzIHRvIGxlYXJuIGFib3V0IGFsbCB0aHJlZS5cbiAqXG4gKiBFdmVyeSBsb29rdXAgd2FybmluZyBpcyBwcmludGVkLCBncmFkZWQgYnkgc2V2ZXJpdHksIGFuZCBhcHBlbmRlZCB0b1xuICogYHdhcm5pbmdTaW5rYCB3aGVuIGdpdmVuICh0aGUgc3ludGggcHJpbnRzIGEgb25lLWxpbmUgc3VtbWFyeSBhdCBpdHMgZW5kKS5cbiAqIEEgd2FybmluZyBuZXZlciBmYWlscyB0aGUgc3ludGgg4oCUIHZ1bG5lcmFiaWxpdHkgc3RhdGUgaXMgcmVwb3J0ZWQsIG5vdFxuICogZW5mb3JjZWQuXG4gKlxuICogV2hlbiB0aGUgcHJvcHMgY2FycnkgYSBgcGlwZWxpbmVJZGAsIGVhY2ggbG9va3VwIGFsc28gc2VuZHNcbiAqIGBjb250ZXh0OiB7IHBpcGVsaW5lSWQsIHN0ZXBLZXlzIH1gIOKAlCB0aGUgbGFiZWwgKGBwbHVnaW5TdGVwTGFiZWxgOiBgc3ludGhgIG9yXG4gKiBgPHN0YWdlPi88YWxpYXMgPz8gbmFtZT5gKSBvZiBFVkVSWSBzdGVwIHRoZSBkZS1kdXBsaWNhdGVkIHJlZmVyZW5jZSBzZXJ2ZXMg4oCUXG4gKiBzbyB0aGUgcGx1Z2luIHNlcnZpY2UgY2FuIHJlY29yZCB0aGUgd2FybmluZ3MgaXQgcmV0dXJucyBhZ2FpbnN0IGVhY2ggb2ZcbiAqIHRob3NlIHBpcGVsaW5lIHN0ZXBzLCBub3Qgb25seSBwcmludCB0aGVtIGludG8gdGhpcyBzeW50aCdzIGxvZy5cbiAqXG4gKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgdG8gbWF0Y2ggYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGx1Z2luc0ZvclByb3BzKFxuICBjbGllbnQ6IEFwaUNsaWVudCxcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB3YXJuaW5nU2luaz86IExvb2t1cFdhcm5pbmdbXSxcbiAgdG9vbGNoYWluU2luaz86IFJlY29yZDxzdHJpbmcsIExvb2t1cFRvb2xjaGFpbj4sXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IHJlZnMgPSBjb2xsZWN0UGx1Z2luUmVmcyhwcm9wcyk7XG4gIGlmIChyZWZzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IHBpcGVsaW5lSWQgPSB0eXBlb2YgcHJvcHMucGlwZWxpbmVJZCA9PT0gJ3N0cmluZycgJiYgcHJvcHMucGlwZWxpbmVJZC5sZW5ndGggPiAwID8gcHJvcHMucGlwZWxpbmVJZCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcmVsZWFzZVBpbiA9IHRvb2xjaGFpblJlbGVhc2VQaW4ocHJvcHMpO1xuICAvLyBPbmUgbG9va3VwIHBlciBhbGlhcyBtYXkgc2VydmUgc2V2ZXJhbCBzdGVwczogdGhlIGxhYmVscyBvZiBlYWNoLCBieSBhbGlhcy5cbiAgY29uc3Qgc3RlcEtleXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIGZvciAoY29uc3Qgc3RlcCBvZiBjb2xsZWN0UGx1Z2luU3RlcHMocHJvcHMpKSB7XG4gICAgY29uc3Qga2V5ID0gY2FjaGVLZXkoc3RlcCk7XG4gICAgc3RlcEtleXMuc2V0KGtleSwgWy4uLihzdGVwS2V5cy5nZXQoa2V5KSA/PyBbXSksIHN0ZXAubGFiZWxdKTtcbiAgfVxuICBjb25zdCByZXNvbHZlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgY29uc3QgZmF0YWw6IFBsdWdpblJlZnVzYWxbXSA9IFtdO1xuXG4gIGF3YWl0IFByb21pc2UuYWxsKHJlZnMubWFwKGFzeW5jIChyZWYpID0+IHtcbiAgICBjb25zdCBrZXkgPSBjYWNoZUtleShyZWYpO1xuICAgIGNvbnN0IGxhYmVsID0gcmVmLnB1Ymxpc2hlciA/IGAke3JlZi5wdWJsaXNoZXJ9LyR7cmVmLm5hbWV9YCA6IHJlZi5uYW1lO1xuICAgIC8vIFRoZSBwbHVnaW4gTkFNRSBsaXZlcyBvbiB0aGUgcmVmIChhIHNpYmxpbmcgb2YgYGZpbHRlcmApLCBOT1QgaW5zaWRlIHRoZVxuICAgIC8vIGZpbHRlciBvYmplY3Qg4oCUIGJ1dCB0aGUgbG9va3VwIG1hdGNoZXMgb24gdGhlIGZpbHRlci4gQSBmaWx0ZXIgd2l0aG91dFxuICAgIC8vIGBuYW1lYCAoZS5nLiBge3ZlcnNpb24sIHZpc2liaWxpdHksIGlzQWN0aXZlLCBpc0RlZmF1bHR9YCkgbWF0Y2hlcyBBTllcbiAgICAvLyBwbHVnaW4gd2l0aCB0aG9zZSBhdHRyaWJ1dGVzLCBhbmQgdGhlIGVuZHBvaW50IHJldHVybnMgYW4gYXJiaXRyYXJ5IG9uZVxuICAgIC8vIChzZWVuOiBgZG9ja2VyZmlsZS1tdWx0aS1wcm92aWRlcmApLiBUaGF0IG1hZGUgdGhlIHN5bnRoIGFuZCBldmVyeSBzdGVwXG4gICAgLy8gcmVzb2x2ZSB0byB0aGUgV1JPTkcgcGx1Z2luLiBTbyB3aGVuIHRoZSBmaWx0ZXIgb21pdHMgYG5hbWVgLCBmYWxsIGJhY2sgdG9cbiAgICAvLyB0aGUgcmVmJ3MgcGx1Z2luIG5hbWU7IGFuIGV4cGxpY2l0IGZpbHRlciBgbmFtZWAgc3RpbGwgdGFrZXMgcHJlY2VkZW5jZS5cbiAgICAvLyBTaGFyZWQgd2l0aCB0aGUgcGlwZWxpbmUgc2VydmljZSdzIGNvbnRyYWN0IGNoZWNrIChzYW1lIGZpbHRlciwgc2FtZSBwbHVnaW4pLlxuICAgIGNvbnN0IGZpbHRlciA9IHBsdWdpbkxvb2t1cEZpbHRlcihyZWYpO1xuICAgIGNvbnN0IHBpbiA9IGV4YWN0VmVyc2lvblBpbihyZWYpO1xuICAgIGNvbnN0IHJlZnVzZSA9IChjb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQgPT4geyBmYXRhbC5wdXNoKHsgcGx1Z2luOiBsYWJlbCwgY29kZSwgbWVzc2FnZSB9KTsgfTtcbiAgICAvLyBBIG1hbmFnZWQgdG9vbGNoYWluIGhhbGYgKGNkay1zeW50aCkgcmVzb2x2ZXMgdGhyb3VnaCB0aGUgUkVMRUFTRSDigJQgdGhlXG4gICAgLy8gc2FtZSBgcmVsZWFzZVBpbmAgdGhlIGJvb3RzdHJhcCBsb29rdXAgc2VuZHMsIHNvIGJvdGggaGFsdmVzIGNvbWUgZnJvbVxuICAgIC8vIG9uZSByZWxlYXNlIOKAlCBhbmQgaXQgaGFzIG5vIGRlcGxveS10aW1lIGZhbGxiYWNrOiBhbnkgZmFpbHVyZSBpcyBmYXRhbC5cbiAgICBjb25zdCBtYW5hZ2VkID0gaXNNYW5hZ2VkVG9vbGNoYWluUmVmKHJlZik7XG4gICAgY29uc3QgcmVmdXNlTWFuYWdlZCA9IChjb2RlOiBzdHJpbmcsIHdoeTogc3RyaW5nKTogdm9pZCA9PiByZWZ1c2UoY29kZSxcbiAgICAgIGBUb29sY2hhaW4gcGx1Z2luIFwiJHtsYWJlbH1cIiR7cmVsZWFzZVBpbiA/IGAgKHJlbGVhc2UgJHtyZWxlYXNlUGlufSlgIDogJyd9IGNvdWxkIG5vdCBiZSByZXNvbHZlZDogJHt3aHl9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wb3N0PHVua25vd24+KCcvYXBpL3BsdWdpbnMvbG9va3VwJywge1xuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIC4uLihtYW5hZ2VkICYmIHJlbGVhc2VQaW4gPyB7IHJlbGVhc2VQaW4gfSA6IHt9KSxcbiAgICAgICAgLi4uKHBpcGVsaW5lSWQgJiYgc3RlcEtleXMuaGFzKGtleSkgPyB7IGNvbnRleHQ6IHsgcGlwZWxpbmVJZCwgc3RlcEtleXM6IHN0ZXBLZXlzLmdldChrZXkpIH0gfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgeyBwbHVnaW4sIHdhcm5pbmdzLCB0b29sY2hhaW4gfSA9IHVud3JhcExvb2t1cChyZXMpO1xuICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgICAgIHByaW50TG9va3VwV2FybmluZyhsYWJlbCwgd2FybmluZyk7XG4gICAgICAgIHdhcm5pbmdTaW5rPy5wdXNoKHdhcm5pbmcpO1xuICAgICAgfVxuICAgICAgaWYgKG1hbmFnZWQgJiYgKCFwbHVnaW4gfHwgIXRvb2xjaGFpbikpIHtcbiAgICAgICAgcmVmdXNlTWFuYWdlZChFcnJvckNvZGUuQk9PVFNUUkFQX0lNQUdFX1VOUkVTT0xWRUQsIHBsdWdpbiA/ICd0aGUgYW5zd2VyIGNhcnJpZWQgbm8gdG9vbGNoYWluIHJlbGVhc2UnIDogJ3RoZSBsb29rdXAgcmV0dXJuZWQgbm8gcmVjb3JkJyk7XG4gICAgICB9IGVsc2UgaWYgKHBsdWdpbikge1xuICAgICAgICByZXNvbHZlZFtrZXldID0gcGx1Z2luO1xuICAgICAgICBpZiAobWFuYWdlZCAmJiB0b29sY2hhaW4gJiYgdG9vbGNoYWluU2luaykgdG9vbGNoYWluU2lua1trZXldID0gdG9vbGNoYWluO1xuICAgICAgfSBlbHNlIGlmIChwaW4pIHtcbiAgICAgICAgcmVmdXNlKCdQTFVHSU5fVkVSU0lPTl9OT1RfRk9VTkQnLCBwaW5Ob3RGb3VuZE1lc3NhZ2UobGFiZWwsIHBpbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBQbHVnaW4gXCIke2xhYmVsfVwiIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQg4oCUIGZhbGxpbmcgYmFjayB0byBkZXBsb3ktdGltZSByZXNvbHV0aW9uYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAobWFuYWdlZCkge1xuICAgICAgICByZWZ1c2VNYW5hZ2VkKHNlcnZpY2VFcnJvckNvZGUoZXJyKSA/PyBFcnJvckNvZGUuQk9PVFNUUkFQX0lNQUdFX1VOUkVTT0xWRUQsIHNlcnZpY2VNZXNzYWdlKGVycikgPz8gZXJyb3JNZXNzYWdlKGVycikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBBIHBsdWdpbiB3aG9zZSBpbWFnZSBzaWduYXR1cmUgZG9lc24ndCB2ZXJpZnksIG9yIGEgbGlzdGluZyB0aGUgb3JnXG4gICAgICAvLyBjYW4ndCB1c2UsIGlzIE5PVCBhbiBvdXRhZ2UgdG8gcmlkZSBvdXQ6IGZhbGxpbmcgYmFjayB3b3VsZCBxdWlldGx5XG4gICAgICAvLyB0dXJuIGl0IGludG8gYW4gdW5yZXNvbHZlZCBzdGVwLiBTdG9wLlxuICAgICAgY29uc3QgY29kZSA9IGZhdGFsTG9va3VwQ29kZShlcnIpO1xuICAgICAgaWYgKGNvZGUgPT09IEVycm9yQ29kZS5JTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEKSB7XG4gICAgICAgIHJlZnVzZShjb2RlLCBgUGx1Z2luIFwiJHtsYWJlbH1cIiBpbWFnZSBmYWlsZWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbjogJHtlcnJvck1lc3NhZ2UoZXJyKX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgcmVmdXNlKGNvZGUsIGBQbHVnaW4gXCIke2xhYmVsfVwiIGNhbid0IGJlIHVzZWQgKCR7Y29kZX0pOiAke3NlcnZpY2VNZXNzYWdlKGVycikgPz8gZXJyb3JNZXNzYWdlKGVycil9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChwaW4gJiYgaXNOb3RGb3VuZChlcnIpKSB7XG4gICAgICAgIHJlZnVzZSgnUExVR0lOX1ZFUlNJT05fTk9UX0ZPVU5EJywgcGluTm90Rm91bmRNZXNzYWdlKGxhYmVsLCBwaW4sIGVycikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtc2cgPSBlcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgIHByaW50V2FybmluZyhgUGx1Z2luIFwiJHtsYWJlbH1cIiBwcmUtcmVzb2x1dGlvbiBmYWlsZWQgKCR7bXNnfSkg4oCUIGZhbGxpbmcgYmFjayB0byBkZXBsb3ktdGltZSByZXNvbHV0aW9uYCk7XG4gICAgfVxuICB9KSk7XG5cbiAgaWYgKGZhdGFsLmxlbmd0aCA+IDApIHRocm93IG5ldyBQbHVnaW5SZXNvbHV0aW9uRXJyb3IoZmF0YWwpO1xuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG4iXX0=
@@ -18,4 +18,15 @@ export interface ListResponseResult<T> {
18
18
  * Supports: `{ <key>: T[] }`, `{ items: T[] }`, `T[]`, or invalid formats.
19
19
  */
20
20
  export declare function extractListResponse<T>(response: unknown, itemsKey: string): ListResponseResult<T>;
21
+ /**
22
+ * Read one page of a `sendPaginatedNested` list (`{ data: { <key>: T[],
23
+ * pagination } }`) STRICTLY: a response without `<key>` as an array throws
24
+ * instead of reading as an empty list. For callers that diff the list against
25
+ * something else (`audit stacks`), an empty list read off the wrong key is not
26
+ * "nothing there" — it turns into a false finding for every row on the other
27
+ * side, which is exactly how reading the wrong key once went unnoticed.
28
+ */
29
+ export declare function extractListPage<T>(response: unknown, itemsKey: string): ListResponseResult<T> & {
30
+ nextCursor?: string;
31
+ };
21
32
  //# sourceMappingURL=response-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"response-utils.d.ts","sources":["../../src/utils/response-utils.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAQnH;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAoCjG"}
1
+ {"version":3,"file":"response-utils.d.ts","sources":["../../src/utils/response-utils.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAQnH;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAoCjG;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAavH"}