@dbx-tools/appkit 0.9.188 → 0.9.189

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/README.md CHANGED
@@ -99,7 +99,10 @@ Databricks Asset Bundle validation, and deployed Apps.
99
99
 
100
100
  During local startup, a missing `DATABRICKS_CONFIG_PROFILE` is populated from
101
101
  `@dbx-tools/auth`'s default-profile resolution before bundle validation runs.
102
- Deployed Apps retain native AppKit authentication and do not receive a profile.
102
+ Workspace API calls and Lakebase pool credentials use the same auth lifecycle,
103
+ so an expired CLI refresh token can invoke `databricks auth login` instead of
104
+ falling through to the SDK's unrelated default-auth chain. Deployed Apps retain
105
+ native AppKit authentication and do not receive a profile.
103
106
 
104
107
  Boot-time resolution runs as the service principal before any plugin exists, so
105
108
  it sits outside AppKit's interceptor chain. It carries its own timeout, and
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit";
6
- export const PACKAGE_VERSION = "0.9.188";
6
+ export const PACKAGE_VERSION = "0.9.189";
7
7
  export * as appkit from "./src/appkit.ts";
8
8
  export * as brandContext from "./src/brand-context.ts";
9
9
  export * as cacheStorage from "./src/cache-storage.ts";
@@ -26,7 +26,7 @@ export type { AutoConfigureMode, DebugCaptureMode, CreateAppConfig, ExecutionCon
26
26
  export { loadBrandContext, getBrandContext } from "./src/brand-context.ts";
27
27
  export { AppKitCacheStorage, loadPersistentStorage, softenInitialize, probeStorage, createAppKitCacheStorage } from "./src/cache-storage.ts";
28
28
  export type { AppKitCacheStorageOptions, PersistentStorageBase } from "./src/cache-storage.ts";
29
- export { toContext } from "./src/databricks.ts";
29
+ export { createWorkspaceClient, refreshWorkspaceClientAuthentication, toContext } from "./src/databricks.ts";
30
30
  export type { ContextLike } from "./src/databricks.ts";
31
31
  export { FilesCacheManager, FilesCachePlugin, filesCache } from "./src/files-cache.ts";
32
32
  export type { FilesCachePluginConfig, FilesCacheScope, FilesCacheSourceIdentity, FilesCacheExports } from "./src/files-cache.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit";
2
- export declare const PACKAGE_VERSION = "0.9.188";
2
+ export declare const PACKAGE_VERSION = "0.9.189";
3
3
  export * as appkit from "./src/appkit.ts";
4
4
  export * as brandContext from "./src/brand-context.ts";
5
5
  export * as cacheStorage from "./src/cache-storage.ts";
@@ -22,7 +22,7 @@ export type { AutoConfigureMode, DebugCaptureMode, CreateAppConfig, ExecutionCon
22
22
  export { loadBrandContext, getBrandContext } from "./src/brand-context.ts";
23
23
  export { AppKitCacheStorage, loadPersistentStorage, softenInitialize, probeStorage, createAppKitCacheStorage } from "./src/cache-storage.ts";
24
24
  export type { AppKitCacheStorageOptions, PersistentStorageBase } from "./src/cache-storage.ts";
25
- export { toContext } from "./src/databricks.ts";
25
+ export { createWorkspaceClient, refreshWorkspaceClientAuthentication, toContext } from "./src/databricks.ts";
26
26
  export type { ContextLike } from "./src/databricks.ts";
27
27
  export { FilesCacheManager, FilesCachePlugin, filesCache } from "./src/files-cache.ts";
28
28
  export type { FilesCachePluginConfig, FilesCacheScope, FilesCacheSourceIdentity, FilesCacheExports } from "./src/files-cache.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit";
5
- export const PACKAGE_VERSION = "0.9.188";
5
+ export const PACKAGE_VERSION = "0.9.189";
6
6
  export * as appkit from "./src/appkit.js";
7
7
  export * as brandContext from "./src/brand-context.js";
8
8
  export * as cacheStorage from "./src/cache-storage.js";
@@ -23,7 +23,7 @@ export * as toolkitEntries from "./src/toolkit-entries.js";
23
23
  export { debugCaptureEnabled, autoConfigure, createApp, tryGetExecutionContext, ensureInitialized } from "./src/appkit.js";
24
24
  export { loadBrandContext, getBrandContext } from "./src/brand-context.js";
25
25
  export { AppKitCacheStorage, loadPersistentStorage, softenInitialize, probeStorage, createAppKitCacheStorage } from "./src/cache-storage.js";
26
- export { toContext } from "./src/databricks.js";
26
+ export { createWorkspaceClient, refreshWorkspaceClientAuthentication, toContext } from "./src/databricks.js";
27
27
  export { FilesCacheManager, FilesCachePlugin, filesCache } from "./src/files-cache.js";
28
28
  export { IDENTITY_MODES, DEFAULT_IDENTITY_MODE, resolveIdentityMode, requestAccessToken, requestUserId, requestUserEmail, useServicePrincipal, installAsUserDevelopmentPatch } from "./src/identity.js";
29
29
  export { createInterceptorContext, LifecycleBridgePlugin, lifecycleBridge } from "./src/interceptor.js";
@@ -38,4 +38,4 @@ export { USER_TRACE_ATTRIBUTE, excludeHttpTelemetryRequest, excludeUnparentedOut
38
38
  export { defineOperations, toolRegistryFromOperations } from "./src/tool-operations.js";
39
39
  export { ToolRegistryPlugin } from "./src/tool-provider.js";
40
40
  export { name, entries } from "./src/toolkit-entries.js";
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLGVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEtBQUssY0FBYyxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssY0FBYyxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU3SSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeE0sT0FBTyxFQUFFLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqTixPQUFPLEVBQUUseUJBQXlCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSxzQ0FBc0MsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXpRLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE4OFwiO1xuZXhwb3J0ICogYXMgYXBwa2l0IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCAqIGFzIGJyYW5kQ29udGV4dCBmcm9tIFwiLi9zcmMvYnJhbmQtY29udGV4dC50c1wiO1xuZXhwb3J0ICogYXMgY2FjaGVTdG9yYWdlIGZyb20gXCIuL3NyYy9jYWNoZS1zdG9yYWdlLnRzXCI7XG5leHBvcnQgKiBhcyBkYXRhYnJpY2tzIGZyb20gXCIuL3NyYy9kYXRhYnJpY2tzLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIGludGVyY2VwdG9yIGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0ICogYXMgbGFrZWJhc2VSZXNvbHZlciBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIG1pZ3JhdGlvbiBmcm9tIFwiLi9zcmMvbWlncmF0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBvcGVuYXBpVG9vbCBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW5FeGVjdXRpb24gZnJvbSBcIi4vc3JjL3BsdWdpbi1leGVjdXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHBsdWdpblJlZ2lzdHJ5IGZyb20gXCIuL3NyYy9wbHVnaW4tcmVnaXN0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHByb3Zpc2lvbiBmcm9tIFwiLi9zcmMvcHJvdmlzaW9uLnRzXCI7XG5leHBvcnQgKiBhcyByZXF1ZXN0VGFncyBmcm9tIFwiLi9zcmMvcmVxdWVzdC10YWdzLnRzXCI7XG5leHBvcnQgKiBhcyB0ZWxlbWV0cnkgZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0ICogYXMgdG9vbE9wZXJhdGlvbnMgZnJvbSBcIi4vc3JjL3Rvb2wtb3BlcmF0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgdG9vbFByb3ZpZGVyIGZyb20gXCIuL3NyYy90b29sLXByb3ZpZGVyLnRzXCI7XG5leHBvcnQgKiBhcyB0b29sa2l0RW50cmllcyBmcm9tIFwiLi9zcmMvdG9vbGtpdC1lbnRyaWVzLnRzXCI7XG5leHBvcnQgeyBkZWJ1Z0NhcHR1cmVFbmFibGVkLCBhdXRvQ29uZmlndXJlLCBjcmVhdGVBcHAsIHRyeUdldEV4ZWN1dGlvbkNvbnRleHQsIGVuc3VyZUluaXRpYWxpemVkIH0gZnJvbSBcIi4vc3JjL2FwcGtpdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRvQ29uZmlndXJlTW9kZSwgRGVidWdDYXB0dXJlTW9kZSwgQ3JlYXRlQXBwQ29uZmlnLCBFeGVjdXRpb25Db250ZXh0TGlrZSwgV29ya3NwYWNlQ2xpZW50TGlrZSB9IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCB7IGxvYWRCcmFuZENvbnRleHQsIGdldEJyYW5kQ29udGV4dCB9IGZyb20gXCIuL3NyYy9icmFuZC1jb250ZXh0LnRzXCI7XG5leHBvcnQgeyBBcHBLaXRDYWNoZVN0b3JhZ2UsIGxvYWRQZXJzaXN0ZW50U3RvcmFnZSwgc29mdGVuSW5pdGlhbGl6ZSwgcHJvYmVTdG9yYWdlLCBjcmVhdGVBcHBLaXRDYWNoZVN0b3JhZ2UgfSBmcm9tIFwiLi9zcmMvY2FjaGUtc3RvcmFnZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHBLaXRDYWNoZVN0b3JhZ2VPcHRpb25zLCBQZXJzaXN0ZW50U3RvcmFnZUJhc2UgfSBmcm9tIFwiLi9zcmMvY2FjaGUtc3RvcmFnZS50c1wiO1xuZXhwb3J0IHsgdG9Db250ZXh0IH0gZnJvbSBcIi4vc3JjL2RhdGFicmlja3MudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29udGV4dExpa2UgfSBmcm9tIFwiLi9zcmMvZGF0YWJyaWNrcy50c1wiO1xuZXhwb3J0IHsgRmlsZXNDYWNoZU1hbmFnZXIsIEZpbGVzQ2FjaGVQbHVnaW4sIGZpbGVzQ2FjaGUgfSBmcm9tIFwiLi9zcmMvZmlsZXMtY2FjaGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgRmlsZXNDYWNoZVBsdWdpbkNvbmZpZywgRmlsZXNDYWNoZVNjb3BlLCBGaWxlc0NhY2hlU291cmNlSWRlbnRpdHksIEZpbGVzQ2FjaGVFeHBvcnRzIH0gZnJvbSBcIi4vc3JjL2ZpbGVzLWNhY2hlLnRzXCI7XG5leHBvcnQgeyBJREVOVElUWV9NT0RFUywgREVGQVVMVF9JREVOVElUWV9NT0RFLCByZXNvbHZlSWRlbnRpdHlNb2RlLCByZXF1ZXN0QWNjZXNzVG9rZW4sIHJlcXVlc3RVc2VySWQsIHJlcXVlc3RVc2VyRW1haWwsIHVzZVNlcnZpY2VQcmluY2lwYWwsIGluc3RhbGxBc1VzZXJEZXZlbG9wbWVudFBhdGNoIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IElkZW50aXR5TW9kZSwgSGVhZGVyQmVhcmluZyB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHsgY3JlYXRlSW50ZXJjZXB0b3JDb250ZXh0LCBMaWZlY3ljbGVCcmlkZ2VQbHVnaW4sIGxpZmVjeWNsZUJyaWRnZSB9IGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0IHR5cGUgeyBMaWZlY3ljbGVFdmVudCwgTGlmZWN5Y2xlSGFuZGxlciwgUmVzb2x2ZWRBcHBFbnYsIEludGVyY2VwdG9yQ29udGV4dCwgSW50ZXJjZXB0b3IsIEludGVyY2VwdG9yUnVudGltZSB9IGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0IHsgY2FwdHVyZVNlcnZpY2VQcmluY2lwYWxQb29sLCBwYXJzZVBvcnQsIHBhcnNlU3NsTW9kZSwgbmV4dFBvbGxEZWxheSwgcG9sbERlbGF5LCByZWFkTGFrZWJhc2VJbnB1dHMsIHJlc29sdmVMYWtlYmFzZUNvbm5lY3Rpb24sIGFwcGx5TGFrZWJhc2VUb0VudiwgYXBwbHlMYWtlYmFzZUVudiB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1yZXNvbHZlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVJlc29sdmVySW5wdXRzLCBMYWtlYmFzZUNvbm5lY3Rpb24gfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCB7IGlzT3duZXJzaGlwTWlncmF0aW9uRXJyb3IsIGhhbmRsZU93bmVyc2hpcE1pZ3JhdGlvbkVycm9yIH0gZnJvbSBcIi4vc3JjL21pZ3JhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBPd25lcnNoaXBNaWdyYXRpb25FcnJvck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbWlncmF0aW9uLnRzXCI7XG5leHBvcnQgeyBvcGVuQXBpVG9vbHMgfSBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgdHlwZSB7IE9wZW5BcGlIdHRwTWV0aG9kLCBPcGVuQXBpVG9vbCwgT3BlbkFwaVRvb2xzT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vcGVuYXBpLXRvb2wudHNcIjtcbmV4cG9ydCB7IHJ1blBsdWdpbkV4ZWN1dGlvbiB9IGZyb20gXCIuL3NyYy9wbHVnaW4tZXhlY3V0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJ1blBsdWdpbkV4ZWN1dGlvbk9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLWV4ZWN1dGlvbi50c1wiO1xuZXhwb3J0IHsgZGF0YSwgaW5zdGFuY2UsIHJlcXVpcmUgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLXJlZ2lzdHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IFBsdWdpbkNvbnRleHRMaWtlIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi1yZWdpc3RyeS50c1wiO1xuZXhwb3J0IHsgY2FjaGVHcmFudFN0YXRlbWVudHMsIHByb3Zpc2lvbkNhY2hlU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3Byb3Zpc2lvbi50c1wiO1xuZXhwb3J0IHsgaW5qZWN0UmVxdWVzdFRhZywgaW5qZWN0UmVxdWVzdFRhZ3MsIGdldFJlcXVlc3RUYWdzIH0gZnJvbSBcIi4vc3JjL3JlcXVlc3QtdGFncy50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXF1ZXN0VGFnVmFsdWUgfSBmcm9tIFwiLi9zcmMvcmVxdWVzdC10YWdzLnRzXCI7XG5leHBvcnQgeyBVU0VSX1RSQUNFX0FUVFJJQlVURSwgZXhjbHVkZUh0dHBUZWxlbWV0cnlSZXF1ZXN0LCBleGNsdWRlVW5wYXJlbnRlZE91dGdvaW5nSHR0cFRlbGVtZXRyeSwgc3RhbXBIdHRwVHJhY2VVc2VyLCBjb25maWd1cmVOYXRpdmVIdHRwVGVsZW1ldHJ5LCBiaW5kTmF0aXZlVGVsZW1ldHJ5UHJvdmlkZXIsIHJlZ2lzdGVyTmF0aXZlU3BhblByb2Nlc3NvciwgZGVmZXJyZWROYXRpdmVUcmFjZXJQcm92aWRlciB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTmF0aXZlSHR0cFRlbGVtZXRyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvdGVsZW1ldHJ5LnRzXCI7XG5leHBvcnQgeyBkZWZpbmVPcGVyYXRpb25zLCB0b29sUmVnaXN0cnlGcm9tT3BlcmF0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLW9wZXJhdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXBwS2l0VG9vbE1ldGEsIEFwcEtpdE9wZXJhdGlvblNjaGVtYU1ldGEsIEFwcEtpdE9wZXJhdGlvbiB9IGZyb20gXCIuL3NyYy90b29sLW9wZXJhdGlvbnMudHNcIjtcbmV4cG9ydCB7IFRvb2xSZWdpc3RyeVBsdWdpbiB9IGZyb20gXCIuL3NyYy90b29sLXByb3ZpZGVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFnZW50VG9vbFByb2dyZXNzT3B0aW9ucywgQWdlbnRUb29sRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NyYy90b29sLXByb3ZpZGVyLnRzXCI7XG5leHBvcnQgeyBuYW1lLCBlbnRyaWVzIH0gZnJvbSBcIi4vc3JjL3Rvb2xraXQtZW50cmllcy50c1wiO1xuIl19
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLGVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEtBQUssY0FBYyxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssY0FBYyxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU3SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0NBQW9DLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeE0sT0FBTyxFQUFFLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqTixPQUFPLEVBQUUseUJBQXlCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSxzQ0FBc0MsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXpRLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE4OVwiO1xuZXhwb3J0ICogYXMgYXBwa2l0IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCAqIGFzIGJyYW5kQ29udGV4dCBmcm9tIFwiLi9zcmMvYnJhbmQtY29udGV4dC50c1wiO1xuZXhwb3J0ICogYXMgY2FjaGVTdG9yYWdlIGZyb20gXCIuL3NyYy9jYWNoZS1zdG9yYWdlLnRzXCI7XG5leHBvcnQgKiBhcyBkYXRhYnJpY2tzIGZyb20gXCIuL3NyYy9kYXRhYnJpY2tzLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIGludGVyY2VwdG9yIGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0ICogYXMgbGFrZWJhc2VSZXNvbHZlciBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIG1pZ3JhdGlvbiBmcm9tIFwiLi9zcmMvbWlncmF0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBvcGVuYXBpVG9vbCBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW5FeGVjdXRpb24gZnJvbSBcIi4vc3JjL3BsdWdpbi1leGVjdXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHBsdWdpblJlZ2lzdHJ5IGZyb20gXCIuL3NyYy9wbHVnaW4tcmVnaXN0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHByb3Zpc2lvbiBmcm9tIFwiLi9zcmMvcHJvdmlzaW9uLnRzXCI7XG5leHBvcnQgKiBhcyByZXF1ZXN0VGFncyBmcm9tIFwiLi9zcmMvcmVxdWVzdC10YWdzLnRzXCI7XG5leHBvcnQgKiBhcyB0ZWxlbWV0cnkgZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0ICogYXMgdG9vbE9wZXJhdGlvbnMgZnJvbSBcIi4vc3JjL3Rvb2wtb3BlcmF0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgdG9vbFByb3ZpZGVyIGZyb20gXCIuL3NyYy90b29sLXByb3ZpZGVyLnRzXCI7XG5leHBvcnQgKiBhcyB0b29sa2l0RW50cmllcyBmcm9tIFwiLi9zcmMvdG9vbGtpdC1lbnRyaWVzLnRzXCI7XG5leHBvcnQgeyBkZWJ1Z0NhcHR1cmVFbmFibGVkLCBhdXRvQ29uZmlndXJlLCBjcmVhdGVBcHAsIHRyeUdldEV4ZWN1dGlvbkNvbnRleHQsIGVuc3VyZUluaXRpYWxpemVkIH0gZnJvbSBcIi4vc3JjL2FwcGtpdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRvQ29uZmlndXJlTW9kZSwgRGVidWdDYXB0dXJlTW9kZSwgQ3JlYXRlQXBwQ29uZmlnLCBFeGVjdXRpb25Db250ZXh0TGlrZSwgV29ya3NwYWNlQ2xpZW50TGlrZSB9IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCB7IGxvYWRCcmFuZENvbnRleHQsIGdldEJyYW5kQ29udGV4dCB9IGZyb20gXCIuL3NyYy9icmFuZC1jb250ZXh0LnRzXCI7XG5leHBvcnQgeyBBcHBLaXRDYWNoZVN0b3JhZ2UsIGxvYWRQZXJzaXN0ZW50U3RvcmFnZSwgc29mdGVuSW5pdGlhbGl6ZSwgcHJvYmVTdG9yYWdlLCBjcmVhdGVBcHBLaXRDYWNoZVN0b3JhZ2UgfSBmcm9tIFwiLi9zcmMvY2FjaGUtc3RvcmFnZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHBLaXRDYWNoZVN0b3JhZ2VPcHRpb25zLCBQZXJzaXN0ZW50U3RvcmFnZUJhc2UgfSBmcm9tIFwiLi9zcmMvY2FjaGUtc3RvcmFnZS50c1wiO1xuZXhwb3J0IHsgY3JlYXRlV29ya3NwYWNlQ2xpZW50LCByZWZyZXNoV29ya3NwYWNlQ2xpZW50QXV0aGVudGljYXRpb24sIHRvQ29udGV4dCB9IGZyb20gXCIuL3NyYy9kYXRhYnJpY2tzLnRzXCI7XG5leHBvcnQgdHlwZSB7IENvbnRleHRMaWtlIH0gZnJvbSBcIi4vc3JjL2RhdGFicmlja3MudHNcIjtcbmV4cG9ydCB7IEZpbGVzQ2FjaGVNYW5hZ2VyLCBGaWxlc0NhY2hlUGx1Z2luLCBmaWxlc0NhY2hlIH0gZnJvbSBcIi4vc3JjL2ZpbGVzLWNhY2hlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEZpbGVzQ2FjaGVQbHVnaW5Db25maWcsIEZpbGVzQ2FjaGVTY29wZSwgRmlsZXNDYWNoZVNvdXJjZUlkZW50aXR5LCBGaWxlc0NhY2hlRXhwb3J0cyB9IGZyb20gXCIuL3NyYy9maWxlcy1jYWNoZS50c1wiO1xuZXhwb3J0IHsgSURFTlRJVFlfTU9ERVMsIERFRkFVTFRfSURFTlRJVFlfTU9ERSwgcmVzb2x2ZUlkZW50aXR5TW9kZSwgcmVxdWVzdEFjY2Vzc1Rva2VuLCByZXF1ZXN0VXNlcklkLCByZXF1ZXN0VXNlckVtYWlsLCB1c2VTZXJ2aWNlUHJpbmNpcGFsLCBpbnN0YWxsQXNVc2VyRGV2ZWxvcG1lbnRQYXRjaCB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHR5cGUgeyBJZGVudGl0eU1vZGUsIEhlYWRlckJlYXJpbmcgfSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCB7IGNyZWF0ZUludGVyY2VwdG9yQ29udGV4dCwgTGlmZWN5Y2xlQnJpZGdlUGx1Z2luLCBsaWZlY3ljbGVCcmlkZ2UgfSBmcm9tIFwiLi9zcmMvaW50ZXJjZXB0b3IudHNcIjtcbmV4cG9ydCB0eXBlIHsgTGlmZWN5Y2xlRXZlbnQsIExpZmVjeWNsZUhhbmRsZXIsIFJlc29sdmVkQXBwRW52LCBJbnRlcmNlcHRvckNvbnRleHQsIEludGVyY2VwdG9yLCBJbnRlcmNlcHRvclJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvaW50ZXJjZXB0b3IudHNcIjtcbmV4cG9ydCB7IGNhcHR1cmVTZXJ2aWNlUHJpbmNpcGFsUG9vbCwgcGFyc2VQb3J0LCBwYXJzZVNzbE1vZGUsIG5leHRQb2xsRGVsYXksIHBvbGxEZWxheSwgcmVhZExha2ViYXNlSW5wdXRzLCByZXNvbHZlTGFrZWJhc2VDb25uZWN0aW9uLCBhcHBseUxha2ViYXNlVG9FbnYsIGFwcGx5TGFrZWJhc2VFbnYgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgTGFrZWJhc2VSZXNvbHZlcklucHV0cywgTGFrZWJhc2VDb25uZWN0aW9uIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXJlc29sdmVyLnRzXCI7XG5leHBvcnQgeyBpc093bmVyc2hpcE1pZ3JhdGlvbkVycm9yLCBoYW5kbGVPd25lcnNoaXBNaWdyYXRpb25FcnJvciB9IGZyb20gXCIuL3NyYy9taWdyYXRpb24udHNcIjtcbmV4cG9ydCB0eXBlIHsgT3duZXJzaGlwTWlncmF0aW9uRXJyb3JPcHRpb25zIH0gZnJvbSBcIi4vc3JjL21pZ3JhdGlvbi50c1wiO1xuZXhwb3J0IHsgb3BlbkFwaVRvb2xzIH0gZnJvbSBcIi4vc3JjL29wZW5hcGktdG9vbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBPcGVuQXBpSHR0cE1ldGhvZCwgT3BlbkFwaVRvb2wsIE9wZW5BcGlUb29sc09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgeyBydW5QbHVnaW5FeGVjdXRpb24gfSBmcm9tIFwiLi9zcmMvcGx1Z2luLWV4ZWN1dGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBSdW5QbHVnaW5FeGVjdXRpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi1leGVjdXRpb24udHNcIjtcbmV4cG9ydCB7IGRhdGEsIGluc3RhbmNlLCByZXF1aXJlIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi1yZWdpc3RyeS50c1wiO1xuZXhwb3J0IHR5cGUgeyBQbHVnaW5Db250ZXh0TGlrZSB9IGZyb20gXCIuL3NyYy9wbHVnaW4tcmVnaXN0cnkudHNcIjtcbmV4cG9ydCB7IGNhY2hlR3JhbnRTdGF0ZW1lbnRzLCBwcm92aXNpb25DYWNoZVNjaGVtYSB9IGZyb20gXCIuL3NyYy9wcm92aXNpb24udHNcIjtcbmV4cG9ydCB7IGluamVjdFJlcXVlc3RUYWcsIGluamVjdFJlcXVlc3RUYWdzLCBnZXRSZXF1ZXN0VGFncyB9IGZyb20gXCIuL3NyYy9yZXF1ZXN0LXRhZ3MudHNcIjtcbmV4cG9ydCB0eXBlIHsgUmVxdWVzdFRhZ1ZhbHVlIH0gZnJvbSBcIi4vc3JjL3JlcXVlc3QtdGFncy50c1wiO1xuZXhwb3J0IHsgVVNFUl9UUkFDRV9BVFRSSUJVVEUsIGV4Y2x1ZGVIdHRwVGVsZW1ldHJ5UmVxdWVzdCwgZXhjbHVkZVVucGFyZW50ZWRPdXRnb2luZ0h0dHBUZWxlbWV0cnksIHN0YW1wSHR0cFRyYWNlVXNlciwgY29uZmlndXJlTmF0aXZlSHR0cFRlbGVtZXRyeSwgYmluZE5hdGl2ZVRlbGVtZXRyeVByb3ZpZGVyLCByZWdpc3Rlck5hdGl2ZVNwYW5Qcm9jZXNzb3IsIGRlZmVycmVkTmF0aXZlVHJhY2VyUHJvdmlkZXIgfSBmcm9tIFwiLi9zcmMvdGVsZW1ldHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE5hdGl2ZUh0dHBUZWxlbWV0cnlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0IHsgZGVmaW5lT3BlcmF0aW9ucywgdG9vbFJlZ2lzdHJ5RnJvbU9wZXJhdGlvbnMgfSBmcm9tIFwiLi9zcmMvdG9vbC1vcGVyYXRpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcEtpdFRvb2xNZXRhLCBBcHBLaXRPcGVyYXRpb25TY2hlbWFNZXRhLCBBcHBLaXRPcGVyYXRpb24gfSBmcm9tIFwiLi9zcmMvdG9vbC1vcGVyYXRpb25zLnRzXCI7XG5leHBvcnQgeyBUb29sUmVnaXN0cnlQbHVnaW4gfSBmcm9tIFwiLi9zcmMvdG9vbC1wcm92aWRlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZ2VudFRvb2xQcm9ncmVzc09wdGlvbnMsIEFnZW50VG9vbEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiLi9zcmMvdG9vbC1wcm92aWRlci50c1wiO1xuZXhwb3J0IHsgbmFtZSwgZW50cmllcyB9IGZyb20gXCIuL3NyYy90b29sa2l0LWVudHJpZXMudHNcIjtcbiJdfQ==
@@ -16,11 +16,12 @@
16
16
  import { EventEmitter } from "node:events";
17
17
  import { createRequire } from "node:module";
18
18
  import { dirname, join } from "node:path";
19
- import { createLakebasePool, getWorkspaceClient } from "@databricks/appkit";
19
+ import { createLakebasePool } from "@databricks/appkit";
20
20
  import { closeCache, createCache, flushCache, projectCache, } from "@dbx-tools/cache";
21
21
  import { postgresConnectionOptions } from "@dbx-tools/postgres";
22
22
  import { log, toError, id } from "@dbx-tools/shared-core";
23
23
  import { handleOwnershipMigrationError } from "./migration.js";
24
+ import { createWorkspaceClient } from "./databricks.js";
24
25
  const logger = log.logger("cache-storage");
25
26
  let persistentStorageCtor = null;
26
27
  class AppKitStorageLevel extends EventEmitter {
@@ -231,7 +232,8 @@ async function createPersistentStorage(cache) {
231
232
  }
232
233
  let pool;
233
234
  try {
234
- const createdPool = createLakebasePool(postgresConnectionOptions({ workspaceClient: getWorkspaceClient({}) }));
235
+ const workspaceClient = (await createWorkspaceClient()).toLegacyWorkspaceClient();
236
+ const createdPool = createLakebasePool(postgresConnectionOptions({ workspaceClient }));
235
237
  pool = createdPool;
236
238
  const storage = new PersistentStorage(cache ?? {}, createdPool);
237
239
  softenInitialize(storage, () => tableOwnedByAnotherRole(storage, createdPool));
@@ -273,4 +275,4 @@ export async function createAppKitCacheStorage(options = {}) {
273
275
  : projectCache(options.diskScope ?? "appkit", common);
274
276
  return new AppKitCacheStorage(cache, persistent);
275
277
  }
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
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWNoZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxHQUViLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQXNDM0MsSUFBSSxxQkFBcUIsR0FBb0QsSUFBSSxDQUFDO0FBRWxGLE1BQU0sa0JBQW1CLFNBQVEsWUFBWTtJQUdkO0lBRnBCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFbkIsWUFBNkIsT0FBcUI7UUFDaEQsS0FBSyxFQUFFLENBQUM7UUFEbUIsWUFBTyxHQUFQLE9BQU8sQ0FBYztJQUVsRCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBSSxHQUFXO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENB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Q0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxVQUFxQyxFQUFFO0lBRXZDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbEMsTUFBTSxVQUFVLEdBQ2QsT0FBTyxDQUFDLGNBQWMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RixNQUFNLE1BQU0sR0FBaUI7UUFDM0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksV0FBVyxFQUFFLE9BQU87UUFDdEQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO0tBQ25DLENBQUM7SUFDRixNQUFNLEtBQUssR0FBRyxVQUFVO1FBQ3RCLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDVixHQUFHLE1BQU07WUFDVCxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1NBQ25GLENBQUM7UUFDSixDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWVtb3J5LWZpcnN0IEFwcEtpdCBjYWNoZSBzdG9yYWdlIHdpdGggc29mdC1mYWlsIExha2ViYXNlIHBlcnNpc3RlbmNlLlxuICpcbiAqIEFwcEtpdCdzIGBQZXJzaXN0ZW50U3RvcmFnZS5pbml0aWFsaXplKClgIHJ1bnMgRERMIG1pZ3JhdGlvbnMgYW5kIHRocm93cyBvblxuICogYW55IHN0ZXAgZmFpbHVyZS4gV2l0aCBgY2FjaGUuc3RyaWN0UGVyc2lzdGVuY2U6IHRydWVgIHRoYXQgdGhyb3cgbWFrZXNcbiAqIGBDYWNoZU1hbmFnZXJgIHNpbGVudGx5IGRpc2FibGUgdGhlIGNhY2hlLiBUaGlzIHdyYXBzIHRoZSBzYW1lIHN0b3JhZ2UsXG4gKiBzdGlsbCBydW5zIGl0cyBtaWdyYXRpb25zLCBidXQgbG9ncyBhIGZhaWxlZCBzdGVwIGluc3RlYWQgb2YgdGhyb3dpbmcgc28gYVxuICogdXNhYmxlIHRhYmxlIGtlZXBzIHNlcnZpbmcuXG4gKlxuICogYFBlcnNpc3RlbnRTdG9yYWdlYCBpcyBub3Qgb24gQXBwS2l0J3MgcHVibGljIGV4cG9ydCBtYXAuIFRoZSBkZWVwIGxvYWQgaXNcbiAqIGxhenkgYW5kIGJlc3QtZWZmb3J0OiBpZiB0aGUgaW5zdGFsbGVkIEFwcEtpdCBsYXlvdXQgY2hhbmdlcywgTGFrZWJhc2UgaXNcbiAqIHNraXBwZWQgYW5kIHRoZSBhZGFwdGVyIGtlZXBzIGl0cyBwcm9qZWN0LXNjb3BlZCBkaXNrIHBlcnNpc3RlbmNlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwibm9kZTpldmVudHNcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjcmVhdGVMYWtlYmFzZVBvb2wsIHR5cGUgQ2FjaGVDb25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBjbG9zZUNhY2hlLFxuICBjcmVhdGVDYWNoZSxcbiAgZmx1c2hDYWNoZSxcbiAgcHJvamVjdENhY2hlLFxuICB0eXBlIENhY2hlT3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvY2FjaGVcIjtcbmltcG9ydCB7IHBvc3RncmVzQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tIFwiQGRieC10b29scy9wb3N0Z3Jlc1wiO1xuaW1wb3J0IHsgbG9nLCB0b0Vycm9yLCBpZCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBoYW5kbGVPd25lcnNoaXBNaWdyYXRpb25FcnJvciB9IGZyb20gXCIuL21pZ3JhdGlvbi50c1wiO1xuaW1wb3J0IHsgY3JlYXRlV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIi4vZGF0YWJyaWNrcy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiY2FjaGUtc3RvcmFnZVwiKTtcblxudHlwZSBMYWtlYmFzZVBvb2wgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVMYWtlYmFzZVBvb2w+O1xudHlwZSBDYWNoZVN0b3JhZ2UgPSBOb25OdWxsYWJsZTxDYWNoZUNvbmZpZ1tcInN0b3JhZ2VcIl0+O1xuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeTxUID0gdW5rbm93bj4ge1xuICBleHBpcnk6IG51bWJlcjtcbiAgdmFsdWU6IFQ7XG59XG5cbi8qKiBPcHRpb25zIGZvciBBcHBLaXQncyBtZW1vcnktZmlyc3QgY2FjaGUgc3RvcmFnZSBhZGFwdGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBLaXRDYWNoZVN0b3JhZ2VPcHRpb25zIHtcbiAgLyoqIE5hdGl2ZSBBcHBLaXQgY2FjaGUgY29uZmlndXJhdGlvbi4gKi9cbiAgY2FjaGU/OiBDYWNoZUNvbmZpZztcbiAgLyoqIFdoZXRoZXIgdG8gYXR0ZW1wdCBBcHBLaXQncyBMYWtlYmFzZSBQZXJzaXN0ZW50U3RvcmFnZS4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cbiAgcHJlZmVyTGFrZWJhc2U/OiBib29sZWFuO1xuICAvKiogUG9ydGFibGUgZGlzayBzY29wZSB1c2VkIHdoZW4gTGFrZWJhc2UgaXMgdW5hdmFpbGFibGUuICovXG4gIGRpc2tTY29wZT86IHN0cmluZztcbiAgLyoqIFdyaXRlLWJlaGluZCBjb2FsZXNjaW5nIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgd3JpdGVEZWxheU1zPzogbnVtYmVyO1xuICAvKiogTWF4aW11bSBlbnRyaWVzIHJldGFpbmVkIGluIHRoZSBwcm9jZXNzLWxvY2FsIG1lbW9yeSBwcmltYXJ5LiAqL1xuICBtYXhFbnRyaWVzPzogbnVtYmVyO1xufVxuXG4vKiogQXBwS2l0J3MgaW50ZXJuYWwgcGVyc2lzdGVudCBzdG9yYWdlIHN1cmZhY2UuICovXG5leHBvcnQgdHlwZSBQZXJzaXN0ZW50U3RvcmFnZUJhc2UgPSBDYWNoZVN0b3JhZ2UgJiB7XG4gIGNsZWFudXBFeHBpcmVkPygpOiBQcm9taXNlPG51bWJlcj47XG4gIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPjtcbiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIHNjaGVtYU5hbWU/OiBzdHJpbmc7XG4gIHRhYmxlTmFtZT86IHN0cmluZztcbn07XG5cbnR5cGUgUGVyc2lzdGVudFN0b3JhZ2VDb25zdHJ1Y3RvciA9IG5ldyAoXG4gIGNvbmZpZzogQ2FjaGVDb25maWcsXG4gIHBvb2w6IExha2ViYXNlUG9vbCxcbikgPT4gUGVyc2lzdGVudFN0b3JhZ2VCYXNlO1xuXG5sZXQgcGVyc2lzdGVudFN0b3JhZ2VDdG9yOiBQZXJzaXN0ZW50U3RvcmFnZUNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkIHwgbnVsbCA9IG51bGw7XG5cbmNsYXNzIEFwcEtpdFN0b3JhZ2VMZXZlbCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHJlYWRvbmx5IG9wdHMgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2U6IENhY2hlU3RvcmFnZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBhc3luYyBnZXQ8VD4oa2V5OiBzdHJpbmcpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQ8VD4oa2V5KTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChlbnRyeS5leHBpcnkgPD0gRGF0ZS5ub3coKSkge1xuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLmRlbGV0ZShrZXkpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICB9XG5cbiAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgdHRsPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChrZXksIHtcbiAgICAgIHZhbHVlLFxuICAgICAgZXhwaXJ5OiBEYXRlLm5vdygpICsgKHR0bCA/PyA2MF8wMDApLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5zdG9yYWdlLmRlbGV0ZShrZXkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5jbGVhcigpO1xuICB9XG5cbiAgaGFzKGtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5oYXMoa2V5KTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBNZW1vcnktZmlyc3QgQXBwS2l0IENhY2hlU3RvcmFnZSBiYWNrZWQgYnkgQGRieC10b29scy9jYWNoZS4gKi9cbmV4cG9ydCBjbGFzcyBBcHBLaXRDYWNoZVN0b3JhZ2UgaW1wbGVtZW50cyBDYWNoZVN0b3JhZ2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlOiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVDYWNoZT47XG4gIHByaXZhdGUgcmVhZG9ubHkga2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNhY2hlOiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVDYWNoZT4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJzaXN0ZW50OiBDYWNoZVN0b3JhZ2UgfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuY2FjaGUgPSBjYWNoZTtcbiAgfVxuXG4gIGFzeW5jIGdldDxUPihrZXk6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeTxUPiB8IG51bGw+IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHRoaXMuY2FjaGUuZ2V0PENhY2hlRW50cnk8VD4+KGtleSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5rZXlzLmFkZChrZXkpO1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIGFzeW5jIHNldDxUPihrZXk6IHN0cmluZywgZW50cnk6IENhY2hlRW50cnk8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0dGwgPSBlbnRyeS5leHBpcnkgLSBEYXRlLm5vdygpO1xuICAgIGlmICh0dGwgPD0gMCkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGUoa2V5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jYWNoZS5zZXQoa2V5LCBlbnRyeSwgeyB0dGwgfSk7XG4gICAgdGhpcy5rZXlzLmFkZChrZXkpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB0aGlzLmtleXMuZGVsZXRlKGtleSk7XG4gIH1cblxuICBhc3luYyBjbGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5rZXlzLmNsZWFyKCk7XG4gIH1cblxuICBhc3luYyBoYXMoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIGFzeW5jIHNpemUoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZW50ID8gdGhpcy5wZXJzaXN0ZW50LnNpemUoKSA6IHRoaXMua2V5cy5zaXplO1xuICB9XG5cbiAgaXNQZXJzaXN0ZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaGVhbHRoQ2hlY2soKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdGVudCA/IHRoaXMucGVyc2lzdGVudC5oZWFsdGhDaGVjaygpIDogdHJ1ZTtcbiAgfVxuXG4gIC8qKiBEcmFpbiB0cmFja2VkIHdyaXRlLWJlaGluZCBwZXJzaXN0ZW5jZSB3aXRob3V0IGNsb3NpbmcgdGhlIHN0b3JhZ2UuICovXG4gIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBmbHVzaENhY2hlKHRoaXMuY2FjaGUpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgYXdhaXQgY2xvc2VDYWNoZSh0aGlzLmNhY2hlKTtcbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5rZXlzLmNsZWFyKCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBBcHBLaXQncyBydW50aW1lLW9ubHkgcGVyc2lzdGVudCBjbGVhbnVwIGhvb2sgd2hlbiBhdmFpbGFibGUuICovXG4gIGFzeW5jIGNsZWFudXBFeHBpcmVkKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgY2xlYW51cCA9IChcbiAgICAgIHRoaXMucGVyc2lzdGVudCBhc1xuICAgICAgICB8IChDYWNoZVN0b3JhZ2UgJiB7XG4gICAgICAgICAgICBjbGVhbnVwRXhwaXJlZD86ICgpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgICAgICAgICB9KVxuICAgICAgICB8IHVuZGVmaW5lZFxuICAgICk/LmNsZWFudXBFeHBpcmVkO1xuICAgIHJldHVybiBjbGVhbnVwICYmIHRoaXMucGVyc2lzdGVudCA/IGNsZWFudXAuY2FsbCh0aGlzLnBlcnNpc3RlbnQpIDogMDtcbiAgfVxufVxuXG4vKipcbiAqIExhemlseSByZXNvbHZlIEFwcEtpdCdzIGludGVybmFsIGBQZXJzaXN0ZW50U3RvcmFnZWAgY29uc3RydWN0b3IuIGBudWxsYFxuICogbWVhbnMgbm90IGF0dGVtcHRlZCB5ZXQ7IGB1bmRlZmluZWRgIG1lYW5zIHRoZSBsb29rdXAgYWxyZWFkeSBmYWlsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGVyc2lzdGVudFN0b3JhZ2UoKTogUGVyc2lzdGVudFN0b3JhZ2VDb25zdHJ1Y3RvciB8IHVuZGVmaW5lZCB7XG4gIGlmIChwZXJzaXN0ZW50U3RvcmFnZUN0b3IgIT09IG51bGwpIHtcbiAgICByZXR1cm4gcGVyc2lzdGVudFN0b3JhZ2VDdG9yO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gam9pbihcbiAgICAgIGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiQGRhdGFicmlja3MvYXBwa2l0XCIpKSxcbiAgICAgIFwiY2FjaGUvc3RvcmFnZS9wZXJzaXN0ZW50LmpzXCIsXG4gICAgKTtcbiAgICBjb25zdCBsb2FkZWQgPSByZXF1aXJlKG1vZHVsZVBhdGgpLlBlcnNpc3RlbnRTdG9yYWdlIGFzXG4gICAgICBQZXJzaXN0ZW50U3RvcmFnZUNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgbG9hZGVkICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNvZnQgcGVyc2lzdGVudCBjYWNoZSBza2lwcGVkIChQZXJzaXN0ZW50U3RvcmFnZSBtaXNzaW5nKVwiKTtcbiAgICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IGxvYWRlZDtcbiAgICByZXR1cm4gbG9hZGVkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgc2tpcHBlZCAoUGVyc2lzdGVudFN0b3JhZ2UgdW5hdmFpbGFibGUpXCIsIHtcbiAgICAgIGVycm9yOiB0b0Vycm9yKGVyciksXG4gICAgfSk7XG4gICAgcGVyc2lzdGVudFN0b3JhZ2VDdG9yID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIGFuIGV4aXN0aW5nIGNhY2hlIHRhYmxlIGJlbG9uZ3MgdG8gYW5vdGhlciByb2xlLlxuICpcbiAqIFBvc3RncmVTUUwgYWxsb3dzIGdyYW50ZWQgcmVhZHMvd3JpdGVzIGJ1dCByZXNlcnZlcyBpbmRleCBEREwgZm9yIHRoZSB0YWJsZVxuICogb3duZXIuIFNraXAgQXBwS2l0IG1pZ3JhdGlvbnMgaW4gdGhhdCBjYXNlOyB7QGxpbmsgcHJvYmVTdG9yYWdlfSBzdGlsbCBwcm92ZXNcbiAqIHRoZSBleGlzdGluZyB0YWJsZSBjYW4gc2VydmUgdGhlIGNhY2hlIGJlZm9yZSBpdCBpcyBhY2NlcHRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdGFibGVPd25lZEJ5QW5vdGhlclJvbGUoXG4gIHN0b3JhZ2U6IFBlcnNpc3RlbnRTdG9yYWdlQmFzZSxcbiAgcG9vbDogTGFrZWJhc2VQb29sLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmICghc3RvcmFnZS5zY2hlbWFOYW1lIHx8ICFzdG9yYWdlLnRhYmxlTmFtZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5KFxuICAgIGBTRUxFQ1QgcGdfZ2V0X3VzZXJieWlkKGMucmVsb3duZXIpID0gY3VycmVudF91c2VyIEFTIG93bmVkXG4gICAgIEZST00gcGdfY2xhc3MgY1xuICAgICBKT0lOIHBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2VcbiAgICAgV0hFUkUgbi5uc3BuYW1lID0gJDEgQU5EIGMucmVsbmFtZSA9ICQyIEFORCBjLnJlbGtpbmQgSU4gKCdyJywgJ3AnKWAsXG4gICAgW3N0b3JhZ2Uuc2NoZW1hTmFtZSwgc3RvcmFnZS50YWJsZU5hbWVdLFxuICApO1xuICBpZiAocmVzdWx0LnJvd3NbMF0/Lm93bmVkICE9PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICBsb2dnZXIud2FybihcInBlcnNpc3RlbnQgY2FjaGUgbWlncmF0aW9ucyBza2lwcGVkICh0YWJsZSBvd25lZCBieSBhbm90aGVyIHJvbGUpXCIsIHtcbiAgICBzY2hlbWE6IHN0b3JhZ2Uuc2NoZW1hTmFtZSxcbiAgICB0YWJsZTogc3RvcmFnZS50YWJsZU5hbWUsXG4gIH0pO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIFNvZnRlbiBgaW5pdGlhbGl6ZSgpYCBzbyBhbiBvd25lcnNoaXAtb25seSBtaWdyYXRpb24gZmFpbHVyZSBpcyBub3QgZmF0YWwuICovXG5leHBvcnQgZnVuY3Rpb24gc29mdGVuSW5pdGlhbGl6ZShcbiAgc3RvcmFnZTogUGVyc2lzdGVudFN0b3JhZ2VCYXNlLFxuICBza2lwTWlncmF0aW9ucz86ICgpID0+IFByb21pc2U8Ym9vbGVhbj4sXG4pOiB2b2lkIHtcbiAgY29uc3Qgb3JpZ2luYWxJbml0aWFsaXplID0gc3RvcmFnZS5pbml0aWFsaXplLmJpbmQoc3RvcmFnZSk7XG4gIGxldCBzb2Z0SW5pdFByb21pc2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgc3RvcmFnZS5pbml0aWFsaXplID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChzdG9yYWdlLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgc29mdEluaXRQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCEoYXdhaXQgc2tpcE1pZ3JhdGlvbnM/LigpKSkgYXdhaXQgb3JpZ2luYWxJbml0aWFsaXplKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFoYW5kbGVPd25lcnNoaXBNaWdyYXRpb25FcnJvcihlcnIsIHtcbiAgICAgICAgICAgIHNjb3BlOiBcImNhY2hlLXN0b3JhZ2VcIixcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGV2ZW50OiBcInBlcnNpc3RlbnQgY2FjaGUgbWlncmF0aW9uIGZhaWxlZFwiLFxuICAgICAgICAgIH0pXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNvZnRJbml0UHJvbWlzZTtcbiAgICAgIHN0b3JhZ2UuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc29mdEluaXRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqIFZlcmlmeSB0aGUgbWlncmF0ZWQgY2FjaGUgdGFibGUgY2FuIHNlcnZlIHRoZSByZWFkcyBhbmQgd3JpdGVzIEFwcEtpdCBuZWVkcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9iZVN0b3JhZ2Uoc3RvcmFnZTogUGVyc2lzdGVudFN0b3JhZ2VCYXNlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGtleSA9IGBkYngtdG9vbHM6Y2FjaGUtcHJvYmU6JHtpZCgpfWA7XG4gIHRyeSB7XG4gICAgYXdhaXQgc3RvcmFnZS5zZXQoa2V5LCB7IHZhbHVlOiBrZXksIGV4cGlyeTogRGF0ZS5ub3coKSArIDYwXzAwMCB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdG9yYWdlLmdldChrZXkpO1xuICAgIGlmIChyZXN1bHQ/LnZhbHVlICE9PSBrZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInBlcnNpc3RlbnQgY2FjaGUgcHJvYmUgcmV0dXJuZWQgYW4gdW5leHBlY3RlZCB2YWx1ZVwiKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgc3RvcmFnZS5kZWxldGUoa2V5KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgYSBzb2Z0LWZhaWwgTGFrZWJhc2UgY2FjaGUgc3RvcmFnZSB3aGVuIGEgcG9vbCBjYW4gYmUgY3JlYXRlZCBhbmRcbiAqIEFwcEtpdCdzIFBlcnNpc3RlbnRTdG9yYWdlIGNhbiBiZSBsb2FkZWQuIFJldHVybnMgYHVuZGVmaW5lZGAgb3RoZXJ3aXNlIHNvXG4gKiB0aGUgY2FsbGVyIGNhbiB1c2UgcG9ydGFibGUgZGlzayBwZXJzaXN0ZW5jZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlUGVyc2lzdGVudFN0b3JhZ2UoXG4gIGNhY2hlOiBDYWNoZUNvbmZpZyB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8Q2FjaGVTdG9yYWdlIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IFBlcnNpc3RlbnRTdG9yYWdlID0gbG9hZFBlcnNpc3RlbnRTdG9yYWdlKCk7XG4gIGlmICghUGVyc2lzdGVudFN0b3JhZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IHBvb2w6IExha2ViYXNlUG9vbCB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCB3b3Jrc3BhY2VDbGllbnQgPSAoYXdhaXQgY3JlYXRlV29ya3NwYWNlQ2xpZW50KCkpLnRvTGVnYWN5V29ya3NwYWNlQ2xpZW50KCk7XG4gICAgY29uc3QgY3JlYXRlZFBvb2wgPSBjcmVhdGVMYWtlYmFzZVBvb2woXG4gICAgICBwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zKHsgd29ya3NwYWNlQ2xpZW50IH0pLFxuICAgICk7XG4gICAgcG9vbCA9IGNyZWF0ZWRQb29sO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgUGVyc2lzdGVudFN0b3JhZ2UoY2FjaGUgPz8ge30sIGNyZWF0ZWRQb29sKTtcbiAgICBzb2Z0ZW5Jbml0aWFsaXplKHN0b3JhZ2UsICgpID0+IHRhYmxlT3duZWRCeUFub3RoZXJSb2xlKHN0b3JhZ2UsIGNyZWF0ZWRQb29sKSk7XG4gICAgaWYgKCEoYXdhaXQgc3RvcmFnZS5oZWFsdGhDaGVjaygpKSkge1xuICAgICAgYXdhaXQgc3RvcmFnZS5jbG9zZSgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGF3YWl0IHN0b3JhZ2UuaW5pdGlhbGl6ZSgpO1xuICAgIGF3YWl0IHByb2JlU3RvcmFnZShzdG9yYWdlKTtcbiAgICByZXR1cm4gc3RvcmFnZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic29mdCBwZXJzaXN0ZW50IGNhY2hlIHVuYXZhaWxhYmxlXCIsIHtcbiAgICAgIGVycm9yOiB0b0Vycm9yKGVyciksXG4gICAgfSk7XG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIGF3YWl0IHBvb2wuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIEFwcEtpdCBDYWNoZVN0b3JhZ2Ugd2l0aCBib3VuZGVkIG1lbW9yeSBmaXJzdCBhbmQgdHJhY2tlZCBwZXJzaXN0ZW5jZS5cbiAqIExha2ViYXNlIHJlbWFpbnMgQXBwS2l0J3MgcGVyc2lzdGVudCBvd25lciB3aGVuIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIHRoZVxuICogc2hhcmVkIHByb2plY3Qtc2NvcGVkIHBvcnRhYmxlIGRpc2sgbGV2ZWwgaXMgdXNlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcEtpdENhY2hlU3RvcmFnZShcbiAgb3B0aW9uczogQXBwS2l0Q2FjaGVTdG9yYWdlT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxBcHBLaXRDYWNoZVN0b3JhZ2U+IHtcbiAgY29uc3QgbmF0aXZlQ2FjaGUgPSBvcHRpb25zLmNhY2hlO1xuICBjb25zdCBwZXJzaXN0ZW50ID1cbiAgICBvcHRpb25zLnByZWZlckxha2ViYXNlID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGF3YWl0IGNyZWF0ZVBlcnNpc3RlbnRTdG9yYWdlKG5hdGl2ZUNhY2hlKTtcbiAgY29uc3QgY29tbW9uOiBDYWNoZU9wdGlvbnMgPSB7XG4gICAgbWF4RW50cmllczogb3B0aW9ucy5tYXhFbnRyaWVzID8/IG5hdGl2ZUNhY2hlPy5tYXhTaXplLFxuICAgIHdyaXRlRGVsYXlNczogb3B0aW9ucy53cml0ZURlbGF5TXMsXG4gIH07XG4gIGNvbnN0IGNhY2hlID0gcGVyc2lzdGVudFxuICAgID8gY3JlYXRlQ2FjaGUoe1xuICAgICAgICAuLi5jb21tb24sXG4gICAgICAgIGxldmVsczogW3sgbmFtZTogXCJhcHBraXQtcGVyc2lzdGVudFwiLCBzdG9yZTogbmV3IEFwcEtpdFN0b3JhZ2VMZXZlbChwZXJzaXN0ZW50KSB9XSxcbiAgICAgIH0pXG4gICAgOiBwcm9qZWN0Q2FjaGUob3B0aW9ucy5kaXNrU2NvcGUgPz8gXCJhcHBraXRcIiwgY29tbW9uKTtcbiAgcmV0dXJuIG5ldyBBcHBLaXRDYWNoZVN0b3JhZ2UoY2FjaGUsIHBlcnNpc3RlbnQpO1xufVxuIl19
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Generic Databricks SDK glue (no AppKit): adapt WHATWG cancellation
2
+ * Databricks SDK glue for AppKit: create workspace clients backed by the
3
+ * `@dbx-tools/auth` credential lifecycle and adapt WHATWG cancellation
3
4
  * (`AbortSignal` / `AbortController`) into the SDK's `Context` /
4
5
  * `CancellationToken` shapes so a single `AbortController` can drive every
5
6
  * in-flight SDK call.
@@ -9,7 +10,24 @@
9
10
  *
10
11
  * @module
11
12
  */
13
+ import { type WorkspaceClient } from "@databricks/appkit";
12
14
  import { Context } from "@databricks/sdk-experimental";
15
+ import { type DatabricksAuthOptions } from "@dbx-tools/auth";
16
+ /**
17
+ * Create an AppKit workspace client whose SDK credential visitor delegates to
18
+ * `@dbx-tools/auth`.
19
+ *
20
+ * Auth resolves the selected profile, host, token lifecycle, interactive CLI
21
+ * login, and unified-workspace header. The AppKit/Databricks SDK client remains
22
+ * the owner of workspace APIs and request execution.
23
+ */
24
+ export declare function createWorkspaceClient(options?: DatabricksAuthOptions): Promise<WorkspaceClient>;
25
+ /**
26
+ * Refresh the dbx-tools credential lifecycle attached by
27
+ * {@link createWorkspaceClient}. Returns `false` for clients whose credential
28
+ * owner is external.
29
+ */
30
+ export declare function refreshWorkspaceClientAuthentication(client: WorkspaceClient): Promise<boolean>;
13
31
  /** Either an SDK `Context` or a WHATWG `AbortSignal`. */
14
32
  export type ContextLike = Context | AbortSignal;
15
33
  /**
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Generic Databricks SDK glue (no AppKit): adapt WHATWG cancellation
2
+ * Databricks SDK glue for AppKit: create workspace clients backed by the
3
+ * `@dbx-tools/auth` credential lifecycle and adapt WHATWG cancellation
3
4
  * (`AbortSignal` / `AbortController`) into the SDK's `Context` /
4
5
  * `CancellationToken` shapes so a single `AbortController` can drive every
5
6
  * in-flight SDK call.
@@ -9,8 +10,47 @@
9
10
  *
10
11
  * @module
11
12
  */
13
+ import { createWorkspaceClient as createAppKitWorkspaceClient, } from "@databricks/appkit";
12
14
  import { Context } from "@databricks/sdk-experimental";
15
+ import { createAuthClient, } from "@dbx-tools/auth";
13
16
  import { tieAbortSignal } from "@dbx-tools/shared-core";
17
+ const workspaceAuth = new WeakMap();
18
+ /**
19
+ * Create an AppKit workspace client whose SDK credential visitor delegates to
20
+ * `@dbx-tools/auth`.
21
+ *
22
+ * Auth resolves the selected profile, host, token lifecycle, interactive CLI
23
+ * login, and unified-workspace header. The AppKit/Databricks SDK client remains
24
+ * the owner of workspace APIs and request execution.
25
+ */
26
+ export async function createWorkspaceClient(options = {}) {
27
+ const auth = await createAuthClient(options);
28
+ const client = createAppKitWorkspaceClient({ host: auth.host });
29
+ client.config.credentials = {
30
+ name: "pat",
31
+ async configure() {
32
+ return async (headers) => {
33
+ for (const [name, value] of Object.entries(await auth.headers())) {
34
+ headers.set(name, value);
35
+ }
36
+ };
37
+ },
38
+ };
39
+ workspaceAuth.set(client, auth);
40
+ return client;
41
+ }
42
+ /**
43
+ * Refresh the dbx-tools credential lifecycle attached by
44
+ * {@link createWorkspaceClient}. Returns `false` for clients whose credential
45
+ * owner is external.
46
+ */
47
+ export async function refreshWorkspaceClientAuthentication(client) {
48
+ const auth = workspaceAuth.get(client);
49
+ if (!auth)
50
+ return false;
51
+ await auth.headers({ login: false, refresh: true });
52
+ return true;
53
+ }
14
54
  export function toContext(source, input) {
15
55
  if (!(source instanceof AbortController)) {
16
56
  if (source instanceof Context)
@@ -64,4 +104,4 @@ function tieCancellationToken(controller, token) {
64
104
  }
65
105
  token.onCancellationRequested((reason) => controller.abort(reason));
66
106
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYnJpY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFHSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBb0N4RCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQXFDLEVBQUUsS0FBbUI7SUFDbEYsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxNQUFNLFlBQVksT0FBTztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztTQUFNLElBQUksS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUN0QyxJQUFJLEtBQUs7WUFBRSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxNQUFtQjtJQUNwRCxPQUFPO1FBQ0wsSUFBSSx1QkFBdUI7WUFDekIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7UUFDRCx1QkFBdUIsQ0FBQyxFQUFFO1lBQ3hCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQixPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxVQUEyQixFQUFFLEtBQXdCO0lBQ2pGLElBQUksS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDbEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLE9BQU87SUFDVCxDQUFDO0lBQ0QsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJpYyBEYXRhYnJpY2tzIFNESyBnbHVlIChubyBBcHBLaXQpOiBhZGFwdCBXSEFUV0cgY2FuY2VsbGF0aW9uXG4gKiAoYEFib3J0U2lnbmFsYCAvIGBBYm9ydENvbnRyb2xsZXJgKSBpbnRvIHRoZSBTREsncyBgQ29udGV4dGAgL1xuICogYENhbmNlbGxhdGlvblRva2VuYCBzaGFwZXMgc28gYSBzaW5nbGUgYEFib3J0Q29udHJvbGxlcmAgY2FuIGRyaXZlIGV2ZXJ5XG4gKiBpbi1mbGlnaHQgU0RLIGNhbGwuXG4gKlxuICogU2VydmVyLW9ubHk6IGxlYW5zIG9uIHRoZSBEYXRhYnJpY2tzIFNESyBgQ29udGV4dGAuIExpdmVzIGluIG5vZGUtYXBwa2l0IHNvXG4gKiB0aGUgYnJvd3Nlci1zYWZlIHNoYXJlZC1jb3JlIHN0YXlzIFNESy1mcmVlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENhbmNlbGxhdGlvblRva2VuIH0gZnJvbSBcIkBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbFwiO1xuaW1wb3J0IHsgdGllQWJvcnRTaWduYWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG4vKiogRWl0aGVyIGFuIFNESyBgQ29udGV4dGAgb3IgYSBXSEFUV0cgYEFib3J0U2lnbmFsYC4gKi9cbmV4cG9ydCB0eXBlIENvbnRleHRMaWtlID0gQ29udGV4dCB8IEFib3J0U2lnbmFsO1xuXG4vKipcbiAqIFdyYXAgYSBgQ29udGV4dGAgKHJldHVybmVkIGFzLWlzKSBvciBgQWJvcnRTaWduYWxgIChhZGFwdGVkKSBhcyBhbiBTREsgYENvbnRleHRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBnZXRXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKlxuICogYXdhaXQgZ2V0V29ya3NwYWNlQ2xpZW50KHt9KS5hcGlDbGllbnQucmVxdWVzdChcbiAqICAgeyBwYXRoOiBcIi9hcGkvMi4wL3NlcnZpbmctZW5kcG9pbnRzXCIsIG1ldGhvZDogXCJHRVRcIiwgaGVhZGVyczogbmV3IEhlYWRlcnMoKSwgcmF3OiBmYWxzZSB9LFxuICogICBkYXRhYnJpY2tzLnRvQ29udGV4dChyZXF1ZXN0LnNpZ25hbCksXG4gKiApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Db250ZXh0KGlucHV0OiBDb250ZXh0TGlrZSk6IENvbnRleHQ7XG4vKipcbiAqIERlcml2ZSBhbiBTREsgYENvbnRleHRgIGZyb20gYGNvbnRyb2xsZXIuc2lnbmFsYCwgb3B0aW9uYWxseSB0eWluZyBgaW5wdXRgXG4gKiBpbnRvIHRoZSBjb250cm9sbGVyIHNvIHRoZSBjb250cm9sbGVyIGJlY29tZXMgdGhlIHNpbmdsZSBjYW5jZWxsYXRpb25cbiAqIHNvdXJjZSBmb3IgZG93bnN0cmVhbSBTREsgY2FsbHM6XG4gKlxuICogICAtIGBBYm9ydFNpZ25hbGA6IGFib3J0aW5nIGl0IHByb3BhZ2F0ZXMgaW50byBgY29udHJvbGxlcmAgKGFuZCBmcm9tIHRoZXJlXG4gKiAgICAgaW50byBldmVyeSBTREsgY2FsbCB5b3UgcGFzcyB0aGUgcmV0dXJuZWQgY29udGV4dCB0bykuXG4gKiAgIC0gYENvbnRleHRgOiBpdHMgYGNhbmNlbGxhdGlvblRva2VuYCBpcyB0aWVkIGludG8gYGNvbnRyb2xsZXJgLCBhbmQgaXRzXG4gKiAgICAgb3RoZXIgZmllbGRzIChgbG9nZ2VyYCwgYG9wTmFtZWAsIGByb290Q2xhc3NOYW1lYCwgYHJvb3RGbk5hbWVgLCBgb3BJZGApXG4gKiAgICAgYXJlIHByZXNlcnZlZCBpbiB0aGUgcmV0dXJuZWQgYENvbnRleHRgLiBUaGUgcmV0dXJuZWQgY29udGV4dCdzXG4gKiAgICAgYGNhbmNlbGxhdGlvblRva2VuYCBpcyByZXBsYWNlZCB3aXRoIG9uZSBiYWNrZWQgYnkgYGNvbnRyb2xsZXIuc2lnbmFsYC5cbiAqXG4gKiBUaGUgdGllIGlzIG9uZS13YXkgKHBhcmVudCAtPiBjaGlsZCk6IGFib3J0aW5nIGBjb250cm9sbGVyYCBkaXJlY3RseSBkb2VzXG4gKiBOT1QgY2FuY2VsIGBpbnB1dGAuIFNvIGEgcmVxdWVzdC1sZXZlbCBjYW5jZWwgKHlvdXIgbG9vcCdzIGB0cnkvZmluYWxseSB7XG4gKiBjb250cm9sbGVyLmFib3J0KCkgfWApIHdvbid0IHRlYXIgZG93biBhIGNhbGxlci1zdXBwbGllZCBBYm9ydFNpZ25hbCBpdFxuICogZGlkbid0IG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29udGV4dChjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsIGlucHV0PzogQ29udGV4dExpa2UpOiBDb250ZXh0O1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29udGV4dChzb3VyY2U6IEFib3J0Q29udHJvbGxlciB8IENvbnRleHRMaWtlLCBpbnB1dD86IENvbnRleHRMaWtlKTogQ29udGV4dCB7XG4gIGlmICghKHNvdXJjZSBpbnN0YW5jZW9mIEFib3J0Q29udHJvbGxlcikpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgQ29udGV4dCkgcmV0dXJuIHNvdXJjZTtcbiAgICByZXR1cm4gbmV3IENvbnRleHQoeyBjYW5jZWxsYXRpb25Ub2tlbjogc2lnbmFsVG9DYW5jZWxsYXRpb25Ub2tlbihzb3VyY2UpIH0pO1xuICB9XG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsKSB7XG4gICAgdGllQWJvcnRTaWduYWwoc291cmNlLCBpbnB1dCk7XG4gIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb250ZXh0KSB7XG4gICAgY29uc3QgdG9rZW4gPSBpbnB1dC5jYW5jZWxsYXRpb25Ub2tlbjtcbiAgICBpZiAodG9rZW4pIHRpZUNhbmNlbGxhdGlvblRva2VuKHNvdXJjZSwgdG9rZW4pO1xuICAgIGNvbnN0IG1lcmdlZCA9IGlucHV0LmNvcHkoKTtcbiAgICBtZXJnZWQuc2V0SXRlbXMoeyBjYW5jZWxsYXRpb25Ub2tlbjogc2lnbmFsVG9DYW5jZWxsYXRpb25Ub2tlbihzb3VyY2Uuc2lnbmFsKSB9KTtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG4gIHJldHVybiBuZXcgQ29udGV4dCh7IGNhbmNlbGxhdGlvblRva2VuOiBzaWduYWxUb0NhbmNlbGxhdGlvblRva2VuKHNvdXJjZS5zaWduYWwpIH0pO1xufVxuXG4vKipcbiAqIEFkYXB0IGEgV0hBVFdHIGBBYm9ydFNpZ25hbGAgdG8gdGhlIERhdGFicmlja3MgU0RLJ3MgYENhbmNlbGxhdGlvblRva2VuYFxuICogaW50ZXJmYWNlLiBUaGUgU0RLJ3MgYGFwaS1jbGllbnQudHNgIGludGVybmFsbHkgY3JlYXRlcyBhbiBgQWJvcnRDb250cm9sbGVyYFxuICogYW5kIHdpcmVzIGBjYW5jZWxsYXRpb25Ub2tlbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZGAgdG8gaXQsIHNvIHRoaXMgYWRhcHRlclxuICogaXMgdGhlIG9uZS1saW5lIGJyaWRnZSBmcm9tIFwicGxhdGZvcm0tc3RhbmRhcmQgY2FuY2VsbGF0aW9uXCIgdG8gXCJ0aGUgU0RLXG4gKiBhYm9ydHMgdGhlIGZldGNoIG9uIHlvdXIgYmVoYWxmXCIuXG4gKi9cbmZ1bmN0aW9uIHNpZ25hbFRvQ2FuY2VsbGF0aW9uVG9rZW4oc2lnbmFsOiBBYm9ydFNpZ25hbCk6IENhbmNlbGxhdGlvblRva2VuIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKSB7XG4gICAgICByZXR1cm4gc2lnbmFsLmFib3J0ZWQ7XG4gICAgfSxcbiAgICBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZChjYikge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGNiKHNpZ25hbC5yZWFzb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGNiKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaWUgdGhlIFNESydzIGBDYW5jZWxsYXRpb25Ub2tlbmAgaW50ZXJmYWNlIGJhY2sgaW50byBhbiBgQWJvcnRDb250cm9sbGVyYC5cbiAqIE1pcnJvcnMgYGFzeW5jLnRpZUFib3J0U2lnbmFsYCBidXQgZm9yIHRoZSBTREsncyBjYW5jZWxsYXRpb24gc2hhcGUsIHVzZWRcbiAqIHdoZW4gYSBjYWxsZXIgaGFuZHMgdXMgYSBwcmUtYnVpbHQgYENvbnRleHRgIHdob3NlIHRva2VuIHdlIHdhbnQgdG8gZm9sZCBpbnRvXG4gKiBvdXIgb3duIGNvbnRyb2xsZXIuXG4gKi9cbmZ1bmN0aW9uIHRpZUNhbmNlbGxhdGlvblRva2VuKGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlciwgdG9rZW46IENhbmNlbGxhdGlvblRva2VuKTogdm9pZCB7XG4gIGlmICh0b2tlbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkge1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKHJlYXNvbikgPT4gY29udHJvbGxlci5hYm9ydChyZWFzb24pKTtcbn1cbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJyaWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYnJpY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxFQUNMLHFCQUFxQixJQUFJLDJCQUEyQixHQUVyRCxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBR0wsZ0JBQWdCLEdBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxFQUErQixDQUFDO0FBRWpFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxVQUFpQyxFQUFFO0lBRW5DLE1BQU0sSUFBSSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsMkJBQTJCLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUc7UUFDMUIsSUFBSSxFQUFFLEtBQUs7UUFDWCxLQUFLLENBQUMsU0FBUztZQUNiLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUN2QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7SUFDRixhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0NBQW9DLENBQ3hELE1BQXVCO0lBRXZCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN4QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQW9DRCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQXFDLEVBQUUsS0FBbUI7SUFDbEYsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxNQUFNLFlBQVksT0FBTztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztTQUFNLElBQUksS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUN0QyxJQUFJLEtBQUs7WUFBRSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxNQUFtQjtJQUNwRCxPQUFPO1FBQ0wsSUFBSSx1QkFBdUI7WUFDekIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7UUFDRCx1QkFBdUIsQ0FBQyxFQUFFO1lBQ3hCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQixPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxVQUEyQixFQUFFLEtBQXdCO0lBQ2pGLElBQUksS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDbEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLE9BQU87SUFDVCxDQUFDO0lBQ0QsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGF0YWJyaWNrcyBTREsgZ2x1ZSBmb3IgQXBwS2l0OiBjcmVhdGUgd29ya3NwYWNlIGNsaWVudHMgYmFja2VkIGJ5IHRoZVxuICogYEBkYngtdG9vbHMvYXV0aGAgY3JlZGVudGlhbCBsaWZlY3ljbGUgYW5kIGFkYXB0IFdIQVRXRyBjYW5jZWxsYXRpb25cbiAqIChgQWJvcnRTaWduYWxgIC8gYEFib3J0Q29udHJvbGxlcmApIGludG8gdGhlIFNESydzIGBDb250ZXh0YCAvXG4gKiBgQ2FuY2VsbGF0aW9uVG9rZW5gIHNoYXBlcyBzbyBhIHNpbmdsZSBgQWJvcnRDb250cm9sbGVyYCBjYW4gZHJpdmUgZXZlcnlcbiAqIGluLWZsaWdodCBTREsgY2FsbC5cbiAqXG4gKiBTZXJ2ZXItb25seTogbGVhbnMgb24gdGhlIERhdGFicmlja3MgU0RLIGBDb250ZXh0YC4gTGl2ZXMgaW4gbm9kZS1hcHBraXQgc29cbiAqIHRoZSBicm93c2VyLXNhZmUgc2hhcmVkLWNvcmUgc3RheXMgU0RLLWZyZWUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIGNyZWF0ZVdvcmtzcGFjZUNsaWVudCBhcyBjcmVhdGVBcHBLaXRXb3Jrc3BhY2VDbGllbnQsXG4gIHR5cGUgV29ya3NwYWNlQ2xpZW50LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgdHlwZSB7IENhbmNlbGxhdGlvblRva2VuIH0gZnJvbSBcIkBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBdXRoQ2xpZW50LFxuICB0eXBlIERhdGFicmlja3NBdXRoT3B0aW9ucyxcbiAgY3JlYXRlQXV0aENsaWVudCxcbn0gZnJvbSBcIkBkYngtdG9vbHMvYXV0aFwiO1xuaW1wb3J0IHsgdGllQWJvcnRTaWduYWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG5jb25zdCB3b3Jrc3BhY2VBdXRoID0gbmV3IFdlYWtNYXA8V29ya3NwYWNlQ2xpZW50LCBBdXRoQ2xpZW50PigpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBBcHBLaXQgd29ya3NwYWNlIGNsaWVudCB3aG9zZSBTREsgY3JlZGVudGlhbCB2aXNpdG9yIGRlbGVnYXRlcyB0b1xuICogYEBkYngtdG9vbHMvYXV0aGAuXG4gKlxuICogQXV0aCByZXNvbHZlcyB0aGUgc2VsZWN0ZWQgcHJvZmlsZSwgaG9zdCwgdG9rZW4gbGlmZWN5Y2xlLCBpbnRlcmFjdGl2ZSBDTElcbiAqIGxvZ2luLCBhbmQgdW5pZmllZC13b3Jrc3BhY2UgaGVhZGVyLiBUaGUgQXBwS2l0L0RhdGFicmlja3MgU0RLIGNsaWVudCByZW1haW5zXG4gKiB0aGUgb3duZXIgb2Ygd29ya3NwYWNlIEFQSXMgYW5kIHJlcXVlc3QgZXhlY3V0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlQ2xpZW50KFxuICBvcHRpb25zOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8V29ya3NwYWNlQ2xpZW50PiB7XG4gIGNvbnN0IGF1dGggPSBhd2FpdCBjcmVhdGVBdXRoQ2xpZW50KG9wdGlvbnMpO1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVBcHBLaXRXb3Jrc3BhY2VDbGllbnQoeyBob3N0OiBhdXRoLmhvc3QgfSk7XG4gIGNsaWVudC5jb25maWcuY3JlZGVudGlhbHMgPSB7XG4gICAgbmFtZTogXCJwYXRcIixcbiAgICBhc3luYyBjb25maWd1cmUoKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGhlYWRlcnMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF3YWl0IGF1dGguaGVhZGVycygpKSkge1xuICAgICAgICAgIGhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICB9O1xuICB3b3Jrc3BhY2VBdXRoLnNldChjbGllbnQsIGF1dGgpO1xuICByZXR1cm4gY2xpZW50O1xufVxuXG4vKipcbiAqIFJlZnJlc2ggdGhlIGRieC10b29scyBjcmVkZW50aWFsIGxpZmVjeWNsZSBhdHRhY2hlZCBieVxuICoge0BsaW5rIGNyZWF0ZVdvcmtzcGFjZUNsaWVudH0uIFJldHVybnMgYGZhbHNlYCBmb3IgY2xpZW50cyB3aG9zZSBjcmVkZW50aWFsXG4gKiBvd25lciBpcyBleHRlcm5hbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hXb3Jrc3BhY2VDbGllbnRBdXRoZW50aWNhdGlvbihcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgYXV0aCA9IHdvcmtzcGFjZUF1dGguZ2V0KGNsaWVudCk7XG4gIGlmICghYXV0aCkgcmV0dXJuIGZhbHNlO1xuICBhd2FpdCBhdXRoLmhlYWRlcnMoeyBsb2dpbjogZmFsc2UsIHJlZnJlc2g6IHRydWUgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogRWl0aGVyIGFuIFNESyBgQ29udGV4dGAgb3IgYSBXSEFUV0cgYEFib3J0U2lnbmFsYC4gKi9cbmV4cG9ydCB0eXBlIENvbnRleHRMaWtlID0gQ29udGV4dCB8IEFib3J0U2lnbmFsO1xuXG4vKipcbiAqIFdyYXAgYSBgQ29udGV4dGAgKHJldHVybmVkIGFzLWlzKSBvciBgQWJvcnRTaWduYWxgIChhZGFwdGVkKSBhcyBhbiBTREsgYENvbnRleHRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBnZXRXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKlxuICogYXdhaXQgZ2V0V29ya3NwYWNlQ2xpZW50KHt9KS5hcGlDbGllbnQucmVxdWVzdChcbiAqICAgeyBwYXRoOiBcIi9hcGkvMi4wL3NlcnZpbmctZW5kcG9pbnRzXCIsIG1ldGhvZDogXCJHRVRcIiwgaGVhZGVyczogbmV3IEhlYWRlcnMoKSwgcmF3OiBmYWxzZSB9LFxuICogICBkYXRhYnJpY2tzLnRvQ29udGV4dChyZXF1ZXN0LnNpZ25hbCksXG4gKiApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Db250ZXh0KGlucHV0OiBDb250ZXh0TGlrZSk6IENvbnRleHQ7XG4vKipcbiAqIERlcml2ZSBhbiBTREsgYENvbnRleHRgIGZyb20gYGNvbnRyb2xsZXIuc2lnbmFsYCwgb3B0aW9uYWxseSB0eWluZyBgaW5wdXRgXG4gKiBpbnRvIHRoZSBjb250cm9sbGVyIHNvIHRoZSBjb250cm9sbGVyIGJlY29tZXMgdGhlIHNpbmdsZSBjYW5jZWxsYXRpb25cbiAqIHNvdXJjZSBmb3IgZG93bnN0cmVhbSBTREsgY2FsbHM6XG4gKlxuICogICAtIGBBYm9ydFNpZ25hbGA6IGFib3J0aW5nIGl0IHByb3BhZ2F0ZXMgaW50byBgY29udHJvbGxlcmAgKGFuZCBmcm9tIHRoZXJlXG4gKiAgICAgaW50byBldmVyeSBTREsgY2FsbCB5b3UgcGFzcyB0aGUgcmV0dXJuZWQgY29udGV4dCB0bykuXG4gKiAgIC0gYENvbnRleHRgOiBpdHMgYGNhbmNlbGxhdGlvblRva2VuYCBpcyB0aWVkIGludG8gYGNvbnRyb2xsZXJgLCBhbmQgaXRzXG4gKiAgICAgb3RoZXIgZmllbGRzIChgbG9nZ2VyYCwgYG9wTmFtZWAsIGByb290Q2xhc3NOYW1lYCwgYHJvb3RGbk5hbWVgLCBgb3BJZGApXG4gKiAgICAgYXJlIHByZXNlcnZlZCBpbiB0aGUgcmV0dXJuZWQgYENvbnRleHRgLiBUaGUgcmV0dXJuZWQgY29udGV4dCdzXG4gKiAgICAgYGNhbmNlbGxhdGlvblRva2VuYCBpcyByZXBsYWNlZCB3aXRoIG9uZSBiYWNrZWQgYnkgYGNvbnRyb2xsZXIuc2lnbmFsYC5cbiAqXG4gKiBUaGUgdGllIGlzIG9uZS13YXkgKHBhcmVudCAtPiBjaGlsZCk6IGFib3J0aW5nIGBjb250cm9sbGVyYCBkaXJlY3RseSBkb2VzXG4gKiBOT1QgY2FuY2VsIGBpbnB1dGAuIFNvIGEgcmVxdWVzdC1sZXZlbCBjYW5jZWwgKHlvdXIgbG9vcCdzIGB0cnkvZmluYWxseSB7XG4gKiBjb250cm9sbGVyLmFib3J0KCkgfWApIHdvbid0IHRlYXIgZG93biBhIGNhbGxlci1zdXBwbGllZCBBYm9ydFNpZ25hbCBpdFxuICogZGlkbid0IG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29udGV4dChjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsIGlucHV0PzogQ29udGV4dExpa2UpOiBDb250ZXh0O1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29udGV4dChzb3VyY2U6IEFib3J0Q29udHJvbGxlciB8IENvbnRleHRMaWtlLCBpbnB1dD86IENvbnRleHRMaWtlKTogQ29udGV4dCB7XG4gIGlmICghKHNvdXJjZSBpbnN0YW5jZW9mIEFib3J0Q29udHJvbGxlcikpIHtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgQ29udGV4dCkgcmV0dXJuIHNvdXJjZTtcbiAgICByZXR1cm4gbmV3IENvbnRleHQoeyBjYW5jZWxsYXRpb25Ub2tlbjogc2lnbmFsVG9DYW5jZWxsYXRpb25Ub2tlbihzb3VyY2UpIH0pO1xuICB9XG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsKSB7XG4gICAgdGllQWJvcnRTaWduYWwoc291cmNlLCBpbnB1dCk7XG4gIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBDb250ZXh0KSB7XG4gICAgY29uc3QgdG9rZW4gPSBpbnB1dC5jYW5jZWxsYXRpb25Ub2tlbjtcbiAgICBpZiAodG9rZW4pIHRpZUNhbmNlbGxhdGlvblRva2VuKHNvdXJjZSwgdG9rZW4pO1xuICAgIGNvbnN0IG1lcmdlZCA9IGlucHV0LmNvcHkoKTtcbiAgICBtZXJnZWQuc2V0SXRlbXMoeyBjYW5jZWxsYXRpb25Ub2tlbjogc2lnbmFsVG9DYW5jZWxsYXRpb25Ub2tlbihzb3VyY2Uuc2lnbmFsKSB9KTtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG4gIHJldHVybiBuZXcgQ29udGV4dCh7IGNhbmNlbGxhdGlvblRva2VuOiBzaWduYWxUb0NhbmNlbGxhdGlvblRva2VuKHNvdXJjZS5zaWduYWwpIH0pO1xufVxuXG4vKipcbiAqIEFkYXB0IGEgV0hBVFdHIGBBYm9ydFNpZ25hbGAgdG8gdGhlIERhdGFicmlja3MgU0RLJ3MgYENhbmNlbGxhdGlvblRva2VuYFxuICogaW50ZXJmYWNlLiBUaGUgU0RLJ3MgYGFwaS1jbGllbnQudHNgIGludGVybmFsbHkgY3JlYXRlcyBhbiBgQWJvcnRDb250cm9sbGVyYFxuICogYW5kIHdpcmVzIGBjYW5jZWxsYXRpb25Ub2tlbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZGAgdG8gaXQsIHNvIHRoaXMgYWRhcHRlclxuICogaXMgdGhlIG9uZS1saW5lIGJyaWRnZSBmcm9tIFwicGxhdGZvcm0tc3RhbmRhcmQgY2FuY2VsbGF0aW9uXCIgdG8gXCJ0aGUgU0RLXG4gKiBhYm9ydHMgdGhlIGZldGNoIG9uIHlvdXIgYmVoYWxmXCIuXG4gKi9cbmZ1bmN0aW9uIHNpZ25hbFRvQ2FuY2VsbGF0aW9uVG9rZW4oc2lnbmFsOiBBYm9ydFNpZ25hbCk6IENhbmNlbGxhdGlvblRva2VuIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKSB7XG4gICAgICByZXR1cm4gc2lnbmFsLmFib3J0ZWQ7XG4gICAgfSxcbiAgICBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZChjYikge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGNiKHNpZ25hbC5yZWFzb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGNiKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaWUgdGhlIFNESydzIGBDYW5jZWxsYXRpb25Ub2tlbmAgaW50ZXJmYWNlIGJhY2sgaW50byBhbiBgQWJvcnRDb250cm9sbGVyYC5cbiAqIE1pcnJvcnMgYGFzeW5jLnRpZUFib3J0U2lnbmFsYCBidXQgZm9yIHRoZSBTREsncyBjYW5jZWxsYXRpb24gc2hhcGUsIHVzZWRcbiAqIHdoZW4gYSBjYWxsZXIgaGFuZHMgdXMgYSBwcmUtYnVpbHQgYENvbnRleHRgIHdob3NlIHRva2VuIHdlIHdhbnQgdG8gZm9sZCBpbnRvXG4gKiBvdXIgb3duIGNvbnRyb2xsZXIuXG4gKi9cbmZ1bmN0aW9uIHRpZUNhbmNlbGxhdGlvblRva2VuKGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlciwgdG9rZW46IENhbmNlbGxhdGlvblRva2VuKTogdm9pZCB7XG4gIGlmICh0b2tlbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkge1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKHJlYXNvbikgPT4gY29udHJvbGxlci5hYm9ydChyZWFzb24pKTtcbn1cbiJdfQ==
@@ -43,7 +43,7 @@ import { type LakebaseConnectionInputs, type SslMode } from "@dbx-tools/lakebase
43
43
  * it has enough context (typically a `project`).
44
44
  */
45
45
  export interface LakebaseResolverInputs extends LakebaseConnectionInputs {
46
- /** Auth-resolved profile used only for Databricks bundle validation. */
46
+ /** Auth-resolved profile used for bundle validation and workspace API calls. */
47
47
  bundleProfile?: string;
48
48
  /**
49
49
  * What to do when no project exists in the workspace at all.
@@ -34,12 +34,12 @@
34
34
  *
35
35
  * @module
36
36
  */
37
- import { ConfigurationError, ExecutionError, getUsernameWithApiLookup, getWorkspaceClient, ValidationError, } from "@databricks/appkit";
37
+ import { ConfigurationError, ExecutionError, getUsernameWithApiLookup, ValidationError, } from "@databricks/appkit";
38
38
  import { projectUtils, resolveValue } from "@dbx-tools/core";
39
39
  import { parseAddress, parseResourcePath, parseSslMode as parseNativeSslMode, SSL_MODES, } from "@dbx-tools/lakebase";
40
40
  import { log, sleep, toError, isRecord, tcpPortSchema, databricksEnvironmentNames, toSlugWithOptions, MAX_TCP_PORT, } from "@dbx-tools/shared-core";
41
41
  import { z } from "zod";
42
- import { toContext } from "./databricks.js";
42
+ import { createWorkspaceClient, toContext } from "./databricks.js";
43
43
  const logger = log.logger("lakebase-resolver");
44
44
  const API_BASE = "/api/2.0/postgres";
45
45
  const DEFAULT_PORT = 5432;
@@ -273,6 +273,9 @@ export async function readLakebaseInputs(config) {
273
273
  * lakebaseResolver.applyLakebaseToEnv(resolved);
274
274
  */
275
275
  export async function resolveLakebaseConnection(config, signal) {
276
+ return resolveLakebaseConnectionWithClient(config, signal, workspaceClientResolver(config));
277
+ }
278
+ async function resolveLakebaseConnectionWithClient(config, signal, getClient) {
276
279
  const inputs = await readLakebaseInputs(config);
277
280
  let { project, branch, endpoint, database, host } = inputs;
278
281
  const port = inputs.port ?? DEFAULT_PORT;
@@ -296,7 +299,7 @@ export async function resolveLakebaseConnection(config, signal) {
296
299
  if (endpoint && host && database) {
297
300
  return { project, branch, endpoint, database, host, port, sslMode };
298
301
  }
299
- const ws = getWorkspaceClient({});
302
+ const ws = await getClient();
300
303
  // Host known but no resource path: scan the workspace to find which
301
304
  // endpoint owns this host so we can populate LAKEBASE_ENDPOINT.
302
305
  if (!project && host) {
@@ -376,13 +379,21 @@ export function applyLakebaseToEnv(resolved) {
376
379
  * const { user } = await lakebaseResolver.applyLakebaseEnv({ autoCreate: false });
377
380
  */
378
381
  export async function applyLakebaseEnv(config, signal) {
379
- const resolved = await resolveLakebaseConnection(config, signal);
382
+ const getClient = workspaceClientResolver(config);
383
+ const resolved = await resolveLakebaseConnectionWithClient(config, signal, getClient);
380
384
  applyLakebaseToEnv(resolved);
381
- const user = await getUsernameWithApiLookup({});
385
+ const configuredUser = process.env.PGUSER || process.env.DATABRICKS_CLIENT_ID;
386
+ const user = configuredUser ??
387
+ (await getUsernameWithApiLookup({ workspaceClient: await getClient() }));
382
388
  if (user)
383
389
  process.env.PGUSER ??= user;
384
390
  return { resolved, ...(user ? { user } : {}) };
385
391
  }
392
+ /** Resolve one auth-backed SDK client lazily and reuse it across this operation. */
393
+ function workspaceClientResolver(config) {
394
+ let pending;
395
+ return () => (pending ??= createWorkspaceClient({ profile: config?.bundleProfile }).then((client) => client.toLegacyWorkspaceClient()));
396
+ }
386
397
  /**
387
398
  * Adapt an {@link AbortSignal} into the api client's cancellation context.
388
399
  * AppKit resolves a different copy of `@databricks/sdk-experimental` than this
@@ -745,4 +756,4 @@ async function pickDatabase(ws, project, branch, signal) {
745
756
  logger.debug("autopg: resolved database", { database: choice });
746
757
  return choice;
747
758
  }
748
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UtcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBRUgsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUVsQixlQUFlLEdBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixZQUFZLElBQUksa0JBQWtCLEVBQ2xDLFNBQVMsR0FHVixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxHQUFHLEVBQ0gsS0FBSyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsYUFBYSxFQUNiLDBCQUEwQixFQUMxQixpQkFBaUIsRUFDakIsWUFBWSxHQUNiLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDO0FBQ3JDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztBQUMxQixNQUFNLGdCQUFnQixHQUFZLFNBQVMsQ0FBQztBQUM1QyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5Qiw4REFBOEQ7QUFDOUQsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7QUFDOUIsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLE1BQU0saUJB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QztJQUNoRSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYWtlYmFzZSBQb3N0Z3JlcyBjb25uZWN0aW9uIHJlc29sdmVyLlxuICpcbiAqIFJlYWRzIHRoZSBzYW1lIGVudiB2YXJzIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBjb25zdW1lcyAoYFBHSE9TVGAsXG4gKiBgUEdEQVRBQkFTRWAsIGBQR1BPUlRgLCBgUEdTU0xNT0RFYCwgYExBS0VCQVNFX0VORFBPSU5UYCkgYW5kIGZpbGxzIGluXG4gKiB3aGljaGV2ZXIgcGllY2VzIGFyZSBtaXNzaW5nIHVzaW5nIHRoZSBMYWtlYmFzZSBBdXRvc2NhbGluZyBSRVNUIEFQSVxuICogdW5kZXIgYC9hcGkvMi4wL3Bvc3RncmVzL2AgdmlhIHRoZSBEYXRhYnJpY2tzIHdvcmtzcGFjZSBjbGllbnQuXG4gKlxuICogYExBS0VCQVNFX0VORFBPSU5UYCAoYW5kIGBjb25maWcuZW5kcG9pbnRgKSBhY2NlcHQgYW55dGhpbmdcbiAqIHtAbGluayBwYXJzZUFkZHJlc3N9IHVuZGVyc3RhbmRzIC0gY2Fub25pY2FsIHJlc291cmNlIHBhdGhzLCBQb3N0Z3Jlc1xuICogVVJJcywgYmFyZSBob3N0bmFtZXMsIG9yIGJhcmUgcHJvamVjdCBpZHMuIFRoZSByZXNvbHZlciBsYXllcnNcbiAqIHdoYXRldmVyIHBpZWNlcyBmYWxsIG91dCBvZiBwYXJzaW5nIHVuZGVyIGV4cGxpY2l0IGNvbmZpZyAvIGVudlxuICogdmFsdWVzLCB0aGVuIGZpbGxzIHRoZSByZW1haW5pbmcgZ2FwcyB2aWEgdGhlIEFQSTpcbiAqXG4gKiAgIDEuIFJldmVyc2UtbG9va3VwOiB3aGVuIGEgaG9zdCBpcyBrbm93biBidXQgbm8gcmVzb3VyY2UgcGF0aCBpcyxcbiAqICAgICAgc2NhbiBwcm9qZWN0cyAtPiBicmFuY2hlcyAtPiBlbmRwb2ludHMgZm9yIGEgbWF0Y2hpbmdcbiAqICAgICAgYHN0YXR1cy5ob3N0cy5ob3N0YCBhbmQgcmVjb3ZlciB0aGUgb3duaW5nIHByb2plY3QvYnJhbmNoL2VuZHBvaW50LlxuICogICAyLiBQaWNrOiB3aGVuIGEgcHJvamVjdCBpcyBrbm93biBidXQgY2hpbGQgcmVzb3VyY2VzIGFyZW4ndCwgcHJlZmVyXG4gKiAgICAgIHRoZSBzZXJ2ZXItc2lkZSBkZWZhdWx0IChgc3RhdHVzLmRlZmF1bHRgLCBgRU5EUE9JTlRfVFlQRV9SRUFEX1dSSVRFYCxcbiAqICAgICAgYGRhdGFicmlja3NfcG9zdGdyZXNgKSBhbmQgZmFsbCBiYWNrIHRvIFwidGhlIG9ubHkgb25lXCIgd2hlbiBhXG4gKiAgICAgIGxpc3RpbmcgcmV0dXJucyBhIHNpbmdsZSByZXN1bHQuXG4gKiAgIDMuIEF1dG8tY3JlYXRlOiB3aGVuIG5vIHByb2plY3RzIGV4aXN0IGF0IGFsbCwgY3JlYXRlIG9uZSB3aG9zZVxuICogICAgICBpZCBkZWZhdWx0cyB0byBgcHJvamVjdC5uYW1lKClgIHNsdWdpZmllZCAob3ZlcnJpZGVcbiAqICAgICAgd2l0aCBgY29uZmlnLmF1dG9DcmVhdGU6IFwibXktaWRcImAgb3IgZGlzYWJsZSB3aXRoXG4gKiAgICAgIGBjb25maWcuYXV0b0NyZWF0ZTogZmFsc2VgKS4gVGhlIGNyZWF0ZSBjYWxsIGlzIGlkZW1wb3RlbnQgLSBhblxuICogICAgICBgQUxSRUFEWV9FWElTVFNgIHJlc3BvbnNlIGZyb20gYSBjb25jdXJyZW50IGJvb3QgaXMgdHJlYXRlZCBhc1xuICogICAgICBzdWNjZXNzLiBUaGVuIHBvbGwgdGhlIGRlZmF1bHQgZW5kcG9pbnQgdW50aWwgaXQgcmVwb3J0c1xuICogICAgICBgY3VycmVudF9zdGF0ZWAgYFJFQURZYCBvciBgSURMRWAuXG4gKlxuICoge0BsaW5rIGFwcGx5TGFrZWJhc2VUb0Vudn0gd3JpdGVzIHRoZSByZXNvbHZlZCB2YWx1ZXMgYmFjayB0b1xuICogYHByb2Nlc3MuZW52YCBzbyB0aGUgZG93bnN0cmVhbSBgbGFrZWJhc2VgIHBsdWdpbiBwaWNrcyB0aGVtIHVwLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRhdGFicmlja3MuY29tL2FwaS93b3Jrc3BhY2UvcG9zdGdyZXNcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBFeGVjdXRpb25FcnJvcixcbiAgZ2V0VXNlcm5hbWVXaXRoQXBpTG9va3VwLFxuICBnZXRXb3Jrc3BhY2VDbGllbnQsXG4gIHR5cGUgTGFrZWJhc2VQb29sLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHByb2plY3RVdGlscywgcmVzb2x2ZVZhbHVlIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHtcbiAgcGFyc2VBZGRyZXNzLFxuICBwYXJzZVJlc291cmNlUGF0aCxcbiAgcGFyc2VTc2xNb2RlIGFzIHBhcnNlTmF0aXZlU3NsTW9kZSxcbiAgU1NMX01PREVTLFxuICB0eXBlIExha2ViYXNlQ29ubmVjdGlvbklucHV0cyxcbiAgdHlwZSBTc2xNb2RlLFxufSBmcm9tIFwiQGRieC10b29scy9sYWtlYmFzZVwiO1xuaW1wb3J0IHtcbiAgbG9nLFxuICBzbGVlcCxcbiAgdG9FcnJvcixcbiAgaXNSZWNvcmQsXG4gIHRjcFBvcnRTY2hlbWEsXG4gIGRhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzLFxuICB0b1NsdWdXaXRoT3B0aW9ucyxcbiAgTUFYX1RDUF9QT1JULFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdG9Db250ZXh0IH0gZnJvbSBcIi4vZGF0YWJyaWNrcy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibGFrZWJhc2UtcmVzb2x2ZXJcIik7XG5jb25zdCBBUElfQkFTRSA9IFwiL2FwaS8yLjAvcG9zdGdyZXNcIjtcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDU0MzI7XG5jb25zdCBERUZBVUxUX1NTTF9NT0RFOiBTc2xNb2RlID0gXCJyZXF1aXJlXCI7XG5jb25zdCBERUZBVUxUX1BHX1ZFUlNJT04gPSAxNztcbi8qKiBMYWtlYmFzZSBwcm9qZWN0IGlkczogYF5bYS16XVthLXowLTktXXswLDYxfVthLXowLTldJGAuICovXG5jb25zdCBQUk9KRUNUX0lEX01BWF9MRU4gPSA2MztcbmNvbnN0IE9QRVJBVElPTl9USU1FT1VUX01TID0gNSAqIDYwXzAwMDtcbmNvbnN0IE9QRVJBVElPTl9QT0xMX01TID0gMl8wMDA7XG5jb25zdCBFTkRQT0lOVF9SRUFEWV9USU1FT1VUX01TID0gNSAqIDYwXzAwMDtcbmNvbnN0IEVORFBPSU5UX1JFQURZX1BPTExfTVMgPSAyXzAwMDtcbi8qKiBDZWlsaW5nIG9uIGEgc2luZ2xlIGJhY2tvZmYgc3RlcCwgc28gYSBsb25nIHdhaXQgc3RpbGwgcG9sbHMgcmVndWxhcmx5LiAqL1xuY29uc3QgUE9MTF9NQVhfREVMQVlfTVMgPSAxNV8wMDA7XG5jb25zdCBQT0xMX0JBQ0tPRkZfRkFDVE9SID0gMS41O1xuLyoqIEZyYWN0aW9uIG9mIGVhY2ggZGVsYXkgYXBwbGllZCBhcyArLy0gaml0dGVyLCBzbyBjb25jdXJyZW50IGJvb3RzIGRlc3luY2hyb25pemUuICovXG5jb25zdCBQT0xMX0pJVFRFUl9SQVRJTyA9IDAuMjtcbi8qKiBFbmRwb2ludCBgc3RhdHVzLmVuZHBvaW50X3R5cGVgIGZvciB0aGUgd3JpdGFibGUgcHJpbWFyeS4gKi9cbmNvbnN0IFJFQURfV1JJVEVfRU5EUE9JTlRfVFlQRSA9IFwiRU5EUE9JTlRfVFlQRV9SRUFEX1dSSVRFXCI7XG4vKiogRW5kcG9pbnQgYHN0YXR1cy5jdXJyZW50X3N0YXRlYCB2YWx1ZXMgdGhhdCB3aWxsIGFjY2VwdCBhIGNvbm5lY3Rpb24uICovXG5jb25zdCBDT05ORUNUQUJMRV9FTkRQT0lOVF9TVEFURVMgPSBuZXcgU2V0KFtcIlJFQURZXCIsIFwiSURMRVwiXSk7XG4vKiogRW5kcG9pbnQgYHN0YXR1cy5jdXJyZW50X3N0YXRlYCBiZWZvcmUgYSBob3N0bmFtZSBpcyBtZWFuaW5nZnVsLiAqL1xuY29uc3QgSU5JVElBTElaSU5HX0VORFBPSU5UX1NUQVRFID0gXCJJTklUSUFMSVpJTkdcIjtcbi8qKiBMYWtlYmFzZSdzIG93biBkZWZhdWx0IFBvc3RncmVzIGRhdGFiYXNlIG5hbWUuICovXG5jb25zdCBERUZBVUxUX0RBVEFCQVNFID0gXCJkYXRhYnJpY2tzX3Bvc3RncmVzXCI7XG5cbi8qKlxuICogVXNlci1zdXBwbGllZCBMYWtlYmFzZSBpbnB1dHMgKGNvbmZpZyBvciBlbnYpIGJlZm9yZSBhbnkgQVBJIHJlc29sdXRpb24uXG4gKiBFeHRlbmRzIHtAbGluayBMYWtlYmFzZUNvbm5lY3Rpb25JbnB1dHN9IHdpdGggcmVzb2x2ZXItb25seSBvcHRpb25zLlxuICoge0BsaW5rIHJlc29sdmVMYWtlYmFzZUNvbm5lY3Rpb259IGZpbGxzIGdhcHMgZnJvbSB0aGUgTGFrZWJhc2UgQVBJIHdoZW5cbiAqIGl0IGhhcyBlbm91Z2ggY29udGV4dCAodHlwaWNhbGx5IGEgYHByb2plY3RgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZVJlc29sdmVySW5wdXRzIGV4dGVuZHMgTGFrZWJhc2VDb25uZWN0aW9uSW5wdXRzIHtcbiAgLyoqIEF1dGgtcmVzb2x2ZWQgcHJvZmlsZSB1c2VkIG9ubHkgZm9yIERhdGFicmlja3MgYnVuZGxlIHZhbGlkYXRpb24uICovXG4gIGJ1bmRsZVByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGF0IHRvIGRvIHdoZW4gbm8gcHJvamVjdCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZSBhdCBhbGwuXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpOiBkZXJpdmUgYSBwcm9qZWN0IGlkIGZyb21cbiAgICogICB7QGxpbmsgcHJvamVjdC5uYW1lfSAodGhlIGhvc3QgcmVwbydzIGBwYWNrYWdlLmpzb25gXG4gICAqICAgbmFtZSkgc2x1Z2lmaWVkIHRvIExha2ViYXNlIGlkIGNvbnN0cmFpbnRzLCB0aGVuIGNyZWF0ZSBpdC5cbiAgICogLSBgc3RyaW5nYDogY3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCB0aGlzIGV4YWN0IGlkLlxuICAgKiAtIGBmYWxzZWA6IHNraXAgY3JlYXRpb24gYW5kIHRocm93IHdpdGggYSBjbGVhciBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgYXV0b0NyZWF0ZT86IHN0cmluZyB8IGZhbHNlO1xufVxuXG4vKiogRnVsbHktcmVzb2x2ZWQgTGFrZWJhc2UgUG9zdGdyZXMgY29ubmVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VDb25uZWN0aW9uIGV4dGVuZHMgTGFrZWJhc2VDb25uZWN0aW9uSW5wdXRzIHtcbiAgcG9ydDogbnVtYmVyO1xuICBzc2xNb2RlOiBTc2xNb2RlO1xufVxuXG4vKipcbiAqIENhcHR1cmUgQXBwS2l0J3MgZXhpc3Rpbmcgc2VydmljZS1wcmluY2lwYWwgTGFrZWJhc2UgcG9vbC5cbiAqXG4gKiBDYWxsIHRoaXMgZHVyaW5nIGBzZXR1cDpjb21wbGV0ZWAsIG91dHNpZGUgYW55IGBhc1VzZXIoKWAgc2NvcGUuIEFwcEtpdCdzXG4gKiBleHBvcnRlZCBwb29sIHJvdXRlcyBkeW5hbWljYWxseSBieSByZXF1ZXN0IGNvbnRleHQsIGJ1dCBpdHMgcnVudGltZVxuICogYGFjdGl2ZVBvb2woKWAgbWV0aG9kIHJldHVybnMgdGhlIGFscmVhZHktY3JlYXRlZCB1bmRlcmx5aW5nIHBvb2wgc2VsZWN0ZWQgaW5cbiAqIHRoZSBjdXJyZW50IGNvbnRleHQuIENhcHR1cmluZyBpdCBvbmNlIGF0IHN0YXJ0dXAgcGlucyBhcHBsaWNhdGlvbi1vd25lZFxuICogc3RvcmFnZSB0byB0aGUgc2VydmljZSBwcmluY2lwYWwgd2l0aG91dCBjcmVhdGluZyBhbm90aGVyIHBvb2wgb3IgY29ubmVjdGlvbi5cbiAqXG4gKiBBIGZ1dHVyZSBBcHBLaXQgdmVyc2lvbiBtYXkgZXhwb3J0IGEgZml4ZWQgcG9vbCBkaXJlY3RseTsgaW4gdGhhdCBjYXNlIHRoZVxuICogcG9vbCBoYXMgbm8gYGFjdGl2ZVBvb2woKWAgbWV0aG9kIGFuZCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlU2VydmljZVByaW5jaXBhbFBvb2wocG9vbDogTGFrZWJhc2VQb29sKTogTGFrZWJhc2VQb29sIHtcbiAgY29uc3Qgcm91dGluZ1Bvb2wgPSBwb29sIGFzIExha2ViYXNlUG9vbCAmIHsgYWN0aXZlUG9vbD86ICgpID0+IExha2ViYXNlUG9vbCB9O1xuICByZXR1cm4gcm91dGluZ1Bvb2wuYWN0aXZlUG9vbD8uY2FsbChwb29sKSA/PyBwb29sO1xufVxuXG4vKipcbiAqIEV2ZXJ5IGZpZWxkIG9mIHRoZSBMYWtlYmFzZSBSRVNUIHBheWxvYWRzIGlzIG1vZGVsbGVkIGFzIG9wdGlvbmFsIGFuZFxuICogdmFsaWRhdGVkIGF0IHRoZSBib3VuZGFyeSByYXRoZXIgdGhhbiBhc3NlcnRlZCB3aXRoIGEgY2FzdDogdGhlIHBpY2tlcnMgYmVsb3dcbiAqIGJyYW5jaCBvbiBgc3RhdHVzLipgLCBhbmQgYSBzaGFwZSBjaGFuZ2UgdXBzdHJlYW0gc2hvdWxkIHN1cmZhY2UgYXMgb25lIGxvdWRcbiAqIGVycm9yIGhlcmUgaW5zdGVhZCBvZiBhbiBgdW5kZWZpbmVkYCB0aHJlZSBmcmFtZXMgYXdheS4gRW51bS1zaGFwZWQgZmllbGRzXG4gKiBzdGF5IGBzdHJpbmdgIHNvIGEgbmV3bHkgYWRkZWQgc3RhdGUgZG9lcyBub3QgZmFpbCB0aGUgd2hvbGUgcmVzcG9uc2UuXG4gKi9cbmNvbnN0IHByb2plY3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkZ1bGwgcmVzb3VyY2UgcGF0aDogcHJvamVjdHMve3B9LlwiKSxcbn0pO1xudHlwZSBQcm9qZWN0ID0gei5pbmZlcjx0eXBlb2YgcHJvamVjdFNjaGVtYT47XG5cbmNvbnN0IGVuZHBvaW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJGdWxsIHJlc291cmNlIHBhdGg6IHByb2plY3RzL3twfS9icmFuY2hlcy97Yn0vZW5kcG9pbnRzL3tlfS5cIiksXG4gIHVpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiU3RhYmxlIGVuZHBvaW50IHVpZCBhc3NpZ25lZCBieSBMYWtlYmFzZS5cIiksXG4gIHN0YXR1czogelxuICAgIC5vYmplY3Qoe1xuICAgICAgZW5kcG9pbnRfdHlwZTogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFwiRW5kcG9pbnQgcm9sZSwgc3VjaCBhcyBFTkRQT0lOVF9UWVBFX1JFQURfV1JJVEUuXCIpLFxuICAgICAgaG9zdHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaG9zdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiV3JpdGFibGUgcHJpbWFyeSBob3N0bmFtZS5cIiksXG4gICAgICAgICAgcmVhZF9vbmx5X2hvc3Q6IHpcbiAgICAgICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgICAgIC5kZXNjcmliZShcIlJlYWQtb25seSByZXBsaWNhIGhvc3RuYW1lIHdoZW4gcHJlc2VudC5cIiksXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcIlJlc29sdmVkIGhvc3RuYW1lcy4gaG9zdHMuaG9zdCBpcyB0aGUgd3JpdGFibGUgcHJpbWFyeS5cIiksXG4gICAgICBjdXJyZW50X3N0YXRlOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXCJDb21wdXRlIHN0YXRlOiBJTklUSUFMSVpJTkcsIFNUQVJUSU5HLCBSRUFEWSwgSURMRSwgYW5kIGxhdGVyIHZhbHVlcy5cIiksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcIlNlcnZlci1zaWRlIHN0YXRlLiBSdW50aW1lIGhvc3RuYW1lcyBsaXZlIGhlcmUsIG5vdCBpbiB0aGUgc3BlYyBibG9jay5cIiksXG59KTtcbnR5cGUgRW5kcG9pbnQgPSB6LmluZmVyPHR5cGVvZiBlbmRwb2ludFNjaGVtYT47XG5cbmNvbnN0IGJyYW5jaFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRnVsbCByZXNvdXJjZSBwYXRoOiBwcm9qZWN0cy97cH0vYnJhbmNoZXMve2J9LlwiKSxcbiAgc3RhdHVzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBkZWZhdWx0OiB6XG4gICAgICAgIC5ib29sZWFuKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFwiVHJ1ZSBmb3IgdGhlIHByb2plY3QncyBkZWZhdWx0IGJyYW5jaCwgc3VjaCBhcyBwcm9kdWN0aW9uLlwiKSxcbiAgICAgIGN1cnJlbnRfc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkJyYW5jaCBjb21wdXRlIHN0YXRlIHJlcG9ydGVkIGJ5IExha2ViYXNlLlwiKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxufSk7XG50eXBlIEJyYW5jaCA9IHouaW5mZXI8dHlwZW9mIGJyYW5jaFNjaGVtYT47XG5cbmNvbnN0IGRhdGFiYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJGdWxsIHJlc291cmNlIHBhdGg6IHByb2plY3RzL3twfS9icmFuY2hlcy97Yn0vZGF0YWJhc2VzL3tkfS5cIiksXG4gIHN0YXR1czogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcG9zdGdyZXNfZGF0YWJhc2U6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkFjdHVhbCBQb3N0Z3JlcyBkYXRhYmFzZSBuYW1lIHVzZWQgYXMgUEdEQVRBQkFTRS4gTWF5IGRpZmZlciBmcm9tIHRoZSByZXNvdXJjZSBpZC5cIixcbiAgICAgICAgKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxufSk7XG50eXBlIERhdGFiYXNlID0gei5pbmZlcjx0eXBlb2YgZGF0YWJhc2VTY2hlbWE+O1xuXG4vKipcbiAqIExha2ViYXNlIFJFU1QgbGlzdCByZXNwb25zZXMgZm9sbG93IHRoZSBHb29nbGUgQUlQIGNvbnZlbnRpb246XG4gKiBgeyA8cGx1cmFsLXJlc291cmNlPjogVFtdLCBuZXh0X3BhZ2VfdG9rZW4/OiBzdHJpbmcgfWAuIFdlIG9ubHkgcmVhZFxuICogdGhlIGZpcnN0IHBhZ2U7IGZvciBhdXRvLWNvbmZpZydzIFwicGljayBzb21ldGhpbmcgc2Vuc2libGVcIiBzZW1hbnRpY3MgdGhlXG4gKiBjYXAgaXMgZmluZS5cbiAqL1xuY29uc3QgbGlzdFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBuZXh0X3BhZ2VfdG9rZW46IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcIkFJUCBwYWdlIHRva2VuLiBPbmx5IHRoZSBmaXJzdCBwYWdlIGlzIGNvbnN1bWVkLlwiKSxcbiAgcHJvamVjdHM6IHouYXJyYXkocHJvamVjdFNjaGVtYSkub3B0aW9uYWwoKSxcbiAgYnJhbmNoZXM6IHouYXJyYXkoYnJhbmNoU2NoZW1hKS5vcHRpb25hbCgpLFxuICBlbmRwb2ludHM6IHouYXJyYXkoZW5kcG9pbnRTY2hlbWEpLm9wdGlvbmFsKCksXG4gIGRhdGFiYXNlczogei5hcnJheShkYXRhYmFzZVNjaGVtYSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIExvbmctcnVubmluZyBvcGVyYXRpb24gZW52ZWxvcGUgcmV0dXJuZWQgYnkgbXV0YXRpbmcgUkVTVCBjYWxscy5cbiAqIGBkb25lOiB0cnVlYCBtZWFucyB0ZXJtaW5hbDsgY2hlY2sgYGVycm9yYCBiZWZvcmUgcmVhZGluZyBgcmVzcG9uc2VgLlxuICovXG5jb25zdCBvcGVyYXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk9wZXJhdGlvbiByZXNvdXJjZSBuYW1lLlwiKSxcbiAgZG9uZTogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRydWUgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIHRlcm1pbmFsLlwiKSxcbiAgZXJyb3I6IHoudW5rbm93bigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJFcnJvciBwYXlsb2FkIHByZXNlbnQgd2hlbiB0aGUgb3BlcmF0aW9uIGZhaWxlZC5cIiksXG4gIHJlc3BvbnNlOiB6LnVua25vd24oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmVzdWx0IHBheWxvYWQgcHJlc2VudCB3aGVuIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlwiKSxcbn0pO1xudHlwZSBPcGVyYXRpb24gPSB6LmluZmVyPHR5cGVvZiBvcGVyYXRpb25TY2hlbWE+O1xuXG4vKiogYFBHUE9SVGAgbXVzdCBsYW5kIGluc2lkZSB0aGUgVENQIHBvcnQgcmFuZ2UuICovXG5jb25zdCBwb3J0U2NoZW1hID0gdGNwUG9ydFNjaGVtYTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGBQR1BPUlRgLXNoYXBlZCB2YWx1ZS4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHVuc2V0LCBhbmQgdGhyb3dzXG4gKiBhIHtAbGluayBWYWxpZGF0aW9uRXJyb3J9IG5hbWluZyBgUEdQT1JUYCBmb3IgYW55dGhpbmcgdGhhdCBpcyBub3QgYSBUQ1BcbiAqIHBvcnQsIHNvIGEgdHlwbyBjYW5ub3QgcmVhY2ggdGhlIGNvbm5lY3Rpb24gcmVjb3JkIGFzIGBOYU5gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQb3J0KHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcGFyc2VkID0gcG9ydFNjaGVtYS5zYWZlUGFyc2UodmFsdWUpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcIlBHUE9SVFwiLCB2YWx1ZSwgYGEgVENQIHBvcnQgYmV0d2VlbiAxIGFuZCAke01BWF9UQ1BfUE9SVH1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkLmRhdGE7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBgUEdTU0xNT0RFYC1zaGFwZWQgdmFsdWUuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB1bnNldCwgYW5kXG4gKiB0aHJvd3MgYSB7QGxpbmsgVmFsaWRhdGlvbkVycm9yfSBuYW1pbmcgYFBHU1NMTU9ERWAgZm9yIGFuIHVuc3VwcG9ydGVkIG1vZGVcbiAqIHJhdGhlciB0aGFuIGhhbmRpbmcgYHBnYCBhIHZhbHVlIGl0IHdpbGwgcmVqZWN0IGF0IGNvbm5lY3QgdGltZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3NsTW9kZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogU3NsTW9kZSB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBcIlwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU5hdGl2ZVNzbE1vZGUodmFsdWUpO1xuICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFwiUEdTU0xNT0RFXCIsIHZhbHVlLCBTU0xfTU9ERVMuam9pbihcIiwgXCIpKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG4vKipcbiAqIERlbGF5IGJlZm9yZSB0aGUgbmV4dCBwb2xsIGF0dGVtcHQ6IGV4cG9uZW50aWFsIGJhY2tvZmYgY2FwcGVkIGF0XG4gKiB7QGxpbmsgUE9MTF9NQVhfREVMQVlfTVN9LCBwbHVzIGppdHRlciBzbyBzZXZlcmFsIGFwcHMgYm9vdGluZyBhZ2FpbnN0IHRoZVxuICogc2FtZSB3b3Jrc3BhY2UgZG8gbm90IHJldHJ5IGluIGxvY2tzdGVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dFBvbGxEZWxheShhdHRlbXB0OiBudW1iZXIsIGJhc2VNczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgYmFja29mZiA9IE1hdGgubWluKGJhc2VNcyAqIFBPTExfQkFDS09GRl9GQUNUT1IgKiogYXR0ZW1wdCwgUE9MTF9NQVhfREVMQVlfTVMpO1xuICBjb25zdCBqaXR0ZXIgPSBiYWNrb2ZmICogUE9MTF9KSVRURVJfUkFUSU8gKiAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKTtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgucm91bmQoYmFja29mZiArIGppdHRlcikpO1xufVxuXG4vKipcbiAqIFdhaXQgb3V0IHtAbGluayBuZXh0UG9sbERlbGF5fSBiZWZvcmUgdGhlIG5leHQgYXR0ZW1wdC4gUmVqZWN0cyB3aXRoIHRoZVxuICogc2lnbmFsJ3MgcmVhc29uIHdoZW4gdGhlIGNhbGxlciBjYW5jZWxzIG1pZC13YWl0LCBzbyBhIHBvbGwgbG9vcCB1bndpbmRzXG4gKiBpbnN0ZWFkIG9mIGZpbmlzaGluZyBpdHMgYmFja29mZiBmaXJzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbGxEZWxheShhdHRlbXB0OiBudW1iZXIsIGJhc2VNczogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gc2xlZXAobmV4dFBvbGxEZWxheShhdHRlbXB0LCBiYXNlTXMpLCBzaWduYWwpO1xufVxuXG4vKipcbiAqIFB1bGwgcmVzb2x2ZXIgaW5wdXRzIGZyb20gYHByb2Nlc3MuZW52YCwgcGFyc2UgdGhlIGFkZHJlc3MgYmxvYiwgYW5kXG4gKiBsYXllciBleHBsaWNpdCBjb25maWcgb24gdG9wIHdpdGggdGhpcyBwcmVjZWRlbmNlOlxuICpcbiAqICAgYGNvbmZpZy48ZmllbGQ+YCA+IGBjb25maWdVdGlscy5yZXNvbHZlVmFsdWVgIChzaGFyZWQgY29uZmlnIHNvdXJjZXMpID5cbiAqICAgd2hhdGV2ZXIge0BsaW5rIHBhcnNlQWRkcmVzc30gcmVjb3ZlcmVkIGZyb20gdGhlXG4gKiAgIGBlbmRwb2ludGAgLyBgTEFLRUJBU0VfRU5EUE9JTlRgIGJsb2IuXG4gKlxuICogU2V0IGBjb25maWcuZW5kcG9pbnRgIChvciBgTEFLRUJBU0VfRU5EUE9JTlRgKSB0byBhbnkgaW5wdXRcbiAqIHtAbGluayBwYXJzZUFkZHJlc3N9IHVuZGVyc3RhbmRzOiBjYW5vbmljYWwgcmVzb3VyY2UgcGF0aHMsIFBvc3RncmVzXG4gKiBVUklzLCBiYXJlIGhvc3RuYW1lcywgb3IgYmFyZSBwcm9qZWN0IGlkcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRMYWtlYmFzZUlucHV0cyhcbiAgY29uZmlnPzogTGFrZWJhc2VSZXNvbHZlcklucHV0cyxcbik6IFByb21pc2U8TGFrZWJhc2VSZXNvbHZlcklucHV0cz4ge1xuICBjb25zdCBjb25maWdPcHRpb25zID0geyBidW5kbGVQcm9maWxlOiBjb25maWc/LmJ1bmRsZVByb2ZpbGUgfTtcbiAgY29uc3QgcmF3QWRkcmVzcyA9XG4gICAgY29uZmlnPy5lbmRwb2ludCA/PyByZXNvbHZlVmFsdWUoZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMubGFrZWJhc2VFbmRwb2ludCwgY29uZmlnT3B0aW9ucyk7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlQWRkcmVzcyhyYXdBZGRyZXNzKTtcbiAgY29uc3QgcG9ydEVudiA9IHBhcnNlUG9ydChyZXNvbHZlVmFsdWUoXCJQR1BPUlRcIiwgY29uZmlnT3B0aW9ucykpO1xuICBjb25zdCBzc2xNb2RlRW52ID0gcGFyc2VTc2xNb2RlKHJlc29sdmVWYWx1ZShcIlBHU1NMTU9ERVwiLCBjb25maWdPcHRpb25zKSk7XG4gIGNvbnN0IGNvbmZpZ3VyZWRTc2xNb2RlID0gcGFyc2VTc2xNb2RlKGNvbmZpZz8uc3NsTW9kZSk7XG4gIGNvbnN0IHBhcnNlZFNzbE1vZGUgPSBwYXJzZVNzbE1vZGUocGFyc2VkLnNzbE1vZGUpO1xuICByZXR1cm4ge1xuICAgIHByb2plY3Q6IGNvbmZpZz8ucHJvamVjdCA/PyBwYXJzZWQucHJvamVjdCxcbiAgICBicmFuY2g6IGNvbmZpZz8uYnJhbmNoID8/IHBhcnNlZC5icmFuY2gsXG4gICAgLy8gT25seSBjYW5vbmljYWwgZW5kcG9pbnQgcmVzb3VyY2UgcGF0aHMgc3Vydml2ZSBoZXJlOyBVUklzIGFuZFxuICAgIC8vIGJhcmUgaG9zdG5hbWVzIHNldCBgaG9zdGAgaW5zdGVhZCBhbmQgbGVhdmUgYGVuZHBvaW50YCB1bmRlZmluZWRcbiAgICAvLyB1bnRpbCB0aGUgUkVTVCByZXNvbHZlciBmaWxscyBpdCBpbi5cbiAgICBlbmRwb2ludDogcGFyc2VkLmVuZHBvaW50LFxuICAgIGRhdGFiYXNlOiBjb25maWc/LmRhdGFiYXNlID8/IHJlc29sdmVWYWx1ZShcIlBHREFUQUJBU0VcIiwgY29uZmlnT3B0aW9ucykgPz8gcGFyc2VkLmRhdGFiYXNlLFxuICAgIGhvc3Q6IGNvbmZpZz8uaG9zdCA/PyByZXNvbHZlVmFsdWUoXCJQR0hPU1RcIiwgY29uZmlnT3B0aW9ucykgPz8gcGFyc2VkLmhvc3QsXG4gICAgcG9ydDogY29uZmlnPy5wb3J0ID8/IHBvcnRFbnYgPz8gcGFyc2VkLnBvcnQsXG4gICAgc3NsTW9kZTogY29uZmlndXJlZFNzbE1vZGUgPz8gc3NsTW9kZUVudiA/PyBwYXJzZWRTc2xNb2RlLFxuICAgIGF1dG9DcmVhdGU6IGNvbmZpZz8uYXV0b0NyZWF0ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgZnVsbHktcG9wdWxhdGVkIFBvc3RncmVzIGNvbm5lY3Rpb24gcmVjb3JkIGZyb20gY29uZmlnICsgZW52LlxuICpcbiAqIFJldHVybnMgaW1tZWRpYXRlbHkgd2l0aG91dCBuZXR3b3JrIHRyYWZmaWMgd2hlbiBlbnYgYWxyZWFkeSBzdXBwbGllc1xuICogYGVuZHBvaW50YCwgYGhvc3RgLCBhbmQgYGRhdGFiYXNlYC4gT3RoZXJ3aXNlIGlzc3VlcyBSRVNUIGNhbGxzIGFuZFxuICogbWF5IGF1dG8tY3JlYXRlIGEgcHJvamVjdCAoc2VlIG1vZHVsZSBkb2NzdHJpbmcpLlxuICpcbiAqIGBzaWduYWxgIGNhbmNlbHMgZXZlcnkgUkVTVCBjYWxsIGFuZCBpbnRlci1wb2xsIHNsZWVwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBsYWtlYmFzZVJlc29sdmVyIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKlxuICogY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBsYWtlYmFzZVJlc29sdmVyLnJlc29sdmVMYWtlYmFzZUNvbm5lY3Rpb24oXG4gKiAgIHsgYXV0b0NyZWF0ZTogZmFsc2UgfSxcbiAqICAgQWJvcnRTaWduYWwudGltZW91dCg2MF8wMDApLFxuICogKTtcbiAqIGxha2ViYXNlUmVzb2x2ZXIuYXBwbHlMYWtlYmFzZVRvRW52KHJlc29sdmVkKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVMYWtlYmFzZUNvbm5lY3Rpb24oXG4gIGNvbmZpZz86IExha2ViYXNlUmVzb2x2ZXJJbnB1dHMsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxMYWtlYmFzZUNvbm5lY3Rpb24+IHtcbiAgY29uc3QgaW5wdXRzID0gYXdhaXQgcmVhZExha2ViYXNlSW5wdXRzKGNvbmZpZyk7XG4gIGxldCB7IHByb2plY3QsIGJyYW5jaCwgZW5kcG9pbnQsIGRhdGFiYXNlLCBob3N0IH0gPSBpbnB1dHM7XG4gIGNvbnN0IHBvcnQgPSBpbnB1dHMucG9ydCA/PyBERUZBVUxUX1BPUlQ7XG4gIGNvbnN0IHNzbE1vZGUgPSBwYXJzZVNzbE1vZGUoaW5wdXRzLnNzbE1vZGUpID8/IERFRkFVTFRfU1NMX01PREU7XG5cbiAgLy8gUmVzb3VyY2UgcGF0aHMgbWF5IGNhcnJ5IHJlZHVuZGFudCBpbmZvOyBoYXJ2ZXN0IHByb2plY3QvYnJhbmNoXG4gIC8vIGZyb20gYW55IGNhbm9uaWNhbCBwYXRoIHRoYXQgc251Y2sgaW4gdmlhIFBHREFUQUJBU0Ugb3Igc2ltaWxhci5cbiAgaWYgKGVuZHBvaW50ICYmICghcHJvamVjdCB8fCAhYnJhbmNoKSkge1xuICAgIGNvbnN0IHBhcnNlZEVuZHBvaW50ID0gcGFyc2VBZGRyZXNzKGVuZHBvaW50KTtcbiAgICBwcm9qZWN0ID8/PSBwYXJzZWRFbmRwb2ludC5wcm9qZWN0O1xuICAgIGJyYW5jaCA/Pz0gcGFyc2VkRW5kcG9pbnQuYnJhbmNoO1xuICB9XG4gIGlmIChkYXRhYmFzZSAmJiAoIXByb2plY3QgfHwgIWJyYW5jaCkpIHtcbiAgICBjb25zdCBwYXJzZWREYXRhYmFzZSA9IHBhcnNlQWRkcmVzcyhkYXRhYmFzZSk7XG4gICAgcHJvamVjdCA/Pz0gcGFyc2VkRGF0YWJhc2UucHJvamVjdDtcbiAgICBicmFuY2ggPz89IHBhcnNlZERhdGFiYXNlLmJyYW5jaDtcbiAgICBpZiAocGFyc2VkRGF0YWJhc2UuZGF0YWJhc2VSZXNvdXJjZUlkKSB7XG4gICAgICBkYXRhYmFzZSA9IHBhcnNlZERhdGFiYXNlLmRhdGFiYXNlUmVzb3VyY2VJZDtcbiAgICB9XG4gIH1cblxuICAvLyBBbHJlYWR5IGNvbXBsZXRlOiBza2lwIGV2ZXJ5IFJFU1QgY2FsbC5cbiAgaWYgKGVuZHBvaW50ICYmIGhvc3QgJiYgZGF0YWJhc2UpIHtcbiAgICByZXR1cm4geyBwcm9qZWN0LCBicmFuY2gsIGVuZHBvaW50LCBkYXRhYmFzZSwgaG9zdCwgcG9ydCwgc3NsTW9kZSB9O1xuICB9XG5cbiAgY29uc3Qgd3MgPSBnZXRXb3Jrc3BhY2VDbGllbnQoe30pO1xuXG4gIC8vIEhvc3Qga25vd24gYnV0IG5vIHJlc291cmNlIHBhdGg6IHNjYW4gdGhlIHdvcmtzcGFjZSB0byBmaW5kIHdoaWNoXG4gIC8vIGVuZHBvaW50IG93bnMgdGhpcyBob3N0IHNvIHdlIGNhbiBwb3B1bGF0ZSBMQUtFQkFTRV9FTkRQT0lOVC5cbiAgaWYgKCFwcm9qZWN0ICYmIGhvc3QpIHtcbiAgICBjb25zdCBmb3VuZCA9IGF3YWl0IGZpbmRFbmRwb2ludEJ5SG9zdCh3cywgaG9zdCwgc2lnbmFsKTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIHByb2plY3QgPSBmb3VuZC5wcm9qZWN0O1xuICAgICAgYnJhbmNoID0gZm91bmQuYnJhbmNoO1xuICAgICAgZW5kcG9pbnQgPz89IGZvdW5kLmVuZHBvaW50O1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vIHByb2plY3QgYW55d2hlcmUgaW4gY29uZmlnL2Vudi9hZGRyZXNzOiBsaXN0LCBwaWNrLCBvciBjcmVhdGUuXG4gIGlmICghcHJvamVjdCkge1xuICAgIHByb2plY3QgPSBhd2FpdCBwaWNrT3JDcmVhdGVQcm9qZWN0KHdzLCBjb25maWc/LmF1dG9DcmVhdGUsIHNpZ25hbCk7XG4gIH1cblxuICBpZiAoIWJyYW5jaCkge1xuICAgIGJyYW5jaCA9IGF3YWl0IHBpY2tCcmFuY2god3MsIHByb2plY3QsIHNpZ25hbCk7XG4gIH1cblxuICBpZiAoIWVuZHBvaW50KSB7XG4gICAgY29uc3QgZXAgPSBhd2FpdCBwaWNrRW5kcG9pbnQod3MsIHByb2plY3QsIGJyYW5jaCwgc2lnbmFsKTtcbiAgICBlbmRwb2ludCA9IGVwLm5hbWU7XG4gICAgaG9zdCA/Pz0gZXAuaG9zdDtcbiAgfVxuXG4gIGlmICghaG9zdCAmJiBlbmRwb2ludCkge1xuICAgIGNvbnN0IHBhcnNlZEVuZHBvaW50ID0gcGFyc2VBZGRyZXNzKGVuZHBvaW50KTtcbiAgICBpZiAocGFyc2VkRW5kcG9pbnQucHJvamVjdCAmJiBwYXJzZWRFbmRwb2ludC5icmFuY2ggJiYgcGFyc2VkRW5kcG9pbnQuZW5kcG9pbnRJZCkge1xuICAgICAgY29uc3QgZXAgPSBhd2FpdCB3YWl0RW5kcG9pbnRSZWFkeShcbiAgICAgICAgd3MsXG4gICAgICAgIHBhcnNlZEVuZHBvaW50LnByb2plY3QsXG4gICAgICAgIHBhcnNlZEVuZHBvaW50LmJyYW5jaCxcbiAgICAgICAgcGFyc2VkRW5kcG9pbnQuZW5kcG9pbnRJZCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgKTtcbiAgICAgIGhvc3QgPSBlcC5zdGF0dXM/Lmhvc3RzPy5ob3N0O1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiYXV0b3BnOiByZXNvbHZlZCBob3N0IGZyb20gZW5kcG9pbnRcIiwgeyBob3N0IH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGF0YWJhc2UpIHtcbiAgICBkYXRhYmFzZSA9IGF3YWl0IHBpY2tEYXRhYmFzZSh3cywgcHJvamVjdCwgYnJhbmNoLCBzaWduYWwpO1xuICB9XG5cbiAgcmV0dXJuIHsgcHJvamVjdCwgYnJhbmNoLCBlbmRwb2ludCwgZGF0YWJhc2UsIGhvc3QsIHBvcnQsIHNzbE1vZGUgfTtcbn1cblxuLyoqXG4gKiBXcml0ZSByZXNvbHZlZCB2YWx1ZXMgYmFjayB0byBgcHJvY2Vzcy5lbnZgIHNvIHRoZSBgbGFrZWJhc2VgIHBsdWdpblxuICogKHdoaWNoIHJlYWRzIGVudiBkaXJlY3RseSkgcGlja3MgdGhlbSB1cCBkdXJpbmcgaXRzIG93biBgc2V0dXAoKWAuXG4gKiBFeGlzdGluZyBlbnYgdmFsdWVzIGFyZSBwcmVzZXJ2ZWQ7IG9ubHkgbWlzc2luZyBrZXlzIGFyZSBmaWxsZWQgaW4sXG4gKiB3aGljaCBrZWVwcyBleHBsaWNpdCBvdmVycmlkZXMgYXV0aG9yaXRhdGl2ZS5cbiAqXG4gKiBUaGlzIGRvZXMgTk9UIHNldCBgUEdVU0VSYCwgd2hpY2ggbmVlZHMgYW4gYXdhaXQgLSBzZWVcbiAqIHtAbGluayBhcHBseUxha2ViYXNlRW52fSBmb3IgdGhlIGNvbXBsZXRlIHNldCBhIFBvc3RncmVzIHBvb2wgcmVxdWlyZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxha2ViYXNlVG9FbnYocmVzb2x2ZWQ6IExha2ViYXNlQ29ubmVjdGlvbik6IHZvaWQge1xuICBpZiAocmVzb2x2ZWQuZW5kcG9pbnQpIHtcbiAgICBwcm9jZXNzLmVudltkYXRhYnJpY2tzRW52aXJvbm1lbnROYW1lcy5sYWtlYmFzZUVuZHBvaW50XSA/Pz0gcmVzb2x2ZWQuZW5kcG9pbnQ7XG4gIH1cbiAgaWYgKHJlc29sdmVkLmhvc3QpIHByb2Nlc3MuZW52LlBHSE9TVCA/Pz0gcmVzb2x2ZWQuaG9zdDtcbiAgaWYgKHJlc29sdmVkLmRhdGFiYXNlKSBwcm9jZXNzLmVudi5QR0RBVEFCQVNFID8/PSByZXNvbHZlZC5kYXRhYmFzZTtcbiAgcHJvY2Vzcy5lbnYuUEdQT1JUID8/PSBTdHJpbmcocmVzb2x2ZWQucG9ydCk7XG4gIHByb2Nlc3MuZW52LlBHU1NMTU9ERSA/Pz0gcmVzb2x2ZWQuc3NsTW9kZTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjb25uZWN0aW9uIEFORCBhcHBseSBldmVyeSBQb3N0Z3JlcyBlbnYgdmFyIGEgTGFrZWJhc2UgcG9vbCBuZWVkcyxcbiAqIHJldHVybmluZyB0aGUgcmVzb2x2ZWQgY29ubmVjdGlvbiBwbHVzIHRoZSB1c2VybmFtZSB0aGF0IHdhcyBhcHBsaWVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIHdob2xlIHNldCwgd2hpY2ggaXMgdGhlIHBvaW50IG9mIGhhdmluZyBvbmUgZnVuY3Rpb24gZm9yIGl0OlxuICogYGNyZWF0ZUxha2ViYXNlUG9vbCgpYCB0aHJvd3MgdW5sZXNzIGBMQUtFQkFTRV9FTkRQT0lOVGAsIGBQR0hPU1RgLFxuICogYFBHREFUQUJBU0VgLCAqKmFuZCoqIGEgdXNlcm5hbWUgKGBQR1VTRVJgLCBvciBgREFUQUJSSUNLU19DTElFTlRfSURgIGZvciBhXG4gKiBzZXJ2aWNlIHByaW5jaXBhbCkgYXJlIGFsbCBwcmVzZW50LCBhbmQgYSBEYXRhYnJpY2tzIEFwcCBgcG9zdGdyZXNgIHJlc291cmNlXG4gKiBiaW5kaW5nIHN1cHBsaWVzIG9ubHkgdGhlIGZpcnN0LiBBbnl0aGluZyB0aGF0IHdhbnRzIGEgd29ya2luZyBwb29sIC0gdGhlXG4gKiBgbGFrZWJhc2VgIHBsdWdpbiwgb3IgQXBwS2l0J3MgUEVSU0lTVEVOVCBjYWNoZSwgd2hpY2ggcXVpZXRseSBkZWdyYWRlcyB0b1xuICogaW4tbWVtb3J5IHdoZW4gdGhlIHBvb2wgY2Fubm90IGJlIGJ1aWx0IC0gbmVlZHMgYWxsIGZvdXIsIHNvIGNhbGxlcnMgc2hvdWxkIG5vdFxuICogcGFpciB7QGxpbmsgYXBwbHlMYWtlYmFzZVRvRW52fSB3aXRoIHRoZWlyIG93biB1c2VybmFtZSBsb29rdXAuXG4gKlxuICogYFBHVVNFUmAgaXMgYXBwbGllZCB3aXRoIGA/Pz1gIGxpa2UgdGhlIHJlc3QsIHNvIGFuIGV4cGxpY2l0bHkgY29uZmlndXJlZCB2YWx1ZVxuICogc3RheXMgYXV0aG9yaXRhdGl2ZS4gVGhlIGxvb2t1cCByZXR1cm5zIGB1bmRlZmluZWRgIHJhdGhlciB0aGFuIHRocm93aW5nIHdoZW4gaXRcbiAqIGNhbm5vdCBkZXRlcm1pbmUgYSB1c2VyLCBsZWF2aW5nIHRoZSBwb29sIHRvIHJlc29sdmUgaXRzIG93bi5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbGFrZWJhc2VSZXNvbHZlciB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIC8vIEVub3VnaCBmb3IgYGNyZWF0ZUxha2ViYXNlUG9vbCgpYCB0byBidWlsZCBhIHBvb2wuXG4gKiBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IGxha2ViYXNlUmVzb2x2ZXIuYXBwbHlMYWtlYmFzZUVudih7IGF1dG9DcmVhdGU6IGZhbHNlIH0pO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlMYWtlYmFzZUVudihcbiAgY29uZmlnPzogTGFrZWJhc2VSZXNvbHZlcklucHV0cyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHsgcmVzb2x2ZWQ6IExha2ViYXNlQ29ubmVjdGlvbjsgdXNlcj86IHN0cmluZyB9PiB7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUxha2ViYXNlQ29ubmVjdGlvbihjb25maWcsIHNpZ25hbCk7XG4gIGFwcGx5TGFrZWJhc2VUb0VudihyZXNvbHZlZCk7XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VybmFtZVdpdGhBcGlMb29rdXAoe30pO1xuICBpZiAodXNlcikgcHJvY2Vzcy5lbnYuUEdVU0VSID8/PSB1c2VyO1xuICByZXR1cm4geyByZXNvbHZlZCwgLi4uKHVzZXIgPyB7IHVzZXIgfSA6IHt9KSB9O1xufVxuXG50eXBlIFdvcmtzcGFjZUNsaWVudCA9IFJldHVyblR5cGU8dHlwZW9mIGdldFdvcmtzcGFjZUNsaWVudD47XG5cbi8qKiBUaGUgU0RLIGBDb250ZXh0YCBhY2NlcHRlZCBieSB0aGUgd29ya3NwYWNlIGNsaWVudCdzIG93biBjb3B5IG9mIHRoZSBTREsuICovXG50eXBlIEFwaVJlcXVlc3RDb250ZXh0ID0gTm9uTnVsbGFibGU8UGFyYW1ldGVyczxXb3Jrc3BhY2VDbGllbnRbXCJhcGlDbGllbnRcIl1bXCJyZXF1ZXN0XCJdPlsxXT47XG5cbi8qKlxuICogQWRhcHQgYW4ge0BsaW5rIEFib3J0U2lnbmFsfSBpbnRvIHRoZSBhcGkgY2xpZW50J3MgY2FuY2VsbGF0aW9uIGNvbnRleHQuXG4gKiBBcHBLaXQgcmVzb2x2ZXMgYSBkaWZmZXJlbnQgY29weSBvZiBgQGRhdGFicmlja3Mvc2RrLWV4cGVyaW1lbnRhbGAgdGhhbiB0aGlzXG4gKiBwYWNrYWdlIGRvZXMsIGFuZCBgQ29udGV4dGAgY2FycmllcyBhIHByaXZhdGUgZmllbGQsIHNvIHRoZSB0d28gZGVjbGFyYXRpb25zXG4gKiBhcmUgbm9taW5hbGx5IGluY29tcGF0aWJsZSBldmVuIHRob3VnaCB0aGUgYXBpIGNsaWVudCBvbmx5IHJlYWRzXG4gKiBgY2FuY2VsbGF0aW9uVG9rZW5gIGFuZCBgbG9nZ2VyYCBvZmYgdGhlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVxdWVzdENvbnRleHQoc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCk6IEFwaVJlcXVlc3RDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHNpZ25hbCA/ICh0b0NvbnRleHQoc2lnbmFsKSBhcyB1bmtub3duIGFzIEFwaVJlcXVlc3RDb250ZXh0KSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIExha2ViYXNlIFJFU1QgYm9keS4gVGhlIGZ1bGwgcGF5bG9hZCBpcyBsb2dnZWQgcmF0aGVyIHRoYW4gdGhyb3duXG4gKiBzbyBhIGNsaWVudCBuZXZlciByZWNlaXZlcyB1cHN0cmVhbSBkZXRhaWwuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUmVzcG9uc2U8VD4oc2NoZW1hOiB6LlpvZFR5cGU8VD4sIHBhdGg6IHN0cmluZywgYm9keTogdW5rbm93bik6IFQge1xuICBjb25zdCBwYXJzZWQgPSBzY2hlbWEuc2FmZVBhcnNlKGJvZHkpO1xuICBpZiAocGFyc2VkLnN1Y2Nlc3MpIHJldHVybiBwYXJzZWQuZGF0YTtcbiAgbG9nZ2VyLmVycm9yKFwiYXV0b3BnOiB1bmV4cGVjdGVkIExha2ViYXNlIEFQSSByZXNwb25zZVwiLCB7XG4gICAgcGF0aCxcbiAgICBpc3N1ZXM6IHBhcnNlZC5lcnJvci5pc3N1ZXMsXG4gIH0pO1xuICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoXCJMYWtlYmFzZSBBUEkgcmV0dXJuZWQgYW4gdW5leHBlY3RlZCByZXNwb25zZVwiLCB7IGNvbnRleHQ6IHsgcGF0aCB9IH0pO1xufVxuXG4vKiogR0VUIGhlbHBlciB0aGF0IHZhbGlkYXRlcyB0aGUgSlNPTiBib2R5IGFuZCBmb3J3YXJkcyBjYW5jZWxsYXRpb24uICovXG5hc3luYyBmdW5jdGlvbiBnZXRKc29uPFQ+KFxuICB3czogV29ya3NwYWNlQ2xpZW50LFxuICBwYXRoOiBzdHJpbmcsXG4gIHNjaGVtYTogei5ab2RUeXBlPFQ+LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXMgPSBhd2FpdCB3cy5hcGlDbGllbnQucmVxdWVzdChcbiAgICB7XG4gICAgICBwYXRoLFxuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoeyBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiIH0pLFxuICAgICAgcmF3OiBmYWxzZSxcbiAgICB9LFxuICAgIHJlcXVlc3RDb250ZXh0KHNpZ25hbCksXG4gICk7XG4gIHJldHVybiBwYXJzZVJlc3BvbnNlKHNjaGVtYSwgcGF0aCwgcmVzKTtcbn1cblxuLyoqIFBPU1QgaGVscGVyIGZvciBjcmVhdGUgLyBtdXRhdGUgY2FsbHM7IHZhbGlkYXRlcyB0aGUgSlNPTiBib2R5LiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9zdEpzb248VD4oXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIHBhdGg6IHN0cmluZyxcbiAgc2NoZW1hOiB6LlpvZFR5cGU8VD4sXG4gIGJvZHk6IHVua25vd24sXG4gIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgd3MuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAge1xuICAgICAgcGF0aCxcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBxdWVyeSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9KSxcbiAgICAgIHJhdzogZmFsc2UsXG4gICAgICBwYXlsb2FkOiBib2R5LFxuICAgIH0sXG4gICAgcmVxdWVzdENvbnRleHQoc2lnbmFsKSxcbiAgKTtcbiAgcmV0dXJuIHBhcnNlUmVzcG9uc2Uoc2NoZW1hLCBwYXRoLCByZXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0UHJvamVjdHMod3M6IFdvcmtzcGFjZUNsaWVudCwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFByb2plY3RbXT4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBnZXRKc29uKHdzLCBgJHtBUElfQkFTRX0vcHJvamVjdHNgLCBsaXN0UmVzcG9uc2VTY2hlbWEsIHNpZ25hbCk7XG4gIHJldHVybiByZXMucHJvamVjdHMgPz8gW107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RCcmFuY2hlcyhcbiAgd3M6IFdvcmtzcGFjZUNsaWVudCxcbiAgcHJvamVjdDogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8QnJhbmNoW10+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0SnNvbihcbiAgICB3cyxcbiAgICBgJHtBUElfQkFTRX0vcHJvamVjdHMvJHtwcm9qZWN0fS9icmFuY2hlc2AsXG4gICAgbGlzdFJlc3BvbnNlU2NoZW1hLFxuICAgIHNpZ25hbCxcbiAgKTtcbiAgcmV0dXJuIHJlcy5icmFuY2hlcyA/PyBbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdEVuZHBvaW50cyhcbiAgd3M6IFdvcmtzcGFjZUNsaWVudCxcbiAgcHJvamVjdDogc3RyaW5nLFxuICBicmFuY2g6IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPEVuZHBvaW50W10+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0SnNvbihcbiAgICB3cyxcbiAgICBgJHtBUElfQkFTRX0vcHJvamVjdHMvJHtwcm9qZWN0fS9icmFuY2hlcy8ke2JyYW5jaH0vZW5kcG9pbnRzYCxcbiAgICBsaXN0UmVzcG9uc2VTY2hlbWEsXG4gICAgc2lnbmFsLFxuICApO1xuICByZXR1cm4gcmVzLmVuZHBvaW50cyA/PyBbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdERhdGFiYXNlcyhcbiAgd3M6IFdvcmtzcGFjZUNsaWVudCxcbiAgcHJvamVjdDogc3RyaW5nLFxuICBicmFuY2g6IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPERhdGFiYXNlW10+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0SnNvbihcbiAgICB3cyxcbiAgICBgJHtBUElfQkFTRX0vcHJvamVjdHMvJHtwcm9qZWN0fS9icmFuY2hlcy8ke2JyYW5jaH0vZGF0YWJhc2VzYCxcbiAgICBsaXN0UmVzcG9uc2VTY2hlbWEsXG4gICAgc2lnbmFsLFxuICApO1xuICByZXR1cm4gcmVzLmRhdGFiYXNlcyA/PyBbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RW5kcG9pbnQoXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIHByb2plY3Q6IHN0cmluZyxcbiAgYnJhbmNoOiBzdHJpbmcsXG4gIGVuZHBvaW50SWQ6IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPEVuZHBvaW50PiB7XG4gIHJldHVybiBnZXRKc29uKFxuICAgIHdzLFxuICAgIGAke0FQSV9CQVNFfS9wcm9qZWN0cy8ke3Byb2plY3R9L2JyYW5jaGVzLyR7YnJhbmNofS9lbmRwb2ludHMvJHtlbmRwb2ludElkfWAsXG4gICAgZW5kcG9pbnRTY2hlbWEsXG4gICAgc2lnbmFsLFxuICApO1xufVxuXG4vKipcbiAqIFNjYW4gdGhlIHdvcmtzcGFjZSBmb3IgYW4gZW5kcG9pbnQgd2hvc2UgYHN0YXR1cy5ob3N0cy5ob3N0YCBtYXRjaGVzXG4gKiB0aGUgcHJvdmlkZWQgaG9zdG5hbWUuIFVzZWQgdG8gcmVjb3ZlciB0aGUgb3duaW5nIHByb2plY3QvYnJhbmNoL1xuICogZW5kcG9pbnQgcmVzb3VyY2UgcGF0aCB3aGVuIHRoZSBjYWxsZXIgb25seSBzdXBwbGllZCBhIFBvc3RncmVzIFVSSS5cbiAqXG4gKiBPKHByb2plY3RzICogYnJhbmNoZXMgKiBlbmRwb2ludHMpIC0gZmluZSBmb3IgdHlwaWNhbCB3b3Jrc3BhY2VzXG4gKiAoc2luZ2xlIGRpZ2l0cyBwZXIgdGllcik7IHBhZ2luYXRpb24gaXMgaW50ZW50aW9uYWxseSBub3QgZm9sbG93ZWRcbiAqIHNpbmNlIHRoaXMgaXMgYSBiZXN0LWVmZm9ydCBmYWxsYmFjay5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZEVuZHBvaW50QnlIb3N0KFxuICB3czogV29ya3NwYWNlQ2xpZW50LFxuICBob3N0OiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTx7IHByb2plY3Q6IHN0cmluZzsgYnJhbmNoOiBzdHJpbmc7IGVuZHBvaW50OiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBsaXN0UHJvamVjdHMod3MsIHNpZ25hbCk7XG4gIGZvciAoY29uc3QgcCBvZiBwcm9qZWN0cykge1xuICAgIGNvbnN0IHByb2plY3RJZCA9IHBhcnNlUmVzb3VyY2VQYXRoKHAubmFtZSkucHJvamVjdDtcbiAgICBpZiAoIXByb2plY3RJZCkgY29udGludWU7XG4gICAgY29uc3QgYnJhbmNoZXMgPSBhd2FpdCBsaXN0QnJhbmNoZXMod3MsIHByb2plY3RJZCwgc2lnbmFsKTtcbiAgICBmb3IgKGNvbnN0IGIgb2YgYnJhbmNoZXMpIHtcbiAgICAgIGNvbnN0IGJyYW5jaElkID0gcGFyc2VSZXNvdXJjZVBhdGgoYi5uYW1lKS5icmFuY2g7XG4gICAgICBpZiAoIWJyYW5jaElkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGxpc3RFbmRwb2ludHMod3MsIHByb2plY3RJZCwgYnJhbmNoSWQsIHNpZ25hbCk7XG4gICAgICBjb25zdCBtYXRjaCA9IGVuZHBvaW50cy5maW5kKChlKSA9PiBlLnN0YXR1cz8uaG9zdHM/Lmhvc3QgPT09IGhvc3QpO1xuICAgICAgaWYgKG1hdGNoPy5uYW1lKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcImF1dG9wZzogbWF0Y2hlZCBlbmRwb2ludCBieSBob3N0XCIsIHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGVuZHBvaW50OiBtYXRjaC5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm9qZWN0OiBwcm9qZWN0SWQsXG4gICAgICAgICAgYnJhbmNoOiBicmFuY2hJZCxcbiAgICAgICAgICBlbmRwb2ludDogbWF0Y2gubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKFwiYXV0b3BnOiBubyBlbmRwb2ludCBtYXRjaGVkIGhvc3RcIiwgeyBob3N0IH0pO1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBQaWNrIHRoZSBwcm9qZWN0IHRvIHVzZSwgb3IgY3JlYXRlIG9uZSB3aGVuIHRoZSB3b3Jrc3BhY2UgaXMgZW1wdHkuXG4gKlxuICogU2VsZWN0aW9uIG9yZGVyOlxuICogMS4gRXhhY3RseSBvbmUgcHJvamVjdCBsaXN0ZWQgLT4gdXNlIGl0LlxuICogMi4gWmVybyBwcm9qZWN0cyBBTkQgYGF1dG9DcmVhdGUgIT09IGZhbHNlYCAtPiBlbnN1cmUgYSBwcm9qZWN0IHdpdGhcbiAqICAgIHRoZSByZXNvbHZlZCBpZCBleGlzdHMsIHRoZW4gcmV0dXJuIGl0cyBpZC5cbiAqIDMuIFplcm8gcHJvamVjdHMgQU5EIGBhdXRvQ3JlYXRlID09PSBmYWxzZWAgLT4gdGhyb3cuXG4gKiA0LiBNdWx0aXBsZSBwcm9qZWN0cyAtPiB0aHJvdyB3aXRoIHRoZSBjYW5kaWRhdGUgbGlzdCAoc2V0XG4gKiAgICBgY29uZmlnLnByb2plY3RgIG9yIHBpbiBhIHByb2plY3QgaWQgaW4gYExBS0VCQVNFX0VORFBPSU5UYCkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBpY2tPckNyZWF0ZVByb2plY3QoXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIGF1dG9DcmVhdGU6IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByb2plY3RzID0gYXdhaXQgbGlzdFByb2plY3RzKHdzLCBzaWduYWwpO1xuICBpZiAocHJvamVjdHMubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgaWQgPSBwYXJzZVJlc291cmNlUGF0aChwcm9qZWN0c1swXSEubmFtZSkucHJvamVjdDtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImF1dG9wZzogdXNpbmcgb25seSBwcm9qZWN0XCIsIHsgcHJvamVjdDogaWQgfSk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG4gIGlmIChwcm9qZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoYXV0b0NyZWF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5yZXNvdXJjZU5vdEZvdW5kKFxuICAgICAgICBcIkxha2ViYXNlIHByb2plY3RcIixcbiAgICAgICAgXCJhdXRvQ3JlYXRlIGlzIGZhbHNlOyBjcmVhdGUgYSBwcm9qZWN0IG9yIHNldCBjb25maWcucHJvamVjdCAvIExBS0VCQVNFX0VORFBPSU5ULlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBhdXRvQ3JlYXRlID8/IChhd2FpdCBkZWZhdWx0UHJvamVjdElkKCkpO1xuICAgIHJldHVybiBlbnN1cmVQcm9qZWN0KHdzLCBpZCwgc2lnbmFsKTtcbiAgfVxuICBjb25zdCBjYW5kaWRhdGVzID0gcHJvamVjdHNcbiAgICAubWFwKChwKSA9PiBwYXJzZVJlc291cmNlUGF0aChwLm5hbWUpLnByb2plY3QpXG4gICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkpXG4gICAgLmpvaW4oXCIsIFwiKTtcbiAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgIFwiTGFrZWJhc2VcIixcbiAgICBgTXVsdGlwbGUgcHJvamVjdHMgZm91bmQ7IHNldCBjb25maWcucHJvamVjdCBvciBwaW4gYSBwcm9qZWN0IGlkIGluIExBS0VCQVNFX0VORFBPSU5ULiBDYW5kaWRhdGVzOiAke2NhbmRpZGF0ZXN9YCxcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXJpdmUgYSBMYWtlYmFzZSBwcm9qZWN0IGlkIGZyb20gdGhlIGhvc3QgcmVwbydzIGBwYWNrYWdlLmpzb25gXG4gKiBuYW1lICh2aWEge0BsaW5rIHByb2plY3QubmFtZX0pIHNsdWdpZmllZCB0byBzYXRpc2Z5IHRoZVxuICogTGFrZWJhc2UgaWQgY29uc3RyYWludCAoYF5bYS16XVthLXowLTktXXswLDYxfVthLXowLTldJGApLlxuICpcbiAqIFRocm93cyB3aGVuIHRoZSBzbHVnIGVuZHMgdXAgZW1wdHkgb3Igc3RhcnRzIHdpdGggYSBkaWdpdCwgc2luY2UgdGhlXG4gKiBzZXJ2ZXIgd291bGQgcmVqZWN0IGl0IGFueXdheSAtIGNhbGxlcnMgc2hvdWxkIHBhc3MgYW4gZXhwbGljaXRcbiAqIGBhdXRvQ3JlYXRlYCBpZCBpbiB0aGF0IGNhc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRQcm9qZWN0SWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbmFtZSA9IHByb2plY3RVdGlscy5uYW1lKCk7XG4gIGNvbnN0IHNsdWcgPSB0b1NsdWdXaXRoT3B0aW9ucyh7IG1heExlbmd0aDogUFJPSkVDVF9JRF9NQVhfTEVOIH0sIG5hbWUpO1xuICBpZiAoIXNsdWcgfHwgIS9eW2Etel0vLnRlc3Qoc2x1ZykpIHtcbiAgICBsb2dnZXIud2FybihcImF1dG9wZzogcHJvamVjdCBuYW1lIGRvZXMgbm90IHNsdWdpZnkgdG8gYSBMYWtlYmFzZSBwcm9qZWN0IGlkXCIsIHsgbmFtZSB9KTtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIkxha2ViYXNlXCIsXG4gICAgICBcIkNvdWxkIG5vdCBkZXJpdmUgYSBwcm9qZWN0IGlkIGZyb20gdGhlIHBhY2thZ2UgbmFtZTsgcGFzcyBhdXRvQ3JlYXRlIGV4cGxpY2l0bHkuXCIsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gc2x1Zztcbn1cblxuLyoqXG4gKiBFbnN1cmUgYSBMYWtlYmFzZSBwcm9qZWN0IHdpdGggYHByb2plY3RJZGAgZXhpc3RzLiBDcmVhdGVzIGl0IGFuZFxuICogd2FpdHMgZm9yIHRoZSBjcmVhdGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiBBbiBgQUxSRUFEWV9FWElTVFNgXG4gKiByZXNwb25zZSBpcyB0cmVhdGVkIGFzIHN1Y2Nlc3MgLSBzb21lb25lIGVsc2UgKGEgY29uY3VycmVudCBib290LFxuICogYSBzaWJsaW5nIHByb2Nlc3MpIHdvbiB0aGUgcmFjZSBhbmQgdGhlIHByb2plY3Qgd2Ugd2FudGVkIGlzIG5vd1xuICogc2l0dGluZyB0aGVyZSByZWFkeSBmb3IgZG93bnN0cmVhbSBwaWNrZXJzLlxuICpcbiAqIFByb2plY3QgY3JlYXRpb24gdHlwaWNhbGx5IHByb3Zpc2lvbnMgYSBkZWZhdWx0IGBwcm9kdWN0aW9uYCBicmFuY2hcbiAqIGFsb25nc2lkZTsgZG93bnN0cmVhbSBwaWNrZXJzIGhhbmRsZSB0aGUgcmVzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW5zdXJlUHJvamVjdChcbiAgd3M6IFdvcmtzcGFjZUNsaWVudCxcbiAgcHJvamVjdElkOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbG9nZ2VyLndhcm4oXCJhdXRvcGc6IG5vIHByb2plY3RzIGZvdW5kOyBjcmVhdGluZ1wiLCB7IHByb2plY3Q6IHByb2plY3RJZCB9KTtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcCA9IGF3YWl0IHBvc3RKc29uKFxuICAgICAgd3MsXG4gICAgICBgJHtBUElfQkFTRX0vcHJvamVjdHNgLFxuICAgICAgb3BlcmF0aW9uU2NoZW1hLFxuICAgICAgeyBzcGVjOiB7IHBnX3ZlcnNpb246IERFRkFVTFRfUEdfVkVSU0lPTiB9IH0sXG4gICAgICB7IHByb2plY3RfaWQ6IHByb2plY3RJZCB9LFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgYXdhaXQgd2FpdEZvck9wZXJhdGlvbih3cywgb3AsIHNpZ25hbCk7XG4gICAgbG9nZ2VyLmluZm8oXCJhdXRvcGc6IGNyZWF0ZWQgcHJvamVjdFwiLCB7IHByb2plY3Q6IHByb2plY3RJZCB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFpc0FscmVhZHlFeGlzdHNFcnJvcihlcnIpKSB0aHJvdyBlcnI7XG4gICAgbG9nZ2VyLmluZm8oXCJhdXRvcGc6IHByb2plY3QgYWxyZWFkeSBleGlzdHMgKHJhY2UpOyBwcm9jZWVkaW5nXCIsIHtcbiAgICAgIHByb2plY3Q6IHByb2plY3RJZCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcHJvamVjdElkO1xufVxuXG4vKipcbiAqIFJlY29nbml6ZSB0aGUgRGF0YWJyaWNrcyBTREsncyBgQUxSRUFEWV9FWElTVFNgIGZhaWx1cmUgbW9kZXMgc28gYVxuICogbG9zdCByYWNlIGR1cmluZyBgZW5zdXJlUHJvamVjdGAgYmVjb21lcyBhIG5vLW9wIGluc3RlYWQgb2YgYW4gZXJyb3IuXG4gKlxuICogVGhlIFNESyB0aHJvd3MgYEFwaUVycm9yIHsgZXJyb3JDb2RlLCBzdGF0dXNDb2RlIH1gIGZvciBzdHJ1Y3R1cmVkXG4gKiBzZXJ2ZXIgZXJyb3JzIGFuZCBgSHR0cEVycm9yIHsgY29kZSB9YCBmb3IgdHJhbnNwb3J0LWxheWVyIDR4eC81eHguXG4gKiBCb3RoIHN1cmZhY2UgYSBodW1hbiBtZXNzYWdlIHRoYXQgb2Z0ZW4gY2FycmllcyBcImFscmVhZHkgZXhpc3RzXCIgc29cbiAqIHdlIHVzZSB0aGF0IGFzIGEgZmluYWwgZmFsbGJhY2sgZm9yIGZvcndhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZnVuY3Rpb24gaXNBbHJlYWR5RXhpc3RzRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFlcnJvciB8fCB0eXBlb2YgZXJyb3IgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZSA9IGVycm9yIGFzIHtcbiAgICBzdGF0dXNDb2RlPzogbnVtYmVyO1xuICAgIGNvZGU/OiBudW1iZXI7XG4gICAgZXJyb3JDb2RlPzogc3RyaW5nO1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIH07XG4gIGlmIChlLnN0YXR1c0NvZGUgPT09IDQwOSB8fCBlLmNvZGUgPT09IDQwOSkgcmV0dXJuIHRydWU7XG4gIGlmIChlLmVycm9yQ29kZSAmJiAvYWxyZWFkeS4/ZXhpc3RzL2kudGVzdChlLmVycm9yQ29kZSkpIHJldHVybiB0cnVlO1xuICBpZiAoZS5tZXNzYWdlICYmIC9hbHJlYWR5Lj9leGlzdHMvaS50ZXN0KGUubWVzc2FnZSkpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmVkdWNlIGEgTGFrZWJhc2Ugb3BlcmF0aW9uIGZhaWx1cmUgdG8gYW4gZXJyb3Igc2FmZSB0byBwcm9wYWdhdGU6IHRoZVxuICogb3BlcmF0aW9uIG5hbWUgcGx1cyB3aGF0ZXZlciBjb2RlIHRoZSBwYXlsb2FkIGNhcnJpZXMuIFRoZSBwYXlsb2FkIGl0c2VsZiBjYW5cbiAqIGVjaG8gcmVxdWVzdCBjb250ZXh0LCBzbyBpdCBnb2VzIHRvIHRoZSBsb2cgaW5zdGVhZC5cbiAqL1xuZnVuY3Rpb24gb3BlcmF0aW9uRmFpbGVkKG9wTmFtZTogc3RyaW5nLCBvcEVycm9yOiB1bmtub3duKTogRXhlY3V0aW9uRXJyb3Ige1xuICBsb2dnZXIuZXJyb3IoXCJhdXRvcGc6IG9wZXJhdGlvbiBmYWlsZWRcIiwge1xuICAgIG9wZXJhdGlvbjogb3BOYW1lLFxuICAgIGVycm9yOiB0b0Vycm9yKG9wRXJyb3IpLFxuICB9KTtcbiAgY29uc3QgY29kZSA9IGlzUmVjb3JkKG9wRXJyb3IpID8gKG9wRXJyb3IuY29kZSA/PyBvcEVycm9yLnJlYXNvbikgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBuZXcgRXhlY3V0aW9uRXJyb3IoYExha2ViYXNlIG9wZXJhdGlvbiBmYWlsZWQ6ICR7b3BOYW1lfWAsIHtcbiAgICBjb250ZXh0OiB7XG4gICAgICBvcGVyYXRpb246IG9wTmFtZSxcbiAgICAgIGVycm9yQ29kZTogdHlwZW9mIGNvZGUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGNvZGUgPT09IFwibnVtYmVyXCIgPyBTdHJpbmcoY29kZSkgOiBcInVua25vd25cIixcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBQb2xsIGEgTGFrZWJhc2UgbG9uZy1ydW5uaW5nIG9wZXJhdGlvbiB1bnRpbCBgZG9uZTogdHJ1ZWAuIFJldHVybnNcbiAqIHRoZSBmaW5hbCBvcGVyYXRpb24gZW52ZWxvcGUgKHdoaWNoIG1heSBjYXJyeSBgcmVzcG9uc2VgIG9yIGBlcnJvcmApLlxuICpcbiAqIFRocm93cyB3aGVuOlxuICogICAtIHRoZSByZXNwb25zZSBjYXJyaWVzIGFuIGBlcnJvcmAgZmllbGQ7XG4gKiAgIC0gYG9wLm5hbWVgIGlzIG1pc3NpbmcgKG5vdGhpbmcgdG8gcG9sbCk7XG4gKiAgIC0gdGhlIHRpbWVvdXQgZWxhcHNlcyBiZWZvcmUgYGRvbmU6IHRydWVgO1xuICogICAtIGBzaWduYWxgIGFib3J0cyBtaWQtd2FpdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvck9wZXJhdGlvbihcbiAgd3M6IFdvcmtzcGFjZUNsaWVudCxcbiAgb3A6IE9wZXJhdGlvbixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPE9wZXJhdGlvbj4ge1xuICBpZiAob3AuZG9uZSkge1xuICAgIGlmIChvcC5lcnJvcikge1xuICAgICAgdGhyb3cgb3BlcmF0aW9uRmFpbGVkKG9wLm5hbWUgPz8gXCJ1bmtub3duXCIsIG9wLmVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wO1xuICB9XG4gIGNvbnN0IG9wTmFtZSA9IG9wLm5hbWU7XG4gIGlmICghb3BOYW1lKSB7XG4gICAgdGhyb3cgRXhlY3V0aW9uRXJyb3IubWlzc2luZ0RhdGEoXCJvcGVyYXRpb24gbmFtZVwiKTtcbiAgfVxuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBEYXRlLm5vdygpIC0gc3RhcnQgPCBPUEVSQVRJT05fVElNRU9VVF9NUzsgYXR0ZW1wdCsrKSB7XG4gICAgYXdhaXQgcG9sbERlbGF5KGF0dGVtcHQsIE9QRVJBVElPTl9QT0xMX01TLCBzaWduYWwpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBnZXRKc29uKHdzLCBgJHtBUElfQkFTRX0vJHtvcE5hbWV9YCwgb3BlcmF0aW9uU2NoZW1hLCBzaWduYWwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImF1dG9wZzogb3BlcmF0aW9uIHN0YXR1c1wiLCB7IG9wOiBvcE5hbWUsIGRvbmU6IGN1cnJlbnQuZG9uZSB9KTtcbiAgICBpZiAoY3VycmVudC5kb25lKSB7XG4gICAgICBpZiAoY3VycmVudC5lcnJvcikge1xuICAgICAgICB0aHJvdyBvcGVyYXRpb25GYWlsZWQob3BOYW1lLCBjdXJyZW50LmVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoYExha2ViYXNlIG9wZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlOiAke29wTmFtZX1gLCB7XG4gICAgY29udGV4dDogeyBvcGVyYXRpb246IG9wTmFtZSwgdGltZW91dE1zOiBPUEVSQVRJT05fVElNRU9VVF9NUyB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBQb2xsIGBnZXRFbmRwb2ludGAgdW50aWwgdGhlIGNvbXB1dGUgcmVwb3J0cyBhIHVzYWJsZVxuICogYHN0YXR1cy5jdXJyZW50X3N0YXRlYC4gYFJFQURZYCBhbmQgYElETEVgIGFyZSBib3RoIGFjY2VwdGFibGUgLVxuICogYElETEVgIGp1c3QgbWVhbnMgdGhlIGNvbXB1dGUgaGFzIHNjYWxlZCB0byB6ZXJvIGJ1dCBhIGNvbm5lY3Rpb25cbiAqIHdpbGwgd2FrZSBpdC4gUmV0dXJucyB0aGUgZmluYWwgZW5kcG9pbnQgcGF5bG9hZCAod2l0aCBgaG9zdHMuaG9zdGApLlxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0RW5kcG9pbnRSZWFkeShcbiAgd3M6IFdvcmtzcGFjZUNsaWVudCxcbiAgcHJvamVjdDogc3RyaW5nLFxuICBicmFuY2g6IHN0cmluZyxcbiAgZW5kcG9pbnRJZDogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8RW5kcG9pbnQ+IHtcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBsZXQgbGFzdDogRW5kcG9pbnQgfCBudWxsID0gbnVsbDtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IERhdGUubm93KCkgLSBzdGFydCA8IEVORFBPSU5UX1JFQURZX1RJTUVPVVRfTVM7IGF0dGVtcHQrKykge1xuICAgIGxhc3QgPSBhd2FpdCBnZXRFbmRwb2ludCh3cywgcHJvamVjdCwgYnJhbmNoLCBlbmRwb2ludElkLCBzaWduYWwpO1xuICAgIGNvbnN0IHN0YXRlID0gbGFzdC5zdGF0dXM/LmN1cnJlbnRfc3RhdGU7XG4gICAgaWYgKHN0YXRlICYmIENPTk5FQ1RBQkxFX0VORFBPSU5UX1NUQVRFUy5oYXMoc3RhdGUpKSByZXR1cm4gbGFzdDtcbiAgICBpZiAobGFzdC5zdGF0dXM/Lmhvc3RzPy5ob3N0ICYmIHN0YXRlICE9PSBJTklUSUFMSVpJTkdfRU5EUE9JTlRfU1RBVEUpIHtcbiAgICAgIC8vIENvbXB1dGUgaXMgaW4gc29tZSBvdGhlciBzdGF0ZSAoU1RBUlRJTkcsIGV0Yy4pIGJ1dCBob3N0bmFtZSBpc1xuICAgICAgLy8gYWxyZWFkeSBwdWJsaXNoZWQgLSBnb29kIGVub3VnaCB0byBjb25uZWN0OyBsYWtlYmFzZSdzIE9BdXRoXG4gICAgICAvLyB0b2tlbiByZXF1ZXN0IHdpbGwgd2FrZSBpdC5cbiAgICAgIHJldHVybiBsYXN0O1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IHdhaXRpbmcgZm9yIGVuZHBvaW50XCIsIHsgZW5kcG9pbnRJZCwgc3RhdGUgfSk7XG4gICAgYXdhaXQgcG9sbERlbGF5KGF0dGVtcHQsIEVORFBPSU5UX1JFQURZX1BPTExfTVMsIHNpZ25hbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEV4ZWN1dGlvbkVycm9yKGBMYWtlYmFzZSBlbmRwb2ludCBkaWQgbm90IGJlY29tZSByZWFkeTogJHtlbmRwb2ludElkfWAsIHtcbiAgICBjb250ZXh0OiB7XG4gICAgICBwcm9qZWN0LFxuICAgICAgYnJhbmNoLFxuICAgICAgZW5kcG9pbnRJZCxcbiAgICAgIHRpbWVvdXRNczogRU5EUE9JTlRfUkVBRFlfVElNRU9VVF9NUyxcbiAgICAgIGxhc3RTdGF0ZTogbGFzdD8uc3RhdHVzPy5jdXJyZW50X3N0YXRlID8/IFwidW5rbm93blwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFBpY2sgdGhlIGRlZmF1bHQgYnJhbmNoIGZvciBhIHByb2plY3QuIFByZWZlcnMgdGhlIGJyYW5jaCBmbGFnZ2VkXG4gKiBgc3RhdHVzLmRlZmF1bHQ6IHRydWVgIChzZXJ2ZXItc2lkZSBkZWZhdWx0LCB0eXBpY2FsbHkgYHByb2R1Y3Rpb25gXG4gKiB1bmxlc3MgdGhlIHByb2plY3Qgb3duZXIgY2hhbmdlZCBpdCkuIEZhbGxzIGJhY2sgdG8gdGhlIG9ubHkgYnJhbmNoXG4gKiB3aGVuIHRoZXJlJ3MgZXhhY3RseSBvbmUuIE90aGVyd2lzZSB0aHJvd3Mgd2l0aCB0aGUgY2FuZGlkYXRlIGxpc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBpY2tCcmFuY2goXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIHByb2plY3Q6IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBicmFuY2hlcyA9IGF3YWl0IGxpc3RCcmFuY2hlcyh3cywgcHJvamVjdCwgc2lnbmFsKTtcbiAgaWYgKGJyYW5jaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5yZXNvdXJjZU5vdEZvdW5kKFxuICAgICAgYExha2ViYXNlIGJyYW5jaCBpbiBwcm9qZWN0ICcke3Byb2plY3R9J2AsXG4gICAgICBcIlRoZSBwcm9qZWN0IGhhcyBubyBicmFuY2hlczsgY3JlYXRlIG9uZSBvciBzZXQgY29uZmlnLmJyYW5jaC5cIixcbiAgICApO1xuICB9XG4gIGNvbnN0IGZsYWdnZWQgPSBicmFuY2hlcy5maW5kKChiKSA9PiBiLnN0YXR1cz8uZGVmYXVsdCA9PT0gdHJ1ZSk7XG4gIGNvbnN0IGNob2ljZSA9XG4gICAgcGFyc2VSZXNvdXJjZVBhdGgoZmxhZ2dlZD8ubmFtZSkuYnJhbmNoID8/XG4gICAgKGJyYW5jaGVzLmxlbmd0aCA9PT0gMSA/IHBhcnNlUmVzb3VyY2VQYXRoKGJyYW5jaGVzWzBdIS5uYW1lKS5icmFuY2ggOiB1bmRlZmluZWQpO1xuICBpZiAoIWNob2ljZSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBicmFuY2hlc1xuICAgICAgLm1hcCgoYikgPT4gcGFyc2VSZXNvdXJjZVBhdGgoYi5uYW1lKS5icmFuY2gpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSlcbiAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgXCJMYWtlYmFzZVwiLFxuICAgICAgYFByb2plY3QgJyR7cHJvamVjdH0nIGhhcyBtdWx0aXBsZSBicmFuY2hlcyBhbmQgbm9uZSBtYXJrZWQgZGVmYXVsdDsgc2V0IGNvbmZpZy5icmFuY2ggb3IgaW5jbHVkZSB0aGUgYnJhbmNoIGluIExBS0VCQVNFX0VORFBPSU5ULiBDYW5kaWRhdGVzOiAke2NhbmRpZGF0ZXN9YCxcbiAgICApO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImF1dG9wZzogcmVzb2x2ZWQgYnJhbmNoXCIsIHsgcHJvamVjdCwgYnJhbmNoOiBjaG9pY2UgfSk7XG4gIHJldHVybiBjaG9pY2U7XG59XG5cbi8qKlxuICogUGljayB0aGUgcHJpbWFyeSBlbmRwb2ludCBmb3IgYSAocHJvamVjdCwgYnJhbmNoKS4gUHJlZmVyc1xuICogYHN0YXR1cy5lbmRwb2ludF90eXBlID09PSBFTkRQT0lOVF9UWVBFX1JFQURfV1JJVEVgOyBmYWxscyBiYWNrIHRvXG4gKiB0aGUgb25seSBlbmRwb2ludCB3aGVuIHRoZXJlJ3MgZXhhY3RseSBvbmUuIFJldHVybnMgYHsgbmFtZSwgaG9zdCB9YFxuICogc28gdGhlIGNhbGxlciBjYW4gcG9wdWxhdGUgYm90aCBgTEFLRUJBU0VfRU5EUE9JTlRgIGFuZCBgUEdIT1NUYFxuICogZnJvbSBhIHNpbmdsZSBjYWxsLlxuICovXG5hc3luYyBmdW5jdGlvbiBwaWNrRW5kcG9pbnQoXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIHByb2plY3Q6IHN0cmluZyxcbiAgYnJhbmNoOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgaG9zdD86IHN0cmluZyB9PiB7XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGxpc3RFbmRwb2ludHMod3MsIHByb2plY3QsIGJyYW5jaCwgc2lnbmFsKTtcbiAgaWYgKGVuZHBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICAgIGBMYWtlYmFzZSBlbmRwb2ludCBpbiAncHJvamVjdHMvJHtwcm9qZWN0fS9icmFuY2hlcy8ke2JyYW5jaH0nYCxcbiAgICAgIFwiVGhlIGJyYW5jaCBoYXMgbm8gZW5kcG9pbnRzOyBjcmVhdGUgb25lIG9yIHNldCBMQUtFQkFTRV9FTkRQT0lOVC5cIixcbiAgICApO1xuICB9XG4gIGNvbnN0IHByaW1hcnkgPVxuICAgIGVuZHBvaW50cy5maW5kKChlKSA9PiBlLnN0YXR1cz8uZW5kcG9pbnRfdHlwZSA9PT0gUkVBRF9XUklURV9FTkRQT0lOVF9UWVBFKSA/P1xuICAgIChlbmRwb2ludHMubGVuZ3RoID09PSAxID8gZW5kcG9pbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgaWYgKCFwcmltYXJ5Py5uYW1lKSB7XG4gICAgY29uc3QgbmFtZXMgPSBlbmRwb2ludHMubWFwKChlKSA9PiBlLm5hbWUpLmZpbHRlcihCb29sZWFuKTtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIkxha2ViYXNlXCIsXG4gICAgICBgQnJhbmNoIGhhcyBubyBwcmltYXJ5IHJlYWQtd3JpdGUgZW5kcG9pbnQ7IHNldCBMQUtFQkFTRV9FTkRQT0lOVCBvciBjb25maWcuZW5kcG9pbnQuIENhbmRpZGF0ZXM6ICR7bmFtZXMuam9pbihcIiwgXCIpfWAsXG4gICAgKTtcbiAgfVxuICBjb25zdCBob3N0ID0gcHJpbWFyeS5zdGF0dXM/Lmhvc3RzPy5ob3N0O1xuICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IHJlc29sdmVkIGVuZHBvaW50XCIsIHsgZW5kcG9pbnQ6IHByaW1hcnkubmFtZSwgaG9zdCB9KTtcbiAgcmV0dXJuIHsgbmFtZTogcHJpbWFyeS5uYW1lLCBob3N0IH07XG59XG5cbi8qKlxuICogUGljayB0aGUgZGVmYXVsdCBwb3N0Z3JlcyBkYXRhYmFzZSBmb3IgYSAocHJvamVjdCwgYnJhbmNoKS4gVGhlXG4gKiBQb3N0Z3JlcyBkYXRhYmFzZSBOQU1FIChgc3RhdHVzLnBvc3RncmVzX2RhdGFiYXNlYCkgaXMgd2hhdFxuICogYFBHREFUQUJBU0VgIG5lZWRzIC0gdGhpcyBkaWZmZXJzIGZyb20gdGhlIHJlc291cmNlIGlkLCB3aGljaCBjYW5cbiAqIHVzZSBhIGRpZmZlcmVudCBzZXBhcmF0b3IgKGUuZy4gcmVzb3VyY2UgYGRhdGFicmlja3MtcG9zdGdyZXNgXG4gKiBzdXJmYWNlcyBhcyBkYXRhYmFzZSBgZGF0YWJyaWNrc19wb3N0Z3Jlc2ApLiBQcmVmZXJzXG4gKiBgZGF0YWJyaWNrc19wb3N0Z3Jlc2AgKHRoZSBMYWtlYmFzZSBkZWZhdWx0KSwgb3RoZXJ3aXNlIHRoZSBvbmx5XG4gKiBkYXRhYmFzZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcGlja0RhdGFiYXNlKFxuICB3czogV29ya3NwYWNlQ2xpZW50LFxuICBwcm9qZWN0OiBzdHJpbmcsXG4gIGJyYW5jaDogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRhdGFiYXNlcyA9IGF3YWl0IGxpc3REYXRhYmFzZXMod3MsIHByb2plY3QsIGJyYW5jaCwgc2lnbmFsKTtcbiAgaWYgKGRhdGFiYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICAgIGBMYWtlYmFzZSBkYXRhYmFzZSBpbiAncHJvamVjdHMvJHtwcm9qZWN0fS9icmFuY2hlcy8ke2JyYW5jaH0nYCxcbiAgICAgIFwiVGhlIGJyYW5jaCBoYXMgbm8gZGF0YWJhc2VzOyBjcmVhdGUgb25lIG9yIHNldCBQR0RBVEFCQVNFLlwiLFxuICAgICk7XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBkYXRhYmFzZXNcbiAgICAubWFwKChkKSA9PiBkLnN0YXR1cz8ucG9zdGdyZXNfZGF0YWJhc2UpXG4gICAgLmZpbHRlcigobik6IG4gaXMgc3RyaW5nID0+IEJvb2xlYW4obikpO1xuICBjb25zdCBjaG9pY2UgPVxuICAgIG5hbWVzLmZpbmQoKG4pID0+IG4gPT09IERFRkFVTFRfREFUQUJBU0UpID8/IChuYW1lcy5sZW5ndGggPT09IDEgPyBuYW1lc1swXSA6IHVuZGVmaW5lZCk7XG4gIGlmICghY2hvaWNlKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgXCJMYWtlYmFzZVwiLFxuICAgICAgYE11bHRpcGxlIGRhdGFiYXNlcyBhbmQgbm8gJyR7REVGQVVMVF9EQVRBQkFTRX0nOyBzZXQgUEdEQVRBQkFTRSBvciBjb25maWcuZGF0YWJhc2UuIENhbmRpZGF0ZXM6ICR7bmFtZXMuam9pbihcIiwgXCIpfWAsXG4gICAgKTtcbiAgfVxuICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IHJlc29sdmVkIGRhdGFiYXNlXCIsIHsgZGF0YWJhc2U6IGNob2ljZSB9KTtcbiAgcmV0dXJuIGNob2ljZTtcbn1cbiJdfQ==
759
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UtcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBRUgsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixjQUFjLEVBQ2Qsd0JBQXdCLEVBR3hCLGVBQWUsR0FDaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFDTCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFlBQVksSUFBSSxrQkFBa0IsRUFDbEMsU0FBUyxHQUdWLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLEdBQUcsRUFDSCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFFBQVEsRUFDUixhQUFhLEVBQ2IsMEJBQTBCLEVBQzFCLGlCQUFpQixFQUNqQixZQUFZLEdBQ2IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVuRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDL0MsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUM7QUFDckMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQzFCLE1BQU0sZ0JBQWdCLEdBQVksU0FBUyxDQUFDO0FBQzVDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLDhEQUE4RDtBQUM5RCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QixNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsTUFBTSxpQkFB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TSxLQUFLLEdBQUcsU0FBUztTQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUM7U0FDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLE1BQU0sR0FDVixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sa0JBQWtCLENBQUMsaUJBQWlCLENBQ3hDLFVBQVUsRUFDViw4QkFBOEIsZ0JBQWdCLHFEQUFxRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3RILENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExha2ViYXNlIFBvc3RncmVzIGNvbm5lY3Rpb24gcmVzb2x2ZXIuXG4gKlxuICogUmVhZHMgdGhlIHNhbWUgZW52IHZhcnMgdGhlIGBsYWtlYmFzZWAgcGx1Z2luIGNvbnN1bWVzIChgUEdIT1NUYCxcbiAqIGBQR0RBVEFCQVNFYCwgYFBHUE9SVGAsIGBQR1NTTE1PREVgLCBgTEFLRUJBU0VfRU5EUE9JTlRgKSBhbmQgZmlsbHMgaW5cbiAqIHdoaWNoZXZlciBwaWVjZXMgYXJlIG1pc3NpbmcgdXNpbmcgdGhlIExha2ViYXNlIEF1dG9zY2FsaW5nIFJFU1QgQVBJXG4gKiB1bmRlciBgL2FwaS8yLjAvcG9zdGdyZXMvYCB2aWEgdGhlIERhdGFicmlja3Mgd29ya3NwYWNlIGNsaWVudC5cbiAqXG4gKiBgTEFLRUJBU0VfRU5EUE9JTlRgIChhbmQgYGNvbmZpZy5lbmRwb2ludGApIGFjY2VwdCBhbnl0aGluZ1xuICoge0BsaW5rIHBhcnNlQWRkcmVzc30gdW5kZXJzdGFuZHMgLSBjYW5vbmljYWwgcmVzb3VyY2UgcGF0aHMsIFBvc3RncmVzXG4gKiBVUklzLCBiYXJlIGhvc3RuYW1lcywgb3IgYmFyZSBwcm9qZWN0IGlkcy4gVGhlIHJlc29sdmVyIGxheWVyc1xuICogd2hhdGV2ZXIgcGllY2VzIGZhbGwgb3V0IG9mIHBhcnNpbmcgdW5kZXIgZXhwbGljaXQgY29uZmlnIC8gZW52XG4gKiB2YWx1ZXMsIHRoZW4gZmlsbHMgdGhlIHJlbWFpbmluZyBnYXBzIHZpYSB0aGUgQVBJOlxuICpcbiAqICAgMS4gUmV2ZXJzZS1sb29rdXA6IHdoZW4gYSBob3N0IGlzIGtub3duIGJ1dCBubyByZXNvdXJjZSBwYXRoIGlzLFxuICogICAgICBzY2FuIHByb2plY3RzIC0+IGJyYW5jaGVzIC0+IGVuZHBvaW50cyBmb3IgYSBtYXRjaGluZ1xuICogICAgICBgc3RhdHVzLmhvc3RzLmhvc3RgIGFuZCByZWNvdmVyIHRoZSBvd25pbmcgcHJvamVjdC9icmFuY2gvZW5kcG9pbnQuXG4gKiAgIDIuIFBpY2s6IHdoZW4gYSBwcm9qZWN0IGlzIGtub3duIGJ1dCBjaGlsZCByZXNvdXJjZXMgYXJlbid0LCBwcmVmZXJcbiAqICAgICAgdGhlIHNlcnZlci1zaWRlIGRlZmF1bHQgKGBzdGF0dXMuZGVmYXVsdGAsIGBFTkRQT0lOVF9UWVBFX1JFQURfV1JJVEVgLFxuICogICAgICBgZGF0YWJyaWNrc19wb3N0Z3Jlc2ApIGFuZCBmYWxsIGJhY2sgdG8gXCJ0aGUgb25seSBvbmVcIiB3aGVuIGFcbiAqICAgICAgbGlzdGluZyByZXR1cm5zIGEgc2luZ2xlIHJlc3VsdC5cbiAqICAgMy4gQXV0by1jcmVhdGU6IHdoZW4gbm8gcHJvamVjdHMgZXhpc3QgYXQgYWxsLCBjcmVhdGUgb25lIHdob3NlXG4gKiAgICAgIGlkIGRlZmF1bHRzIHRvIGBwcm9qZWN0Lm5hbWUoKWAgc2x1Z2lmaWVkIChvdmVycmlkZVxuICogICAgICB3aXRoIGBjb25maWcuYXV0b0NyZWF0ZTogXCJteS1pZFwiYCBvciBkaXNhYmxlIHdpdGhcbiAqICAgICAgYGNvbmZpZy5hdXRvQ3JlYXRlOiBmYWxzZWApLiBUaGUgY3JlYXRlIGNhbGwgaXMgaWRlbXBvdGVudCAtIGFuXG4gKiAgICAgIGBBTFJFQURZX0VYSVNUU2AgcmVzcG9uc2UgZnJvbSBhIGNvbmN1cnJlbnQgYm9vdCBpcyB0cmVhdGVkIGFzXG4gKiAgICAgIHN1Y2Nlc3MuIFRoZW4gcG9sbCB0aGUgZGVmYXVsdCBlbmRwb2ludCB1bnRpbCBpdCByZXBvcnRzXG4gKiAgICAgIGBjdXJyZW50X3N0YXRlYCBgUkVBRFlgIG9yIGBJRExFYC5cbiAqXG4gKiB7QGxpbmsgYXBwbHlMYWtlYmFzZVRvRW52fSB3cml0ZXMgdGhlIHJlc29sdmVkIHZhbHVlcyBiYWNrIHRvXG4gKiBgcHJvY2Vzcy5lbnZgIHNvIHRoZSBkb3duc3RyZWFtIGBsYWtlYmFzZWAgcGx1Z2luIHBpY2tzIHRoZW0gdXAuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuZGF0YWJyaWNrcy5jb20vYXBpL3dvcmtzcGFjZS9wb3N0Z3Jlc1xuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIEV4ZWN1dGlvbkVycm9yLFxuICBnZXRVc2VybmFtZVdpdGhBcGlMb29rdXAsXG4gIHR5cGUgTGFrZWJhc2VQb29sLFxuICB0eXBlIFdvcmtzcGFjZUNsaWVudCBhcyBBcHBLaXRXb3Jrc3BhY2VDbGllbnQsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgcHJvamVjdFV0aWxzLCByZXNvbHZlVmFsdWUgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQge1xuICBwYXJzZUFkZHJlc3MsXG4gIHBhcnNlUmVzb3VyY2VQYXRoLFxuICBwYXJzZVNzbE1vZGUgYXMgcGFyc2VOYXRpdmVTc2xNb2RlLFxuICBTU0xfTU9ERVMsXG4gIHR5cGUgTGFrZWJhc2VDb25uZWN0aW9uSW5wdXRzLFxuICB0eXBlIFNzbE1vZGUsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2xha2ViYXNlXCI7XG5pbXBvcnQge1xuICBsb2csXG4gIHNsZWVwLFxuICB0b0Vycm9yLFxuICBpc1JlY29yZCxcbiAgdGNwUG9ydFNjaGVtYSxcbiAgZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMsXG4gIHRvU2x1Z1dpdGhPcHRpb25zLFxuICBNQVhfVENQX1BPUlQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBjcmVhdGVXb3Jrc3BhY2VDbGllbnQsIHRvQ29udGV4dCB9IGZyb20gXCIuL2RhdGFicmlja3MudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImxha2ViYXNlLXJlc29sdmVyXCIpO1xuY29uc3QgQVBJX0JBU0UgPSBcIi9hcGkvMi4wL3Bvc3RncmVzXCI7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA1NDMyO1xuY29uc3QgREVGQVVMVF9TU0xfTU9ERTogU3NsTW9kZSA9IFwicmVxdWlyZVwiO1xuY29uc3QgREVGQVVMVF9QR19WRVJTSU9OID0gMTc7XG4vKiogTGFrZWJhc2UgcHJvamVjdCBpZHM6IGBeW2Etel1bYS16MC05LV17MCw2MX1bYS16MC05XSRgLiAqL1xuY29uc3QgUFJPSkVDVF9JRF9NQVhfTEVOID0gNjM7XG5jb25zdCBPUEVSQVRJT05fVElNRU9VVF9NUyA9IDUgKiA2MF8wMDA7XG5jb25zdCBPUEVSQVRJT05fUE9MTF9NUyA9IDJfMDAwO1xuY29uc3QgRU5EUE9JTlRfUkVBRFlfVElNRU9VVF9NUyA9IDUgKiA2MF8wMDA7XG5jb25zdCBFTkRQT0lOVF9SRUFEWV9QT0xMX01TID0gMl8wMDA7XG4vKiogQ2VpbGluZyBvbiBhIHNpbmdsZSBiYWNrb2ZmIHN0ZXAsIHNvIGEgbG9uZyB3YWl0IHN0aWxsIHBvbGxzIHJlZ3VsYXJseS4gKi9cbmNvbnN0IFBPTExfTUFYX0RFTEFZX01TID0gMTVfMDAwO1xuY29uc3QgUE9MTF9CQUNLT0ZGX0ZBQ1RPUiA9IDEuNTtcbi8qKiBGcmFjdGlvbiBvZiBlYWNoIGRlbGF5IGFwcGxpZWQgYXMgKy8tIGppdHRlciwgc28gY29uY3VycmVudCBib290cyBkZXN5bmNocm9uaXplLiAqL1xuY29uc3QgUE9MTF9KSVRURVJfUkFUSU8gPSAwLjI7XG4vKiogRW5kcG9pbnQgYHN0YXR1cy5lbmRwb2ludF90eXBlYCBmb3IgdGhlIHdyaXRhYmxlIHByaW1hcnkuICovXG5jb25zdCBSRUFEX1dSSVRFX0VORFBPSU5UX1RZUEUgPSBcIkVORFBPSU5UX1RZUEVfUkVBRF9XUklURVwiO1xuLyoqIEVuZHBvaW50IGBzdGF0dXMuY3VycmVudF9zdGF0ZWAgdmFsdWVzIHRoYXQgd2lsbCBhY2NlcHQgYSBjb25uZWN0aW9uLiAqL1xuY29uc3QgQ09OTkVDVEFCTEVfRU5EUE9JTlRfU1RBVEVTID0gbmV3IFNldChbXCJSRUFEWVwiLCBcIklETEVcIl0pO1xuLyoqIEVuZHBvaW50IGBzdGF0dXMuY3VycmVudF9zdGF0ZWAgYmVmb3JlIGEgaG9zdG5hbWUgaXMgbWVhbmluZ2Z1bC4gKi9cbmNvbnN0IElOSVRJQUxJWklOR19FTkRQT0lOVF9TVEFURSA9IFwiSU5JVElBTElaSU5HXCI7XG4vKiogTGFrZWJhc2UncyBvd24gZGVmYXVsdCBQb3N0Z3JlcyBkYXRhYmFzZSBuYW1lLiAqL1xuY29uc3QgREVGQVVMVF9EQVRBQkFTRSA9IFwiZGF0YWJyaWNrc19wb3N0Z3Jlc1wiO1xuXG4vKipcbiAqIFVzZXItc3VwcGxpZWQgTGFrZWJhc2UgaW5wdXRzIChjb25maWcgb3IgZW52KSBiZWZvcmUgYW55IEFQSSByZXNvbHV0aW9uLlxuICogRXh0ZW5kcyB7QGxpbmsgTGFrZWJhc2VDb25uZWN0aW9uSW5wdXRzfSB3aXRoIHJlc29sdmVyLW9ubHkgb3B0aW9ucy5cbiAqIHtAbGluayByZXNvbHZlTGFrZWJhc2VDb25uZWN0aW9ufSBmaWxscyBnYXBzIGZyb20gdGhlIExha2ViYXNlIEFQSSB3aGVuXG4gKiBpdCBoYXMgZW5vdWdoIGNvbnRleHQgKHR5cGljYWxseSBhIGBwcm9qZWN0YCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VSZXNvbHZlcklucHV0cyBleHRlbmRzIExha2ViYXNlQ29ubmVjdGlvbklucHV0cyB7XG4gIC8qKiBBdXRoLXJlc29sdmVkIHByb2ZpbGUgdXNlZCBmb3IgYnVuZGxlIHZhbGlkYXRpb24gYW5kIHdvcmtzcGFjZSBBUEkgY2FsbHMuICovXG4gIGJ1bmRsZVByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGF0IHRvIGRvIHdoZW4gbm8gcHJvamVjdCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZSBhdCBhbGwuXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpOiBkZXJpdmUgYSBwcm9qZWN0IGlkIGZyb21cbiAgICogICB7QGxpbmsgcHJvamVjdC5uYW1lfSAodGhlIGhvc3QgcmVwbydzIGBwYWNrYWdlLmpzb25gXG4gICAqICAgbmFtZSkgc2x1Z2lmaWVkIHRvIExha2ViYXNlIGlkIGNvbnN0cmFpbnRzLCB0aGVuIGNyZWF0ZSBpdC5cbiAgICogLSBgc3RyaW5nYDogY3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCB0aGlzIGV4YWN0IGlkLlxuICAgKiAtIGBmYWxzZWA6IHNraXAgY3JlYXRpb24gYW5kIHRocm93IHdpdGggYSBjbGVhciBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgYXV0b0NyZWF0ZT86IHN0cmluZyB8IGZhbHNlO1xufVxuXG4vKiogRnVsbHktcmVzb2x2ZWQgTGFrZWJhc2UgUG9zdGdyZXMgY29ubmVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VDb25uZWN0aW9uIGV4dGVuZHMgTGFrZWJhc2VDb25uZWN0aW9uSW5wdXRzIHtcbiAgcG9ydDogbnVtYmVyO1xuICBzc2xNb2RlOiBTc2xNb2RlO1xufVxuXG4vKipcbiAqIENhcHR1cmUgQXBwS2l0J3MgZXhpc3Rpbmcgc2VydmljZS1wcmluY2lwYWwgTGFrZWJhc2UgcG9vbC5cbiAqXG4gKiBDYWxsIHRoaXMgZHVyaW5nIGBzZXR1cDpjb21wbGV0ZWAsIG91dHNpZGUgYW55IGBhc1VzZXIoKWAgc2NvcGUuIEFwcEtpdCdzXG4gKiBleHBvcnRlZCBwb29sIHJvdXRlcyBkeW5hbWljYWxseSBieSByZXF1ZXN0IGNvbnRleHQsIGJ1dCBpdHMgcnVudGltZVxuICogYGFjdGl2ZVBvb2woKWAgbWV0aG9kIHJldHVybnMgdGhlIGFscmVhZHktY3JlYXRlZCB1bmRlcmx5aW5nIHBvb2wgc2VsZWN0ZWQgaW5cbiAqIHRoZSBjdXJyZW50IGNvbnRleHQuIENhcHR1cmluZyBpdCBvbmNlIGF0IHN0YXJ0dXAgcGlucyBhcHBsaWNhdGlvbi1vd25lZFxuICogc3RvcmFnZSB0byB0aGUgc2VydmljZSBwcmluY2lwYWwgd2l0aG91dCBjcmVhdGluZyBhbm90aGVyIHBvb2wgb3IgY29ubmVjdGlvbi5cbiAqXG4gKiBBIGZ1dHVyZSBBcHBLaXQgdmVyc2lvbiBtYXkgZXhwb3J0IGEgZml4ZWQgcG9vbCBkaXJlY3RseTsgaW4gdGhhdCBjYXNlIHRoZVxuICogcG9vbCBoYXMgbm8gYGFjdGl2ZVBvb2woKWAgbWV0aG9kIGFuZCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlU2VydmljZVByaW5jaXBhbFBvb2wocG9vbDogTGFrZWJhc2VQb29sKTogTGFrZWJhc2VQb29sIHtcbiAgY29uc3Qgcm91dGluZ1Bvb2wgPSBwb29sIGFzIExha2ViYXNlUG9vbCAmIHsgYWN0aXZlUG9vbD86ICgpID0+IExha2ViYXNlUG9vbCB9O1xuICByZXR1cm4gcm91dGluZ1Bvb2wuYWN0aXZlUG9vbD8uY2FsbChwb29sKSA/PyBwb29sO1xufVxuXG4vKipcbiAqIEV2ZXJ5IGZpZWxkIG9mIHRoZSBMYWtlYmFzZSBSRVNUIHBheWxvYWRzIGlzIG1vZGVsbGVkIGFzIG9wdGlvbmFsIGFuZFxuICogdmFsaWRhdGVkIGF0IHRoZSBib3VuZGFyeSByYXRoZXIgdGhhbiBhc3NlcnRlZCB3aXRoIGEgY2FzdDogdGhlIHBpY2tlcnMgYmVsb3dcbiAqIGJyYW5jaCBvbiBgc3RhdHVzLipgLCBhbmQgYSBzaGFwZSBjaGFuZ2UgdXBzdHJlYW0gc2hvdWxkIHN1cmZhY2UgYXMgb25lIGxvdWRcbiAqIGVycm9yIGhlcmUgaW5zdGVhZCBvZiBhbiBgdW5kZWZpbmVkYCB0aHJlZSBmcmFtZXMgYXdheS4gRW51bS1zaGFwZWQgZmllbGRzXG4gKiBzdGF5IGBzdHJpbmdgIHNvIGEgbmV3bHkgYWRkZWQgc3RhdGUgZG9lcyBub3QgZmFpbCB0aGUgd2hvbGUgcmVzcG9uc2UuXG4gKi9cbmNvbnN0IHByb2plY3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkZ1bGwgcmVzb3VyY2UgcGF0aDogcHJvamVjdHMve3B9LlwiKSxcbn0pO1xudHlwZSBQcm9qZWN0ID0gei5pbmZlcjx0eXBlb2YgcHJvamVjdFNjaGVtYT47XG5cbmNvbnN0IGVuZHBvaW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJGdWxsIHJlc291cmNlIHBhdGg6IHByb2plY3RzL3twfS9icmFuY2hlcy97Yn0vZW5kcG9pbnRzL3tlfS5cIiksXG4gIHVpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiU3RhYmxlIGVuZHBvaW50IHVpZCBhc3NpZ25lZCBieSBMYWtlYmFzZS5cIiksXG4gIHN0YXR1czogelxuICAgIC5vYmplY3Qoe1xuICAgICAgZW5kcG9pbnRfdHlwZTogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFwiRW5kcG9pbnQgcm9sZSwgc3VjaCBhcyBFTkRQT0lOVF9UWVBFX1JFQURfV1JJVEUuXCIpLFxuICAgICAgaG9zdHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaG9zdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiV3JpdGFibGUgcHJpbWFyeSBob3N0bmFtZS5cIiksXG4gICAgICAgICAgcmVhZF9vbmx5X2hvc3Q6IHpcbiAgICAgICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgICAgIC5kZXNjcmliZShcIlJlYWQtb25seSByZXBsaWNhIGhvc3RuYW1lIHdoZW4gcHJlc2VudC5cIiksXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcIlJlc29sdmVkIGhvc3RuYW1lcy4gaG9zdHMuaG9zdCBpcyB0aGUgd3JpdGFibGUgcHJpbWFyeS5cIiksXG4gICAgICBjdXJyZW50X3N0YXRlOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXCJDb21wdXRlIHN0YXRlOiBJTklUSUFMSVpJTkcsIFNUQVJUSU5HLCBSRUFEWSwgSURMRSwgYW5kIGxhdGVyIHZhbHVlcy5cIiksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcIlNlcnZlci1zaWRlIHN0YXRlLiBSdW50aW1lIGhvc3RuYW1lcyBsaXZlIGhlcmUsIG5vdCBpbiB0aGUgc3BlYyBibG9jay5cIiksXG59KTtcbnR5cGUgRW5kcG9pbnQgPSB6LmluZmVyPHR5cGVvZiBlbmRwb2ludFNjaGVtYT47XG5cbmNvbnN0IGJyYW5jaFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRnVsbCByZXNvdXJjZSBwYXRoOiBwcm9qZWN0cy97cH0vYnJhbmNoZXMve2J9LlwiKSxcbiAgc3RhdHVzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBkZWZhdWx0OiB6XG4gICAgICAgIC5ib29sZWFuKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFwiVHJ1ZSBmb3IgdGhlIHByb2plY3QncyBkZWZhdWx0IGJyYW5jaCwgc3VjaCBhcyBwcm9kdWN0aW9uLlwiKSxcbiAgICAgIGN1cnJlbnRfc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkJyYW5jaCBjb21wdXRlIHN0YXRlIHJlcG9ydGVkIGJ5IExha2ViYXNlLlwiKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxufSk7XG50eXBlIEJyYW5jaCA9IHouaW5mZXI8dHlwZW9mIGJyYW5jaFNjaGVtYT47XG5cbmNvbnN0IGRhdGFiYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXCJGdWxsIHJlc291cmNlIHBhdGg6IHByb2plY3RzL3twfS9icmFuY2hlcy97Yn0vZGF0YWJhc2VzL3tkfS5cIiksXG4gIHN0YXR1czogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcG9zdGdyZXNfZGF0YWJhc2U6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkFjdHVhbCBQb3N0Z3JlcyBkYXRhYmFzZSBuYW1lIHVzZWQgYXMgUEdEQVRBQkFTRS4gTWF5IGRpZmZlciBmcm9tIHRoZSByZXNvdXJjZSBpZC5cIixcbiAgICAgICAgKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxufSk7XG50eXBlIERhdGFiYXNlID0gei5pbmZlcjx0eXBlb2YgZGF0YWJhc2VTY2hlbWE+O1xuXG4vKipcbiAqIExha2ViYXNlIFJFU1QgbGlzdCByZXNwb25zZXMgZm9sbG93IHRoZSBHb29nbGUgQUlQIGNvbnZlbnRpb246XG4gKiBgeyA8cGx1cmFsLXJlc291cmNlPjogVFtdLCBuZXh0X3BhZ2VfdG9rZW4/OiBzdHJpbmcgfWAuIFdlIG9ubHkgcmVhZFxuICogdGhlIGZpcnN0IHBhZ2U7IGZvciBhdXRvLWNvbmZpZydzIFwicGljayBzb21ldGhpbmcgc2Vuc2libGVcIiBzZW1hbnRpY3MgdGhlXG4gKiBjYXAgaXMgZmluZS5cbiAqL1xuY29uc3QgbGlzdFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBuZXh0X3BhZ2VfdG9rZW46IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcIkFJUCBwYWdlIHRva2VuLiBPbmx5IHRoZSBmaXJzdCBwYWdlIGlzIGNvbnN1bWVkLlwiKSxcbiAgcHJvamVjdHM6IHouYXJyYXkocHJvamVjdFNjaGVtYSkub3B0aW9uYWwoKSxcbiAgYnJhbmNoZXM6IHouYXJyYXkoYnJhbmNoU2NoZW1hKS5vcHRpb25hbCgpLFxuICBlbmRwb2ludHM6IHouYXJyYXkoZW5kcG9pbnRTY2hlbWEpLm9wdGlvbmFsKCksXG4gIGRhdGFiYXNlczogei5hcnJheShkYXRhYmFzZVNjaGVtYSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIExvbmctcnVubmluZyBvcGVyYXRpb24gZW52ZWxvcGUgcmV0dXJuZWQgYnkgbXV0YXRpbmcgUkVTVCBjYWxscy5cbiAqIGBkb25lOiB0cnVlYCBtZWFucyB0ZXJtaW5hbDsgY2hlY2sgYGVycm9yYCBiZWZvcmUgcmVhZGluZyBgcmVzcG9uc2VgLlxuICovXG5jb25zdCBvcGVyYXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk9wZXJhdGlvbiByZXNvdXJjZSBuYW1lLlwiKSxcbiAgZG9uZTogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRydWUgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIHRlcm1pbmFsLlwiKSxcbiAgZXJyb3I6IHoudW5rbm93bigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJFcnJvciBwYXlsb2FkIHByZXNlbnQgd2hlbiB0aGUgb3BlcmF0aW9uIGZhaWxlZC5cIiksXG4gIHJlc3BvbnNlOiB6LnVua25vd24oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmVzdWx0IHBheWxvYWQgcHJlc2VudCB3aGVuIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLlwiKSxcbn0pO1xudHlwZSBPcGVyYXRpb24gPSB6LmluZmVyPHR5cGVvZiBvcGVyYXRpb25TY2hlbWE+O1xuXG4vKiogYFBHUE9SVGAgbXVzdCBsYW5kIGluc2lkZSB0aGUgVENQIHBvcnQgcmFuZ2UuICovXG5jb25zdCBwb3J0U2NoZW1hID0gdGNwUG9ydFNjaGVtYTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGBQR1BPUlRgLXNoYXBlZCB2YWx1ZS4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHVuc2V0LCBhbmQgdGhyb3dzXG4gKiBhIHtAbGluayBWYWxpZGF0aW9uRXJyb3J9IG5hbWluZyBgUEdQT1JUYCBmb3IgYW55dGhpbmcgdGhhdCBpcyBub3QgYSBUQ1BcbiAqIHBvcnQsIHNvIGEgdHlwbyBjYW5ub3QgcmVhY2ggdGhlIGNvbm5lY3Rpb24gcmVjb3JkIGFzIGBOYU5gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQb3J0KHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcGFyc2VkID0gcG9ydFNjaGVtYS5zYWZlUGFyc2UodmFsdWUpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcIlBHUE9SVFwiLCB2YWx1ZSwgYGEgVENQIHBvcnQgYmV0d2VlbiAxIGFuZCAke01BWF9UQ1BfUE9SVH1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkLmRhdGE7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBgUEdTU0xNT0RFYC1zaGFwZWQgdmFsdWUuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB1bnNldCwgYW5kXG4gKiB0aHJvd3MgYSB7QGxpbmsgVmFsaWRhdGlvbkVycm9yfSBuYW1pbmcgYFBHU1NMTU9ERWAgZm9yIGFuIHVuc3VwcG9ydGVkIG1vZGVcbiAqIHJhdGhlciB0aGFuIGhhbmRpbmcgYHBnYCBhIHZhbHVlIGl0IHdpbGwgcmVqZWN0IGF0IGNvbm5lY3QgdGltZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3NsTW9kZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogU3NsTW9kZSB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBcIlwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU5hdGl2ZVNzbE1vZGUodmFsdWUpO1xuICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFwiUEdTU0xNT0RFXCIsIHZhbHVlLCBTU0xfTU9ERVMuam9pbihcIiwgXCIpKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG4vKipcbiAqIERlbGF5IGJlZm9yZSB0aGUgbmV4dCBwb2xsIGF0dGVtcHQ6IGV4cG9uZW50aWFsIGJhY2tvZmYgY2FwcGVkIGF0XG4gKiB7QGxpbmsgUE9MTF9NQVhfREVMQVlfTVN9LCBwbHVzIGppdHRlciBzbyBzZXZlcmFsIGFwcHMgYm9vdGluZyBhZ2FpbnN0IHRoZVxuICogc2FtZSB3b3Jrc3BhY2UgZG8gbm90IHJldHJ5IGluIGxvY2tzdGVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dFBvbGxEZWxheShhdHRlbXB0OiBudW1iZXIsIGJhc2VNczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgYmFja29mZiA9IE1hdGgubWluKGJhc2VNcyAqIFBPTExfQkFDS09GRl9GQUNUT1IgKiogYXR0ZW1wdCwgUE9MTF9NQVhfREVMQVlfTVMpO1xuICBjb25zdCBqaXR0ZXIgPSBiYWNrb2ZmICogUE9MTF9KSVRURVJfUkFUSU8gKiAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKTtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgucm91bmQoYmFja29mZiArIGppdHRlcikpO1xufVxuXG4vKipcbiAqIFdhaXQgb3V0IHtAbGluayBuZXh0UG9sbERlbGF5fSBiZWZvcmUgdGhlIG5leHQgYXR0ZW1wdC4gUmVqZWN0cyB3aXRoIHRoZVxuICogc2lnbmFsJ3MgcmVhc29uIHdoZW4gdGhlIGNhbGxlciBjYW5jZWxzIG1pZC13YWl0LCBzbyBhIHBvbGwgbG9vcCB1bndpbmRzXG4gKiBpbnN0ZWFkIG9mIGZpbmlzaGluZyBpdHMgYmFja29mZiBmaXJzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbGxEZWxheShhdHRlbXB0OiBudW1iZXIsIGJhc2VNczogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gc2xlZXAobmV4dFBvbGxEZWxheShhdHRlbXB0LCBiYXNlTXMpLCBzaWduYWwpO1xufVxuXG4vKipcbiAqIFB1bGwgcmVzb2x2ZXIgaW5wdXRzIGZyb20gYHByb2Nlc3MuZW52YCwgcGFyc2UgdGhlIGFkZHJlc3MgYmxvYiwgYW5kXG4gKiBsYXllciBleHBsaWNpdCBjb25maWcgb24gdG9wIHdpdGggdGhpcyBwcmVjZWRlbmNlOlxuICpcbiAqICAgYGNvbmZpZy48ZmllbGQ+YCA+IGBjb25maWdVdGlscy5yZXNvbHZlVmFsdWVgIChzaGFyZWQgY29uZmlnIHNvdXJjZXMpID5cbiAqICAgd2hhdGV2ZXIge0BsaW5rIHBhcnNlQWRkcmVzc30gcmVjb3ZlcmVkIGZyb20gdGhlXG4gKiAgIGBlbmRwb2ludGAgLyBgTEFLRUJBU0VfRU5EUE9JTlRgIGJsb2IuXG4gKlxuICogU2V0IGBjb25maWcuZW5kcG9pbnRgIChvciBgTEFLRUJBU0VfRU5EUE9JTlRgKSB0byBhbnkgaW5wdXRcbiAqIHtAbGluayBwYXJzZUFkZHJlc3N9IHVuZGVyc3RhbmRzOiBjYW5vbmljYWwgcmVzb3VyY2UgcGF0aHMsIFBvc3RncmVzXG4gKiBVUklzLCBiYXJlIGhvc3RuYW1lcywgb3IgYmFyZSBwcm9qZWN0IGlkcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRMYWtlYmFzZUlucHV0cyhcbiAgY29uZmlnPzogTGFrZWJhc2VSZXNvbHZlcklucHV0cyxcbik6IFByb21pc2U8TGFrZWJhc2VSZXNvbHZlcklucHV0cz4ge1xuICBjb25zdCBjb25maWdPcHRpb25zID0geyBidW5kbGVQcm9maWxlOiBjb25maWc/LmJ1bmRsZVByb2ZpbGUgfTtcbiAgY29uc3QgcmF3QWRkcmVzcyA9XG4gICAgY29uZmlnPy5lbmRwb2ludCA/PyByZXNvbHZlVmFsdWUoZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMubGFrZWJhc2VFbmRwb2ludCwgY29uZmlnT3B0aW9ucyk7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlQWRkcmVzcyhyYXdBZGRyZXNzKTtcbiAgY29uc3QgcG9ydEVudiA9IHBhcnNlUG9ydChyZXNvbHZlVmFsdWUoXCJQR1BPUlRcIiwgY29uZmlnT3B0aW9ucykpO1xuICBjb25zdCBzc2xNb2RlRW52ID0gcGFyc2VTc2xNb2RlKHJlc29sdmVWYWx1ZShcIlBHU1NMTU9ERVwiLCBjb25maWdPcHRpb25zKSk7XG4gIGNvbnN0IGNvbmZpZ3VyZWRTc2xNb2RlID0gcGFyc2VTc2xNb2RlKGNvbmZpZz8uc3NsTW9kZSk7XG4gIGNvbnN0IHBhcnNlZFNzbE1vZGUgPSBwYXJzZVNzbE1vZGUocGFyc2VkLnNzbE1vZGUpO1xuICByZXR1cm4ge1xuICAgIHByb2plY3Q6IGNvbmZpZz8ucHJvamVjdCA/PyBwYXJzZWQucHJvamVjdCxcbiAgICBicmFuY2g6IGNvbmZpZz8uYnJhbmNoID8/IHBhcnNlZC5icmFuY2gsXG4gICAgLy8gT25seSBjYW5vbmljYWwgZW5kcG9pbnQgcmVzb3VyY2UgcGF0aHMgc3Vydml2ZSBoZXJlOyBVUklzIGFuZFxuICAgIC8vIGJhcmUgaG9zdG5hbWVzIHNldCBgaG9zdGAgaW5zdGVhZCBhbmQgbGVhdmUgYGVuZHBvaW50YCB1bmRlZmluZWRcbiAgICAvLyB1bnRpbCB0aGUgUkVTVCByZXNvbHZlciBmaWxscyBpdCBpbi5cbiAgICBlbmRwb2ludDogcGFyc2VkLmVuZHBvaW50LFxuICAgIGRhdGFiYXNlOiBjb25maWc/LmRhdGFiYXNlID8/IHJlc29sdmVWYWx1ZShcIlBHREFUQUJBU0VcIiwgY29uZmlnT3B0aW9ucykgPz8gcGFyc2VkLmRhdGFiYXNlLFxuICAgIGhvc3Q6IGNvbmZpZz8uaG9zdCA/PyByZXNvbHZlVmFsdWUoXCJQR0hPU1RcIiwgY29uZmlnT3B0aW9ucykgPz8gcGFyc2VkLmhvc3QsXG4gICAgcG9ydDogY29uZmlnPy5wb3J0ID8/IHBvcnRFbnYgPz8gcGFyc2VkLnBvcnQsXG4gICAgc3NsTW9kZTogY29uZmlndXJlZFNzbE1vZGUgPz8gc3NsTW9kZUVudiA/PyBwYXJzZWRTc2xNb2RlLFxuICAgIGF1dG9DcmVhdGU6IGNvbmZpZz8uYXV0b0NyZWF0ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgZnVsbHktcG9wdWxhdGVkIFBvc3RncmVzIGNvbm5lY3Rpb24gcmVjb3JkIGZyb20gY29uZmlnICsgZW52LlxuICpcbiAqIFJldHVybnMgaW1tZWRpYXRlbHkgd2l0aG91dCBuZXR3b3JrIHRyYWZmaWMgd2hlbiBlbnYgYWxyZWFkeSBzdXBwbGllc1xuICogYGVuZHBvaW50YCwgYGhvc3RgLCBhbmQgYGRhdGFiYXNlYC4gT3RoZXJ3aXNlIGlzc3VlcyBSRVNUIGNhbGxzIGFuZFxuICogbWF5IGF1dG8tY3JlYXRlIGEgcHJvamVjdCAoc2VlIG1vZHVsZSBkb2NzdHJpbmcpLlxuICpcbiAqIGBzaWduYWxgIGNhbmNlbHMgZXZlcnkgUkVTVCBjYWxsIGFuZCBpbnRlci1wb2xsIHNsZWVwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBsYWtlYmFzZVJlc29sdmVyIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKlxuICogY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBsYWtlYmFzZVJlc29sdmVyLnJlc29sdmVMYWtlYmFzZUNvbm5lY3Rpb24oXG4gKiAgIHsgYXV0b0NyZWF0ZTogZmFsc2UgfSxcbiAqICAgQWJvcnRTaWduYWwudGltZW91dCg2MF8wMDApLFxuICogKTtcbiAqIGxha2ViYXNlUmVzb2x2ZXIuYXBwbHlMYWtlYmFzZVRvRW52KHJlc29sdmVkKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVMYWtlYmFzZUNvbm5lY3Rpb24oXG4gIGNvbmZpZz86IExha2ViYXNlUmVzb2x2ZXJJbnB1dHMsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxMYWtlYmFzZUNvbm5lY3Rpb24+IHtcbiAgcmV0dXJuIHJlc29sdmVMYWtlYmFzZUNvbm5lY3Rpb25XaXRoQ2xpZW50KGNvbmZpZywgc2lnbmFsLCB3b3Jrc3BhY2VDbGllbnRSZXNvbHZlcihjb25maWcpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUxha2ViYXNlQ29ubmVjdGlvbldpdGhDbGllbnQoXG4gIGNvbmZpZzogTGFrZWJhc2VSZXNvbHZlcklucHV0cyB8IHVuZGVmaW5lZCxcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCxcbiAgZ2V0Q2xpZW50OiBXb3Jrc3BhY2VDbGllbnRSZXNvbHZlcixcbik6IFByb21pc2U8TGFrZWJhc2VDb25uZWN0aW9uPiB7XG4gIGNvbnN0IGlucHV0cyA9IGF3YWl0IHJlYWRMYWtlYmFzZUlucHV0cyhjb25maWcpO1xuICBsZXQgeyBwcm9qZWN0LCBicmFuY2gsIGVuZHBvaW50LCBkYXRhYmFzZSwgaG9zdCB9ID0gaW5wdXRzO1xuICBjb25zdCBwb3J0ID0gaW5wdXRzLnBvcnQgPz8gREVGQVVMVF9QT1JUO1xuICBjb25zdCBzc2xNb2RlID0gcGFyc2VTc2xNb2RlKGlucHV0cy5zc2xNb2RlKSA/PyBERUZBVUxUX1NTTF9NT0RFO1xuXG4gIC8vIFJlc291cmNlIHBhdGhzIG1heSBjYXJyeSByZWR1bmRhbnQgaW5mbzsgaGFydmVzdCBwcm9qZWN0L2JyYW5jaFxuICAvLyBmcm9tIGFueSBjYW5vbmljYWwgcGF0aCB0aGF0IHNudWNrIGluIHZpYSBQR0RBVEFCQVNFIG9yIHNpbWlsYXIuXG4gIGlmIChlbmRwb2ludCAmJiAoIXByb2plY3QgfHwgIWJyYW5jaCkpIHtcbiAgICBjb25zdCBwYXJzZWRFbmRwb2ludCA9IHBhcnNlQWRkcmVzcyhlbmRwb2ludCk7XG4gICAgcHJvamVjdCA/Pz0gcGFyc2VkRW5kcG9pbnQucHJvamVjdDtcbiAgICBicmFuY2ggPz89IHBhcnNlZEVuZHBvaW50LmJyYW5jaDtcbiAgfVxuICBpZiAoZGF0YWJhc2UgJiYgKCFwcm9qZWN0IHx8ICFicmFuY2gpKSB7XG4gICAgY29uc3QgcGFyc2VkRGF0YWJhc2UgPSBwYXJzZUFkZHJlc3MoZGF0YWJhc2UpO1xuICAgIHByb2plY3QgPz89IHBhcnNlZERhdGFiYXNlLnByb2plY3Q7XG4gICAgYnJhbmNoID8/PSBwYXJzZWREYXRhYmFzZS5icmFuY2g7XG4gICAgaWYgKHBhcnNlZERhdGFiYXNlLmRhdGFiYXNlUmVzb3VyY2VJZCkge1xuICAgICAgZGF0YWJhc2UgPSBwYXJzZWREYXRhYmFzZS5kYXRhYmFzZVJlc291cmNlSWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQWxyZWFkeSBjb21wbGV0ZTogc2tpcCBldmVyeSBSRVNUIGNhbGwuXG4gIGlmIChlbmRwb2ludCAmJiBob3N0ICYmIGRhdGFiYXNlKSB7XG4gICAgcmV0dXJuIHsgcHJvamVjdCwgYnJhbmNoLCBlbmRwb2ludCwgZGF0YWJhc2UsIGhvc3QsIHBvcnQsIHNzbE1vZGUgfTtcbiAgfVxuXG4gIGNvbnN0IHdzID0gYXdhaXQgZ2V0Q2xpZW50KCk7XG5cbiAgLy8gSG9zdCBrbm93biBidXQgbm8gcmVzb3VyY2UgcGF0aDogc2NhbiB0aGUgd29ya3NwYWNlIHRvIGZpbmQgd2hpY2hcbiAgLy8gZW5kcG9pbnQgb3ducyB0aGlzIGhvc3Qgc28gd2UgY2FuIHBvcHVsYXRlIExBS0VCQVNFX0VORFBPSU5ULlxuICBpZiAoIXByb2plY3QgJiYgaG9zdCkge1xuICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgZmluZEVuZHBvaW50QnlIb3N0KHdzLCBob3N0LCBzaWduYWwpO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgcHJvamVjdCA9IGZvdW5kLnByb2plY3Q7XG4gICAgICBicmFuY2ggPSBmb3VuZC5icmFuY2g7XG4gICAgICBlbmRwb2ludCA/Pz0gZm91bmQuZW5kcG9pbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gTm8gcHJvamVjdCBhbnl3aGVyZSBpbiBjb25maWcvZW52L2FkZHJlc3M6IGxpc3QsIHBpY2ssIG9yIGNyZWF0ZS5cbiAgaWYgKCFwcm9qZWN0KSB7XG4gICAgcHJvamVjdCA9IGF3YWl0IHBpY2tPckNyZWF0ZVByb2plY3Qod3MsIGNvbmZpZz8uYXV0b0NyZWF0ZSwgc2lnbmFsKTtcbiAgfVxuXG4gIGlmICghYnJhbmNoKSB7XG4gICAgYnJhbmNoID0gYXdhaXQgcGlja0JyYW5jaCh3cywgcHJvamVjdCwgc2lnbmFsKTtcbiAgfVxuXG4gIGlmICghZW5kcG9pbnQpIHtcbiAgICBjb25zdCBlcCA9IGF3YWl0IHBpY2tFbmRwb2ludCh3cywgcHJvamVjdCwgYnJhbmNoLCBzaWduYWwpO1xuICAgIGVuZHBvaW50ID0gZXAubmFtZTtcbiAgICBob3N0ID8/PSBlcC5ob3N0O1xuICB9XG5cbiAgaWYgKCFob3N0ICYmIGVuZHBvaW50KSB7XG4gICAgY29uc3QgcGFyc2VkRW5kcG9pbnQgPSBwYXJzZUFkZHJlc3MoZW5kcG9pbnQpO1xuICAgIGlmIChwYXJzZWRFbmRwb2ludC5wcm9qZWN0ICYmIHBhcnNlZEVuZHBvaW50LmJyYW5jaCAmJiBwYXJzZWRFbmRwb2ludC5lbmRwb2ludElkKSB7XG4gICAgICBjb25zdCBlcCA9IGF3YWl0IHdhaXRFbmRwb2ludFJlYWR5KFxuICAgICAgICB3cyxcbiAgICAgICAgcGFyc2VkRW5kcG9pbnQucHJvamVjdCxcbiAgICAgICAgcGFyc2VkRW5kcG9pbnQuYnJhbmNoLFxuICAgICAgICBwYXJzZWRFbmRwb2ludC5lbmRwb2ludElkLFxuICAgICAgICBzaWduYWwsXG4gICAgICApO1xuICAgICAgaG9zdCA9IGVwLnN0YXR1cz8uaG9zdHM/Lmhvc3Q7XG4gICAgICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IHJlc29sdmVkIGhvc3QgZnJvbSBlbmRwb2ludFwiLCB7IGhvc3QgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFkYXRhYmFzZSkge1xuICAgIGRhdGFiYXNlID0gYXdhaXQgcGlja0RhdGFiYXNlKHdzLCBwcm9qZWN0LCBicmFuY2gsIHNpZ25hbCk7XG4gIH1cblxuICByZXR1cm4geyBwcm9qZWN0LCBicmFuY2gsIGVuZHBvaW50LCBkYXRhYmFzZSwgaG9zdCwgcG9ydCwgc3NsTW9kZSB9O1xufVxuXG4vKipcbiAqIFdyaXRlIHJlc29sdmVkIHZhbHVlcyBiYWNrIHRvIGBwcm9jZXNzLmVudmAgc28gdGhlIGBsYWtlYmFzZWAgcGx1Z2luXG4gKiAod2hpY2ggcmVhZHMgZW52IGRpcmVjdGx5KSBwaWNrcyB0aGVtIHVwIGR1cmluZyBpdHMgb3duIGBzZXR1cCgpYC5cbiAqIEV4aXN0aW5nIGVudiB2YWx1ZXMgYXJlIHByZXNlcnZlZDsgb25seSBtaXNzaW5nIGtleXMgYXJlIGZpbGxlZCBpbixcbiAqIHdoaWNoIGtlZXBzIGV4cGxpY2l0IG92ZXJyaWRlcyBhdXRob3JpdGF0aXZlLlxuICpcbiAqIFRoaXMgZG9lcyBOT1Qgc2V0IGBQR1VTRVJgLCB3aGljaCBuZWVkcyBhbiBhd2FpdCAtIHNlZVxuICoge0BsaW5rIGFwcGx5TGFrZWJhc2VFbnZ9IGZvciB0aGUgY29tcGxldGUgc2V0IGEgUG9zdGdyZXMgcG9vbCByZXF1aXJlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGFrZWJhc2VUb0VudihyZXNvbHZlZDogTGFrZWJhc2VDb25uZWN0aW9uKTogdm9pZCB7XG4gIGlmIChyZXNvbHZlZC5lbmRwb2ludCkge1xuICAgIHByb2Nlc3MuZW52W2RhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzLmxha2ViYXNlRW5kcG9pbnRdID8/PSByZXNvbHZlZC5lbmRwb2ludDtcbiAgfVxuICBpZiAocmVzb2x2ZWQuaG9zdCkgcHJvY2Vzcy5lbnYuUEdIT1NUID8/PSByZXNvbHZlZC5ob3N0O1xuICBpZiAocmVzb2x2ZWQuZGF0YWJhc2UpIHByb2Nlc3MuZW52LlBHREFUQUJBU0UgPz89IHJlc29sdmVkLmRhdGFiYXNlO1xuICBwcm9jZXNzLmVudi5QR1BPUlQgPz89IFN0cmluZyhyZXNvbHZlZC5wb3J0KTtcbiAgcHJvY2Vzcy5lbnYuUEdTU0xNT0RFID8/PSByZXNvbHZlZC5zc2xNb2RlO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGNvbm5lY3Rpb24gQU5EIGFwcGx5IGV2ZXJ5IFBvc3RncmVzIGVudiB2YXIgYSBMYWtlYmFzZSBwb29sIG5lZWRzLFxuICogcmV0dXJuaW5nIHRoZSByZXNvbHZlZCBjb25uZWN0aW9uIHBsdXMgdGhlIHVzZXJuYW1lIHRoYXQgd2FzIGFwcGxpZWQuXG4gKlxuICogVGhpcyBpcyB0aGUgd2hvbGUgc2V0LCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgaGF2aW5nIG9uZSBmdW5jdGlvbiBmb3IgaXQ6XG4gKiBgY3JlYXRlTGFrZWJhc2VQb29sKClgIHRocm93cyB1bmxlc3MgYExBS0VCQVNFX0VORFBPSU5UYCwgYFBHSE9TVGAsXG4gKiBgUEdEQVRBQkFTRWAsICoqYW5kKiogYSB1c2VybmFtZSAoYFBHVVNFUmAsIG9yIGBEQVRBQlJJQ0tTX0NMSUVOVF9JRGAgZm9yIGFcbiAqIHNlcnZpY2UgcHJpbmNpcGFsKSBhcmUgYWxsIHByZXNlbnQsIGFuZCBhIERhdGFicmlja3MgQXBwIGBwb3N0Z3Jlc2AgcmVzb3VyY2VcbiAqIGJpbmRpbmcgc3VwcGxpZXMgb25seSB0aGUgZmlyc3QuIEFueXRoaW5nIHRoYXQgd2FudHMgYSB3b3JraW5nIHBvb2wgLSB0aGVcbiAqIGBsYWtlYmFzZWAgcGx1Z2luLCBvciBBcHBLaXQncyBQRVJTSVNURU5UIGNhY2hlLCB3aGljaCBxdWlldGx5IGRlZ3JhZGVzIHRvXG4gKiBpbi1tZW1vcnkgd2hlbiB0aGUgcG9vbCBjYW5ub3QgYmUgYnVpbHQgLSBuZWVkcyBhbGwgZm91ciwgc28gY2FsbGVycyBzaG91bGQgbm90XG4gKiBwYWlyIHtAbGluayBhcHBseUxha2ViYXNlVG9FbnZ9IHdpdGggdGhlaXIgb3duIHVzZXJuYW1lIGxvb2t1cC5cbiAqXG4gKiBgUEdVU0VSYCBpcyBhcHBsaWVkIHdpdGggYD8/PWAgbGlrZSB0aGUgcmVzdCwgc28gYW4gZXhwbGljaXRseSBjb25maWd1cmVkIHZhbHVlXG4gKiBzdGF5cyBhdXRob3JpdGF0aXZlLiBUaGUgbG9va3VwIHJldHVybnMgYHVuZGVmaW5lZGAgcmF0aGVyIHRoYW4gdGhyb3dpbmcgd2hlbiBpdFxuICogY2Fubm90IGRldGVybWluZSBhIHVzZXIsIGxlYXZpbmcgdGhlIHBvb2wgdG8gcmVzb2x2ZSBpdHMgb3duLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBsYWtlYmFzZVJlc29sdmVyIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKlxuICogLy8gRW5vdWdoIGZvciBgY3JlYXRlTGFrZWJhc2VQb29sKClgIHRvIGJ1aWxkIGEgcG9vbC5cbiAqIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgbGFrZWJhc2VSZXNvbHZlci5hcHBseUxha2ViYXNlRW52KHsgYXV0b0NyZWF0ZTogZmFsc2UgfSk7XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseUxha2ViYXNlRW52KFxuICBjb25maWc/OiBMYWtlYmFzZVJlc29sdmVySW5wdXRzLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8eyByZXNvbHZlZDogTGFrZWJhc2VDb25uZWN0aW9uOyB1c2VyPzogc3RyaW5nIH0+IHtcbiAgY29uc3QgZ2V0Q2xpZW50ID0gd29ya3NwYWNlQ2xpZW50UmVzb2x2ZXIoY29uZmlnKTtcbiAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlTGFrZWJhc2VDb25uZWN0aW9uV2l0aENsaWVudChjb25maWcsIHNpZ25hbCwgZ2V0Q2xpZW50KTtcbiAgYXBwbHlMYWtlYmFzZVRvRW52KHJlc29sdmVkKTtcbiAgY29uc3QgY29uZmlndXJlZFVzZXIgPSBwcm9jZXNzLmVudi5QR1VTRVIgfHwgcHJvY2Vzcy5lbnYuREFUQUJSSUNLU19DTElFTlRfSUQ7XG4gIGNvbnN0IHVzZXIgPVxuICAgIGNvbmZpZ3VyZWRVc2VyID8/XG4gICAgKGF3YWl0IGdldFVzZXJuYW1lV2l0aEFwaUxvb2t1cCh7IHdvcmtzcGFjZUNsaWVudDogYXdhaXQgZ2V0Q2xpZW50KCkgfSkpO1xuICBpZiAodXNlcikgcHJvY2Vzcy5lbnYuUEdVU0VSID8/PSB1c2VyO1xuICByZXR1cm4geyByZXNvbHZlZCwgLi4uKHVzZXIgPyB7IHVzZXIgfSA6IHt9KSB9O1xufVxuXG50eXBlIFdvcmtzcGFjZUNsaWVudCA9IFJldHVyblR5cGU8QXBwS2l0V29ya3NwYWNlQ2xpZW50W1widG9MZWdhY3lXb3Jrc3BhY2VDbGllbnRcIl0+O1xudHlwZSBXb3Jrc3BhY2VDbGllbnRSZXNvbHZlciA9ICgpID0+IFByb21pc2U8V29ya3NwYWNlQ2xpZW50PjtcblxuLyoqIFJlc29sdmUgb25lIGF1dGgtYmFja2VkIFNESyBjbGllbnQgbGF6aWx5IGFuZCByZXVzZSBpdCBhY3Jvc3MgdGhpcyBvcGVyYXRpb24uICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VDbGllbnRSZXNvbHZlcihjb25maWc/OiBMYWtlYmFzZVJlc29sdmVySW5wdXRzKTogV29ya3NwYWNlQ2xpZW50UmVzb2x2ZXIge1xuICBsZXQgcGVuZGluZzogUHJvbWlzZTxXb3Jrc3BhY2VDbGllbnQ+IHwgdW5kZWZpbmVkO1xuICByZXR1cm4gKCkgPT5cbiAgICAocGVuZGluZyA/Pz0gY3JlYXRlV29ya3NwYWNlQ2xpZW50KHsgcHJvZmlsZTogY29uZmlnPy5idW5kbGVQcm9maWxlIH0pLnRoZW4oKGNsaWVudCkgPT5cbiAgICAgIGNsaWVudC50b0xlZ2FjeVdvcmtzcGFjZUNsaWVudCgpLFxuICAgICkpO1xufVxuXG4vKiogVGhlIFNESyBgQ29udGV4dGAgYWNjZXB0ZWQgYnkgdGhlIHdvcmtzcGFjZSBjbGllbnQncyBvd24gY29weSBvZiB0aGUgU0RLLiAqL1xudHlwZSBBcGlSZXF1ZXN0Q29udGV4dCA9IE5vbk51bGxhYmxlPFBhcmFtZXRlcnM8V29ya3NwYWNlQ2xpZW50W1wiYXBpQ2xpZW50XCJdW1wicmVxdWVzdFwiXT5bMV0+O1xuXG4vKipcbiAqIEFkYXB0IGFuIHtAbGluayBBYm9ydFNpZ25hbH0gaW50byB0aGUgYXBpIGNsaWVudCdzIGNhbmNlbGxhdGlvbiBjb250ZXh0LlxuICogQXBwS2l0IHJlc29sdmVzIGEgZGlmZmVyZW50IGNvcHkgb2YgYEBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxgIHRoYW4gdGhpc1xuICogcGFja2FnZSBkb2VzLCBhbmQgYENvbnRleHRgIGNhcnJpZXMgYSBwcml2YXRlIGZpZWxkLCBzbyB0aGUgdHdvIGRlY2xhcmF0aW9uc1xuICogYXJlIG5vbWluYWxseSBpbmNvbXBhdGlibGUgZXZlbiB0aG91Z2ggdGhlIGFwaSBjbGllbnQgb25seSByZWFkc1xuICogYGNhbmNlbGxhdGlvblRva2VuYCBhbmQgYGxvZ2dlcmAgb2ZmIHRoZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RDb250ZXh0KHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQpOiBBcGlSZXF1ZXN0Q29udGV4dCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBzaWduYWwgPyAodG9Db250ZXh0KHNpZ25hbCkgYXMgdW5rbm93biBhcyBBcGlSZXF1ZXN0Q29udGV4dCkgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBMYWtlYmFzZSBSRVNUIGJvZHkuIFRoZSBmdWxsIHBheWxvYWQgaXMgbG9nZ2VkIHJhdGhlciB0aGFuIHRocm93blxuICogc28gYSBjbGllbnQgbmV2ZXIgcmVjZWl2ZXMgdXBzdHJlYW0gZGV0YWlsLlxuICovXG5mdW5jdGlvbiBwYXJzZVJlc3BvbnNlPFQ+KHNjaGVtYTogei5ab2RUeXBlPFQ+LCBwYXRoOiBzdHJpbmcsIGJvZHk6IHVua25vd24pOiBUIHtcbiAgY29uc3QgcGFyc2VkID0gc2NoZW1hLnNhZmVQYXJzZShib2R5KTtcbiAgaWYgKHBhcnNlZC5zdWNjZXNzKSByZXR1cm4gcGFyc2VkLmRhdGE7XG4gIGxvZ2dlci5lcnJvcihcImF1dG9wZzogdW5leHBlY3RlZCBMYWtlYmFzZSBBUEkgcmVzcG9uc2VcIiwge1xuICAgIHBhdGgsXG4gICAgaXNzdWVzOiBwYXJzZWQuZXJyb3IuaXNzdWVzLFxuICB9KTtcbiAgdGhyb3cgbmV3IEV4ZWN1dGlvbkVycm9yKFwiTGFrZWJhc2UgQVBJIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgcmVzcG9uc2VcIiwgeyBjb250ZXh0OiB7IHBhdGggfSB9KTtcbn1cblxuLyoqIEdFVCBoZWxwZXIgdGhhdCB2YWxpZGF0ZXMgdGhlIEpTT04gYm9keSBhbmQgZm9yd2FyZHMgY2FuY2VsbGF0aW9uLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0SnNvbjxUPihcbiAgd3M6IFdvcmtzcGFjZUNsaWVudCxcbiAgcGF0aDogc3RyaW5nLFxuICBzY2hlbWE6IHouWm9kVHlwZTxUPixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgd3MuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAge1xuICAgICAgcGF0aCxcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9KSxcbiAgICAgIHJhdzogZmFsc2UsXG4gICAgfSxcbiAgICByZXF1ZXN0Q29udGV4dChzaWduYWwpLFxuICApO1xuICByZXR1cm4gcGFyc2VSZXNwb25zZShzY2hlbWEsIHBhdGgsIHJlcyk7XG59XG5cbi8qKiBQT1NUIGhlbHBlciBmb3IgY3JlYXRlIC8gbXV0YXRlIGNhbGxzOyB2YWxpZGF0ZXMgdGhlIEpTT04gYm9keS4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvc3RKc29uPFQ+KFxuICB3czogV29ya3NwYWNlQ2xpZW50LFxuICBwYXRoOiBzdHJpbmcsXG4gIHNjaGVtYTogei5ab2RUeXBlPFQ+LFxuICBib2R5OiB1bmtub3duLFxuICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IHdzLmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgIHtcbiAgICAgIHBhdGgsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgcXVlcnksXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSksXG4gICAgICByYXc6IGZhbHNlLFxuICAgICAgcGF5bG9hZDogYm9keSxcbiAgICB9LFxuICAgIHJlcXVlc3RDb250ZXh0KHNpZ25hbCksXG4gICk7XG4gIHJldHVybiBwYXJzZVJlc3BvbnNlKHNjaGVtYSwgcGF0aCwgcmVzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdFByb2plY3RzKHdzOiBXb3Jrc3BhY2VDbGllbnQsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxQcm9qZWN0W10+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0SnNvbih3cywgYCR7QVBJX0JBU0V9L3Byb2plY3RzYCwgbGlzdFJlc3BvbnNlU2NoZW1hLCBzaWduYWwpO1xuICByZXR1cm4gcmVzLnByb2plY3RzID8/IFtdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0QnJhbmNoZXMoXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIHByb2plY3Q6IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPEJyYW5jaFtdPiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldEpzb24oXG4gICAgd3MsXG4gICAgYCR7QVBJX0JBU0V9L3Byb2plY3RzLyR7cHJvamVjdH0vYnJhbmNoZXNgLFxuICAgIGxpc3RSZXNwb25zZVNjaGVtYSxcbiAgICBzaWduYWwsXG4gICk7XG4gIHJldHVybiByZXMuYnJhbmNoZXMgPz8gW107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RFbmRwb2ludHMoXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIHByb2plY3Q6IHN0cmluZyxcbiAgYnJhbmNoOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxFbmRwb2ludFtdPiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldEpzb24oXG4gICAgd3MsXG4gICAgYCR7QVBJX0JBU0V9L3Byb2plY3RzLyR7cHJvamVjdH0vYnJhbmNoZXMvJHticmFuY2h9L2VuZHBvaW50c2AsXG4gICAgbGlzdFJlc3BvbnNlU2NoZW1hLFxuICAgIHNpZ25hbCxcbiAgKTtcbiAgcmV0dXJuIHJlcy5lbmRwb2ludHMgPz8gW107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3REYXRhYmFzZXMoXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIHByb2plY3Q6IHN0cmluZyxcbiAgYnJhbmNoOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxEYXRhYmFzZVtdPiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldEpzb24oXG4gICAgd3MsXG4gICAgYCR7QVBJX0JBU0V9L3Byb2plY3RzLyR7cHJvamVjdH0vYnJhbmNoZXMvJHticmFuY2h9L2RhdGFiYXNlc2AsXG4gICAgbGlzdFJlc3BvbnNlU2NoZW1hLFxuICAgIHNpZ25hbCxcbiAgKTtcbiAgcmV0dXJuIHJlcy5kYXRhYmFzZXMgPz8gW107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEVuZHBvaW50KFxuICB3czogV29ya3NwYWNlQ2xpZW50LFxuICBwcm9qZWN0OiBzdHJpbmcsXG4gIGJyYW5jaDogc3RyaW5nLFxuICBlbmRwb2ludElkOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxFbmRwb2ludD4ge1xuICByZXR1cm4gZ2V0SnNvbihcbiAgICB3cyxcbiAgICBgJHtBUElfQkFTRX0vcHJvamVjdHMvJHtwcm9qZWN0fS9icmFuY2hlcy8ke2JyYW5jaH0vZW5kcG9pbnRzLyR7ZW5kcG9pbnRJZH1gLFxuICAgIGVuZHBvaW50U2NoZW1hLFxuICAgIHNpZ25hbCxcbiAgKTtcbn1cblxuLyoqXG4gKiBTY2FuIHRoZSB3b3Jrc3BhY2UgZm9yIGFuIGVuZHBvaW50IHdob3NlIGBzdGF0dXMuaG9zdHMuaG9zdGAgbWF0Y2hlc1xuICogdGhlIHByb3ZpZGVkIGhvc3RuYW1lLiBVc2VkIHRvIHJlY292ZXIgdGhlIG93bmluZyBwcm9qZWN0L2JyYW5jaC9cbiAqIGVuZHBvaW50IHJlc291cmNlIHBhdGggd2hlbiB0aGUgY2FsbGVyIG9ubHkgc3VwcGxpZWQgYSBQb3N0Z3JlcyBVUkkuXG4gKlxuICogTyhwcm9qZWN0cyAqIGJyYW5jaGVzICogZW5kcG9pbnRzKSAtIGZpbmUgZm9yIHR5cGljYWwgd29ya3NwYWNlc1xuICogKHNpbmdsZSBkaWdpdHMgcGVyIHRpZXIpOyBwYWdpbmF0aW9uIGlzIGludGVudGlvbmFsbHkgbm90IGZvbGxvd2VkXG4gKiBzaW5jZSB0aGlzIGlzIGEgYmVzdC1lZmZvcnQgZmFsbGJhY2suXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRFbmRwb2ludEJ5SG9zdChcbiAgd3M6IFdvcmtzcGFjZUNsaWVudCxcbiAgaG9zdDogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8eyBwcm9qZWN0OiBzdHJpbmc7IGJyYW5jaDogc3RyaW5nOyBlbmRwb2ludDogc3RyaW5nIH0gfCBudWxsPiB7XG4gIGNvbnN0IHByb2plY3RzID0gYXdhaXQgbGlzdFByb2plY3RzKHdzLCBzaWduYWwpO1xuICBmb3IgKGNvbnN0IHAgb2YgcHJvamVjdHMpIHtcbiAgICBjb25zdCBwcm9qZWN0SWQgPSBwYXJzZVJlc291cmNlUGF0aChwLm5hbWUpLnByb2plY3Q7XG4gICAgaWYgKCFwcm9qZWN0SWQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGJyYW5jaGVzID0gYXdhaXQgbGlzdEJyYW5jaGVzKHdzLCBwcm9qZWN0SWQsIHNpZ25hbCk7XG4gICAgZm9yIChjb25zdCBiIG9mIGJyYW5jaGVzKSB7XG4gICAgICBjb25zdCBicmFuY2hJZCA9IHBhcnNlUmVzb3VyY2VQYXRoKGIubmFtZSkuYnJhbmNoO1xuICAgICAgaWYgKCFicmFuY2hJZCkgY29udGludWU7XG4gICAgICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBsaXN0RW5kcG9pbnRzKHdzLCBwcm9qZWN0SWQsIGJyYW5jaElkLCBzaWduYWwpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBlbmRwb2ludHMuZmluZCgoZSkgPT4gZS5zdGF0dXM/Lmhvc3RzPy5ob3N0ID09PSBob3N0KTtcbiAgICAgIGlmIChtYXRjaD8ubmFtZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IG1hdGNoZWQgZW5kcG9pbnQgYnkgaG9zdFwiLCB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBlbmRwb2ludDogbWF0Y2gubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJvamVjdDogcHJvamVjdElkLFxuICAgICAgICAgIGJyYW5jaDogYnJhbmNoSWQsXG4gICAgICAgICAgZW5kcG9pbnQ6IG1hdGNoLm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImF1dG9wZzogbm8gZW5kcG9pbnQgbWF0Y2hlZCBob3N0XCIsIHsgaG9zdCB9KTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUGljayB0aGUgcHJvamVjdCB0byB1c2UsIG9yIGNyZWF0ZSBvbmUgd2hlbiB0aGUgd29ya3NwYWNlIGlzIGVtcHR5LlxuICpcbiAqIFNlbGVjdGlvbiBvcmRlcjpcbiAqIDEuIEV4YWN0bHkgb25lIHByb2plY3QgbGlzdGVkIC0+IHVzZSBpdC5cbiAqIDIuIFplcm8gcHJvamVjdHMgQU5EIGBhdXRvQ3JlYXRlICE9PSBmYWxzZWAgLT4gZW5zdXJlIGEgcHJvamVjdCB3aXRoXG4gKiAgICB0aGUgcmVzb2x2ZWQgaWQgZXhpc3RzLCB0aGVuIHJldHVybiBpdHMgaWQuXG4gKiAzLiBaZXJvIHByb2plY3RzIEFORCBgYXV0b0NyZWF0ZSA9PT0gZmFsc2VgIC0+IHRocm93LlxuICogNC4gTXVsdGlwbGUgcHJvamVjdHMgLT4gdGhyb3cgd2l0aCB0aGUgY2FuZGlkYXRlIGxpc3QgKHNldFxuICogICAgYGNvbmZpZy5wcm9qZWN0YCBvciBwaW4gYSBwcm9qZWN0IGlkIGluIGBMQUtFQkFTRV9FTkRQT0lOVGApLlxuICovXG5hc3luYyBmdW5jdGlvbiBwaWNrT3JDcmVhdGVQcm9qZWN0KFxuICB3czogV29ya3NwYWNlQ2xpZW50LFxuICBhdXRvQ3JlYXRlOiBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGxpc3RQcm9qZWN0cyh3cywgc2lnbmFsKTtcbiAgaWYgKHByb2plY3RzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGlkID0gcGFyc2VSZXNvdXJjZVBhdGgocHJvamVjdHNbMF0hLm5hbWUpLnByb2plY3Q7XG4gICAgaWYgKGlkKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IHVzaW5nIG9ubHkgcHJvamVjdFwiLCB7IHByb2plY3Q6IGlkIH0pO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuICBpZiAocHJvamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGF1dG9DcmVhdGUgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICAgICAgXCJMYWtlYmFzZSBwcm9qZWN0XCIsXG4gICAgICAgIFwiYXV0b0NyZWF0ZSBpcyBmYWxzZTsgY3JlYXRlIGEgcHJvamVjdCBvciBzZXQgY29uZmlnLnByb2plY3QgLyBMQUtFQkFTRV9FTkRQT0lOVC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGlkID0gYXV0b0NyZWF0ZSA/PyAoYXdhaXQgZGVmYXVsdFByb2plY3RJZCgpKTtcbiAgICByZXR1cm4gZW5zdXJlUHJvamVjdCh3cywgaWQsIHNpZ25hbCk7XG4gIH1cbiAgY29uc3QgY2FuZGlkYXRlcyA9IHByb2plY3RzXG4gICAgLm1hcCgocCkgPT4gcGFyc2VSZXNvdXJjZVBhdGgocC5uYW1lKS5wcm9qZWN0KVxuICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpKVxuICAgIC5qb2luKFwiLCBcIik7XG4gIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICBcIkxha2ViYXNlXCIsXG4gICAgYE11bHRpcGxlIHByb2plY3RzIGZvdW5kOyBzZXQgY29uZmlnLnByb2plY3Qgb3IgcGluIGEgcHJvamVjdCBpZCBpbiBMQUtFQkFTRV9FTkRQT0lOVC4gQ2FuZGlkYXRlczogJHtjYW5kaWRhdGVzfWAsXG4gICk7XG59XG5cbi8qKlxuICogRGVyaXZlIGEgTGFrZWJhc2UgcHJvamVjdCBpZCBmcm9tIHRoZSBob3N0IHJlcG8ncyBgcGFja2FnZS5qc29uYFxuICogbmFtZSAodmlhIHtAbGluayBwcm9qZWN0Lm5hbWV9KSBzbHVnaWZpZWQgdG8gc2F0aXNmeSB0aGVcbiAqIExha2ViYXNlIGlkIGNvbnN0cmFpbnQgKGBeW2Etel1bYS16MC05LV17MCw2MX1bYS16MC05XSRgKS5cbiAqXG4gKiBUaHJvd3Mgd2hlbiB0aGUgc2x1ZyBlbmRzIHVwIGVtcHR5IG9yIHN0YXJ0cyB3aXRoIGEgZGlnaXQsIHNpbmNlIHRoZVxuICogc2VydmVyIHdvdWxkIHJlamVjdCBpdCBhbnl3YXkgLSBjYWxsZXJzIHNob3VsZCBwYXNzIGFuIGV4cGxpY2l0XG4gKiBgYXV0b0NyZWF0ZWAgaWQgaW4gdGhhdCBjYXNlLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0UHJvamVjdElkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG5hbWUgPSBwcm9qZWN0VXRpbHMubmFtZSgpO1xuICBjb25zdCBzbHVnID0gdG9TbHVnV2l0aE9wdGlvbnMoeyBtYXhMZW5ndGg6IFBST0pFQ1RfSURfTUFYX0xFTiB9LCBuYW1lKTtcbiAgaWYgKCFzbHVnIHx8ICEvXlthLXpdLy50ZXN0KHNsdWcpKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJhdXRvcGc6IHByb2plY3QgbmFtZSBkb2VzIG5vdCBzbHVnaWZ5IHRvIGEgTGFrZWJhc2UgcHJvamVjdCBpZFwiLCB7IG5hbWUgfSk7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgXCJMYWtlYmFzZVwiLFxuICAgICAgXCJDb3VsZCBub3QgZGVyaXZlIGEgcHJvamVjdCBpZCBmcm9tIHRoZSBwYWNrYWdlIG5hbWU7IHBhc3MgYXV0b0NyZWF0ZSBleHBsaWNpdGx5LlwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHNsdWc7XG59XG5cbi8qKlxuICogRW5zdXJlIGEgTGFrZWJhc2UgcHJvamVjdCB3aXRoIGBwcm9qZWN0SWRgIGV4aXN0cy4gQ3JlYXRlcyBpdCBhbmRcbiAqIHdhaXRzIGZvciB0aGUgY3JlYXRlIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4gQW4gYEFMUkVBRFlfRVhJU1RTYFxuICogcmVzcG9uc2UgaXMgdHJlYXRlZCBhcyBzdWNjZXNzIC0gc29tZW9uZSBlbHNlIChhIGNvbmN1cnJlbnQgYm9vdCxcbiAqIGEgc2libGluZyBwcm9jZXNzKSB3b24gdGhlIHJhY2UgYW5kIHRoZSBwcm9qZWN0IHdlIHdhbnRlZCBpcyBub3dcbiAqIHNpdHRpbmcgdGhlcmUgcmVhZHkgZm9yIGRvd25zdHJlYW0gcGlja2Vycy5cbiAqXG4gKiBQcm9qZWN0IGNyZWF0aW9uIHR5cGljYWxseSBwcm92aXNpb25zIGEgZGVmYXVsdCBgcHJvZHVjdGlvbmAgYnJhbmNoXG4gKiBhbG9uZ3NpZGU7IGRvd25zdHJlYW0gcGlja2VycyBoYW5kbGUgdGhlIHJlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVByb2plY3QoXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIHByb2plY3RJZDogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGxvZ2dlci53YXJuKFwiYXV0b3BnOiBubyBwcm9qZWN0cyBmb3VuZDsgY3JlYXRpbmdcIiwgeyBwcm9qZWN0OiBwcm9qZWN0SWQgfSk7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3AgPSBhd2FpdCBwb3N0SnNvbihcbiAgICAgIHdzLFxuICAgICAgYCR7QVBJX0JBU0V9L3Byb2plY3RzYCxcbiAgICAgIG9wZXJhdGlvblNjaGVtYSxcbiAgICAgIHsgc3BlYzogeyBwZ192ZXJzaW9uOiBERUZBVUxUX1BHX1ZFUlNJT04gfSB9LFxuICAgICAgeyBwcm9qZWN0X2lkOiBwcm9qZWN0SWQgfSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICAgIGF3YWl0IHdhaXRGb3JPcGVyYXRpb24od3MsIG9wLCBzaWduYWwpO1xuICAgIGxvZ2dlci5pbmZvKFwiYXV0b3BnOiBjcmVhdGVkIHByb2plY3RcIiwgeyBwcm9qZWN0OiBwcm9qZWN0SWQgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghaXNBbHJlYWR5RXhpc3RzRXJyb3IoZXJyKSkgdGhyb3cgZXJyO1xuICAgIGxvZ2dlci5pbmZvKFwiYXV0b3BnOiBwcm9qZWN0IGFscmVhZHkgZXhpc3RzIChyYWNlKTsgcHJvY2VlZGluZ1wiLCB7XG4gICAgICBwcm9qZWN0OiBwcm9qZWN0SWQsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHByb2plY3RJZDtcbn1cblxuLyoqXG4gKiBSZWNvZ25pemUgdGhlIERhdGFicmlja3MgU0RLJ3MgYEFMUkVBRFlfRVhJU1RTYCBmYWlsdXJlIG1vZGVzIHNvIGFcbiAqIGxvc3QgcmFjZSBkdXJpbmcgYGVuc3VyZVByb2plY3RgIGJlY29tZXMgYSBuby1vcCBpbnN0ZWFkIG9mIGFuIGVycm9yLlxuICpcbiAqIFRoZSBTREsgdGhyb3dzIGBBcGlFcnJvciB7IGVycm9yQ29kZSwgc3RhdHVzQ29kZSB9YCBmb3Igc3RydWN0dXJlZFxuICogc2VydmVyIGVycm9ycyBhbmQgYEh0dHBFcnJvciB7IGNvZGUgfWAgZm9yIHRyYW5zcG9ydC1sYXllciA0eHgvNXh4LlxuICogQm90aCBzdXJmYWNlIGEgaHVtYW4gbWVzc2FnZSB0aGF0IG9mdGVuIGNhcnJpZXMgXCJhbHJlYWR5IGV4aXN0c1wiIHNvXG4gKiB3ZSB1c2UgdGhhdCBhcyBhIGZpbmFsIGZhbGxiYWNrIGZvciBmb3J3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIGlzQWxyZWFkeUV4aXN0c0Vycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghZXJyb3IgfHwgdHlwZW9mIGVycm9yICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGUgPSBlcnJvciBhcyB7XG4gICAgc3RhdHVzQ29kZT86IG51bWJlcjtcbiAgICBjb2RlPzogbnVtYmVyO1xuICAgIGVycm9yQ29kZT86IHN0cmluZztcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICB9O1xuICBpZiAoZS5zdGF0dXNDb2RlID09PSA0MDkgfHwgZS5jb2RlID09PSA0MDkpIHJldHVybiB0cnVlO1xuICBpZiAoZS5lcnJvckNvZGUgJiYgL2FscmVhZHkuP2V4aXN0cy9pLnRlc3QoZS5lcnJvckNvZGUpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGUubWVzc2FnZSAmJiAvYWxyZWFkeS4/ZXhpc3RzL2kudGVzdChlLm1lc3NhZ2UpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJlZHVjZSBhIExha2ViYXNlIG9wZXJhdGlvbiBmYWlsdXJlIHRvIGFuIGVycm9yIHNhZmUgdG8gcHJvcGFnYXRlOiB0aGVcbiAqIG9wZXJhdGlvbiBuYW1lIHBsdXMgd2hhdGV2ZXIgY29kZSB0aGUgcGF5bG9hZCBjYXJyaWVzLiBUaGUgcGF5bG9hZCBpdHNlbGYgY2FuXG4gKiBlY2hvIHJlcXVlc3QgY29udGV4dCwgc28gaXQgZ29lcyB0byB0aGUgbG9nIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIG9wZXJhdGlvbkZhaWxlZChvcE5hbWU6IHN0cmluZywgb3BFcnJvcjogdW5rbm93bik6IEV4ZWN1dGlvbkVycm9yIHtcbiAgbG9nZ2VyLmVycm9yKFwiYXV0b3BnOiBvcGVyYXRpb24gZmFpbGVkXCIsIHtcbiAgICBvcGVyYXRpb246IG9wTmFtZSxcbiAgICBlcnJvcjogdG9FcnJvcihvcEVycm9yKSxcbiAgfSk7XG4gIGNvbnN0IGNvZGUgPSBpc1JlY29yZChvcEVycm9yKSA/IChvcEVycm9yLmNvZGUgPz8gb3BFcnJvci5yZWFzb24pIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbmV3IEV4ZWN1dGlvbkVycm9yKGBMYWtlYmFzZSBvcGVyYXRpb24gZmFpbGVkOiAke29wTmFtZX1gLCB7XG4gICAgY29udGV4dDoge1xuICAgICAgb3BlcmF0aW9uOiBvcE5hbWUsXG4gICAgICBlcnJvckNvZGU6IHR5cGVvZiBjb2RlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBjb2RlID09PSBcIm51bWJlclwiID8gU3RyaW5nKGNvZGUpIDogXCJ1bmtub3duXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogUG9sbCBhIExha2ViYXNlIGxvbmctcnVubmluZyBvcGVyYXRpb24gdW50aWwgYGRvbmU6IHRydWVgLiBSZXR1cm5zXG4gKiB0aGUgZmluYWwgb3BlcmF0aW9uIGVudmVsb3BlICh3aGljaCBtYXkgY2FycnkgYHJlc3BvbnNlYCBvciBgZXJyb3JgKS5cbiAqXG4gKiBUaHJvd3Mgd2hlbjpcbiAqICAgLSB0aGUgcmVzcG9uc2UgY2FycmllcyBhbiBgZXJyb3JgIGZpZWxkO1xuICogICAtIGBvcC5uYW1lYCBpcyBtaXNzaW5nIChub3RoaW5nIHRvIHBvbGwpO1xuICogICAtIHRoZSB0aW1lb3V0IGVsYXBzZXMgYmVmb3JlIGBkb25lOiB0cnVlYDtcbiAqICAgLSBgc2lnbmFsYCBhYm9ydHMgbWlkLXdhaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JPcGVyYXRpb24oXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIG9wOiBPcGVyYXRpb24sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxPcGVyYXRpb24+IHtcbiAgaWYgKG9wLmRvbmUpIHtcbiAgICBpZiAob3AuZXJyb3IpIHtcbiAgICAgIHRocm93IG9wZXJhdGlvbkZhaWxlZChvcC5uYW1lID8/IFwidW5rbm93blwiLCBvcC5lcnJvcik7XG4gICAgfVxuICAgIHJldHVybiBvcDtcbiAgfVxuICBjb25zdCBvcE5hbWUgPSBvcC5uYW1lO1xuICBpZiAoIW9wTmFtZSkge1xuICAgIHRocm93IEV4ZWN1dGlvbkVycm9yLm1pc3NpbmdEYXRhKFwib3BlcmF0aW9uIG5hbWVcIik7XG4gIH1cbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgRGF0ZS5ub3coKSAtIHN0YXJ0IDwgT1BFUkFUSU9OX1RJTUVPVVRfTVM7IGF0dGVtcHQrKykge1xuICAgIGF3YWl0IHBvbGxEZWxheShhdHRlbXB0LCBPUEVSQVRJT05fUE9MTF9NUywgc2lnbmFsKTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgZ2V0SnNvbih3cywgYCR7QVBJX0JBU0V9LyR7b3BOYW1lfWAsIG9wZXJhdGlvblNjaGVtYSwgc2lnbmFsKTtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IG9wZXJhdGlvbiBzdGF0dXNcIiwgeyBvcDogb3BOYW1lLCBkb25lOiBjdXJyZW50LmRvbmUgfSk7XG4gICAgaWYgKGN1cnJlbnQuZG9uZSkge1xuICAgICAgaWYgKGN1cnJlbnQuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgb3BlcmF0aW9uRmFpbGVkKG9wTmFtZSwgY3VycmVudC5lcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEV4ZWN1dGlvbkVycm9yKGBMYWtlYmFzZSBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZTogJHtvcE5hbWV9YCwge1xuICAgIGNvbnRleHQ6IHsgb3BlcmF0aW9uOiBvcE5hbWUsIHRpbWVvdXRNczogT1BFUkFUSU9OX1RJTUVPVVRfTVMgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogUG9sbCBgZ2V0RW5kcG9pbnRgIHVudGlsIHRoZSBjb21wdXRlIHJlcG9ydHMgYSB1c2FibGVcbiAqIGBzdGF0dXMuY3VycmVudF9zdGF0ZWAuIGBSRUFEWWAgYW5kIGBJRExFYCBhcmUgYm90aCBhY2NlcHRhYmxlIC1cbiAqIGBJRExFYCBqdXN0IG1lYW5zIHRoZSBjb21wdXRlIGhhcyBzY2FsZWQgdG8gemVybyBidXQgYSBjb25uZWN0aW9uXG4gKiB3aWxsIHdha2UgaXQuIFJldHVybnMgdGhlIGZpbmFsIGVuZHBvaW50IHBheWxvYWQgKHdpdGggYGhvc3RzLmhvc3RgKS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEVuZHBvaW50UmVhZHkoXG4gIHdzOiBXb3Jrc3BhY2VDbGllbnQsXG4gIHByb2plY3Q6IHN0cmluZyxcbiAgYnJhbmNoOiBzdHJpbmcsXG4gIGVuZHBvaW50SWQ6IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPEVuZHBvaW50PiB7XG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgbGV0IGxhc3Q6IEVuZHBvaW50IHwgbnVsbCA9IG51bGw7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBEYXRlLm5vdygpIC0gc3RhcnQgPCBFTkRQT0lOVF9SRUFEWV9USU1FT1VUX01TOyBhdHRlbXB0KyspIHtcbiAgICBsYXN0ID0gYXdhaXQgZ2V0RW5kcG9pbnQod3MsIHByb2plY3QsIGJyYW5jaCwgZW5kcG9pbnRJZCwgc2lnbmFsKTtcbiAgICBjb25zdCBzdGF0ZSA9IGxhc3Quc3RhdHVzPy5jdXJyZW50X3N0YXRlO1xuICAgIGlmIChzdGF0ZSAmJiBDT05ORUNUQUJMRV9FTkRQT0lOVF9TVEFURVMuaGFzKHN0YXRlKSkgcmV0dXJuIGxhc3Q7XG4gICAgaWYgKGxhc3Quc3RhdHVzPy5ob3N0cz8uaG9zdCAmJiBzdGF0ZSAhPT0gSU5JVElBTElaSU5HX0VORFBPSU5UX1NUQVRFKSB7XG4gICAgICAvLyBDb21wdXRlIGlzIGluIHNvbWUgb3RoZXIgc3RhdGUgKFNUQVJUSU5HLCBldGMuKSBidXQgaG9zdG5hbWUgaXNcbiAgICAgIC8vIGFscmVhZHkgcHVibGlzaGVkIC0gZ29vZCBlbm91Z2ggdG8gY29ubmVjdDsgbGFrZWJhc2UncyBPQXV0aFxuICAgICAgLy8gdG9rZW4gcmVxdWVzdCB3aWxsIHdha2UgaXQuXG4gICAgICByZXR1cm4gbGFzdDtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b3BnOiB3YWl0aW5nIGZvciBlbmRwb2ludFwiLCB7IGVuZHBvaW50SWQsIHN0YXRlIH0pO1xuICAgIGF3YWl0IHBvbGxEZWxheShhdHRlbXB0LCBFTkRQT0lOVF9SRUFEWV9QT0xMX01TLCBzaWduYWwpO1xuICB9XG4gIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihgTGFrZWJhc2UgZW5kcG9pbnQgZGlkIG5vdCBiZWNvbWUgcmVhZHk6ICR7ZW5kcG9pbnRJZH1gLCB7XG4gICAgY29udGV4dDoge1xuICAgICAgcHJvamVjdCxcbiAgICAgIGJyYW5jaCxcbiAgICAgIGVuZHBvaW50SWQsXG4gICAgICB0aW1lb3V0TXM6IEVORFBPSU5UX1JFQURZX1RJTUVPVVRfTVMsXG4gICAgICBsYXN0U3RhdGU6IGxhc3Q/LnN0YXR1cz8uY3VycmVudF9zdGF0ZSA/PyBcInVua25vd25cIixcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBQaWNrIHRoZSBkZWZhdWx0IGJyYW5jaCBmb3IgYSBwcm9qZWN0LiBQcmVmZXJzIHRoZSBicmFuY2ggZmxhZ2dlZFxuICogYHN0YXR1cy5kZWZhdWx0OiB0cnVlYCAoc2VydmVyLXNpZGUgZGVmYXVsdCwgdHlwaWNhbGx5IGBwcm9kdWN0aW9uYFxuICogdW5sZXNzIHRoZSBwcm9qZWN0IG93bmVyIGNoYW5nZWQgaXQpLiBGYWxscyBiYWNrIHRvIHRoZSBvbmx5IGJyYW5jaFxuICogd2hlbiB0aGVyZSdzIGV4YWN0bHkgb25lLiBPdGhlcndpc2UgdGhyb3dzIHdpdGggdGhlIGNhbmRpZGF0ZSBsaXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiBwaWNrQnJhbmNoKFxuICB3czogV29ya3NwYWNlQ2xpZW50LFxuICBwcm9qZWN0OiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYnJhbmNoZXMgPSBhd2FpdCBsaXN0QnJhbmNoZXMod3MsIHByb2plY3QsIHNpZ25hbCk7XG4gIGlmIChicmFuY2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICAgIGBMYWtlYmFzZSBicmFuY2ggaW4gcHJvamVjdCAnJHtwcm9qZWN0fSdgLFxuICAgICAgXCJUaGUgcHJvamVjdCBoYXMgbm8gYnJhbmNoZXM7IGNyZWF0ZSBvbmUgb3Igc2V0IGNvbmZpZy5icmFuY2guXCIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBmbGFnZ2VkID0gYnJhbmNoZXMuZmluZCgoYikgPT4gYi5zdGF0dXM/LmRlZmF1bHQgPT09IHRydWUpO1xuICBjb25zdCBjaG9pY2UgPVxuICAgIHBhcnNlUmVzb3VyY2VQYXRoKGZsYWdnZWQ/Lm5hbWUpLmJyYW5jaCA/P1xuICAgIChicmFuY2hlcy5sZW5ndGggPT09IDEgPyBwYXJzZVJlc291cmNlUGF0aChicmFuY2hlc1swXSEubmFtZSkuYnJhbmNoIDogdW5kZWZpbmVkKTtcbiAgaWYgKCFjaG9pY2UpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gYnJhbmNoZXNcbiAgICAgIC5tYXAoKGIpID0+IHBhcnNlUmVzb3VyY2VQYXRoKGIubmFtZSkuYnJhbmNoKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkpXG4gICAgICAuam9pbihcIiwgXCIpO1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgIFwiTGFrZWJhc2VcIixcbiAgICAgIGBQcm9qZWN0ICcke3Byb2plY3R9JyBoYXMgbXVsdGlwbGUgYnJhbmNoZXMgYW5kIG5vbmUgbWFya2VkIGRlZmF1bHQ7IHNldCBjb25maWcuYnJhbmNoIG9yIGluY2x1ZGUgdGhlIGJyYW5jaCBpbiBMQUtFQkFTRV9FTkRQT0lOVC4gQ2FuZGlkYXRlczogJHtjYW5kaWRhdGVzfWAsXG4gICAgKTtcbiAgfVxuICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IHJlc29sdmVkIGJyYW5jaFwiLCB7IHByb2plY3QsIGJyYW5jaDogY2hvaWNlIH0pO1xuICByZXR1cm4gY2hvaWNlO1xufVxuXG4vKipcbiAqIFBpY2sgdGhlIHByaW1hcnkgZW5kcG9pbnQgZm9yIGEgKHByb2plY3QsIGJyYW5jaCkuIFByZWZlcnNcbiAqIGBzdGF0dXMuZW5kcG9pbnRfdHlwZSA9PT0gRU5EUE9JTlRfVFlQRV9SRUFEX1dSSVRFYDsgZmFsbHMgYmFjayB0b1xuICogdGhlIG9ubHkgZW5kcG9pbnQgd2hlbiB0aGVyZSdzIGV4YWN0bHkgb25lLiBSZXR1cm5zIGB7IG5hbWUsIGhvc3QgfWBcbiAqIHNvIHRoZSBjYWxsZXIgY2FuIHBvcHVsYXRlIGJvdGggYExBS0VCQVNFX0VORFBPSU5UYCBhbmQgYFBHSE9TVGBcbiAqIGZyb20gYSBzaW5nbGUgY2FsbC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcGlja0VuZHBvaW50KFxuICB3czogV29ya3NwYWNlQ2xpZW50LFxuICBwcm9qZWN0OiBzdHJpbmcsXG4gIGJyYW5jaDogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGhvc3Q/OiBzdHJpbmcgfT4ge1xuICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBsaXN0RW5kcG9pbnRzKHdzLCBwcm9qZWN0LCBicmFuY2gsIHNpZ25hbCk7XG4gIGlmIChlbmRwb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICBgTGFrZWJhc2UgZW5kcG9pbnQgaW4gJ3Byb2plY3RzLyR7cHJvamVjdH0vYnJhbmNoZXMvJHticmFuY2h9J2AsXG4gICAgICBcIlRoZSBicmFuY2ggaGFzIG5vIGVuZHBvaW50czsgY3JlYXRlIG9uZSBvciBzZXQgTEFLRUJBU0VfRU5EUE9JTlQuXCIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBwcmltYXJ5ID1cbiAgICBlbmRwb2ludHMuZmluZCgoZSkgPT4gZS5zdGF0dXM/LmVuZHBvaW50X3R5cGUgPT09IFJFQURfV1JJVEVfRU5EUE9JTlRfVFlQRSkgPz9cbiAgICAoZW5kcG9pbnRzLmxlbmd0aCA9PT0gMSA/IGVuZHBvaW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIGlmICghcHJpbWFyeT8ubmFtZSkge1xuICAgIGNvbnN0IG5hbWVzID0gZW5kcG9pbnRzLm1hcCgoZSkgPT4gZS5uYW1lKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgXCJMYWtlYmFzZVwiLFxuICAgICAgYEJyYW5jaCBoYXMgbm8gcHJpbWFyeSByZWFkLXdyaXRlIGVuZHBvaW50OyBzZXQgTEFLRUJBU0VfRU5EUE9JTlQgb3IgY29uZmlnLmVuZHBvaW50LiBDYW5kaWRhdGVzOiAke25hbWVzLmpvaW4oXCIsIFwiKX1gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgaG9zdCA9IHByaW1hcnkuc3RhdHVzPy5ob3N0cz8uaG9zdDtcbiAgbG9nZ2VyLmRlYnVnKFwiYXV0b3BnOiByZXNvbHZlZCBlbmRwb2ludFwiLCB7IGVuZHBvaW50OiBwcmltYXJ5Lm5hbWUsIGhvc3QgfSk7XG4gIHJldHVybiB7IG5hbWU6IHByaW1hcnkubmFtZSwgaG9zdCB9O1xufVxuXG4vKipcbiAqIFBpY2sgdGhlIGRlZmF1bHQgcG9zdGdyZXMgZGF0YWJhc2UgZm9yIGEgKHByb2plY3QsIGJyYW5jaCkuIFRoZVxuICogUG9zdGdyZXMgZGF0YWJhc2UgTkFNRSAoYHN0YXR1cy5wb3N0Z3Jlc19kYXRhYmFzZWApIGlzIHdoYXRcbiAqIGBQR0RBVEFCQVNFYCBuZWVkcyAtIHRoaXMgZGlmZmVycyBmcm9tIHRoZSByZXNvdXJjZSBpZCwgd2hpY2ggY2FuXG4gKiB1c2UgYSBkaWZmZXJlbnQgc2VwYXJhdG9yIChlLmcuIHJlc291cmNlIGBkYXRhYnJpY2tzLXBvc3RncmVzYFxuICogc3VyZmFjZXMgYXMgZGF0YWJhc2UgYGRhdGFicmlja3NfcG9zdGdyZXNgKS4gUHJlZmVyc1xuICogYGRhdGFicmlja3NfcG9zdGdyZXNgICh0aGUgTGFrZWJhc2UgZGVmYXVsdCksIG90aGVyd2lzZSB0aGUgb25seVxuICogZGF0YWJhc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBpY2tEYXRhYmFzZShcbiAgd3M6IFdvcmtzcGFjZUNsaWVudCxcbiAgcHJvamVjdDogc3RyaW5nLFxuICBicmFuY2g6IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkYXRhYmFzZXMgPSBhd2FpdCBsaXN0RGF0YWJhc2VzKHdzLCBwcm9qZWN0LCBicmFuY2gsIHNpZ25hbCk7XG4gIGlmIChkYXRhYmFzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICBgTGFrZWJhc2UgZGF0YWJhc2UgaW4gJ3Byb2plY3RzLyR7cHJvamVjdH0vYnJhbmNoZXMvJHticmFuY2h9J2AsXG4gICAgICBcIlRoZSBicmFuY2ggaGFzIG5vIGRhdGFiYXNlczsgY3JlYXRlIG9uZSBvciBzZXQgUEdEQVRBQkFTRS5cIixcbiAgICApO1xuICB9XG4gIGNvbnN0IG5hbWVzID0gZGF0YWJhc2VzXG4gICAgLm1hcCgoZCkgPT4gZC5zdGF0dXM/LnBvc3RncmVzX2RhdGFiYXNlKVxuICAgIC5maWx0ZXIoKG4pOiBuIGlzIHN0cmluZyA9PiBCb29sZWFuKG4pKTtcbiAgY29uc3QgY2hvaWNlID1cbiAgICBuYW1lcy5maW5kKChuKSA9PiBuID09PSBERUZBVUxUX0RBVEFCQVNFKSA/PyAobmFtZXMubGVuZ3RoID09PSAxID8gbmFtZXNbMF0gOiB1bmRlZmluZWQpO1xuICBpZiAoIWNob2ljZSkge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgIFwiTGFrZWJhc2VcIixcbiAgICAgIGBNdWx0aXBsZSBkYXRhYmFzZXMgYW5kIG5vICcke0RFRkFVTFRfREFUQUJBU0V9Jzsgc2V0IFBHREFUQUJBU0Ugb3IgY29uZmlnLmRhdGFiYXNlLiBDYW5kaWRhdGVzOiAke25hbWVzLmpvaW4oXCIsIFwiKX1gLFxuICAgICk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKFwiYXV0b3BnOiByZXNvbHZlZCBkYXRhYmFzZVwiLCB7IGRhdGFiYXNlOiBjaG9pY2UgfSk7XG4gIHJldHVybiBjaG9pY2U7XG59XG4iXX0=
@@ -20,9 +20,10 @@
20
20
  *
21
21
  * @module
22
22
  */
23
- import { createLakebasePool, getWorkspaceClient, ValidationError } from "@databricks/appkit";
23
+ import { createLakebasePool, ValidationError } from "@databricks/appkit";
24
24
  import { postgresConnectionOptions, quotePostgresIdentifier } from "@dbx-tools/postgres";
25
25
  import { log, isDatabricksAppEnv, toError } from "@dbx-tools/shared-core";
26
+ import { createWorkspaceClient } from "./databricks.js";
26
27
  const defaultLogger = log.logger("provision");
27
28
  /** AppKit persistent-cache schema (see AppKit's `PersistentStorage`). */
28
29
  const CACHE_SCHEMA = "appkit";
@@ -89,13 +90,13 @@ export async function provisionCacheSchema(role, logger = defaultLogger) {
89
90
  }
90
91
  // Pass `user` explicitly: autopg resolves the connection target
91
92
  // (host/database/endpoint) but not the identity, so `createLakebasePool`'s
92
- // synchronous username lookup would otherwise throw. `getWorkspaceClient({})`
93
- // returns a fresh default-auth client - literally `new WorkspaceClient({})`,
94
- // but built against the SDK version AppKit's `createLakebasePool` expects
95
- // (importing the SDK class directly here pulls a newer, type-incompatible copy).
93
+ // synchronous username lookup would otherwise throw. The auth-backed AppKit
94
+ // client uses the SDK version `createLakebasePool` expects while retaining
95
+ // dbx-tools profile selection and interactive CLI recovery.
96
+ const workspaceClient = (await createWorkspaceClient()).toLegacyWorkspaceClient();
96
97
  const pool = createLakebasePool(postgresConnectionOptions({
97
98
  user: role,
98
- workspaceClient: getWorkspaceClient({}),
99
+ workspaceClient,
99
100
  connectionTimeoutMillis: CONNECT_TIMEOUT_MS,
100
101
  statement_timeout: STATEMENT_TIMEOUT_MS,
101
102
  }));
@@ -120,4 +121,4 @@ export async function provisionCacheSchema(role, logger = defaultLogger) {
120
121
  await pool.end().catch(() => { });
121
122
  }
122
123
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFlLE1BQU0sd0JBQXdCLENBQUM7QUFFdkYsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUU5Qyx5RUFBeUU7QUFDekUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRTlCOzs7R0FHRztBQUNILE1BQU0sWUFBWSxHQUFHLDJCQUEyQixDQUFDO0FBRWpEOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxPQUFPO1FBQ0wsaUNBQWlDLE1BQU0sT0FBTyxNQUFNLEVBQUU7UUFDdEQsZ0RBQWdELE1BQU0sT0FBTyxNQUFNLEVBQUU7UUFDckUsbURBQW1ELE1BQU0sT0FBTyxNQUFNLEVBQUU7UUFDeEUsc0NBQXNDLE1BQU0sMkJBQTJCLE1BQU0sRUFBRTtRQUMvRSxzQ0FBc0MsTUFBTSw4QkFBOEIsTUFBTSxFQUFFO0tBQ25GLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsSUFBd0IsRUFDeEIsU0FBaUIsYUFBYTtJQUU5QixJQUFJLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDMUUsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLENBQUMsSUFBSSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsT0FBTztJQUNULENBQUM7SUFDRCxnRUFBZ0U7SUFDaEUsMkVBQTJFO0lBQzNFLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsMEVBQTBFO0lBQzFFLGlGQUFpRjtJQUNqRixNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FDN0IseUJBQXlCLENBQUM7UUFDeEIsSUFBSSxFQUFFLElBQUk7UUFDVixlQUFlLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLHVCQUF1QixFQUFFLGtCQUFrQjtRQUMzQyxpQkFBaUIsRUFBRSxvQkFBb0I7S0FDeEMsQ0FBQyxDQUNILENBQUM7SUFDRixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQzVCLGtFQUFrRSxFQUNsRSxDQUFDLFlBQVksQ0FBQyxDQUNmLENBQUM7UUFDRixJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxpREFBaUQsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELEVBQUU7WUFDNUQsTUFBTSxFQUFFLFlBQVk7WUFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUM7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztZQUFTLENBQUM7UUFDVCxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExha2ViYXNlIGNhY2hlLXNjaGVtYSBncmFudCBmaXgtdXAuXG4gKlxuICogQXBwS2l0J3MgcGVyc2lzdGVudCBjYWNoZSAoYENhY2hlTWFuYWdlcmAgLT4gYFBlcnNpc3RlbnRTdG9yYWdlYCkgdXNlcyBhXG4gKiBzY2hlbWEgYGFwcGtpdGAgYW5kIGEgdGFibGUgYGFwcGtpdC5hcHBraXRfY2FjaGVfZW50cmllc2AuIFdoZW4gdGhlIGNvbm5lY3RpbmdcbiAqIERhdGFicmlja3MgaWRlbnRpdHkgbGFja3MgcHJpdmlsZWdlcyBvbiB0aGF0IHNjaGVtYSwgdGhlIGNhY2hlIG1pZ3JhdGlvblxuICogdGhyb3dzLCBhbmQgYmVjYXVzZSBBcHBLaXQgaXMgdHlwaWNhbGx5IHJ1biB3aXRoIGBjYWNoZS5zdHJpY3RQZXJzaXN0ZW5jZTpcbiAqIHRydWVgLCB0aGUgY2FjaGUgaXMgc2lsZW50bHkgc3dpdGNoZWQgdG8gYSBkaXNhYmxlZCBpbi1tZW1vcnkgc3R1YiAtIHNvIGV2ZXJ5XG4gKiBwZXJzaXN0ZW50IHJlYWQgKGNoYXJ0IGxvbmctcG9sbCwgaGlzdG9yeSwgZXRjLikgbWlzc2VzIGFuZCA0MDRzLlxuICpcbiAqIFRoaXMgZ3JhbnRzIHRoZSBjb25uZWN0aW5nIHJvbGUgZnVsbCByaWdodHMgb24gdGhlIGNhY2hlIHNjaGVtYSwgYnV0IG9ubHkgd2hlblxuICogdGhlIHNjaGVtYSBBTFJFQURZIEVYSVNUUyAtIGl0IG5ldmVyIGNyZWF0ZXMgdGhlIHNjaGVtYSBpdHNlbGYuIFJ1biBmcm9tIGFcbiAqIExPQ0FMIGlkZW50aXR5IHRoYXQgb3ducyB0aGUgc2NoZW1hIChvciBob2xkcyBncmFudCBvcHRpb24gb24gaXQpOyBpdCBpc1xuICogc2tpcHBlZCBpbnNpZGUgYSBEYXRhYnJpY2tzIEFwcCwgd2hlcmUgdGhlIGFwcCBTUCBjYW5ub3QgZ3JhbnQgYW5kIGl0c1xuICogUG9zdGdyZXMgcm9sZSBkb2VzIG5vdCBleGlzdCB1bnRpbCBpdHMgZmlyc3QgY29ubmVjdGlvbi5cbiAqXG4gKiBNdXN0IHJ1biBBRlRFUiB7QGxpbmsgYXBwbHlMYWtlYmFzZVRvRW52fSBoYXMgd3JpdHRlbiB0aGUgcmVzb2x2ZWQgY29ubmVjdGlvblxuICogdG8gYHByb2Nlc3MuZW52YCAoc28gYGNyZWF0ZUxha2ViYXNlUG9vbGAgcGlja3MgdXAgaG9zdCAvIGRhdGFiYXNlIC8gZW5kcG9pbnQpXG4gKiBhbmQgQkVGT1JFIGBjcmVhdGVBcHBgIGluaXRpYWxpemVzIHRoZSBjYWNoZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlTGFrZWJhc2VQb29sLCBnZXRXb3Jrc3BhY2VDbGllbnQsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHBvc3RncmVzQ29ubmVjdGlvbk9wdGlvbnMsIHF1b3RlUG9zdGdyZXNJZGVudGlmaWVyIH0gZnJvbSBcIkBkYngtdG9vbHMvcG9zdGdyZXNcIjtcbmltcG9ydCB7IGxvZywgaXNEYXRhYnJpY2tzQXBwRW52LCB0b0Vycm9yLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmNvbnN0IGRlZmF1bHRMb2dnZXIgPSBsb2cubG9nZ2VyKFwicHJvdmlzaW9uXCIpO1xuXG4vKiogQXBwS2l0IHBlcnNpc3RlbnQtY2FjaGUgc2NoZW1hIChzZWUgQXBwS2l0J3MgYFBlcnNpc3RlbnRTdG9yYWdlYCkuICovXG5jb25zdCBDQUNIRV9TQ0hFTUEgPSBcImFwcGtpdFwiO1xuXG4vKipcbiAqIENoYXJhY3RlcnMgYSBMYWtlYmFzZSBQb3N0Z3JlcyByb2xlIGNhbiBsZWdpdGltYXRlbHkgY29udGFpbjogd29ya3NwYWNlXG4gKiBpZGVudGl0aWVzIGFyZSBlbWFpbHMsIHNlcnZpY2UgcHJpbmNpcGFscyBhcmUgVVVJRHMuXG4gKi9cbmNvbnN0IFJPTEVfUEFUVEVSTiA9IC9eW0EtWmEtejAtOS5fQCstXXsxLDI1NX0kLztcblxuLyoqXG4gKiBQcm92aXNpb25pbmcgcnVucyBhdCBib290IGFzIHRoZSBsb2NhbCBkZXZlbG9wZXIgaWRlbnRpdHksIGJlZm9yZSBhbnkgcGx1Z2luXG4gKiBleGlzdHMsIHNvIGl0IGlzIG91dHNpZGUgQXBwS2l0J3MgaW50ZXJjZXB0b3IgY2hhaW4gYW5kIGluaGVyaXRzIG5vIHRpbWVvdXRcbiAqIGZyb20gaXQuIEJvdGggYm91bmRzIGFyZSBleHBsaWNpdCBmb3IgdGhhdCByZWFzb24uXG4gKi9cbmNvbnN0IENPTk5FQ1RfVElNRU9VVF9NUyA9IDEwXzAwMDtcbmNvbnN0IFNUQVRFTUVOVF9USU1FT1VUX01TID0gMTVfMDAwO1xuXG4vKipcbiAqIElkZW1wb3RlbnQgZ3JhbnRzIHRoYXQgbWFrZSB0aGUgKGFscmVhZHktZXhpc3RpbmcpIEFwcEtpdCBjYWNoZSBzY2hlbWEgZnVsbHlcbiAqIHVzYWJsZSBieSBgcm9sZWAuIFRoZSBgQUxURVIgREVGQVVMVCBQUklWSUxFR0VTYCBsaW5lcyBjb3ZlciB0aGUgY2FjaGUgdGFibGVcbiAqIHdoZW5ldmVyIHRoZSBzY2hlbWEgb3duZXIgY3JlYXRlcyBpdCBsYXRlci5cbiAqXG4gKiBUaHJvd3MgYSB7QGxpbmsgVmFsaWRhdGlvbkVycm9yfSB3aGVuIGByb2xlYCBpcyBub3QgYSBwbGF1c2libGUgUG9zdGdyZXMgcm9sZVxuICogbmFtZSwgc2luY2UgdGhlIHZhbHVlIGxhbmRzIGluIGFuIGlkZW50aWZpZXIgcG9zaXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUdyYW50U3RhdGVtZW50cyhyb2xlOiBzdHJpbmcpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGlmICghUk9MRV9QQVRURVJOLnRlc3Qocm9sZSkpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFwicm9sZVwiLCByb2xlLCBcImEgUG9zdGdyZXMgcm9sZSBuYW1lXCIpO1xuICB9XG4gIGNvbnN0IHNjaGVtYSA9IHF1b3RlUG9zdGdyZXNJZGVudGlmaWVyKENBQ0hFX1NDSEVNQSk7XG4gIGNvbnN0IHRhcmdldCA9IHF1b3RlUG9zdGdyZXNJZGVudGlmaWVyKHJvbGUpO1xuICByZXR1cm4gW1xuICAgIGBHUkFOVCBVU0FHRSwgQ1JFQVRFIE9OIFNDSEVNQSAke3NjaGVtYX0gVE8gJHt0YXJnZXR9YCxcbiAgICBgR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gQUxMIFRBQkxFUyBJTiBTQ0hFTUEgJHtzY2hlbWF9IFRPICR7dGFyZ2V0fWAsXG4gICAgYEdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIEFMTCBTRVFVRU5DRVMgSU4gU0NIRU1BICR7c2NoZW1hfSBUTyAke3RhcmdldH1gLFxuICAgIGBBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMgSU4gU0NIRU1BICR7c2NoZW1hfSBHUkFOVCBBTEwgT04gVEFCTEVTIFRPICR7dGFyZ2V0fWAsXG4gICAgYEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBJTiBTQ0hFTUEgJHtzY2hlbWF9IEdSQU5UIEFMTCBPTiBTRVFVRU5DRVMgVE8gJHt0YXJnZXR9YCxcbiAgXTtcbn1cblxuLyoqXG4gKiBHcmFudCBgcm9sZWAgcmlnaHRzIG9uIHRoZSBBcHBLaXQgY2FjaGUgc2NoZW1hLCBidXQgb25seSB3aGVuIHRoYXQgc2NoZW1hXG4gKiBhbHJlYWR5IGV4aXN0cy5cbiAqXG4gKiBOby1vcHMgaW5zaWRlIGEgRGF0YWJyaWNrcyBBcHAgZW52LCB3aGVuIGByb2xlYCBpcyB1bmRlZmluZWQsIG9yIHdoZW4gdGhlXG4gKiBzY2hlbWEgaXMgYWJzZW50LiBCZXN0LWVmZm9ydCBvdGhlcndpc2U6IGFueSBmYWlsdXJlIChlLmcuIHRoZSBsb2NhbCBpZGVudGl0eVxuICogZG9lc24ndCBvd24gdGhlIHNjaGVtYSkgaXMgbG9nZ2VkIGFuZCBzd2FsbG93ZWQgc28gaXQgbmV2ZXIgYmxvY2tzIHN0YXJ0dXAgLVxuICogYSBkaXNhYmxlZCBjYWNoZSBpcyBkZWdyYWRlZCwgbm90IGZhdGFsLlxuICpcbiAqIEBwYXJhbSByb2xlIC0gUG9zdGdyZXMgcm9sZSB0byBncmFudCB0byBhbmQgY29ubmVjdCBhcyAodGhlIHJlc29sdmVkXG4gKiAgIHdvcmtzcGFjZS1jbGllbnQgaWRlbnRpdHkpOyBza2lwcyB3aGVuIHVuZGVmaW5lZC5cbiAqIEBwYXJhbSBsb2dnZXIgLSBMb2dnZXIgdG8gcmVwb3J0IHByb2dyZXNzIG9uLiBEZWZhdWx0cyB0byB0aGlzIG1vZHVsZSdzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBwcm92aXNpb24gfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbiAqXG4gKiBhd2FpdCBwcm92aXNpb24ucHJvdmlzaW9uQ2FjaGVTY2hlbWEoXCJhcHAtc2VydmljZS1wcmluY2lwYWxAZGF0YWJyaWNrcy5jb21cIik7XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm92aXNpb25DYWNoZVNjaGVtYShcbiAgcm9sZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBsb2dnZXI6IExvZ2dlciA9IGRlZmF1bHRMb2dnZXIsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGlzRGF0YWJyaWNrc0FwcEVudigpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYXV0b3BnOiBza2lwIGNhY2hlIHByb3Zpc2lvbmluZyAoaW5zaWRlIGEgRGF0YWJyaWNrcyBBcHApXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXJvbGUpIHtcbiAgICBsb2dnZXIud2FybihcImF1dG9wZzogc2tpcCBjYWNoZSBwcm92aXNpb25pbmcgKGNvdWxkIG5vdCByZXNvbHZlIGNvbm5lY3Rpbmcgcm9sZSlcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFBhc3MgYHVzZXJgIGV4cGxpY2l0bHk6IGF1dG9wZyByZXNvbHZlcyB0aGUgY29ubmVjdGlvbiB0YXJnZXRcbiAgLy8gKGhvc3QvZGF0YWJhc2UvZW5kcG9pbnQpIGJ1dCBub3QgdGhlIGlkZW50aXR5LCBzbyBgY3JlYXRlTGFrZWJhc2VQb29sYCdzXG4gIC8vIHN5bmNocm9ub3VzIHVzZXJuYW1lIGxvb2t1cCB3b3VsZCBvdGhlcndpc2UgdGhyb3cuIGBnZXRXb3Jrc3BhY2VDbGllbnQoe30pYFxuICAvLyByZXR1cm5zIGEgZnJlc2ggZGVmYXVsdC1hdXRoIGNsaWVudCAtIGxpdGVyYWxseSBgbmV3IFdvcmtzcGFjZUNsaWVudCh7fSlgLFxuICAvLyBidXQgYnVpbHQgYWdhaW5zdCB0aGUgU0RLIHZlcnNpb24gQXBwS2l0J3MgYGNyZWF0ZUxha2ViYXNlUG9vbGAgZXhwZWN0c1xuICAvLyAoaW1wb3J0aW5nIHRoZSBTREsgY2xhc3MgZGlyZWN0bHkgaGVyZSBwdWxscyBhIG5ld2VyLCB0eXBlLWluY29tcGF0aWJsZSBjb3B5KS5cbiAgY29uc3QgcG9vbCA9IGNyZWF0ZUxha2ViYXNlUG9vbChcbiAgICBwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zKHtcbiAgICAgIHVzZXI6IHJvbGUsXG4gICAgICB3b3Jrc3BhY2VDbGllbnQ6IGdldFdvcmtzcGFjZUNsaWVudCh7fSksXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogQ09OTkVDVF9USU1FT1VUX01TLFxuICAgICAgc3RhdGVtZW50X3RpbWVvdXQ6IFNUQVRFTUVOVF9USU1FT1VUX01TLFxuICAgIH0pLFxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgcG9vbC5xdWVyeShcbiAgICAgIFwiU0VMRUNUIDEgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuc2NoZW1hdGEgV0hFUkUgc2NoZW1hX25hbWUgPSAkMVwiLFxuICAgICAgW0NBQ0hFX1NDSEVNQV0sXG4gICAgKTtcbiAgICBpZiAoZm91bmQucm93Q291bnQgPT09IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImF1dG9wZzogc2tpcCBjYWNoZSBwcm92aXNpb25pbmcgKHNjaGVtYSBhYnNlbnQpXCIsIHsgc2NoZW1hOiBDQUNIRV9TQ0hFTUEgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3FsIG9mIGNhY2hlR3JhbnRTdGF0ZW1lbnRzKHJvbGUpKSB7XG4gICAgICBhd2FpdCBwb29sLnF1ZXJ5KHNxbCk7XG4gICAgfVxuICAgIGxvZ2dlci5pbmZvKFwiYXV0b3BnOiBncmFudGVkIGNhY2hlIHNjaGVtYVwiLCB7IHNjaGVtYTogQ0FDSEVfU0NIRU1BLCByb2xlIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihcImF1dG9wZzogY2FjaGUgcHJvdmlzaW9uaW5nIGZhaWxlZCAoY29udGludWluZylcIiwge1xuICAgICAgc2NoZW1hOiBDQUNIRV9TQ0hFTUEsXG4gICAgICBlcnJvcjogdG9FcnJvcihlcnIpLFxuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHBvb2wuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG59XG4iXX0=
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFlLE1BQU0sd0JBQXdCLENBQUM7QUFFdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUU5Qyx5RUFBeUU7QUFDekUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRTlCOzs7R0FHRztBQUNILE1BQU0sWUFBWSxHQUFHLDJCQUEyQixDQUFDO0FBRWpEOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxPQUFPO1FBQ0wsaUNBQWlDLE1BQU0sT0FBTyxNQUFNLEVBQUU7UUFDdEQsZ0RBQWdELE1BQU0sT0FBTyxNQUFNLEVBQUU7UUFDckUsbURBQW1ELE1BQU0sT0FBTyxNQUFNLEVBQUU7UUFDeEUsc0NBQXNDLE1BQU0sMkJBQTJCLE1BQU0sRUFBRTtRQUMvRSxzQ0FBc0MsTUFBTSw4QkFBOEIsTUFBTSxFQUFFO0tBQ25GLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsSUFBd0IsRUFDeEIsU0FBaUIsYUFBYTtJQUU5QixJQUFJLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDMUUsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLENBQUMsSUFBSSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDbkYsT0FBTztJQUNULENBQUM7SUFDRCxnRUFBZ0U7SUFDaEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsNERBQTREO0lBQzVELE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBTSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNsRixNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FDN0IseUJBQXlCLENBQUM7UUFDeEIsSUFBSSxFQUFFLElBQUk7UUFDVixlQUFlO1FBQ2YsdUJBQXVCLEVBQUUsa0JBQWtCO1FBQzNDLGlCQUFpQixFQUFFLG9CQUFvQjtLQUN4QyxDQUFDLENBQ0gsQ0FBQztJQUNGLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDNUIsa0VBQWtFLEVBQ2xFLENBQUMsWUFBWSxDQUFDLENBQ2YsQ0FBQztRQUNGLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDMUYsT0FBTztRQUNULENBQUM7UUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsRUFBRTtZQUM1RCxNQUFNLEVBQUUsWUFBWTtZQUNwQixLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQztTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGFrZWJhc2UgY2FjaGUtc2NoZW1hIGdyYW50IGZpeC11cC5cbiAqXG4gKiBBcHBLaXQncyBwZXJzaXN0ZW50IGNhY2hlIChgQ2FjaGVNYW5hZ2VyYCAtPiBgUGVyc2lzdGVudFN0b3JhZ2VgKSB1c2VzIGFcbiAqIHNjaGVtYSBgYXBwa2l0YCBhbmQgYSB0YWJsZSBgYXBwa2l0LmFwcGtpdF9jYWNoZV9lbnRyaWVzYC4gV2hlbiB0aGUgY29ubmVjdGluZ1xuICogRGF0YWJyaWNrcyBpZGVudGl0eSBsYWNrcyBwcml2aWxlZ2VzIG9uIHRoYXQgc2NoZW1hLCB0aGUgY2FjaGUgbWlncmF0aW9uXG4gKiB0aHJvd3MsIGFuZCBiZWNhdXNlIEFwcEtpdCBpcyB0eXBpY2FsbHkgcnVuIHdpdGggYGNhY2hlLnN0cmljdFBlcnNpc3RlbmNlOlxuICogdHJ1ZWAsIHRoZSBjYWNoZSBpcyBzaWxlbnRseSBzd2l0Y2hlZCB0byBhIGRpc2FibGVkIGluLW1lbW9yeSBzdHViIC0gc28gZXZlcnlcbiAqIHBlcnNpc3RlbnQgcmVhZCAoY2hhcnQgbG9uZy1wb2xsLCBoaXN0b3J5LCBldGMuKSBtaXNzZXMgYW5kIDQwNHMuXG4gKlxuICogVGhpcyBncmFudHMgdGhlIGNvbm5lY3Rpbmcgcm9sZSBmdWxsIHJpZ2h0cyBvbiB0aGUgY2FjaGUgc2NoZW1hLCBidXQgb25seSB3aGVuXG4gKiB0aGUgc2NoZW1hIEFMUkVBRFkgRVhJU1RTIC0gaXQgbmV2ZXIgY3JlYXRlcyB0aGUgc2NoZW1hIGl0c2VsZi4gUnVuIGZyb20gYVxuICogTE9DQUwgaWRlbnRpdHkgdGhhdCBvd25zIHRoZSBzY2hlbWEgKG9yIGhvbGRzIGdyYW50IG9wdGlvbiBvbiBpdCk7IGl0IGlzXG4gKiBza2lwcGVkIGluc2lkZSBhIERhdGFicmlja3MgQXBwLCB3aGVyZSB0aGUgYXBwIFNQIGNhbm5vdCBncmFudCBhbmQgaXRzXG4gKiBQb3N0Z3JlcyByb2xlIGRvZXMgbm90IGV4aXN0IHVudGlsIGl0cyBmaXJzdCBjb25uZWN0aW9uLlxuICpcbiAqIE11c3QgcnVuIEFGVEVSIHtAbGluayBhcHBseUxha2ViYXNlVG9FbnZ9IGhhcyB3cml0dGVuIHRoZSByZXNvbHZlZCBjb25uZWN0aW9uXG4gKiB0byBgcHJvY2Vzcy5lbnZgIChzbyBgY3JlYXRlTGFrZWJhc2VQb29sYCBwaWNrcyB1cCBob3N0IC8gZGF0YWJhc2UgLyBlbmRwb2ludClcbiAqIGFuZCBCRUZPUkUgYGNyZWF0ZUFwcGAgaW5pdGlhbGl6ZXMgdGhlIGNhY2hlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVMYWtlYmFzZVBvb2wsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHBvc3RncmVzQ29ubmVjdGlvbk9wdGlvbnMsIHF1b3RlUG9zdGdyZXNJZGVudGlmaWVyIH0gZnJvbSBcIkBkYngtdG9vbHMvcG9zdGdyZXNcIjtcbmltcG9ydCB7IGxvZywgaXNEYXRhYnJpY2tzQXBwRW52LCB0b0Vycm9yLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCIuL2RhdGFicmlja3MudHNcIjtcblxuY29uc3QgZGVmYXVsdExvZ2dlciA9IGxvZy5sb2dnZXIoXCJwcm92aXNpb25cIik7XG5cbi8qKiBBcHBLaXQgcGVyc2lzdGVudC1jYWNoZSBzY2hlbWEgKHNlZSBBcHBLaXQncyBgUGVyc2lzdGVudFN0b3JhZ2VgKS4gKi9cbmNvbnN0IENBQ0hFX1NDSEVNQSA9IFwiYXBwa2l0XCI7XG5cbi8qKlxuICogQ2hhcmFjdGVycyBhIExha2ViYXNlIFBvc3RncmVzIHJvbGUgY2FuIGxlZ2l0aW1hdGVseSBjb250YWluOiB3b3Jrc3BhY2VcbiAqIGlkZW50aXRpZXMgYXJlIGVtYWlscywgc2VydmljZSBwcmluY2lwYWxzIGFyZSBVVUlEcy5cbiAqL1xuY29uc3QgUk9MRV9QQVRURVJOID0gL15bQS1aYS16MC05Ll9AKy1dezEsMjU1fSQvO1xuXG4vKipcbiAqIFByb3Zpc2lvbmluZyBydW5zIGF0IGJvb3QgYXMgdGhlIGxvY2FsIGRldmVsb3BlciBpZGVudGl0eSwgYmVmb3JlIGFueSBwbHVnaW5cbiAqIGV4aXN0cywgc28gaXQgaXMgb3V0c2lkZSBBcHBLaXQncyBpbnRlcmNlcHRvciBjaGFpbiBhbmQgaW5oZXJpdHMgbm8gdGltZW91dFxuICogZnJvbSBpdC4gQm90aCBib3VuZHMgYXJlIGV4cGxpY2l0IGZvciB0aGF0IHJlYXNvbi5cbiAqL1xuY29uc3QgQ09OTkVDVF9USU1FT1VUX01TID0gMTBfMDAwO1xuY29uc3QgU1RBVEVNRU5UX1RJTUVPVVRfTVMgPSAxNV8wMDA7XG5cbi8qKlxuICogSWRlbXBvdGVudCBncmFudHMgdGhhdCBtYWtlIHRoZSAoYWxyZWFkeS1leGlzdGluZykgQXBwS2l0IGNhY2hlIHNjaGVtYSBmdWxseVxuICogdXNhYmxlIGJ5IGByb2xlYC4gVGhlIGBBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVNgIGxpbmVzIGNvdmVyIHRoZSBjYWNoZSB0YWJsZVxuICogd2hlbmV2ZXIgdGhlIHNjaGVtYSBvd25lciBjcmVhdGVzIGl0IGxhdGVyLlxuICpcbiAqIFRocm93cyBhIHtAbGluayBWYWxpZGF0aW9uRXJyb3J9IHdoZW4gYHJvbGVgIGlzIG5vdCBhIHBsYXVzaWJsZSBQb3N0Z3JlcyByb2xlXG4gKiBuYW1lLCBzaW5jZSB0aGUgdmFsdWUgbGFuZHMgaW4gYW4gaWRlbnRpZmllciBwb3NpdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlR3JhbnRTdGF0ZW1lbnRzKHJvbGU6IHN0cmluZyk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgaWYgKCFST0xFX1BBVFRFUk4udGVzdChyb2xlKSkge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXCJyb2xlXCIsIHJvbGUsIFwiYSBQb3N0Z3JlcyByb2xlIG5hbWVcIik7XG4gIH1cbiAgY29uc3Qgc2NoZW1hID0gcXVvdGVQb3N0Z3Jlc0lkZW50aWZpZXIoQ0FDSEVfU0NIRU1BKTtcbiAgY29uc3QgdGFyZ2V0ID0gcXVvdGVQb3N0Z3Jlc0lkZW50aWZpZXIocm9sZSk7XG4gIHJldHVybiBbXG4gICAgYEdSQU5UIFVTQUdFLCBDUkVBVEUgT04gU0NIRU1BICR7c2NoZW1hfSBUTyAke3RhcmdldH1gLFxuICAgIGBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBBTEwgVEFCTEVTIElOIFNDSEVNQSAke3NjaGVtYX0gVE8gJHt0YXJnZXR9YCxcbiAgICBgR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gQUxMIFNFUVVFTkNFUyBJTiBTQ0hFTUEgJHtzY2hlbWF9IFRPICR7dGFyZ2V0fWAsXG4gICAgYEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBJTiBTQ0hFTUEgJHtzY2hlbWF9IEdSQU5UIEFMTCBPTiBUQUJMRVMgVE8gJHt0YXJnZXR9YCxcbiAgICBgQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIElOIFNDSEVNQSAke3NjaGVtYX0gR1JBTlQgQUxMIE9OIFNFUVVFTkNFUyBUTyAke3RhcmdldH1gLFxuICBdO1xufVxuXG4vKipcbiAqIEdyYW50IGByb2xlYCByaWdodHMgb24gdGhlIEFwcEtpdCBjYWNoZSBzY2hlbWEsIGJ1dCBvbmx5IHdoZW4gdGhhdCBzY2hlbWFcbiAqIGFscmVhZHkgZXhpc3RzLlxuICpcbiAqIE5vLW9wcyBpbnNpZGUgYSBEYXRhYnJpY2tzIEFwcCBlbnYsIHdoZW4gYHJvbGVgIGlzIHVuZGVmaW5lZCwgb3Igd2hlbiB0aGVcbiAqIHNjaGVtYSBpcyBhYnNlbnQuIEJlc3QtZWZmb3J0IG90aGVyd2lzZTogYW55IGZhaWx1cmUgKGUuZy4gdGhlIGxvY2FsIGlkZW50aXR5XG4gKiBkb2Vzbid0IG93biB0aGUgc2NoZW1hKSBpcyBsb2dnZWQgYW5kIHN3YWxsb3dlZCBzbyBpdCBuZXZlciBibG9ja3Mgc3RhcnR1cCAtXG4gKiBhIGRpc2FibGVkIGNhY2hlIGlzIGRlZ3JhZGVkLCBub3QgZmF0YWwuXG4gKlxuICogQHBhcmFtIHJvbGUgLSBQb3N0Z3JlcyByb2xlIHRvIGdyYW50IHRvIGFuZCBjb25uZWN0IGFzICh0aGUgcmVzb2x2ZWRcbiAqICAgd29ya3NwYWNlLWNsaWVudCBpZGVudGl0eSk7IHNraXBzIHdoZW4gdW5kZWZpbmVkLlxuICogQHBhcmFtIGxvZ2dlciAtIExvZ2dlciB0byByZXBvcnQgcHJvZ3Jlc3Mgb24uIERlZmF1bHRzIHRvIHRoaXMgbW9kdWxlJ3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IHByb3Zpc2lvbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIGF3YWl0IHByb3Zpc2lvbi5wcm92aXNpb25DYWNoZVNjaGVtYShcImFwcC1zZXJ2aWNlLXByaW5jaXBhbEBkYXRhYnJpY2tzLmNvbVwiKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb3Zpc2lvbkNhY2hlU2NoZW1hKFxuICByb2xlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGxvZ2dlcjogTG9nZ2VyID0gZGVmYXVsdExvZ2dlcixcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoaXNEYXRhYnJpY2tzQXBwRW52KCkpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IHNraXAgY2FjaGUgcHJvdmlzaW9uaW5nIChpbnNpZGUgYSBEYXRhYnJpY2tzIEFwcClcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghcm9sZSkge1xuICAgIGxvZ2dlci53YXJuKFwiYXV0b3BnOiBza2lwIGNhY2hlIHByb3Zpc2lvbmluZyAoY291bGQgbm90IHJlc29sdmUgY29ubmVjdGluZyByb2xlKVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gUGFzcyBgdXNlcmAgZXhwbGljaXRseTogYXV0b3BnIHJlc29sdmVzIHRoZSBjb25uZWN0aW9uIHRhcmdldFxuICAvLyAoaG9zdC9kYXRhYmFzZS9lbmRwb2ludCkgYnV0IG5vdCB0aGUgaWRlbnRpdHksIHNvIGBjcmVhdGVMYWtlYmFzZVBvb2xgJ3NcbiAgLy8gc3luY2hyb25vdXMgdXNlcm5hbWUgbG9va3VwIHdvdWxkIG90aGVyd2lzZSB0aHJvdy4gVGhlIGF1dGgtYmFja2VkIEFwcEtpdFxuICAvLyBjbGllbnQgdXNlcyB0aGUgU0RLIHZlcnNpb24gYGNyZWF0ZUxha2ViYXNlUG9vbGAgZXhwZWN0cyB3aGlsZSByZXRhaW5pbmdcbiAgLy8gZGJ4LXRvb2xzIHByb2ZpbGUgc2VsZWN0aW9uIGFuZCBpbnRlcmFjdGl2ZSBDTEkgcmVjb3ZlcnkuXG4gIGNvbnN0IHdvcmtzcGFjZUNsaWVudCA9IChhd2FpdCBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKSkudG9MZWdhY3lXb3Jrc3BhY2VDbGllbnQoKTtcbiAgY29uc3QgcG9vbCA9IGNyZWF0ZUxha2ViYXNlUG9vbChcbiAgICBwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zKHtcbiAgICAgIHVzZXI6IHJvbGUsXG4gICAgICB3b3Jrc3BhY2VDbGllbnQsXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogQ09OTkVDVF9USU1FT1VUX01TLFxuICAgICAgc3RhdGVtZW50X3RpbWVvdXQ6IFNUQVRFTUVOVF9USU1FT1VUX01TLFxuICAgIH0pLFxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgcG9vbC5xdWVyeShcbiAgICAgIFwiU0VMRUNUIDEgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuc2NoZW1hdGEgV0hFUkUgc2NoZW1hX25hbWUgPSAkMVwiLFxuICAgICAgW0NBQ0hFX1NDSEVNQV0sXG4gICAgKTtcbiAgICBpZiAoZm91bmQucm93Q291bnQgPT09IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImF1dG9wZzogc2tpcCBjYWNoZSBwcm92aXNpb25pbmcgKHNjaGVtYSBhYnNlbnQpXCIsIHsgc2NoZW1hOiBDQUNIRV9TQ0hFTUEgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3FsIG9mIGNhY2hlR3JhbnRTdGF0ZW1lbnRzKHJvbGUpKSB7XG4gICAgICBhd2FpdCBwb29sLnF1ZXJ5KHNxbCk7XG4gICAgfVxuICAgIGxvZ2dlci5pbmZvKFwiYXV0b3BnOiBncmFudGVkIGNhY2hlIHNjaGVtYVwiLCB7IHNjaGVtYTogQ0FDSEVfU0NIRU1BLCByb2xlIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihcImF1dG9wZzogY2FjaGUgcHJvdmlzaW9uaW5nIGZhaWxlZCAoY29udGludWluZylcIiwge1xuICAgICAgc2NoZW1hOiBDQUNIRV9TQ0hFTUEsXG4gICAgICBlcnJvcjogdG9FcnJvcihlcnIpLFxuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHBvb2wuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "devDependencies": {
22
22
  "@databricks/appkit": "0.81.0",
23
- "@dbx-tools/projen": "^0.9.188",
23
+ "@dbx-tools/projen": "0.9.189",
24
24
  "@types/json-schema": "^7",
25
25
  "@types/node": "^24.6.0",
26
26
  "typescript": "^5.9.3",
@@ -31,14 +31,14 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@databricks/sdk-experimental": "^0.17.0",
34
- "@dbx-tools/auth": "^0.9.188",
35
- "@dbx-tools/cache": "^0.9.188",
36
- "@dbx-tools/core": "^0.9.188",
37
- "@dbx-tools/lakebase": "^0.9.188",
38
- "@dbx-tools/postgres": "^0.9.188",
39
- "@dbx-tools/shared-appkit": "^0.9.188",
40
- "@dbx-tools/shared-core": "^0.9.188",
41
- "@dbx-tools/shared-fs": "^0.9.188",
34
+ "@dbx-tools/auth": "0.9.189",
35
+ "@dbx-tools/cache": "0.9.189",
36
+ "@dbx-tools/core": "0.9.189",
37
+ "@dbx-tools/lakebase": "0.9.189",
38
+ "@dbx-tools/postgres": "0.9.189",
39
+ "@dbx-tools/shared-appkit": "0.9.189",
40
+ "@dbx-tools/shared-core": "0.9.189",
41
+ "@dbx-tools/shared-fs": "0.9.189",
42
42
  "@opentelemetry/api": "1.9.1",
43
43
  "@opentelemetry/sdk-trace-base": "2.8.0",
44
44
  "zod": "4.3.6"
@@ -61,7 +61,7 @@
61
61
  "./package.json": "./package.json"
62
62
  }
63
63
  },
64
- "version": "0.9.188",
64
+ "version": "0.9.189",
65
65
  "types": "./lib/index.d.ts",
66
66
  "dbxToolsConfig": {
67
67
  "tags": [
@@ -17,7 +17,7 @@
17
17
  import { EventEmitter } from "node:events";
18
18
  import { createRequire } from "node:module";
19
19
  import { dirname, join } from "node:path";
20
- import { createLakebasePool, getWorkspaceClient, type CacheConfig } from "@databricks/appkit";
20
+ import { createLakebasePool, type CacheConfig } from "@databricks/appkit";
21
21
  import {
22
22
  closeCache,
23
23
  createCache,
@@ -28,6 +28,7 @@ import {
28
28
  import { postgresConnectionOptions } from "@dbx-tools/postgres";
29
29
  import { log, toError, id } from "@dbx-tools/shared-core";
30
30
  import { handleOwnershipMigrationError } from "./migration.ts";
31
+ import { createWorkspaceClient } from "./databricks.ts";
31
32
 
32
33
  const logger = log.logger("cache-storage");
33
34
 
@@ -315,8 +316,9 @@ async function createPersistentStorage(
315
316
 
316
317
  let pool: LakebasePool | undefined;
317
318
  try {
319
+ const workspaceClient = (await createWorkspaceClient()).toLegacyWorkspaceClient();
318
320
  const createdPool = createLakebasePool(
319
- postgresConnectionOptions({ workspaceClient: getWorkspaceClient({}) }),
321
+ postgresConnectionOptions({ workspaceClient }),
320
322
  );
321
323
  pool = createdPool;
322
324
  const storage = new PersistentStorage(cache ?? {}, createdPool);
package/src/databricks.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Generic Databricks SDK glue (no AppKit): adapt WHATWG cancellation
2
+ * Databricks SDK glue for AppKit: create workspace clients backed by the
3
+ * `@dbx-tools/auth` credential lifecycle and adapt WHATWG cancellation
3
4
  * (`AbortSignal` / `AbortController`) into the SDK's `Context` /
4
5
  * `CancellationToken` shapes so a single `AbortController` can drive every
5
6
  * in-flight SDK call.
@@ -10,10 +11,62 @@
10
11
  * @module
11
12
  */
12
13
 
14
+ import {
15
+ createWorkspaceClient as createAppKitWorkspaceClient,
16
+ type WorkspaceClient,
17
+ } from "@databricks/appkit";
13
18
  import type { CancellationToken } from "@databricks/sdk-experimental";
14
19
  import { Context } from "@databricks/sdk-experimental";
20
+ import {
21
+ type AuthClient,
22
+ type DatabricksAuthOptions,
23
+ createAuthClient,
24
+ } from "@dbx-tools/auth";
15
25
  import { tieAbortSignal } from "@dbx-tools/shared-core";
16
26
 
27
+ const workspaceAuth = new WeakMap<WorkspaceClient, AuthClient>();
28
+
29
+ /**
30
+ * Create an AppKit workspace client whose SDK credential visitor delegates to
31
+ * `@dbx-tools/auth`.
32
+ *
33
+ * Auth resolves the selected profile, host, token lifecycle, interactive CLI
34
+ * login, and unified-workspace header. The AppKit/Databricks SDK client remains
35
+ * the owner of workspace APIs and request execution.
36
+ */
37
+ export async function createWorkspaceClient(
38
+ options: DatabricksAuthOptions = {},
39
+ ): Promise<WorkspaceClient> {
40
+ const auth = await createAuthClient(options);
41
+ const client = createAppKitWorkspaceClient({ host: auth.host });
42
+ client.config.credentials = {
43
+ name: "pat",
44
+ async configure() {
45
+ return async (headers) => {
46
+ for (const [name, value] of Object.entries(await auth.headers())) {
47
+ headers.set(name, value);
48
+ }
49
+ };
50
+ },
51
+ };
52
+ workspaceAuth.set(client, auth);
53
+ return client;
54
+ }
55
+
56
+ /**
57
+ * Refresh the dbx-tools credential lifecycle attached by
58
+ * {@link createWorkspaceClient}. Returns `false` for clients whose credential
59
+ * owner is external.
60
+ */
61
+ export async function refreshWorkspaceClientAuthentication(
62
+ client: WorkspaceClient,
63
+ ): Promise<boolean> {
64
+ const auth = workspaceAuth.get(client);
65
+ if (!auth) return false;
66
+ await auth.headers({ login: false, refresh: true });
67
+ return true;
68
+ }
69
+
17
70
  /** Either an SDK `Context` or a WHATWG `AbortSignal`. */
18
71
  export type ContextLike = Context | AbortSignal;
19
72
 
@@ -39,8 +39,8 @@ import {
39
39
  ConfigurationError,
40
40
  ExecutionError,
41
41
  getUsernameWithApiLookup,
42
- getWorkspaceClient,
43
42
  type LakebasePool,
43
+ type WorkspaceClient as AppKitWorkspaceClient,
44
44
  ValidationError,
45
45
  } from "@databricks/appkit";
46
46
  import { projectUtils, resolveValue } from "@dbx-tools/core";
@@ -64,7 +64,7 @@ import {
64
64
  } from "@dbx-tools/shared-core";
65
65
  import { z } from "zod";
66
66
 
67
- import { toContext } from "./databricks.ts";
67
+ import { createWorkspaceClient, toContext } from "./databricks.ts";
68
68
 
69
69
  const logger = log.logger("lakebase-resolver");
70
70
  const API_BASE = "/api/2.0/postgres";
@@ -98,7 +98,7 @@ const DEFAULT_DATABASE = "databricks_postgres";
98
98
  * it has enough context (typically a `project`).
99
99
  */
100
100
  export interface LakebaseResolverInputs extends LakebaseConnectionInputs {
101
- /** Auth-resolved profile used only for Databricks bundle validation. */
101
+ /** Auth-resolved profile used for bundle validation and workspace API calls. */
102
102
  bundleProfile?: string;
103
103
  /**
104
104
  * What to do when no project exists in the workspace at all.
@@ -349,6 +349,14 @@ export async function readLakebaseInputs(
349
349
  export async function resolveLakebaseConnection(
350
350
  config?: LakebaseResolverInputs,
351
351
  signal?: AbortSignal,
352
+ ): Promise<LakebaseConnection> {
353
+ return resolveLakebaseConnectionWithClient(config, signal, workspaceClientResolver(config));
354
+ }
355
+
356
+ async function resolveLakebaseConnectionWithClient(
357
+ config: LakebaseResolverInputs | undefined,
358
+ signal: AbortSignal | undefined,
359
+ getClient: WorkspaceClientResolver,
352
360
  ): Promise<LakebaseConnection> {
353
361
  const inputs = await readLakebaseInputs(config);
354
362
  let { project, branch, endpoint, database, host } = inputs;
@@ -376,7 +384,7 @@ export async function resolveLakebaseConnection(
376
384
  return { project, branch, endpoint, database, host, port, sslMode };
377
385
  }
378
386
 
379
- const ws = getWorkspaceClient({});
387
+ const ws = await getClient();
380
388
 
381
389
  // Host known but no resource path: scan the workspace to find which
382
390
  // endpoint owns this host so we can populate LAKEBASE_ENDPOINT.
@@ -472,14 +480,28 @@ export async function applyLakebaseEnv(
472
480
  config?: LakebaseResolverInputs,
473
481
  signal?: AbortSignal,
474
482
  ): Promise<{ resolved: LakebaseConnection; user?: string }> {
475
- const resolved = await resolveLakebaseConnection(config, signal);
483
+ const getClient = workspaceClientResolver(config);
484
+ const resolved = await resolveLakebaseConnectionWithClient(config, signal, getClient);
476
485
  applyLakebaseToEnv(resolved);
477
- const user = await getUsernameWithApiLookup({});
486
+ const configuredUser = process.env.PGUSER || process.env.DATABRICKS_CLIENT_ID;
487
+ const user =
488
+ configuredUser ??
489
+ (await getUsernameWithApiLookup({ workspaceClient: await getClient() }));
478
490
  if (user) process.env.PGUSER ??= user;
479
491
  return { resolved, ...(user ? { user } : {}) };
480
492
  }
481
493
 
482
- type WorkspaceClient = ReturnType<typeof getWorkspaceClient>;
494
+ type WorkspaceClient = ReturnType<AppKitWorkspaceClient["toLegacyWorkspaceClient"]>;
495
+ type WorkspaceClientResolver = () => Promise<WorkspaceClient>;
496
+
497
+ /** Resolve one auth-backed SDK client lazily and reuse it across this operation. */
498
+ function workspaceClientResolver(config?: LakebaseResolverInputs): WorkspaceClientResolver {
499
+ let pending: Promise<WorkspaceClient> | undefined;
500
+ return () =>
501
+ (pending ??= createWorkspaceClient({ profile: config?.bundleProfile }).then((client) =>
502
+ client.toLegacyWorkspaceClient(),
503
+ ));
504
+ }
483
505
 
484
506
  /** The SDK `Context` accepted by the workspace client's own copy of the SDK. */
485
507
  type ApiRequestContext = NonNullable<Parameters<WorkspaceClient["apiClient"]["request"]>[1]>;
package/src/provision.ts CHANGED
@@ -21,10 +21,12 @@
21
21
  * @module
22
22
  */
23
23
 
24
- import { createLakebasePool, getWorkspaceClient, ValidationError } from "@databricks/appkit";
24
+ import { createLakebasePool, ValidationError } from "@databricks/appkit";
25
25
  import { postgresConnectionOptions, quotePostgresIdentifier } from "@dbx-tools/postgres";
26
26
  import { log, isDatabricksAppEnv, toError, type Logger } from "@dbx-tools/shared-core";
27
27
 
28
+ import { createWorkspaceClient } from "./databricks.ts";
29
+
28
30
  const defaultLogger = log.logger("provision");
29
31
 
30
32
  /** AppKit persistent-cache schema (see AppKit's `PersistentStorage`). */
@@ -99,14 +101,14 @@ export async function provisionCacheSchema(
99
101
  }
100
102
  // Pass `user` explicitly: autopg resolves the connection target
101
103
  // (host/database/endpoint) but not the identity, so `createLakebasePool`'s
102
- // synchronous username lookup would otherwise throw. `getWorkspaceClient({})`
103
- // returns a fresh default-auth client - literally `new WorkspaceClient({})`,
104
- // but built against the SDK version AppKit's `createLakebasePool` expects
105
- // (importing the SDK class directly here pulls a newer, type-incompatible copy).
104
+ // synchronous username lookup would otherwise throw. The auth-backed AppKit
105
+ // client uses the SDK version `createLakebasePool` expects while retaining
106
+ // dbx-tools profile selection and interactive CLI recovery.
107
+ const workspaceClient = (await createWorkspaceClient()).toLegacyWorkspaceClient();
106
108
  const pool = createLakebasePool(
107
109
  postgresConnectionOptions({
108
110
  user: role,
109
- workspaceClient: getWorkspaceClient({}),
111
+ workspaceClient,
110
112
  connectionTimeoutMillis: CONNECT_TIMEOUT_MS,
111
113
  statement_timeout: STATEMENT_TIMEOUT_MS,
112
114
  }),