@dbx-tools/model 0.9.129 → 0.9.131

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.
@@ -16,9 +16,9 @@ import * as object from "@dbx-tools/shared-core/object";
16
16
  import { ModelClass, } from "@dbx-tools/shared-model/contracts";
17
17
  import { normalizeEndpoints } from "./_ranking.js";
18
18
  import { lookupModels, resolveModel } from "./_selection.js";
19
- import { chatCompletionsUrl, invocationsUrl, responsesUpstreamUrl } from "./invoke.js";
19
+ import { aiGatewayCodexResponsesUrl, chatCompletionsUrl, invocationsUrl, responsesUpstreamUrl, } from "./invoke.js";
20
20
  import { hydrateModelMetadata, modelMetadataFor } from "./metadata.js";
21
- import { modelServingApi } from "./policy.js";
21
+ import { modelServingApi, prefersSystemModelService, systemModelService } from "./policy.js";
22
22
  const logger = log.logger("model/client");
23
23
  /** Default lifetime for one live endpoint catalogue. */
24
24
  export const DEFAULT_MODEL_CLIENT_CACHE_TTL_MS = 5 * 60 * 1000;
@@ -65,15 +65,19 @@ const catalogueCache = new Map();
65
65
  class DefaultModelClient {
66
66
  client;
67
67
  cacheTtlMs;
68
- constructor(client, cacheTtlMs) {
68
+ preferSystemModels;
69
+ constructor(client, cacheTtlMs, preferSystemModels) {
69
70
  this.client = client;
70
71
  this.cacheTtlMs = cacheTtlMs;
72
+ this.preferSystemModels = preferSystemModels;
71
73
  }
72
74
  async listModels(refresh = false) {
73
75
  return cloneEndpoints(await this.catalogue(refresh));
74
76
  }
75
77
  async searchModels(query = {}, refresh = false) {
76
- return lookupModels(await this.catalogue(refresh), query).map(({ endpoint, ...ranked }) => ({
78
+ return lookupModels(await this.catalogue(refresh), query, {
79
+ preferSystemModels: this.preferSystemModels,
80
+ }).map(({ endpoint, ...ranked }) => ({
77
81
  ...ranked,
78
82
  endpoint: cloneEndpoint(endpoint),
79
83
  }));
@@ -84,17 +88,26 @@ class DefaultModelClient {
84
88
  ? { ...selection, modelClass: ModelClass.Embedding }
85
89
  : selection;
86
90
  const catalogue = await this.catalogue(refresh);
87
- let resolved = resolveModel(catalogue, effectiveSelection);
91
+ let resolved = resolveModel(catalogue, effectiveSelection, {
92
+ preferSystemModels: this.preferSystemModels,
93
+ });
88
94
  if (isUnmatchedExplicit(catalogue, effectiveSelection, resolved)) {
89
- resolved = resolveModel(await this.catalogue(true), effectiveSelection);
95
+ resolved = resolveModel(await this.catalogue(true), effectiveSelection, {
96
+ preferSystemModels: this.preferSystemModels,
97
+ });
90
98
  }
91
99
  const endpoint = (await this.catalogue(false)).find((candidate) => candidate.name === resolved.modelId);
92
100
  const protocol = requestedProtocol ?? inferProtocol(endpoint, resolved.modelId);
93
101
  const host = this.client.host();
94
- const url = routeUrl(host, resolved.modelId, protocol);
102
+ const service = protocol === "responses" && endpoint ? systemModelService(endpoint) : undefined;
103
+ const system = service !== undefined &&
104
+ prefersSystemModelService(selection.explicit, resolved.modelId, service, this.preferSystemModels);
105
+ const url = system
106
+ ? aiGatewayCodexResponsesUrl(host)
107
+ : routeUrl(host, resolved.modelId, protocol);
95
108
  const headers = await this.client.auth.headers({ login });
96
109
  return {
97
- modelId: resolved.modelId,
110
+ modelId: system ? service : resolved.modelId,
98
111
  ...(endpoint ? { endpoint: cloneEndpoint(endpoint) } : {}),
99
112
  source: resolved.source,
100
113
  protocol,
@@ -115,6 +128,7 @@ class DefaultModelClient {
115
128
  principal: this.client.principal(),
116
129
  ...(this.client.workspaceId() ? { workspaceId: this.client.workspaceId() } : {}),
117
130
  cacheTtlMs: this.cacheTtlMs,
131
+ preferSystemModels: this.preferSystemModels,
118
132
  };
119
133
  }
120
134
  catalogue(refresh) {
@@ -185,21 +199,21 @@ export async function createModelClient(options = {}) {
185
199
  const cacheTtlMs = validateCacheTtl(options.cacheTtlMs);
186
200
  if (options.hydrateMetadata ?? true)
187
201
  await hydrateModelMetadata();
188
- return new DefaultModelClient(new AuthenticatedModelClient(await createAuthClient(options.auth), globalThis.fetch), cacheTtlMs);
202
+ return new DefaultModelClient(new AuthenticatedModelClient(await createAuthClient(options.auth), globalThis.fetch), cacheTtlMs, options.preferSystemModels ?? false);
189
203
  }
190
204
  /** List configured Databricks profiles outside the model client facade. */
191
205
  export function listProfiles(refresh = false) {
192
206
  return listAuthProfiles({ refresh });
193
207
  }
194
208
  /** @internal Construct a model client around a test or host-owned Databricks client. */
195
- export function createModelClientWithDatabricksClient(client, cacheTtlMs = DEFAULT_MODEL_CLIENT_CACHE_TTL_MS) {
196
- return new DefaultModelClient(client, validateCacheTtl(cacheTtlMs));
209
+ export function createModelClientWithDatabricksClient(client, cacheTtlMs = DEFAULT_MODEL_CLIENT_CACHE_TTL_MS, preferSystemModels = false) {
210
+ return new DefaultModelClient(client, validateCacheTtl(cacheTtlMs), preferSystemModels);
197
211
  }
198
212
  /** @internal Create a model client with injectable auth host capabilities. */
199
213
  export async function createModelClientWithDependencies(options, dependencies) {
200
214
  if (options.hydrateMetadata ?? true)
201
215
  await hydrateModelMetadata();
202
- return new DefaultModelClient(new AuthenticatedModelClient(await createAuthClient(options.auth, dependencies), dependencies.fetch ?? globalThis.fetch), validateCacheTtl(options.cacheTtlMs));
216
+ return new DefaultModelClient(new AuthenticatedModelClient(await createAuthClient(options.auth, dependencies), dependencies.fetch ?? globalThis.fetch), validateCacheTtl(options.cacheTtlMs), options.preferSystemModels ?? false);
203
217
  }
204
218
  function validateCacheTtl(value = DEFAULT_MODEL_CLIENT_CACHE_TTL_MS) {
205
219
  if (!Number.isFinite(value) || value <= 0) {
@@ -241,4 +255,4 @@ function cloneEndpoint(endpoint) {
241
255
  ...(endpoint.status ? { status: { ...endpoint.status } } : {}),
242
256
  };
243
257
  }
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCxPQUFPLEVBQ0wsZ0JBQWdCLEdBR2pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTNFLE9BQU8sS0FBSyxVQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxLQUFLLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLEtBQUssTUFBTSxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFDTCxVQUFVLEdBT1gsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUMsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBc0UvRCxNQUFNLHdCQUF3QjtJQUVqQjtJQUNRO0lBRm5CLFlBQ1csSUFBZ0IsRUFDUixPQUFnQztRQUR4QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ1IsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7SUFDaEQsQ0FBQztJQUVKLElBQUk7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWSxFQUFFLE9BQW9CLEVBQUU7UUFDaEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzVELE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM1QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2RixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0NBQWdDLElBQUksa0JBQWtCLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQ2pGLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFPRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztBQUV6RCxNQUFNLGtCQUFrQjtJQUVIO0lBQ0E7SUFGbkIsWUFDbUIsTUFBNkIsRUFDN0IsVUFBa0I7UUFEbEIsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBUTtJQUNsQyxDQUFDO0lBRUosS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsS0FBSztRQUM5QixPQUFPLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFvQixFQUFFLEVBQUUsT0FBTyxHQUFHLEtBQUs7UUFDeEQsT0FBTyxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxNQUFNO1lBQ1QsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUM7U0FDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUF5QixFQUFFO1FBQ3JDLE1BQU0sRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDcEYsTUFBTSxrQkFBa0IsR0FDdEIsaUJBQWlCLEtBQUssWUFBWSxJQUFJLFNBQVMsQ0FBQyxVQUFVLEtBQUssU0FBUztZQUN0RSxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRTtZQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDM0QsSUFBSSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNqRSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakQsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FDbkQsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUQsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3ZCLFFBQVE7WUFDUixJQUFJO1lBQ0osT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUMvRSxHQUFHO1lBQ0gsT0FBTztZQUNQLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQztTQUN6RCxDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFzQztRQUM3QyxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTztZQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ3hCLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEYsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBRU8sU0FBUyxDQUFDLE9BQWdCO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPO1lBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUztZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN0RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQW1CLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvRSxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQixLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQ2YsR0FBRyxFQUFFO1lBQ0gsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqRCxDQUFDLEVBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUs7Z0JBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQ0YsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYztRQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDekYsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ3JCLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTTtZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDeEIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTO1NBQ2xDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxLQUFLLENBQUMsMEJBQTBCLENBQ3RDLFNBQTRDO1FBRTVDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FDaEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxRQUFRLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDaEYsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN4QyxzQkFBc0Isa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQ3JFO29CQUNFLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztpQkFDMUMsQ0FDRixDQUFDO2dCQUNGLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUN6RSxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFO29CQUM5QyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUk7b0JBQ3BCLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztpQkFDakMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFjO0lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDNUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pGLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3pFLENBQUM7QUFFRCw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxVQUE4QixFQUFFO0lBQ3RFLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxJQUFJLE9BQU8sQ0FBQyxlQUFlLElBQUksSUFBSTtRQUFFLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztJQUNsRSxPQUFPLElBQUksa0JBQWtCLENBQzNCLElBQUksd0JBQXdCLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUNwRixVQUFVLENBQ1gsQ0FBQztBQUNKLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSztJQUMxQyxPQUFPLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsd0ZBQXdGO0FBQ3hGLE1BQU0sVUFBVSxxQ0FBcUMsQ0FDbkQsTUFBNkIsRUFDN0IsVUFBVSxHQUFHLGlDQUFpQztJQUU5QyxPQUFPLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsS0FBSyxVQUFVLGlDQUFpQyxDQUNyRCxPQUEyQixFQUMzQixZQUF3QztJQUV4QyxJQUFJLE9BQU8sQ0FBQyxlQUFlLElBQUksSUFBSTtRQUFFLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztJQUNsRSxPQUFPLElBQUksa0JBQWtCLENBQzNCLElBQUksd0JBQXdCLENBQzFCLE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsRUFDbEQsWUFBWSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsS0FBSyxDQUN2QyxFQUNELGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FDckMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQUssR0FBRyxpQ0FBaUM7SUFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsTUFBNkI7SUFDakQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ3BCLFFBQTRDLEVBQzVDLE9BQWU7SUFFZixJQUFJLFFBQVEsRUFBRSxJQUFJLEtBQUssbUJBQW1CO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDaEUsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLElBQVksRUFBRSxPQUFlLEVBQUUsUUFBdUI7SUFDdEUsSUFBSSxRQUFRLEtBQUssV0FBVztRQUFFLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLElBQUksUUFBUSxLQUFLLE1BQU0sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDcEUsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUMxQixTQUE0QyxFQUM1QyxLQUF3QixFQUN4QixRQUFnQztJQUVoQyxPQUFPLENBQ0wsS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTO1FBQzVCLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSztRQUNyQixRQUFRLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxRQUFRO1FBQ25DLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQ2hFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsU0FBNEM7SUFDbEUsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxRQUFnQztJQUNyRCxPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRixHQUFHLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQy9ELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBdXRoZW50aWNhdGlvbi1hd2FyZSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgY2xpZW50LlxuICpcbiAqIFRoaXMgaXMgdGhlIHBvcnRhYmxlIGVudHJ5IHBvaW50IHVzZWQgYnkgZ2VuZXJhdGVkIFB5dGhvbiBiaW5kaW5ncy4gSXQga2VlcHNcbiAqIGF1dGhlbnRpY2F0aW9uLCBlbmRwb2ludCBkaXNjb3ZlcnksIGNhY2hpbmcsIG5vcm1hbGl6YXRpb24sIHJhbmtpbmcsIHJvdXRlXG4gKiBzZWxlY3Rpb24sIHJvdXRlIGNvbnN0cnVjdGlvbiwgYW5kIHB1Ymxpc2hlZCBtZXRhZGF0YSBpbiBOb2RlIHdoaWxlIGV4cG9zaW5nXG4gKiBvbmUgc21hbGwgY2xpZW50LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHtcbiAgY3JlYXRlQXV0aENsaWVudCxcbiAgdHlwZSBBdXRoQ2xpZW50LFxuICB0eXBlIERhdGFicmlja3NBdXRoRGVwZW5kZW5jaWVzLFxufSBmcm9tIFwiQGRieC10b29scy9hdXRoL2NsaWVudFwiO1xuaW1wb3J0IHsgbGlzdFByb2ZpbGVzIGFzIGxpc3RBdXRoUHJvZmlsZXMgfSBmcm9tIFwiQGRieC10b29scy9hdXRoL3Byb2ZpbGVcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWF1dGhcIjtcbmltcG9ydCAqIGFzIGVycm9yVXRpbHMgZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmUvZXJyb3ItdXRpbHNcIjtcbmltcG9ydCAqIGFzIGxvZyBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9sb2dcIjtcbmltcG9ydCAqIGFzIG9iamVjdCBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9vYmplY3RcIjtcbmltcG9ydCB7XG4gIE1vZGVsQ2xhc3MsXG4gIHR5cGUgTW9kZWxNZXRhZGF0YSxcbiAgdHlwZSBNb2RlbFF1ZXJ5LFxuICB0eXBlIFJhbmtlZE1vZGVsLFxuICB0eXBlIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24sXG4gIHR5cGUgUmVzb2x2ZU1vZGVsSW5wdXQsXG4gIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsL2NvbnRyYWN0c1wiO1xuXG5pbXBvcnQgeyBub3JtYWxpemVFbmRwb2ludHMgfSBmcm9tIFwiLi9fcmFua2luZy50c1wiO1xuaW1wb3J0IHsgbG9va3VwTW9kZWxzLCByZXNvbHZlTW9kZWwgfSBmcm9tIFwiLi9fc2VsZWN0aW9uLnRzXCI7XG5pbXBvcnQgeyBjaGF0Q29tcGxldGlvbnNVcmwsIGludm9jYXRpb25zVXJsLCByZXNwb25zZXNVcHN0cmVhbVVybCB9IGZyb20gXCIuL2ludm9rZS50c1wiO1xuaW1wb3J0IHsgaHlkcmF0ZU1vZGVsTWV0YWRhdGEsIG1vZGVsTWV0YWRhdGFGb3IgfSBmcm9tIFwiLi9tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHsgbW9kZWxTZXJ2aW5nQXBpIH0gZnJvbSBcIi4vcG9saWN5LnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtb2RlbC9jbGllbnRcIik7XG5cbi8qKiBEZWZhdWx0IGxpZmV0aW1lIGZvciBvbmUgbGl2ZSBlbmRwb2ludCBjYXRhbG9ndWUuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NT0RFTF9DTElFTlRfQ0FDSEVfVFRMX01TID0gNSAqIDYwICogMTAwMDtcblxuLyoqIEF1dGhlbnRpY2F0aW9uIG9wdGlvbnMgZXhwb3NlZCBieSB0aGUgcG9ydGFibGUgbW9kZWwgY2xpZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbEF1dGhPcHRpb25zIHtcbiAgLyoqIERhdGFicmlja3MgcHJvZmlsZSBuYW1lLiAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKiogQ29uc3RydWN0aW9uIG9wdGlvbnMgZm9yIHtAbGluayBjcmVhdGVNb2RlbENsaWVudH0uICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsQ2xpZW50T3B0aW9ucyB7XG4gIC8qKiBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIGFuZCBwcm9maWxlIHNlbGVjdGlvbiBvcHRpb25zLiAqL1xuICBhdXRoPzogTW9kZWxBdXRoT3B0aW9ucztcbiAgLyoqIEluLW1lbW9yeSBlbmRwb2ludCBjYXRhbG9ndWUgVFRMIGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgY2FjaGVUdGxNcz86IG51bWJlcjtcbiAgLyoqIEh5ZHJhdGUgTm9kZS1vbmx5IG1ldGFkYXRhIGNhY2hlcyBiZWZvcmUgY29uc3RydWN0aW5nIHRoZSBjbGllbnQuICovXG4gIGh5ZHJhdGVNZXRhZGF0YT86IGJvb2xlYW47XG59XG5cbi8qKiBTZWNyZXQtZnJlZSBydW50aW1lIGlkZW50aXR5IGFuZCBjYWNoZSBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbENsaWVudFN0YXR1cyB7XG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJpbmNpcGFsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICByZWFkb25seSBjYWNoZVR0bE1zOiBudW1iZXI7XG59XG5cbi8qKiBTZXJ2aW5nIHByb3RvY29sIHNlbGVjdGVkIGZvciBvbmUgcmVzb2x2ZWQgbW9kZWwuICovXG5leHBvcnQgdHlwZSBNb2RlbFByb3RvY29sID0gXCJjaGF0XCIgfCBcInJlc3BvbnNlc1wiIHwgXCJlbWJlZGRpbmdzXCI7XG5cbi8qKiBNb2RlbCBzZWxlY3Rpb24gcGx1cyByb3V0ZSBjb250cm9scy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxSb3V0ZUlucHV0IGV4dGVuZHMgUmVzb2x2ZU1vZGVsSW5wdXQge1xuICAvKiogRm9yY2UgYSBsaXZlIGVuZHBvaW50IGNhdGFsb2d1ZSByZWZyZXNoIGJlZm9yZSBzZWxlY3Rpb24uICovXG4gIHJlZnJlc2g/OiBib29sZWFuO1xuICAvKiogUmVxdWVzdGVkIHVwc3RyZWFtIHByb3RvY29sLiBEZWZhdWx0cyBmcm9tIGVuZHBvaW50IHRhc2sgYW5kIG1vZGVsIHBvbGljeS4gKi9cbiAgcHJvdG9jb2w/OiBNb2RlbFByb3RvY29sO1xuICAvKiogV2hldGhlciBhdXRoZW50aWNhdGlvbiBtYXkgcnVuIGFuIGludGVyYWN0aXZlIGxvZ2luLiAqL1xuICBsb2dpbj86IGJvb2xlYW47XG59XG5cbi8qKiBGdWxseSByZXNvbHZlZCBEYXRhYnJpY2tzIHJvdXRlIGZvciBhIG1vZGVsIHJlcXVlc3QuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsUm91dGUge1xuICByZWFkb25seSBtb2RlbElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVuZHBvaW50PzogU2VydmluZ0VuZHBvaW50U3VtbWFyeTtcbiAgcmVhZG9ubHkgc291cmNlOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uW1wic291cmNlXCJdO1xuICByZWFkb25seSBwcm90b2NvbDogTW9kZWxQcm90b2NvbDtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBhcGlCYXNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICByZWFkb25seSBoZWFkZXJzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgcmVhZG9ubHkgbWV0YWRhdGE6IE1vZGVsTWV0YWRhdGE7XG59XG5cbi8qKiBTdGFibGUgbW9kZWwgZmFjYWRlIHNoYXJlZCBieSBOb2RlIGFuZCBnZW5lcmF0ZWQgbGFuZ3VhZ2UgYmluZGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsQ2xpZW50IHtcbiAgbGlzdE1vZGVscyhyZWZyZXNoPzogYm9vbGVhbik6IFByb21pc2U8U2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPjtcbiAgc2VhcmNoTW9kZWxzKHF1ZXJ5PzogTW9kZWxRdWVyeSwgcmVmcmVzaD86IGJvb2xlYW4pOiBQcm9taXNlPFJhbmtlZE1vZGVsW10+O1xuICByb3V0ZShpbnB1dD86IE1vZGVsUm91dGVJbnB1dCk6IFByb21pc2U8TW9kZWxSb3V0ZT47XG4gIG1ldGFkYXRhKG1vZGVsOiBzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KTogTW9kZWxNZXRhZGF0YTtcbiAgc3RhdHVzKCk6IE1vZGVsQ2xpZW50U3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgRGF0YWJyaWNrc01vZGVsQ2xpZW50IHtcbiAgcmVhZG9ubHkgYXV0aDogQXV0aENsaWVudDtcbiAgaG9zdCgpOiBzdHJpbmc7XG4gIHByaW5jaXBhbCgpOiBzdHJpbmc7XG4gIHdvcmtzcGFjZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVxdWVzdChwYXRoOiBzdHJpbmcsIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8dW5rbm93bj47XG59XG5cbmNsYXNzIEF1dGhlbnRpY2F0ZWRNb2RlbENsaWVudCBpbXBsZW1lbnRzIERhdGFicmlja3NNb2RlbENsaWVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGF1dGg6IEF1dGhDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmZXRjaGVyOiB0eXBlb2YgZ2xvYmFsVGhpcy5mZXRjaCxcbiAgKSB7fVxuXG4gIGhvc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoLmhvc3Q7XG4gIH1cblxuICBwcmluY2lwYWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoLnByaW5jaXBhbDtcbiAgfVxuXG4gIHdvcmtzcGFjZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aC53b3Jrc3BhY2VJZDtcbiAgfVxuXG4gIGFzeW5jIHJlcXVlc3QocGF0aDogc3RyaW5nLCBpbml0OiBSZXF1ZXN0SW5pdCA9IHt9KTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChwYXRoLCBgJHt0aGlzLmhvc3QoKS5yZXBsYWNlKC9cXC8kLywgXCJcIil9L2ApLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGluaXQuaGVhZGVycyk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF3YWl0IHRoaXMuYXV0aC5oZWFkZXJzKCkpKSB7XG4gICAgICBoZWFkZXJzLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChpbml0LmJvZHkgIT09IHVuZGVmaW5lZCAmJiAhaGVhZGVycy5oYXMoXCJjb250ZW50LXR5cGVcIikpIHtcbiAgICAgIGhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaGVyKHVybCwgeyAuLi5pbml0LCBoZWFkZXJzIH0pO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF3YWl0IHRoaXMuYXV0aC5oZWFkZXJzKHsgcmVmcmVzaDogdHJ1ZSB9KSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoZXIodXJsLCB7IC4uLmluaXQsIGhlYWRlcnMgfSk7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nIEFQSSAke3BhdGh9IHJldHVybmVkIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3RleHR9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0ID8gSlNPTi5wYXJzZSh0ZXh0KSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ2F0YWxvZ3VlRW50cnkge1xuICByZWFkb25seSBwcm9taXNlOiBQcm9taXNlPHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXT47XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xufVxuXG5jb25zdCBjYXRhbG9ndWVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDYXRhbG9ndWVFbnRyeT4oKTtcblxuY2xhc3MgRGVmYXVsdE1vZGVsQ2xpZW50IGltcGxlbWVudHMgTW9kZWxDbGllbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogRGF0YWJyaWNrc01vZGVsQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FjaGVUdGxNczogbnVtYmVyLFxuICApIHt9XG5cbiAgYXN5bmMgbGlzdE1vZGVscyhyZWZyZXNoID0gZmFsc2UpOiBQcm9taXNlPFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXT4ge1xuICAgIHJldHVybiBjbG9uZUVuZHBvaW50cyhhd2FpdCB0aGlzLmNhdGFsb2d1ZShyZWZyZXNoKSk7XG4gIH1cblxuICBhc3luYyBzZWFyY2hNb2RlbHMocXVlcnk6IE1vZGVsUXVlcnkgPSB7fSwgcmVmcmVzaCA9IGZhbHNlKTogUHJvbWlzZTxSYW5rZWRNb2RlbFtdPiB7XG4gICAgcmV0dXJuIGxvb2t1cE1vZGVscyhhd2FpdCB0aGlzLmNhdGFsb2d1ZShyZWZyZXNoKSwgcXVlcnkpLm1hcCgoeyBlbmRwb2ludCwgLi4ucmFua2VkIH0pID0+ICh7XG4gICAgICAuLi5yYW5rZWQsXG4gICAgICBlbmRwb2ludDogY2xvbmVFbmRwb2ludChlbmRwb2ludCksXG4gICAgfSkpO1xuICB9XG5cbiAgYXN5bmMgcm91dGUoaW5wdXQ6IE1vZGVsUm91dGVJbnB1dCA9IHt9KTogUHJvbWlzZTxNb2RlbFJvdXRlPiB7XG4gICAgY29uc3QgeyByZWZyZXNoID0gZmFsc2UsIHByb3RvY29sOiByZXF1ZXN0ZWRQcm90b2NvbCwgbG9naW4sIC4uLnNlbGVjdGlvbiB9ID0gaW5wdXQ7XG4gICAgY29uc3QgZWZmZWN0aXZlU2VsZWN0aW9uID1cbiAgICAgIHJlcXVlc3RlZFByb3RvY29sID09PSBcImVtYmVkZGluZ3NcIiAmJiBzZWxlY3Rpb24ubW9kZWxDbGFzcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8geyAuLi5zZWxlY3Rpb24sIG1vZGVsQ2xhc3M6IE1vZGVsQ2xhc3MuRW1iZWRkaW5nIH1cbiAgICAgICAgOiBzZWxlY3Rpb247XG4gICAgY29uc3QgY2F0YWxvZ3VlID0gYXdhaXQgdGhpcy5jYXRhbG9ndWUocmVmcmVzaCk7XG4gICAgbGV0IHJlc29sdmVkID0gcmVzb2x2ZU1vZGVsKGNhdGFsb2d1ZSwgZWZmZWN0aXZlU2VsZWN0aW9uKTtcbiAgICBpZiAoaXNVbm1hdGNoZWRFeHBsaWNpdChjYXRhbG9ndWUsIGVmZmVjdGl2ZVNlbGVjdGlvbiwgcmVzb2x2ZWQpKSB7XG4gICAgICByZXNvbHZlZCA9IHJlc29sdmVNb2RlbChhd2FpdCB0aGlzLmNhdGFsb2d1ZSh0cnVlKSwgZWZmZWN0aXZlU2VsZWN0aW9uKTtcbiAgICB9XG4gICAgY29uc3QgZW5kcG9pbnQgPSAoYXdhaXQgdGhpcy5jYXRhbG9ndWUoZmFsc2UpKS5maW5kKFxuICAgICAgKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHJlc29sdmVkLm1vZGVsSWQsXG4gICAgKTtcbiAgICBjb25zdCBwcm90b2NvbCA9IHJlcXVlc3RlZFByb3RvY29sID8/IGluZmVyUHJvdG9jb2woZW5kcG9pbnQsIHJlc29sdmVkLm1vZGVsSWQpO1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNsaWVudC5ob3N0KCk7XG4gICAgY29uc3QgdXJsID0gcm91dGVVcmwoaG9zdCwgcmVzb2x2ZWQubW9kZWxJZCwgcHJvdG9jb2wpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCB0aGlzLmNsaWVudC5hdXRoLmhlYWRlcnMoeyBsb2dpbiB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZWxJZDogcmVzb2x2ZWQubW9kZWxJZCxcbiAgICAgIC4uLihlbmRwb2ludCA/IHsgZW5kcG9pbnQ6IGNsb25lRW5kcG9pbnQoZW5kcG9pbnQpIH0gOiB7fSksXG4gICAgICBzb3VyY2U6IHJlc29sdmVkLnNvdXJjZSxcbiAgICAgIHByb3RvY29sLFxuICAgICAgaG9zdCxcbiAgICAgIGFwaUJhc2U6IG5ldyBVUkwoXCJzZXJ2aW5nLWVuZHBvaW50c1wiLCBgJHtob3N0LnJlcGxhY2UoL1xcLyQvLCBcIlwiKX0vYCkudG9TdHJpbmcoKSxcbiAgICAgIHVybCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRhZGF0YTogbW9kZWxNZXRhZGF0YUZvcihlbmRwb2ludCA/PyByZXNvbHZlZC5tb2RlbElkKSxcbiAgICB9O1xuICB9XG5cbiAgbWV0YWRhdGEobW9kZWw6IHN0cmluZyB8IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBNb2RlbE1ldGFkYXRhIHtcbiAgICByZXR1cm4gbW9kZWxNZXRhZGF0YUZvcihtb2RlbCk7XG4gIH1cblxuICBzdGF0dXMoKTogTW9kZWxDbGllbnRTdGF0dXMge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGhpcy5jbGllbnQuYXV0aC5wcm9maWxlID8geyBwcm9maWxlOiB0aGlzLmNsaWVudC5hdXRoLnByb2ZpbGUgfSA6IHt9KSxcbiAgICAgIGhvc3Q6IHRoaXMuY2xpZW50Lmhvc3QoKSxcbiAgICAgIHByaW5jaXBhbDogdGhpcy5jbGllbnQucHJpbmNpcGFsKCksXG4gICAgICAuLi4odGhpcy5jbGllbnQud29ya3NwYWNlSWQoKSA/IHsgd29ya3NwYWNlSWQ6IHRoaXMuY2xpZW50LndvcmtzcGFjZUlkKCkgfSA6IHt9KSxcbiAgICAgIGNhY2hlVHRsTXM6IHRoaXMuY2FjaGVUdGxNcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjYXRhbG9ndWUocmVmcmVzaDogYm9vbGVhbik6IFByb21pc2U8cmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPiB7XG4gICAgY29uc3Qga2V5ID0gY2F0YWxvZ3VlS2V5KHRoaXMuY2xpZW50KTtcbiAgICBpZiAocmVmcmVzaCkgY2F0YWxvZ3VlQ2FjaGUuZGVsZXRlKGtleSk7XG4gICAgY29uc3QgY3VycmVudCA9IGNhdGFsb2d1ZUNhY2hlLmdldChrZXkpO1xuICAgIGlmIChjdXJyZW50ICYmIERhdGUubm93KCkgPCBjdXJyZW50LmV4cGlyZXNBdCkgcmV0dXJuIGN1cnJlbnQucHJvbWlzZTtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5mZXRjaENhdGFsb2d1ZSgpO1xuICAgIGNvbnN0IGVudHJ5OiBDYXRhbG9ndWVFbnRyeSA9IHsgcHJvbWlzZSwgZXhwaXJlc0F0OiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfTtcbiAgICBjYXRhbG9ndWVDYWNoZS5zZXQoa2V5LCBlbnRyeSk7XG4gICAgdm9pZCBwcm9taXNlLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGVudHJ5LmV4cGlyZXNBdCA9IERhdGUubm93KCkgKyB0aGlzLmNhY2hlVHRsTXM7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoY2F0YWxvZ3VlQ2FjaGUuZ2V0KGtleSkgPT09IGVudHJ5KSBjYXRhbG9ndWVDYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hDYXRhbG9ndWUoKTogUHJvbWlzZTxyZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+IHtcbiAgICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucmVxdWVzdChcIi9hcGkvMi4wL3NlcnZpbmctZW5kcG9pbnRzXCIpO1xuICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKHJlc3BvbnNlKSB8fCAhQXJyYXkuaXNBcnJheShyZXNwb25zZS5lbmRwb2ludHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYnJpY2tzIHNlcnZpbmctZW5kcG9pbnRzIHJlc3BvbnNlIGlzIG1pc3NpbmcgYW4gZW5kcG9pbnRzIGFycmF5XCIpO1xuICAgIH1cbiAgICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCB0aGlzLm1lYXN1cmVFbWJlZGRpbmdEaW1lbnNpb25zKG5vcm1hbGl6ZUVuZHBvaW50cyhyZXNwb25zZS5lbmRwb2ludHMpKTtcbiAgICBsb2dnZXIuZGVidWcoXCJsaXN0ZWRcIiwge1xuICAgICAgY291bnQ6IGVuZHBvaW50cy5sZW5ndGgsXG4gICAgICBob3N0OiB0aGlzLmNsaWVudC5ob3N0KCksXG4gICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgfSk7XG4gICAgcmV0dXJuIGVuZHBvaW50cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWVhc3VyZUVtYmVkZGluZ0RpbWVuc2lvbnMoXG4gICAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4gICk6IFByb21pc2U8U2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgZW5kcG9pbnRzLm1hcChhc3luYyAoZW5kcG9pbnQpID0+IHtcbiAgICAgICAgaWYgKGVuZHBvaW50LmNsYXNzICE9PSBNb2RlbENsYXNzLkVtYmVkZGluZyB8fCBlbmRwb2ludC5kaW1lbnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBlbmRwb2ludDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucmVxdWVzdChcbiAgICAgICAgICAgIGAvc2VydmluZy1lbmRwb2ludHMvJHtlbmNvZGVVUklDb21wb25lbnQoZW5kcG9pbnQubmFtZSl9L2ludm9jYXRpb25zYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBpbnB1dDogW1wicGluZ1wiXSB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkaW1lbnNpb24gPSBlbWJlZGRpbmdEaW1lbnNpb24ocmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybiBkaW1lbnNpb24gPT09IHVuZGVmaW5lZCA/IGVuZHBvaW50IDogeyAuLi5lbmRwb2ludCwgZGltZW5zaW9uIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXCJlbWJlZGRpbmcgZGltZW5zaW9uIHByb2JlIGZhaWxlZFwiLCB7XG4gICAgICAgICAgICBtb2RlbDogZW5kcG9pbnQubmFtZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyb3IpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBlbmRwb2ludDtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWJlZGRpbmdEaW1lbnNpb24odmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAoIW9iamVjdC5pc1JlY29yZCh2YWx1ZSkgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUuZGF0YSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZpcnN0ID0gdmFsdWUuZGF0YVswXTtcbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQoZmlyc3QpIHx8ICFBcnJheS5pc0FycmF5KGZpcnN0LmVtYmVkZGluZykpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBmaXJzdC5lbWJlZGRpbmcubGVuZ3RoID4gMCA/IGZpcnN0LmVtYmVkZGluZy5sZW5ndGggOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBDcmVhdGUgYW4gYXV0aGVudGljYXRpb24tYXdhcmUgRGF0YWJyaWNrcyBtb2RlbCBjbGllbnQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlTW9kZWxDbGllbnQob3B0aW9uczogTW9kZWxDbGllbnRPcHRpb25zID0ge30pOiBQcm9taXNlPE1vZGVsQ2xpZW50PiB7XG4gIGNvbnN0IGNhY2hlVHRsTXMgPSB2YWxpZGF0ZUNhY2hlVHRsKG9wdGlvbnMuY2FjaGVUdGxNcyk7XG4gIGlmIChvcHRpb25zLmh5ZHJhdGVNZXRhZGF0YSA/PyB0cnVlKSBhd2FpdCBoeWRyYXRlTW9kZWxNZXRhZGF0YSgpO1xuICByZXR1cm4gbmV3IERlZmF1bHRNb2RlbENsaWVudChcbiAgICBuZXcgQXV0aGVudGljYXRlZE1vZGVsQ2xpZW50KGF3YWl0IGNyZWF0ZUF1dGhDbGllbnQob3B0aW9ucy5hdXRoKSwgZ2xvYmFsVGhpcy5mZXRjaCksXG4gICAgY2FjaGVUdGxNcyxcbiAgKTtcbn1cblxuLyoqIExpc3QgY29uZmlndXJlZCBEYXRhYnJpY2tzIHByb2ZpbGVzIG91dHNpZGUgdGhlIG1vZGVsIGNsaWVudCBmYWNhZGUuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdFByb2ZpbGVzKHJlZnJlc2ggPSBmYWxzZSk6IERhdGFicmlja3NQcm9maWxlU3VtbWFyeVtdIHtcbiAgcmV0dXJuIGxpc3RBdXRoUHJvZmlsZXMoeyByZWZyZXNoIH0pO1xufVxuXG4vKiogQGludGVybmFsIENvbnN0cnVjdCBhIG1vZGVsIGNsaWVudCBhcm91bmQgYSB0ZXN0IG9yIGhvc3Qtb3duZWQgRGF0YWJyaWNrcyBjbGllbnQuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxDbGllbnRXaXRoRGF0YWJyaWNrc0NsaWVudChcbiAgY2xpZW50OiBEYXRhYnJpY2tzTW9kZWxDbGllbnQsXG4gIGNhY2hlVHRsTXMgPSBERUZBVUxUX01PREVMX0NMSUVOVF9DQUNIRV9UVExfTVMsXG4pOiBNb2RlbENsaWVudCB7XG4gIHJldHVybiBuZXcgRGVmYXVsdE1vZGVsQ2xpZW50KGNsaWVudCwgdmFsaWRhdGVDYWNoZVR0bChjYWNoZVR0bE1zKSk7XG59XG5cbi8qKiBAaW50ZXJuYWwgQ3JlYXRlIGEgbW9kZWwgY2xpZW50IHdpdGggaW5qZWN0YWJsZSBhdXRoIGhvc3QgY2FwYWJpbGl0aWVzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU1vZGVsQ2xpZW50V2l0aERlcGVuZGVuY2llcyhcbiAgb3B0aW9uczogTW9kZWxDbGllbnRPcHRpb25zLFxuICBkZXBlbmRlbmNpZXM6IERhdGFicmlja3NBdXRoRGVwZW5kZW5jaWVzLFxuKTogUHJvbWlzZTxNb2RlbENsaWVudD4ge1xuICBpZiAob3B0aW9ucy5oeWRyYXRlTWV0YWRhdGEgPz8gdHJ1ZSkgYXdhaXQgaHlkcmF0ZU1vZGVsTWV0YWRhdGEoKTtcbiAgcmV0dXJuIG5ldyBEZWZhdWx0TW9kZWxDbGllbnQoXG4gICAgbmV3IEF1dGhlbnRpY2F0ZWRNb2RlbENsaWVudChcbiAgICAgIGF3YWl0IGNyZWF0ZUF1dGhDbGllbnQob3B0aW9ucy5hdXRoLCBkZXBlbmRlbmNpZXMpLFxuICAgICAgZGVwZW5kZW5jaWVzLmZldGNoID8/IGdsb2JhbFRoaXMuZmV0Y2gsXG4gICAgKSxcbiAgICB2YWxpZGF0ZUNhY2hlVHRsKG9wdGlvbnMuY2FjaGVUdGxNcyksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2FjaGVUdGwodmFsdWUgPSBERUZBVUxUX01PREVMX0NMSUVOVF9DQUNIRV9UVExfTVMpOiBudW1iZXIge1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1vZGVsIGNsaWVudCBjYWNoZVR0bE1zIG11c3QgYmUgYSBwb3NpdGl2ZSBmaW5pdGUgbnVtYmVyXCIpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY2F0YWxvZ3VlS2V5KGNsaWVudDogRGF0YWJyaWNrc01vZGVsQ2xpZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtjbGllbnQuaG9zdCgpLCBjbGllbnQud29ya3NwYWNlSWQoKSA/PyBcIlwiLCBjbGllbnQucHJpbmNpcGFsKCldLmpvaW4oXCJcXHUwMDAwXCIpO1xufVxuXG5mdW5jdGlvbiBpbmZlclByb3RvY29sKFxuICBlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSB8IHVuZGVmaW5lZCxcbiAgbW9kZWxJZDogc3RyaW5nLFxuKTogTW9kZWxQcm90b2NvbCB7XG4gIGlmIChlbmRwb2ludD8udGFzayA9PT0gXCJsbG0vdjEvZW1iZWRkaW5nc1wiKSByZXR1cm4gXCJlbWJlZGRpbmdzXCI7XG4gIHJldHVybiBtb2RlbFNlcnZpbmdBcGkobW9kZWxJZCk7XG59XG5cbmZ1bmN0aW9uIHJvdXRlVXJsKGhvc3Q6IHN0cmluZywgbW9kZWxJZDogc3RyaW5nLCBwcm90b2NvbDogTW9kZWxQcm90b2NvbCk6IHN0cmluZyB7XG4gIGlmIChwcm90b2NvbCA9PT0gXCJyZXNwb25zZXNcIikgcmV0dXJuIHJlc3BvbnNlc1Vwc3RyZWFtVXJsKGhvc3QsIG1vZGVsSWQpO1xuICBpZiAocHJvdG9jb2wgPT09IFwiY2hhdFwiICYmIG1vZGVsU2VydmluZ0FwaShtb2RlbElkKSA9PT0gXCJyZXNwb25zZXNcIikge1xuICAgIHJldHVybiBjaGF0Q29tcGxldGlvbnNVcmwoaG9zdCk7XG4gIH1cbiAgcmV0dXJuIGludm9jYXRpb25zVXJsKGhvc3QsIG1vZGVsSWQpO1xufVxuXG5mdW5jdGlvbiBpc1VubWF0Y2hlZEV4cGxpY2l0KFxuICBjYXRhbG9ndWU6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgaW5wdXQ6IFJlc29sdmVNb2RlbElucHV0LFxuICByZXNvbHZlZDogUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbixcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGlucHV0LmV4cGxpY2l0ICE9PSB1bmRlZmluZWQgJiZcbiAgICBpbnB1dC5mdXp6eSAhPT0gZmFsc2UgJiZcbiAgICByZXNvbHZlZC5tb2RlbElkID09PSBpbnB1dC5leHBsaWNpdCAmJlxuICAgICFjYXRhbG9ndWUuc29tZSgoZW5kcG9pbnQpID0+IGVuZHBvaW50Lm5hbWUgPT09IGlucHV0LmV4cGxpY2l0KVxuICApO1xufVxuXG5mdW5jdGlvbiBjbG9uZUVuZHBvaW50cyhlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSk6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSB7XG4gIHJldHVybiBlbmRwb2ludHMubWFwKGNsb25lRW5kcG9pbnQpO1xufVxuXG5mdW5jdGlvbiBjbG9uZUVuZHBvaW50KGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KTogU2VydmluZ0VuZHBvaW50U3VtbWFyeSB7XG4gIHJldHVybiB7XG4gICAgLi4uZW5kcG9pbnQsXG4gICAgLi4uKGVuZHBvaW50LnByb2ZpbGUgPyB7IHByb2ZpbGU6IHsgLi4uZW5kcG9pbnQucHJvZmlsZSB9IH0gOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnNlcnZpY2VOYW1lcyA/IHsgc2VydmljZU5hbWVzOiB7IC4uLmVuZHBvaW50LnNlcnZpY2VOYW1lcyB9IH0gOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnJlYXNvbmluZ0VmZm9ydHMgPyB7IHJlYXNvbmluZ0VmZm9ydHM6IFsuLi5lbmRwb2ludC5yZWFzb25pbmdFZmZvcnRzXSB9IDoge30pLFxuICAgIC4uLihlbmRwb2ludC5zdGF0dXMgPyB7IHN0YXR1czogeyAuLi5lbmRwb2ludC5zdGF0dXMgfSB9IDoge30pLFxuICB9O1xufVxuIl19
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCxPQUFPLEVBQ0wsZ0JBQWdCLEdBR2pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTNFLE9BQU8sS0FBSyxVQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxLQUFLLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLEtBQUssTUFBTSxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFDTCxVQUFVLEdBT1gsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNsQixjQUFjLEVBQ2Qsb0JBQW9CLEdBQ3JCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUMsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBeUUvRCxNQUFNLHdCQUF3QjtJQUVqQjtJQUNRO0lBRm5CLFlBQ1csSUFBZ0IsRUFDUixPQUFnQztRQUR4QyxTQUFJLEdBQUosSUFBSSxD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QUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQy9ELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBdXRoZW50aWNhdGlvbi1hd2FyZSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgY2xpZW50LlxuICpcbiAqIFRoaXMgaXMgdGhlIHBvcnRhYmxlIGVudHJ5IHBvaW50IHVzZWQgYnkgZ2VuZXJhdGVkIFB5dGhvbiBiaW5kaW5ncy4gSXQga2VlcHNcbiAqIGF1dGhlbnRpY2F0aW9uLCBlbmRwb2ludCBkaXNjb3ZlcnksIGNhY2hpbmcsIG5vcm1hbGl6YXRpb24sIHJhbmtpbmcsIHJvdXRlXG4gKiBzZWxlY3Rpb24sIHJvdXRlIGNvbnN0cnVjdGlvbiwgYW5kIHB1Ymxpc2hlZCBtZXRhZGF0YSBpbiBOb2RlIHdoaWxlIGV4cG9zaW5nXG4gKiBvbmUgc21hbGwgY2xpZW50LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHtcbiAgY3JlYXRlQXV0aENsaWVudCxcbiAgdHlwZSBBdXRoQ2xpZW50LFxuICB0eXBlIERhdGFicmlja3NBdXRoRGVwZW5kZW5jaWVzLFxufSBmcm9tIFwiQGRieC10b29scy9hdXRoL2NsaWVudFwiO1xuaW1wb3J0IHsgbGlzdFByb2ZpbGVzIGFzIGxpc3RBdXRoUHJvZmlsZXMgfSBmcm9tIFwiQGRieC10b29scy9hdXRoL3Byb2ZpbGVcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWF1dGhcIjtcbmltcG9ydCAqIGFzIGVycm9yVXRpbHMgZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmUvZXJyb3ItdXRpbHNcIjtcbmltcG9ydCAqIGFzIGxvZyBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9sb2dcIjtcbmltcG9ydCAqIGFzIG9iamVjdCBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9vYmplY3RcIjtcbmltcG9ydCB7XG4gIE1vZGVsQ2xhc3MsXG4gIHR5cGUgTW9kZWxNZXRhZGF0YSxcbiAgdHlwZSBNb2RlbFF1ZXJ5LFxuICB0eXBlIFJhbmtlZE1vZGVsLFxuICB0eXBlIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24sXG4gIHR5cGUgUmVzb2x2ZU1vZGVsSW5wdXQsXG4gIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsL2NvbnRyYWN0c1wiO1xuXG5pbXBvcnQgeyBub3JtYWxpemVFbmRwb2ludHMgfSBmcm9tIFwiLi9fcmFua2luZy50c1wiO1xuaW1wb3J0IHsgbG9va3VwTW9kZWxzLCByZXNvbHZlTW9kZWwgfSBmcm9tIFwiLi9fc2VsZWN0aW9uLnRzXCI7XG5pbXBvcnQge1xuICBhaUdhdGV3YXlDb2RleFJlc3BvbnNlc1VybCxcbiAgY2hhdENvbXBsZXRpb25zVXJsLFxuICBpbnZvY2F0aW9uc1VybCxcbiAgcmVzcG9uc2VzVXBzdHJlYW1VcmwsXG59IGZyb20gXCIuL2ludm9rZS50c1wiO1xuaW1wb3J0IHsgaHlkcmF0ZU1vZGVsTWV0YWRhdGEsIG1vZGVsTWV0YWRhdGFGb3IgfSBmcm9tIFwiLi9tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHsgbW9kZWxTZXJ2aW5nQXBpLCBwcmVmZXJzU3lzdGVtTW9kZWxTZXJ2aWNlLCBzeXN0ZW1Nb2RlbFNlcnZpY2UgfSBmcm9tIFwiLi9wb2xpY3kudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1vZGVsL2NsaWVudFwiKTtcblxuLyoqIERlZmF1bHQgbGlmZXRpbWUgZm9yIG9uZSBsaXZlIGVuZHBvaW50IGNhdGFsb2d1ZS4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREVMX0NMSUVOVF9DQUNIRV9UVExfTVMgPSA1ICogNjAgKiAxMDAwO1xuXG4vKiogQXV0aGVudGljYXRpb24gb3B0aW9ucyBleHBvc2VkIGJ5IHRoZSBwb3J0YWJsZSBtb2RlbCBjbGllbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsQXV0aE9wdGlvbnMge1xuICAvKiogRGF0YWJyaWNrcyBwcm9maWxlIG5hbWUuICovXG4gIHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKiBDb25zdHJ1Y3Rpb24gb3B0aW9ucyBmb3Ige0BsaW5rIGNyZWF0ZU1vZGVsQ2xpZW50fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDbGllbnRPcHRpb25zIHtcbiAgLyoqIERhdGFicmlja3MgYXV0aGVudGljYXRpb24gYW5kIHByb2ZpbGUgc2VsZWN0aW9uIG9wdGlvbnMuICovXG4gIGF1dGg/OiBNb2RlbEF1dGhPcHRpb25zO1xuICAvKiogSW4tbWVtb3J5IGVuZHBvaW50IGNhdGFsb2d1ZSBUVEwgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICBjYWNoZVR0bE1zPzogbnVtYmVyO1xuICAvKiogSHlkcmF0ZSBOb2RlLW9ubHkgbWV0YWRhdGEgY2FjaGVzIGJlZm9yZSBjb25zdHJ1Y3RpbmcgdGhlIGNsaWVudC4gKi9cbiAgaHlkcmF0ZU1ldGFkYXRhPzogYm9vbGVhbjtcbiAgLyoqIFByZWZlciBgc3lzdGVtLmFpLipgIHNlcnZpY2VzIG92ZXIgc2VydmluZyBlbmRwb2ludHMgZm9yIG5vbi1leGFjdCBtb2RlbCBzZWxlY3Rpb24uICovXG4gIHByZWZlclN5c3RlbU1vZGVscz86IGJvb2xlYW47XG59XG5cbi8qKiBTZWNyZXQtZnJlZSBydW50aW1lIGlkZW50aXR5IGFuZCBjYWNoZSBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbENsaWVudFN0YXR1cyB7XG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJpbmNpcGFsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICByZWFkb25seSBjYWNoZVR0bE1zOiBudW1iZXI7XG4gIHJlYWRvbmx5IHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbjtcbn1cblxuLyoqIFNlcnZpbmcgcHJvdG9jb2wgc2VsZWN0ZWQgZm9yIG9uZSByZXNvbHZlZCBtb2RlbC4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsUHJvdG9jb2wgPSBcImNoYXRcIiB8IFwicmVzcG9uc2VzXCIgfCBcImVtYmVkZGluZ3NcIjtcblxuLyoqIE1vZGVsIHNlbGVjdGlvbiBwbHVzIHJvdXRlIGNvbnRyb2xzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbFJvdXRlSW5wdXQgZXh0ZW5kcyBSZXNvbHZlTW9kZWxJbnB1dCB7XG4gIC8qKiBGb3JjZSBhIGxpdmUgZW5kcG9pbnQgY2F0YWxvZ3VlIHJlZnJlc2ggYmVmb3JlIHNlbGVjdGlvbi4gKi9cbiAgcmVmcmVzaD86IGJvb2xlYW47XG4gIC8qKiBSZXF1ZXN0ZWQgdXBzdHJlYW0gcHJvdG9jb2wuIERlZmF1bHRzIGZyb20gZW5kcG9pbnQgdGFzayBhbmQgbW9kZWwgcG9saWN5LiAqL1xuICBwcm90b2NvbD86IE1vZGVsUHJvdG9jb2w7XG4gIC8qKiBXaGV0aGVyIGF1dGhlbnRpY2F0aW9uIG1heSBydW4gYW4gaW50ZXJhY3RpdmUgbG9naW4uICovXG4gIGxvZ2luPzogYm9vbGVhbjtcbn1cblxuLyoqIEZ1bGx5IHJlc29sdmVkIERhdGFicmlja3Mgcm91dGUgZm9yIGEgbW9kZWwgcmVxdWVzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxSb3V0ZSB7XG4gIHJlYWRvbmx5IG1vZGVsSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5O1xuICByZWFkb25seSBzb3VyY2U6IFJlc29sdmVkTW9kZWxTZWxlY3Rpb25bXCJzb3VyY2VcIl07XG4gIHJlYWRvbmx5IHByb3RvY29sOiBNb2RlbFByb3RvY29sO1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFwaUJhc2U6IHN0cmluZztcbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGhlYWRlcnM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICByZWFkb25seSBtZXRhZGF0YTogTW9kZWxNZXRhZGF0YTtcbn1cblxuLyoqIFN0YWJsZSBtb2RlbCBmYWNhZGUgc2hhcmVkIGJ5IE5vZGUgYW5kIGdlbmVyYXRlZCBsYW5ndWFnZSBiaW5kaW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDbGllbnQge1xuICBsaXN0TW9kZWxzKHJlZnJlc2g/OiBib29sZWFuKTogUHJvbWlzZTxTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+O1xuICBzZWFyY2hNb2RlbHMocXVlcnk/OiBNb2RlbFF1ZXJ5LCByZWZyZXNoPzogYm9vbGVhbik6IFByb21pc2U8UmFua2VkTW9kZWxbXT47XG4gIHJvdXRlKGlucHV0PzogTW9kZWxSb3V0ZUlucHV0KTogUHJvbWlzZTxNb2RlbFJvdXRlPjtcbiAgbWV0YWRhdGEobW9kZWw6IHN0cmluZyB8IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBNb2RlbE1ldGFkYXRhO1xuICBzdGF0dXMoKTogTW9kZWxDbGllbnRTdGF0dXM7XG59XG5cbmludGVyZmFjZSBEYXRhYnJpY2tzTW9kZWxDbGllbnQge1xuICByZWFkb25seSBhdXRoOiBBdXRoQ2xpZW50O1xuICBob3N0KCk6IHN0cmluZztcbiAgcHJpbmNpcGFsKCk6IHN0cmluZztcbiAgd29ya3NwYWNlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZXF1ZXN0KHBhdGg6IHN0cmluZywgaW5pdD86IFJlcXVlc3RJbml0KTogUHJvbWlzZTx1bmtub3duPjtcbn1cblxuY2xhc3MgQXV0aGVudGljYXRlZE1vZGVsQ2xpZW50IGltcGxlbWVudHMgRGF0YWJyaWNrc01vZGVsQ2xpZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgYXV0aDogQXV0aENsaWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZldGNoZXI6IHR5cGVvZiBnbG9iYWxUaGlzLmZldGNoLFxuICApIHt9XG5cbiAgaG9zdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmF1dGguaG9zdDtcbiAgfVxuXG4gIHByaW5jaXBhbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmF1dGgucHJpbmNpcGFsO1xuICB9XG5cbiAgd29ya3NwYWNlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoLndvcmtzcGFjZUlkO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChwYXRoOiBzdHJpbmcsIGluaXQ6IFJlcXVlc3RJbml0ID0ge30pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHBhdGgsIGAke3RoaXMuaG9zdCgpLnJlcGxhY2UoL1xcLyQvLCBcIlwiKX0vYCkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzKTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXdhaXQgdGhpcy5hdXRoLmhlYWRlcnMoKSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGluaXQuYm9keSAhPT0gdW5kZWZpbmVkICYmICFoZWFkZXJzLmhhcyhcImNvbnRlbnQtdHlwZVwiKSkge1xuICAgICAgaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgIH1cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoZXIodXJsLCB7IC4uLmluaXQsIGhlYWRlcnMgfSk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXdhaXQgdGhpcy5hdXRoLmhlYWRlcnMoeyByZWZyZXNoOiB0cnVlIH0pKSkge1xuICAgICAgICBoZWFkZXJzLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hlcih1cmwsIHsgLi4uaW5pdCwgaGVhZGVycyB9KTtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgQVBJICR7cGF0aH0gcmV0dXJuZWQgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7dGV4dH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHQgPyBKU09OLnBhcnNlKHRleHQpIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbmludGVyZmFjZSBDYXRhbG9ndWVFbnRyeSB7XG4gIHJlYWRvbmx5IHByb21pc2U6IFByb21pc2U8cmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPjtcbiAgZXhwaXJlc0F0OiBudW1iZXI7XG59XG5cbmNvbnN0IGNhdGFsb2d1ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENhdGFsb2d1ZUVudHJ5PigpO1xuXG5jbGFzcyBEZWZhdWx0TW9kZWxDbGllbnQgaW1wbGVtZW50cyBNb2RlbENsaWVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBEYXRhYnJpY2tzTW9kZWxDbGllbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWNoZVR0bE1zOiBudW1iZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmVmZXJTeXN0ZW1Nb2RlbHM6IGJvb2xlYW4sXG4gICkge31cblxuICBhc3luYyBsaXN0TW9kZWxzKHJlZnJlc2ggPSBmYWxzZSk6IFByb21pc2U8U2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPiB7XG4gICAgcmV0dXJuIGNsb25lRW5kcG9pbnRzKGF3YWl0IHRoaXMuY2F0YWxvZ3VlKHJlZnJlc2gpKTtcbiAgfVxuXG4gIGFzeW5jIHNlYXJjaE1vZGVscyhxdWVyeTogTW9kZWxRdWVyeSA9IHt9LCByZWZyZXNoID0gZmFsc2UpOiBQcm9taXNlPFJhbmtlZE1vZGVsW10+IHtcbiAgICByZXR1cm4gbG9va3VwTW9kZWxzKGF3YWl0IHRoaXMuY2F0YWxvZ3VlKHJlZnJlc2gpLCBxdWVyeSwge1xuICAgICAgcHJlZmVyU3lzdGVtTW9kZWxzOiB0aGlzLnByZWZlclN5c3RlbU1vZGVscyxcbiAgICB9KS5tYXAoKHsgZW5kcG9pbnQsIC4uLnJhbmtlZCB9KSA9PiAoe1xuICAgICAgLi4ucmFua2VkLFxuICAgICAgZW5kcG9pbnQ6IGNsb25lRW5kcG9pbnQoZW5kcG9pbnQpLFxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIHJvdXRlKGlucHV0OiBNb2RlbFJvdXRlSW5wdXQgPSB7fSk6IFByb21pc2U8TW9kZWxSb3V0ZT4ge1xuICAgIGNvbnN0IHsgcmVmcmVzaCA9IGZhbHNlLCBwcm90b2NvbDogcmVxdWVzdGVkUHJvdG9jb2wsIGxvZ2luLCAuLi5zZWxlY3Rpb24gfSA9IGlucHV0O1xuICAgIGNvbnN0IGVmZmVjdGl2ZVNlbGVjdGlvbiA9XG4gICAgICByZXF1ZXN0ZWRQcm90b2NvbCA9PT0gXCJlbWJlZGRpbmdzXCIgJiYgc2VsZWN0aW9uLm1vZGVsQ2xhc3MgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHsgLi4uc2VsZWN0aW9uLCBtb2RlbENsYXNzOiBNb2RlbENsYXNzLkVtYmVkZGluZyB9XG4gICAgICAgIDogc2VsZWN0aW9uO1xuICAgIGNvbnN0IGNhdGFsb2d1ZSA9IGF3YWl0IHRoaXMuY2F0YWxvZ3VlKHJlZnJlc2gpO1xuICAgIGxldCByZXNvbHZlZCA9IHJlc29sdmVNb2RlbChjYXRhbG9ndWUsIGVmZmVjdGl2ZVNlbGVjdGlvbiwge1xuICAgICAgcHJlZmVyU3lzdGVtTW9kZWxzOiB0aGlzLnByZWZlclN5c3RlbU1vZGVscyxcbiAgICB9KTtcbiAgICBpZiAoaXNVbm1hdGNoZWRFeHBsaWNpdChjYXRhbG9ndWUsIGVmZmVjdGl2ZVNlbGVjdGlvbiwgcmVzb2x2ZWQpKSB7XG4gICAgICByZXNvbHZlZCA9IHJlc29sdmVNb2RlbChhd2FpdCB0aGlzLmNhdGFsb2d1ZSh0cnVlKSwgZWZmZWN0aXZlU2VsZWN0aW9uLCB7XG4gICAgICAgIHByZWZlclN5c3RlbU1vZGVsczogdGhpcy5wcmVmZXJTeXN0ZW1Nb2RlbHMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZW5kcG9pbnQgPSAoYXdhaXQgdGhpcy5jYXRhbG9ndWUoZmFsc2UpKS5maW5kKFxuICAgICAgKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHJlc29sdmVkLm1vZGVsSWQsXG4gICAgKTtcbiAgICBjb25zdCBwcm90b2NvbCA9IHJlcXVlc3RlZFByb3RvY29sID8/IGluZmVyUHJvdG9jb2woZW5kcG9pbnQsIHJlc29sdmVkLm1vZGVsSWQpO1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNsaWVudC5ob3N0KCk7XG4gICAgY29uc3Qgc2VydmljZSA9IHByb3RvY29sID09PSBcInJlc3BvbnNlc1wiICYmIGVuZHBvaW50ID8gc3lzdGVtTW9kZWxTZXJ2aWNlKGVuZHBvaW50KSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzeXN0ZW0gPVxuICAgICAgc2VydmljZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwcmVmZXJzU3lzdGVtTW9kZWxTZXJ2aWNlKFxuICAgICAgICBzZWxlY3Rpb24uZXhwbGljaXQsXG4gICAgICAgIHJlc29sdmVkLm1vZGVsSWQsXG4gICAgICAgIHNlcnZpY2UsXG4gICAgICAgIHRoaXMucHJlZmVyU3lzdGVtTW9kZWxzLFxuICAgICAgKTtcbiAgICBjb25zdCB1cmwgPSBzeXN0ZW1cbiAgICAgID8gYWlHYXRld2F5Q29kZXhSZXNwb25zZXNVcmwoaG9zdClcbiAgICAgIDogcm91dGVVcmwoaG9zdCwgcmVzb2x2ZWQubW9kZWxJZCwgcHJvdG9jb2wpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCB0aGlzLmNsaWVudC5hdXRoLmhlYWRlcnMoeyBsb2dpbiB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZWxJZDogc3lzdGVtID8gc2VydmljZSA6IHJlc29sdmVkLm1vZGVsSWQsXG4gICAgICAuLi4oZW5kcG9pbnQgPyB7IGVuZHBvaW50OiBjbG9uZUVuZHBvaW50KGVuZHBvaW50KSB9IDoge30pLFxuICAgICAgc291cmNlOiByZXNvbHZlZC5zb3VyY2UsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIGhvc3QsXG4gICAgICBhcGlCYXNlOiBuZXcgVVJMKFwic2VydmluZy1lbmRwb2ludHNcIiwgYCR7aG9zdC5yZXBsYWNlKC9cXC8kLywgXCJcIil9L2ApLnRvU3RyaW5nKCksXG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0YWRhdGE6IG1vZGVsTWV0YWRhdGFGb3IoZW5kcG9pbnQgPz8gcmVzb2x2ZWQubW9kZWxJZCksXG4gICAgfTtcbiAgfVxuXG4gIG1ldGFkYXRhKG1vZGVsOiBzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KTogTW9kZWxNZXRhZGF0YSB7XG4gICAgcmV0dXJuIG1vZGVsTWV0YWRhdGFGb3IobW9kZWwpO1xuICB9XG5cbiAgc3RhdHVzKCk6IE1vZGVsQ2xpZW50U3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKHRoaXMuY2xpZW50LmF1dGgucHJvZmlsZSA/IHsgcHJvZmlsZTogdGhpcy5jbGllbnQuYXV0aC5wcm9maWxlIH0gOiB7fSksXG4gICAgICBob3N0OiB0aGlzLmNsaWVudC5ob3N0KCksXG4gICAgICBwcmluY2lwYWw6IHRoaXMuY2xpZW50LnByaW5jaXBhbCgpLFxuICAgICAgLi4uKHRoaXMuY2xpZW50LndvcmtzcGFjZUlkKCkgPyB7IHdvcmtzcGFjZUlkOiB0aGlzLmNsaWVudC53b3Jrc3BhY2VJZCgpIH0gOiB7fSksXG4gICAgICBjYWNoZVR0bE1zOiB0aGlzLmNhY2hlVHRsTXMsXG4gICAgICBwcmVmZXJTeXN0ZW1Nb2RlbHM6IHRoaXMucHJlZmVyU3lzdGVtTW9kZWxzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNhdGFsb2d1ZShyZWZyZXNoOiBib29sZWFuKTogUHJvbWlzZTxyZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+IHtcbiAgICBjb25zdCBrZXkgPSBjYXRhbG9ndWVLZXkodGhpcy5jbGllbnQpO1xuICAgIGlmIChyZWZyZXNoKSBjYXRhbG9ndWVDYWNoZS5kZWxldGUoa2V5KTtcbiAgICBjb25zdCBjdXJyZW50ID0gY2F0YWxvZ3VlQ2FjaGUuZ2V0KGtleSk7XG4gICAgaWYgKGN1cnJlbnQgJiYgRGF0ZS5ub3coKSA8IGN1cnJlbnQuZXhwaXJlc0F0KSByZXR1cm4gY3VycmVudC5wcm9taXNlO1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLmZldGNoQ2F0YWxvZ3VlKCk7XG4gICAgY29uc3QgZW50cnk6IENhdGFsb2d1ZUVudHJ5ID0geyBwcm9taXNlLCBleHBpcmVzQXQ6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB9O1xuICAgIGNhdGFsb2d1ZUNhY2hlLnNldChrZXksIGVudHJ5KTtcbiAgICB2b2lkIHByb21pc2UudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgZW50cnkuZXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIHRoaXMuY2FjaGVUdGxNcztcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChjYXRhbG9ndWVDYWNoZS5nZXQoa2V5KSA9PT0gZW50cnkpIGNhdGFsb2d1ZUNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaENhdGFsb2d1ZSgpOiBQcm9taXNlPHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXT4ge1xuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KFwiL2FwaS8yLjAvc2VydmluZy1lbmRwb2ludHNcIik7XG4gICAgaWYgKCFvYmplY3QuaXNSZWNvcmQocmVzcG9uc2UpIHx8ICFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVuZHBvaW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGFicmlja3Mgc2VydmluZy1lbmRwb2ludHMgcmVzcG9uc2UgaXMgbWlzc2luZyBhbiBlbmRwb2ludHMgYXJyYXlcIik7XG4gICAgfVxuICAgIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IHRoaXMubWVhc3VyZUVtYmVkZGluZ0RpbWVuc2lvbnMobm9ybWFsaXplRW5kcG9pbnRzKHJlc3BvbnNlLmVuZHBvaW50cykpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImxpc3RlZFwiLCB7XG4gICAgICBjb3VudDogZW5kcG9pbnRzLmxlbmd0aCxcbiAgICAgIGhvc3Q6IHRoaXMuY2xpZW50Lmhvc3QoKSxcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtZWFzdXJlRW1iZWRkaW5nRGltZW5zaW9ucyhcbiAgICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgKTogUHJvbWlzZTxTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBlbmRwb2ludHMubWFwKGFzeW5jIChlbmRwb2ludCkgPT4ge1xuICAgICAgICBpZiAoZW5kcG9pbnQuY2xhc3MgIT09IE1vZGVsQ2xhc3MuRW1iZWRkaW5nIHx8IGVuZHBvaW50LmRpbWVuc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGVuZHBvaW50O1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KFxuICAgICAgICAgICAgYC9zZXJ2aW5nLWVuZHBvaW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChlbmRwb2ludC5uYW1lKX0vaW52b2NhdGlvbnNgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGlucHV0OiBbXCJwaW5nXCJdIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRpbWVuc2lvbiA9IGVtYmVkZGluZ0RpbWVuc2lvbihyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIGRpbWVuc2lvbiA9PT0gdW5kZWZpbmVkID8gZW5kcG9pbnQgOiB7IC4uLmVuZHBvaW50LCBkaW1lbnNpb24gfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihcImVtYmVkZGluZyBkaW1lbnNpb24gcHJvYmUgZmFpbGVkXCIsIHtcbiAgICAgICAgICAgIG1vZGVsOiBlbmRwb2ludC5uYW1lLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnJvciksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGVuZHBvaW50O1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtYmVkZGluZ0RpbWVuc2lvbih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZmlyc3QgPSB2YWx1ZS5kYXRhWzBdO1xuICBpZiAoIW9iamVjdC5pc1JlY29yZChmaXJzdCkgfHwgIUFycmF5LmlzQXJyYXkoZmlyc3QuZW1iZWRkaW5nKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGZpcnN0LmVtYmVkZGluZy5sZW5ndGggPiAwID8gZmlyc3QuZW1iZWRkaW5nLmxlbmd0aCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIENyZWF0ZSBhbiBhdXRoZW50aWNhdGlvbi1hd2FyZSBEYXRhYnJpY2tzIG1vZGVsIGNsaWVudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVNb2RlbENsaWVudChvcHRpb25zOiBNb2RlbENsaWVudE9wdGlvbnMgPSB7fSk6IFByb21pc2U8TW9kZWxDbGllbnQ+IHtcbiAgY29uc3QgY2FjaGVUdGxNcyA9IHZhbGlkYXRlQ2FjaGVUdGwob3B0aW9ucy5jYWNoZVR0bE1zKTtcbiAgaWYgKG9wdGlvbnMuaHlkcmF0ZU1ldGFkYXRhID8/IHRydWUpIGF3YWl0IGh5ZHJhdGVNb2RlbE1ldGFkYXRhKCk7XG4gIHJldHVybiBuZXcgRGVmYXVsdE1vZGVsQ2xpZW50KFxuICAgIG5ldyBBdXRoZW50aWNhdGVkTW9kZWxDbGllbnQoYXdhaXQgY3JlYXRlQXV0aENsaWVudChvcHRpb25zLmF1dGgpLCBnbG9iYWxUaGlzLmZldGNoKSxcbiAgICBjYWNoZVR0bE1zLFxuICAgIG9wdGlvbnMucHJlZmVyU3lzdGVtTW9kZWxzID8/IGZhbHNlLFxuICApO1xufVxuXG4vKiogTGlzdCBjb25maWd1cmVkIERhdGFicmlja3MgcHJvZmlsZXMgb3V0c2lkZSB0aGUgbW9kZWwgY2xpZW50IGZhY2FkZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0UHJvZmlsZXMocmVmcmVzaCA9IGZhbHNlKTogRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5W10ge1xuICByZXR1cm4gbGlzdEF1dGhQcm9maWxlcyh7IHJlZnJlc2ggfSk7XG59XG5cbi8qKiBAaW50ZXJuYWwgQ29uc3RydWN0IGEgbW9kZWwgY2xpZW50IGFyb3VuZCBhIHRlc3Qgb3IgaG9zdC1vd25lZCBEYXRhYnJpY2tzIGNsaWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbENsaWVudFdpdGhEYXRhYnJpY2tzQ2xpZW50KFxuICBjbGllbnQ6IERhdGFicmlja3NNb2RlbENsaWVudCxcbiAgY2FjaGVUdGxNcyA9IERFRkFVTFRfTU9ERUxfQ0xJRU5UX0NBQ0hFX1RUTF9NUyxcbiAgcHJlZmVyU3lzdGVtTW9kZWxzID0gZmFsc2UsXG4pOiBNb2RlbENsaWVudCB7XG4gIHJldHVybiBuZXcgRGVmYXVsdE1vZGVsQ2xpZW50KGNsaWVudCwgdmFsaWRhdGVDYWNoZVR0bChjYWNoZVR0bE1zKSwgcHJlZmVyU3lzdGVtTW9kZWxzKTtcbn1cblxuLyoqIEBpbnRlcm5hbCBDcmVhdGUgYSBtb2RlbCBjbGllbnQgd2l0aCBpbmplY3RhYmxlIGF1dGggaG9zdCBjYXBhYmlsaXRpZXMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlTW9kZWxDbGllbnRXaXRoRGVwZW5kZW5jaWVzKFxuICBvcHRpb25zOiBNb2RlbENsaWVudE9wdGlvbnMsXG4gIGRlcGVuZGVuY2llczogRGF0YWJyaWNrc0F1dGhEZXBlbmRlbmNpZXMsXG4pOiBQcm9taXNlPE1vZGVsQ2xpZW50PiB7XG4gIGlmIChvcHRpb25zLmh5ZHJhdGVNZXRhZGF0YSA/PyB0cnVlKSBhd2FpdCBoeWRyYXRlTW9kZWxNZXRhZGF0YSgpO1xuICByZXR1cm4gbmV3IERlZmF1bHRNb2RlbENsaWVudChcbiAgICBuZXcgQXV0aGVudGljYXRlZE1vZGVsQ2xpZW50KFxuICAgICAgYXdhaXQgY3JlYXRlQXV0aENsaWVudChvcHRpb25zLmF1dGgsIGRlcGVuZGVuY2llcyksXG4gICAgICBkZXBlbmRlbmNpZXMuZmV0Y2ggPz8gZ2xvYmFsVGhpcy5mZXRjaCxcbiAgICApLFxuICAgIHZhbGlkYXRlQ2FjaGVUdGwob3B0aW9ucy5jYWNoZVR0bE1zKSxcbiAgICBvcHRpb25zLnByZWZlclN5c3RlbU1vZGVscyA/PyBmYWxzZSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDYWNoZVR0bCh2YWx1ZSA9IERFRkFVTFRfTU9ERUxfQ0xJRU5UX0NBQ0hFX1RUTF9NUyk6IG51bWJlciB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTW9kZWwgY2xpZW50IGNhY2hlVHRsTXMgbXVzdCBiZSBhIHBvc2l0aXZlIGZpbml0ZSBudW1iZXJcIik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjYXRhbG9ndWVLZXkoY2xpZW50OiBEYXRhYnJpY2tzTW9kZWxDbGllbnQpOiBzdHJpbmcge1xuICByZXR1cm4gW2NsaWVudC5ob3N0KCksIGNsaWVudC53b3Jrc3BhY2VJZCgpID8/IFwiXCIsIGNsaWVudC5wcmluY2lwYWwoKV0uam9pbihcIlxcdTAwMDBcIik7XG59XG5cbmZ1bmN0aW9uIGluZmVyUHJvdG9jb2woXG4gIGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5IHwgdW5kZWZpbmVkLFxuICBtb2RlbElkOiBzdHJpbmcsXG4pOiBNb2RlbFByb3RvY29sIHtcbiAgaWYgKGVuZHBvaW50Py50YXNrID09PSBcImxsbS92MS9lbWJlZGRpbmdzXCIpIHJldHVybiBcImVtYmVkZGluZ3NcIjtcbiAgcmV0dXJuIG1vZGVsU2VydmluZ0FwaShtb2RlbElkKTtcbn1cblxuZnVuY3Rpb24gcm91dGVVcmwoaG9zdDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcsIHByb3RvY29sOiBNb2RlbFByb3RvY29sKTogc3RyaW5nIHtcbiAgaWYgKHByb3RvY29sID09PSBcInJlc3BvbnNlc1wiKSByZXR1cm4gcmVzcG9uc2VzVXBzdHJlYW1VcmwoaG9zdCwgbW9kZWxJZCk7XG4gIGlmIChwcm90b2NvbCA9PT0gXCJjaGF0XCIgJiYgbW9kZWxTZXJ2aW5nQXBpKG1vZGVsSWQpID09PSBcInJlc3BvbnNlc1wiKSB7XG4gICAgcmV0dXJuIGNoYXRDb21wbGV0aW9uc1VybChob3N0KTtcbiAgfVxuICByZXR1cm4gaW52b2NhdGlvbnNVcmwoaG9zdCwgbW9kZWxJZCk7XG59XG5cbmZ1bmN0aW9uIGlzVW5tYXRjaGVkRXhwbGljaXQoXG4gIGNhdGFsb2d1ZTogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBpbnB1dDogUmVzb2x2ZU1vZGVsSW5wdXQsXG4gIHJlc29sdmVkOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgaW5wdXQuZXhwbGljaXQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGlucHV0LmZ1enp5ICE9PSBmYWxzZSAmJlxuICAgIHJlc29sdmVkLm1vZGVsSWQgPT09IGlucHV0LmV4cGxpY2l0ICYmXG4gICAgIWNhdGFsb2d1ZS5zb21lKChlbmRwb2ludCkgPT4gZW5kcG9pbnQubmFtZSA9PT0gaW5wdXQuZXhwbGljaXQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNsb25lRW5kcG9pbnRzKGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdKTogU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdIHtcbiAgcmV0dXJuIGVuZHBvaW50cy5tYXAoY2xvbmVFbmRwb2ludCk7XG59XG5cbmZ1bmN0aW9uIGNsb25lRW5kcG9pbnQoZW5kcG9pbnQ6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5lbmRwb2ludCxcbiAgICAuLi4oZW5kcG9pbnQucHJvZmlsZSA/IHsgcHJvZmlsZTogeyAuLi5lbmRwb2ludC5wcm9maWxlIH0gfSA6IHt9KSxcbiAgICAuLi4oZW5kcG9pbnQuc2VydmljZU5hbWVzID8geyBzZXJ2aWNlTmFtZXM6IHsgLi4uZW5kcG9pbnQuc2VydmljZU5hbWVzIH0gfSA6IHt9KSxcbiAgICAuLi4oZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cyA/IHsgcmVhc29uaW5nRWZmb3J0czogWy4uLmVuZHBvaW50LnJlYXNvbmluZ0VmZm9ydHNdIH0gOiB7fSksXG4gICAgLi4uKGVuZHBvaW50LnN0YXR1cyA/IHsgc3RhdHVzOiB7IC4uLmVuZHBvaW50LnN0YXR1cyB9IH0gOiB7fSksXG4gIH07XG59XG4iXX0=
@@ -38,6 +38,16 @@ export declare function inheritsNativeWebSearch(name: string, documented: Iterab
38
38
  * external endpoints use arbitrary names, so their digits are not versions.
39
39
  */
40
40
  export declare function isFoundationModelIdentity(name: string): boolean;
41
+ /** Normalize a served-entity identity to its AI Gateway model-service name. */
42
+ export declare function modelServiceName(value: string | undefined): string | undefined;
43
+ /** Return the `system.ai.*` AI Gateway Codex service behind an endpoint, when one exists. */
44
+ export declare function systemModelService(endpoint: Pick<ServingEndpointSummary, "name" | "modelServiceName">): string | undefined;
45
+ /**
46
+ * Return whether a request should use the `system.ai.*` service instead of the
47
+ * serving endpoint. An exact endpoint id or exact service name always wins;
48
+ * otherwise `preferSystemModels` decides.
49
+ */
50
+ export declare function prefersSystemModelService(requested: string | undefined, endpointName: string, serviceName: string, preferSystemModels: boolean): boolean;
41
51
  /** Return whether an identity is hosted GPT-OSS rather than a GPT generation. */
42
52
  export declare function isOpenWeightsGpt(name: string): boolean;
43
53
  /** Return the reasoning efforts accepted by a model family. */
package/lib/src/policy.js CHANGED
@@ -78,6 +78,43 @@ export function inheritsNativeWebSearch(name, documented) {
78
78
  export function isFoundationModelIdentity(name) {
79
79
  return /^(?:databricks-|system\.ai\.)/i.test(name.trim());
80
80
  }
81
+ /** Normalize a served-entity identity to its AI Gateway model-service name. */
82
+ export function modelServiceName(value) {
83
+ const normalized = value?.trim().replace(/^databricks\//, "");
84
+ if (!normalized)
85
+ return undefined;
86
+ if (normalized.startsWith("system.ai.databricks-")) {
87
+ return `system.ai.${normalized.slice("system.ai.databricks-".length)}`;
88
+ }
89
+ if (normalized.startsWith("databricks-")) {
90
+ return `system.ai.${normalized.slice("databricks-".length)}`;
91
+ }
92
+ return normalized;
93
+ }
94
+ /** Return the `system.ai.*` AI Gateway Codex service behind an endpoint, when one exists. */
95
+ export function systemModelService(endpoint) {
96
+ const service = modelServiceName(endpoint.modelServiceName);
97
+ if (!service?.startsWith("system.ai."))
98
+ return undefined;
99
+ const family = modelFamily(endpoint.name);
100
+ return family === ModelFamily.Claude || family === ModelFamily.Gemini ? undefined : service;
101
+ }
102
+ /**
103
+ * Return whether a request should use the `system.ai.*` service instead of the
104
+ * serving endpoint. An exact endpoint id or exact service name always wins;
105
+ * otherwise `preferSystemModels` decides.
106
+ */
107
+ export function prefersSystemModelService(requested, endpointName, serviceName, preferSystemModels) {
108
+ const name = requested
109
+ ?.trim()
110
+ .replace(/^(?:dbx|databricks)\//i, "")
111
+ .toLowerCase();
112
+ if (name === endpointName.toLowerCase())
113
+ return false;
114
+ if (name === serviceName.toLowerCase())
115
+ return true;
116
+ return preferSystemModels;
117
+ }
81
118
  /** Return whether an identity is hosted GPT-OSS rather than a GPT generation. */
82
119
  export function isOpenWeightsGpt(name) {
83
120
  return modelFamily(name) === "gpt" && /(?:^|[-_.])oss(?:[-_.]|$)/i.test(name);
@@ -235,4 +272,4 @@ function parseModelName(name) {
235
272
  model: [...remainder.slice(0, versionStart), ...remainder.slice(cursor)],
236
273
  };
237
274
  }
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtRUFBbUU7QUFFbkUsT0FBTyxFQUNMLFVBQVUsR0FHWCxNQUFNLG1DQUFtQyxDQUFDO0FBRTNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUYscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixNQUFNLEVBQUUsUUFBUTtJQUNoQixHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsVUFBVTtJQUNwQixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztJQUNkLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsR0FBRyxFQUFFLEtBQUs7Q0FDRixDQUFDO0FBS1gsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUU1QyxNQUFNLFFBQVEsR0FBc0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlELE1BQU0sT0FBTyxHQUFzQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckYsTUFBTSxXQUFXLEdBQXNCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuRSxNQUFNLE1BQU0sR0FBc0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFB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QUFTLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxRQUFRLElBQUksQ0FBQztZQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN0QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxRQUFRLElBQUksQ0FBQztZQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLFlBQVksR0FBRyxDQUFDO1FBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUN2RSxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDO0lBQzFCLE9BQU8sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdEYsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU87UUFDTCxNQUFNO1FBQ04sT0FBTztRQUNQLEtBQUssRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3pFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFR5cGVTY3JpcHQtb3duZWQgbW9kZWwtZmFtaWx5IGFuZCBzZXJ2aW5nIGNhcGFiaWxpdHkgcG9saWN5LiAqL1xuXG5pbXBvcnQge1xuICBNb2RlbENsYXNzLFxuICB0eXBlIFJlYXNvbmluZ0VmZm9ydCxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwvY29udHJhY3RzXCI7XG5cbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9uVHVwbGVzLCBzdXBwb3J0c1Rvb2xzQnlGYW1pbHksIHZlcnNpb25UdXBsZSB9IGZyb20gXCIuL2NsYXNzaWZ5LnRzXCI7XG5cbi8qKiBSZWNvZ25pemVkIG1vZGVsIGZhbWlsaWVzIHVzZWQgYnkgcm91dGluZyBhbmQgcHJvdmlkZXIgcG9saWN5LiAqL1xuZXhwb3J0IGNvbnN0IE1vZGVsRmFtaWx5ID0ge1xuICBDbGF1ZGU6IFwiY2xhdWRlXCIsXG4gIEdwdDogXCJncHRcIixcbiAgR2VtaW5pOiBcImdlbWluaVwiLFxuICBMbGFtYTogXCJsbGFtYVwiLFxuICBHcm9rOiBcImdyb2tcIixcbiAgRGVlcHNlZWs6IFwiZGVlcHNlZWtcIixcbiAgUXdlbjogXCJxd2VuXCIsXG4gIEdsbTogXCJnbG1cIixcbiAgS2ltaTogXCJraW1pXCIsXG4gIEdlbW1hOiBcImdlbW1hXCIsXG4gIElua2xpbmc6IFwiaW5rbGluZ1wiLFxuICBCZ2U6IFwiYmdlXCIsXG4gIEd0ZTogXCJndGVcIixcbn0gYXMgY29uc3Q7XG5cbi8qKiBSZWNvZ25pemVkIG1vZGVsIGZhbWlseSB2YWx1ZS4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsRmFtaWx5ID0gKHR5cGVvZiBNb2RlbEZhbWlseSlba2V5b2YgdHlwZW9mIE1vZGVsRmFtaWx5XTtcblxuY29uc3QgRkFNSUxJRVMgPSBPYmplY3QudmFsdWVzKE1vZGVsRmFtaWx5KTtcblxuY29uc3QgU1RBTkRBUkQ6IFJlYXNvbmluZ0VmZm9ydFtdID0gW1wibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiXTtcbmNvbnN0IEdQVF81XzY6IFJlYXNvbmluZ0VmZm9ydFtdID0gW1wibm9uZVwiLCBcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiLCBcIm1heFwiXTtcbmNvbnN0IEdQVF81XzVfUFJPOiBSZWFzb25pbmdFZmZvcnRbXSA9IFtcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiXTtcbmNvbnN0IENMQVVERTogUmVhc29uaW5nRWZmb3J0W10gPSBbXCJub25lXCIsIFwibWluaW1hbFwiLCBcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiLCBcIm1heFwiXTtcbmNvbnN0IEdFTUlOSTogUmVhc29uaW5nRWZmb3J0W10gPSBbXCJtaW5pbWFsXCIsIFwibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiXTtcblxuaW50ZXJmYWNlIFBhcnNlZE1vZGVsTmFtZSB7XG4gIGZhbWlseTogTW9kZWxGYW1pbHk7XG4gIHZlcnNpb246IG51bWJlcltdO1xuICBtb2RlbDogc3RyaW5nW107XG59XG5cbi8qKiBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgZmFtaWx5IHBhcnNlZCBmcm9tIGEgbW9kZWwgaWRlbnRpdHkuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxGYW1pbHkobmFtZTogc3RyaW5nKTogTW9kZWxGYW1pbHkgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcGFyc2VNb2RlbE5hbWUobmFtZSk/LmZhbWlseTtcbn1cblxuLyoqIFJhbmsgYSBmYW1pbHkgYnkgaG93IG1ham9yIGl0IGlzOyB1bnJlY29nbml6ZWQgZmFtaWxpZXMgc29ydCBsYXN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsRmFtaWx5UmFuayhmYW1pbHk6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IGluZGV4ID0gRkFNSUxJRVMuaW5kZXhPZihmYW1pbHkgYXMgTW9kZWxGYW1pbHkpO1xuICByZXR1cm4gaW5kZXggPj0gMCA/IGluZGV4IDogRkFNSUxJRVMubGVuZ3RoO1xufVxuXG4vKiogTm9ybWFsaXplIGEgcmVjb2duaXplZCBtb2RlbCBpZGVudGl0eSBpbnRvIGZhbWlseSwgdmVyc2lvbiwgYW5kIHZhcmlhbnQgdG9rZW5zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsU2VhcmNoUXVlcnkobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VNb2RlbE5hbWUobmFtZSk7XG4gIGlmICghcGFyc2VkKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gW3BhcnNlZC5mYW1pbHksIC4uLnBhcnNlZC52ZXJzaW9uLm1hcChTdHJpbmcpLCAuLi5wYXJzZWQubW9kZWxdLmpvaW4oXCIgXCIpO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGBuYW1lYCBoYXMgbmF0aXZlIHdlYiBzZWFyY2g6IGFuIGV4YWN0IGRvY3VtZW50ZWQgaWRlbnRpdHksIG9yXG4gKiBhIGxhdGVyIHtAbGluayB2ZXJzaW9uVHVwbGV9IGluIHRoZSBzYW1lIGZhbWlseSBhcyBhIGRvY3VtZW50ZWQgbmF0aXZlXG4gKiB3ZWItc2VhcmNoIG1vZGVsLiBJbnRyYS1mYW1pbHkgZmxvb3JzIHVzZSB0aGUgbmFtZSBkaWdpdCBwYXJzZXIgc28gaWRlbnRpdGllc1xuICogbGlrZSBgZGF0YWJyaWNrcy1jbGF1ZGUtb3B1cy00LThgIGFuZCBgc3lzdGVtLmFpLmdwdC02LTEtc29sYCBjb21wYXJlLlxuICogSG9zdGVkIEdQVC1PU1Mgd2VpZ2h0cyBuZXZlciBpbmhlcml0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gobmFtZTogc3RyaW5nLCBkb2N1bWVudGVkOiBJdGVyYWJsZTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRvY3VtZW50ZWRLZXlzID0gZG9jdW1lbnRlZCBpbnN0YW5jZW9mIFNldCA/IGRvY3VtZW50ZWQgOiBuZXcgU2V0KGRvY3VtZW50ZWQpO1xuICBjb25zdCBrZXkgPSBtb2RlbFNlYXJjaFF1ZXJ5KG5hbWUpPy5yZXBsYWNlQWxsKFwiIFwiLCBcIi1cIik7XG4gIGlmIChrZXkgJiYgZG9jdW1lbnRlZEtleXMuaGFzKGtleSkpIHJldHVybiB0cnVlO1xuICBjb25zdCBmYW1pbHkgPSBtb2RlbEZhbWlseShuYW1lKTtcbiAgaWYgKCFmYW1pbHkgfHwgaXNPcGVuV2VpZ2h0c0dwdChuYW1lKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB2ZXJzaW9uID0gdmVyc2lvblR1cGxlKG5hbWUpO1xuICBpZiAoaXNaZXJvVmVyc2lvbih2ZXJzaW9uKSkgcmV0dXJuIGZhbHNlO1xuICBsZXQgZmxvb3I6IHJlYWRvbmx5IG51bWJlcltdIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGRvY3VtZW50ZWRLZXlzKSB7XG4gICAgaWYgKG1vZGVsRmFtaWx5KGVudHJ5KSAhPT0gZmFtaWx5IHx8IGlzT3BlbldlaWdodHNHcHQoZW50cnkpKSBjb250aW51ZTtcbiAgICBjb25zdCBkb2N1bWVudGVkVmVyc2lvbiA9IHZlcnNpb25UdXBsZShlbnRyeSk7XG4gICAgaWYgKGlzWmVyb1ZlcnNpb24oZG9jdW1lbnRlZFZlcnNpb24pKSBjb250aW51ZTtcbiAgICBpZiAoIWZsb29yIHx8IGNvbXBhcmVWZXJzaW9uVHVwbGVzKGRvY3VtZW50ZWRWZXJzaW9uLCBmbG9vcikgPCAwKSB7XG4gICAgICBmbG9vciA9IGRvY3VtZW50ZWRWZXJzaW9uO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmxvb3IgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlVmVyc2lvblR1cGxlcyh2ZXJzaW9uLCBmbG9vcikgPj0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhbiBpZGVudGl0eSBuYW1lcyBhIERhdGFicmlja3MtaG9zdGVkIGZvdW5kYXRpb24gbW9kZWxcbiAqIChgZGF0YWJyaWNrcy0qYCBlbmRwb2ludCBvciBgc3lzdGVtLmFpLipgIG1vZGVsIHNlcnZpY2UpLiBDdXN0b20gYW5kXG4gKiBleHRlcm5hbCBlbmRwb2ludHMgdXNlIGFyYml0cmFyeSBuYW1lcywgc28gdGhlaXIgZGlnaXRzIGFyZSBub3QgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ZvdW5kYXRpb25Nb2RlbElkZW50aXR5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL14oPzpkYXRhYnJpY2tzLXxzeXN0ZW1cXC5haVxcLikvaS50ZXN0KG5hbWUudHJpbSgpKTtcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIGFuIGlkZW50aXR5IGlzIGhvc3RlZCBHUFQtT1NTIHJhdGhlciB0aGFuIGEgR1BUIGdlbmVyYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gaXNPcGVuV2VpZ2h0c0dwdChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1vZGVsRmFtaWx5KG5hbWUpID09PSBcImdwdFwiICYmIC8oPzpefFstXy5dKW9zcyg/OlstXy5dfCQpL2kudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNaZXJvVmVyc2lvbih2ZXJzaW9uOiByZWFkb25seSBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmVyc2lvbi5ldmVyeSgocGFydCkgPT4gKHBhcnQgPz8gMCkgPT09IDApO1xufVxuXG4vKiogUmV0dXJuIHRoZSByZWFzb25pbmcgZWZmb3J0cyBhY2NlcHRlZCBieSBhIG1vZGVsIGZhbWlseS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFJlYXNvbmluZ0VmZm9ydHMobmFtZTogc3RyaW5nKTogUmVhc29uaW5nRWZmb3J0W10ge1xuICBjb25zdCBub3JtYWxpemVkID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1vZGVsTmFtZShuYW1lKTtcbiAgbGV0IGVmZm9ydHM6IFJlYXNvbmluZ0VmZm9ydFtdID0gW107XG4gIGlmIChwYXJzZWQ/LmZhbWlseSA9PT0gXCJncHRcIiAmJiBwYXJzZWQudmVyc2lvbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgW21ham9yID0gMCwgbWlub3IgPSAwXSA9IHBhcnNlZC52ZXJzaW9uO1xuICAgIGlmIChtYWpvciA+PSA1KSB7XG4gICAgICBlZmZvcnRzID1cbiAgICAgICAgbWFqb3IgPT09IDUgJiYgbWlub3IgPT09IDUgJiYgcGFyc2VkLm1vZGVsLmluY2x1ZGVzKFwicHJvXCIpXG4gICAgICAgICAgPyBHUFRfNV81X1BST1xuICAgICAgICAgIDogbWFqb3IgPT09IDUgJiYgbWlub3IgPT09IDZcbiAgICAgICAgICAgID8gR1BUXzVfNlxuICAgICAgICAgICAgOiBTVEFOREFSRDtcbiAgICB9XG4gIH1cbiAgaWYgKHBhcnNlZD8uZmFtaWx5ID09PSBcImdwdFwiICYmIHBhcnNlZC5tb2RlbC5pbmNsdWRlcyhcIm9zc1wiKSkgZWZmb3J0cyA9IFNUQU5EQVJEO1xuICBpZiAocGFyc2VkPy5mYW1pbHkgPT09IFwiY2xhdWRlXCIpIHtcbiAgICBjb25zdCBbbWFqb3IgPSAwLCBtaW5vciA9IDBdID0gcGFyc2VkLnZlcnNpb247XG4gICAgaWYgKG1ham9yID4gMyB8fCAobWFqb3IgPT09IDMgJiYgbWlub3IgPj0gNykpIGVmZm9ydHMgPSBDTEFVREU7XG4gIH1cbiAgaWYgKHBhcnNlZD8uZmFtaWx5ID09PSBcImdlbWluaVwiKSBlZmZvcnRzID0gR0VNSU5JO1xuICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcyhcImNvZGV4XCIpIHx8IC8oPzpefFstXy4vXSlvKD86MXwzfDQpKD86Wy1fLi9dfCQpL2kudGVzdChuYW1lKSkge1xuICAgIGVmZm9ydHMgPSBTVEFOREFSRDtcbiAgfVxuICByZXR1cm4gZWZmb3J0cztcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIHBvbGljeSB2ZXJpZmllcyBhIGNvbXBsZXRlIHRvb2wtY2FsbGluZyByb3VuZCB0cmlwLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsU3VwcG9ydHNUb29scyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN1cHBvcnRzVG9vbHNCeUZhbWlseShuYW1lKTtcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIGEgZGlzY292ZXJlZCBlbmRwb2ludCBjYW4gYmUgdXNlZCBmb3IgYSB0b29sLWNhbGxpbmcgY2hhdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludFN1cHBvcnRzVG9vbHMoZW5kcG9pbnQ6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBib29sZWFuIHtcbiAgY29uc3QgZW1iZWRkaW5nID1cbiAgICBlbmRwb2ludC50YXNrID09PSBcImxsbS92MS9lbWJlZGRpbmdzXCIgfHwgZW5kcG9pbnQuY2xhc3MgPT09IE1vZGVsQ2xhc3MuRW1iZWRkaW5nO1xuICBjb25zdCBjaGF0ID0gIWVtYmVkZGluZyAmJiAoZW5kcG9pbnQudGFzayA9PT0gXCJsbG0vdjEvY2hhdFwiIHx8IGVuZHBvaW50LmNsYXNzICE9PSB1bmRlZmluZWQpO1xuICByZXR1cm4gY2hhdCAmJiAoZW5kcG9pbnQuc3VwcG9ydHNUb29scyA/PyBtb2RlbFN1cHBvcnRzVG9vbHMoZW5kcG9pbnQubmFtZSkpO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgYSBtb2RlbCByZXF1aXJlcyBEYXRhYnJpY2tzJyBuYXRpdmUgUmVzcG9uc2VzIGVuZHBvaW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzcG9uc2VzT25seShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImNvZGV4XCIpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VNb2RlbE5hbWUobmFtZSk7XG4gIGlmICghcGFyc2VkIHx8IHBhcnNlZC5mYW1pbHkgIT09IFwiZ3B0XCIgfHwgcGFyc2VkLm1vZGVsLmluY2x1ZGVzKFwib3NzXCIpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IFttYWpvciA9IDAsIG1pbm9yID0gMF0gPSBwYXJzZWQudmVyc2lvbjtcbiAgcmV0dXJuIG1ham9yID4gNSB8fCAobWFqb3IgPT09IDUgJiYgbWlub3IgPj0gNCk7XG59XG5cbi8qKiBSZXR1cm4gdGhlIERhdGFicmlja3MgaW5mZXJlbmNlIHByb3RvY29sIHJlcXVpcmVkIGJ5IGEgbW9kZWwuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTZXJ2aW5nQXBpKG5hbWU6IHN0cmluZyk6IFwiY2hhdFwiIHwgXCJyZXNwb25zZXNcIiB7XG4gIHJldHVybiBpc1Jlc3BvbnNlc09ubHkobmFtZSkgPyBcInJlc3BvbnNlc1wiIDogXCJjaGF0XCI7XG59XG5cbi8qKiBSZXR1cm4gdGhlIENoYXQgQ29tcGxldGlvbnMgZWZmb3J0IHJlcXVpcmVkIHdoZW4gZnVuY3Rpb24gdG9vbHMgYXJlIHByZXNlbnQuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhdFRvb2xSZWFzb25pbmdFZmZvcnQobmFtZTogc3RyaW5nKTogUmVhc29uaW5nRWZmb3J0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VNb2RlbE5hbWUobmFtZSk7XG4gIGlmICghcGFyc2VkIHx8IHBhcnNlZC5mYW1pbHkgIT09IFwiZ3B0XCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IFttYWpvciA9IDAsIG1pbm9yID0gMF0gPSBwYXJzZWQudmVyc2lvbjtcbiAgcmV0dXJuIG1ham9yID09PSA1ICYmIG1pbm9yID09PSA2ID8gXCJub25lXCIgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBEZXJpdmUgcHJvdmlkZXItc3BlY2lmaWMgbW9kZWwgbmFtZXMgZnJvbSBhIERhdGFicmlja3MgbW9kZWwgaWRlbnRpdHkuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTZXJ2aWNlTmFtZXMobmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlTW9kZWxOYW1lKG5hbWUpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIHt9O1xuICBjb25zdCB2ZXJzaW9uID0gcGFyc2VkLnZlcnNpb24uam9pbihcIi5cIik7XG4gIGNvbnN0IHN1ZmZpeCA9IHBhcnNlZC5tb2RlbC5sZW5ndGggPyBgLSR7cGFyc2VkLm1vZGVsLmpvaW4oXCItXCIpfWAgOiBcIlwiO1xuICBzd2l0Y2ggKHBhcnNlZC5mYW1pbHkpIHtcbiAgICBjYXNlIFwiZ3B0XCI6XG4gICAgICByZXR1cm4gcGFyc2VkLm1vZGVsLmluY2x1ZGVzKFwib3NzXCIpID8ge30gOiB7IG9wZW5haTogYGdwdC0ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJjbGF1ZGVcIjoge1xuICAgICAgY29uc3QgW3ZhcmlhbnQsIC4uLnJlc3RdID0gcGFyc2VkLm1vZGVsO1xuICAgICAgcmV0dXJuIHZhcmlhbnRcbiAgICAgICAgPyB7IGFudGhyb3BpYzogYGNsYXVkZS0ke3ZhcmlhbnR9LSR7dmVyc2lvbn0ke3Jlc3QubGVuZ3RoID8gYC0ke3Jlc3Quam9pbihcIi1cIil9YCA6IFwiXCJ9YCB9XG4gICAgICAgIDoge307XG4gICAgfVxuICAgIGNhc2UgXCJnZW1pbmlcIjpcbiAgICBjYXNlIFwiZ2VtbWFcIjpcbiAgICAgIHJldHVybiB7IGdvb2dsZTogYCR7cGFyc2VkLmZhbWlseX0tJHt2ZXJzaW9ufSR7c3VmZml4fWAgfTtcbiAgICBjYXNlIFwiZ2xtXCI6XG4gICAgICByZXR1cm4geyB6aGlwdTogYGdsbS0ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJncm9rXCI6XG4gICAgICByZXR1cm4geyB4YWk6IGBncm9rLSR7dmVyc2lvbn0ke3N1ZmZpeH1gIH07XG4gICAgY2FzZSBcImxsYW1hXCI6XG4gICAgICByZXR1cm4geyBtZXRhOiBgbGxhbWEtJHt2ZXJzaW9ufSR7c3VmZml4fWAgfTtcbiAgICBjYXNlIFwicXdlblwiOlxuICAgICAgcmV0dXJuIHsgYWxpYmFiYTogYHF3ZW4ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJkZWVwc2Vla1wiOlxuICAgICAgcmV0dXJuIHsgZGVlcHNlZWs6IGBkZWVwc2Vlay12JHtwYXJzZWQudmVyc2lvblswXSA/PyBcIlwifSR7c3VmZml4fWAgfTtcbiAgICBjYXNlIFwia2ltaVwiOlxuICAgICAgcmV0dXJuIHsgbW9vbnNob3Q6IGBraW1pLWske3BhcnNlZC52ZXJzaW9uWzBdID8/IFwiXCJ9JHtzdWZmaXh9YCB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VNb2RlbE5hbWUobmFtZTogc3RyaW5nKTogUGFyc2VkTW9kZWxOYW1lIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9rZW5zID0gbmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9bYS16MC05XSsvZykgPz8gW107XG4gIGxldCBmYW1pbHlJbmRleCA9IC0xO1xuICBsZXQgZmFtaWx5OiBQYXJzZWRNb2RlbE5hbWVbXCJmYW1pbHlcIl0gfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0b2tlbnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdITtcbiAgICBjb25zdCBjb21wYWN0UXdlbiA9IC9ecXdlbihcXGQrKSQvLmV4ZWModG9rZW4pO1xuICAgIGlmIChjb21wYWN0UXdlbikge1xuICAgICAgZmFtaWx5SW5kZXggPSBpbmRleDtcbiAgICAgIGZhbWlseSA9IFwicXdlblwiO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChGQU1JTElFUy5pbmNsdWRlcyh0b2tlbiBhcyBNb2RlbEZhbWlseSkpIHtcbiAgICAgIGZhbWlseUluZGV4ID0gaW5kZXg7XG4gICAgICBmYW1pbHkgPSB0b2tlbiBhcyBQYXJzZWRNb2RlbE5hbWVbXCJmYW1pbHlcIl07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmYW1pbHkgfHwgZmFtaWx5SW5kZXggPCAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZW1haW5kZXIgPSB0b2tlbnMuc2xpY2UoZmFtaWx5SW5kZXggKyAxKTtcbiAgY29uc3QgbnVtZXJpYyA9ICh2YWx1ZTogc3RyaW5nKSA9PiAvXlxcZCskLy50ZXN0KHZhbHVlKTtcbiAgbGV0IHZlcnNpb25TdGFydCA9IHJlbWFpbmRlci5maW5kSW5kZXgobnVtZXJpYyk7XG4gIGlmIChmYW1pbHkgPT09IFwicXdlblwiICYmIC9ecXdlblxcZCskLy50ZXN0KHRva2Vuc1tmYW1pbHlJbmRleF0hKSkge1xuICAgIHZlcnNpb25TdGFydCA9IDA7XG4gICAgcmVtYWluZGVyLnVuc2hpZnQodG9rZW5zW2ZhbWlseUluZGV4XSEuc2xpY2UoNCkpO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwiZGVlcHNlZWtcIikge1xuICAgIGNvbnN0IHByZWZpeGVkID0gcmVtYWluZGVyLmZpbmRJbmRleCgodmFsdWUpID0+IC9edlxcZCskLy50ZXN0KHZhbHVlKSk7XG4gICAgaWYgKHByZWZpeGVkID49IDApIHJlbWFpbmRlcltwcmVmaXhlZF0gPSByZW1haW5kZXJbcHJlZml4ZWRdIS5zbGljZSgxKTtcbiAgICB2ZXJzaW9uU3RhcnQgPSByZW1haW5kZXIuZmluZEluZGV4KG51bWVyaWMpO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwia2ltaVwiKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSByZW1haW5kZXIuZmluZEluZGV4KCh2YWx1ZSkgPT4gL15rXFxkKyQvLnRlc3QodmFsdWUpKTtcbiAgICBpZiAocHJlZml4ZWQgPj0gMCkgcmVtYWluZGVyW3ByZWZpeGVkXSA9IHJlbWFpbmRlcltwcmVmaXhlZF0hLnNsaWNlKDEpO1xuICAgIHZlcnNpb25TdGFydCA9IHJlbWFpbmRlci5maW5kSW5kZXgobnVtZXJpYyk7XG4gIH1cbiAgaWYgKHZlcnNpb25TdGFydCA8IDApIHJldHVybiB7IGZhbWlseSwgdmVyc2lvbjogW10sIG1vZGVsOiByZW1haW5kZXIgfTtcbiAgY29uc3QgdmVyc2lvbjogbnVtYmVyW10gPSBbXTtcbiAgbGV0IGN1cnNvciA9IHZlcnNpb25TdGFydDtcbiAgd2hpbGUgKGN1cnNvciA8IHJlbWFpbmRlci5sZW5ndGggJiYgdmVyc2lvbi5sZW5ndGggPCAyICYmIG51bWVyaWMocmVtYWluZGVyW2N1cnNvcl0hKSkge1xuICAgIHZlcnNpb24ucHVzaChOdW1iZXIocmVtYWluZGVyW2N1cnNvcl0pKTtcbiAgICBjdXJzb3IgKz0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGZhbWlseSxcbiAgICB2ZXJzaW9uLFxuICAgIG1vZGVsOiBbLi4ucmVtYWluZGVyLnNsaWNlKDAsIHZlcnNpb25TdGFydCksIC4uLnJlbWFpbmRlci5zbGljZShjdXJzb3IpXSxcbiAgfTtcbn1cbiJdfQ==
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtRUFBbUU7QUFFbkUsT0FBTyxFQUNMLFVBQVUsR0FHWCxNQUFNLG1DQUFtQyxDQUFDO0FBRTNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUYscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixNQUFNLEVBQUUsUUFBUTtJQUNoQixHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsVUFBVTtJQUNwQixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztJQUNkLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsR0FBRyxFQUFFLEtBQUs7Q0FDRixDQUFDO0FBS1gsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUU1QyxNQUFNLFFBQVEsR0FBc0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlELE1BQU0sT0FBTyxHQUFzQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckYsTUFBTSxXQUFXLEdBQXNCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuRSxNQUFNLE1BQU0sR0FBc0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFB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QUFJLE1BQU0sS0FBSyxNQUFNLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2hFLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLFFBQVEsSUFBSSxDQUFDO1lBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsWUFBWSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLFFBQVEsSUFBSSxDQUFDO1lBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsWUFBWSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksWUFBWSxHQUFHLENBQUM7UUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUM3QixJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUM7SUFDMUIsT0FBTyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTztRQUNMLE1BQU07UUFDTixPQUFPO1FBQ1AsS0FBSyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDekUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVHlwZVNjcmlwdC1vd25lZCBtb2RlbC1mYW1pbHkgYW5kIHNlcnZpbmcgY2FwYWJpbGl0eSBwb2xpY3kuICovXG5cbmltcG9ydCB7XG4gIE1vZGVsQ2xhc3MsXG4gIHR5cGUgUmVhc29uaW5nRWZmb3J0LFxuICB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC9jb250cmFjdHNcIjtcblxuaW1wb3J0IHsgY29tcGFyZVZlcnNpb25UdXBsZXMsIHN1cHBvcnRzVG9vbHNCeUZhbWlseSwgdmVyc2lvblR1cGxlIH0gZnJvbSBcIi4vY2xhc3NpZnkudHNcIjtcblxuLyoqIFJlY29nbml6ZWQgbW9kZWwgZmFtaWxpZXMgdXNlZCBieSByb3V0aW5nIGFuZCBwcm92aWRlciBwb2xpY3kuICovXG5leHBvcnQgY29uc3QgTW9kZWxGYW1pbHkgPSB7XG4gIENsYXVkZTogXCJjbGF1ZGVcIixcbiAgR3B0OiBcImdwdFwiLFxuICBHZW1pbmk6IFwiZ2VtaW5pXCIsXG4gIExsYW1hOiBcImxsYW1hXCIsXG4gIEdyb2s6IFwiZ3Jva1wiLFxuICBEZWVwc2VlazogXCJkZWVwc2Vla1wiLFxuICBRd2VuOiBcInF3ZW5cIixcbiAgR2xtOiBcImdsbVwiLFxuICBLaW1pOiBcImtpbWlcIixcbiAgR2VtbWE6IFwiZ2VtbWFcIixcbiAgSW5rbGluZzogXCJpbmtsaW5nXCIsXG4gIEJnZTogXCJiZ2VcIixcbiAgR3RlOiBcImd0ZVwiLFxufSBhcyBjb25zdDtcblxuLyoqIFJlY29nbml6ZWQgbW9kZWwgZmFtaWx5IHZhbHVlLiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxGYW1pbHkgPSAodHlwZW9mIE1vZGVsRmFtaWx5KVtrZXlvZiB0eXBlb2YgTW9kZWxGYW1pbHldO1xuXG5jb25zdCBGQU1JTElFUyA9IE9iamVjdC52YWx1ZXMoTW9kZWxGYW1pbHkpO1xuXG5jb25zdCBTVEFOREFSRDogUmVhc29uaW5nRWZmb3J0W10gPSBbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdO1xuY29uc3QgR1BUXzVfNjogUmVhc29uaW5nRWZmb3J0W10gPSBbXCJub25lXCIsIFwibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiLCBcInhoaWdoXCIsIFwibWF4XCJdO1xuY29uc3QgR1BUXzVfNV9QUk86IFJlYXNvbmluZ0VmZm9ydFtdID0gW1wibWVkaXVtXCIsIFwiaGlnaFwiLCBcInhoaWdoXCJdO1xuY29uc3QgQ0xBVURFOiBSZWFzb25pbmdFZmZvcnRbXSA9IFtcIm5vbmVcIiwgXCJtaW5pbWFsXCIsIFwibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiLCBcInhoaWdoXCIsIFwibWF4XCJdO1xuY29uc3QgR0VNSU5JOiBSZWFzb25pbmdFZmZvcnRbXSA9IFtcIm1pbmltYWxcIiwgXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdO1xuXG5pbnRlcmZhY2UgUGFyc2VkTW9kZWxOYW1lIHtcbiAgZmFtaWx5OiBNb2RlbEZhbWlseTtcbiAgdmVyc2lvbjogbnVtYmVyW107XG4gIG1vZGVsOiBzdHJpbmdbXTtcbn1cblxuLyoqIFJldHVybiB0aGUgbm9ybWFsaXplZCBmYW1pbHkgcGFyc2VkIGZyb20gYSBtb2RlbCBpZGVudGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbEZhbWlseShuYW1lOiBzdHJpbmcpOiBNb2RlbEZhbWlseSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBwYXJzZU1vZGVsTmFtZShuYW1lKT8uZmFtaWx5O1xufVxuXG4vKiogUmFuayBhIGZhbWlseSBieSBob3cgbWFqb3IgaXQgaXM7IHVucmVjb2duaXplZCBmYW1pbGllcyBzb3J0IGxhc3QuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxGYW1pbHlSYW5rKGZhbWlseTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgaW5kZXggPSBGQU1JTElFUy5pbmRleE9mKGZhbWlseSBhcyBNb2RlbEZhbWlseSk7XG4gIHJldHVybiBpbmRleCA+PSAwID8gaW5kZXggOiBGQU1JTElFUy5sZW5ndGg7XG59XG5cbi8qKiBOb3JtYWxpemUgYSByZWNvZ25pemVkIG1vZGVsIGlkZW50aXR5IGludG8gZmFtaWx5LCB2ZXJzaW9uLCBhbmQgdmFyaWFudCB0b2tlbnMuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTZWFyY2hRdWVyeShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1vZGVsTmFtZShuYW1lKTtcbiAgaWYgKCFwYXJzZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBbcGFyc2VkLmZhbWlseSwgLi4ucGFyc2VkLnZlcnNpb24ubWFwKFN0cmluZyksIC4uLnBhcnNlZC5tb2RlbF0uam9pbihcIiBcIik7XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYG5hbWVgIGhhcyBuYXRpdmUgd2ViIHNlYXJjaDogYW4gZXhhY3QgZG9jdW1lbnRlZCBpZGVudGl0eSwgb3JcbiAqIGEgbGF0ZXIge0BsaW5rIHZlcnNpb25UdXBsZX0gaW4gdGhlIHNhbWUgZmFtaWx5IGFzIGEgZG9jdW1lbnRlZCBuYXRpdmVcbiAqIHdlYi1zZWFyY2ggbW9kZWwuIEludHJhLWZhbWlseSBmbG9vcnMgdXNlIHRoZSBuYW1lIGRpZ2l0IHBhcnNlciBzbyBpZGVudGl0aWVzXG4gKiBsaWtlIGBkYXRhYnJpY2tzLWNsYXVkZS1vcHVzLTQtOGAgYW5kIGBzeXN0ZW0uYWkuZ3B0LTYtMS1zb2xgIGNvbXBhcmUuXG4gKiBIb3N0ZWQgR1BULU9TUyB3ZWlnaHRzIG5ldmVyIGluaGVyaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmhlcml0c05hdGl2ZVdlYlNlYXJjaChuYW1lOiBzdHJpbmcsIGRvY3VtZW50ZWQ6IEl0ZXJhYmxlPHN0cmluZz4pOiBib29sZWFuIHtcbiAgY29uc3QgZG9jdW1lbnRlZEtleXMgPSBkb2N1bWVudGVkIGluc3RhbmNlb2YgU2V0ID8gZG9jdW1lbnRlZCA6IG5ldyBTZXQoZG9jdW1lbnRlZCk7XG4gIGNvbnN0IGtleSA9IG1vZGVsU2VhcmNoUXVlcnkobmFtZSk/LnJlcGxhY2VBbGwoXCIgXCIsIFwiLVwiKTtcbiAgaWYgKGtleSAmJiBkb2N1bWVudGVkS2V5cy5oYXMoa2V5KSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGZhbWlseSA9IG1vZGVsRmFtaWx5KG5hbWUpO1xuICBpZiAoIWZhbWlseSB8fCBpc09wZW5XZWlnaHRzR3B0KG5hbWUpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHZlcnNpb24gPSB2ZXJzaW9uVHVwbGUobmFtZSk7XG4gIGlmIChpc1plcm9WZXJzaW9uKHZlcnNpb24pKSByZXR1cm4gZmFsc2U7XG4gIGxldCBmbG9vcjogcmVhZG9ubHkgbnVtYmVyW10gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZG9jdW1lbnRlZEtleXMpIHtcbiAgICBpZiAobW9kZWxGYW1pbHkoZW50cnkpICE9PSBmYW1pbHkgfHwgaXNPcGVuV2VpZ2h0c0dwdChlbnRyeSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGRvY3VtZW50ZWRWZXJzaW9uID0gdmVyc2lvblR1cGxlKGVudHJ5KTtcbiAgICBpZiAoaXNaZXJvVmVyc2lvbihkb2N1bWVudGVkVmVyc2lvbikpIGNvbnRpbnVlO1xuICAgIGlmICghZmxvb3IgfHwgY29tcGFyZVZlcnNpb25UdXBsZXMoZG9jdW1lbnRlZFZlcnNpb24sIGZsb29yKSA8IDApIHtcbiAgICAgIGZsb29yID0gZG9jdW1lbnRlZFZlcnNpb247XG4gICAgfVxuICB9XG4gIHJldHVybiBmbG9vciAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmVWZXJzaW9uVHVwbGVzKHZlcnNpb24sIGZsb29yKSA+PSAwO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGFuIGlkZW50aXR5IG5hbWVzIGEgRGF0YWJyaWNrcy1ob3N0ZWQgZm91bmRhdGlvbiBtb2RlbFxuICogKGBkYXRhYnJpY2tzLSpgIGVuZHBvaW50IG9yIGBzeXN0ZW0uYWkuKmAgbW9kZWwgc2VydmljZSkuIEN1c3RvbSBhbmRcbiAqIGV4dGVybmFsIGVuZHBvaW50cyB1c2UgYXJiaXRyYXJ5IG5hbWVzLCBzbyB0aGVpciBkaWdpdHMgYXJlIG5vdCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHkobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXig/OmRhdGFicmlja3MtfHN5c3RlbVxcLmFpXFwuKS9pLnRlc3QobmFtZS50cmltKCkpO1xufVxuXG4vKiogTm9ybWFsaXplIGEgc2VydmVkLWVudGl0eSBpZGVudGl0eSB0byBpdHMgQUkgR2F0ZXdheSBtb2RlbC1zZXJ2aWNlIG5hbWUuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTZXJ2aWNlTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlPy50cmltKCkucmVwbGFjZSgvXmRhdGFicmlja3NcXC8vLCBcIlwiKTtcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKFwic3lzdGVtLmFpLmRhdGFicmlja3MtXCIpKSB7XG4gICAgcmV0dXJuIGBzeXN0ZW0uYWkuJHtub3JtYWxpemVkLnNsaWNlKFwic3lzdGVtLmFpLmRhdGFicmlja3MtXCIubGVuZ3RoKX1gO1xuICB9XG4gIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoXCJkYXRhYnJpY2tzLVwiKSkge1xuICAgIHJldHVybiBgc3lzdGVtLmFpLiR7bm9ybWFsaXplZC5zbGljZShcImRhdGFicmlja3MtXCIubGVuZ3RoKX1gO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKiogUmV0dXJuIHRoZSBgc3lzdGVtLmFpLipgIEFJIEdhdGV3YXkgQ29kZXggc2VydmljZSBiZWhpbmQgYW4gZW5kcG9pbnQsIHdoZW4gb25lIGV4aXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeXN0ZW1Nb2RlbFNlcnZpY2UoXG4gIGVuZHBvaW50OiBQaWNrPFNlcnZpbmdFbmRwb2ludFN1bW1hcnksIFwibmFtZVwiIHwgXCJtb2RlbFNlcnZpY2VOYW1lXCI+LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VydmljZSA9IG1vZGVsU2VydmljZU5hbWUoZW5kcG9pbnQubW9kZWxTZXJ2aWNlTmFtZSk7XG4gIGlmICghc2VydmljZT8uc3RhcnRzV2l0aChcInN5c3RlbS5haS5cIikpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZhbWlseSA9IG1vZGVsRmFtaWx5KGVuZHBvaW50Lm5hbWUpO1xuICByZXR1cm4gZmFtaWx5ID09PSBNb2RlbEZhbWlseS5DbGF1ZGUgfHwgZmFtaWx5ID09PSBNb2RlbEZhbWlseS5HZW1pbmkgPyB1bmRlZmluZWQgOiBzZXJ2aWNlO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgcmVxdWVzdCBzaG91bGQgdXNlIHRoZSBgc3lzdGVtLmFpLipgIHNlcnZpY2UgaW5zdGVhZCBvZiB0aGVcbiAqIHNlcnZpbmcgZW5kcG9pbnQuIEFuIGV4YWN0IGVuZHBvaW50IGlkIG9yIGV4YWN0IHNlcnZpY2UgbmFtZSBhbHdheXMgd2lucztcbiAqIG90aGVyd2lzZSBgcHJlZmVyU3lzdGVtTW9kZWxzYCBkZWNpZGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZmVyc1N5c3RlbU1vZGVsU2VydmljZShcbiAgcmVxdWVzdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGVuZHBvaW50TmFtZTogc3RyaW5nLFxuICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICBwcmVmZXJTeXN0ZW1Nb2RlbHM6IGJvb2xlYW4sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgbmFtZSA9IHJlcXVlc3RlZFxuICAgID8udHJpbSgpXG4gICAgLnJlcGxhY2UoL14oPzpkYnh8ZGF0YWJyaWNrcylcXC8vaSwgXCJcIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbiAgaWYgKG5hbWUgPT09IGVuZHBvaW50TmFtZS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChuYW1lID09PSBzZXJ2aWNlTmFtZS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHByZWZlclN5c3RlbU1vZGVscztcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIGFuIGlkZW50aXR5IGlzIGhvc3RlZCBHUFQtT1NTIHJhdGhlciB0aGFuIGEgR1BUIGdlbmVyYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gaXNPcGVuV2VpZ2h0c0dwdChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1vZGVsRmFtaWx5KG5hbWUpID09PSBcImdwdFwiICYmIC8oPzpefFstXy5dKW9zcyg/OlstXy5dfCQpL2kudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNaZXJvVmVyc2lvbih2ZXJzaW9uOiByZWFkb25seSBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmVyc2lvbi5ldmVyeSgocGFydCkgPT4gKHBhcnQgPz8gMCkgPT09IDApO1xufVxuXG4vKiogUmV0dXJuIHRoZSByZWFzb25pbmcgZWZmb3J0cyBhY2NlcHRlZCBieSBhIG1vZGVsIGZhbWlseS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFJlYXNvbmluZ0VmZm9ydHMobmFtZTogc3RyaW5nKTogUmVhc29uaW5nRWZmb3J0W10ge1xuICBjb25zdCBub3JtYWxpemVkID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1vZGVsTmFtZShuYW1lKTtcbiAgbGV0IGVmZm9ydHM6IFJlYXNvbmluZ0VmZm9ydFtdID0gW107XG4gIGlmIChwYXJzZWQ/LmZhbWlseSA9PT0gXCJncHRcIiAmJiBwYXJzZWQudmVyc2lvbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgW21ham9yID0gMCwgbWlub3IgPSAwXSA9IHBhcnNlZC52ZXJzaW9uO1xuICAgIGlmIChtYWpvciA+PSA1KSB7XG4gICAgICBlZmZvcnRzID1cbiAgICAgICAgbWFqb3IgPT09IDUgJiYgbWlub3IgPT09IDUgJiYgcGFyc2VkLm1vZGVsLmluY2x1ZGVzKFwicHJvXCIpXG4gICAgICAgICAgPyBHUFRfNV81X1BST1xuICAgICAgICAgIDogbWFqb3IgPT09IDUgJiYgbWlub3IgPT09IDZcbiAgICAgICAgICAgID8gR1BUXzVfNlxuICAgICAgICAgICAgOiBTVEFOREFSRDtcbiAgICB9XG4gIH1cbiAgaWYgKHBhcnNlZD8uZmFtaWx5ID09PSBcImdwdFwiICYmIHBhcnNlZC5tb2RlbC5pbmNsdWRlcyhcIm9zc1wiKSkgZWZmb3J0cyA9IFNUQU5EQVJEO1xuICBpZiAocGFyc2VkPy5mYW1pbHkgPT09IFwiY2xhdWRlXCIpIHtcbiAgICBjb25zdCBbbWFqb3IgPSAwLCBtaW5vciA9IDBdID0gcGFyc2VkLnZlcnNpb247XG4gICAgaWYgKG1ham9yID4gMyB8fCAobWFqb3IgPT09IDMgJiYgbWlub3IgPj0gNykpIGVmZm9ydHMgPSBDTEFVREU7XG4gIH1cbiAgaWYgKHBhcnNlZD8uZmFtaWx5ID09PSBcImdlbWluaVwiKSBlZmZvcnRzID0gR0VNSU5JO1xuICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcyhcImNvZGV4XCIpIHx8IC8oPzpefFstXy4vXSlvKD86MXwzfDQpKD86Wy1fLi9dfCQpL2kudGVzdChuYW1lKSkge1xuICAgIGVmZm9ydHMgPSBTVEFOREFSRDtcbiAgfVxuICByZXR1cm4gZWZmb3J0cztcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIHBvbGljeSB2ZXJpZmllcyBhIGNvbXBsZXRlIHRvb2wtY2FsbGluZyByb3VuZCB0cmlwLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsU3VwcG9ydHNUb29scyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN1cHBvcnRzVG9vbHNCeUZhbWlseShuYW1lKTtcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIGEgZGlzY292ZXJlZCBlbmRwb2ludCBjYW4gYmUgdXNlZCBmb3IgYSB0b29sLWNhbGxpbmcgY2hhdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludFN1cHBvcnRzVG9vbHMoZW5kcG9pbnQ6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBib29sZWFuIHtcbiAgY29uc3QgZW1iZWRkaW5nID1cbiAgICBlbmRwb2ludC50YXNrID09PSBcImxsbS92MS9lbWJlZGRpbmdzXCIgfHwgZW5kcG9pbnQuY2xhc3MgPT09IE1vZGVsQ2xhc3MuRW1iZWRkaW5nO1xuICBjb25zdCBjaGF0ID0gIWVtYmVkZGluZyAmJiAoZW5kcG9pbnQudGFzayA9PT0gXCJsbG0vdjEvY2hhdFwiIHx8IGVuZHBvaW50LmNsYXNzICE9PSB1bmRlZmluZWQpO1xuICByZXR1cm4gY2hhdCAmJiAoZW5kcG9pbnQuc3VwcG9ydHNUb29scyA/PyBtb2RlbFN1cHBvcnRzVG9vbHMoZW5kcG9pbnQubmFtZSkpO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgYSBtb2RlbCByZXF1aXJlcyBEYXRhYnJpY2tzJyBuYXRpdmUgUmVzcG9uc2VzIGVuZHBvaW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzcG9uc2VzT25seShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImNvZGV4XCIpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VNb2RlbE5hbWUobmFtZSk7XG4gIGlmICghcGFyc2VkIHx8IHBhcnNlZC5mYW1pbHkgIT09IFwiZ3B0XCIgfHwgcGFyc2VkLm1vZGVsLmluY2x1ZGVzKFwib3NzXCIpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IFttYWpvciA9IDAsIG1pbm9yID0gMF0gPSBwYXJzZWQudmVyc2lvbjtcbiAgcmV0dXJuIG1ham9yID4gNSB8fCAobWFqb3IgPT09IDUgJiYgbWlub3IgPj0gNCk7XG59XG5cbi8qKiBSZXR1cm4gdGhlIERhdGFicmlja3MgaW5mZXJlbmNlIHByb3RvY29sIHJlcXVpcmVkIGJ5IGEgbW9kZWwuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTZXJ2aW5nQXBpKG5hbWU6IHN0cmluZyk6IFwiY2hhdFwiIHwgXCJyZXNwb25zZXNcIiB7XG4gIHJldHVybiBpc1Jlc3BvbnNlc09ubHkobmFtZSkgPyBcInJlc3BvbnNlc1wiIDogXCJjaGF0XCI7XG59XG5cbi8qKiBSZXR1cm4gdGhlIENoYXQgQ29tcGxldGlvbnMgZWZmb3J0IHJlcXVpcmVkIHdoZW4gZnVuY3Rpb24gdG9vbHMgYXJlIHByZXNlbnQuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhdFRvb2xSZWFzb25pbmdFZmZvcnQobmFtZTogc3RyaW5nKTogUmVhc29uaW5nRWZmb3J0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VNb2RlbE5hbWUobmFtZSk7XG4gIGlmICghcGFyc2VkIHx8IHBhcnNlZC5mYW1pbHkgIT09IFwiZ3B0XCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IFttYWpvciA9IDAsIG1pbm9yID0gMF0gPSBwYXJzZWQudmVyc2lvbjtcbiAgcmV0dXJuIG1ham9yID09PSA1ICYmIG1pbm9yID09PSA2ID8gXCJub25lXCIgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBEZXJpdmUgcHJvdmlkZXItc3BlY2lmaWMgbW9kZWwgbmFtZXMgZnJvbSBhIERhdGFicmlja3MgbW9kZWwgaWRlbnRpdHkuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTZXJ2aWNlTmFtZXMobmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlTW9kZWxOYW1lKG5hbWUpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIHt9O1xuICBjb25zdCB2ZXJzaW9uID0gcGFyc2VkLnZlcnNpb24uam9pbihcIi5cIik7XG4gIGNvbnN0IHN1ZmZpeCA9IHBhcnNlZC5tb2RlbC5sZW5ndGggPyBgLSR7cGFyc2VkLm1vZGVsLmpvaW4oXCItXCIpfWAgOiBcIlwiO1xuICBzd2l0Y2ggKHBhcnNlZC5mYW1pbHkpIHtcbiAgICBjYXNlIFwiZ3B0XCI6XG4gICAgICByZXR1cm4gcGFyc2VkLm1vZGVsLmluY2x1ZGVzKFwib3NzXCIpID8ge30gOiB7IG9wZW5haTogYGdwdC0ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJjbGF1ZGVcIjoge1xuICAgICAgY29uc3QgW3ZhcmlhbnQsIC4uLnJlc3RdID0gcGFyc2VkLm1vZGVsO1xuICAgICAgcmV0dXJuIHZhcmlhbnRcbiAgICAgICAgPyB7IGFudGhyb3BpYzogYGNsYXVkZS0ke3ZhcmlhbnR9LSR7dmVyc2lvbn0ke3Jlc3QubGVuZ3RoID8gYC0ke3Jlc3Quam9pbihcIi1cIil9YCA6IFwiXCJ9YCB9XG4gICAgICAgIDoge307XG4gICAgfVxuICAgIGNhc2UgXCJnZW1pbmlcIjpcbiAgICBjYXNlIFwiZ2VtbWFcIjpcbiAgICAgIHJldHVybiB7IGdvb2dsZTogYCR7cGFyc2VkLmZhbWlseX0tJHt2ZXJzaW9ufSR7c3VmZml4fWAgfTtcbiAgICBjYXNlIFwiZ2xtXCI6XG4gICAgICByZXR1cm4geyB6aGlwdTogYGdsbS0ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJncm9rXCI6XG4gICAgICByZXR1cm4geyB4YWk6IGBncm9rLSR7dmVyc2lvbn0ke3N1ZmZpeH1gIH07XG4gICAgY2FzZSBcImxsYW1hXCI6XG4gICAgICByZXR1cm4geyBtZXRhOiBgbGxhbWEtJHt2ZXJzaW9ufSR7c3VmZml4fWAgfTtcbiAgICBjYXNlIFwicXdlblwiOlxuICAgICAgcmV0dXJuIHsgYWxpYmFiYTogYHF3ZW4ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJkZWVwc2Vla1wiOlxuICAgICAgcmV0dXJuIHsgZGVlcHNlZWs6IGBkZWVwc2Vlay12JHtwYXJzZWQudmVyc2lvblswXSA/PyBcIlwifSR7c3VmZml4fWAgfTtcbiAgICBjYXNlIFwia2ltaVwiOlxuICAgICAgcmV0dXJuIHsgbW9vbnNob3Q6IGBraW1pLWske3BhcnNlZC52ZXJzaW9uWzBdID8/IFwiXCJ9JHtzdWZmaXh9YCB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VNb2RlbE5hbWUobmFtZTogc3RyaW5nKTogUGFyc2VkTW9kZWxOYW1lIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9rZW5zID0gbmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9bYS16MC05XSsvZykgPz8gW107XG4gIGxldCBmYW1pbHlJbmRleCA9IC0xO1xuICBsZXQgZmFtaWx5OiBQYXJzZWRNb2RlbE5hbWVbXCJmYW1pbHlcIl0gfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0b2tlbnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdITtcbiAgICBjb25zdCBjb21wYWN0UXdlbiA9IC9ecXdlbihcXGQrKSQvLmV4ZWModG9rZW4pO1xuICAgIGlmIChjb21wYWN0UXdlbikge1xuICAgICAgZmFtaWx5SW5kZXggPSBpbmRleDtcbiAgICAgIGZhbWlseSA9IFwicXdlblwiO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChGQU1JTElFUy5pbmNsdWRlcyh0b2tlbiBhcyBNb2RlbEZhbWlseSkpIHtcbiAgICAgIGZhbWlseUluZGV4ID0gaW5kZXg7XG4gICAgICBmYW1pbHkgPSB0b2tlbiBhcyBQYXJzZWRNb2RlbE5hbWVbXCJmYW1pbHlcIl07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmYW1pbHkgfHwgZmFtaWx5SW5kZXggPCAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZW1haW5kZXIgPSB0b2tlbnMuc2xpY2UoZmFtaWx5SW5kZXggKyAxKTtcbiAgY29uc3QgbnVtZXJpYyA9ICh2YWx1ZTogc3RyaW5nKSA9PiAvXlxcZCskLy50ZXN0KHZhbHVlKTtcbiAgbGV0IHZlcnNpb25TdGFydCA9IHJlbWFpbmRlci5maW5kSW5kZXgobnVtZXJpYyk7XG4gIGlmIChmYW1pbHkgPT09IFwicXdlblwiICYmIC9ecXdlblxcZCskLy50ZXN0KHRva2Vuc1tmYW1pbHlJbmRleF0hKSkge1xuICAgIHZlcnNpb25TdGFydCA9IDA7XG4gICAgcmVtYWluZGVyLnVuc2hpZnQodG9rZW5zW2ZhbWlseUluZGV4XSEuc2xpY2UoNCkpO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwiZGVlcHNlZWtcIikge1xuICAgIGNvbnN0IHByZWZpeGVkID0gcmVtYWluZGVyLmZpbmRJbmRleCgodmFsdWUpID0+IC9edlxcZCskLy50ZXN0KHZhbHVlKSk7XG4gICAgaWYgKHByZWZpeGVkID49IDApIHJlbWFpbmRlcltwcmVmaXhlZF0gPSByZW1haW5kZXJbcHJlZml4ZWRdIS5zbGljZSgxKTtcbiAgICB2ZXJzaW9uU3RhcnQgPSByZW1haW5kZXIuZmluZEluZGV4KG51bWVyaWMpO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwia2ltaVwiKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSByZW1haW5kZXIuZmluZEluZGV4KCh2YWx1ZSkgPT4gL15rXFxkKyQvLnRlc3QodmFsdWUpKTtcbiAgICBpZiAocHJlZml4ZWQgPj0gMCkgcmVtYWluZGVyW3ByZWZpeGVkXSA9IHJlbWFpbmRlcltwcmVmaXhlZF0hLnNsaWNlKDEpO1xuICAgIHZlcnNpb25TdGFydCA9IHJlbWFpbmRlci5maW5kSW5kZXgobnVtZXJpYyk7XG4gIH1cbiAgaWYgKHZlcnNpb25TdGFydCA8IDApIHJldHVybiB7IGZhbWlseSwgdmVyc2lvbjogW10sIG1vZGVsOiByZW1haW5kZXIgfTtcbiAgY29uc3QgdmVyc2lvbjogbnVtYmVyW10gPSBbXTtcbiAgbGV0IGN1cnNvciA9IHZlcnNpb25TdGFydDtcbiAgd2hpbGUgKGN1cnNvciA8IHJlbWFpbmRlci5sZW5ndGggJiYgdmVyc2lvbi5sZW5ndGggPCAyICYmIG51bWVyaWMocmVtYWluZGVyW2N1cnNvcl0hKSkge1xuICAgIHZlcnNpb24ucHVzaChOdW1iZXIocmVtYWluZGVyW2N1cnNvcl0pKTtcbiAgICBjdXJzb3IgKz0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGZhbWlseSxcbiAgICB2ZXJzaW9uLFxuICAgIG1vZGVsOiBbLi4ucmVtYWluZGVyLnNsaWNlKDAsIHZlcnNpb25TdGFydCksIC4uLnJlbWFpbmRlci5zbGljZShjdXJzb3IpXSxcbiAgfTtcbn1cbiJdfQ==
@@ -4,8 +4,10 @@
4
4
  * @module
5
5
  */
6
6
  import type { ModelQuery, RankedModel, ResolvedModel, ResolvedModelSelection, ResolveModelInput, ResolveModelOptions, ServingEndpointSummary } from "@dbx-tools/shared-model";
7
+ import { type ModelSelectionPolicyOptions } from "./_selection.ts";
7
8
  import { type WorkspaceClientLike } from "./model-catalog.ts";
8
9
  export { lookupModels, rankModelId, resolveModel } from "./_selection.ts";
10
+ export type { ModelSelectionPolicyOptions } from "./_selection.ts";
9
11
  /** Intent plus catalogue cache controls passed to {@link selectModel}. */
10
12
  export interface SelectModelInput extends ResolveModelInput {
11
13
  ttlMs?: number;
@@ -17,7 +19,7 @@ export interface SearchModelsInput extends ModelQuery {
17
19
  cacheIdentity?: string;
18
20
  }
19
21
  /** Resolve against a potentially stale catalogue, refreshing once on a miss. */
20
- export declare function rankModelIdLive(load: (force: boolean) => Promise<readonly ServingEndpointSummary[]>, search: string, options?: ResolveModelOptions): Promise<ResolvedModel>;
22
+ export declare function rankModelIdLive(load: (force: boolean) => Promise<readonly ServingEndpointSummary[]>, search: string, options?: ResolveModelOptions, policy?: ModelSelectionPolicyOptions): Promise<ResolvedModel>;
21
23
  /** List and rank a workspace model catalogue. */
22
24
  export declare function searchModels(client: WorkspaceClientLike, host: string, input?: SearchModelsInput): Promise<RankedModel[]>;
23
25
  /** List a workspace catalogue and resolve one model. */
@@ -1,12 +1,12 @@
1
- import { lookupModels, rankModelId, resolveModel } from "./_selection.js";
1
+ import { lookupModels, rankModelId, resolveModel, } from "./_selection.js";
2
2
  import { listServingEndpoints, } from "./model-catalog.js";
3
3
  export { lookupModels, rankModelId, resolveModel } from "./_selection.js";
4
4
  /** Resolve against a potentially stale catalogue, refreshing once on a miss. */
5
- export async function rankModelIdLive(load, search, options = {}) {
6
- const resolved = rankModelId(await load(false), search, options);
5
+ export async function rankModelIdLive(load, search, options = {}, policy = {}) {
6
+ const resolved = rankModelId(await load(false), search, options, policy);
7
7
  if (resolved.matched)
8
8
  return resolved;
9
- return rankModelId(await load(true), search, options);
9
+ return rankModelId(await load(true), search, options, policy);
10
10
  }
11
11
  /** List and rank a workspace model catalogue. */
12
12
  export async function searchModels(client, host, input = {}) {
@@ -27,4 +27,4 @@ function catalogueOptions(input) {
27
27
  ...(input.cacheIdentity !== undefined ? { cacheIdentity: input.cacheIdentity } : {}),
28
28
  };
29
29
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFFLE9BQU8sRUFDTCxvQkFBb0IsR0FHckIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWMxRSxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLElBQW9FLEVBQ3BFLE1BQWMsRUFDZCxVQUErQixFQUFFO0lBRWpDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakUsSUFBSSxRQUFRLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3RDLE9BQU8sV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxNQUEyQixFQUMzQixJQUFZLEVBQ1osUUFBMkIsRUFBRTtJQUU3QixNQUFNLFNBQVMsR0FBRyxNQUFNLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRixPQUFPLFlBQVksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsTUFBMkIsRUFDM0IsSUFBWSxFQUNaLFFBQTBCLEVBQUU7SUFFNUIsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNsRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRixPQUFPLFlBQVksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FHekI7SUFDQyxPQUFPO1FBQ0wsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3JGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXb3Jrc3BhY2UtYXdhcmUgbW9kZWwgc2VsZWN0aW9uIHdyYXBwZXJzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHR5cGUge1xuICBNb2RlbFF1ZXJ5LFxuICBSYW5rZWRNb2RlbCxcbiAgUmVzb2x2ZWRNb2RlbCxcbiAgUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbixcbiAgUmVzb2x2ZU1vZGVsSW5wdXQsXG4gIFJlc29sdmVNb2RlbE9wdGlvbnMsXG4gIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuXG5pbXBvcnQgeyBsb29rdXBNb2RlbHMsIHJhbmtNb2RlbElkLCByZXNvbHZlTW9kZWwgfSBmcm9tIFwiLi9fc2VsZWN0aW9uLnRzXCI7XG5pbXBvcnQge1xuICBsaXN0U2VydmluZ0VuZHBvaW50cyxcbiAgdHlwZSBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMsXG4gIHR5cGUgV29ya3NwYWNlQ2xpZW50TGlrZSxcbn0gZnJvbSBcIi4vbW9kZWwtY2F0YWxvZy50c1wiO1xuXG5leHBvcnQgeyBsb29rdXBNb2RlbHMsIHJhbmtNb2RlbElkLCByZXNvbHZlTW9kZWwgfSBmcm9tIFwiLi9fc2VsZWN0aW9uLnRzXCI7XG5cbi8qKiBJbnRlbnQgcGx1cyBjYXRhbG9ndWUgY2FjaGUgY29udHJvbHMgcGFzc2VkIHRvIHtAbGluayBzZWxlY3RNb2RlbH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdE1vZGVsSW5wdXQgZXh0ZW5kcyBSZXNvbHZlTW9kZWxJbnB1dCB7XG4gIHR0bE1zPzogbnVtYmVyO1xuICBjYWNoZUlkZW50aXR5Pzogc3RyaW5nO1xufVxuXG4vKiogUXVlcnkgcGx1cyBjYXRhbG9ndWUgY2FjaGUgY29udHJvbHMgcGFzc2VkIHRvIHtAbGluayBzZWFyY2hNb2RlbHN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hNb2RlbHNJbnB1dCBleHRlbmRzIE1vZGVsUXVlcnkge1xuICB0dGxNcz86IG51bWJlcjtcbiAgY2FjaGVJZGVudGl0eT86IHN0cmluZztcbn1cblxuLyoqIFJlc29sdmUgYWdhaW5zdCBhIHBvdGVudGlhbGx5IHN0YWxlIGNhdGFsb2d1ZSwgcmVmcmVzaGluZyBvbmNlIG9uIGEgbWlzcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5rTW9kZWxJZExpdmUoXG4gIGxvYWQ6IChmb3JjZTogYm9vbGVhbikgPT4gUHJvbWlzZTxyZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+LFxuICBzZWFyY2g6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxSZXNvbHZlZE1vZGVsPiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmFua01vZGVsSWQoYXdhaXQgbG9hZChmYWxzZSksIHNlYXJjaCwgb3B0aW9ucyk7XG4gIGlmIChyZXNvbHZlZC5tYXRjaGVkKSByZXR1cm4gcmVzb2x2ZWQ7XG4gIHJldHVybiByYW5rTW9kZWxJZChhd2FpdCBsb2FkKHRydWUpLCBzZWFyY2gsIG9wdGlvbnMpO1xufVxuXG4vKiogTGlzdCBhbmQgcmFuayBhIHdvcmtzcGFjZSBtb2RlbCBjYXRhbG9ndWUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VhcmNoTW9kZWxzKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudExpa2UsXG4gIGhvc3Q6IHN0cmluZyxcbiAgaW5wdXQ6IFNlYXJjaE1vZGVsc0lucHV0ID0ge30sXG4pOiBQcm9taXNlPFJhbmtlZE1vZGVsW10+IHtcbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgbGlzdFNlcnZpbmdFbmRwb2ludHMoY2xpZW50LCBob3N0LCBjYXRhbG9ndWVPcHRpb25zKGlucHV0KSk7XG4gIHJldHVybiBsb29rdXBNb2RlbHMoZW5kcG9pbnRzLCBpbnB1dCk7XG59XG5cbi8qKiBMaXN0IGEgd29ya3NwYWNlIGNhdGFsb2d1ZSBhbmQgcmVzb2x2ZSBvbmUgbW9kZWwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VsZWN0TW9kZWwoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50TGlrZSxcbiAgaG9zdDogc3RyaW5nLFxuICBpbnB1dDogU2VsZWN0TW9kZWxJbnB1dCA9IHt9LFxuKTogUHJvbWlzZTxSZXNvbHZlZE1vZGVsU2VsZWN0aW9uPiB7XG4gIGlmIChpbnB1dC5leHBsaWNpdCAhPT0gdW5kZWZpbmVkICYmIGlucHV0LmZ1enp5ID09PSBmYWxzZSAmJiAhaW5wdXQucmVxdWlyZXNUb29scykge1xuICAgIHJldHVybiB7IG1vZGVsSWQ6IGlucHV0LmV4cGxpY2l0LCBzb3VyY2U6IFwiZXhwbGljaXRcIiB9O1xuICB9XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGxpc3RTZXJ2aW5nRW5kcG9pbnRzKGNsaWVudCwgaG9zdCwgY2F0YWxvZ3VlT3B0aW9ucyhpbnB1dCkpO1xuICByZXR1cm4gcmVzb2x2ZU1vZGVsKGVuZHBvaW50cywgaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBjYXRhbG9ndWVPcHRpb25zKGlucHV0OiB7XG4gIHJlYWRvbmx5IHR0bE1zPzogbnVtYmVyO1xuICByZWFkb25seSBjYWNoZUlkZW50aXR5Pzogc3RyaW5nO1xufSk6IExpc3RTZXJ2aW5nRW5kcG9pbnRzT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgLi4uKGlucHV0LnR0bE1zICE9PSB1bmRlZmluZWQgPyB7IHR0bE1zOiBpbnB1dC50dGxNcyB9IDoge30pLFxuICAgIC4uLihpbnB1dC5jYWNoZUlkZW50aXR5ICE9PSB1bmRlZmluZWQgPyB7IGNhY2hlSWRlbnRpdHk6IGlucHV0LmNhY2hlSWRlbnRpdHkgfSA6IHt9KSxcbiAgfTtcbn1cbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksR0FFYixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxvQkFBb0IsR0FHckIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWUxRSxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLElBQW9FLEVBQ3BFLE1BQWMsRUFDZCxVQUErQixFQUFFLEVBQ2pDLFNBQXNDLEVBQUU7SUFFeEMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekUsSUFBSSxRQUFRLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3RDLE9BQU8sV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsTUFBMkIsRUFDM0IsSUFBWSxFQUNaLFFBQTJCLEVBQUU7SUFFN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLE1BQTJCLEVBQzNCLElBQVksRUFDWixRQUEwQixFQUFFO0lBRTVCLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBR3pCO0lBQ0MsT0FBTztRQUNMLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNyRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya3NwYWNlLWF3YXJlIG1vZGVsIHNlbGVjdGlvbiB3cmFwcGVycy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB0eXBlIHtcbiAgTW9kZWxRdWVyeSxcbiAgUmFua2VkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24sXG4gIFJlc29sdmVNb2RlbElucHV0LFxuICBSZXNvbHZlTW9kZWxPcHRpb25zLFxuICBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHtcbiAgbG9va3VwTW9kZWxzLFxuICByYW5rTW9kZWxJZCxcbiAgcmVzb2x2ZU1vZGVsLFxuICB0eXBlIE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyxcbn0gZnJvbSBcIi4vX3NlbGVjdGlvbi50c1wiO1xuaW1wb3J0IHtcbiAgbGlzdFNlcnZpbmdFbmRwb2ludHMsXG4gIHR5cGUgTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zLFxuICB0eXBlIFdvcmtzcGFjZUNsaWVudExpa2UsXG59IGZyb20gXCIuL21vZGVsLWNhdGFsb2cudHNcIjtcblxuZXhwb3J0IHsgbG9va3VwTW9kZWxzLCByYW5rTW9kZWxJZCwgcmVzb2x2ZU1vZGVsIH0gZnJvbSBcIi4vX3NlbGVjdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBNb2RlbFNlbGVjdGlvblBvbGljeU9wdGlvbnMgfSBmcm9tIFwiLi9fc2VsZWN0aW9uLnRzXCI7XG5cbi8qKiBJbnRlbnQgcGx1cyBjYXRhbG9ndWUgY2FjaGUgY29udHJvbHMgcGFzc2VkIHRvIHtAbGluayBzZWxlY3RNb2RlbH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdE1vZGVsSW5wdXQgZXh0ZW5kcyBSZXNvbHZlTW9kZWxJbnB1dCB7XG4gIHR0bE1zPzogbnVtYmVyO1xuICBjYWNoZUlkZW50aXR5Pzogc3RyaW5nO1xufVxuXG4vKiogUXVlcnkgcGx1cyBjYXRhbG9ndWUgY2FjaGUgY29udHJvbHMgcGFzc2VkIHRvIHtAbGluayBzZWFyY2hNb2RlbHN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hNb2RlbHNJbnB1dCBleHRlbmRzIE1vZGVsUXVlcnkge1xuICB0dGxNcz86IG51bWJlcjtcbiAgY2FjaGVJZGVudGl0eT86IHN0cmluZztcbn1cblxuLyoqIFJlc29sdmUgYWdhaW5zdCBhIHBvdGVudGlhbGx5IHN0YWxlIGNhdGFsb2d1ZSwgcmVmcmVzaGluZyBvbmNlIG9uIGEgbWlzcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5rTW9kZWxJZExpdmUoXG4gIGxvYWQ6IChmb3JjZTogYm9vbGVhbikgPT4gUHJvbWlzZTxyZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+LFxuICBzZWFyY2g6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuICBwb2xpY3k6IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxSZXNvbHZlZE1vZGVsPiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmFua01vZGVsSWQoYXdhaXQgbG9hZChmYWxzZSksIHNlYXJjaCwgb3B0aW9ucywgcG9saWN5KTtcbiAgaWYgKHJlc29sdmVkLm1hdGNoZWQpIHJldHVybiByZXNvbHZlZDtcbiAgcmV0dXJuIHJhbmtNb2RlbElkKGF3YWl0IGxvYWQodHJ1ZSksIHNlYXJjaCwgb3B0aW9ucywgcG9saWN5KTtcbn1cblxuLyoqIExpc3QgYW5kIHJhbmsgYSB3b3Jrc3BhY2UgbW9kZWwgY2F0YWxvZ3VlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaE1vZGVscyhcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlLFxuICBob3N0OiBzdHJpbmcsXG4gIGlucHV0OiBTZWFyY2hNb2RlbHNJbnB1dCA9IHt9LFxuKTogUHJvbWlzZTxSYW5rZWRNb2RlbFtdPiB7XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGxpc3RTZXJ2aW5nRW5kcG9pbnRzKGNsaWVudCwgaG9zdCwgY2F0YWxvZ3VlT3B0aW9ucyhpbnB1dCkpO1xuICByZXR1cm4gbG9va3VwTW9kZWxzKGVuZHBvaW50cywgaW5wdXQpO1xufVxuXG4vKiogTGlzdCBhIHdvcmtzcGFjZSBjYXRhbG9ndWUgYW5kIHJlc29sdmUgb25lIG1vZGVsLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbGVjdE1vZGVsKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudExpa2UsXG4gIGhvc3Q6IHN0cmluZyxcbiAgaW5wdXQ6IFNlbGVjdE1vZGVsSW5wdXQgPSB7fSxcbik6IFByb21pc2U8UmVzb2x2ZWRNb2RlbFNlbGVjdGlvbj4ge1xuICBpZiAoaW5wdXQuZXhwbGljaXQgIT09IHVuZGVmaW5lZCAmJiBpbnB1dC5mdXp6eSA9PT0gZmFsc2UgJiYgIWlucHV0LnJlcXVpcmVzVG9vbHMpIHtcbiAgICByZXR1cm4geyBtb2RlbElkOiBpbnB1dC5leHBsaWNpdCwgc291cmNlOiBcImV4cGxpY2l0XCIgfTtcbiAgfVxuICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBsaXN0U2VydmluZ0VuZHBvaW50cyhjbGllbnQsIGhvc3QsIGNhdGFsb2d1ZU9wdGlvbnMoaW5wdXQpKTtcbiAgcmV0dXJuIHJlc29sdmVNb2RlbChlbmRwb2ludHMsIGlucHV0KTtcbn1cblxuZnVuY3Rpb24gY2F0YWxvZ3VlT3B0aW9ucyhpbnB1dDoge1xuICByZWFkb25seSB0dGxNcz86IG51bWJlcjtcbiAgcmVhZG9ubHkgY2FjaGVJZGVudGl0eT86IHN0cmluZztcbn0pOiBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIC4uLihpbnB1dC50dGxNcyAhPT0gdW5kZWZpbmVkID8geyB0dGxNczogaW5wdXQudHRsTXMgfSA6IHt9KSxcbiAgICAuLi4oaW5wdXQuY2FjaGVJZGVudGl0eSAhPT0gdW5kZWZpbmVkID8geyBjYWNoZUlkZW50aXR5OiBpbnB1dC5jYWNoZUlkZW50aXR5IH0gOiB7fSksXG4gIH07XG59XG4iXX0=
package/package.json CHANGED
@@ -25,12 +25,12 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@databricks/appkit": "0.81.0",
28
- "@dbx-tools/appkit": "^0.9.129",
29
- "@dbx-tools/auth": "^0.9.129",
30
- "@dbx-tools/cache": "^0.9.129",
31
- "@dbx-tools/shared-auth": "^0.9.129",
32
- "@dbx-tools/shared-core": "^0.9.129",
33
- "@dbx-tools/shared-model": "^0.9.129",
28
+ "@dbx-tools/appkit": "^0.9.131",
29
+ "@dbx-tools/auth": "^0.9.131",
30
+ "@dbx-tools/cache": "^0.9.131",
31
+ "@dbx-tools/shared-auth": "^0.9.131",
32
+ "@dbx-tools/shared-core": "^0.9.131",
33
+ "@dbx-tools/shared-model": "^0.9.131",
34
34
  "cheerio": "^1.2.0",
35
35
  "fuse.js": "^7.4.2"
36
36
  },
@@ -100,7 +100,7 @@
100
100
  "./package.json": "./package.json"
101
101
  }
102
102
  },
103
- "version": "0.9.129",
103
+ "version": "0.9.131",
104
104
  "types": "./lib/index.d.ts",
105
105
  "dbxToolsConfig": {
106
106
  "tags": [