@dbx-tools/appkit 0.9.154 → 0.9.157
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.ts +18 -13
- package/lib/index.d.ts +18 -13
- package/lib/index.js +19 -12
- package/lib/src/appkit.js +6 -6
- package/lib/src/brand-context.js +3 -3
- package/lib/src/cache-storage.d.ts +1 -1
- package/lib/src/cache-storage.js +6 -6
- package/lib/src/databricks.js +3 -3
- package/lib/src/files-cache.js +9 -9
- package/lib/src/identity.d.ts +0 -14
- package/lib/src/identity.js +9 -23
- package/lib/src/interceptor.js +3 -3
- package/lib/src/lakebase-resolver.d.ts +1 -1
- package/lib/src/lakebase-resolver.js +16 -17
- package/lib/src/migration.js +6 -6
- package/lib/src/openapi-tool.js +5 -5
- package/lib/src/plugin-execution.d.ts +2 -2
- package/lib/src/plugin-execution.js +4 -4
- package/lib/src/provision.d.ts +2 -2
- package/lib/src/provision.js +4 -4
- package/lib/src/request-tags.js +2 -2
- package/lib/src/telemetry.js +4 -4
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -178
- package/src/appkit.ts +5 -5
- package/src/brand-context.ts +2 -2
- package/src/cache-storage.ts +5 -5
- package/src/databricks.ts +2 -2
- package/src/files-cache.ts +8 -8
- package/src/identity.ts +16 -25
- package/src/interceptor.ts +2 -2
- package/src/lakebase-resolver.ts +27 -34
- package/src/migration.ts +11 -5
- package/src/openapi-tool.ts +4 -4
- package/src/plugin-execution.ts +4 -4
- package/src/provision.ts +4 -4
- package/src/request-tags.ts +1 -1
- package/src/telemetry.ts +3 -3
- package/lib/src/bundle.d.ts +0 -33
- package/lib/src/bundle.js +0 -38
- package/lib/src/pgaddress.d.ts +0 -20
- package/lib/src/pgaddress.js +0 -21
- package/src/bundle.ts +0 -57
- package/src/pgaddress.ts +0 -42
package/lib/src/cache-storage.js
CHANGED
|
@@ -17,9 +17,9 @@ import { EventEmitter } from "node:events";
|
|
|
17
17
|
import { createRequire } from "node:module";
|
|
18
18
|
import { dirname, join } from "node:path";
|
|
19
19
|
import { createLakebasePool, getWorkspaceClient } from "@databricks/appkit";
|
|
20
|
-
import { closeCache, createCache, flushCache, projectCache, } from "@dbx-tools/cache
|
|
20
|
+
import { closeCache, createCache, flushCache, projectCache, } from "@dbx-tools/cache";
|
|
21
21
|
import { postgresConnectionOptions } from "@dbx-tools/postgres";
|
|
22
|
-
import {
|
|
22
|
+
import { log, toError, id } from "@dbx-tools/shared-core";
|
|
23
23
|
import { handleOwnershipMigrationError } from "./migration.js";
|
|
24
24
|
const logger = log.logger("cache-storage");
|
|
25
25
|
let persistentStorageCtor = null;
|
|
@@ -145,7 +145,7 @@ export function loadPersistentStorage() {
|
|
|
145
145
|
}
|
|
146
146
|
catch (err) {
|
|
147
147
|
logger.debug("soft persistent cache skipped (PersistentStorage unavailable)", {
|
|
148
|
-
error:
|
|
148
|
+
error: toError(err),
|
|
149
149
|
});
|
|
150
150
|
persistentStorageCtor = undefined;
|
|
151
151
|
return undefined;
|
|
@@ -207,7 +207,7 @@ export function softenInitialize(storage, skipMigrations) {
|
|
|
207
207
|
}
|
|
208
208
|
/** Verify the migrated cache table can serve the reads and writes AppKit needs. */
|
|
209
209
|
export async function probeStorage(storage) {
|
|
210
|
-
const key = `dbx-tools:cache-probe:${
|
|
210
|
+
const key = `dbx-tools:cache-probe:${id()}`;
|
|
211
211
|
try {
|
|
212
212
|
await storage.set(key, { value: key, expiry: Date.now() + 60_000 });
|
|
213
213
|
const result = await storage.get(key);
|
|
@@ -245,7 +245,7 @@ async function createPersistentStorage(cache) {
|
|
|
245
245
|
}
|
|
246
246
|
catch (err) {
|
|
247
247
|
logger.debug("soft persistent cache unavailable", {
|
|
248
|
-
error:
|
|
248
|
+
error: toError(err),
|
|
249
249
|
});
|
|
250
250
|
if (pool) {
|
|
251
251
|
await pool.end().catch(() => { });
|
|
@@ -273,4 +273,4 @@ export async function createAppKitCacheStorage(options = {}) {
|
|
|
273
273
|
: projectCache(options.diskScope ?? "appkit", common);
|
|
274
274
|
return new AppKitCacheStorage(cache, persistent);
|
|
275
275
|
}
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWNoZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RixPQUFPLEVBQ0wsVUFBVSxFQUNWLFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxHQUViLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQXNDM0MsSUFBSSxxQkFBcUIsR0FBb0QsSUFBSSxDQUFDO0FBRWxGLE1BQU0sa0JBQW1CLFNBQVEsWUFBWTtJQUdkO0lBRnBCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFbkIsWUFBNkIsT0FBcUI7UUFDaEQsS0FBSyxFQUFFLENBQUM7UUFEbUIsWUFBTyxHQUFQLE9BQU8sQ0FBYztJQUVsRCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBSSxHQUFXO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUksR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFD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QXdCLENBQzVDLFVBQXFDLEVBQUU7SUFFdkMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FDZCxPQUFPLENBQUMsY0FBYyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sTUFBTSxHQUFpQjtRQUMzQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxXQUFXLEVBQUUsT0FBTztRQUN0RCxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7S0FDbkMsQ0FBQztJQUNGLE1BQU0sS0FBSyxHQUFHLFVBQVU7UUFDdEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUNWLEdBQUcsTUFBTTtZQUNULE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7U0FDbkYsQ0FBQztRQUNKLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZW1vcnktZmlyc3QgQXBwS2l0IGNhY2hlIHN0b3JhZ2Ugd2l0aCBzb2Z0LWZhaWwgTGFrZWJhc2UgcGVyc2lzdGVuY2UuXG4gKlxuICogQXBwS2l0J3MgYFBlcnNpc3RlbnRTdG9yYWdlLmluaXRpYWxpemUoKWAgcnVucyBEREwgbWlncmF0aW9ucyBhbmQgdGhyb3dzIG9uXG4gKiBhbnkgc3RlcCBmYWlsdXJlLiBXaXRoIGBjYWNoZS5zdHJpY3RQZXJzaXN0ZW5jZTogdHJ1ZWAgdGhhdCB0aHJvdyBtYWtlc1xuICogYENhY2hlTWFuYWdlcmAgc2lsZW50bHkgZGlzYWJsZSB0aGUgY2FjaGUuIFRoaXMgd3JhcHMgdGhlIHNhbWUgc3RvcmFnZSxcbiAqIHN0aWxsIHJ1bnMgaXRzIG1pZ3JhdGlvbnMsIGJ1dCBsb2dzIGEgZmFpbGVkIHN0ZXAgaW5zdGVhZCBvZiB0aHJvd2luZyBzbyBhXG4gKiB1c2FibGUgdGFibGUga2VlcHMgc2VydmluZy5cbiAqXG4gKiBgUGVyc2lzdGVudFN0b3JhZ2VgIGlzIG5vdCBvbiBBcHBLaXQncyBwdWJsaWMgZXhwb3J0IG1hcC4gVGhlIGRlZXAgbG9hZCBpc1xuICogbGF6eSBhbmQgYmVzdC1lZmZvcnQ6IGlmIHRoZSBpbnN0YWxsZWQgQXBwS2l0IGxheW91dCBjaGFuZ2VzLCBMYWtlYmFzZSBpc1xuICogc2tpcHBlZCBhbmQgdGhlIGFkYXB0ZXIga2VlcHMgaXRzIHByb2plY3Qtc2NvcGVkIGRpc2sgcGVyc2lzdGVuY2UuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUxha2ViYXNlUG9vbCwgZ2V0V29ya3NwYWNlQ2xpZW50LCB0eXBlIENhY2hlQ29uZmlnIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgY2xvc2VDYWNoZSxcbiAgY3JlYXRlQ2FjaGUsXG4gIGZsdXNoQ2FjaGUsXG4gIHByb2plY3RDYWNoZSxcbiAgdHlwZSBDYWNoZU9wdGlvbnMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2NhY2hlL2NhY2hlXCI7XG5pbXBvcnQgeyBwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSBcIkBkYngtdG9vbHMvcG9zdGdyZXNcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGhhc2gsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBoYW5kbGVPd25lcnNoaXBNaWdyYXRpb25FcnJvciB9IGZyb20gXCIuL21pZ3JhdGlvbi50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiY2FjaGUtc3RvcmFnZVwiKTtcblxudHlwZSBMYWtlYmFzZVBvb2wgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVMYWtlYmFzZVBvb2w+O1xudHlwZSBDYWNoZVN0b3JhZ2UgPSBOb25OdWxsYWJsZTxDYWNoZUNvbmZpZ1tcInN0b3JhZ2VcIl0+O1xuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeTxUID0gdW5rbm93bj4ge1xuICBleHBpcnk6IG51bWJlcjtcbiAgdmFsdWU6IFQ7XG59XG5cbi8qKiBPcHRpb25zIGZvciBBcHBLaXQncyBtZW1vcnktZmlyc3QgY2FjaGUgc3RvcmFnZSBhZGFwdGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBLaXRDYWNoZVN0b3JhZ2VPcHRpb25zIHtcbiAgLyoqIE5hdGl2ZSBBcHBLaXQgY2FjaGUgY29uZmlndXJhdGlvbi4gKi9cbiAgY2FjaGU/OiBDYWNoZUNvbmZpZztcbiAgLyoqIFdoZXRoZXIgdG8gYXR0ZW1wdCBBcHBLaXQncyBMYWtlYmFzZSBQZXJzaXN0ZW50U3RvcmFnZS4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cbiAgcHJlZmVyTGFrZWJhc2U/OiBib29sZWFuO1xuICAvKiogUG9ydGFibGUgZGlzayBzY29wZSB1c2VkIHdoZW4gTGFrZWJhc2UgaXMgdW5hdmFpbGFibGUuICovXG4gIGRpc2tTY29wZT86IHN0cmluZztcbiAgLyoqIFdyaXRlLWJlaGluZCBjb2FsZXNjaW5nIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgd3JpdGVEZWxheU1zPzogbnVtYmVyO1xuICAvKiogTWF4aW11bSBlbnRyaWVzIHJldGFpbmVkIGluIHRoZSBwcm9jZXNzLWxvY2FsIG1lbW9yeSBwcmltYXJ5LiAqL1xuICBtYXhFbnRyaWVzPzogbnVtYmVyO1xufVxuXG4vKiogQXBwS2l0J3MgaW50ZXJuYWwgcGVyc2lzdGVudCBzdG9yYWdlIHN1cmZhY2UuICovXG5leHBvcnQgdHlwZSBQZXJzaXN0ZW50U3RvcmFnZUJhc2UgPSBDYWNoZVN0b3JhZ2UgJiB7XG4gIGNsZWFudXBFeHBpcmVkPygpOiBQcm9taXNlPG51bWJlcj47XG4gIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPjtcbiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIHNjaGVtYU5hbWU/OiBzdHJpbmc7XG4gIHRhYmxlTmFtZT86IHN0cmluZztcbn07XG5cbnR5cGUgUGVyc2lzdGVudFN0b3JhZ2VDb25zdHJ1Y3RvciA9IG5ldyAoXG4gIGNvbmZpZzogQ2FjaGVDb25maWcsXG4gIHBvb2w6IExha2ViYXNlUG9vbCxcbikgPT4gUGVyc2lzdGVudFN0b3JhZ2VCYXNlO1xuXG5sZXQgcGVyc2lzdGVudFN0b3JhZ2VDdG9yOiBQZXJzaXN0ZW50U3RvcmFnZUNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkIHwgbnVsbCA9IG51bGw7XG5cbmNsYXNzIEFwcEtpdFN0b3JhZ2VMZXZlbCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHJlYWRvbmx5IG9wdHMgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2U6IENhY2hlU3RvcmFnZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBhc3luYyBnZXQ8VD4oa2V5OiBzdHJpbmcpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQ8VD4oa2V5KTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChlbnRyeS5leHBpcnkgPD0gRGF0ZS5ub3coKSkge1xuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLmRlbGV0ZShrZXkpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICB9XG5cbiAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgdHRsPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChrZXksIHtcbiAgICAgIHZhbHVlLFxuICAgICAgZXhwaXJ5OiBEYXRlLm5vdygpICsgKHR0bCA/PyA2MF8wMDApLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5zdG9yYWdlLmRlbGV0ZShrZXkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5jbGVhcigpO1xuICB9XG5cbiAgaGFzKGtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5oYXMoa2V5KTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBNZW1vcnktZmlyc3QgQXBwS2l0IENhY2hlU3RvcmFnZSBiYWNrZWQgYnkgQGRieC10b29scy9jYWNoZS4gKi9cbmV4cG9ydCBjbGFzcyBBcHBLaXRDYWNoZVN0b3JhZ2UgaW1wbGVtZW50cyBDYWNoZVN0b3JhZ2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlOiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVDYWNoZT47XG4gIHByaXZhdGUgcmVhZG9ubHkga2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNhY2hlOiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVDYWNoZT4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJzaXN0ZW50OiBDYWNoZVN0b3JhZ2UgfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuY2FjaGUgPSBjYWNoZTtcbiAgfVxuXG4gIGFzeW5jIGdldDxUPihrZXk6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeTxUPiB8IG51bGw+IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHRoaXMuY2FjaGUuZ2V0PENhY2hlRW50cnk8VD4+KGtleSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5rZXlzLmFkZChrZXkpO1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIGFzeW5jIHNldDxUPihrZXk6IHN0cmluZywgZW50cnk6IENhY2hlRW50cnk8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0dGwgPSBlbnRyeS5leHBpcnkgLSBEYXRlLm5vdygpO1xuICAgIGlmICh0dGwgPD0gMCkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGUoa2V5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jYWNoZS5zZXQoa2V5LCBlbnRyeSwgeyB0dGwgfSk7XG4gICAgdGhpcy5rZXlzLmFkZChrZXkpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB0aGlzLmtleXMuZGVsZXRlKGtleSk7XG4gIH1cblxuICBhc3luYyBjbGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5rZXlzLmNsZWFyKCk7XG4gIH1cblxuICBhc3luYyBoYXMoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIGFzeW5jIHNpemUoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZW50ID8gdGhpcy5wZXJzaXN0ZW50LnNpemUoKSA6IHRoaXMua2V5cy5zaXplO1xuICB9XG5cbiAgaXNQZXJzaXN0ZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaGVhbHRoQ2hlY2soKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdGVudCA/IHRoaXMucGVyc2lzdGVudC5oZWFsdGhDaGVjaygpIDogdHJ1ZTtcbiAgfVxuXG4gIC8qKiBEcmFpbiB0cmFja2VkIHdyaXRlLWJlaGluZCBwZXJzaXN0ZW5jZSB3aXRob3V0IGNsb3NpbmcgdGhlIHN0b3JhZ2UuICovXG4gIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBmbHVzaENhY2hlKHRoaXMuY2FjaGUpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgYXdhaXQgY2xvc2VDYWNoZSh0aGlzLmNhY2hlKTtcbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5rZXlzLmNsZWFyKCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBBcHBLaXQncyBydW50aW1lLW9ubHkgcGVyc2lzdGVudCBjbGVhbnVwIGhvb2sgd2hlbiBhdmFpbGFibGUuICovXG4gIGFzeW5jIGNsZWFudXBFeHBpcmVkKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgY2xlYW51cCA9IChcbiAgICAgIHRoaXMucGVyc2lzdGVudCBhc1xuICAgICAgICB8IChDYWNoZVN0b3JhZ2UgJiB7XG4gICAgICAgICAgICBjbGVhbnVwRXhwaXJlZD86ICgpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgICAgICAgICB9KVxuICAgICAgICB8IHVuZGVmaW5lZFxuICAgICk/LmNsZWFudXBFeHBpcmVkO1xuICAgIHJldHVybiBjbGVhbnVwICYmIHRoaXMucGVyc2lzdGVudCA/IGNsZWFudXAuY2FsbCh0aGlzLnBlcnNpc3RlbnQpIDogMDtcbiAgfVxufVxuXG4vKipcbiAqIExhemlseSByZXNvbHZlIEFwcEtpdCdzIGludGVybmFsIGBQZXJzaXN0ZW50U3RvcmFnZWAgY29uc3RydWN0b3IuIGBudWxsYFxuICogbWVhbnMgbm90IGF0dGVtcHRlZCB5ZXQ7IGB1bmRlZmluZWRgIG1lYW5zIHRoZSBsb29rdXAgYWxyZWFkeSBmYWlsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGVyc2lzdGVudFN0b3JhZ2UoKTogUGVyc2lzdGVudFN0b3JhZ2VDb25zdHJ1Y3RvciB8IHVuZGVmaW5lZCB7XG4gIGlmIChwZXJzaXN0ZW50U3RvcmFnZUN0b3IgIT09IG51bGwpIHtcbiAgICByZXR1cm4gcGVyc2lzdGVudFN0b3JhZ2VDdG9yO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gam9pbihcbiAgICAgIGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiQGRhdGFicmlja3MvYXBwa2l0XCIpKSxcbiAgICAgIFwiY2FjaGUvc3RvcmFnZS9wZXJzaXN0ZW50LmpzXCIsXG4gICAgKTtcbiAgICBjb25zdCBsb2FkZWQgPSByZXF1aXJlKG1vZHVsZVBhdGgpLlBlcnNpc3RlbnRTdG9yYWdlIGFzXG4gICAgICBQZXJzaXN0ZW50U3RvcmFnZUNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgbG9hZGVkICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNvZnQgcGVyc2lzdGVudCBjYWNoZSBza2lwcGVkIChQZXJzaXN0ZW50U3RvcmFnZSBtaXNzaW5nKVwiKTtcbiAgICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IGxvYWRlZDtcbiAgICByZXR1cm4gbG9hZGVkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc2tpcHBlZCAoUGVyc2lzdGVudFN0b3JhZ2UgdW5hdmFpbGFibGUpXCIsIHtcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyKSxcbiAgICB9KTtcbiAgICBwZXJzaXN0ZW50U3RvcmFnZUN0b3IgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXRoZXIgYW4gZXhpc3RpbmcgY2FjaGUgdGFibGUgYmVsb25ncyB0byBhbm90aGVyIHJvbGUuXG4gKlxuICogUG9zdGdyZVNRTCBhbGxvd3MgZ3JhbnRlZCByZWFkcy93cml0ZXMgYnV0IHJlc2VydmVzIGluZGV4IERETCBmb3IgdGhlIHRhYmxlXG4gKiBvd25lci4gU2tpcCBBcHBLaXQgbWlncmF0aW9ucyBpbiB0aGF0IGNhc2U7IHtAbGluayBwcm9iZVN0b3JhZ2V9IHN0aWxsIHByb3Zlc1xuICogdGhlIGV4aXN0aW5nIHRhYmxlIGNhbiBzZXJ2ZSB0aGUgY2FjaGUgYmVmb3JlIGl0IGlzIGFjY2VwdGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiB0YWJsZU93bmVkQnlBbm90aGVyUm9sZShcbiAgc3RvcmFnZTogUGVyc2lzdGVudFN0b3JhZ2VCYXNlLFxuICBwb29sOiBMYWtlYmFzZVBvb2wsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKCFzdG9yYWdlLnNjaGVtYU5hbWUgfHwgIXN0b3JhZ2UudGFibGVOYW1lKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnkoXG4gICAgYFNFTEVDVCBwZ19nZXRfdXNlcmJ5aWQoYy5yZWxvd25lcikgPSBjdXJyZW50X3VzZXIgQVMgb3duZWRcbiAgICAgRlJPTSBwZ19jbGFzcyBjXG4gICAgIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZVxuICAgICBXSEVSRSBuLm5zcG5hbWUgPSAkMSBBTkQgYy5yZWxuYW1lID0gJDIgQU5EIGMucmVsa2luZCBJTiAoJ3InLCAncCcpYCxcbiAgICBbc3RvcmFnZS5zY2hlbWFOYW1lLCBzdG9yYWdlLnRhYmxlTmFtZV0sXG4gICk7XG4gIGlmIChyZXN1bHQucm93c1swXT8ub3duZWQgIT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIGxvZ2dlci53YXJuKFwicGVyc2lzdGVudCBjYWNoZSBtaWdyYXRpb25zIHNraXBwZWQgKHRhYmxlIG93bmVkIGJ5IGFub3RoZXIgcm9sZSlcIiwge1xuICAgIHNjaGVtYTogc3RvcmFnZS5zY2hlbWFOYW1lLFxuICAgIHRhYmxlOiBzdG9yYWdlLnRhYmxlTmFtZSxcbiAgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogU29mdGVuIGBpbml0aWFsaXplKClgIHNvIGFuIG93bmVyc2hpcC1vbmx5IG1pZ3JhdGlvbiBmYWlsdXJlIGlzIG5vdCBmYXRhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2Z0ZW5Jbml0aWFsaXplKFxuICBzdG9yYWdlOiBQZXJzaXN0ZW50U3RvcmFnZUJhc2UsXG4gIHNraXBNaWdyYXRpb25zPzogKCkgPT4gUHJvbWlzZTxib29sZWFuPixcbik6IHZvaWQge1xuICBjb25zdCBvcmlnaW5hbEluaXRpYWxpemUgPSBzdG9yYWdlLmluaXRpYWxpemUuYmluZChzdG9yYWdlKTtcbiAgbGV0IHNvZnRJbml0UHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcblxuICBzdG9yYWdlLmluaXRpYWxpemUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHN0b3JhZ2UuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICBzb2Z0SW5pdFByb21pc2UgPz89IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIShhd2FpdCBza2lwTWlncmF0aW9ucz8uKCkpKSBhd2FpdCBvcmlnaW5hbEluaXRpYWxpemUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWhhbmRsZU93bmVyc2hpcE1pZ3JhdGlvbkVycm9yKGVyciwge1xuICAgICAgICAgICAgc2NvcGU6IFwiY2FjaGUtc3RvcmFnZVwiLFxuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgZXZlbnQ6IFwicGVyc2lzdGVudCBjYWNoZSBtaWdyYXRpb24gZmFpbGVkXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc29mdEluaXRQcm9taXNlO1xuICAgICAgc3RvcmFnZS5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzb2Z0SW5pdFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9O1xufVxuXG4vKiogVmVyaWZ5IHRoZSBtaWdyYXRlZCBjYWNoZSB0YWJsZSBjYW4gc2VydmUgdGhlIHJlYWRzIGFuZCB3cml0ZXMgQXBwS2l0IG5lZWRzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlU3RvcmFnZShzdG9yYWdlOiBQZXJzaXN0ZW50U3RvcmFnZUJhc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qga2V5ID0gYGRieC10b29sczpjYWNoZS1wcm9iZToke2hhc2guaWQoKX1gO1xuICB0cnkge1xuICAgIGF3YWl0IHN0b3JhZ2Uuc2V0KGtleSwgeyB2YWx1ZToga2V5LCBleHBpcnk6IERhdGUubm93KCkgKyA2MF8wMDAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RvcmFnZS5nZXQoa2V5KTtcbiAgICBpZiAocmVzdWx0Py52YWx1ZSAhPT0ga2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwZXJzaXN0ZW50IGNhY2hlIHByb2JlIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgdmFsdWVcIik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHN0b3JhZ2UuZGVsZXRlKGtleSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIGEgc29mdC1mYWlsIExha2ViYXNlIGNhY2hlIHN0b3JhZ2Ugd2hlbiBhIHBvb2wgY2FuIGJlIGNyZWF0ZWQgYW5kXG4gKiBBcHBLaXQncyBQZXJzaXN0ZW50U3RvcmFnZSBjYW4gYmUgbG9hZGVkLiBSZXR1cm5zIGB1bmRlZmluZWRgIG90aGVyd2lzZSBzb1xuICogdGhlIGNhbGxlciBjYW4gdXNlIHBvcnRhYmxlIGRpc2sgcGVyc2lzdGVuY2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVBlcnNpc3RlbnRTdG9yYWdlKFxuICBjYWNoZTogQ2FjaGVDb25maWcgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPENhY2hlU3RvcmFnZSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBQZXJzaXN0ZW50U3RvcmFnZSA9IGxvYWRQZXJzaXN0ZW50U3RvcmFnZSgpO1xuICBpZiAoIVBlcnNpc3RlbnRTdG9yYWdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBwb29sOiBMYWtlYmFzZVBvb2wgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgY3JlYXRlZFBvb2wgPSBjcmVhdGVMYWtlYmFzZVBvb2woXG4gICAgICBwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zKHsgd29ya3NwYWNlQ2xpZW50OiBnZXRXb3Jrc3BhY2VDbGllbnQoe30pIH0pLFxuICAgICk7XG4gICAgcG9vbCA9IGNyZWF0ZWRQb29sO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgUGVyc2lzdGVudFN0b3JhZ2UoY2FjaGUgPz8ge30sIGNyZWF0ZWRQb29sKTtcbiAgICBzb2Z0ZW5Jbml0aWFsaXplKHN0b3JhZ2UsICgpID0+IHRhYmxlT3duZWRCeUFub3RoZXJSb2xlKHN0b3JhZ2UsIGNyZWF0ZWRQb29sKSk7XG4gICAgaWYgKCEoYXdhaXQgc3RvcmFnZS5oZWFsdGhDaGVjaygpKSkge1xuICAgICAgYXdhaXQgc3RvcmFnZS5jbG9zZSgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGF3YWl0IHN0b3JhZ2UuaW5pdGlhbGl6ZSgpO1xuICAgIGF3YWl0IHByb2JlU3RvcmFnZShzdG9yYWdlKTtcbiAgICByZXR1cm4gc3RvcmFnZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic29mdCBwZXJzaXN0ZW50IGNhY2hlIHVuYXZhaWxhYmxlXCIsIHtcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyKSxcbiAgICB9KTtcbiAgICBpZiAocG9vbCkge1xuICAgICAgYXdhaXQgcG9vbC5lbmQoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgQXBwS2l0IENhY2hlU3RvcmFnZSB3aXRoIGJvdW5kZWQgbWVtb3J5IGZpcnN0IGFuZCB0cmFja2VkIHBlcnNpc3RlbmNlLlxuICogTGFrZWJhc2UgcmVtYWlucyBBcHBLaXQncyBwZXJzaXN0ZW50IG93bmVyIHdoZW4gYXZhaWxhYmxlOyBvdGhlcndpc2UgdGhlXG4gKiBzaGFyZWQgcHJvamVjdC1zY29wZWQgcG9ydGFibGUgZGlzayBsZXZlbCBpcyB1c2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwS2l0Q2FjaGVTdG9yYWdlKFxuICBvcHRpb25zOiBBcHBLaXRDYWNoZVN0b3JhZ2VPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPEFwcEtpdENhY2hlU3RvcmFnZT4ge1xuICBjb25zdCBuYXRpdmVDYWNoZSA9IG9wdGlvbnMuY2FjaGU7XG4gIGNvbnN0IHBlcnNpc3RlbnQgPVxuICAgIG9wdGlvbnMucHJlZmVyTGFrZWJhc2UgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogYXdhaXQgY3JlYXRlUGVyc2lzdGVudFN0b3JhZ2UobmF0aXZlQ2FjaGUpO1xuICBjb25zdCBjb21tb246IENhY2hlT3B0aW9ucyA9IHtcbiAgICBtYXhFbnRyaWVzOiBvcHRpb25zLm1heEVudHJpZXMgPz8gbmF0aXZlQ2FjaGU/Lm1heFNpemUsXG4gICAgd3JpdGVEZWxheU1zOiBvcHRpb25zLndyaXRlRGVsYXlNcyxcbiAgfTtcbiAgY29uc3QgY2FjaGUgPSBwZXJzaXN0ZW50XG4gICAgPyBjcmVhdGVDYWNoZSh7XG4gICAgICAgIC4uLmNvbW1vbixcbiAgICAgICAgbGV2ZWxzOiBbeyBuYW1lOiBcImFwcGtpdC1wZXJzaXN0ZW50XCIsIHN0b3JlOiBuZXcgQXBwS2l0U3RvcmFnZUxldmVsKHBlcnNpc3RlbnQpIH1dLFxuICAgICAgfSlcbiAgICA6IHByb2plY3RDYWNoZShvcHRpb25zLmRpc2tTY29wZSA/PyBcImFwcGtpdFwiLCBjb21tb24pO1xuICByZXR1cm4gbmV3IEFwcEtpdENhY2hlU3RvcmFnZShjYWNoZSwgcGVyc2lzdGVudCk7XG59XG4iXX0=
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWNoZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RixPQUFPLEVBQ0wsVUFBVSxFQUNWLFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxHQUViLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQXNDM0MsSUFBSSxxQkFBcUIsR0FBb0QsSUFBSSxDQUFDO0FBRWxGLE1BQU0sa0JBQW1CLFNBQVEsWUFBWTtJQUdkO0lBRnBCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFbkIsWUFBNkIsT0FBcUI7UUFDaEQsS0FBSyxFQUFFLENBQUM7UUFEbUIsWUFBTyxHQUFQLE9BQU8sQ0FBYztJQUVsRCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBSSxHQUFXO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUksR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFD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TSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FDZCxPQUFPLENBQUMsY0FBYyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sTUFBTSxHQUFpQjtRQUMzQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxXQUFXLEVBQUUsT0FBTztRQUN0RCxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7S0FDbkMsQ0FBQztJQUNGLE1BQU0sS0FBSyxHQUFHLFVBQVU7UUFDdEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUNWLEdBQUcsTUFBTTtZQUNULE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7U0FDbkYsQ0FBQztRQUNKLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZW1vcnktZmlyc3QgQXBwS2l0IGNhY2hlIHN0b3JhZ2Ugd2l0aCBzb2Z0LWZhaWwgTGFrZWJhc2UgcGVyc2lzdGVuY2UuXG4gKlxuICogQXBwS2l0J3MgYFBlcnNpc3RlbnRTdG9yYWdlLmluaXRpYWxpemUoKWAgcnVucyBEREwgbWlncmF0aW9ucyBhbmQgdGhyb3dzIG9uXG4gKiBhbnkgc3RlcCBmYWlsdXJlLiBXaXRoIGBjYWNoZS5zdHJpY3RQZXJzaXN0ZW5jZTogdHJ1ZWAgdGhhdCB0aHJvdyBtYWtlc1xuICogYENhY2hlTWFuYWdlcmAgc2lsZW50bHkgZGlzYWJsZSB0aGUgY2FjaGUuIFRoaXMgd3JhcHMgdGhlIHNhbWUgc3RvcmFnZSxcbiAqIHN0aWxsIHJ1bnMgaXRzIG1pZ3JhdGlvbnMsIGJ1dCBsb2dzIGEgZmFpbGVkIHN0ZXAgaW5zdGVhZCBvZiB0aHJvd2luZyBzbyBhXG4gKiB1c2FibGUgdGFibGUga2VlcHMgc2VydmluZy5cbiAqXG4gKiBgUGVyc2lzdGVudFN0b3JhZ2VgIGlzIG5vdCBvbiBBcHBLaXQncyBwdWJsaWMgZXhwb3J0IG1hcC4gVGhlIGRlZXAgbG9hZCBpc1xuICogbGF6eSBhbmQgYmVzdC1lZmZvcnQ6IGlmIHRoZSBpbnN0YWxsZWQgQXBwS2l0IGxheW91dCBjaGFuZ2VzLCBMYWtlYmFzZSBpc1xuICogc2tpcHBlZCBhbmQgdGhlIGFkYXB0ZXIga2VlcHMgaXRzIHByb2plY3Qtc2NvcGVkIGRpc2sgcGVyc2lzdGVuY2UuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUxha2ViYXNlUG9vbCwgZ2V0V29ya3NwYWNlQ2xpZW50LCB0eXBlIENhY2hlQ29uZmlnIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgY2xvc2VDYWNoZSxcbiAgY3JlYXRlQ2FjaGUsXG4gIGZsdXNoQ2FjaGUsXG4gIHByb2plY3RDYWNoZSxcbiAgdHlwZSBDYWNoZU9wdGlvbnMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2NhY2hlXCI7XG5pbXBvcnQgeyBwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSBcIkBkYngtdG9vbHMvcG9zdGdyZXNcIjtcbmltcG9ydCB7IGxvZywgdG9FcnJvciwgaWQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgaGFuZGxlT3duZXJzaGlwTWlncmF0aW9uRXJyb3IgfSBmcm9tIFwiLi9taWdyYXRpb24udHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImNhY2hlLXN0b3JhZ2VcIik7XG5cbnR5cGUgTGFrZWJhc2VQb29sID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlTGFrZWJhc2VQb29sPjtcbnR5cGUgQ2FjaGVTdG9yYWdlID0gTm9uTnVsbGFibGU8Q2FjaGVDb25maWdbXCJzdG9yYWdlXCJdPjtcblxuaW50ZXJmYWNlIENhY2hlRW50cnk8VCA9IHVua25vd24+IHtcbiAgZXhwaXJ5OiBudW1iZXI7XG4gIHZhbHVlOiBUO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgQXBwS2l0J3MgbWVtb3J5LWZpcnN0IGNhY2hlIHN0b3JhZ2UgYWRhcHRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwS2l0Q2FjaGVTdG9yYWdlT3B0aW9ucyB7XG4gIC8qKiBOYXRpdmUgQXBwS2l0IGNhY2hlIGNvbmZpZ3VyYXRpb24uICovXG4gIGNhY2hlPzogQ2FjaGVDb25maWc7XG4gIC8qKiBXaGV0aGVyIHRvIGF0dGVtcHQgQXBwS2l0J3MgTGFrZWJhc2UgUGVyc2lzdGVudFN0b3JhZ2UuIERlZmF1bHRzIHRvIHRydWUuICovXG4gIHByZWZlckxha2ViYXNlPzogYm9vbGVhbjtcbiAgLyoqIFBvcnRhYmxlIGRpc2sgc2NvcGUgdXNlZCB3aGVuIExha2ViYXNlIGlzIHVuYXZhaWxhYmxlLiAqL1xuICBkaXNrU2NvcGU/OiBzdHJpbmc7XG4gIC8qKiBXcml0ZS1iZWhpbmQgY29hbGVzY2luZyBkZWxheSBpbiBtaWxsaXNlY29uZHMuICovXG4gIHdyaXRlRGVsYXlNcz86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gZW50cmllcyByZXRhaW5lZCBpbiB0aGUgcHJvY2Vzcy1sb2NhbCBtZW1vcnkgcHJpbWFyeS4gKi9cbiAgbWF4RW50cmllcz86IG51bWJlcjtcbn1cblxuLyoqIEFwcEtpdCdzIGludGVybmFsIHBlcnNpc3RlbnQgc3RvcmFnZSBzdXJmYWNlLiAqL1xuZXhwb3J0IHR5cGUgUGVyc2lzdGVudFN0b3JhZ2VCYXNlID0gQ2FjaGVTdG9yYWdlICYge1xuICBjbGVhbnVwRXhwaXJlZD8oKTogUHJvbWlzZTxudW1iZXI+O1xuICBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD47XG4gIGluaXRpYWxpemVkOiBib29sZWFuO1xuICBzY2hlbWFOYW1lPzogc3RyaW5nO1xuICB0YWJsZU5hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIFBlcnNpc3RlbnRTdG9yYWdlQ29uc3RydWN0b3IgPSBuZXcgKFxuICBjb25maWc6IENhY2hlQ29uZmlnLFxuICBwb29sOiBMYWtlYmFzZVBvb2wsXG4pID0+IFBlcnNpc3RlbnRTdG9yYWdlQmFzZTtcblxubGV0IHBlcnNpc3RlbnRTdG9yYWdlQ3RvcjogUGVyc2lzdGVudFN0b3JhZ2VDb25zdHJ1Y3RvciB8IHVuZGVmaW5lZCB8IG51bGwgPSBudWxsO1xuXG5jbGFzcyBBcHBLaXRTdG9yYWdlTGV2ZWwgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICByZWFkb25seSBvcHRzID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdG9yYWdlOiBDYWNoZVN0b3JhZ2UpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYXN5bmMgZ2V0PFQ+KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0PFQ+KGtleSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoZW50cnkuZXhwaXJ5IDw9IERhdGUubm93KCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5kZWxldGUoa2V5KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeS52YWx1ZTtcbiAgfVxuXG4gIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHR0bD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoa2V5LCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGV4cGlyeTogRGF0ZS5ub3coKSArICh0dGwgPz8gNjBfMDAwKSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5kZWxldGUoa2V5KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuY2xlYXIoKTtcbiAgfVxuXG4gIGhhcyhrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuaGFzKGtleSk7XG4gIH1cblxuICBkaXNjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuY2xvc2UoKTtcbiAgfVxufVxuXG4vKiogTWVtb3J5LWZpcnN0IEFwcEtpdCBDYWNoZVN0b3JhZ2UgYmFja2VkIGJ5IEBkYngtdG9vbHMvY2FjaGUuICovXG5leHBvcnQgY2xhc3MgQXBwS2l0Q2FjaGVTdG9yYWdlIGltcGxlbWVudHMgQ2FjaGVTdG9yYWdlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQ2FjaGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IGtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBjbG9zZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjYWNoZTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQ2FjaGU+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdGVudDogQ2FjaGVTdG9yYWdlIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gIH1cblxuICBhc3luYyBnZXQ8VD4oa2V5OiBzdHJpbmcpOiBQcm9taXNlPENhY2hlRW50cnk8VD4gfCBudWxsPiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCB0aGlzLmNhY2hlLmdldDxDYWNoZUVudHJ5PFQ+PihrZXkpO1xuICAgIGlmICghZW50cnkpIHJldHVybiBudWxsO1xuICAgIHRoaXMua2V5cy5hZGQoa2V5KTtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBhc3luYyBzZXQ8VD4oa2V5OiBzdHJpbmcsIGVudHJ5OiBDYWNoZUVudHJ5PFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdHRsID0gZW50cnkuZXhwaXJ5IC0gRGF0ZS5ub3coKTtcbiAgICBpZiAodHRsIDw9IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlKGtleSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2FjaGUuc2V0KGtleSwgZW50cnksIHsgdHRsIH0pO1xuICAgIHRoaXMua2V5cy5hZGQoa2V5KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgdGhpcy5rZXlzLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgYXN5bmMgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgIHRoaXMua2V5cy5jbGVhcigpO1xuICB9XG5cbiAgYXN5bmMgaGFzKGtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleSk7XG4gIH1cblxuICBhc3luYyBzaXplKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdGVudCA/IHRoaXMucGVyc2lzdGVudC5zaXplKCkgOiB0aGlzLmtleXMuc2l6ZTtcbiAgfVxuXG4gIGlzUGVyc2lzdGVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGhlYWx0aENoZWNrKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbnQgPyB0aGlzLnBlcnNpc3RlbnQuaGVhbHRoQ2hlY2soKSA6IHRydWU7XG4gIH1cblxuICAvKiogRHJhaW4gdHJhY2tlZCB3cml0ZS1iZWhpbmQgcGVyc2lzdGVuY2Ugd2l0aG91dCBjbG9zaW5nIHRoZSBzdG9yYWdlLiAqL1xuICBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZmx1c2hDYWNoZSh0aGlzLmNhY2hlKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGF3YWl0IGNsb3NlQ2FjaGUodGhpcy5jYWNoZSk7XG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMua2V5cy5jbGVhcigpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgQXBwS2l0J3MgcnVudGltZS1vbmx5IHBlcnNpc3RlbnQgY2xlYW51cCBob29rIHdoZW4gYXZhaWxhYmxlLiAqL1xuICBhc3luYyBjbGVhbnVwRXhwaXJlZCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGNsZWFudXAgPSAoXG4gICAgICB0aGlzLnBlcnNpc3RlbnQgYXNcbiAgICAgICAgfCAoQ2FjaGVTdG9yYWdlICYge1xuICAgICAgICAgICAgY2xlYW51cEV4cGlyZWQ/OiAoKSA9PiBQcm9taXNlPG51bWJlcj47XG4gICAgICAgICAgfSlcbiAgICAgICAgfCB1bmRlZmluZWRcbiAgICApPy5jbGVhbnVwRXhwaXJlZDtcbiAgICByZXR1cm4gY2xlYW51cCAmJiB0aGlzLnBlcnNpc3RlbnQgPyBjbGVhbnVwLmNhbGwodGhpcy5wZXJzaXN0ZW50KSA6IDA7XG4gIH1cbn1cblxuLyoqXG4gKiBMYXppbHkgcmVzb2x2ZSBBcHBLaXQncyBpbnRlcm5hbCBgUGVyc2lzdGVudFN0b3JhZ2VgIGNvbnN0cnVjdG9yLiBgbnVsbGBcbiAqIG1lYW5zIG5vdCBhdHRlbXB0ZWQgeWV0OyBgdW5kZWZpbmVkYCBtZWFucyB0aGUgbG9va3VwIGFscmVhZHkgZmFpbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFBlcnNpc3RlbnRTdG9yYWdlKCk6IFBlcnNpc3RlbnRTdG9yYWdlQ29uc3RydWN0b3IgfCB1bmRlZmluZWQge1xuICBpZiAocGVyc2lzdGVudFN0b3JhZ2VDdG9yICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHBlcnNpc3RlbnRTdG9yYWdlQ3RvcjtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IGpvaW4oXG4gICAgICBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcIkBkYXRhYnJpY2tzL2FwcGtpdFwiKSksXG4gICAgICBcImNhY2hlL3N0b3JhZ2UvcGVyc2lzdGVudC5qc1wiLFxuICAgICk7XG4gICAgY29uc3QgbG9hZGVkID0gcmVxdWlyZShtb2R1bGVQYXRoKS5QZXJzaXN0ZW50U3RvcmFnZSBhc1xuICAgICAgUGVyc2lzdGVudFN0b3JhZ2VDb25zdHJ1Y3RvciB8IHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIGxvYWRlZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc2tpcHBlZCAoUGVyc2lzdGVudFN0b3JhZ2UgbWlzc2luZylcIik7XG4gICAgICBwZXJzaXN0ZW50U3RvcmFnZUN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwZXJzaXN0ZW50U3RvcmFnZUN0b3IgPSBsb2FkZWQ7XG4gICAgcmV0dXJuIGxvYWRlZDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic29mdCBwZXJzaXN0ZW50IGNhY2hlIHNraXBwZWQgKFBlcnNpc3RlbnRTdG9yYWdlIHVuYXZhaWxhYmxlKVwiLCB7XG4gICAgICBlcnJvcjogdG9FcnJvcihlcnIpLFxuICAgIH0pO1xuICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciBhbiBleGlzdGluZyBjYWNoZSB0YWJsZSBiZWxvbmdzIHRvIGFub3RoZXIgcm9sZS5cbiAqXG4gKiBQb3N0Z3JlU1FMIGFsbG93cyBncmFudGVkIHJlYWRzL3dyaXRlcyBidXQgcmVzZXJ2ZXMgaW5kZXggRERMIGZvciB0aGUgdGFibGVcbiAqIG93bmVyLiBTa2lwIEFwcEtpdCBtaWdyYXRpb25zIGluIHRoYXQgY2FzZTsge0BsaW5rIHByb2JlU3RvcmFnZX0gc3RpbGwgcHJvdmVzXG4gKiB0aGUgZXhpc3RpbmcgdGFibGUgY2FuIHNlcnZlIHRoZSBjYWNoZSBiZWZvcmUgaXQgaXMgYWNjZXB0ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRhYmxlT3duZWRCeUFub3RoZXJSb2xlKFxuICBzdG9yYWdlOiBQZXJzaXN0ZW50U3RvcmFnZUJhc2UsXG4gIHBvb2w6IExha2ViYXNlUG9vbCxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIXN0b3JhZ2Uuc2NoZW1hTmFtZSB8fCAhc3RvcmFnZS50YWJsZU5hbWUpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeShcbiAgICBgU0VMRUNUIHBnX2dldF91c2VyYnlpZChjLnJlbG93bmVyKSA9IGN1cnJlbnRfdXNlciBBUyBvd25lZFxuICAgICBGUk9NIHBnX2NsYXNzIGNcbiAgICAgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlXG4gICAgIFdIRVJFIG4ubnNwbmFtZSA9ICQxIEFORCBjLnJlbG5hbWUgPSAkMiBBTkQgYy5yZWxraW5kIElOICgncicsICdwJylgLFxuICAgIFtzdG9yYWdlLnNjaGVtYU5hbWUsIHN0b3JhZ2UudGFibGVOYW1lXSxcbiAgKTtcbiAgaWYgKHJlc3VsdC5yb3dzWzBdPy5vd25lZCAhPT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgbG9nZ2VyLndhcm4oXCJwZXJzaXN0ZW50IGNhY2hlIG1pZ3JhdGlvbnMgc2tpcHBlZCAodGFibGUgb3duZWQgYnkgYW5vdGhlciByb2xlKVwiLCB7XG4gICAgc2NoZW1hOiBzdG9yYWdlLnNjaGVtYU5hbWUsXG4gICAgdGFibGU6IHN0b3JhZ2UudGFibGVOYW1lLFxuICB9KTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBTb2Z0ZW4gYGluaXRpYWxpemUoKWAgc28gYW4gb3duZXJzaGlwLW9ubHkgbWlncmF0aW9uIGZhaWx1cmUgaXMgbm90IGZhdGFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvZnRlbkluaXRpYWxpemUoXG4gIHN0b3JhZ2U6IFBlcnNpc3RlbnRTdG9yYWdlQmFzZSxcbiAgc2tpcE1pZ3JhdGlvbnM/OiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+LFxuKTogdm9pZCB7XG4gIGNvbnN0IG9yaWdpbmFsSW5pdGlhbGl6ZSA9IHN0b3JhZ2UuaW5pdGlhbGl6ZS5iaW5kKHN0b3JhZ2UpO1xuICBsZXQgc29mdEluaXRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIHN0b3JhZ2UuaW5pdGlhbGl6ZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcmFnZS5pbml0aWFsaXplZCkgcmV0dXJuO1xuICAgIHNvZnRJbml0UHJvbWlzZSA/Pz0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IHNraXBNaWdyYXRpb25zPy4oKSkpIGF3YWl0IG9yaWdpbmFsSW5pdGlhbGl6ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaGFuZGxlT3duZXJzaGlwTWlncmF0aW9uRXJyb3IoZXJyLCB7XG4gICAgICAgICAgICBzY29wZTogXCJjYWNoZS1zdG9yYWdlXCIsXG4gICAgICAgICAgICBsb2dnZXIsXG4gICAgICAgICAgICBldmVudDogXCJwZXJzaXN0ZW50IGNhY2hlIG1pZ3JhdGlvbiBmYWlsZWRcIixcbiAgICAgICAgICB9KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzb2Z0SW5pdFByb21pc2U7XG4gICAgICBzdG9yYWdlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNvZnRJbml0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH07XG59XG5cbi8qKiBWZXJpZnkgdGhlIG1pZ3JhdGVkIGNhY2hlIHRhYmxlIGNhbiBzZXJ2ZSB0aGUgcmVhZHMgYW5kIHdyaXRlcyBBcHBLaXQgbmVlZHMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvYmVTdG9yYWdlKHN0b3JhZ2U6IFBlcnNpc3RlbnRTdG9yYWdlQmFzZSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBrZXkgPSBgZGJ4LXRvb2xzOmNhY2hlLXByb2JlOiR7aWQoKX1gO1xuICB0cnkge1xuICAgIGF3YWl0IHN0b3JhZ2Uuc2V0KGtleSwgeyB2YWx1ZToga2V5LCBleHBpcnk6IERhdGUubm93KCkgKyA2MF8wMDAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RvcmFnZS5nZXQoa2V5KTtcbiAgICBpZiAocmVzdWx0Py52YWx1ZSAhPT0ga2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwZXJzaXN0ZW50IGNhY2hlIHByb2JlIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgdmFsdWVcIik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHN0b3JhZ2UuZGVsZXRlKGtleSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIGEgc29mdC1mYWlsIExha2ViYXNlIGNhY2hlIHN0b3JhZ2Ugd2hlbiBhIHBvb2wgY2FuIGJlIGNyZWF0ZWQgYW5kXG4gKiBBcHBLaXQncyBQZXJzaXN0ZW50U3RvcmFnZSBjYW4gYmUgbG9hZGVkLiBSZXR1cm5zIGB1bmRlZmluZWRgIG90aGVyd2lzZSBzb1xuICogdGhlIGNhbGxlciBjYW4gdXNlIHBvcnRhYmxlIGRpc2sgcGVyc2lzdGVuY2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVBlcnNpc3RlbnRTdG9yYWdlKFxuICBjYWNoZTogQ2FjaGVDb25maWcgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPENhY2hlU3RvcmFnZSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBQZXJzaXN0ZW50U3RvcmFnZSA9IGxvYWRQZXJzaXN0ZW50U3RvcmFnZSgpO1xuICBpZiAoIVBlcnNpc3RlbnRTdG9yYWdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBwb29sOiBMYWtlYmFzZVBvb2wgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgY3JlYXRlZFBvb2wgPSBjcmVhdGVMYWtlYmFzZVBvb2woXG4gICAgICBwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zKHsgd29ya3NwYWNlQ2xpZW50OiBnZXRXb3Jrc3BhY2VDbGllbnQoe30pIH0pLFxuICAgICk7XG4gICAgcG9vbCA9IGNyZWF0ZWRQb29sO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgUGVyc2lzdGVudFN0b3JhZ2UoY2FjaGUgPz8ge30sIGNyZWF0ZWRQb29sKTtcbiAgICBzb2Z0ZW5Jbml0aWFsaXplKHN0b3JhZ2UsICgpID0+IHRhYmxlT3duZWRCeUFub3RoZXJSb2xlKHN0b3JhZ2UsIGNyZWF0ZWRQb29sKSk7XG4gICAgaWYgKCEoYXdhaXQgc3RvcmFnZS5oZWFsdGhDaGVjaygpKSkge1xuICAgICAgYXdhaXQgc3RvcmFnZS5jbG9zZSgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGF3YWl0IHN0b3JhZ2UuaW5pdGlhbGl6ZSgpO1xuICAgIGF3YWl0IHByb2JlU3RvcmFnZShzdG9yYWdlKTtcbiAgICByZXR1cm4gc3RvcmFnZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic29mdCBwZXJzaXN0ZW50IGNhY2hlIHVuYXZhaWxhYmxlXCIsIHtcbiAgICAgIGVycm9yOiB0b0Vycm9yKGVyciksXG4gICAgfSk7XG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIGF3YWl0IHBvb2wuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIEFwcEtpdCBDYWNoZVN0b3JhZ2Ugd2l0aCBib3VuZGVkIG1lbW9yeSBmaXJzdCBhbmQgdHJhY2tlZCBwZXJzaXN0ZW5jZS5cbiAqIExha2ViYXNlIHJlbWFpbnMgQXBwS2l0J3MgcGVyc2lzdGVudCBvd25lciB3aGVuIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIHRoZVxuICogc2hhcmVkIHByb2plY3Qtc2NvcGVkIHBvcnRhYmxlIGRpc2sgbGV2ZWwgaXMgdXNlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcEtpdENhY2hlU3RvcmFnZShcbiAgb3B0aW9uczogQXBwS2l0Q2FjaGVTdG9yYWdlT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxBcHBLaXRDYWNoZVN0b3JhZ2U+IHtcbiAgY29uc3QgbmF0aXZlQ2FjaGUgPSBvcHRpb25zLmNhY2hlO1xuICBjb25zdCBwZXJzaXN0ZW50ID1cbiAgICBvcHRpb25zLnByZWZlckxha2ViYXNlID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGF3YWl0IGNyZWF0ZVBlcnNpc3RlbnRTdG9yYWdlKG5hdGl2ZUNhY2hlKTtcbiAgY29uc3QgY29tbW9uOiBDYWNoZU9wdGlvbnMgPSB7XG4gICAgbWF4RW50cmllczogb3B0aW9ucy5tYXhFbnRyaWVzID8/IG5hdGl2ZUNhY2hlPy5tYXhTaXplLFxuICAgIHdyaXRlRGVsYXlNczogb3B0aW9ucy53cml0ZURlbGF5TXMsXG4gIH07XG4gIGNvbnN0IGNhY2hlID0gcGVyc2lzdGVudFxuICAgID8gY3JlYXRlQ2FjaGUoe1xuICAgICAgICAuLi5jb21tb24sXG4gICAgICAgIGxldmVsczogW3sgbmFtZTogXCJhcHBraXQtcGVyc2lzdGVudFwiLCBzdG9yZTogbmV3IEFwcEtpdFN0b3JhZ2VMZXZlbChwZXJzaXN0ZW50KSB9XSxcbiAgICAgIH0pXG4gICAgOiBwcm9qZWN0Q2FjaGUob3B0aW9ucy5kaXNrU2NvcGUgPz8gXCJhcHBraXRcIiwgY29tbW9uKTtcbiAgcmV0dXJuIG5ldyBBcHBLaXRDYWNoZVN0b3JhZ2UoY2FjaGUsIHBlcnNpc3RlbnQpO1xufVxuIl19
|
package/lib/src/databricks.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* @module
|
|
11
11
|
*/
|
|
12
12
|
import { Context } from "@databricks/sdk-experimental";
|
|
13
|
-
import {
|
|
13
|
+
import { tieAbortSignal } from "@dbx-tools/shared-core";
|
|
14
14
|
export function toContext(source, input) {
|
|
15
15
|
if (!(source instanceof AbortController)) {
|
|
16
16
|
if (source instanceof Context)
|
|
@@ -18,7 +18,7 @@ export function toContext(source, input) {
|
|
|
18
18
|
return new Context({ cancellationToken: signalToCancellationToken(source) });
|
|
19
19
|
}
|
|
20
20
|
if (input instanceof AbortSignal) {
|
|
21
|
-
|
|
21
|
+
tieAbortSignal(source, input);
|
|
22
22
|
}
|
|
23
23
|
else if (input instanceof Context) {
|
|
24
24
|
const token = input.cancellationToken;
|
|
@@ -64,4 +64,4 @@ function tieCancellationToken(controller, token) {
|
|
|
64
64
|
}
|
|
65
65
|
token.onCancellationRequested((reason) => controller.abort(reason));
|
|
66
66
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYnJpY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFHSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBb0N4RCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQXFDLEVBQUUsS0FBbUI7SUFDbEYsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxNQUFNLFlBQVksT0FBTztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztTQUFNLElBQUksS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUN0QyxJQUFJLEtBQUs7WUFBRSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxNQUFtQjtJQUNwRCxPQUFPO1FBQ0wsSUFBSSx1QkFBdUI7WUFDekIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7UUFDRCx1QkFBdUIsQ0FBQyxFQUFFO1lBQ3hCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQixPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxVQUEyQixFQUFFLEtBQXdCO0lBQ2pGLElBQUksS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDbEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLE9BQU87SUFDVCxDQUFDO0lBQ0QsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJpYyBEYXRhYnJpY2tzIFNESyBnbHVlIChubyBBcHBLaXQpOiBhZGFwdCBXSEFUV0cgY2FuY2VsbGF0aW9uXG4gKiAoYEFib3J0U2lnbmFsYCAvIGBBYm9ydENvbnRyb2xsZXJgKSBpbnRvIHRoZSBTREsncyBgQ29udGV4dGAgL1xuICogYENhbmNlbGxhdGlvblRva2VuYCBzaGFwZXMgc28gYSBzaW5nbGUgYEFib3J0Q29udHJvbGxlcmAgY2FuIGRyaXZlIGV2ZXJ5XG4gKiBpbi1mbGlnaHQgU0RLIGNhbGwuXG4gKlxuICogU2VydmVyLW9ubHk6IGxlYW5zIG9uIHRoZSBEYXRhYnJpY2tzIFNESyBgQ29udGV4dGAuIExpdmVzIGluIG5vZGUtYXBwa2l0IHNvXG4gKiB0aGUgYnJvd3Nlci1zYWZlIHNoYXJlZC1jb3JlIHN0YXlzIFNESy1mcmVlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENhbmNlbGxhdGlvblRva2VuIH0gZnJvbSBcIkBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbFwiO1xuaW1wb3J0IHsgdGllQWJvcnRTaWduYWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG4vKiogRWl0aGVyIGFuIFNESyBgQ29udGV4dGAgb3IgYSBXSEFUV0cgYEFib3J0U2lnbmFsYC4gKi9cbmV4cG9ydCB0eXBlIENvbnRleHRMaWtlID0gQ29udGV4dCB8IEFib3J0U2lnbmFsO1xuXG4vKipcbiAqIFdyYXAgYSBgQ29udGV4dGAgKHJldHVybmVkIGFzLWlzKSBvciBgQWJvcnRTaWduYWxgIChhZGFwdGVkKSBhcyBhbiBTREsgYENvbnRleHRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBnZXRXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKlxuICogYXdhaXQgZ2V0V29ya3NwYWNlQ2xpZW50KHt9KS5hcGlDbGllbnQucmVxdWVzdChcbiAqICAgeyBwYXRoOiBcIi9hcGkvMi4wL3NlcnZpbmctZW5kcG9pbnRzXCIsIG1ldGhvZDogXCJHRVRcIiwgaGVhZGVyczogbmV3IEhlYWRlcnMoKSwgcmF3OiBmYWxzZSB9LFxuICogICBkYXRhYnJpY2tzLnRvQ29udGV4dChyZXF1ZXN0LnNpZ25hbCksXG4gKiApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Db250ZXh0KGlucHV0OiBDb250ZXh0TGlrZSk6IENvbnRleHQ7XG4vKipcbiAqIERlcml2ZSBhbiBTREsgYENvbnRleHRgIGZyb20gYGNvbnRyb2xsZXIuc2lnbmFsYCwgb3B0aW9uYWxseSB0eWluZyBgaW5wdXRgXG4gKiBpbnRvIHRoZSBjb250cm9sbGVyIHNvIHRoZSBjb250cm9sbGVyIGJlY29tZXMgdGhlIHNpbmdsZSBjYW5jZWxsYXRpb25cbiAqIHNvdXJjZSBmb3IgZG93bnN0cmVhbSBTREsgY2FsbHM6XG4gKlxuICogICAtIGBBYm9ydFNpZ25hbGA6IGFib3J0aW5nIGl0IHByb3BhZ2F0ZXMgaW50byBgY29udHJvbGxlcmAgKGFuZCBmcm9tIHRoZXJlXG4gKiAgICAgaW50byBldmVyeSBTREsgY2FsbCB5b3UgcGFzcyB0aGUgcmV0dXJuZWQgY29udGV4dCB0bykuXG4gKiAgIC0gYENvbnRleHRgOiBpdHMgYGNhbmNlbGxhdGlvblRva2VuYCBpcyB0aWVkIGludG8gYGNvbnRyb2xsZXJgLCBhbmQgaXRzXG4gKiAgICAgb3RoZXIgZmllbGRzIChgbG9nZ2VyYCwgYG9wTmFtZWAsIGByb290Q2xhc3NOYW1lYCwgYHJvb3RGbk5hbWVgLCBgb3BJZGApXG4gKiAgICAgYXJlIHByZXNlcnZlZCBpbiB0aGUgcmV0dXJuZWQgYENvbnRleHRgLiBUaGUgcmV0dXJuZWQgY29udGV4dCdzXG4gKiAgICAgYGNhbmNlbGxhdGlvblRva2VuYCBpcyByZXBsYWNlZCB3aXRoIG9uZSBiYWNrZWQgYnkgYGNvbnRyb2xsZXIuc2lnbmFsYC5cbiAqXG4gKiBUaGUgdGllIGlzIG9uZS13YXkgKHBhcmVudCAtPiBjaGlsZCk6IGFib3J0aW5nIGBjb250cm9sbGVyYCBkaXJlY3RseSBkb2VzXG4gKiBOT1QgY2FuY2VsIGBpbnB1dGAuIFNvIGEgcmVxdWVzdC1sZXZlbCBjYW5jZWwgKHlvdXIgbG9vcCdzIGB0cnkvZmluYWxseSB7XG4gKiBjb250cm9sbGVyLmFib3J0KCkgfWApIHdvbid0IHRlYXIgZG93biBhIGNhbGxlci1zdXBwbGllZCBBYm9ydFNpZ25hbCBpdFxuICogZGlkbid0IG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29udGV4dChjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsIGlucHV0PzogQ29udGV4dExpa2UpOiBDb250ZXh0O1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29udGV4dChzb3VyY2U6IEFib3J0Q29udHJvbGxlciB8IENvbnRleHRMaWtlLCBpbnB1dD86IENvbnRleHRMaWtlKTogQ29udGV4dCB7XG4gIGlmICghKHNvdXJjZSBpbnN0YW5jZW9mIEFib3J0Q29udHJvbGxlcikpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgQ29udGV4dCkgcmV0dXJuIHNvdXJjZTtcbiAgICByZXR1cm4gbmV3IENvbnRleHQoeyBjYW5jZWxsYXRpb25Ub2tlbjogc2lnbmFsVG9DYW5jZWxsYXRpb25Ub2tlbihzb3VyY2UpIH0pO1xuICB9XG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsKSB7XG4gICAgdGllQWJvcnRTaWduYWwoc291cmNlLCBpbnB1dCk7XG4gIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb250ZXh0KSB7XG4gICAgY29uc3QgdG9rZW4gPSBpbnB1dC5jYW5jZWxsYXRpb25Ub2tlbjtcbiAgICBpZiAodG9rZW4pIHRpZUNhbmNlbGxhdGlvblRva2VuKHNvdXJjZSwgdG9rZW4pO1xuICAgIGNvbnN0IG1lcmdlZCA9IGlucHV0LmNvcHkoKTtcbiAgICBtZXJnZWQuc2V0SXRlbXMoeyBjYW5jZWxsYXRpb25Ub2tlbjogc2lnbmFsVG9DYW5jZWxsYXRpb25Ub2tlbihzb3VyY2Uuc2lnbmFsKSB9KTtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG4gIHJldHVybiBuZXcgQ29udGV4dCh7IGNhbmNlbGxhdGlvblRva2VuOiBzaWduYWxUb0NhbmNlbGxhdGlvblRva2VuKHNvdXJjZS5zaWduYWwpIH0pO1xufVxuXG4vKipcbiAqIEFkYXB0IGEgV0hBVFdHIGBBYm9ydFNpZ25hbGAgdG8gdGhlIERhdGFicmlja3MgU0RLJ3MgYENhbmNlbGxhdGlvblRva2VuYFxuICogaW50ZXJmYWNlLiBUaGUgU0RLJ3MgYGFwaS1jbGllbnQudHNgIGludGVybmFsbHkgY3JlYXRlcyBhbiBgQWJvcnRDb250cm9sbGVyYFxuICogYW5kIHdpcmVzIGBjYW5jZWxsYXRpb25Ub2tlbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZGAgdG8gaXQsIHNvIHRoaXMgYWRhcHRlclxuICogaXMgdGhlIG9uZS1saW5lIGJyaWRnZSBmcm9tIFwicGxhdGZvcm0tc3RhbmRhcmQgY2FuY2VsbGF0aW9uXCIgdG8gXCJ0aGUgU0RLXG4gKiBhYm9ydHMgdGhlIGZldGNoIG9uIHlvdXIgYmVoYWxmXCIuXG4gKi9cbmZ1bmN0aW9uIHNpZ25hbFRvQ2FuY2VsbGF0aW9uVG9rZW4oc2lnbmFsOiBBYm9ydFNpZ25hbCk6IENhbmNlbGxhdGlvblRva2VuIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKSB7XG4gICAgICByZXR1cm4gc2lnbmFsLmFib3J0ZWQ7XG4gICAgfSxcbiAgICBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZChjYikge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGNiKHNpZ25hbC5yZWFzb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGNiKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaWUgdGhlIFNESydzIGBDYW5jZWxsYXRpb25Ub2tlbmAgaW50ZXJmYWNlIGJhY2sgaW50byBhbiBgQWJvcnRDb250cm9sbGVyYC5cbiAqIE1pcnJvcnMgYGFzeW5jLnRpZUFib3J0U2lnbmFsYCBidXQgZm9yIHRoZSBTREsncyBjYW5jZWxsYXRpb24gc2hhcGUsIHVzZWRcbiAqIHdoZW4gYSBjYWxsZXIgaGFuZHMgdXMgYSBwcmUtYnVpbHQgYENvbnRleHRgIHdob3NlIHRva2VuIHdlIHdhbnQgdG8gZm9sZCBpbnRvXG4gKiBvdXIgb3duIGNvbnRyb2xsZXIuXG4gKi9cbmZ1bmN0aW9uIHRpZUNhbmNlbGxhdGlvblRva2VuKGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlciwgdG9rZW46IENhbmNlbGxhdGlvblRva2VuKTogdm9pZCB7XG4gIGlmICh0b2tlbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkge1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKHJlYXNvbikgPT4gY29udHJvbGxlci5hYm9ydChyZWFzb24pKTtcbn1cbiJdfQ==
|
package/lib/src/files-cache.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
6
|
import { Plugin, toPlugin } from "@databricks/appkit";
|
|
7
|
-
import { cacheKeys, closeCache, createCache, getOrSet } from "@dbx-tools/cache
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { cacheKeys, closeCache, createCache, getOrSet } from "@dbx-tools/cache";
|
|
8
|
+
import { log, toError, toStableKey } from "@dbx-tools/shared-core";
|
|
9
|
+
import { normalizeRoot } from "@dbx-tools/shared-fs";
|
|
10
10
|
const DEFAULT_TTL_MS = 60_000;
|
|
11
11
|
const DEFAULT_INVALIDATION_BATCH_MS = 25;
|
|
12
12
|
const DEFAULT_MAX_ENTRIES = 1_000;
|
|
@@ -33,10 +33,10 @@ export class FilesCacheManager {
|
|
|
33
33
|
/** Retain one stable framework filesystem source for the scope and mounted paths. */
|
|
34
34
|
async forFileSystem(input, identity, load) {
|
|
35
35
|
const state = await this.resolveScopeState(input);
|
|
36
|
-
const paths = identity.paths.map((path) =>
|
|
36
|
+
const paths = identity.paths.map((path) => normalizeRoot(path));
|
|
37
37
|
if (paths.length === 0)
|
|
38
38
|
throw new TypeError("Filesystem source paths must not be empty");
|
|
39
|
-
const sourceKey =
|
|
39
|
+
const sourceKey = toStableKey({ paths, key: identity.key });
|
|
40
40
|
let source = state.sources.get(sourceKey);
|
|
41
41
|
if (!source) {
|
|
42
42
|
source = Promise.resolve(load());
|
|
@@ -53,7 +53,7 @@ export class FilesCacheManager {
|
|
|
53
53
|
}
|
|
54
54
|
async resolveScopeState(input) {
|
|
55
55
|
const scope = resolveScope(input, this.config.ttlMs);
|
|
56
|
-
const scopeKey =
|
|
56
|
+
const scopeKey = toStableKey({
|
|
57
57
|
host: scope.host,
|
|
58
58
|
userKey: scope.userKey,
|
|
59
59
|
workspaceId: scope.workspaceId,
|
|
@@ -99,7 +99,7 @@ export class FilesCacheManager {
|
|
|
99
99
|
this.groups.clear();
|
|
100
100
|
}
|
|
101
101
|
group(scope) {
|
|
102
|
-
const key =
|
|
102
|
+
const key = toStableKey({
|
|
103
103
|
host: scope.host,
|
|
104
104
|
workspaceId: scope.workspaceId,
|
|
105
105
|
});
|
|
@@ -155,7 +155,7 @@ export class FilesCacheManager {
|
|
|
155
155
|
state.group.timer = undefined;
|
|
156
156
|
void this.flushInvalidations(state.group).catch((error) => {
|
|
157
157
|
logger.warn("filesystem cache invalidation batch failed", {
|
|
158
|
-
error:
|
|
158
|
+
error: toError(error),
|
|
159
159
|
});
|
|
160
160
|
});
|
|
161
161
|
}, this.config.invalidationBatchMs);
|
|
@@ -228,4 +228,4 @@ function positiveDuration(value, fallback, name) {
|
|
|
228
228
|
function positiveInteger(value, fallback, name) {
|
|
229
229
|
return Math.floor(positiveDuration(value, fallback, name));
|
|
230
230
|
}
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmlsZXMtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUE4QyxNQUFNLG9CQUFvQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUF5QyxNQUFNLHNCQUFzQixDQUFDO0FBRXhGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUM5QixNQUFNLDZCQUE2QixHQUFHLEVBQUUsQ0FBQztBQUN6QyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQztBQUNsQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUMvQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBNEV6Qyw4Q0FBOEM7QUFDOUMsTUFBTSxPQUFPLGlCQUFpQjtJQUNYLE1BQU0sQ0FBMkI7SUFDakMsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBQ3ZDLE1BQU0sQ0FBaUM7SUFFeEQsWUFBWSxTQUFpQyxFQUFFO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO1lBQzlELG1CQUFtQixFQUFFLGdCQUFnQixDQUNuQyxNQUFNLENBQUMsbUJBQW1CLEVBQzFCLDZCQUE2QixFQUM3QixxQkFBcUIsQ0FDdEI7WUFDRCxVQUFVLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsbUJBQW1C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ICogQXBwS2l0LWdsb2JhbCBmaWxlc3lzdGVtIGNhY2hlIHdpdGggdXNlci1pc29sYXRlZCBwcm9jZXNzLWxvY2FsIHZhbHVlcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgUGx1Z2luLCB0b1BsdWdpbiwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnLCB0eXBlIFBsdWdpbk1hbmlmZXN0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY2FjaGVLZXlzLCBjbG9zZUNhY2hlLCBjcmVhdGVDYWNoZSwgZ2V0T3JTZXQgfSBmcm9tIFwiQGRieC10b29scy9jYWNoZS9jYWNoZVwiO1xuaW1wb3J0IHsgZXJyb3JVdGlscywgbG9nLCBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgcG9zaXhQYXRoLCB0eXBlIENhY2hlVmFsdWUsIHR5cGUgRmlsZVN5c3RlbUNhY2hlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWZzXCI7XG5cbmNvbnN0IERFRkFVTFRfVFRMX01TID0gNjBfMDAwO1xuY29uc3QgREVGQVVMVF9JTlZBTElEQVRJT05fQkFUQ0hfTVMgPSAyNTtcbmNvbnN0IERFRkFVTFRfTUFYX0VOVFJJRVMgPSAxXzAwMDtcbmNvbnN0IERFRkFVTFRfTUFYX1NDT1BFUyA9IDI1NjtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJmaWxlcy1jYWNoZVwiKTtcblxuaW50ZXJmYWNlIFNjb3BlU3RhdGUge1xuICBjYWNoZTogRmlsZVN5c3RlbUNhY2hlO1xuICBlbnRyaWVzOiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVDYWNoZT47XG4gIGdyb3VwOiBHcm91cFN0YXRlO1xuICBzY29wZTogUmVzb2x2ZWRGaWxlc0NhY2hlU2NvcGU7XG4gIHNvdXJjZXM6IE1hcDxzdHJpbmcsIFByb21pc2U8b2JqZWN0Pj47XG59XG5cbmludGVyZmFjZSBHcm91cFN0YXRlIHtcbiAgcGVuZGluZzogU2V0PHN0cmluZz47XG4gIHNjb3BlczogU2V0PFNjb3BlU3RhdGU+O1xuICB0aW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xufVxuXG5pbnRlcmZhY2UgUmVzb2x2ZWRGaWxlc0NhY2hlQ29uZmlnIHtcbiAgaW52YWxpZGF0aW9uQmF0Y2hNczogbnVtYmVyO1xuICBtYXhFbnRyaWVzOiBudW1iZXI7XG4gIG1heFNjb3BlczogbnVtYmVyO1xuICB0dGxNczogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVzb2x2ZWRGaWxlc0NhY2hlU2NvcGUge1xuICBob3N0OiBzdHJpbmc7XG4gIHR0bE1zOiBudW1iZXI7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgd29ya3NwYWNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQXBwS2l0IGZpbGVzLWNhY2hlIHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZXNDYWNoZVBsdWdpbkNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKiogRGVmYXVsdCBlbnRyeSBUVEwgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0cyB0byA2MCBzZWNvbmRzLiAqL1xuICB0dGxNcz86IG51bWJlcjtcbiAgLyoqIEludmFsaWRhdGlvbiBkZWJvdW5jZSB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0cyB0byAyNW1zLiAqL1xuICBpbnZhbGlkYXRpb25CYXRjaE1zPzogbnVtYmVyO1xuICAvKiogTWF4aW11bSBlbnRyaWVzIHJldGFpbmVkIGluIGVhY2ggdXNlciBMMS4gRGVmYXVsdHMgdG8gMSwwMDAuICovXG4gIG1heEVudHJpZXM/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIGFjdGl2ZSB1c2VyIHNjb3BlcyByZXRhaW5lZCBieSB0aGUgcHJvY2Vzcy4gRGVmYXVsdHMgdG8gMjU2LiAqL1xuICBtYXhTY29wZXM/OiBudW1iZXI7XG59XG5cbi8qKiBJZGVudGl0eSBmb3Igb25lIGF1dGhvcml6YXRpb24tc2FmZSBmaWxlc3lzdGVtIGNhY2hlIHNjb3BlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlc0NhY2hlU2NvcGUge1xuICAvKiogRGF0YWJyaWNrcyB3b3Jrc3BhY2UgaG9zdC4gKi9cbiAgaG9zdDogc3RyaW5nO1xuICAvKiogQXR0cmlidXRlZCB1c2VyIGlkZW50aWZpZXIgdXNlZCB0byBpc29sYXRlIHZhbHVlcy4gKi9cbiAgdXNlcktleTogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgd29ya3NwYWNlIGlkZW50aWZpZXIgaW5jbHVkZWQgaW4gc2hhcmVkIGludmFsaWRhdGlvbiBzY29wZS4gKi9cbiAgd29ya3NwYWNlSWQ/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBwZXItc2NvcGUgZW50cnkgVFRMIG92ZXJyaWRlIGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgdHRsTXM/OiBudW1iZXI7XG59XG5cbi8qKiBTdGFibGUgaWRlbnRpdHkgZm9yIGEgZnJhbWV3b3JrIGZpbGVzeXN0ZW0gc291cmNlIHJldGFpbmVkIHdpdGhpbiBvbmUgdXNlciBzY29wZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZXNDYWNoZVNvdXJjZUlkZW50aXR5IHtcbiAgLyoqIEFjdHVhbCBtb3VudGVkIGZpbGVzeXN0ZW0gcGF0aHMgcmVwcmVzZW50ZWQgYnkgdGhlIHNvdXJjZS4gKi9cbiAgcGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogV29ya3NwYWNlLWluc3RhbmNlIGtleSBzZXBhcmF0aW5nIHNvdXJjZXMgd2l0aCBkaWZmZXJlbnQgcG9saWNpZXMgb3ZlciB0aGUgc2FtZSBwYXRocy4gKi9cbiAga2V5Pzogc3RyaW5nO1xufVxuXG4vKiogUHVibGljIGV4cG9ydHMgZnJvbSB7QGxpbmsgRmlsZXNDYWNoZVBsdWdpbn0uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVzQ2FjaGVFeHBvcnRzIHtcbiAgLyoqIFJlc29sdmUgb25lIHVzZXItaXNvbGF0ZWQgZmlsZXN5c3RlbSBjYWNoZS4gKi9cbiAgZm9yU2NvcGUoc2NvcGU6IEZpbGVzQ2FjaGVTY29wZSk6IFByb21pc2U8RmlsZVN5c3RlbUNhY2hlPjtcbiAgLyoqIFJlc29sdmUgb25lIGFwcC1saWZldGltZSBmaWxlc3lzdGVtIHNvdXJjZSBmb3IgYSB1c2VyIGFuZCBpdHMgYWN0dWFsIG1vdW50ZWQgcGF0aHMuICovXG4gIGZvckZpbGVTeXN0ZW08VCBleHRlbmRzIG9iamVjdD4oXG4gICAgc2NvcGU6IEZpbGVzQ2FjaGVTY29wZSxcbiAgICBpZGVudGl0eTogRmlsZXNDYWNoZVNvdXJjZUlkZW50aXR5LFxuICAgIGxvYWQ6ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuICApOiBQcm9taXNlPFQ+O1xuICAvKiogRmx1c2ggcGVuZGluZyBpbnZhbGlkYXRpb24gYmF0Y2hlcy4gKi9cbiAgZmx1c2goKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqIFByb2Nlc3MtbG9jYWwgZmlsZXN5c3RlbSBjYWNoZSBtYW5hZ2VyLiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVzQ2FjaGVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFJlc29sdmVkRmlsZXNDYWNoZUNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgR3JvdXBTdGF0ZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY29wZXM6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUNhY2hlPjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEZpbGVzQ2FjaGVQbHVnaW5Db25maWcgPSB7fSkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgdHRsTXM6IHBvc2l0aXZlRHVyYXRpb24oY29uZmlnLnR0bE1zLCBERUZBVUxUX1RUTF9NUywgXCJ0dGxNc1wiKSxcbiAgICAgIGludmFsaWRhdGlvbkJhdGNoTXM6IHBvc2l0aXZlRHVyYXRpb24oXG4gICAgICAgIGNvbmZpZy5pbnZhbGlkYXRpb25CYXRjaE1zLFxuICAgICAgICBERUZBVUxUX0lOVkFMSURBVElPTl9CQVRDSF9NUyxcbiAgICAgICAgXCJpbnZhbGlkYXRpb25CYXRjaE1zXCIsXG4gICAgICApLFxuICAgICAgbWF4RW50cmllczogcG9zaXRpdmVJbnRlZ2VyKGNvbmZpZy5tYXhFbnRyaWVzLCBERUZBVUxUX01BWF9FTlRSSUVTLCBcIm1heEVudHJpZXNcIiksXG4gICAgICBtYXhTY29wZXM6IHBvc2l0aXZlSW50ZWdlcihjb25maWcubWF4U2NvcGVzLCBERUZBVUxUX01BWF9TQ09QRVMsIFwibWF4U2NvcGVzXCIpLFxuICAgIH07XG4gICAgdGhpcy5zY29wZXMgPSBjcmVhdGVDYWNoZSh7IG1heEVudHJpZXM6IHRoaXMuY29uZmlnLm1heFNjb3BlcywgdXNlQ2xvbmU6IGZhbHNlIH0pO1xuICB9XG5cbiAgLyoqIFJldHVybiBvbmUgdXNlci1pc29sYXRlZCBjYWNoZSB3aXRoaW4gYSBob3N0L3dvcmtzcGFjZSBpbnZhbGlkYXRpb24gZ3JvdXAuICovXG4gIGFzeW5jIGZvclNjb3BlKGlucHV0OiBGaWxlc0NhY2hlU2NvcGUpOiBQcm9taXNlPEZpbGVTeXN0ZW1DYWNoZT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5yZXNvbHZlU2NvcGVTdGF0ZShpbnB1dCkpLmNhY2hlO1xuICB9XG5cbiAgLyoqIFJldGFpbiBvbmUgc3RhYmxlIGZyYW1ld29yayBmaWxlc3lzdGVtIHNvdXJjZSBmb3IgdGhlIHNjb3BlIGFuZCBtb3VudGVkIHBhdGhzLiAqL1xuICBhc3luYyBmb3JGaWxlU3lzdGVtPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIGlucHV0OiBGaWxlc0NhY2hlU2NvcGUsXG4gICAgaWRlbnRpdHk6IEZpbGVzQ2FjaGVTb3VyY2VJZGVudGl0eSxcbiAgICBsb2FkOiAoKSA9PiBUIHwgUHJvbWlzZTxUPixcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLnJlc29sdmVTY29wZVN0YXRlKGlucHV0KTtcbiAgICBjb25zdCBwYXRocyA9IGlkZW50aXR5LnBhdGhzLm1hcCgocGF0aCkgPT4gcG9zaXhQYXRoLm5vcm1hbGl6ZVJvb3QocGF0aCkpO1xuICAgIGlmIChwYXRocy5sZW5ndGggPT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGaWxlc3lzdGVtIHNvdXJjZSBwYXRocyBtdXN0IG5vdCBiZSBlbXB0eVwiKTtcbiAgICBjb25zdCBzb3VyY2VLZXkgPSBvYmplY3QudG9TdGFibGVLZXkoeyBwYXRocywga2V5OiBpZGVudGl0eS5rZXkgfSk7XG4gICAgbGV0IHNvdXJjZSA9IHN0YXRlLnNvdXJjZXMuZ2V0KHNvdXJjZUtleSk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHNvdXJjZSA9IFByb21pc2UucmVzb2x2ZShsb2FkKCkpO1xuICAgICAgc3RhdGUuc291cmNlcy5zZXQoc291cmNlS2V5LCBzb3VyY2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChhd2FpdCBzb3VyY2UpIGFzIFQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChzdGF0ZS5zb3VyY2VzLmdldChzb3VyY2VLZXkpID09PSBzb3VyY2UpIHN0YXRlLnNvdXJjZXMuZGVsZXRlKHNvdXJjZUtleSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc29sdmVTY29wZVN0YXRlKGlucHV0OiBGaWxlc0NhY2hlU2NvcGUpOiBQcm9taXNlPFNjb3BlU3RhdGU+IHtcbiAgICBjb25zdCBzY29wZSA9IHJlc29sdmVTY29wZShpbnB1dCwgdGhpcy5jb25maWcudHRsTXMpO1xuICAgIGNvbnN0IHNjb3BlS2V5ID0gb2JqZWN0LnRvU3RhYmxlS2V5KHtcbiAgICAgIGhvc3Q6IHNjb3BlLmhvc3QsXG4gICAgICB1c2VyS2V5OiBzY29wZS51c2VyS2V5LFxuICAgICAgd29ya3NwYWNlSWQ6IHNjb3BlLndvcmtzcGFjZUlkLFxuICAgIH0pO1xuICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuc2NvcGVzLmdldDxTY29wZVN0YXRlPihzY29wZUtleSk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgaWYgKFsuLi5jYWNoZUtleXModGhpcy5zY29wZXMpXS5sZW5ndGggPj0gdGhpcy5jb25maWcubWF4U2NvcGVzKSB7XG4gICAgICAgIGNvbnN0IG9sZGVzdEtleSA9IGNhY2hlS2V5cyh0aGlzLnNjb3BlcykubmV4dCgpLnZhbHVlO1xuICAgICAgICBpZiAob2xkZXN0S2V5KSB7XG4gICAgICAgICAgY29uc3Qgb2xkZXN0ID0gYXdhaXQgdGhpcy5zY29wZXMuZ2V0PFNjb3BlU3RhdGU+KG9sZGVzdEtleSk7XG4gICAgICAgICAgaWYgKG9sZGVzdCkge1xuICAgICAgICAgICAgb2xkZXN0Lmdyb3VwLnNjb3Blcy5kZWxldGUob2xkZXN0KTtcbiAgICAgICAgICAgIGF3YWl0IGNsb3NlQ2FjaGUob2xkZXN0LmVudHJpZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCB0aGlzLnNjb3Blcy5kZWxldGUob2xkZXN0S2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwKHNjb3BlKTtcbiAgICAgIHN0YXRlID0gdGhpcy5jcmVhdGVTY29wZShzY29wZSwgZ3JvdXApO1xuICAgICAgZ3JvdXAuc2NvcGVzLmFkZChzdGF0ZSk7XG4gICAgICBhd2FpdCB0aGlzLnNjb3Blcy5zZXQoc2NvcGVLZXksIHN0YXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLyoqIEZsdXNoIGV2ZXJ5IHBlbmRpbmcgaW52YWxpZGF0aW9uIGJhdGNoLiAqL1xuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5ncm91cHMudmFsdWVzKCldLm1hcCgoZ3JvdXApID0+IHRoaXMuZmx1c2hJbnZhbGlkYXRpb25zKGdyb3VwKSkpO1xuICB9XG5cbiAgLyoqIEZsdXNoIHN0YXRlIGFuZCByZWxlYXNlIGFsbCBwcm9jZXNzLWxvY2FsIGVudHJpZXMgYW5kIHRpbWVycy4gKi9cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLmdyb3Vwcy52YWx1ZXMoKSkge1xuICAgICAgaWYgKGdyb3VwLnRpbWVyKSBjbGVhclRpbWVvdXQoZ3JvdXAudGltZXIpO1xuICAgICAgZ3JvdXAudGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZmx1c2goKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjYWNoZUtleXModGhpcy5zY29wZXMpKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IHRoaXMuc2NvcGVzLmdldDxTY29wZVN0YXRlPihrZXkpO1xuICAgICAgaWYgKHN0YXRlKSBhd2FpdCBjbG9zZUNhY2hlKHN0YXRlLmVudHJpZXMpO1xuICAgIH1cbiAgICBhd2FpdCBjbG9zZUNhY2hlKHRoaXMuc2NvcGVzKTtcbiAgICB0aGlzLmdyb3Vwcy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cChzY29wZTogUmVzb2x2ZWRGaWxlc0NhY2hlU2NvcGUpOiBHcm91cFN0YXRlIHtcbiAgICBjb25zdCBrZXkgPSBvYmplY3QudG9TdGFibGVLZXkoe1xuICAgICAgaG9zdDogc2NvcGUuaG9zdCxcbiAgICAgIHdvcmtzcGFjZUlkOiBzY29wZS53b3Jrc3BhY2VJZCxcbiAgICB9KTtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZ3JvdXBzLmdldChrZXkpO1xuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgIGNvbnN0IGdyb3VwOiBHcm91cFN0YXRlID0ge1xuICAgICAgcGVuZGluZzogbmV3IFNldCgpLFxuICAgICAgc2NvcGVzOiBuZXcgU2V0KCksXG4gICAgfTtcbiAgICB0aGlzLmdyb3Vwcy5zZXQoa2V5LCBncm91cCk7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTY29wZShzY29wZTogUmVzb2x2ZWRGaWxlc0NhY2hlU2NvcGUsIGdyb3VwOiBHcm91cFN0YXRlKTogU2NvcGVTdGF0ZSB7XG4gICAgY29uc3Qgc3RhdGUgPSB7fSBhcyBTY29wZVN0YXRlO1xuICAgIHN0YXRlLnNjb3BlID0gc2NvcGU7XG4gICAgc3RhdGUuZ3JvdXAgPSBncm91cDtcbiAgICBzdGF0ZS5lbnRyaWVzID0gY3JlYXRlQ2FjaGUoeyBtYXhFbnRyaWVzOiB0aGlzLmNvbmZpZy5tYXhFbnRyaWVzLCB1c2VDbG9uZTogZmFsc2UgfSk7XG4gICAgc3RhdGUuc291cmNlcyA9IG5ldyBNYXAoKTtcbiAgICBzdGF0ZS5jYWNoZSA9IHtcbiAgICAgIHJlYWQ6IDxUIGV4dGVuZHMgQ2FjaGVWYWx1ZT4oY2FjaGVLZXk6IHN0cmluZywgbG9hZDogKCkgPT4gVCB8IFByb21pc2U8VD4pID0+XG4gICAgICAgIHRoaXMucmVhZChzdGF0ZSwgY2FjaGVLZXksIGxvYWQpLFxuICAgICAgaW52YWxpZGF0ZTogKGNhY2hlS2V5OiBzdHJpbmcpID0+IHRoaXMucXVldWVJbnZhbGlkYXRpb24oc3RhdGUsIGNhY2hlS2V5KSxcbiAgICAgIGtleXM6ICgpID0+IHRoaXMua2V5cyhzdGF0ZSksXG4gICAgfTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWQ8VCBleHRlbmRzIENhY2hlVmFsdWU+KFxuICAgIHN0YXRlOiBTY29wZVN0YXRlLFxuICAgIGtleTogc3RyaW5nLFxuICAgIGxvYWQ6ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXN0YXRlLmdyb3VwLnBlbmRpbmcuaGFzKGtleSkpIHtcbiAgICAgIGNvbnN0IHJldGFpbmVkID0gYXdhaXQgc3RhdGUuZW50cmllcy5nZXQ8VD4oa2V5KTtcbiAgICAgIGlmIChyZXRhaW5lZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmV0YWluZWQ7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5ncm91cC5wZW5kaW5nLmhhcyhrZXkpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IGxvYWQoKTtcbiAgICAgIGF3YWl0IHN0YXRlLmVudHJpZXMuc2V0KGtleSwgdmFsdWUsIHsgdHRsOiBzdGF0ZS5zY29wZS50dGxNcyB9KTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCBnZXRPclNldChzdGF0ZS5lbnRyaWVzLCBrZXksICgpID0+IFByb21pc2UucmVzb2x2ZShsb2FkKCkpLCB7XG4gICAgICB0dGw6IHN0YXRlLnNjb3BlLnR0bE1zLFxuICAgIH0pKSBhcyBUO1xuICB9XG5cbiAgcHJpdmF0ZSAqa2V5cyhzdGF0ZTogU2NvcGVTdGF0ZSk6IEl0ZXJhYmxlPHN0cmluZz4ge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGNhY2hlS2V5cyhzdGF0ZS5lbnRyaWVzKSkge1xuICAgICAgaWYgKCFzdGF0ZS5ncm91cC5wZW5kaW5nLmhhcyhrZXkpKSB5aWVsZCBrZXk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBxdWV1ZUludmFsaWRhdGlvbihzdGF0ZTogU2NvcGVTdGF0ZSwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzdGF0ZS5ncm91cC5wZW5kaW5nLmFkZChrZXkpO1xuICAgIGlmIChzdGF0ZS5ncm91cC50aW1lcikgcmV0dXJuO1xuICAgIHN0YXRlLmdyb3VwLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdGF0ZS5ncm91cC50aW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIHZvaWQgdGhpcy5mbHVzaEludmFsaWRhdGlvbnMoc3RhdGUuZ3JvdXApLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihcImZpbGVzeXN0ZW0gY2FjaGUgaW52YWxpZGF0aW9uIGJhdGNoIGZhaWxlZFwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5jb25maWcuaW52YWxpZGF0aW9uQmF0Y2hNcyk7XG4gICAgc3RhdGUuZ3JvdXAudGltZXIudW5yZWY/LigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmbHVzaEludmFsaWRhdGlvbnMoZ3JvdXA6IEdyb3VwU3RhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZ3JvdXAudGltZXIpIGNsZWFyVGltZW91dChncm91cC50aW1lcik7XG4gICAgZ3JvdXAudGltZXIgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGdyb3VwLnBlbmRpbmcuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGtleXMgPSBbLi4uZ3JvdXAucGVuZGluZ107XG4gICAgZ3JvdXAucGVuZGluZy5jbGVhcigpO1xuICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgZ3JvdXAuc2NvcGVzKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChrZXlzLm1hcCgoa2V5KSA9PiBzdGF0ZS5lbnRyaWVzLmRlbGV0ZShrZXkpKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBBcHBLaXQgcGx1Z2luIHRoYXQgb3ducyBwcm9jZXNzLWxvY2FsIGZpbGVzeXN0ZW0gY2FjaGVzLiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVzQ2FjaGVQbHVnaW4gZXh0ZW5kcyBQbHVnaW48RmlsZXNDYWNoZVBsdWdpbkNvbmZpZz4ge1xuICBzdGF0aWMgbWFuaWZlc3QgPSB7XG4gICAgbmFtZTogXCJmaWxlcy1jYWNoZVwiLFxuICAgIGRpc3BsYXlOYW1lOiBcIkZpbGVzIENhY2hlXCIsXG4gICAgZGVzY3JpcHRpb246IFwiUHJvdmlkZXMgYm91bmRlZCB1c2VyLXNjb3BlZCBwcm9jZXNzLWxvY2FsIGZpbGVzeXN0ZW0gY2FjaGVzLlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7IHJlcXVpcmVkOiBbXSwgb3B0aW9uYWw6IFtdIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwiZmlsZXMtY2FjaGVcIj47XG5cbiAgcHJpdmF0ZSBtYW5hZ2VyPzogRmlsZXNDYWNoZU1hbmFnZXI7XG5cbiAgb3ZlcnJpZGUgYXN5bmMgc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IEZpbGVzQ2FjaGVNYW5hZ2VyKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmNvbnRleHQ/Lm9uTGlmZWN5Y2xlKFwic2h1dGRvd25cIiwgKCkgPT4gdGhpcy5tYW5hZ2VyPy5jbG9zZSgpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGV4cG9ydHMoKTogRmlsZXNDYWNoZUV4cG9ydHMge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JTY29wZTogKHNjb3BlKSA9PiB0aGlzLnJlcXVpcmVNYW5hZ2VyKCkuZm9yU2NvcGUoc2NvcGUpLFxuICAgICAgZm9yRmlsZVN5c3RlbTogKHNjb3BlLCBpZGVudGl0eSwgbG9hZCkgPT5cbiAgICAgICAgdGhpcy5yZXF1aXJlTWFuYWdlcigpLmZvckZpbGVTeXN0ZW0oc2NvcGUsIGlkZW50aXR5LCBsb2FkKSxcbiAgICAgIGZsdXNoOiAoKSA9PiB0aGlzLnJlcXVpcmVNYW5hZ2VyKCkuZmx1c2goKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1aXJlTWFuYWdlcigpOiBGaWxlc0NhY2hlTWFuYWdlciB7XG4gICAgaWYgKCF0aGlzLm1hbmFnZXIpIHRocm93IG5ldyBFcnJvcihcIkZpbGVzIGNhY2hlIHBsdWdpbiBoYXMgbm90IGNvbXBsZXRlZCBzZXR1cFwiKTtcbiAgICByZXR1cm4gdGhpcy5tYW5hZ2VyO1xuICB9XG59XG5cbi8qKiBBcHBLaXQgcmVnaXN0cmF0aW9uIGZhY3RvcnkgZm9yIHtAbGluayBGaWxlc0NhY2hlUGx1Z2lufS4gKi9cbmV4cG9ydCBjb25zdCBmaWxlc0NhY2hlID0gdG9QbHVnaW4oRmlsZXNDYWNoZVBsdWdpbik7XG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZShpbnB1dDogRmlsZXNDYWNoZVNjb3BlLCBkZWZhdWx0VHRsTXM6IG51bWJlcik6IFJlc29sdmVkRmlsZXNDYWNoZVNjb3BlIHtcbiAgY29uc3QgaG9zdCA9IGlucHV0Lmhvc3QudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG4gIGNvbnN0IHVzZXJLZXkgPSBpbnB1dC51c2VyS2V5LnRyaW0oKTtcbiAgY29uc3Qgd29ya3NwYWNlSWQgPSBpbnB1dC53b3Jrc3BhY2VJZD8udHJpbSgpIHx8IHVuZGVmaW5lZDtcbiAgaWYgKCFob3N0KSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlsZXMgY2FjaGUgc2NvcGUgaG9zdCBtdXN0IG5vdCBiZSBibGFua1wiKTtcbiAgaWYgKCF1c2VyS2V5KSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlsZXMgY2FjaGUgc2NvcGUgdXNlcktleSBtdXN0IG5vdCBiZSBibGFua1wiKTtcbiAgcmV0dXJuIHtcbiAgICBob3N0LFxuICAgIHVzZXJLZXksXG4gICAgLi4uKHdvcmtzcGFjZUlkID8geyB3b3Jrc3BhY2VJZCB9IDoge30pLFxuICAgIHR0bE1zOiBwb3NpdGl2ZUR1cmF0aW9uKGlucHV0LnR0bE1zLCBkZWZhdWx0VHRsTXMsIFwic2NvcGUudHRsTXNcIiksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvc2l0aXZlRHVyYXRpb24odmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlciwgbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSB2YWx1ZSA/PyBmYWxsYmFjaztcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmVzb2x2ZWQpIHx8IHJlc29sdmVkIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgZmluaXRlIHBvc2l0aXZlIG51bWJlcmApO1xuICB9XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZnVuY3Rpb24gcG9zaXRpdmVJbnRlZ2VyKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLmZsb29yKHBvc2l0aXZlRHVyYXRpb24odmFsdWUsIGZhbGxiYWNrLCBuYW1lKSk7XG59XG4iXX0=
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmlsZXMtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUE4QyxNQUFNLG9CQUFvQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQXlDLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTVGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUM5QixNQUFNLDZCQUE2QixHQUFHLEVBQUUsQ0FBQztBQUN6QyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQztBQUNsQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUMvQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBNEV6Qyw4Q0FBOEM7QUFDOUMsTUFBTSxPQUFPLGlCQUFpQjtJQUNYLE1BQU0sQ0FBMkI7SUFDakMsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBQ3ZDLE1BQU0sQ0FBaUM7SUFFeEQsWUFBWSxTQUFpQyxFQUFFO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO1lBQzlELG1CQUFtQixFQUFFLGdCQUFnQixDQUNuQyxNQUFNLENBQUMsbUJBQW1CLEVBQzFCLDZCQUE2QixFQUM3QixxQkFBcUIsQ0FDdEI7WUFDRCxVQUFVLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsbUJBQW1C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LEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxTQUFTLENBQUM7SUFDM0QsSUFBSSxDQUFDLElBQUk7UUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDM0UsSUFBSSxDQUFDLE9BQU87UUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDakYsT0FBTztRQUNMLElBQUk7UUFDSixPQUFPO1FBQ1AsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUM7S0FDbEUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQXlCLEVBQUUsUUFBZ0IsRUFBRSxJQUFZO0lBQ2pGLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFBSSxRQUFRLENBQUM7SUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxVQUFVLENBQUMsR0FBRyxJQUFJLG1DQUFtQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxLQUF5QixFQUFFLFFBQWdCLEVBQUUsSUFBWTtJQUNoRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdC1nbG9iYWwgZmlsZXN5c3RlbSBjYWNoZSB3aXRoIHVzZXItaXNvbGF0ZWQgcHJvY2Vzcy1sb2NhbCB2YWx1ZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IFBsdWdpbiwgdG9QbHVnaW4sIHR5cGUgQmFzZVBsdWdpbkNvbmZpZywgdHlwZSBQbHVnaW5NYW5pZmVzdCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGNhY2hlS2V5cywgY2xvc2VDYWNoZSwgY3JlYXRlQ2FjaGUsIGdldE9yU2V0IH0gZnJvbSBcIkBkYngtdG9vbHMvY2FjaGVcIjtcbmltcG9ydCB7IGxvZywgdG9FcnJvciwgdG9TdGFibGVLZXkgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgdHlwZSBDYWNoZVZhbHVlLCB0eXBlIEZpbGVTeXN0ZW1DYWNoZSwgbm9ybWFsaXplUm9vdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1mc1wiO1xuXG5jb25zdCBERUZBVUxUX1RUTF9NUyA9IDYwXzAwMDtcbmNvbnN0IERFRkFVTFRfSU5WQUxJREFUSU9OX0JBVENIX01TID0gMjU7XG5jb25zdCBERUZBVUxUX01BWF9FTlRSSUVTID0gMV8wMDA7XG5jb25zdCBERUZBVUxUX01BWF9TQ09QRVMgPSAyNTY7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZmlsZXMtY2FjaGVcIik7XG5cbmludGVyZmFjZSBTY29wZVN0YXRlIHtcbiAgY2FjaGU6IEZpbGVTeXN0ZW1DYWNoZTtcbiAgZW50cmllczogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQ2FjaGU+O1xuICBncm91cDogR3JvdXBTdGF0ZTtcbiAgc2NvcGU6IFJlc29sdmVkRmlsZXNDYWNoZVNjb3BlO1xuICBzb3VyY2VzOiBNYXA8c3RyaW5nLCBQcm9taXNlPG9iamVjdD4+O1xufVxuXG5pbnRlcmZhY2UgR3JvdXBTdGF0ZSB7XG4gIHBlbmRpbmc6IFNldDxzdHJpbmc+O1xuICBzY29wZXM6IFNldDxTY29wZVN0YXRlPjtcbiAgdGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pjtcbn1cblxuaW50ZXJmYWNlIFJlc29sdmVkRmlsZXNDYWNoZUNvbmZpZyB7XG4gIGludmFsaWRhdGlvbkJhdGNoTXM6IG51bWJlcjtcbiAgbWF4RW50cmllczogbnVtYmVyO1xuICBtYXhTY29wZXM6IG51bWJlcjtcbiAgdHRsTXM6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJlc29sdmVkRmlsZXNDYWNoZVNjb3BlIHtcbiAgaG9zdDogc3RyaW5nO1xuICB0dGxNczogbnVtYmVyO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIHdvcmtzcGFjZUlkPzogc3RyaW5nO1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBmb3IgdGhlIEFwcEtpdCBmaWxlcy1jYWNoZSBwbHVnaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVzQ2FjaGVQbHVnaW5Db25maWcgZXh0ZW5kcyBCYXNlUGx1Z2luQ29uZmlnIHtcbiAgLyoqIERlZmF1bHQgZW50cnkgVFRMIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gNjAgc2Vjb25kcy4gKi9cbiAgdHRsTXM/OiBudW1iZXI7XG4gIC8qKiBJbnZhbGlkYXRpb24gZGVib3VuY2Ugd2luZG93IGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gMjVtcy4gKi9cbiAgaW52YWxpZGF0aW9uQmF0Y2hNcz86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gZW50cmllcyByZXRhaW5lZCBpbiBlYWNoIHVzZXIgTDEuIERlZmF1bHRzIHRvIDEsMDAwLiAqL1xuICBtYXhFbnRyaWVzPzogbnVtYmVyO1xuICAvKiogTWF4aW11bSBhY3RpdmUgdXNlciBzY29wZXMgcmV0YWluZWQgYnkgdGhlIHByb2Nlc3MuIERlZmF1bHRzIHRvIDI1Ni4gKi9cbiAgbWF4U2NvcGVzPzogbnVtYmVyO1xufVxuXG4vKiogSWRlbnRpdHkgZm9yIG9uZSBhdXRob3JpemF0aW9uLXNhZmUgZmlsZXN5c3RlbSBjYWNoZSBzY29wZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZXNDYWNoZVNjb3BlIHtcbiAgLyoqIERhdGFicmlja3Mgd29ya3NwYWNlIGhvc3QuICovXG4gIGhvc3Q6IHN0cmluZztcbiAgLyoqIEF0dHJpYnV0ZWQgdXNlciBpZGVudGlmaWVyIHVzZWQgdG8gaXNvbGF0ZSB2YWx1ZXMuICovXG4gIHVzZXJLZXk6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHdvcmtzcGFjZSBpZGVudGlmaWVyIGluY2x1ZGVkIGluIHNoYXJlZCBpbnZhbGlkYXRpb24gc2NvcGUuICovXG4gIHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgcGVyLXNjb3BlIGVudHJ5IFRUTCBvdmVycmlkZSBpbiBtaWxsaXNlY29uZHMuICovXG4gIHR0bE1zPzogbnVtYmVyO1xufVxuXG4vKiogU3RhYmxlIGlkZW50aXR5IGZvciBhIGZyYW1ld29yayBmaWxlc3lzdGVtIHNvdXJjZSByZXRhaW5lZCB3aXRoaW4gb25lIHVzZXIgc2NvcGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVzQ2FjaGVTb3VyY2VJZGVudGl0eSB7XG4gIC8qKiBBY3R1YWwgbW91bnRlZCBmaWxlc3lzdGVtIHBhdGhzIHJlcHJlc2VudGVkIGJ5IHRoZSBzb3VyY2UuICovXG4gIHBhdGhzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFdvcmtzcGFjZS1pbnN0YW5jZSBrZXkgc2VwYXJhdGluZyBzb3VyY2VzIHdpdGggZGlmZmVyZW50IHBvbGljaWVzIG92ZXIgdGhlIHNhbWUgcGF0aHMuICovXG4gIGtleT86IHN0cmluZztcbn1cblxuLyoqIFB1YmxpYyBleHBvcnRzIGZyb20ge0BsaW5rIEZpbGVzQ2FjaGVQbHVnaW59LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlc0NhY2hlRXhwb3J0cyB7XG4gIC8qKiBSZXNvbHZlIG9uZSB1c2VyLWlzb2xhdGVkIGZpbGVzeXN0ZW0gY2FjaGUuICovXG4gIGZvclNjb3BlKHNjb3BlOiBGaWxlc0NhY2hlU2NvcGUpOiBQcm9taXNlPEZpbGVTeXN0ZW1DYWNoZT47XG4gIC8qKiBSZXNvbHZlIG9uZSBhcHAtbGlmZXRpbWUgZmlsZXN5c3RlbSBzb3VyY2UgZm9yIGEgdXNlciBhbmQgaXRzIGFjdHVhbCBtb3VudGVkIHBhdGhzLiAqL1xuICBmb3JGaWxlU3lzdGVtPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIHNjb3BlOiBGaWxlc0NhY2hlU2NvcGUsXG4gICAgaWRlbnRpdHk6IEZpbGVzQ2FjaGVTb3VyY2VJZGVudGl0eSxcbiAgICBsb2FkOiAoKSA9PiBUIHwgUHJvbWlzZTxUPixcbiAgKTogUHJvbWlzZTxUPjtcbiAgLyoqIEZsdXNoIHBlbmRpbmcgaW52YWxpZGF0aW9uIGJhdGNoZXMuICovXG4gIGZsdXNoKCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBQcm9jZXNzLWxvY2FsIGZpbGVzeXN0ZW0gY2FjaGUgbWFuYWdlci4gKi9cbmV4cG9ydCBjbGFzcyBGaWxlc0NhY2hlTWFuYWdlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBSZXNvbHZlZEZpbGVzQ2FjaGVDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIEdyb3VwU3RhdGU+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NvcGVzOiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVDYWNoZT47XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBGaWxlc0NhY2hlUGx1Z2luQ29uZmlnID0ge30pIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHR0bE1zOiBwb3NpdGl2ZUR1cmF0aW9uKGNvbmZpZy50dGxNcywgREVGQVVMVF9UVExfTVMsIFwidHRsTXNcIiksXG4gICAgICBpbnZhbGlkYXRpb25CYXRjaE1zOiBwb3NpdGl2ZUR1cmF0aW9uKFxuICAgICAgICBjb25maWcuaW52YWxpZGF0aW9uQmF0Y2hNcyxcbiAgICAgICAgREVGQVVMVF9JTlZBTElEQVRJT05fQkFUQ0hfTVMsXG4gICAgICAgIFwiaW52YWxpZGF0aW9uQmF0Y2hNc1wiLFxuICAgICAgKSxcbiAgICAgIG1heEVudHJpZXM6IHBvc2l0aXZlSW50ZWdlcihjb25maWcubWF4RW50cmllcywgREVGQVVMVF9NQVhfRU5UUklFUywgXCJtYXhFbnRyaWVzXCIpLFxuICAgICAgbWF4U2NvcGVzOiBwb3NpdGl2ZUludGVnZXIoY29uZmlnLm1heFNjb3BlcywgREVGQVVMVF9NQVhfU0NPUEVTLCBcIm1heFNjb3Blc1wiKSxcbiAgICB9O1xuICAgIHRoaXMuc2NvcGVzID0gY3JlYXRlQ2FjaGUoeyBtYXhFbnRyaWVzOiB0aGlzLmNvbmZpZy5tYXhTY29wZXMsIHVzZUNsb25lOiBmYWxzZSB9KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gb25lIHVzZXItaXNvbGF0ZWQgY2FjaGUgd2l0aGluIGEgaG9zdC93b3Jrc3BhY2UgaW52YWxpZGF0aW9uIGdyb3VwLiAqL1xuICBhc3luYyBmb3JTY29wZShpbnB1dDogRmlsZXNDYWNoZVNjb3BlKTogUHJvbWlzZTxGaWxlU3lzdGVtQ2FjaGU+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMucmVzb2x2ZVNjb3BlU3RhdGUoaW5wdXQpKS5jYWNoZTtcbiAgfVxuXG4gIC8qKiBSZXRhaW4gb25lIHN0YWJsZSBmcmFtZXdvcmsgZmlsZXN5c3RlbSBzb3VyY2UgZm9yIHRoZSBzY29wZSBhbmQgbW91bnRlZCBwYXRocy4gKi9cbiAgYXN5bmMgZm9yRmlsZVN5c3RlbTxUIGV4dGVuZHMgb2JqZWN0PihcbiAgICBpbnB1dDogRmlsZXNDYWNoZVNjb3BlLFxuICAgIGlkZW50aXR5OiBGaWxlc0NhY2hlU291cmNlSWRlbnRpdHksXG4gICAgbG9hZDogKCkgPT4gVCB8IFByb21pc2U8VD4sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy5yZXNvbHZlU2NvcGVTdGF0ZShpbnB1dCk7XG4gICAgY29uc3QgcGF0aHMgPSBpZGVudGl0eS5wYXRocy5tYXAoKHBhdGgpID0+IG5vcm1hbGl6ZVJvb3QocGF0aCkpO1xuICAgIGlmIChwYXRocy5sZW5ndGggPT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGaWxlc3lzdGVtIHNvdXJjZSBwYXRocyBtdXN0IG5vdCBiZSBlbXB0eVwiKTtcbiAgICBjb25zdCBzb3VyY2VLZXkgPSB0b1N0YWJsZUtleSh7IHBhdGhzLCBrZXk6IGlkZW50aXR5LmtleSB9KTtcbiAgICBsZXQgc291cmNlID0gc3RhdGUuc291cmNlcy5nZXQoc291cmNlS2V5KTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgc291cmNlID0gUHJvbWlzZS5yZXNvbHZlKGxvYWQoKSk7XG4gICAgICBzdGF0ZS5zb3VyY2VzLnNldChzb3VyY2VLZXksIHNvdXJjZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGF3YWl0IHNvdXJjZSkgYXMgVDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHN0YXRlLnNvdXJjZXMuZ2V0KHNvdXJjZUtleSkgPT09IHNvdXJjZSkgc3RhdGUuc291cmNlcy5kZWxldGUoc291cmNlS2V5KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVNjb3BlU3RhdGUoaW5wdXQ6IEZpbGVzQ2FjaGVTY29wZSk6IFByb21pc2U8U2NvcGVTdGF0ZT4ge1xuICAgIGNvbnN0IHNjb3BlID0gcmVzb2x2ZVNjb3BlKGlucHV0LCB0aGlzLmNvbmZpZy50dGxNcyk7XG4gICAgY29uc3Qgc2NvcGVLZXkgPSB0b1N0YWJsZUtleSh7XG4gICAgICBob3N0OiBzY29wZS5ob3N0LFxuICAgICAgdXNlcktleTogc2NvcGUudXNlcktleSxcbiAgICAgIHdvcmtzcGFjZUlkOiBzY29wZS53b3Jrc3BhY2VJZCxcbiAgICB9KTtcbiAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLnNjb3Blcy5nZXQ8U2NvcGVTdGF0ZT4oc2NvcGVLZXkpO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIGlmIChbLi4uY2FjaGVLZXlzKHRoaXMuc2NvcGVzKV0ubGVuZ3RoID49IHRoaXMuY29uZmlnLm1heFNjb3Blcykge1xuICAgICAgICBjb25zdCBvbGRlc3RLZXkgPSBjYWNoZUtleXModGhpcy5zY29wZXMpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgaWYgKG9sZGVzdEtleSkge1xuICAgICAgICAgIGNvbnN0IG9sZGVzdCA9IGF3YWl0IHRoaXMuc2NvcGVzLmdldDxTY29wZVN0YXRlPihvbGRlc3RLZXkpO1xuICAgICAgICAgIGlmIChvbGRlc3QpIHtcbiAgICAgICAgICAgIG9sZGVzdC5ncm91cC5zY29wZXMuZGVsZXRlKG9sZGVzdCk7XG4gICAgICAgICAgICBhd2FpdCBjbG9zZUNhY2hlKG9sZGVzdC5lbnRyaWVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5zY29wZXMuZGVsZXRlKG9sZGVzdEtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cChzY29wZSk7XG4gICAgICBzdGF0ZSA9IHRoaXMuY3JlYXRlU2NvcGUoc2NvcGUsIGdyb3VwKTtcbiAgICAgIGdyb3VwLnNjb3Blcy5hZGQoc3RhdGUpO1xuICAgICAgYXdhaXQgdGhpcy5zY29wZXMuc2V0KHNjb3BlS2V5LCBzdGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8qKiBGbHVzaCBldmVyeSBwZW5kaW5nIGludmFsaWRhdGlvbiBiYXRjaC4gKi9cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnRoaXMuZ3JvdXBzLnZhbHVlcygpXS5tYXAoKGdyb3VwKSA9PiB0aGlzLmZsdXNoSW52YWxpZGF0aW9ucyhncm91cCkpKTtcbiAgfVxuXG4gIC8qKiBGbHVzaCBzdGF0ZSBhbmQgcmVsZWFzZSBhbGwgcHJvY2Vzcy1sb2NhbCBlbnRyaWVzIGFuZCB0aW1lcnMuICovXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5ncm91cHMudmFsdWVzKCkpIHtcbiAgICAgIGlmIChncm91cC50aW1lcikgY2xlYXJUaW1lb3V0KGdyb3VwLnRpbWVyKTtcbiAgICAgIGdyb3VwLnRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmZsdXNoKCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgY2FjaGVLZXlzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLnNjb3Blcy5nZXQ8U2NvcGVTdGF0ZT4oa2V5KTtcbiAgICAgIGlmIChzdGF0ZSkgYXdhaXQgY2xvc2VDYWNoZShzdGF0ZS5lbnRyaWVzKTtcbiAgICB9XG4gICAgYXdhaXQgY2xvc2VDYWNoZSh0aGlzLnNjb3Blcyk7XG4gICAgdGhpcy5ncm91cHMuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JvdXAoc2NvcGU6IFJlc29sdmVkRmlsZXNDYWNoZVNjb3BlKTogR3JvdXBTdGF0ZSB7XG4gICAgY29uc3Qga2V5ID0gdG9TdGFibGVLZXkoe1xuICAgICAgaG9zdDogc2NvcGUuaG9zdCxcbiAgICAgIHdvcmtzcGFjZUlkOiBzY29wZS53b3Jrc3BhY2VJZCxcbiAgICB9KTtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZ3JvdXBzLmdldChrZXkpO1xuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgIGNvbnN0IGdyb3VwOiBHcm91cFN0YXRlID0ge1xuICAgICAgcGVuZGluZzogbmV3IFNldCgpLFxuICAgICAgc2NvcGVzOiBuZXcgU2V0KCksXG4gICAgfTtcbiAgICB0aGlzLmdyb3Vwcy5zZXQoa2V5LCBncm91cCk7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTY29wZShzY29wZTogUmVzb2x2ZWRGaWxlc0NhY2hlU2NvcGUsIGdyb3VwOiBHcm91cFN0YXRlKTogU2NvcGVTdGF0ZSB7XG4gICAgY29uc3Qgc3RhdGUgPSB7fSBhcyBTY29wZVN0YXRlO1xuICAgIHN0YXRlLnNjb3BlID0gc2NvcGU7XG4gICAgc3RhdGUuZ3JvdXAgPSBncm91cDtcbiAgICBzdGF0ZS5lbnRyaWVzID0gY3JlYXRlQ2FjaGUoeyBtYXhFbnRyaWVzOiB0aGlzLmNvbmZpZy5tYXhFbnRyaWVzLCB1c2VDbG9uZTogZmFsc2UgfSk7XG4gICAgc3RhdGUuc291cmNlcyA9IG5ldyBNYXAoKTtcbiAgICBzdGF0ZS5jYWNoZSA9IHtcbiAgICAgIHJlYWQ6IDxUIGV4dGVuZHMgQ2FjaGVWYWx1ZT4oY2FjaGVLZXk6IHN0cmluZywgbG9hZDogKCkgPT4gVCB8IFByb21pc2U8VD4pID0+XG4gICAgICAgIHRoaXMucmVhZChzdGF0ZSwgY2FjaGVLZXksIGxvYWQpLFxuICAgICAgaW52YWxpZGF0ZTogKGNhY2hlS2V5OiBzdHJpbmcpID0+IHRoaXMucXVldWVJbnZhbGlkYXRpb24oc3RhdGUsIGNhY2hlS2V5KSxcbiAgICAgIGtleXM6ICgpID0+IHRoaXMua2V5cyhzdGF0ZSksXG4gICAgfTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWQ8VCBleHRlbmRzIENhY2hlVmFsdWU+KFxuICAgIHN0YXRlOiBTY29wZVN0YXRlLFxuICAgIGtleTogc3RyaW5nLFxuICAgIGxvYWQ6ICgpID0+IFQgfCBQcm9taXNlPFQ+LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXN0YXRlLmdyb3VwLnBlbmRpbmcuaGFzKGtleSkpIHtcbiAgICAgIGNvbnN0IHJldGFpbmVkID0gYXdhaXQgc3RhdGUuZW50cmllcy5nZXQ8VD4oa2V5KTtcbiAgICAgIGlmIChyZXRhaW5lZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmV0YWluZWQ7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5ncm91cC5wZW5kaW5nLmhhcyhrZXkpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IGxvYWQoKTtcbiAgICAgIGF3YWl0IHN0YXRlLmVudHJpZXMuc2V0KGtleSwgdmFsdWUsIHsgdHRsOiBzdGF0ZS5zY29wZS50dGxNcyB9KTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCBnZXRPclNldChzdGF0ZS5lbnRyaWVzLCBrZXksICgpID0+IFByb21pc2UucmVzb2x2ZShsb2FkKCkpLCB7XG4gICAgICB0dGw6IHN0YXRlLnNjb3BlLnR0bE1zLFxuICAgIH0pKSBhcyBUO1xuICB9XG5cbiAgcHJpdmF0ZSAqa2V5cyhzdGF0ZTogU2NvcGVTdGF0ZSk6IEl0ZXJhYmxlPHN0cmluZz4ge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGNhY2hlS2V5cyhzdGF0ZS5lbnRyaWVzKSkge1xuICAgICAgaWYgKCFzdGF0ZS5ncm91cC5wZW5kaW5nLmhhcyhrZXkpKSB5aWVsZCBrZXk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBxdWV1ZUludmFsaWRhdGlvbihzdGF0ZTogU2NvcGVTdGF0ZSwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzdGF0ZS5ncm91cC5wZW5kaW5nLmFkZChrZXkpO1xuICAgIGlmIChzdGF0ZS5ncm91cC50aW1lcikgcmV0dXJuO1xuICAgIHN0YXRlLmdyb3VwLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdGF0ZS5ncm91cC50aW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIHZvaWQgdGhpcy5mbHVzaEludmFsaWRhdGlvbnMoc3RhdGUuZ3JvdXApLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihcImZpbGVzeXN0ZW0gY2FjaGUgaW52YWxpZGF0aW9uIGJhdGNoIGZhaWxlZFwiLCB7XG4gICAgICAgICAgZXJyb3I6IHRvRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuY29uZmlnLmludmFsaWRhdGlvbkJhdGNoTXMpO1xuICAgIHN0YXRlLmdyb3VwLnRpbWVyLnVucmVmPy4oKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmx1c2hJbnZhbGlkYXRpb25zKGdyb3VwOiBHcm91cFN0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGdyb3VwLnRpbWVyKSBjbGVhclRpbWVvdXQoZ3JvdXAudGltZXIpO1xuICAgIGdyb3VwLnRpbWVyID0gdW5kZWZpbmVkO1xuICAgIGlmIChncm91cC5wZW5kaW5nLnNpemUgPT09IDApIHJldHVybjtcbiAgICBjb25zdCBrZXlzID0gWy4uLmdyb3VwLnBlbmRpbmddO1xuICAgIGdyb3VwLnBlbmRpbmcuY2xlYXIoKTtcbiAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIGdyb3VwLnNjb3Blcykge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoa2V5cy5tYXAoKGtleSkgPT4gc3RhdGUuZW50cmllcy5kZWxldGUoa2V5KSkpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogQXBwS2l0IHBsdWdpbiB0aGF0IG93bnMgcHJvY2Vzcy1sb2NhbCBmaWxlc3lzdGVtIGNhY2hlcy4gKi9cbmV4cG9ydCBjbGFzcyBGaWxlc0NhY2hlUGx1Z2luIGV4dGVuZHMgUGx1Z2luPEZpbGVzQ2FjaGVQbHVnaW5Db25maWc+IHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwiZmlsZXMtY2FjaGVcIixcbiAgICBkaXNwbGF5TmFtZTogXCJGaWxlcyBDYWNoZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlByb3ZpZGVzIGJvdW5kZWQgdXNlci1zY29wZWQgcHJvY2Vzcy1sb2NhbCBmaWxlc3lzdGVtIGNhY2hlcy5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczogeyByZXF1aXJlZDogW10sIG9wdGlvbmFsOiBbXSB9LFxuICB9IHNhdGlzZmllcyBQbHVnaW5NYW5pZmVzdDxcImZpbGVzLWNhY2hlXCI+O1xuXG4gIHByaXZhdGUgbWFuYWdlcj86IEZpbGVzQ2FjaGVNYW5hZ2VyO1xuXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBGaWxlc0NhY2hlTWFuYWdlcih0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5jb250ZXh0Py5vbkxpZmVjeWNsZShcInNodXRkb3duXCIsICgpID0+IHRoaXMubWFuYWdlcj8uY2xvc2UoKSk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCk6IEZpbGVzQ2FjaGVFeHBvcnRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9yU2NvcGU6IChzY29wZSkgPT4gdGhpcy5yZXF1aXJlTWFuYWdlcigpLmZvclNjb3BlKHNjb3BlKSxcbiAgICAgIGZvckZpbGVTeXN0ZW06IChzY29wZSwgaWRlbnRpdHksIGxvYWQpID0+XG4gICAgICAgIHRoaXMucmVxdWlyZU1hbmFnZXIoKS5mb3JGaWxlU3lzdGVtKHNjb3BlLCBpZGVudGl0eSwgbG9hZCksXG4gICAgICBmbHVzaDogKCkgPT4gdGhpcy5yZXF1aXJlTWFuYWdlcigpLmZsdXNoKCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWlyZU1hbmFnZXIoKTogRmlsZXNDYWNoZU1hbmFnZXIge1xuICAgIGlmICghdGhpcy5tYW5hZ2VyKSB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlcyBjYWNoZSBwbHVnaW4gaGFzIG5vdCBjb21wbGV0ZWQgc2V0dXBcIik7XG4gICAgcmV0dXJuIHRoaXMubWFuYWdlcjtcbiAgfVxufVxuXG4vKiogQXBwS2l0IHJlZ2lzdHJhdGlvbiBmYWN0b3J5IGZvciB7QGxpbmsgRmlsZXNDYWNoZVBsdWdpbn0uICovXG5leHBvcnQgY29uc3QgZmlsZXNDYWNoZSA9IHRvUGx1Z2luKEZpbGVzQ2FjaGVQbHVnaW4pO1xuXG5mdW5jdGlvbiByZXNvbHZlU2NvcGUoaW5wdXQ6IEZpbGVzQ2FjaGVTY29wZSwgZGVmYXVsdFR0bE1zOiBudW1iZXIpOiBSZXNvbHZlZEZpbGVzQ2FjaGVTY29wZSB7XG4gIGNvbnN0IGhvc3QgPSBpbnB1dC5ob3N0LnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuICBjb25zdCB1c2VyS2V5ID0gaW5wdXQudXNlcktleS50cmltKCk7XG4gIGNvbnN0IHdvcmtzcGFjZUlkID0gaW5wdXQud29ya3NwYWNlSWQ/LnRyaW0oKSB8fCB1bmRlZmluZWQ7XG4gIGlmICghaG9zdCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpbGVzIGNhY2hlIHNjb3BlIGhvc3QgbXVzdCBub3QgYmUgYmxhbmtcIik7XG4gIGlmICghdXNlcktleSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpbGVzIGNhY2hlIHNjb3BlIHVzZXJLZXkgbXVzdCBub3QgYmUgYmxhbmtcIik7XG4gIHJldHVybiB7XG4gICAgaG9zdCxcbiAgICB1c2VyS2V5LFxuICAgIC4uLih3b3Jrc3BhY2VJZCA/IHsgd29ya3NwYWNlSWQgfSA6IHt9KSxcbiAgICB0dGxNczogcG9zaXRpdmVEdXJhdGlvbihpbnB1dC50dGxNcywgZGVmYXVsdFR0bE1zLCBcInNjb3BlLnR0bE1zXCIpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwb3NpdGl2ZUR1cmF0aW9uKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHJlc29sdmVkID0gdmFsdWUgPz8gZmFsbGJhY2s7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHJlc29sdmVkKSB8fCByZXNvbHZlZCA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhIGZpbml0ZSBwb3NpdGl2ZSBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5cbmZ1bmN0aW9uIHBvc2l0aXZlSW50ZWdlcih2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyLCBuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5mbG9vcihwb3NpdGl2ZUR1cmF0aW9uKHZhbHVlLCBmYWxsYmFjaywgbmFtZSkpO1xufVxuIl19
|
package/lib/src/identity.d.ts
CHANGED
|
@@ -50,20 +50,6 @@
|
|
|
50
50
|
*
|
|
51
51
|
* @module
|
|
52
52
|
*/
|
|
53
|
-
/**
|
|
54
|
-
* Header the Databricks Apps front door forwards the caller's OBO token on.
|
|
55
|
-
* Its presence is what makes `asUser(req)` viable, so it is the signal
|
|
56
|
-
* {@link useServicePrincipal} reads in `"auto"` mode.
|
|
57
|
-
*
|
|
58
|
-
* Re-exported from `@dbx-tools/shared-core`'s `token` module (which reads the
|
|
59
|
-
* same header to decode OAuth scopes) rather than re-spelled, so the name for
|
|
60
|
-
* this wire contract exists once.
|
|
61
|
-
*/
|
|
62
|
-
export declare const ACCESS_TOKEN_HEADER = "x-forwarded-access-token";
|
|
63
|
-
/** Header the Databricks Apps front door forwards the caller's user id on. */
|
|
64
|
-
export declare const USER_ID_HEADER = "x-forwarded-user";
|
|
65
|
-
/** Header the Databricks Apps front door forwards the caller's email on. */
|
|
66
|
-
export declare const USER_EMAIL_HEADER = "x-forwarded-email";
|
|
67
53
|
/** Identity a request's Databricks calls run as. See the module docs. */
|
|
68
54
|
export type IdentityMode = "user" | "service-principal" | "auto";
|
|
69
55
|
/** Every accepted {@link IdentityMode}, in the order docs and schemas list them. */
|
package/lib/src/identity.js
CHANGED
|
@@ -51,22 +51,8 @@
|
|
|
51
51
|
* @module
|
|
52
52
|
*/
|
|
53
53
|
import { ConfigurationError, Plugin } from "@databricks/appkit";
|
|
54
|
-
import {
|
|
55
|
-
import {
|
|
56
|
-
/**
|
|
57
|
-
* Header the Databricks Apps front door forwards the caller's OBO token on.
|
|
58
|
-
* Its presence is what makes `asUser(req)` viable, so it is the signal
|
|
59
|
-
* {@link useServicePrincipal} reads in `"auto"` mode.
|
|
60
|
-
*
|
|
61
|
-
* Re-exported from `@dbx-tools/shared-core`'s `token` module (which reads the
|
|
62
|
-
* same header to decode OAuth scopes) rather than re-spelled, so the name for
|
|
63
|
-
* this wire contract exists once.
|
|
64
|
-
*/
|
|
65
|
-
export const ACCESS_TOKEN_HEADER = token.ACCESS_TOKEN_HEADER;
|
|
66
|
-
/** Header the Databricks Apps front door forwards the caller's user id on. */
|
|
67
|
-
export const USER_ID_HEADER = token.USER_ID_HEADER;
|
|
68
|
-
/** Header the Databricks Apps front door forwards the caller's email on. */
|
|
69
|
-
export const USER_EMAIL_HEADER = token.USER_EMAIL_HEADER;
|
|
54
|
+
import { string, ENV_ONLY } from "@dbx-tools/core";
|
|
55
|
+
import { log, toError, isLevelEnabled, trimToNull, ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER, } from "@dbx-tools/shared-core";
|
|
70
56
|
/** Every accepted {@link IdentityMode}, in the order docs and schemas list them. */
|
|
71
57
|
export const IDENTITY_MODES = ["user", "service-principal", "auto"];
|
|
72
58
|
/**
|
|
@@ -84,7 +70,7 @@ export const DEFAULT_IDENTITY_MODE = "user";
|
|
|
84
70
|
* typo (`"obo"`, `"sp"`) is the likeliest way to get one.
|
|
85
71
|
*/
|
|
86
72
|
export function resolveIdentityMode(configured, envKeys, field = "identity") {
|
|
87
|
-
const raw =
|
|
73
|
+
const raw = string(configured, envKeys, ENV_ONLY);
|
|
88
74
|
if (raw === undefined)
|
|
89
75
|
return DEFAULT_IDENTITY_MODE;
|
|
90
76
|
const mode = raw.toLowerCase();
|
|
@@ -101,15 +87,15 @@ export function resolveIdentityMode(configured, envKeys, field = "identity") {
|
|
|
101
87
|
* the first Databricks call.
|
|
102
88
|
*/
|
|
103
89
|
export function requestAccessToken(req) {
|
|
104
|
-
return
|
|
90
|
+
return trimToNull(req?.header(ACCESS_TOKEN_HEADER)) ?? undefined;
|
|
105
91
|
}
|
|
106
92
|
/** The forwarded user id on `req`, or `undefined`. */
|
|
107
93
|
export function requestUserId(req) {
|
|
108
|
-
return
|
|
94
|
+
return trimToNull(req?.header(USER_ID_HEADER)) ?? undefined;
|
|
109
95
|
}
|
|
110
96
|
/** The forwarded user email on `req`, or `undefined`. */
|
|
111
97
|
export function requestUserEmail(req) {
|
|
112
|
-
return
|
|
98
|
+
return trimToNull(req?.header(USER_EMAIL_HEADER)) ?? undefined;
|
|
113
99
|
}
|
|
114
100
|
/**
|
|
115
101
|
* Whether `req` should run its Databricks calls as the app service principal
|
|
@@ -170,7 +156,7 @@ export function installAsUserDevelopmentPatch() {
|
|
|
170
156
|
};
|
|
171
157
|
}
|
|
172
158
|
catch (error) {
|
|
173
|
-
logger.debug("asUser development patch skipped", { error:
|
|
159
|
+
logger.debug("asUser development patch skipped", { error: toError(error) });
|
|
174
160
|
}
|
|
175
161
|
}
|
|
176
162
|
function asHeaderBearing(req) {
|
|
@@ -188,7 +174,7 @@ function withAsUserSkipWarnSuppressed(req, fn) {
|
|
|
188
174
|
}
|
|
189
175
|
const warn = console.warn;
|
|
190
176
|
console.warn = (...args) => {
|
|
191
|
-
if (!
|
|
177
|
+
if (!isLevelEnabled("debug") &&
|
|
192
178
|
args.some((value) => typeof value === "string" && value.includes(AS_USER_SKIP_WARN))) {
|
|
193
179
|
return;
|
|
194
180
|
}
|
|
@@ -201,4 +187,4 @@ function withAsUserSkipWarnSuppressed(req, fn) {
|
|
|
201
187
|
console.warn = warn;
|
|
202
188
|
}
|
|
203
189
|
}
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaWRlbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1ERztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTdFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0FBRTdELDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztBQUVuRCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO0FBS3pELG9GQUFvRjtBQUNwRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQTRCLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRTdGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFpQixNQUFNLENBQUM7QUFPMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLFVBQThCLEVBQzlCLE9BQW1DLEVBQ25DLEtBQUssR0FBRyxVQUFVO0lBRWxCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUUsSUFBSSxHQUFHLEtBQUssU0FBUztRQUFFLE9BQU8scUJBQXFC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LElBQUksQ0FBQztJQUMxQixPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFlLEVBQUUsRUFBRTtRQUNwQyxJQUNFLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUNwRixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUF1QyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNkLENBQUM7WUFBUyxDQUFDO1FBQ1QsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdoaWNoIERhdGFicmlja3MgaWRlbnRpdHkgYSByZXF1ZXN0J3Mgd29ya3NwYWNlIGNhbGxzIHJ1biBhcy5cbiAqXG4gKiBBcHBLaXQgZ2l2ZXMgYSBwbHVnaW4gdHdvIGlkZW50aXRpZXM6IHRoZSBhbWJpZW50IFNFUlZJQ0UgY29udGV4dCAodGhlIGFwcCdzXG4gKiBvd24gc2VydmljZSBwcmluY2lwYWwpIGFuZCBhIHBlci1yZXF1ZXN0IFVTRVIgY29udGV4dCBlbnRlcmVkIHdpdGhcbiAqIGBhc1VzZXIocmVxKWAsIHdoaWNoIGF1dGhlbnRpY2F0ZXMgYXMgdGhlIGNhbGxlciBvbi1iZWhhbGYtb2YgKE9CTykuIFRoZVxuICogY2hvaWNlIGlzIG9uZSBjYWxsLCBzbyB0aGUgd2hvbGUgZGVjaXNpb24gaXMgXCJkbyB3ZSBlbnRlciBgYXNVc2VyYCBmb3IgdGhpc1xuICogcmVxdWVzdFwiLlxuICpcbiAqIGBhc1VzZXIocmVxKWAgbmVlZHMgdGhlIE9CTyB0b2tlbiB0aGUgcGxhdGZvcm0gZnJvbnQgZG9vciBmb3J3YXJkcyBvblxuICoge0BsaW5rIEFDQ0VTU19UT0tFTl9IRUFERVJ9LiBNZWFzdXJlZCBhZ2FpbnN0IHRoZSBpbnN0YWxsZWQgQXBwS2l0LCBpdHNcbiAqIGJlaGF2aW9yIHdoZW4gdGhhdCBoZWFkZXIgaXMgYWJzZW50IGRlcGVuZHMgRU5USVJFTFkgb24gYE5PREVfRU5WYDpcbiAqXG4gKiB8IGBOT0RFX0VOVmAgICAgfCBubyBgeC1mb3J3YXJkZWQtYWNjZXNzLXRva2VuYCAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICogfCBgZGV2ZWxvcG1lbnRgIHwgbG9ncyBhIHdhcm5pbmcsIHNpbGVudGx5IHJ1bnMgYXMgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIHxcbiAqIHwgYW55dGhpbmcgZWxzZSB8IHRocm93cyBgQXV0aGVudGljYXRpb25FcnJvcjogTWlzc2luZyB1c2VyIHRva2VuYCAgICAgIHxcbiAqXG4gKiBUaGF0IHByb2R1Y3Rpb24gdGhyb3cgaXMgY29ycmVjdCBmb3IgYW4gYXBwIGJlaGluZCB0aGUgRGF0YWJyaWNrcyBmcm9udCBkb29yLFxuICogd2hlcmUgYSBtaXNzaW5nIHRva2VuIG1lYW5zIHNvbWV0aGluZyBpcyB3cm9uZy4gSXQgaXMgZmF0YWwgZm9yIGFuIGFwcCB3aG9zZVxuICogdHJhZmZpYyBsZWdpdGltYXRlbHkgYXJyaXZlcyBXSVRIT1VUIG9uZTpcbiAqXG4gKiAgIC0gYSBwdWJsaWMgdHVubmVsIChgQGRieC10b29scy90dW5uZWxgKSwgd2hlcmUgY2FsbGVycyBhdXRoZW50aWNhdGUgYnlcbiAqICAgICBlbWFpbCBPVFAgYW5kIG5vIE9CTyB0b2tlbiBleGlzdHMgdG8gZm9yd2FyZCAtIHRoZSBnYXRlIGNhbiBwcm92ZSBXSE8gdGhlXG4gKiAgICAgY2FsbGVyIGlzLCBidXQgaXQgY2Fubm90IG1pbnQgYSBEYXRhYnJpY2tzIGNyZWRlbnRpYWwgZm9yIHRoZW07XG4gKiAgIC0gYW55IHJldmVyc2UgcHJveHksIHdlYmhvb2ssIG9yIGJvdCBjaGFubmVsIHRoYXQgYXV0aGVudGljYXRlcyBpdHMgb3duIHdheS5cbiAqXG4gKiBTdWNoIGFuIGFwcCBtdXN0IG5vdCBydW4gd2l0aCBgTk9ERV9FTlY9ZGV2ZWxvcG1lbnRgIGp1c3QgdG8gZ2V0IHRoZSBmYWxsYmFjazpcbiAqIHRoYXQgZmxhZyBhbHNvIHJlbGF4ZXMgc2VjdXJlIGNvb2tpZXMsIEFwcEtpdCdzIG93biBkZXYgYWZmb3JkYW5jZXMsIGFuZFxuICogYGFsbG93VW5hdXRoZW50aWNhdGVkYCBlc2NhcGUgaGF0Y2hlcy4gSGVuY2Uge0BsaW5rIElkZW50aXR5TW9kZX06XG4gKlxuICogICAtIGBcInVzZXJcImAgLSBhbHdheXMgT0JPLiBQZXItdXNlciBhdHRyaWJ1dGlvbiBhbmQgcGVyLXVzZXIgR2VuaWUgLyBVbml0eVxuICogICAgIENhdGFsb2cgcm93IGZpbHRlcnMuIENvcnJlY3Qgd2hlbiBldmVyeSBjYWxsZXIgaXMgYSB3b3Jrc3BhY2UgbWVtYmVyLlxuICogICAtIGBcInNlcnZpY2UtcHJpbmNpcGFsXCJgIC0gYWx3YXlzIHRoZSBhcHAncyBvd24gaWRlbnRpdHkuIE5lZWRzIG5vIE9CT1xuICogICAgIHNjb3BlcyBhbmQgd29ya3MgZm9yIGFueSBjYWxsZXIsIGF0IHRoZSBjb3N0IG9mIHBlci11c2VyIGRhdGEgc2NvcGluZy5cbiAqICAgLSBgXCJhdXRvXCJgIC0gT0JPIHdoZW4gdGhlIHJlcXVlc3QgYWN0dWFsbHkgY2FycmllcyBhIHVzYWJsZSBPQk8gdG9rZW4sXG4gKiAgICAgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIG90aGVyd2lzZS4gT25lIGRlcGxveW1lbnQgdGhlbiBzZXJ2ZXMgQk9USCBkb29yc1xuICogICAgIGNvcnJlY3RseTogZnJvbnQtZG9vciByZXF1ZXN0cyBrZWVwIGZ1bGwgcGVyLXVzZXIgc2NvcGluZywgd2hpbGUgdHVubmVsIC9cbiAqICAgICB3ZWJob29rIHJlcXVlc3RzIGRlZ3JhZGUgdG8gdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGluc3RlYWQgb2YgNTAwaW5nLlxuICpcbiAqIGBcImF1dG9cImAgZGVjaWRlcyBwZXIgUkVRVUVTVCwgbm90IHBlciBib290LCBiZWNhdXNlIGEgc2luZ2xlIGNvbnRhaW5lciBzZXJ2ZXNcbiAqIGJvdGggZG9vcnMgYXQgb25jZSAtIHRoZSB0dW5uZWwgZ2F0ZSBhbmQgdGhlIHBsYXRmb3JtIGZyb250IGRvb3Igc2hhcmUgYSBwb3J0XG4gKiAoc2VlIGBAZGJ4LXRvb2xzL3R1bm5lbGApLiBBIGJvb3QtdGltZSBmbGFnIHdvdWxkIGhhdmUgdG8gYmUgd3JvbmcgZm9yIG9uZVxuICogb2YgdGhlbS5cbiAqXG4gKiBXaGF0IHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBkb2VzIE5PVCBjaGFuZ2UgaXMgV0hPIHRoZSByZXF1ZXN0IGJlbG9uZ3MgdG8uIFRoZVxuICogY2FsbGVyJ3MgaWRlbnRpdHkgc3RpbGwgYXJyaXZlcyBvbiB7QGxpbmsgVVNFUl9JRF9IRUFERVJ9IC9cbiAqIHtAbGluayBVU0VSX0VNQUlMX0hFQURFUn0sIHNvIG1lbW9yeSB0aHJlYWRzLCBjYWNoZSBuYW1lc3BhY2VzLCBhbmQgdHJhY2VcbiAqIGF0dHJpYnV0aW9uIHN0YXkgcGVyLXVzZXIuIE9ubHkgdGhlIERhdGFicmlja3MgY3JlZGVudGlhbCBpcyBzaGFyZWQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IENvbmZpZ3VyYXRpb25FcnJvciwgUGx1Z2luIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY29uZmlnVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBsb2csIHN0cmluZ1V0aWxzLCB0b2tlbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbi8qKlxuICogSGVhZGVyIHRoZSBEYXRhYnJpY2tzIEFwcHMgZnJvbnQgZG9vciBmb3J3YXJkcyB0aGUgY2FsbGVyJ3MgT0JPIHRva2VuIG9uLlxuICogSXRzIHByZXNlbmNlIGlzIHdoYXQgbWFrZXMgYGFzVXNlcihyZXEpYCB2aWFibGUsIHNvIGl0IGlzIHRoZSBzaWduYWxcbiAqIHtAbGluayB1c2VTZXJ2aWNlUHJpbmNpcGFsfSByZWFkcyBpbiBgXCJhdXRvXCJgIG1vZGUuXG4gKlxuICogUmUtZXhwb3J0ZWQgZnJvbSBgQGRieC10b29scy9zaGFyZWQtY29yZWAncyBgdG9rZW5gIG1vZHVsZSAod2hpY2ggcmVhZHMgdGhlXG4gKiBzYW1lIGhlYWRlciB0byBkZWNvZGUgT0F1dGggc2NvcGVzKSByYXRoZXIgdGhhbiByZS1zcGVsbGVkLCBzbyB0aGUgbmFtZSBmb3JcbiAqIHRoaXMgd2lyZSBjb250cmFjdCBleGlzdHMgb25jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19UT0tFTl9IRUFERVIgPSB0b2tlbi5BQ0NFU1NfVE9LRU5fSEVBREVSO1xuXG4vKiogSGVhZGVyIHRoZSBEYXRhYnJpY2tzIEFwcHMgZnJvbnQgZG9vciBmb3J3YXJkcyB0aGUgY2FsbGVyJ3MgdXNlciBpZCBvbi4gKi9cbmV4cG9ydCBjb25zdCBVU0VSX0lEX0hFQURFUiA9IHRva2VuLlVTRVJfSURfSEVBREVSO1xuXG4vKiogSGVhZGVyIHRoZSBEYXRhYnJpY2tzIEFwcHMgZnJvbnQgZG9vciBmb3J3YXJkcyB0aGUgY2FsbGVyJ3MgZW1haWwgb24uICovXG5leHBvcnQgY29uc3QgVVNFUl9FTUFJTF9IRUFERVIgPSB0b2tlbi5VU0VSX0VNQUlMX0hFQURFUjtcblxuLyoqIElkZW50aXR5IGEgcmVxdWVzdCdzIERhdGFicmlja3MgY2FsbHMgcnVuIGFzLiBTZWUgdGhlIG1vZHVsZSBkb2NzLiAqL1xuZXhwb3J0IHR5cGUgSWRlbnRpdHlNb2RlID0gXCJ1c2VyXCIgfCBcInNlcnZpY2UtcHJpbmNpcGFsXCIgfCBcImF1dG9cIjtcblxuLyoqIEV2ZXJ5IGFjY2VwdGVkIHtAbGluayBJZGVudGl0eU1vZGV9LCBpbiB0aGUgb3JkZXIgZG9jcyBhbmQgc2NoZW1hcyBsaXN0IHRoZW0uICovXG5leHBvcnQgY29uc3QgSURFTlRJVFlfTU9ERVM6IHJlYWRvbmx5IElkZW50aXR5TW9kZVtdID0gW1widXNlclwiLCBcInNlcnZpY2UtcHJpbmNpcGFsXCIsIFwiYXV0b1wiXTtcblxuLyoqXG4gKiBEZWZhdWx0IG1vZGUuIGBcInVzZXJcImAga2VlcHMgT0JPIHRoZSBvbmx5IGlkZW50aXR5IHVubGVzcyBhbiBhcHAgb3B0cyBpbiwgc29cbiAqIGFkb3B0aW5nIHRoaXMgb3B0aW9uIGNhbiBuZXZlciBzaWxlbnRseSB3aWRlbiBhbiBleGlzdGluZyBhcHAncyBkYXRhIGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSURFTlRJVFlfTU9ERTogSWRlbnRpdHlNb2RlID0gXCJ1c2VyXCI7XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGBleHByZXNzLlJlcXVlc3RgIHRoaXMgbW9kdWxlIHJlYWRzIC0gb25lIGhlYWRlciBsb29rdXAuICovXG5leHBvcnQgaW50ZXJmYWNlIEhlYWRlckJlYXJpbmcge1xuICBoZWFkZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBjb25maWd1cmVkIG1vZGU6IGV4cGxpY2l0IGNvbmZpZyB2YWx1ZSwgdGhlbiB0aGUgZmlyc3Qgbm9uLWVtcHR5XG4gKiB2YXJpYWJsZSBhbW9uZyBgZW52S2V5c2AsIHRoZW4ge0BsaW5rIERFRkFVTFRfSURFTlRJVFlfTU9ERX0uXG4gKlxuICogQW4gdW5yZWNvZ25pemVkIHZhbHVlIHRocm93cyByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2suIEZhbGxpbmcgYmFjayB3b3VsZFxuICogc2lsZW50bHkga2VlcCBzZXJ2aW5nIE9CTyAtIGFuZCB0aGUgcHJvZHVjdGlvbiBgQXV0aGVudGljYXRpb25FcnJvcmAgaXRcbiAqIHByb2R1Y2VzIC0gdG8gZXhhY3RseSB0aGUgY2FsbGVycyB0aGUgb3B0aW9uIHdhcyBzZXQgdG8gYWNjb21tb2RhdGUsIGFuZCBhXG4gKiB0eXBvIChgXCJvYm9cImAsIGBcInNwXCJgKSBpcyB0aGUgbGlrZWxpZXN0IHdheSB0byBnZXQgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUlkZW50aXR5TW9kZShcbiAgY29uZmlndXJlZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBlbnZLZXlzOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSxcbiAgZmllbGQgPSBcImlkZW50aXR5XCIsXG4pOiBJZGVudGl0eU1vZGUge1xuICBjb25zdCByYXcgPSBjb25maWdVdGlscy5zdHJpbmcoY29uZmlndXJlZCwgZW52S2V5cywgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiBERUZBVUxUX0lERU5USVRZX01PREU7XG4gIGNvbnN0IG1vZGUgPSByYXcudG9Mb3dlckNhc2UoKSBhcyBJZGVudGl0eU1vZGU7XG4gIGlmICghSURFTlRJVFlfTU9ERVMuaW5jbHVkZXMobW9kZSkpIHtcbiAgICBjb25zdCBuYW1lcyA9IHR5cGVvZiBlbnZLZXlzID09PSBcInN0cmluZ1wiID8gZW52S2V5cyA6IGVudktleXMuam9pbihcIiAvIFwiKTtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgYCR7ZmllbGR9IG11c3QgYmUgb25lIG9mICR7SURFTlRJVFlfTU9ERVMuam9pbihcIiB8IFwiKX0gKGVudjogJHtuYW1lc30pYCxcbiAgICAgIHsgY29udGV4dDogeyBmaWVsZCwgZW52VmFyOiBuYW1lcywgcmVjZWl2ZWQ6IHJhdyB9IH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbW9kZTtcbn1cblxuLyoqXG4gKiBUaGUgT0JPIHRva2VuIG9uIGByZXFgLCBvciBgdW5kZWZpbmVkYC4gUmVhZCB0aHJvdWdoIHRoZSBzYW1lIHRyaW0gYXMgZXZlcnlcbiAqIG90aGVyIGhlYWRlciwgc28gYSBoZWFkZXIgcHJlc2VudC1idXQtYmxhbmsgKHdoaWNoIHNvbWUgcHJveGllcyBlbWl0IGZvciBhblxuICogdW5zZXQgdXBzdHJlYW0gdmFsdWUpIGNvdW50cyBhcyBhYnNlbnQgcmF0aGVyIHRoYW4gYXMgYSB0b2tlbiB0aGF0IGZhaWxzIGF0XG4gKiB0aGUgZmlyc3QgRGF0YWJyaWNrcyBjYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEFjY2Vzc1Rva2VuKHJlcTogSGVhZGVyQmVhcmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBzdHJpbmdVdGlscy50cmltVG9OdWxsKHJlcT8uaGVhZGVyKEFDQ0VTU19UT0tFTl9IRUFERVIpKSA/PyB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgZm9yd2FyZGVkIHVzZXIgaWQgb24gYHJlcWAsIG9yIGB1bmRlZmluZWRgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RVc2VySWQocmVxOiBIZWFkZXJCZWFyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwocmVxPy5oZWFkZXIoVVNFUl9JRF9IRUFERVIpKSA/PyB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgZm9yd2FyZGVkIHVzZXIgZW1haWwgb24gYHJlcWAsIG9yIGB1bmRlZmluZWRgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RVc2VyRW1haWwocmVxOiBIZWFkZXJCZWFyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwocmVxPy5oZWFkZXIoVVNFUl9FTUFJTF9IRUFERVIpKSA/PyB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV2hldGhlciBgcmVxYCBzaG91bGQgcnVuIGl0cyBEYXRhYnJpY2tzIGNhbGxzIGFzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWxcbiAqIHJhdGhlciB0aGFuIE9CTy5cbiAqXG4gKiAtIGBcInNlcnZpY2UtcHJpbmNpcGFsXCJgIC0+IGFsd2F5cyBgdHJ1ZWAuXG4gKiAtIGBcInVzZXJcImAgLT4gYWx3YXlzIGBmYWxzZWAsIGV2ZW4gd2l0aCBubyB0b2tlbi4gVGhlIG1vZGUgaXMgYW4gZXhwbGljaXRcbiAqICAgYXNzZXJ0aW9uIHRoYXQgZXZlcnkgY2FsbGVyIGlzIE9CTy1jYXBhYmxlLCBzbyBhIG1pc3NpbmcgdG9rZW4gaXMgYSByZWFsXG4gKiAgIGVycm9yIGFuZCBtdXN0IHN1cmZhY2UgYXMgQXBwS2l0J3MgYEF1dGhlbnRpY2F0aW9uRXJyb3JgIHJhdGhlciB0aGFuIGJlaW5nXG4gKiAgIHF1aWV0bHkgZG93bmdyYWRlZCB0byBzaGFyZWQgZGF0YSBhY2Nlc3MuXG4gKiAtIGBcImF1dG9cImAgLT4gYHRydWVgIG9ubHkgd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIG5vIHVzYWJsZSBPQk8gdG9rZW4uXG4gKlxuICogQSByZXF1ZXN0IEFwcEtpdCB3aWxsIG5vdCBhY2NlcHQgZm9yIE9CTyBhbnl3YXkgKG5vIHRva2VuKSBjYW4gbmV2ZXIgYmVcbiAqIHNlcnZlZCBieSBlbnRlcmluZyBgYXNVc2VyYCwgc28gaW4gYFwiYXV0b1wiYCBtb2RlIHRoZSB0b2tlbiBjaGVjayBpcyB0aGUgd2hvbGVcbiAqIGRlY2lzaW9uOiBpdCBpcyB0aGUgc2FtZSBjb25kaXRpb24gQXBwS2l0IGl0c2VsZiBicmFuY2hlcyBvbiwganVzdCByZXNvbHZlZFxuICogYmVmb3JlIGl0IGNhbiB0aHJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlcnZpY2VQcmluY2lwYWwobW9kZTogSWRlbnRpdHlNb2RlLCByZXE/OiBIZWFkZXJCZWFyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChtb2RlID09PSBcInNlcnZpY2UtcHJpbmNpcGFsXCIpIHJldHVybiB0cnVlO1xuICBpZiAobW9kZSA9PT0gXCJ1c2VyXCIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHJlcXVlc3RBY2Nlc3NUb2tlbihyZXEpID09PSB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXRcIik7XG5jb25zdCBza2lwcGVkQXNVc2VyID0gbmV3IFNldDxzdHJpbmc+KCk7XG5jb25zdCBBU19VU0VSX1NLSVBfV0FSTiA9IFwiU2tpcHBpbmcgdXNlciBpbXBlcnNvbmF0aW9uXCI7XG5jb25zdCBBU19VU0VSX1BBVENIRUQgPSBTeW1ib2wuZm9yKFwiZGJ4LXRvb2xzLmFwcGtpdC5hc1VzZXJEZXZMb2dcIik7XG5cbi8qKlxuICogSW4gZGV2ZWxvcG1lbnQsIGtlZXAgQXBwS2l0IGBhc1VzZXJgIGJlaGF2aW9yLiBUaGUgZmlyc3QgbWlzc2luZy10b2tlbiBza2lwXG4gKiBmb3IgYSBmb3J3YXJkZWQgZW1haWwgb3IgdXNlciBpZCB1c2VzIEFwcEtpdCdzIG93biB3YXJuOyBsYXRlciBza2lwcyBmb3JcbiAqIHRoYXQgdXNlciwgYW5kIGV2ZXJ5IHNraXAgd2l0aCBubyBmb3J3YXJkZWQgaWRlbnRpdHksIGFyZSBzaWxlbnQuIFJlcXVlc3RcbiAqIG9iamVjdHMgYXJlIG5vdCBhIHN0YWJsZSBrZXk6IGVhY2ggcGx1Z2luIGNhbGwgdHlwaWNhbGx5IGhhcyBpdHMgb3duIGByZXFgLlxuICpcbiAqIE5vLW9wIG91dHNpZGUgZGV2ZWxvcG1lbnQsIHdoZW4gYFBsdWdpbi5hc1VzZXJgIGlzIG1pc3Npbmcgb3Igbm90IGFcbiAqIGZ1bmN0aW9uLCBvciBpZiB0aGUgcHJvdG90eXBlIGNhbm5vdCBiZSByZXdyaXR0ZW4uIEZhaWx1cmVzIG5ldmVyIHRocm93OlxuICogQXBwS2l0IGtlZXBzIGl0cyBvcmlnaW5hbCBgYXNVc2VyYC4gRXh0cmEgYXJndW1lbnRzIGFyZSBmb3J3YXJkZWQgc28gYVxuICogbGF0ZXIgc2lnbmF0dXJlIGNoYW5nZSBzdGlsbCByZWFjaGVzIHRoZSBvcmlnaW5hbCBtZXRob2QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsQXNVc2VyRGV2ZWxvcG1lbnRQYXRjaCgpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcImRldmVsb3BtZW50XCIpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcm90byA9IFBsdWdpbi5wcm90b3R5cGUgYXMgdW5rbm93biBhcyBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+O1xuICAgIGlmIChwcm90b1tBU19VU0VSX1BBVENIRURdID09PSB0cnVlKSByZXR1cm47XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBwcm90by5hc1VzZXI7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm47XG4gICAgcHJvdG9bQVNfVVNFUl9QQVRDSEVEXSA9IHRydWU7XG4gICAgcHJvdG8uYXNVc2VyID0gZnVuY3Rpb24gcGF0Y2hlZEFzVXNlcih0aGlzOiB1bmtub3duLCByZXE6IHVua25vd24sIC4uLnJlc3Q6IHVua25vd25bXSkge1xuICAgICAgY29uc3QgaGVhZGVycyA9IGFzSGVhZGVyQmVhcmluZyhyZXEpO1xuICAgICAgY29uc3QgYXJncyA9IFtyZXEsIC4uLnJlc3RdO1xuICAgICAgaWYgKCFoZWFkZXJzIHx8IHJlcXVlc3RBY2Nlc3NUb2tlbihoZWFkZXJzKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChvcmlnaW5hbCwgdGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2l0aEFzVXNlclNraXBXYXJuU3VwcHJlc3NlZChoZWFkZXJzLCAoKSA9PlxuICAgICAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChvcmlnaW5hbCwgdGhpcywgYXJncyksXG4gICAgICApO1xuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXNVc2VyIGRldmVsb3BtZW50IHBhdGNoIHNraXBwZWRcIiwgeyBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc0hlYWRlckJlYXJpbmcocmVxOiB1bmtub3duKTogSGVhZGVyQmVhcmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChyZXEgPT09IG51bGwgfHwgdHlwZW9mIHJlcSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiAocmVxIGFzIEhlYWRlckJlYXJpbmcpLmhlYWRlciAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gcmVxIGFzIEhlYWRlckJlYXJpbmc7XG59XG5cbmZ1bmN0aW9uIHdpdGhBc1VzZXJTa2lwV2FyblN1cHByZXNzZWQ8VD4ocmVxOiBIZWFkZXJCZWFyaW5nLCBmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCB1c2VyID0gcmVxdWVzdFVzZXJFbWFpbChyZXEpID8/IHJlcXVlc3RVc2VySWQocmVxKTtcbiAgaWYgKHVzZXIgJiYgIXNraXBwZWRBc1VzZXIuaGFzKHVzZXIpKSB7XG4gICAgc2tpcHBlZEFzVXNlci5hZGQodXNlcik7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cbiAgY29uc3Qgd2FybiA9IGNvbnNvbGUud2FybjtcbiAgY29uc29sZS53YXJuID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgIGlmIChcbiAgICAgICFsb2cuaXNMZXZlbEVuYWJsZWQoXCJkZWJ1Z1wiKSAmJlxuICAgICAgYXJncy5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmluY2x1ZGVzKEFTX1VTRVJfU0tJUF9XQVJOKSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2Fybi5hcHBseShjb25zb2xlLCBhcmdzIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGNvbnNvbGUud2Fybj4pO1xuICB9O1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbnNvbGUud2FybiA9IHdhcm47XG4gIH1cbn1cbiJdfQ==
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaWRlbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1ERztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxHQUFHLEVBQ0gsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxpQkFBaUIsR0FDbEIsTUFBTSx3QkFBd0IsQ0FBQztBQUtoQyxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUE0QixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUU3Rjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBaUIsTUFBTSxDQUFDO0FBTzFEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxVQUE4QixFQUM5QixPQUFtQyxFQUNuQyxLQUFLLEdBQUcsVUFBVTtJQUVsQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsRCxJQUFJLEdBQUcsS0FBSyxTQUFTO1FBQUUsT0FBTyxxQkFBcUIsQ0FBQztJQUNwRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFrQixDQUFDO0lBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FB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QUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUF1QyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNkLENBQUM7WUFBUyxDQUFDO1FBQ1QsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdoaWNoIERhdGFicmlja3MgaWRlbnRpdHkgYSByZXF1ZXN0J3Mgd29ya3NwYWNlIGNhbGxzIHJ1biBhcy5cbiAqXG4gKiBBcHBLaXQgZ2l2ZXMgYSBwbHVnaW4gdHdvIGlkZW50aXRpZXM6IHRoZSBhbWJpZW50IFNFUlZJQ0UgY29udGV4dCAodGhlIGFwcCdzXG4gKiBvd24gc2VydmljZSBwcmluY2lwYWwpIGFuZCBhIHBlci1yZXF1ZXN0IFVTRVIgY29udGV4dCBlbnRlcmVkIHdpdGhcbiAqIGBhc1VzZXIocmVxKWAsIHdoaWNoIGF1dGhlbnRpY2F0ZXMgYXMgdGhlIGNhbGxlciBvbi1iZWhhbGYtb2YgKE9CTykuIFRoZVxuICogY2hvaWNlIGlzIG9uZSBjYWxsLCBzbyB0aGUgd2hvbGUgZGVjaXNpb24gaXMgXCJkbyB3ZSBlbnRlciBgYXNVc2VyYCBmb3IgdGhpc1xuICogcmVxdWVzdFwiLlxuICpcbiAqIGBhc1VzZXIocmVxKWAgbmVlZHMgdGhlIE9CTyB0b2tlbiB0aGUgcGxhdGZvcm0gZnJvbnQgZG9vciBmb3J3YXJkcyBvblxuICoge0BsaW5rIEFDQ0VTU19UT0tFTl9IRUFERVJ9LiBNZWFzdXJlZCBhZ2FpbnN0IHRoZSBpbnN0YWxsZWQgQXBwS2l0LCBpdHNcbiAqIGJlaGF2aW9yIHdoZW4gdGhhdCBoZWFkZXIgaXMgYWJzZW50IGRlcGVuZHMgRU5USVJFTFkgb24gYE5PREVfRU5WYDpcbiAqXG4gKiB8IGBOT0RFX0VOVmAgICAgfCBubyBgeC1mb3J3YXJkZWQtYWNjZXNzLXRva2VuYCAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICogfCBgZGV2ZWxvcG1lbnRgIHwgbG9ncyBhIHdhcm5pbmcsIHNpbGVudGx5IHJ1bnMgYXMgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIHxcbiAqIHwgYW55dGhpbmcgZWxzZSB8IHRocm93cyBgQXV0aGVudGljYXRpb25FcnJvcjogTWlzc2luZyB1c2VyIHRva2VuYCAgICAgIHxcbiAqXG4gKiBUaGF0IHByb2R1Y3Rpb24gdGhyb3cgaXMgY29ycmVjdCBmb3IgYW4gYXBwIGJlaGluZCB0aGUgRGF0YWJyaWNrcyBmcm9udCBkb29yLFxuICogd2hlcmUgYSBtaXNzaW5nIHRva2VuIG1lYW5zIHNvbWV0aGluZyBpcyB3cm9uZy4gSXQgaXMgZmF0YWwgZm9yIGFuIGFwcCB3aG9zZVxuICogdHJhZmZpYyBsZWdpdGltYXRlbHkgYXJyaXZlcyBXSVRIT1VUIG9uZTpcbiAqXG4gKiAgIC0gYSBwdWJsaWMgdHVubmVsIChgQGRieC10b29scy90dW5uZWxgKSwgd2hlcmUgY2FsbGVycyBhdXRoZW50aWNhdGUgYnlcbiAqICAgICBlbWFpbCBPVFAgYW5kIG5vIE9CTyB0b2tlbiBleGlzdHMgdG8gZm9yd2FyZCAtIHRoZSBnYXRlIGNhbiBwcm92ZSBXSE8gdGhlXG4gKiAgICAgY2FsbGVyIGlzLCBidXQgaXQgY2Fubm90IG1pbnQgYSBEYXRhYnJpY2tzIGNyZWRlbnRpYWwgZm9yIHRoZW07XG4gKiAgIC0gYW55IHJldmVyc2UgcHJveHksIHdlYmhvb2ssIG9yIGJvdCBjaGFubmVsIHRoYXQgYXV0aGVudGljYXRlcyBpdHMgb3duIHdheS5cbiAqXG4gKiBTdWNoIGFuIGFwcCBtdXN0IG5vdCBydW4gd2l0aCBgTk9ERV9FTlY9ZGV2ZWxvcG1lbnRgIGp1c3QgdG8gZ2V0IHRoZSBmYWxsYmFjazpcbiAqIHRoYXQgZmxhZyBhbHNvIHJlbGF4ZXMgc2VjdXJlIGNvb2tpZXMsIEFwcEtpdCdzIG93biBkZXYgYWZmb3JkYW5jZXMsIGFuZFxuICogYGFsbG93VW5hdXRoZW50aWNhdGVkYCBlc2NhcGUgaGF0Y2hlcy4gSGVuY2Uge0BsaW5rIElkZW50aXR5TW9kZX06XG4gKlxuICogICAtIGBcInVzZXJcImAgLSBhbHdheXMgT0JPLiBQZXItdXNlciBhdHRyaWJ1dGlvbiBhbmQgcGVyLXVzZXIgR2VuaWUgLyBVbml0eVxuICogICAgIENhdGFsb2cgcm93IGZpbHRlcnMuIENvcnJlY3Qgd2hlbiBldmVyeSBjYWxsZXIgaXMgYSB3b3Jrc3BhY2UgbWVtYmVyLlxuICogICAtIGBcInNlcnZpY2UtcHJpbmNpcGFsXCJgIC0gYWx3YXlzIHRoZSBhcHAncyBvd24gaWRlbnRpdHkuIE5lZWRzIG5vIE9CT1xuICogICAgIHNjb3BlcyBhbmQgd29ya3MgZm9yIGFueSBjYWxsZXIsIGF0IHRoZSBjb3N0IG9mIHBlci11c2VyIGRhdGEgc2NvcGluZy5cbiAqICAgLSBgXCJhdXRvXCJgIC0gT0JPIHdoZW4gdGhlIHJlcXVlc3QgYWN0dWFsbHkgY2FycmllcyBhIHVzYWJsZSBPQk8gdG9rZW4sXG4gKiAgICAgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIG90aGVyd2lzZS4gT25lIGRlcGxveW1lbnQgdGhlbiBzZXJ2ZXMgQk9USCBkb29yc1xuICogICAgIGNvcnJlY3RseTogZnJvbnQtZG9vciByZXF1ZXN0cyBrZWVwIGZ1bGwgcGVyLXVzZXIgc2NvcGluZywgd2hpbGUgdHVubmVsIC9cbiAqICAgICB3ZWJob29rIHJlcXVlc3RzIGRlZ3JhZGUgdG8gdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGluc3RlYWQgb2YgNTAwaW5nLlxuICpcbiAqIGBcImF1dG9cImAgZGVjaWRlcyBwZXIgUkVRVUVTVCwgbm90IHBlciBib290LCBiZWNhdXNlIGEgc2luZ2xlIGNvbnRhaW5lciBzZXJ2ZXNcbiAqIGJvdGggZG9vcnMgYXQgb25jZSAtIHRoZSB0dW5uZWwgZ2F0ZSBhbmQgdGhlIHBsYXRmb3JtIGZyb250IGRvb3Igc2hhcmUgYSBwb3J0XG4gKiAoc2VlIGBAZGJ4LXRvb2xzL3R1bm5lbGApLiBBIGJvb3QtdGltZSBmbGFnIHdvdWxkIGhhdmUgdG8gYmUgd3JvbmcgZm9yIG9uZVxuICogb2YgdGhlbS5cbiAqXG4gKiBXaGF0IHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBkb2VzIE5PVCBjaGFuZ2UgaXMgV0hPIHRoZSByZXF1ZXN0IGJlbG9uZ3MgdG8uIFRoZVxuICogY2FsbGVyJ3MgaWRlbnRpdHkgc3RpbGwgYXJyaXZlcyBvbiB7QGxpbmsgVVNFUl9JRF9IRUFERVJ9IC9cbiAqIHtAbGluayBVU0VSX0VNQUlMX0hFQURFUn0sIHNvIG1lbW9yeSB0aHJlYWRzLCBjYWNoZSBuYW1lc3BhY2VzLCBhbmQgdHJhY2VcbiAqIGF0dHJpYnV0aW9uIHN0YXkgcGVyLXVzZXIuIE9ubHkgdGhlIERhdGFicmlja3MgY3JlZGVudGlhbCBpcyBzaGFyZWQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IENvbmZpZ3VyYXRpb25FcnJvciwgUGx1Z2luIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgc3RyaW5nLCBFTlZfT05MWSB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7XG4gIGxvZyxcbiAgdG9FcnJvcixcbiAgaXNMZXZlbEVuYWJsZWQsXG4gIHRyaW1Ub051bGwsXG4gIEFDQ0VTU19UT0tFTl9IRUFERVIsXG4gIFVTRVJfSURfSEVBREVSLFxuICBVU0VSX0VNQUlMX0hFQURFUixcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuLyoqIElkZW50aXR5IGEgcmVxdWVzdCdzIERhdGFicmlja3MgY2FsbHMgcnVuIGFzLiBTZWUgdGhlIG1vZHVsZSBkb2NzLiAqL1xuZXhwb3J0IHR5cGUgSWRlbnRpdHlNb2RlID0gXCJ1c2VyXCIgfCBcInNlcnZpY2UtcHJpbmNpcGFsXCIgfCBcImF1dG9cIjtcblxuLyoqIEV2ZXJ5IGFjY2VwdGVkIHtAbGluayBJZGVudGl0eU1vZGV9LCBpbiB0aGUgb3JkZXIgZG9jcyBhbmQgc2NoZW1hcyBsaXN0IHRoZW0uICovXG5leHBvcnQgY29uc3QgSURFTlRJVFlfTU9ERVM6IHJlYWRvbmx5IElkZW50aXR5TW9kZVtdID0gW1widXNlclwiLCBcInNlcnZpY2UtcHJpbmNpcGFsXCIsIFwiYXV0b1wiXTtcblxuLyoqXG4gKiBEZWZhdWx0IG1vZGUuIGBcInVzZXJcImAga2VlcHMgT0JPIHRoZSBvbmx5IGlkZW50aXR5IHVubGVzcyBhbiBhcHAgb3B0cyBpbiwgc29cbiAqIGFkb3B0aW5nIHRoaXMgb3B0aW9uIGNhbiBuZXZlciBzaWxlbnRseSB3aWRlbiBhbiBleGlzdGluZyBhcHAncyBkYXRhIGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSURFTlRJVFlfTU9ERTogSWRlbnRpdHlNb2RlID0gXCJ1c2VyXCI7XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGBleHByZXNzLlJlcXVlc3RgIHRoaXMgbW9kdWxlIHJlYWRzIC0gb25lIGhlYWRlciBsb29rdXAuICovXG5leHBvcnQgaW50ZXJmYWNlIEhlYWRlckJlYXJpbmcge1xuICBoZWFkZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBjb25maWd1cmVkIG1vZGU6IGV4cGxpY2l0IGNvbmZpZyB2YWx1ZSwgdGhlbiB0aGUgZmlyc3Qgbm9uLWVtcHR5XG4gKiB2YXJpYWJsZSBhbW9uZyBgZW52S2V5c2AsIHRoZW4ge0BsaW5rIERFRkFVTFRfSURFTlRJVFlfTU9ERX0uXG4gKlxuICogQW4gdW5yZWNvZ25pemVkIHZhbHVlIHRocm93cyByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2suIEZhbGxpbmcgYmFjayB3b3VsZFxuICogc2lsZW50bHkga2VlcCBzZXJ2aW5nIE9CTyAtIGFuZCB0aGUgcHJvZHVjdGlvbiBgQXV0aGVudGljYXRpb25FcnJvcmAgaXRcbiAqIHByb2R1Y2VzIC0gdG8gZXhhY3RseSB0aGUgY2FsbGVycyB0aGUgb3B0aW9uIHdhcyBzZXQgdG8gYWNjb21tb2RhdGUsIGFuZCBhXG4gKiB0eXBvIChgXCJvYm9cImAsIGBcInNwXCJgKSBpcyB0aGUgbGlrZWxpZXN0IHdheSB0byBnZXQgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUlkZW50aXR5TW9kZShcbiAgY29uZmlndXJlZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBlbnZLZXlzOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSxcbiAgZmllbGQgPSBcImlkZW50aXR5XCIsXG4pOiBJZGVudGl0eU1vZGUge1xuICBjb25zdCByYXcgPSBzdHJpbmcoY29uZmlndXJlZCwgZW52S2V5cywgRU5WX09OTFkpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiBERUZBVUxUX0lERU5USVRZX01PREU7XG4gIGNvbnN0IG1vZGUgPSByYXcudG9Mb3dlckNhc2UoKSBhcyBJZGVudGl0eU1vZGU7XG4gIGlmICghSURFTlRJVFlfTU9ERVMuaW5jbHVkZXMobW9kZSkpIHtcbiAgICBjb25zdCBuYW1lcyA9IHR5cGVvZiBlbnZLZXlzID09PSBcInN0cmluZ1wiID8gZW52S2V5cyA6IGVudktleXMuam9pbihcIiAvIFwiKTtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgYCR7ZmllbGR9IG11c3QgYmUgb25lIG9mICR7SURFTlRJVFlfTU9ERVMuam9pbihcIiB8IFwiKX0gKGVudjogJHtuYW1lc30pYCxcbiAgICAgIHsgY29udGV4dDogeyBmaWVsZCwgZW52VmFyOiBuYW1lcywgcmVjZWl2ZWQ6IHJhdyB9IH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbW9kZTtcbn1cblxuLyoqXG4gKiBUaGUgT0JPIHRva2VuIG9uIGByZXFgLCBvciBgdW5kZWZpbmVkYC4gUmVhZCB0aHJvdWdoIHRoZSBzYW1lIHRyaW0gYXMgZXZlcnlcbiAqIG90aGVyIGhlYWRlciwgc28gYSBoZWFkZXIgcHJlc2VudC1idXQtYmxhbmsgKHdoaWNoIHNvbWUgcHJveGllcyBlbWl0IGZvciBhblxuICogdW5zZXQgdXBzdHJlYW0gdmFsdWUpIGNvdW50cyBhcyBhYnNlbnQgcmF0aGVyIHRoYW4gYXMgYSB0b2tlbiB0aGF0IGZhaWxzIGF0XG4gKiB0aGUgZmlyc3QgRGF0YWJyaWNrcyBjYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEFjY2Vzc1Rva2VuKHJlcTogSGVhZGVyQmVhcmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0cmltVG9OdWxsKHJlcT8uaGVhZGVyKEFDQ0VTU19UT0tFTl9IRUFERVIpKSA/PyB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgZm9yd2FyZGVkIHVzZXIgaWQgb24gYHJlcWAsIG9yIGB1bmRlZmluZWRgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RVc2VySWQocmVxOiBIZWFkZXJCZWFyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHRyaW1Ub051bGwocmVxPy5oZWFkZXIoVVNFUl9JRF9IRUFERVIpKSA/PyB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgZm9yd2FyZGVkIHVzZXIgZW1haWwgb24gYHJlcWAsIG9yIGB1bmRlZmluZWRgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RVc2VyRW1haWwocmVxOiBIZWFkZXJCZWFyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHRyaW1Ub051bGwocmVxPy5oZWFkZXIoVVNFUl9FTUFJTF9IRUFERVIpKSA/PyB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV2hldGhlciBgcmVxYCBzaG91bGQgcnVuIGl0cyBEYXRhYnJpY2tzIGNhbGxzIGFzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWxcbiAqIHJhdGhlciB0aGFuIE9CTy5cbiAqXG4gKiAtIGBcInNlcnZpY2UtcHJpbmNpcGFsXCJgIC0+IGFsd2F5cyBgdHJ1ZWAuXG4gKiAtIGBcInVzZXJcImAgLT4gYWx3YXlzIGBmYWxzZWAsIGV2ZW4gd2l0aCBubyB0b2tlbi4gVGhlIG1vZGUgaXMgYW4gZXhwbGljaXRcbiAqICAgYXNzZXJ0aW9uIHRoYXQgZXZlcnkgY2FsbGVyIGlzIE9CTy1jYXBhYmxlLCBzbyBhIG1pc3NpbmcgdG9rZW4gaXMgYSByZWFsXG4gKiAgIGVycm9yIGFuZCBtdXN0IHN1cmZhY2UgYXMgQXBwS2l0J3MgYEF1dGhlbnRpY2F0aW9uRXJyb3JgIHJhdGhlciB0aGFuIGJlaW5nXG4gKiAgIHF1aWV0bHkgZG93bmdyYWRlZCB0byBzaGFyZWQgZGF0YSBhY2Nlc3MuXG4gKiAtIGBcImF1dG9cImAgLT4gYHRydWVgIG9ubHkgd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIG5vIHVzYWJsZSBPQk8gdG9rZW4uXG4gKlxuICogQSByZXF1ZXN0IEFwcEtpdCB3aWxsIG5vdCBhY2NlcHQgZm9yIE9CTyBhbnl3YXkgKG5vIHRva2VuKSBjYW4gbmV2ZXIgYmVcbiAqIHNlcnZlZCBieSBlbnRlcmluZyBgYXNVc2VyYCwgc28gaW4gYFwiYXV0b1wiYCBtb2RlIHRoZSB0b2tlbiBjaGVjayBpcyB0aGUgd2hvbGVcbiAqIGRlY2lzaW9uOiBpdCBpcyB0aGUgc2FtZSBjb25kaXRpb24gQXBwS2l0IGl0c2VsZiBicmFuY2hlcyBvbiwganVzdCByZXNvbHZlZFxuICogYmVmb3JlIGl0IGNhbiB0aHJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlcnZpY2VQcmluY2lwYWwobW9kZTogSWRlbnRpdHlNb2RlLCByZXE/OiBIZWFkZXJCZWFyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChtb2RlID09PSBcInNlcnZpY2UtcHJpbmNpcGFsXCIpIHJldHVybiB0cnVlO1xuICBpZiAobW9kZSA9PT0gXCJ1c2VyXCIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHJlcXVlc3RBY2Nlc3NUb2tlbihyZXEpID09PSB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXRcIik7XG5jb25zdCBza2lwcGVkQXNVc2VyID0gbmV3IFNldDxzdHJpbmc+KCk7XG5jb25zdCBBU19VU0VSX1NLSVBfV0FSTiA9IFwiU2tpcHBpbmcgdXNlciBpbXBlcnNvbmF0aW9uXCI7XG5jb25zdCBBU19VU0VSX1BBVENIRUQgPSBTeW1ib2wuZm9yKFwiZGJ4LXRvb2xzLmFwcGtpdC5hc1VzZXJEZXZMb2dcIik7XG5cbi8qKlxuICogSW4gZGV2ZWxvcG1lbnQsIGtlZXAgQXBwS2l0IGBhc1VzZXJgIGJlaGF2aW9yLiBUaGUgZmlyc3QgbWlzc2luZy10b2tlbiBza2lwXG4gKiBmb3IgYSBmb3J3YXJkZWQgZW1haWwgb3IgdXNlciBpZCB1c2VzIEFwcEtpdCdzIG93biB3YXJuOyBsYXRlciBza2lwcyBmb3JcbiAqIHRoYXQgdXNlciwgYW5kIGV2ZXJ5IHNraXAgd2l0aCBubyBmb3J3YXJkZWQgaWRlbnRpdHksIGFyZSBzaWxlbnQuIFJlcXVlc3RcbiAqIG9iamVjdHMgYXJlIG5vdCBhIHN0YWJsZSBrZXk6IGVhY2ggcGx1Z2luIGNhbGwgdHlwaWNhbGx5IGhhcyBpdHMgb3duIGByZXFgLlxuICpcbiAqIE5vLW9wIG91dHNpZGUgZGV2ZWxvcG1lbnQsIHdoZW4gYFBsdWdpbi5hc1VzZXJgIGlzIG1pc3Npbmcgb3Igbm90IGFcbiAqIGZ1bmN0aW9uLCBvciBpZiB0aGUgcHJvdG90eXBlIGNhbm5vdCBiZSByZXdyaXR0ZW4uIEZhaWx1cmVzIG5ldmVyIHRocm93OlxuICogQXBwS2l0IGtlZXBzIGl0cyBvcmlnaW5hbCBgYXNVc2VyYC4gRXh0cmEgYXJndW1lbnRzIGFyZSBmb3J3YXJkZWQgc28gYVxuICogbGF0ZXIgc2lnbmF0dXJlIGNoYW5nZSBzdGlsbCByZWFjaGVzIHRoZSBvcmlnaW5hbCBtZXRob2QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsQXNVc2VyRGV2ZWxvcG1lbnRQYXRjaCgpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcImRldmVsb3BtZW50XCIpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcm90byA9IFBsdWdpbi5wcm90b3R5cGUgYXMgdW5rbm93biBhcyBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+O1xuICAgIGlmIChwcm90b1tBU19VU0VSX1BBVENIRURdID09PSB0cnVlKSByZXR1cm47XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBwcm90by5hc1VzZXI7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm47XG4gICAgcHJvdG9bQVNfVVNFUl9QQVRDSEVEXSA9IHRydWU7XG4gICAgcHJvdG8uYXNVc2VyID0gZnVuY3Rpb24gcGF0Y2hlZEFzVXNlcih0aGlzOiB1bmtub3duLCByZXE6IHVua25vd24sIC4uLnJlc3Q6IHVua25vd25bXSkge1xuICAgICAgY29uc3QgaGVhZGVycyA9IGFzSGVhZGVyQmVhcmluZyhyZXEpO1xuICAgICAgY29uc3QgYXJncyA9IFtyZXEsIC4uLnJlc3RdO1xuICAgICAgaWYgKCFoZWFkZXJzIHx8IHJlcXVlc3RBY2Nlc3NUb2tlbihoZWFkZXJzKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChvcmlnaW5hbCwgdGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2l0aEFzVXNlclNraXBXYXJuU3VwcHJlc3NlZChoZWFkZXJzLCAoKSA9PlxuICAgICAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChvcmlnaW5hbCwgdGhpcywgYXJncyksXG4gICAgICApO1xuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXNVc2VyIGRldmVsb3BtZW50IHBhdGNoIHNraXBwZWRcIiwgeyBlcnJvcjogdG9FcnJvcihlcnJvcikgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNIZWFkZXJCZWFyaW5nKHJlcTogdW5rbm93bik6IEhlYWRlckJlYXJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocmVxID09PSBudWxsIHx8IHR5cGVvZiByZXEgIT09IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgKHJlcSBhcyBIZWFkZXJCZWFyaW5nKS5oZWFkZXIgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHJlcSBhcyBIZWFkZXJCZWFyaW5nO1xufVxuXG5mdW5jdGlvbiB3aXRoQXNVc2VyU2tpcFdhcm5TdXBwcmVzc2VkPFQ+KHJlcTogSGVhZGVyQmVhcmluZywgZm46ICgpID0+IFQpOiBUIHtcbiAgY29uc3QgdXNlciA9IHJlcXVlc3RVc2VyRW1haWwocmVxKSA/PyByZXF1ZXN0VXNlcklkKHJlcSk7XG4gIGlmICh1c2VyICYmICFza2lwcGVkQXNVc2VyLmhhcyh1c2VyKSkge1xuICAgIHNraXBwZWRBc1VzZXIuYWRkKHVzZXIpO1xuICAgIHJldHVybiBmbigpO1xuICB9XG4gIGNvbnN0IHdhcm4gPSBjb25zb2xlLndhcm47XG4gIGNvbnNvbGUud2FybiA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBpZiAoXG4gICAgICAhaXNMZXZlbEVuYWJsZWQoXCJkZWJ1Z1wiKSAmJlxuICAgICAgYXJncy5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmluY2x1ZGVzKEFTX1VTRVJfU0tJUF9XQVJOKSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2Fybi5hcHBseShjb25zb2xlLCBhcmdzIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGNvbnNvbGUud2Fybj4pO1xuICB9O1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbnNvbGUud2FybiA9IHdhcm47XG4gIH1cbn1cbiJdfQ==
|