@dbx-tools/appkit-web-search 0.9.70 → 0.9.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,8 +21,9 @@ has no equivalent for.
21
21
  then GPT - independently of the calling agent's chat model (which may not
22
22
  support web search). Loose names (`"gemini"`, `"gpt"`) fuzzy-match the live
23
23
  catalogue via [`@dbx-tools/model`](../model).
24
- - A built-in provider -> tool-spec map (OpenAI Responses API
25
- `{"type":"web_search"}`, Gemini Chat Completions `{"google_search":{}}`),
24
+ - A built-in provider -> request-fragment map (OpenAI Responses API
25
+ `{"tools":[{"type":"web_search"}]}`, Gemini Chat Completions
26
+ `{"google_search":{}}`),
26
27
  overridable per provider via the `WEB_SEARCH_TOOLS` setting.
27
28
  - A named URL policy (`allowlist` or `unrestricted`) over a glob allow-list
28
29
  built on [`@dbx-tools/path`](../path)'s `match` matcher: `web_search` silently
@@ -120,35 +121,27 @@ Mastra memory, and durable approvals on `@dbx-tools/appkit-mastra`.
120
121
  ## Choose The Web-Search Model
121
122
 
122
123
  The native web-search tool only runs on certain models, and it is provider-
123
- specific. This package resolves a web-search-capable model INDEPENDENTLY of the
124
- agent's chat model, so an agent on any model can still search:
125
-
126
- - Default preference: an appropriate **Gemini**, then **GPT** (`modelFallbacks`).
127
- - Pin one via `model` (or `WEB_SEARCH_MODEL`): an endpoint name
128
- (`"databricks-gemini-3-pro"`), a loose name (`"gemini"`, `"gpt"`), or a
129
- capability class - all fuzzy-matched against the live catalogue.
130
- - Per call, the model can pass a `model` argument to override.
131
- - If an explicitly requested model doesn't support web search (e.g. a Claude or
132
- Llama endpoint), the tool errors rather than silently searching with the wrong
133
- thing. When nothing is pinned, unsupported fallbacks are skipped.
134
-
135
- The endpoint id is read in this order, and where it came from changes what
136
- happens when it cannot run web search:
137
-
138
- | Order | Source | Unsupported endpoint |
139
- | ----- | ---------------------------------- | -------------------------- |
140
- | 1 | `model` in plugin config | Error |
141
- | 2 | `WEB_SEARCH_MODEL` | Error |
142
- | 3 | `DATABRICKS_SERVING_ENDPOINT_NAME` | Skipped, fallbacks apply |
143
- | 4 | `modelFallbacks` | Skipped, next one is tried |
124
+ specific. This package resolves deployed endpoints through
125
+ [`@dbx-tools/model`](../model) and applies this order:
126
+
127
+ 1. Highest-ranked web-search-capable **Gemini**.
128
+ 2. Without Gemini, a capable **GPT** matching the calling/requested model.
129
+ 3. Highest-ranked capable **GPT**.
130
+ 4. Any additional `modelFallbacks` searches in order.
131
+
132
+ When Databricks reports that Gemini web search is unavailable because
133
+ cross-region processing is disabled, the plugin suppresses Gemini for 24 hours
134
+ in that runtime and transparently retries the same tool call with the next GPT
135
+ candidate.
144
136
 
145
137
  `DATABRICKS_SERVING_ENDPOINT_NAME` is AppKit's standard name for a Model
146
138
  Serving binding, and it is the field the plugin declares in its manifest, so
147
139
  `app.yaml` / bundle wiring reaches this plugin the way it reaches any other.
148
- Because that binding is usually the app's chat endpoint - which need not
149
- support web search - it is treated as a preference rather than a pin.
150
- `WEB_SEARCH_MODEL` stays as the dedicated override for pointing web search at
151
- a different endpoint than the rest of the app.
140
+ The request's `model`, plugin `model`, and environment model values are used to
141
+ match the calling GPT after Gemini availability is checked.
142
+ When the tool runs through `@dbx-tools/appkit-mastra`, the host injects the
143
+ actual resolved chat model, overriding any different model argument generated
144
+ by the LLM.
152
145
 
153
146
  Model resolution runs against the LIVE workspace catalogue (via
154
147
  [`@dbx-tools/model`](../model)), so it only ever picks an endpoint that is
@@ -165,16 +158,16 @@ so `answer` is a lead-in over the top results). It is enabled by default; set
165
158
  `scrapeFallback: false` (or `WEB_SEARCH_SCRAPE_FALLBACK=0`) to require a native
166
159
  model and error when none is deployed.
167
160
 
168
- The right provider tool-spec is selected automatically from the resolved model:
169
- OpenAI GPT uses the Responses API `{"type":"web_search"}`; Gemini uses Chat
170
- Completions `{"google_search":{}}`. Override or extend that map per provider with
161
+ The right provider request fragment is selected automatically from the resolved model:
162
+ OpenAI GPT uses the Responses API `{"tools":[{"type":"web_search"}]}`; Gemini
163
+ uses the top-level Chat Completions field `{"google_search":{}}`. Override or extend that map per provider with
171
164
  the `webSearchTools` setting (env `WEB_SEARCH_TOOLS`, JSON) as the platform
172
165
  evolves:
173
166
 
174
167
  ```ts
175
168
  plugin.webSearch({
176
169
  model: "databricks-gemini-3-pro",
177
- webSearchTools: { gemini: { tool: { google_search: {} } } },
170
+ webSearchTools: { gemini: { request: { google_search: {} } } },
178
171
  });
179
172
  ```
180
173
 
@@ -306,12 +299,12 @@ built-in default.
306
299
  | --------------------- | ------------------------------------------------- | ----------------------- | --------------------------------------------------------------------------- |
307
300
  | `model` | `string` | resolved from fallbacks | Web-search endpoint: an endpoint name, a loose name, or a capability class. |
308
301
  | `modelFallbacks` | `string \| string[]` | Gemini, then GPT | Ordered candidates tried when `model` is unset. |
309
- | `webSearchTools` | `Record<string, unknown>` | built-in provider map | Provider -> tool-spec overrides, merged over the defaults. |
302
+ | `webSearchTools` | `Record<string, unknown>` | built-in provider map | Provider -> request-fragment overrides, merged over the defaults. |
310
303
  | `modelFuzzyMatch` | `boolean` | `true` | Fuzzy-match loose model names against the live catalogue. |
311
304
  | `modelFuzzyThreshold` | `number` | `0.4` | Fuse.js score below which a fuzzy match is accepted. |
312
305
  | `maxCitations` | `number` | `10` | Hard cap on citations returned from one search. |
313
306
  | `fetchMaxLength` | `number` | `50000` | Hard cap on `web_fetch` content length, in characters. |
314
- | `timeoutMs` | `number` | `30000` | Per-request network timeout. |
307
+ | `timeoutMs` | `number` | `60000` | Per-request network timeout. |
315
308
  | `scrapeFallback` | `boolean` | `true` | Scrape DuckDuckGo when no web-search-capable model is deployed. |
316
309
  | `urlPolicy` | `"unrestricted" \| "allowlist"` | follows `allowedUrls` | Which URLs the tools may reach. |
317
310
  | `allowedUrls` | `string \| string[]` | none | Allow-list globs or bare hosts. |
@@ -341,6 +334,10 @@ with jittered backoff, timed out, and traced. The cache is namespaced per user,
341
334
  so an on-behalf-of result never crosses identities. See `defaults.ts` for the
342
335
  TTLs and retry budgets and why each was chosen.
343
336
 
337
+ OpenAI Responses web searches stream native search, page-read, and completion
338
+ status through the Mastra tool writer. The common tool-session pill updates
339
+ while the search runs; the completed Responses payload remains the tool result.
340
+
344
341
  Requirements: the native web-search tool runs on pay-per-token GPT / Gemini
345
342
  serving endpoints with cross-region processing enabled; it is unavailable on
346
343
  provisioned throughput, for external models, or under HIPAA/BAA compliance. See
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-web-search";
6
- export const PACKAGE_VERSION = "0.9.70";
6
+ export const PACKAGE_VERSION = "0.9.72";
7
7
  export * as allowlist from "./src/allowlist.ts";
8
8
  export * as config from "./src/config.ts";
9
9
  export * as defaults from "./src/defaults.ts";
@@ -22,10 +22,10 @@ export type { ApprovalGate, ApprovalPolicy, UrlPolicyMode, ModelSource, WebSearc
22
22
  export { SEARCH_CACHE_TTL_SECONDS, FETCH_CACHE_TTL_SECONDS, SERVING_RETRY_ATTEMPTS, WEB_RETRY_ATTEMPTS, webSearchExecuteDefaults, webFetchExecuteDefaults, scrapeSearchExecuteDefaults } from "./src/defaults.ts";
23
23
  export type { WebSearchExecuteConfig, WebSearchExecutionSettings } from "./src/defaults.ts";
24
24
  export { WebSearchPlugin, webSearch } from "./src/plugin.ts";
25
- export { WEB_SEARCH_PROVIDERS } from "./src/provider.ts";
25
+ export { WebSearchProviderSpecSchema, WEB_SEARCH_PROVIDERS } from "./src/provider.ts";
26
26
  export type { WebSearchProvider, WebSearchProviderSpec } from "./src/provider.ts";
27
27
  export type { WebSearchExecutor, WebSearchRuntime, WebSearchRuntimeInput } from "./src/runtime.ts";
28
- export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.ts";
29
- export type { WebSearchRequest, WebSearchCitation, WebSearchResult, WebFetchRequest, WebFetchResult } from "./src/schema.ts";
30
- export type { WebSearchContext } from "./src/search.ts";
28
+ export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchToolRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.ts";
29
+ export type { WebSearchRequest, WebSearchToolRequest, WebSearchCitation, WebSearchResult, WebFetchRequest, WebFetchResult } from "./src/schema.ts";
30
+ export type { WebSearchContext, WebSearchModelSelectionOptions } from "./src/search.ts";
31
31
  export type { WebSearchToolOptions } from "./src/tool.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-web-search";
2
- export declare const PACKAGE_VERSION = "0.9.70";
2
+ export declare const PACKAGE_VERSION = "0.9.72";
3
3
  export * as allowlist from "./src/allowlist.ts";
4
4
  export * as config from "./src/config.ts";
5
5
  export * as defaults from "./src/defaults.ts";
@@ -18,10 +18,10 @@ export type { ApprovalGate, ApprovalPolicy, UrlPolicyMode, ModelSource, WebSearc
18
18
  export { SEARCH_CACHE_TTL_SECONDS, FETCH_CACHE_TTL_SECONDS, SERVING_RETRY_ATTEMPTS, WEB_RETRY_ATTEMPTS, webSearchExecuteDefaults, webFetchExecuteDefaults, scrapeSearchExecuteDefaults } from "./src/defaults.ts";
19
19
  export type { WebSearchExecuteConfig, WebSearchExecutionSettings } from "./src/defaults.ts";
20
20
  export { WebSearchPlugin, webSearch } from "./src/plugin.ts";
21
- export { WEB_SEARCH_PROVIDERS } from "./src/provider.ts";
21
+ export { WebSearchProviderSpecSchema, WEB_SEARCH_PROVIDERS } from "./src/provider.ts";
22
22
  export type { WebSearchProvider, WebSearchProviderSpec } from "./src/provider.ts";
23
23
  export type { WebSearchExecutor, WebSearchRuntime, WebSearchRuntimeInput } from "./src/runtime.ts";
24
- export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.ts";
25
- export type { WebSearchRequest, WebSearchCitation, WebSearchResult, WebFetchRequest, WebFetchResult } from "./src/schema.ts";
26
- export type { WebSearchContext } from "./src/search.ts";
24
+ export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchToolRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.ts";
25
+ export type { WebSearchRequest, WebSearchToolRequest, WebSearchCitation, WebSearchResult, WebFetchRequest, WebFetchResult } from "./src/schema.ts";
26
+ export type { WebSearchContext, WebSearchModelSelectionOptions } from "./src/search.ts";
27
27
  export type { WebSearchToolOptions } from "./src/tool.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-web-search";
5
- export const PACKAGE_VERSION = "0.9.70";
5
+ export const PACKAGE_VERSION = "0.9.72";
6
6
  export * as allowlist from "./src/allowlist.js";
7
7
  export * as config from "./src/config.js";
8
8
  export * as defaults from "./src/defaults.js";
@@ -18,6 +18,6 @@ export * as tool from "./src/tool.js";
18
18
  export { MODEL_ENV, SERVING_ENDPOINT_ENV, DEFAULT_MODEL_FALLBACKS, DEFAULT_MAX_CITATIONS, DEFAULT_FETCH_MAX_LENGTH, DEFAULT_TIMEOUT_MS, WEB_SEARCH_CONFIG_SCHEMA } from "./src/config.js";
19
19
  export { SEARCH_CACHE_TTL_SECONDS, FETCH_CACHE_TTL_SECONDS, SERVING_RETRY_ATTEMPTS, WEB_RETRY_ATTEMPTS, webSearchExecuteDefaults, webFetchExecuteDefaults, scrapeSearchExecuteDefaults } from "./src/defaults.js";
20
20
  export { WebSearchPlugin, webSearch } from "./src/plugin.js";
21
- export { WEB_SEARCH_PROVIDERS } from "./src/provider.js";
22
- export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.js";
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUwsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbE4sT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS43MFwiO1xuZXhwb3J0ICogYXMgYWxsb3dsaXN0IGZyb20gXCIuL3NyYy9hbGxvd2xpc3QudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGZldGNoIGZyb20gXCIuL3NyYy9mZXRjaC50c1wiO1xuZXhwb3J0ICogYXMgaHRtbFRleHQgZnJvbSBcIi4vc3JjL2h0bWwtdGV4dC50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHByb3ZpZGVyIGZyb20gXCIuL3NyYy9wcm92aWRlci50c1wiO1xuZXhwb3J0ICogYXMgcnVudGltZSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0ICogYXMgc2NoZW1hIGZyb20gXCIuL3NyYy9zY2hlbWEudHNcIjtcbmV4cG9ydCAqIGFzIHNjcmFwZSBmcm9tIFwiLi9zcmMvc2NyYXBlLnRzXCI7XG5leHBvcnQgKiBhcyBzZWFyY2ggZnJvbSBcIi4vc3JjL3NlYXJjaC50c1wiO1xuZXhwb3J0ICogYXMgdG9vbCBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBVcmxBbGxvd0xpc3QgfSBmcm9tIFwiLi9zcmMvYWxsb3dsaXN0LnRzXCI7XG5leHBvcnQgeyBNT0RFTF9FTlYsIFNFUlZJTkdfRU5EUE9JTlRfRU5WLCBERUZBVUxUX01PREVMX0ZBTExCQUNLUywgREVGQVVMVF9NQVhfQ0lUQVRJT05TLCBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEgsIERFRkFVTFRfVElNRU9VVF9NUywgV0VCX1NFQVJDSF9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHByb3ZhbEdhdGUsIEFwcHJvdmFsUG9saWN5LCBVcmxQb2xpY3lNb2RlLCBNb2RlbFNvdXJjZSwgV2ViU2VhcmNoUGx1Z2luQ29uZmlnLCBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IFNFQVJDSF9DQUNIRV9UVExfU0VDT05EUywgRkVUQ0hfQ0FDSEVfVFRMX1NFQ09ORFMsIFNFUlZJTkdfUkVUUllfQVRURU1QVFMsIFdFQl9SRVRSWV9BVFRFTVBUUywgd2ViU2VhcmNoRXhlY3V0ZURlZmF1bHRzLCB3ZWJGZXRjaEV4ZWN1dGVEZWZhdWx0cywgc2NyYXBlU2VhcmNoRXhlY3V0ZURlZmF1bHRzIH0gZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaEV4ZWN1dGVDb25maWcsIFdlYlNlYXJjaEV4ZWN1dGlvblNldHRpbmdzIH0gZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgeyBXZWJTZWFyY2hQbHVnaW4sIHdlYlNlYXJjaCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB7IFdFQl9TRUFSQ0hfUFJPVklERVJTIH0gZnJvbSBcIi4vc3JjL3Byb3ZpZGVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaFByb3ZpZGVyLCBXZWJTZWFyY2hQcm92aWRlclNwZWMgfSBmcm9tIFwiLi9zcmMvcHJvdmlkZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoRXhlY3V0b3IsIFdlYlNlYXJjaFJ1bnRpbWUsIFdlYlNlYXJjaFJ1bnRpbWVJbnB1dCB9IGZyb20gXCIuL3NyYy9ydW50aW1lLnRzXCI7XG5leHBvcnQgeyBXRUJfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sIFdFQl9GRVRDSF9UT09MX0RFU0NSSVBUSU9OLCB3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hLCB3ZWJTZWFyY2hDaXRhdGlvblNjaGVtYSwgd2ViU2VhcmNoUmVzdWx0U2NoZW1hLCB3ZWJGZXRjaFJlcXVlc3RTY2hlbWEsIHdlYkZldGNoUmVzdWx0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0IHR5cGUgeyBXZWJTZWFyY2hSZXF1ZXN0LCBXZWJTZWFyY2hDaXRhdGlvbiwgV2ViU2VhcmNoUmVzdWx0LCBXZWJGZXRjaFJlcXVlc3QsIFdlYkZldGNoUmVzdWx0IH0gZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0IHR5cGUgeyBXZWJTZWFyY2hDb250ZXh0IH0gZnJvbSBcIi4vc3JjL3NlYXJjaC50c1wiO1xuZXhwb3J0IHR5cGUgeyBXZWJTZWFyY2hUb29sT3B0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG4iXX0=
21
+ export { WebSearchProviderSpecSchema, WEB_SEARCH_PROVIDERS } from "./src/provider.js";
22
+ export { WEB_SEARCH_TOOL_DESCRIPTION, WEB_FETCH_TOOL_DESCRIPTION, webSearchRequestSchema, webSearchToolRequestSchema, webSearchCitationSchema, webSearchResultSchema, webFetchRequestSchema, webFetchResultSchema } from "./src/schema.js";
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUwsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbE4sT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd0RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS43MlwiO1xuZXhwb3J0ICogYXMgYWxsb3dsaXN0IGZyb20gXCIuL3NyYy9hbGxvd2xpc3QudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGZldGNoIGZyb20gXCIuL3NyYy9mZXRjaC50c1wiO1xuZXhwb3J0ICogYXMgaHRtbFRleHQgZnJvbSBcIi4vc3JjL2h0bWwtdGV4dC50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHByb3ZpZGVyIGZyb20gXCIuL3NyYy9wcm92aWRlci50c1wiO1xuZXhwb3J0ICogYXMgcnVudGltZSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0ICogYXMgc2NoZW1hIGZyb20gXCIuL3NyYy9zY2hlbWEudHNcIjtcbmV4cG9ydCAqIGFzIHNjcmFwZSBmcm9tIFwiLi9zcmMvc2NyYXBlLnRzXCI7XG5leHBvcnQgKiBhcyBzZWFyY2ggZnJvbSBcIi4vc3JjL3NlYXJjaC50c1wiO1xuZXhwb3J0ICogYXMgdG9vbCBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBVcmxBbGxvd0xpc3QgfSBmcm9tIFwiLi9zcmMvYWxsb3dsaXN0LnRzXCI7XG5leHBvcnQgeyBNT0RFTF9FTlYsIFNFUlZJTkdfRU5EUE9JTlRfRU5WLCBERUZBVUxUX01PREVMX0ZBTExCQUNLUywgREVGQVVMVF9NQVhfQ0lUQVRJT05TLCBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEgsIERFRkFVTFRfVElNRU9VVF9NUywgV0VCX1NFQVJDSF9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHByb3ZhbEdhdGUsIEFwcHJvdmFsUG9saWN5LCBVcmxQb2xpY3lNb2RlLCBNb2RlbFNvdXJjZSwgV2ViU2VhcmNoUGx1Z2luQ29uZmlnLCBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IFNFQVJDSF9DQUNIRV9UVExfU0VDT05EUywgRkVUQ0hfQ0FDSEVfVFRMX1NFQ09ORFMsIFNFUlZJTkdfUkVUUllfQVRURU1QVFMsIFdFQl9SRVRSWV9BVFRFTVBUUywgd2ViU2VhcmNoRXhlY3V0ZURlZmF1bHRzLCB3ZWJGZXRjaEV4ZWN1dGVEZWZhdWx0cywgc2NyYXBlU2VhcmNoRXhlY3V0ZURlZmF1bHRzIH0gZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdlYlNlYXJjaEV4ZWN1dGVDb25maWcsIFdlYlNlYXJjaEV4ZWN1dGlvblNldHRpbmdzIH0gZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgeyBXZWJTZWFyY2hQbHVnaW4sIHdlYlNlYXJjaCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB7IFdlYlNlYXJjaFByb3ZpZGVyU3BlY1NjaGVtYSwgV0VCX1NFQVJDSF9QUk9WSURFUlMgfSBmcm9tIFwiLi9zcmMvcHJvdmlkZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoUHJvdmlkZXIsIFdlYlNlYXJjaFByb3ZpZGVyU3BlYyB9IGZyb20gXCIuL3NyYy9wcm92aWRlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBXZWJTZWFyY2hFeGVjdXRvciwgV2ViU2VhcmNoUnVudGltZSwgV2ViU2VhcmNoUnVudGltZUlucHV0IH0gZnJvbSBcIi4vc3JjL3J1bnRpbWUudHNcIjtcbmV4cG9ydCB7IFdFQl9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiwgV0VCX0ZFVENIX1RPT0xfREVTQ1JJUFRJT04sIHdlYlNlYXJjaFJlcXVlc3RTY2hlbWEsIHdlYlNlYXJjaFRvb2xSZXF1ZXN0U2NoZW1hLCB3ZWJTZWFyY2hDaXRhdGlvblNjaGVtYSwgd2ViU2VhcmNoUmVzdWx0U2NoZW1hLCB3ZWJGZXRjaFJlcXVlc3RTY2hlbWEsIHdlYkZldGNoUmVzdWx0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0IHR5cGUgeyBXZWJTZWFyY2hSZXF1ZXN0LCBXZWJTZWFyY2hUb29sUmVxdWVzdCwgV2ViU2VhcmNoQ2l0YXRpb24sIFdlYlNlYXJjaFJlc3VsdCwgV2ViRmV0Y2hSZXF1ZXN0LCBXZWJGZXRjaFJlc3VsdCB9IGZyb20gXCIuL3NyYy9zY2hlbWEudHNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViU2VhcmNoQ29udGV4dCwgV2ViU2VhcmNoTW9kZWxTZWxlY3Rpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL3NlYXJjaC50c1wiO1xuZXhwb3J0IHR5cGUgeyBXZWJTZWFyY2hUb29sT3B0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG4iXX0=
@@ -82,11 +82,9 @@ export declare const SERVING_ENDPOINT_ENV = "DATABRICKS_SERVING_ENDPOINT_NAME";
82
82
  /** Where the pinned web-search endpoint id came from, or `"none"` when unpinned. */
83
83
  export type ModelSource = "config" | typeof MODEL_ENV | typeof SERVING_ENDPOINT_ENV | "none";
84
84
  /**
85
- * Default web-search model preference, tried in order when no model is
86
- * pinned. Gemini first, then GPT - both support the native web-search tool;
87
- * a workspace typically has at least one. Each is fuzzy-matched against the
88
- * live catalogue, so a close variant (e.g. `databricks-gemini-3-1-pro`) is
89
- * picked when the exact id isn't present.
85
+ * Default web-search family preference, tried in order when no model is
86
+ * pinned. Each query selects the highest-ranked deployed model in that family
87
+ * after model-owned web-search capability filtering.
90
88
  */
91
89
  export declare const DEFAULT_MODEL_FALLBACKS: readonly string[];
92
90
  /** Default cap on the number of citations returned from a single search. */
@@ -94,16 +92,13 @@ export declare const DEFAULT_MAX_CITATIONS = 10;
94
92
  /** Default cap on characters returned from a single `web_fetch`. */
95
93
  export declare const DEFAULT_FETCH_MAX_LENGTH = 50000;
96
94
  /** Default per-request network timeout (ms) for search + fetch. */
97
- export declare const DEFAULT_TIMEOUT_MS = 30000;
95
+ export declare const DEFAULT_TIMEOUT_MS = 60000;
98
96
  /** AppKit config accepted by the web-search plugin. */
99
97
  export interface WebSearchPluginConfig extends BasePluginConfig {
100
98
  /**
101
- * The web-search model to use by default: a Databricks serving endpoint
102
- * name (`"databricks-gemini-3-pro"`), a loose name (`"gemini"`, `"gpt"`),
103
- * or a capability class. Fuzzy-matched against the live catalogue. Falls
104
- * back to `WEB_SEARCH_MODEL`, then `DATABRICKS_SERVING_ENDPOINT_NAME`, then
105
- * the {@link modelFallbacks} order. Chosen independently of the calling
106
- * agent's chat model.
99
+ * GPT preference used when no capable Gemini is available. Accepts a
100
+ * Databricks serving endpoint name or loose family search and falls back to
101
+ * `WEB_SEARCH_MODEL`, then `DATABRICKS_SERVING_ENDPOINT_NAME`.
107
102
  */
108
103
  model?: string;
109
104
  /**
@@ -114,9 +109,9 @@ export interface WebSearchPluginConfig extends BasePluginConfig {
114
109
  */
115
110
  modelFallbacks?: string | string[];
116
111
  /**
117
- * Provider -> tool-spec override map, merged over the built-in
112
+ * Provider -> request-fragment override map, merged over the built-in
118
113
  * {@link WEB_SEARCH_PROVIDERS} defaults. Keyed by provider family
119
- * (`"openai"`, `"gemini"`); each value may override the `tool` entry
114
+ * (`"openai"`, `"gemini"`); each value may override the `request` fragment
120
115
  * and/or the `api` surface. Use to change the tool shape as the platform
121
116
  * evolves without a code change. Falls back to `WEB_SEARCH_TOOLS` parsed as
122
117
  * JSON. This is the `WEB_SEARCH_TOOLS` setting.
@@ -187,7 +182,7 @@ export interface ResolvedWebSearchConfig {
187
182
  modelSource: ModelSource;
188
183
  /** Ordered fallback model candidates (Gemini, then GPT, then a floor). */
189
184
  modelFallbacks: readonly string[];
190
- /** Provider -> tool-spec override map, merged over the built-in defaults. */
185
+ /** Provider -> request-fragment override map, merged over the built-in defaults. */
191
186
  webSearchTools: Record<string, unknown>;
192
187
  /** Whether to fuzzy-match loose model names. */
193
188
  fuzzy: boolean;
package/lib/src/config.js CHANGED
@@ -53,24 +53,17 @@ export const MODEL_ENV = "WEB_SEARCH_MODEL";
53
53
  /** AppKit's standard environment name for a Model Serving endpoint binding. */
54
54
  export const SERVING_ENDPOINT_ENV = "DATABRICKS_SERVING_ENDPOINT_NAME";
55
55
  /**
56
- * Default web-search model preference, tried in order when no model is
57
- * pinned. Gemini first, then GPT - both support the native web-search tool;
58
- * a workspace typically has at least one. Each is fuzzy-matched against the
59
- * live catalogue, so a close variant (e.g. `databricks-gemini-3-1-pro`) is
60
- * picked when the exact id isn't present.
56
+ * Default web-search family preference, tried in order when no model is
57
+ * pinned. Each query selects the highest-ranked deployed model in that family
58
+ * after model-owned web-search capability filtering.
61
59
  */
62
- export const DEFAULT_MODEL_FALLBACKS = [
63
- "databricks-gemini-3-pro",
64
- "databricks-gemini-2-5-pro",
65
- "databricks-gpt-5",
66
- "databricks-gpt-5-mini",
67
- ];
60
+ export const DEFAULT_MODEL_FALLBACKS = ["gemini", "gpt"];
68
61
  /** Default cap on the number of citations returned from a single search. */
69
62
  export const DEFAULT_MAX_CITATIONS = 10;
70
63
  /** Default cap on characters returned from a single `web_fetch`. */
71
64
  export const DEFAULT_FETCH_MAX_LENGTH = 50_000;
72
65
  /** Default per-request network timeout (ms) for search + fetch. */
73
- export const DEFAULT_TIMEOUT_MS = 30_000;
66
+ export const DEFAULT_TIMEOUT_MS = 60_000;
74
67
  /** JSON Schema published on the manifest's `config.schema`. */
75
68
  export const WEB_SEARCH_CONFIG_SCHEMA = {
76
69
  type: "object",
@@ -86,7 +79,7 @@ export const WEB_SEARCH_CONFIG_SCHEMA = {
86
79
  },
87
80
  webSearchTools: {
88
81
  type: "object",
89
- description: 'Provider -> tool-spec override map merged over the built-in defaults (openai -> {"type":"web_search"}, gemini -> {"google_search":{}}). Env: WEB_SEARCH_TOOLS (JSON).',
82
+ description: 'Provider -> request-fragment override map merged over the built-in defaults (openai -> {"tools":[{"type":"web_search"}]}, gemini -> {"google_search":{}}). Env: WEB_SEARCH_TOOLS (JSON).',
90
83
  },
91
84
  modelFuzzyMatch: {
92
85
  type: "boolean",
@@ -151,7 +144,7 @@ function parseToolsEnv() {
151
144
  return {};
152
145
  const parsed = json.parseRecord(raw);
153
146
  if (!parsed) {
154
- throw new ConfigurationError("WEB_SEARCH_TOOLS must be a JSON object mapping a provider family to its tool spec", { context: { envVar: "WEB_SEARCH_TOOLS" } });
147
+ throw new ConfigurationError("WEB_SEARCH_TOOLS must be a JSON object mapping a provider family to its request fragment", { context: { envVar: "WEB_SEARCH_TOOLS" } });
155
148
  }
156
149
  return parsed;
157
150
  }
@@ -258,4 +251,4 @@ export function approvalMatches(gate, urls) {
258
251
  const list = toUrlAllowList(policy.patterns);
259
252
  return urls.some((url) => list.allows(url));
260
253
  }
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBa0IsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCckYseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztBQUU1QywrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0NBQWtDLENBQUM7QUFLdkU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXNCO0lBQ3hELHlCQUF5QjtJQUN6QiwyQkFBMkI7SUFDM0Isa0JBQWtCO0lBQ2xCLHVCQUF1QjtDQUN4QixDQUFDO0FBRUYsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUV4QyxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDO0FBRS9DLG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFrSHpDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBZ0I7SUFDbkQsSUFBSSxFQUFFLFFBQVE7SUFDZCxVQUFVLEVBQUU7UUFDVixLQUFLLEVB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LEVBQzVCLFdBQVcsQ0FBQyxRQUFRLENBQ3JCLElBQUksSUFBSTtRQUNYLFNBQVM7UUFDVCxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0tBQzVDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsSUFBbUMsRUFDbkMsSUFBdUI7SUFFdkIsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHdlYi1zZWFyY2ggcGx1Z2luOiB0aGUgdHlwZWRcbiAqIHtAbGluayBXZWJTZWFyY2hQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0IGNvbmZpZyksIHRoZVxuICogSlNPTiBTY2hlbWEgdGhlIG1hbmlmZXN0IHB1Ymxpc2hlcyBmb3IgaXQsIGFuZCB7QGxpbmsgcmVzb2x2ZVdlYlNlYXJjaENvbmZpZ31cbiAqIHdoaWNoIGxheWVycyB0aGF0IGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRXZWJTZWFyY2hDb25maWd9IHRoZSBydW50aW1lICsgdG9vbHMgcmVhZC5cbiAqXG4gKiBgd2ViX3NlYXJjaGAgcnVucyBvbiB0aGUgRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2xcbiAqIChzZWUgYHByb3ZpZGVyLnRzYCAvIGBzZWFyY2gudHNgKSwgc28gdGhlIGtleSBrbm9iIGlzIHdoaWNoIHdlYi1zZWFyY2gtXG4gKiBjYXBhYmxlIG1vZGVsIHRvIHVzZS4gSXQgcmVzb2x2ZXMgaW5kZXBlbmRlbnRseSBvZiB0aGUgY2FsbGluZyBhZ2VudCdzIGNoYXRcbiAqIG1vZGVsOiBgbW9kZWxgIChhIG5hbWUsIGxvb3NlIG5hbWUsIG9yIGNhcGFiaWxpdHkgY2xhc3MpIGlzIGZ1enp5LW1hdGNoZWRcbiAqIGFnYWluc3QgdGhlIHdvcmtzcGFjZSBjYXRhbG9ndWUsIGFuZCB3aGVuIG5vdGhpbmcgaXMgcGlubmVkIHRoZVxuICoge0BsaW5rIFdlYlNlYXJjaFBsdWdpbkNvbmZpZy5tb2RlbEZhbGxiYWNrc30gb3JkZXIgKEdlbWluaSwgdGhlbiBHUFQsIHRoZW4gYVxuICogcmVwbyBmbG9vcikgcGlja3MgdGhlIGZpcnN0IHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCB0aGF0IGV4aXN0cy5cbiAqXG4gKiBXaGljaCBlbmRwb2ludCBpZCBpcyB1c2VkIGZvbGxvd3MgdGhlIHN0YW5kYXJkIHByZWNlZGVuY2UgLSBleHBsaWNpdCBwbHVnaW5cbiAqIGNvbmZpZywgdGhlbiBlbnZpcm9ubWVudCwgdGhlbiBhIGRlZmF1bHQgLSB3aXRoIHR3byBlbnZpcm9ubWVudCBzb3VyY2VzOlxuICpcbiAqICAgMS4gYG1vZGVsYCBpbiBwbHVnaW4gY29uZmlnO1xuICogICAyLiBgV0VCX1NFQVJDSF9NT0RFTGAsIHRoZSBkZWRpY2F0ZWQgb3ZlcnJpZGUsIHNvIGEgZGVwbG95bWVudCBjYW4gcG9pbnRcbiAqICAgICAgd2ViIHNlYXJjaCBhdCBhIGRpZmZlcmVudCBlbmRwb2ludCB0aGFuIHRoZSBhZ2VudCdzIGNoYXQgbW9kZWw7XG4gKiAgIDMuIGBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRWAsIEFwcEtpdCdzIHN0YW5kYXJkIG5hbWUgZm9yIGFcbiAqICAgICAgTW9kZWwgU2VydmluZyBiaW5kaW5nLCBob25vcmVkIHNvIHRoZSByZXNvdXJjZSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqICAgICAgd2lyZXMgdGhpcyBwbHVnaW4gdXAgbGlrZSBhbnkgb3RoZXIuIEJlY2F1c2UgdGhhdCBiaW5kaW5nIGlzIHNoYXJlZFxuICogICAgICB3aXRoIHdoYXRldmVyIGVsc2UgdGhlIGFwcCBzZXJ2ZXMsIGl0IGlzIHRyZWF0ZWQgYXMgYSBwcmVmZXJlbmNlOiBhblxuICogICAgICBlbmRwb2ludCB0aGF0IGNhbm5vdCBydW4gdGhlIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wgaXMgc2tpcHBlZCBpblxuICogICAgICBmYXZvciBvZiB7QGxpbmsgV2ViU2VhcmNoUGx1Z2luQ29uZmlnLm1vZGVsRmFsbGJhY2tzfSByYXRoZXIgdGhhblxuICogICAgICBmYWlsaW5nIHRoZSBjYWxsLiBBIHBpbiBmcm9tICgxKSBvciAoMikgaXMgZXhwbGljaXQgYW5kIERPRVMgZmFpbDtcbiAqICAgNC4gb3RoZXJ3aXNlIHRoZSBmYWxsYmFjayBvcmRlciwgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgbGl2ZSBjYXRhbG9ndWUuXG4gKlxuICogV2hpY2ggbW9kZWwgd2lucyBpcyBkZWNpZGVkIGxhemlseSwgYXQgY2FsbCB0aW1lLCBhZ2FpbnN0IHRoZSBsaXZlXG4gKiBjYXRhbG9ndWUuIFJlc29sdXRpb24gaGVyZSBpcyBlYWdlciBhYm91dCBldmVyeXRoaW5nIGVsc2UgYW5kIGZhaWxzIGxvdWRseVxuICogb24gYSBjb250cmFkaWN0aW9uOiBhbiB1bnBhcnNlYWJsZSBgV0VCX1NFQVJDSF9UT09MU2AsIGFuIHVua25vd25cbiAqIHtAbGluayBVcmxQb2xpY3lNb2RlfSwgb3IgYSBVUkwgcG9saWN5IHRoYXQgZGlzYWdyZWVzIHdpdGggdGhlIGFsbG93LWxpc3QgaXRcbiAqIHdhcyBnaXZlbi5cbiAqXG4gKiBFbnYgZmFsbGJhY2tzOiBgV0VCX1NFQVJDSF9NT0RFTGAsIGBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRWAsXG4gKiBgV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1NgLCBgV0VCX1NFQVJDSF9UT09MU2AgKEpTT04pLFxuICogYFdFQl9TRUFSQ0hfVVJMX1BPTElDWWAsIGBXRUJfU0VBUkNIX0FMTE9XRURfVVJMU2AsXG4gKiBgV0VCX1NFQVJDSF9NQVhfQ0lUQVRJT05TYCwgYFdFQl9TRUFSQ0hfRkVUQ0hfTUFYX0xFTkdUSGAsXG4gKiBgV0VCX1NFQVJDSF9USU1FT1VUX01TYCwgYFdFQl9TRUFSQ0hfU0NSQVBFX0ZBTExCQUNLYCwgYFdFQl9TRUFSQ0hfRlVaWllgLFxuICogYFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCB0eXBlIEJhc2VQbHVnaW5Db25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBjb25maWdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IG1vZGVsQ2F0YWxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5pbXBvcnQgeyBqc29uLCBvYmplY3QsIHR5cGUgT25lT3JNYW55LCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE3IH0gZnJvbSBcImpzb24tc2NoZW1hXCI7XG5pbXBvcnQgeyBwYXJzZUFsbG93ZWRVcmxzLCB0b1VybEFsbG93TGlzdCwgdHlwZSBVcmxBbGxvd0xpc3QgfSBmcm9tIFwiLi9hbGxvd2xpc3QudHNcIjtcblxuLyoqXG4gKiBBIFVSTC1wYXR0ZXJuIGdhdGUgZm9yIHBlci10b29sIGFwcHJvdmFsLiBgdHJ1ZWAgZ2F0ZXMgZXZlcnkgY2FsbDsgYVxuICogcGF0dGVybiAob3IgbGlzdCBvZiBwYXR0ZXJucywgaW4gdGhlIHtAbGluayBPbmVPck1hbnl9IHNoYXBlIHVzZWQgYWNyb3NzXG4gKiB0aGUgcmVwbykgZ2F0ZXMgb25seSBjYWxscyB3aG9zZSBVUkwgbWF0Y2hlcy4gUGF0dGVybnMgdXNlIHRoZSBzYW1lIGdsb2JcbiAqIHN5bnRheCBhcyB0aGUgYWxsb3ctbGlzdCAoc2VlIGBhbGxvd2xpc3QudHNgKS4gT21pdCAvIGBmYWxzZWAgZm9yIG5vXG4gKiBhcHByb3ZhbC4gTm9ybWFsaXplZCB0byBhbiB7QGxpbmsgQXBwcm92YWxQb2xpY3l9IGJlZm9yZSB1c2UuXG4gKi9cbmV4cG9ydCB0eXBlIEFwcHJvdmFsR2F0ZSA9IGJvb2xlYW4gfCBPbmVPck1hbnk8c3RyaW5nPiB8IHN0cmluZztcblxuLyoqXG4gKiBUaGUgbm9ybWFsaXplZCBmb3JtIG9mIGFuIHtAbGluayBBcHByb3ZhbEdhdGV9OiB3aGljaCBjYWxscyBwYXVzZSBmb3IgYVxuICogaHVtYW4uIGBcIm5vbmVcImAgcnVucyBldmVyeSBjYWxsIHN0cmFpZ2h0IHRocm91Z2gsIGBcImFsd2F5c1wiYCBnYXRlcyBhbGwgb2ZcbiAqIHRoZW0sIGFuZCBgXCJ1cmxzXCJgIGdhdGVzIG9ubHkgY2FsbHMgd2hvc2UgVVJMIG1hdGNoZXMgb25lIG9mIGBwYXR0ZXJuc2AuXG4gKi9cbmV4cG9ydCB0eXBlIEFwcHJvdmFsUG9saWN5ID1cbiAgfCB7IHJlYWRvbmx5IG1vZGU6IFwibm9uZVwiIH1cbiAgfCB7IHJlYWRvbmx5IG1vZGU6IFwiYWx3YXlzXCIgfVxuICB8IHsgcmVhZG9ubHkgbW9kZTogXCJ1cmxzXCI7IHJlYWRvbmx5IHBhdHRlcm5zOiByZWFkb25seSBzdHJpbmdbXSB9O1xuXG4vKipcbiAqIFdoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaC4gYFwiYWxsb3dsaXN0XCJgIHBlcm1pdHMgb25seSB0aGUgY29uZmlndXJlZFxuICogZW50cmllczsgYFwidW5yZXN0cmljdGVkXCJgIG5hbWVzIHRoZSBwZXJtaXNzaXZlIG1vZGUgZXhwbGljaXRseSwgc28gYW5cbiAqIHVucmVzdHJpY3RlZCBkZXBsb3ltZW50IGlzIGEgc3RhdGVkIGNob2ljZSB2aXNpYmxlIGluIHRoZSBib290IGxvZyByYXRoZXJcbiAqIHRoYW4gYW4gZW1wdHkgbGlzdCBub2JvZHkgbm90aWNlZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXJsUG9saWN5TW9kZSA9IFwidW5yZXN0cmljdGVkXCIgfCBcImFsbG93bGlzdFwiO1xuXG4vKiogRGVkaWNhdGVkIG92ZXJyaWRlIGZvciB0aGUgd2ViLXNlYXJjaCBlbmRwb2ludCBpZC4gKi9cbmV4cG9ydCBjb25zdCBNT0RFTF9FTlYgPSBcIldFQl9TRUFSQ0hfTU9ERUxcIjtcblxuLyoqIEFwcEtpdCdzIHN0YW5kYXJkIGVudmlyb25tZW50IG5hbWUgZm9yIGEgTW9kZWwgU2VydmluZyBlbmRwb2ludCBiaW5kaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZJTkdfRU5EUE9JTlRfRU5WID0gXCJEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRVwiO1xuXG4vKiogV2hlcmUgdGhlIHBpbm5lZCB3ZWItc2VhcmNoIGVuZHBvaW50IGlkIGNhbWUgZnJvbSwgb3IgYFwibm9uZVwiYCB3aGVuIHVucGlubmVkLiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxTb3VyY2UgPSBcImNvbmZpZ1wiIHwgdHlwZW9mIE1PREVMX0VOViB8IHR5cGVvZiBTRVJWSU5HX0VORFBPSU5UX0VOViB8IFwibm9uZVwiO1xuXG4vKipcbiAqIERlZmF1bHQgd2ViLXNlYXJjaCBtb2RlbCBwcmVmZXJlbmNlLCB0cmllZCBpbiBvcmRlciB3aGVuIG5vIG1vZGVsIGlzXG4gKiBwaW5uZWQuIEdlbWluaSBmaXJzdCwgdGhlbiBHUFQgLSBib3RoIHN1cHBvcnQgdGhlIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2w7XG4gKiBhIHdvcmtzcGFjZSB0eXBpY2FsbHkgaGFzIGF0IGxlYXN0IG9uZS4gRWFjaCBpcyBmdXp6eS1tYXRjaGVkIGFnYWluc3QgdGhlXG4gKiBsaXZlIGNhdGFsb2d1ZSwgc28gYSBjbG9zZSB2YXJpYW50IChlLmcuIGBkYXRhYnJpY2tzLWdlbWluaS0zLTEtcHJvYCkgaXNcbiAqIHBpY2tlZCB3aGVuIHRoZSBleGFjdCBpZCBpc24ndCBwcmVzZW50LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NT0RFTF9GQUxMQkFDS1M6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICBcImRhdGFicmlja3MtZ2VtaW5pLTMtcHJvXCIsXG4gIFwiZGF0YWJyaWNrcy1nZW1pbmktMi01LXByb1wiLFxuICBcImRhdGFicmlja3MtZ3B0LTVcIixcbiAgXCJkYXRhYnJpY2tzLWdwdC01LW1pbmlcIixcbl07XG5cbi8qKiBEZWZhdWx0IGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyByZXR1cm5lZCBmcm9tIGEgc2luZ2xlIHNlYXJjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9DSVRBVElPTlMgPSAxMDtcblxuLyoqIERlZmF1bHQgY2FwIG9uIGNoYXJhY3RlcnMgcmV0dXJuZWQgZnJvbSBhIHNpbmdsZSBgd2ViX2ZldGNoYC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEggPSA1MF8wMDA7XG5cbi8qKiBEZWZhdWx0IHBlci1yZXF1ZXN0IG5ldHdvcmsgdGltZW91dCAobXMpIGZvciBzZWFyY2ggKyBmZXRjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5cbi8qKiBBcHBLaXQgY29uZmlnIGFjY2VwdGVkIGJ5IHRoZSB3ZWItc2VhcmNoIHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgd2ViLXNlYXJjaCBtb2RlbCB0byB1c2UgYnkgZGVmYXVsdDogYSBEYXRhYnJpY2tzIHNlcnZpbmcgZW5kcG9pbnRcbiAgICogbmFtZSAoYFwiZGF0YWJyaWNrcy1nZW1pbmktMy1wcm9cImApLCBhIGxvb3NlIG5hbWUgKGBcImdlbWluaVwiYCwgYFwiZ3B0XCJgKSxcbiAgICogb3IgYSBjYXBhYmlsaXR5IGNsYXNzLiBGdXp6eS1tYXRjaGVkIGFnYWluc3QgdGhlIGxpdmUgY2F0YWxvZ3VlLiBGYWxsc1xuICAgKiBiYWNrIHRvIGBXRUJfU0VBUkNIX01PREVMYCwgdGhlbiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgLCB0aGVuXG4gICAqIHRoZSB7QGxpbmsgbW9kZWxGYWxsYmFja3N9IG9yZGVyLiBDaG9zZW4gaW5kZXBlbmRlbnRseSBvZiB0aGUgY2FsbGluZ1xuICAgKiBhZ2VudCdzIGNoYXQgbW9kZWwuXG4gICAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFByaW9yaXR5LW9yZGVyZWQgd2ViLXNlYXJjaCBtb2RlbCBjYW5kaWRhdGVzIHRyaWVkIHdoZW4ge0BsaW5rIG1vZGVsfSBpc1xuICAgKiB1bnNldCwgZWFjaCBmdXp6eS1tYXRjaGVkIGFuZCBjaGVja2VkIGZvciB3ZWItc2VhcmNoIHN1cHBvcnQuIEZhbGxzIGJhY2tcbiAgICogdG8gYFdFQl9TRUFSQ0hfTU9ERUxfRkFMTEJBQ0tTYCAoY29tbWEvc3BhY2Utc2VwYXJhdGVkKSwgdGhlblxuICAgKiB7QGxpbmsgREVGQVVMVF9NT0RFTF9GQUxMQkFDS1N9IChHZW1pbmksIHRoZW4gR1BUKS5cbiAgICovXG4gIG1vZGVsRmFsbGJhY2tzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBQcm92aWRlciAtPiB0b29sLXNwZWMgb3ZlcnJpZGUgbWFwLCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW5cbiAgICoge0BsaW5rIFdFQl9TRUFSQ0hfUFJPVklERVJTfSBkZWZhdWx0cy4gS2V5ZWQgYnkgcHJvdmlkZXIgZmFtaWx5XG4gICAqIChgXCJvcGVuYWlcImAsIGBcImdlbWluaVwiYCk7IGVhY2ggdmFsdWUgbWF5IG92ZXJyaWRlIHRoZSBgdG9vbGAgZW50cnlcbiAgICogYW5kL29yIHRoZSBgYXBpYCBzdXJmYWNlLiBVc2UgdG8gY2hhbmdlIHRoZSB0b29sIHNoYXBlIGFzIHRoZSBwbGF0Zm9ybVxuICAgKiBldm9sdmVzIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS4gRmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9UT09MU2AgcGFyc2VkIGFzXG4gICAqIEpTT04uIFRoaXMgaXMgdGhlIGBXRUJfU0VBUkNIX1RPT0xTYCBzZXR0aW5nLlxuICAgKi9cbiAgd2ViU2VhcmNoVG9vbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEVuYWJsZSBmdXp6eSBtYXRjaGluZyBvZiBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSBjYXRhbG9ndWUuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYDsgZmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9GVVpaWWAuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyBmdXp6eSB0aHJlc2hvbGQuIEZhbGxzIGJhY2sgdG8gYFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEYCwgdGhlbiB0aGUgc2hhcmVkIGRlZmF1bHQuICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIYXJkIGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyBhIHNpbmdsZSBzZWFyY2ggcmV0dXJucy4gRmFsbHMgYmFja1xuICAgKiB0byBgV0VCX1NFQVJDSF9NQVhfQ0lUQVRJT05TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9NQVhfQ0lUQVRJT05TfS5cbiAgICovXG4gIG1heENpdGF0aW9ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhhcmQgY2FwIG9uIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgc2luZ2xlIGB3ZWJfZmV0Y2hgIHJlc3VsdC4gRmFsbHNcbiAgICogYmFjayB0byBgV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9GRVRDSF9NQVhfTEVOR1RIfS5cbiAgICovXG4gIGZldGNoTWF4TGVuZ3RoPzogbnVtYmVyO1xuICAvKipcbiAgICogUGVyLXJlcXVlc3QgbmV0d29yayB0aW1lb3V0IGluIG1zIGZvciBzZWFyY2ggKyBmZXRjaC4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9USU1FT1VUX01TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9USU1FT1VUX01TfS5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEZhbGwgYmFjayB0byBhIER1Y2tEdWNrR28gc2NyYXBlIHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgTk8gZGVwbG95ZWRcbiAgICogd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsIChubyBHUFQgLyBHZW1pbmkgc2VydmluZyBlbmRwb2ludCkuIFRoZSBuYXRpdmVcbiAgICogRGF0YWJyaWNrcyB0b29sIGlzIGFsd2F5cyBwcmVmZXJyZWQ7IHRoaXMgb25seSBraWNrcyBpbiB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIG5hdGl2ZSBvcHRpb24sIHNvIHRoZSB0b29sIHN0aWxsIHJldHVybnMgcmVzdWx0cyBpbnN0ZWFkIG9mIGVycm9yaW5nLlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldCBgZmFsc2VgIChvciBgV0VCX1NFQVJDSF9TQ1JBUEVfRkFMTEJBQ0s9MGApIHRvXG4gICAqIHJlcXVpcmUgYSBuYXRpdmUgbW9kZWwgYW5kIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG4gIHNjcmFwZUZhbGxiYWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaCAoe0BsaW5rIFVybFBvbGljeU1vZGV9KS4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9VUkxfUE9MSUNZYCwgdGhlbiB0byBgXCJhbGxvd2xpc3RcImAgd2hlbiB7QGxpbmsgYWxsb3dlZFVybHN9XG4gICAqIGhhcyBlbnRyaWVzIGFuZCBgXCJ1bnJlc3RyaWN0ZWRcImAgd2hlbiBpdCBkb2VzIG5vdC4gTmFtaW5nIHRoZSBtb2RlXG4gICAqIGV4cGxpY2l0bHkgaXMgdGhlIHdheSB0byBzdGF0ZSB0aGF0IGFuIG9wZW4gZGVwbG95bWVudCBpcyBpbnRlbmRlZDtcbiAgICogYFwiYWxsb3dsaXN0XCJgIHdpdGggbm8gZW50cmllcywgb3IgYFwidW5yZXN0cmljdGVkXCJgIGFsb25nc2lkZSBlbnRyaWVzLCBpc1xuICAgKiBhIGNvbnRyYWRpY3Rpb24gYW5kIGZhaWxzIGF0IHJlc29sdXRpb24uXG4gICAqL1xuICB1cmxQb2xpY3k/OiBVcmxQb2xpY3lNb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgVVJMIGFsbG93LWxpc3QuIEVhY2ggZW50cnkgaXMgYSBnbG9iIChvciBiYXJlIGhvc3QpIHRlc3RlZFxuICAgKiBhZ2FpbnN0IGEgVVJMJ3MgZnVsbCBgaHJlZmAuIFdoZW4gc2V0LCBgd2ViX3NlYXJjaGAgc2lsZW50bHkgZmlsdGVyc1xuICAgKiBjaXRhdGlvbnMgdG8gdGhlIHBlcm1pdHRlZCBzZXQgYW5kIGB3ZWJfZmV0Y2hgIHJlZnVzZXMgYSBkaXNhbGxvd2VkIFVSTC5cbiAgICogQWNjZXB0cyBhIGBzdHJpbmdbXWAgb3IgYSBjb21tYS0vd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nOyBmYWxscyBiYWNrXG4gICAqIHRvIGBXRUJfU0VBUkNIX0FMTE9XRURfVVJMU2AuIE9taXQgKG9yIGxlYXZlIGVtcHR5KSBmb3Igbm8gcmVzdHJpY3Rpb24uXG4gICAqIFNlZSBgYWxsb3dsaXN0LnRzYC5cbiAgICovXG4gIGFsbG93ZWRVcmxzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBBcHByb3ZhbCBnYXRlIGFwcGxpZWQgdG8gQk9USCB0b29scyAocGVyLXRvb2wgb3ZlcnJpZGVzIHZpYVxuICAgKiB7QGxpbmsgV2ViU2VhcmNoVG9vbE9wdGlvbnMuYXBwcm92YWx9IHdpbikuIGB0cnVlYCBnYXRlcyBldmVyeSBjYWxsO1xuICAgKiBhIFVSTC1wYXR0ZXJuIChvciBsaXN0KSBnYXRlcyBvbmx5IG1hdGNoaW5nIGNhbGxzOyBhblxuICAgKiB7QGxpbmsgQXBwcm92YWxQb2xpY3l9IHN0YXRlcyB0aGUgbW9kZSBkaXJlY3RseS4gT21pdCBmb3Igbm8gYXBwcm92YWwuXG4gICAqL1xuICBhcHByb3ZhbD86IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogQ29uY3JldGUsIHZhbGlkYXRlZCBjb25maWcgdGhlIHJ1bnRpbWUgKyB0b29scyByZWFkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB7XG4gIC8qKiBQaW5uZWQgd2ViLXNlYXJjaCBtb2RlbCwgd2hlbiBjb25maWd1cmVkIChlbHNlIHVuZGVmaW5lZCAtIHVzZSBmYWxsYmFja3MpLiAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqIFdoZXJlIHtAbGluayBtb2RlbH0gY2FtZSBmcm9tLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIgYW4gdW5zdXBwb3J0ZWQgcGluIGlzIGZhdGFsLiAqL1xuICBtb2RlbFNvdXJjZTogTW9kZWxTb3VyY2U7XG4gIC8qKiBPcmRlcmVkIGZhbGxiYWNrIG1vZGVsIGNhbmRpZGF0ZXMgKEdlbWluaSwgdGhlbiBHUFQsIHRoZW4gYSBmbG9vcikuICovXG4gIG1vZGVsRmFsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFByb3ZpZGVyIC0+IHRvb2wtc3BlYyBvdmVycmlkZSBtYXAsIG1lcmdlZCBvdmVyIHRoZSBidWlsdC1pbiBkZWZhdWx0cy4gKi9cbiAgd2ViU2VhcmNoVG9vbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogV2hldGhlciB0byBmdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcy4gKi9cbiAgZnV6enk6IGJvb2xlYW47XG4gIC8qKiBGdXNlLmpzIGZ1enp5IHRocmVzaG9sZC4gKi9cbiAgZnV6enlUaHJlc2hvbGQ6IG51bWJlcjtcbiAgbWF4Q2l0YXRpb25zOiBudW1iZXI7XG4gIGZldGNoTWF4TGVuZ3RoOiBudW1iZXI7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byBzY3JhcGUtZmFsbGJhY2sgd2hlbiBubyBuYXRpdmUgd2ViLXNlYXJjaCBtb2RlbCBpcyBkZXBsb3llZC4gKi9cbiAgc2NyYXBlRmFsbGJhY2s6IGJvb2xlYW47XG4gIC8qKiBUaGUgbmFtZWQgVVJMIHBvbGljeSBpbiBmb3JjZS4gKi9cbiAgdXJsUG9saWN5OiBVcmxQb2xpY3lNb2RlO1xuICAvKiogQ29tcGlsZWQgYWxsb3ctbGlzdCAocGVybWl0LWFsbCB1bmRlciB0aGUgYHVucmVzdHJpY3RlZGAgcG9saWN5KS4gKi9cbiAgYWxsb3dMaXN0OiBVcmxBbGxvd0xpc3Q7XG4gIC8qKiBEZWZhdWx0IHBlci10b29sIGFwcHJvdmFsIHBvbGljeS4gKi9cbiAgYXBwcm92YWw6IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogSlNPTiBTY2hlbWEgcHVibGlzaGVkIG9uIHRoZSBtYW5pZmVzdCdzIGBjb25maWcuc2NoZW1hYC4gKi9cbmV4cG9ydCBjb25zdCBXRUJfU0VBUkNIX0NPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgbW9kZWw6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEZWZhdWx0IHdlYi1zZWFyY2ggbW9kZWwgKGVuZHBvaW50IG5hbWUsIGxvb3NlIG5hbWUsIG9yIGNsYXNzKS4gRnV6enktbWF0Y2hlZC4gRW52OiBXRUJfU0VBUkNIX01PREVMLCB0aGVuIERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGYWxsYmFja3M6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk9yZGVyZWQgd2ViLXNlYXJjaCBtb2RlbCBjYW5kaWRhdGVzIHdoZW4gYG1vZGVsYCBpcyB1bnNldCAoR2VtaW5pLCB0aGVuIEdQVCkuIEVudjogV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1MuXCIsXG4gICAgfSxcbiAgICB3ZWJTZWFyY2hUb29sczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUHJvdmlkZXIgLT4gdG9vbC1zcGVjIG92ZXJyaWRlIG1hcCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW4gZGVmYXVsdHMgKG9wZW5haSAtPiB7XCJ0eXBlXCI6XCJ3ZWJfc2VhcmNoXCJ9LCBnZW1pbmkgLT4ge1wiZ29vZ2xlX3NlYXJjaFwiOnt9fSkuIEVudjogV0VCX1NFQVJDSF9UT09MUyAoSlNPTikuJyxcbiAgICB9LFxuICAgIG1vZGVsRnV6enlNYXRjaDoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSBsaXZlIGNhdGFsb2d1ZS4gRGVmYXVsdCB0cnVlIChlbnY6IFdFQl9TRUFSQ0hfRlVaWlkpLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGdXp6eVRocmVzaG9sZDoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZ1c2UuanMgc2NvcmUgdGhyZXNob2xkIGJlbG93IHdoaWNoIGEgZnV6enkgbW9kZWwgbWF0Y2ggaXMgYWNjZXB0ZWQgKGVudjogV0VCX1NFQVJDSF9GVVpaWV9USFJFU0hPTEQpLlwiLFxuICAgIH0sXG4gICAgbWF4Q2l0YXRpb25zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiSGFyZCBjYXAgb24gY2l0YXRpb25zIHJldHVybmVkIChlbnY6IFdFQl9TRUFSQ0hfTUFYX0NJVEFUSU9OUykuXCIsXG4gICAgfSxcbiAgICBmZXRjaE1heExlbmd0aDoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkhhcmQgY2FwIG9uIHdlYl9mZXRjaCBjb250ZW50IGxlbmd0aCAoZW52OiBXRUJfU0VBUkNIX0ZFVENIX01BWF9MRU5HVEgpLlwiLFxuICAgIH0sXG4gICAgdGltZW91dE1zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUGVyLXJlcXVlc3QgbmV0d29yayB0aW1lb3V0IGluIG1zIChlbnY6IFdFQl9TRUFSQ0hfVElNRU9VVF9NUykuXCIsXG4gICAgfSxcbiAgICBzY3JhcGVGYWxsYmFjazoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGYWxsIGJhY2sgdG8gYSBEdWNrRHVja0dvIHNjcmFwZSB3aGVuIG5vIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCBpcyBkZXBsb3llZC4gRGVmYXVsdCB0cnVlIChlbnY6IFdFQl9TRUFSQ0hfU0NSQVBFX0ZBTExCQUNLKS5cIixcbiAgICB9LFxuICAgIHVybFBvbGljeToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGVudW06IFtcInVucmVzdHJpY3RlZFwiLCBcImFsbG93bGlzdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIldoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaC4gRGVmYXVsdHMgdG8gYWxsb3dsaXN0IHdoZW4gYWxsb3dlZFVybHMgaGFzIGVudHJpZXMsIGVsc2UgdW5yZXN0cmljdGVkIChlbnY6IFdFQl9TRUFSQ0hfVVJMX1BPTElDWSkuXCIsXG4gICAgfSxcbiAgICBhbGxvd2VkVXJsczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdVUkwgYWxsb3ctbGlzdCBvZiBnbG9icyAvIGJhcmUgaG9zdHMgKGUuZy4gXCIqLmRhdGFicmlja3MuY29tXCIsIFwiZG9jcy5leGFtcGxlLmNvbVwiKS4gQWxzbyBhY2NlcHRzIGEgY29tbWEvc3BhY2Utc2VwYXJhdGVkIHN0cmluZy4gRmFsbHMgYmFjayB0byBXRUJfU0VBUkNIX0FMTE9XRURfVVJMUy4gRW1wdHkgPSB1bnJlc3RyaWN0ZWQuJyxcbiAgICB9LFxuICAgIGFwcHJvdmFsOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0FwcHJvdmFsIGdhdGUgZm9yIGJvdGggdG9vbHM6IHRydWUgZ2F0ZXMgZXZlcnkgY2FsbCwgYSBnbG9iIChvciBsaXN0IG9mIGdsb2JzKSBnYXRlcyBvbmx5IG1hdGNoaW5nIFVSTHMsIG9yIHN0YXRlIHRoZSBtb2RlIGRpcmVjdGx5IGFzIHtcIm1vZGVcIjpcIm5vbmVcInxcImFsd2F5c1wifFwidXJsc1wifS4gRGVmYXVsdCBub25lLicsXG4gICAgICBvbmVPZjogW1xuICAgICAgICB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1vZGU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1wibm9uZVwiLCBcImFsd2F5c1wiLCBcInVybHNcIl0gfSxcbiAgICAgICAgICAgIHBhdHRlcm5zOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogW1wibW9kZVwiXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGBXRUJfU0VBUkNIX1RPT0xTYCBlbnYgdmFyIChKU09OIG9iamVjdCksIGVsc2UgYHt9YC4gQSB2YWx1ZSB0aGF0XG4gKiBpcyBzZXQgYnV0IG5vdCBhIEpTT04gb2JqZWN0IGlzIGEgZGVwbG95bWVudCBtaXN0YWtlIHRoYXQgd291bGQgb3RoZXJ3aXNlXG4gKiBzaWxlbnRseSBsZWF2ZSB0aGUgYnVpbHQtaW4gdG9vbCBzcGVjcyBpbiBwbGFjZSwgc28gaXQgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBwYXJzZVRvb2xzRW52KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgcmF3ID0gY29uZmlnVXRpbHMudGV4dChcIldFQl9TRUFSQ0hfVE9PTFNcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiB7fTtcbiAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZVJlY29yZChyYXcpO1xuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICBcIldFQl9TRUFSQ0hfVE9PTFMgbXVzdCBiZSBhIEpTT04gb2JqZWN0IG1hcHBpbmcgYSBwcm92aWRlciBmYW1pbHkgdG8gaXRzIHRvb2wgc3BlY1wiLFxuICAgICAgeyBjb250ZXh0OiB7IGVudlZhcjogXCJXRUJfU0VBUkNIX1RPT0xTXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuLyoqIFJlYWQgdGhlIHBpbm5lZCBlbmRwb2ludCBpZCBhbmQgcmVjb3JkIHdoaWNoIHNvdXJjZSBzdXBwbGllZCBpdC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVNb2RlbFBpbihjb25maWc6IFdlYlNlYXJjaFBsdWdpbkNvbmZpZyk6IHsgbW9kZWw/OiBzdHJpbmc7IHNvdXJjZTogTW9kZWxTb3VyY2UgfSB7XG4gIGNvbnN0IGZyb21Db25maWcgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKGNvbmZpZy5tb2RlbCk7XG4gIGlmIChmcm9tQ29uZmlnICE9PSBudWxsKSByZXR1cm4geyBtb2RlbDogZnJvbUNvbmZpZywgc291cmNlOiBcImNvbmZpZ1wiIH07XG4gIGNvbnN0IGZyb21Nb2RlbEVudiA9IGNvbmZpZ1V0aWxzLnRleHQoTU9ERUxfRU5WLCBjb25maWdVdGlscy5FTlZfT05MWSk7XG4gIGlmIChmcm9tTW9kZWxFbnYgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgbW9kZWw6IGZyb21Nb2RlbEVudiwgc291cmNlOiBNT0RFTF9FTlYgfTtcbiAgY29uc3QgZnJvbVJlc291cmNlRW52ID0gY29uZmlnVXRpbHMudGV4dChTRVJWSU5HX0VORFBPSU5UX0VOViwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBpZiAoZnJvbVJlc291cmNlRW52ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyBtb2RlbDogZnJvbVJlc291cmNlRW52LCBzb3VyY2U6IFNFUlZJTkdfRU5EUE9JTlRfRU5WIH07XG4gIH1cbiAgcmV0dXJuIHsgc291cmNlOiBcIm5vbmVcIiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIG5hbWVkIHtAbGluayBVcmxQb2xpY3lNb2RlfSwgZmFpbGluZyBvbiBhIHN0YXRlZCBtb2RlIHRoYXRcbiAqIGNvbnRyYWRpY3RzIHRoZSBhbGxvdy1saXN0IGVudHJpZXMgaXQgd2FzIGdpdmVuLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVXJsUG9saWN5KFxuICBjb25maWd1cmVkOiBVcmxQb2xpY3lNb2RlIHwgdW5kZWZpbmVkLFxuICBwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBVcmxQb2xpY3lNb2RlIHtcbiAgY29uc3QgcmF3ID0gY29uZmlndXJlZCA/PyBjb25maWdVdGlscy50ZXh0KFwiV0VCX1NFQVJDSF9VUkxfUE9MSUNZXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcGF0dGVybnMubGVuZ3RoID4gMCA/IFwiYWxsb3dsaXN0XCIgOiBcInVucmVzdHJpY3RlZFwiO1xuICBpZiAocmF3ICE9PSBcImFsbG93bGlzdFwiICYmIHJhdyAhPT0gXCJ1bnJlc3RyaWN0ZWRcIikge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAndXJsUG9saWN5IG11c3QgYmUgXCJhbGxvd2xpc3RcIiBvciBcInVucmVzdHJpY3RlZFwiIChlbnY6IFdFQl9TRUFSQ0hfVVJMX1BPTElDWSknLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcInVybFBvbGljeVwiLCBlbnZWYXI6IFwiV0VCX1NFQVJDSF9VUkxfUE9MSUNZXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgaWYgKHJhdyA9PT0gXCJhbGxvd2xpc3RcIiAmJiBwYXR0ZXJucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgJ3VybFBvbGljeSBcImFsbG93bGlzdFwiIG5lZWRzIGF0IGxlYXN0IG9uZSBlbnRyeSBpbiBhbGxvd2VkVXJscyAoZW52OiBXRUJfU0VBUkNIX0FMTE9XRURfVVJMUyknLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcImFsbG93ZWRVcmxzXCIsIGVudlZhcjogXCJXRUJfU0VBUkNIX0FMTE9XRURfVVJMU1wiIH0gfSxcbiAgICApO1xuICB9XG4gIGlmIChyYXcgPT09IFwidW5yZXN0cmljdGVkXCIgJiYgcGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAndXJsUG9saWN5IFwidW5yZXN0cmljdGVkXCIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYWxsb3dlZFVybHMgZW50cmllczsgZHJvcCB0aGUgZW50cmllcyBvciBzZXQgdXJsUG9saWN5IHRvIFwiYWxsb3dsaXN0XCInLFxuICAgICAgeyBjb250ZXh0OiB7IGZpZWxkOiBcImFsbG93ZWRVcmxzXCIsIGVudlZhcjogXCJXRUJfU0VBUkNIX0FMTE9XRURfVVJMU1wiIH0gfSxcbiAgICApO1xuICB9XG4gIHJldHVybiByYXc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFueSBhY2NlcHRlZCBhcHByb3ZhbCBzcGVsbGluZyBpbnRvIGFuIHtAbGluayBBcHByb3ZhbFBvbGljeX0uXG4gKiBBIHBhdHRlcm4gZ2F0ZSB3aXRoIG5vIHVzYWJsZSBwYXR0ZXJucyBjb2xsYXBzZXMgdG8gYFwibm9uZVwiYCByYXRoZXIgdGhhblxuICogZ2F0aW5nIGV2ZXJ5dGhpbmcsIHNvIGEgYmxhbmsgZW52IHZhciBjYW4gbmV2ZXIgd2VkZ2UgdGhlIHRvb2xzIGJlaGluZCBhblxuICogYXBwcm92YWwgbm9ib2R5IGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0FwcHJvdmFsUG9saWN5KGdhdGU6IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5IHwgdW5kZWZpbmVkKTogQXBwcm92YWxQb2xpY3kge1xuICBpZiAoZ2F0ZSA9PT0gdW5kZWZpbmVkIHx8IGdhdGUgPT09IGZhbHNlKSByZXR1cm4geyBtb2RlOiBcIm5vbmVcIiB9O1xuICBpZiAoZ2F0ZSA9PT0gdHJ1ZSkgcmV0dXJuIHsgbW9kZTogXCJhbHdheXNcIiB9O1xuICBpZiAob2JqZWN0LmlzUmVjb3JkKGdhdGUpICYmIFwibW9kZVwiIGluIGdhdGUpIHtcbiAgICBpZiAoZ2F0ZS5tb2RlID09PSBcInVybHNcIikge1xuICAgICAgY29uc3QgcGF0dGVybnMgPSBwYXJzZUFsbG93ZWRVcmxzKFsuLi5nYXRlLnBhdHRlcm5zXSk7XG4gICAgICByZXR1cm4gcGF0dGVybnMubGVuZ3RoID4gMCA/IHsgbW9kZTogXCJ1cmxzXCIsIHBhdHRlcm5zIH0gOiB7IG1vZGU6IFwibm9uZVwiIH07XG4gICAgfVxuICAgIGlmIChnYXRlLm1vZGUgPT09IFwiYWx3YXlzXCIgfHwgZ2F0ZS5tb2RlID09PSBcIm5vbmVcIikgcmV0dXJuIHsgbW9kZTogZ2F0ZS5tb2RlIH07XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcignYXBwcm92YWwgbW9kZSBtdXN0IGJlIFwibm9uZVwiLCBcImFsd2F5c1wiIG9yIFwidXJsc1wiJywge1xuICAgICAgY29udGV4dDogeyBmaWVsZDogXCJhcHByb3ZhbFwiIH0sXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgcGF0dGVybnMgPSBwYXJzZUFsbG93ZWRVcmxzKHR5cGVvZiBnYXRlID09PSBcInN0cmluZ1wiID8gZ2F0ZSA6IFsuLi5nYXRlXSk7XG4gIHJldHVybiBwYXR0ZXJucy5sZW5ndGggPiAwID8geyBtb2RlOiBcInVybHNcIiwgcGF0dGVybnMgfSA6IHsgbW9kZTogXCJub25lXCIgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHBsdWdpbiBjb25maWcgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZVxuICoge0BsaW5rIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnfS4gV2hpY2ggbW9kZWwgaXMgdXNlZCBzdGF5cyBsYXp5IC0gaXQgaXNcbiAqIHBpY2tlZCBhdCBjYWxsIHRpbWUgYWdhaW5zdCB0aGUgbGl2ZSBjYXRhbG9ndWUgLSBidXQgZXZlcnl0aGluZyBlbHNlIGlzXG4gKiBzZXR0bGVkIGhlcmUsIGFuZCBhIGNvbnRyYWRpY3Rpb24gKHVucGFyc2VhYmxlIGBXRUJfU0VBUkNIX1RPT0xTYCwgYW5cbiAqIHVua25vd24gVVJMIHBvbGljeSwgYSBwb2xpY3kgdGhhdCBkaXNhZ3JlZXMgd2l0aCBpdHMgYWxsb3ctbGlzdCkgdGhyb3dzIGFcbiAqIHtAbGluayBDb25maWd1cmF0aW9uRXJyb3J9IG5hbWluZyB0aGUgZmllbGQgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJTZWFyY2hDb25maWcoXG4gIGNvbmZpZzogV2ViU2VhcmNoUGx1Z2luQ29uZmlnID0ge30sXG4pOiBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB7XG4gIGNvbnN0IHBhdHRlcm5zID0gcGFyc2VBbGxvd2VkVXJscyhcbiAgICBjb25maWcuYWxsb3dlZFVybHMgPz8gY29uZmlnVXRpbHMudGV4dChcIldFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKSxcbiAgKTtcbiAgY29uc3QgdXJsUG9saWN5ID0gcmVzb2x2ZVVybFBvbGljeShjb25maWcudXJsUG9saWN5LCBwYXR0ZXJucyk7XG4gIGNvbnN0IHsgbW9kZWwsIHNvdXJjZSB9ID0gcmVzb2x2ZU1vZGVsUGluKGNvbmZpZyk7XG4gIGNvbnN0IGZhbGxiYWNrcyA9IGNvbmZpZ1V0aWxzLmxpc3QoXG4gICAgY29uZmlnLm1vZGVsRmFsbGJhY2tzLFxuICAgIFwiV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1NcIixcbiAgICB1bmRlZmluZWQsXG4gICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICk7XG4gIHJldHVybiB7XG4gICAgLi4uKG1vZGVsID8geyBtb2RlbCB9IDoge30pLFxuICAgIG1vZGVsU291cmNlOiBzb3VyY2UsXG4gICAgbW9kZWxGYWxsYmFja3M6IGZhbGxiYWNrcy5sZW5ndGggPiAwID8gZmFsbGJhY2tzIDogREVGQVVMVF9NT0RFTF9GQUxMQkFDS1MsXG4gICAgd2ViU2VhcmNoVG9vbHM6IHsgLi4ucGFyc2VUb29sc0VudigpLCAuLi4oY29uZmlnLndlYlNlYXJjaFRvb2xzID8/IHt9KSB9LFxuICAgIGZ1enp5OlxuICAgICAgY29uZmlnVXRpbHMuYm9vbGVhbihjb25maWcubW9kZWxGdXp6eU1hdGNoLCBcIldFQl9TRUFSQ0hfRlVaWllcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpID8/IHRydWUsXG4gICAgZnV6enlUaHJlc2hvbGQ6IGNvbmZpZ1V0aWxzLnBvc2l0aXZlTnVtYmVyKFxuICAgICAgY29uZmlnLm1vZGVsRnV6enlUaHJlc2hvbGQsXG4gICAgICBcIldFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEXCIsXG4gICAgICBtb2RlbENhdGFsb2cuREVGQVVMVF9GVVpaWV9USFJFU0hPTEQsXG4gICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICApLFxuICAgIG1heENpdGF0aW9uczogY29uZmlnVXRpbHMucG9zaXRpdmVJbnQoXG4gICAgICBjb25maWcubWF4Q2l0YXRpb25zLFxuICAgICAgXCJXRUJfU0VBUkNIX01BWF9DSVRBVElPTlNcIixcbiAgICAgIERFRkFVTFRfTUFYX0NJVEFUSU9OUyxcbiAgICAgIGNvbmZpZ1V0aWxzLkVOVl9PTkxZLFxuICAgICksXG4gICAgZmV0Y2hNYXhMZW5ndGg6IGNvbmZpZ1V0aWxzLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLmZldGNoTWF4TGVuZ3RoLFxuICAgICAgXCJXRUJfU0VBUkNIX0ZFVENIX01BWF9MRU5HVEhcIixcbiAgICAgIERFRkFVTFRfRkVUQ0hfTUFYX0xFTkdUSCxcbiAgICAgIGNvbmZpZ1V0aWxzLkVOVl9PTkxZLFxuICAgICksXG4gICAgdGltZW91dE1zOiBjb25maWdVdGlscy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy50aW1lb3V0TXMsXG4gICAgICBcIldFQl9TRUFSQ0hfVElNRU9VVF9NU1wiLFxuICAgICAgREVGQVVMVF9USU1FT1VUX01TLFxuICAgICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICAgKSxcbiAgICBzY3JhcGVGYWxsYmFjazpcbiAgICAgIGNvbmZpZ1V0aWxzLmJvb2xlYW4oXG4gICAgICAgIGNvbmZpZy5zY3JhcGVGYWxsYmFjayxcbiAgICAgICAgXCJXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDS1wiLFxuICAgICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICAgICkgPz8gdHJ1ZSxcbiAgICB1cmxQb2xpY3ksXG4gICAgYWxsb3dMaXN0OiB0b1VybEFsbG93TGlzdCh1cmxQb2xpY3kgPT09IFwiYWxsb3dsaXN0XCIgPyBwYXR0ZXJucyA6IFtdKSxcbiAgICBhcHByb3ZhbDogdG9BcHByb3ZhbFBvbGljeShjb25maWcuYXBwcm92YWwpLFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYXBwcm92YWwgZ2F0ZSBhZ2FpbnN0IGEgc2V0IG9mIGNhbmRpZGF0ZSBVUkxzIGludG8gYSBjb25jcmV0ZVxuICogYm9vbGVhbjogYFwibm9uZVwiYCAvIGBcImFsd2F5c1wiYCBwYXNzIHN0cmFpZ2h0IHRocm91Z2g7IGEgYFwidXJsc1wiYCBwb2xpY3lcbiAqIGdhdGVzIHdoZW4gQU5ZIGNhbmRpZGF0ZSBtYXRjaGVzLiBFbXB0eSBjYW5kaWRhdGVzIHdpdGggYSBwYXR0ZXJuIGdhdGVcbiAqIG5ldmVyIG1hdGNoIChub3RoaW5nIHRvIGFwcHJvdmUpLiBSZXVzZXMgdGhlIGFsbG93LWxpc3QgbWF0Y2hlciBzbyBhcHByb3ZhbFxuICogZ2xvYnMgcmVhZCBleGFjdGx5IGxpa2UgYWxsb3ctbGlzdCBnbG9icy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcHJvdmFsTWF0Y2hlcyhcbiAgZ2F0ZTogQXBwcm92YWxHYXRlIHwgQXBwcm92YWxQb2xpY3ksXG4gIHVybHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBvbGljeSA9IHRvQXBwcm92YWxQb2xpY3koZ2F0ZSk7XG4gIGlmIChwb2xpY3kubW9kZSA9PT0gXCJub25lXCIpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBvbGljeS5tb2RlID09PSBcImFsd2F5c1wiKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgbGlzdCA9IHRvVXJsQWxsb3dMaXN0KHBvbGljeS5wYXR0ZXJucyk7XG4gIHJldHVybiB1cmxzLnNvbWUoKHVybCkgPT4gbGlzdC5hbGxvd3ModXJsKSk7XG59XG4iXX0=
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBa0IsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCckYseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztBQUU1QywrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0NBQWtDLENBQUM7QUFLdkU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUU1RSw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBRXhDLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUM7QUFFL0MsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQStHekMsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFnQjtJQUNuRCxJQUFJLEVBQUUsUUFBUTtJQUNkLFVBQVUsRUFBRTtRQUNWLEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxF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QUFJO1FBQ1gsU0FBUztRQUNULFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7S0FDNUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUFtQyxFQUNuQyxJQUF1QjtJQUV2QixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3pDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDMUMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgd2ViLXNlYXJjaCBwbHVnaW46IHRoZSB0eXBlZFxuICoge0BsaW5rIFdlYlNlYXJjaFBsdWdpbkNvbmZpZ30gKHRoZSBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXQgY29uZmlnKSwgdGhlXG4gKiBKU09OIFNjaGVtYSB0aGUgbWFuaWZlc3QgcHVibGlzaGVzIGZvciBpdCwgYW5kIHtAbGluayByZXNvbHZlV2ViU2VhcmNoQ29uZmlnfVxuICogd2hpY2ggbGF5ZXJzIHRoYXQgY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGVcbiAqIHtAbGluayBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZ30gdGhlIHJ1bnRpbWUgKyB0b29scyByZWFkLlxuICpcbiAqIGB3ZWJfc2VhcmNoYCBydW5zIG9uIHRoZSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgbmF0aXZlIHdlYi1zZWFyY2ggdG9vbFxuICogKHNlZSBgcHJvdmlkZXIudHNgIC8gYHNlYXJjaC50c2ApLCBzbyB0aGUga2V5IGtub2IgaXMgd2hpY2ggd2ViLXNlYXJjaC1cbiAqIGNhcGFibGUgbW9kZWwgdG8gdXNlLiBJdCByZXNvbHZlcyBpbmRlcGVuZGVudGx5IG9mIHRoZSBjYWxsaW5nIGFnZW50J3MgY2hhdFxuICogbW9kZWw6IGBtb2RlbGAgKGEgbmFtZSwgbG9vc2UgbmFtZSwgb3IgY2FwYWJpbGl0eSBjbGFzcykgaXMgZnV6enktbWF0Y2hlZFxuICogYWdhaW5zdCB0aGUgd29ya3NwYWNlIGNhdGFsb2d1ZSwgYW5kIHdoZW4gbm90aGluZyBpcyBwaW5uZWQgdGhlXG4gKiB7QGxpbmsgV2ViU2VhcmNoUGx1Z2luQ29uZmlnLm1vZGVsRmFsbGJhY2tzfSBvcmRlciAoR2VtaW5pLCB0aGVuIEdQVCwgdGhlbiBhXG4gKiByZXBvIGZsb29yKSBwaWNrcyB0aGUgZmlyc3Qgd2ViLXNlYXJjaC1jYXBhYmxlIGVuZHBvaW50IHRoYXQgZXhpc3RzLlxuICpcbiAqIFdoaWNoIGVuZHBvaW50IGlkIGlzIHVzZWQgZm9sbG93cyB0aGUgc3RhbmRhcmQgcHJlY2VkZW5jZSAtIGV4cGxpY2l0IHBsdWdpblxuICogY29uZmlnLCB0aGVuIGVudmlyb25tZW50LCB0aGVuIGEgZGVmYXVsdCAtIHdpdGggdHdvIGVudmlyb25tZW50IHNvdXJjZXM6XG4gKlxuICogICAxLiBgbW9kZWxgIGluIHBsdWdpbiBjb25maWc7XG4gKiAgIDIuIGBXRUJfU0VBUkNIX01PREVMYCwgdGhlIGRlZGljYXRlZCBvdmVycmlkZSwgc28gYSBkZXBsb3ltZW50IGNhbiBwb2ludFxuICogICAgICB3ZWIgc2VhcmNoIGF0IGEgZGlmZmVyZW50IGVuZHBvaW50IHRoYW4gdGhlIGFnZW50J3MgY2hhdCBtb2RlbDtcbiAqICAgMy4gYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYCwgQXBwS2l0J3Mgc3RhbmRhcmQgbmFtZSBmb3IgYVxuICogICAgICBNb2RlbCBTZXJ2aW5nIGJpbmRpbmcsIGhvbm9yZWQgc28gdGhlIHJlc291cmNlIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdFxuICogICAgICB3aXJlcyB0aGlzIHBsdWdpbiB1cCBsaWtlIGFueSBvdGhlci4gQmVjYXVzZSB0aGF0IGJpbmRpbmcgaXMgc2hhcmVkXG4gKiAgICAgIHdpdGggd2hhdGV2ZXIgZWxzZSB0aGUgYXBwIHNlcnZlcywgaXQgaXMgdHJlYXRlZCBhcyBhIHByZWZlcmVuY2U6IGFuXG4gKiAgICAgIGVuZHBvaW50IHRoYXQgY2Fubm90IHJ1biB0aGUgbmF0aXZlIHdlYi1zZWFyY2ggdG9vbCBpcyBza2lwcGVkIGluXG4gKiAgICAgIGZhdm9yIG9mIHtAbGluayBXZWJTZWFyY2hQbHVnaW5Db25maWcubW9kZWxGYWxsYmFja3N9IHJhdGhlciB0aGFuXG4gKiAgICAgIGZhaWxpbmcgdGhlIGNhbGwuIEEgcGluIGZyb20gKDEpIG9yICgyKSBpcyBleHBsaWNpdCBhbmQgRE9FUyBmYWlsO1xuICogICA0LiBvdGhlcndpc2UgdGhlIGZhbGxiYWNrIG9yZGVyLCByZXNvbHZlZCBhZ2FpbnN0IHRoZSBsaXZlIGNhdGFsb2d1ZS5cbiAqXG4gKiBXaGljaCBtb2RlbCB3aW5zIGlzIGRlY2lkZWQgbGF6aWx5LCBhdCBjYWxsIHRpbWUsIGFnYWluc3QgdGhlIGxpdmVcbiAqIGNhdGFsb2d1ZS4gUmVzb2x1dGlvbiBoZXJlIGlzIGVhZ2VyIGFib3V0IGV2ZXJ5dGhpbmcgZWxzZSBhbmQgZmFpbHMgbG91ZGx5XG4gKiBvbiBhIGNvbnRyYWRpY3Rpb246IGFuIHVucGFyc2VhYmxlIGBXRUJfU0VBUkNIX1RPT0xTYCwgYW4gdW5rbm93blxuICoge0BsaW5rIFVybFBvbGljeU1vZGV9LCBvciBhIFVSTCBwb2xpY3kgdGhhdCBkaXNhZ3JlZXMgd2l0aCB0aGUgYWxsb3ctbGlzdCBpdFxuICogd2FzIGdpdmVuLlxuICpcbiAqIEVudiBmYWxsYmFja3M6IGBXRUJfU0VBUkNIX01PREVMYCwgYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYCxcbiAqIGBXRUJfU0VBUkNIX01PREVMX0ZBTExCQUNLU2AsIGBXRUJfU0VBUkNIX1RPT0xTYCAoSlNPTiksXG4gKiBgV0VCX1NFQVJDSF9VUkxfUE9MSUNZYCwgYFdFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTYCxcbiAqIGBXRUJfU0VBUkNIX01BWF9DSVRBVElPTlNgLCBgV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIYCxcbiAqIGBXRUJfU0VBUkNIX1RJTUVPVVRfTVNgLCBgV0VCX1NFQVJDSF9TQ1JBUEVfRkFMTEJBQ0tgLCBgV0VCX1NFQVJDSF9GVVpaWWAsXG4gKiBgV0VCX1NFQVJDSF9GVVpaWV9USFJFU0hPTERgLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIHR5cGUgQmFzZVBsdWdpbkNvbmZpZyB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGNvbmZpZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgbW9kZWxDYXRhbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IGpzb24sIG9iamVjdCwgdHlwZSBPbmVPck1hbnksIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcbmltcG9ydCB7IHBhcnNlQWxsb3dlZFVybHMsIHRvVXJsQWxsb3dMaXN0LCB0eXBlIFVybEFsbG93TGlzdCB9IGZyb20gXCIuL2FsbG93bGlzdC50c1wiO1xuXG4vKipcbiAqIEEgVVJMLXBhdHRlcm4gZ2F0ZSBmb3IgcGVyLXRvb2wgYXBwcm92YWwuIGB0cnVlYCBnYXRlcyBldmVyeSBjYWxsOyBhXG4gKiBwYXR0ZXJuIChvciBsaXN0IG9mIHBhdHRlcm5zLCBpbiB0aGUge0BsaW5rIE9uZU9yTWFueX0gc2hhcGUgdXNlZCBhY3Jvc3NcbiAqIHRoZSByZXBvKSBnYXRlcyBvbmx5IGNhbGxzIHdob3NlIFVSTCBtYXRjaGVzLiBQYXR0ZXJucyB1c2UgdGhlIHNhbWUgZ2xvYlxuICogc3ludGF4IGFzIHRoZSBhbGxvdy1saXN0IChzZWUgYGFsbG93bGlzdC50c2ApLiBPbWl0IC8gYGZhbHNlYCBmb3Igbm9cbiAqIGFwcHJvdmFsLiBOb3JtYWxpemVkIHRvIGFuIHtAbGluayBBcHByb3ZhbFBvbGljeX0gYmVmb3JlIHVzZS5cbiAqL1xuZXhwb3J0IHR5cGUgQXBwcm92YWxHYXRlID0gYm9vbGVhbiB8IE9uZU9yTWFueTxzdHJpbmc+IHwgc3RyaW5nO1xuXG4vKipcbiAqIFRoZSBub3JtYWxpemVkIGZvcm0gb2YgYW4ge0BsaW5rIEFwcHJvdmFsR2F0ZX06IHdoaWNoIGNhbGxzIHBhdXNlIGZvciBhXG4gKiBodW1hbi4gYFwibm9uZVwiYCBydW5zIGV2ZXJ5IGNhbGwgc3RyYWlnaHQgdGhyb3VnaCwgYFwiYWx3YXlzXCJgIGdhdGVzIGFsbCBvZlxuICogdGhlbSwgYW5kIGBcInVybHNcImAgZ2F0ZXMgb25seSBjYWxscyB3aG9zZSBVUkwgbWF0Y2hlcyBvbmUgb2YgYHBhdHRlcm5zYC5cbiAqL1xuZXhwb3J0IHR5cGUgQXBwcm92YWxQb2xpY3kgPVxuICB8IHsgcmVhZG9ubHkgbW9kZTogXCJub25lXCIgfVxuICB8IHsgcmVhZG9ubHkgbW9kZTogXCJhbHdheXNcIiB9XG4gIHwgeyByZWFkb25seSBtb2RlOiBcInVybHNcIjsgcmVhZG9ubHkgcGF0dGVybnM6IHJlYWRvbmx5IHN0cmluZ1tdIH07XG5cbi8qKlxuICogV2hpY2ggVVJMcyB0aGUgdG9vbHMgbWF5IHJlYWNoLiBgXCJhbGxvd2xpc3RcImAgcGVybWl0cyBvbmx5IHRoZSBjb25maWd1cmVkXG4gKiBlbnRyaWVzOyBgXCJ1bnJlc3RyaWN0ZWRcImAgbmFtZXMgdGhlIHBlcm1pc3NpdmUgbW9kZSBleHBsaWNpdGx5LCBzbyBhblxuICogdW5yZXN0cmljdGVkIGRlcGxveW1lbnQgaXMgYSBzdGF0ZWQgY2hvaWNlIHZpc2libGUgaW4gdGhlIGJvb3QgbG9nIHJhdGhlclxuICogdGhhbiBhbiBlbXB0eSBsaXN0IG5vYm9keSBub3RpY2VkLlxuICovXG5leHBvcnQgdHlwZSBVcmxQb2xpY3lNb2RlID0gXCJ1bnJlc3RyaWN0ZWRcIiB8IFwiYWxsb3dsaXN0XCI7XG5cbi8qKiBEZWRpY2F0ZWQgb3ZlcnJpZGUgZm9yIHRoZSB3ZWItc2VhcmNoIGVuZHBvaW50IGlkLiAqL1xuZXhwb3J0IGNvbnN0IE1PREVMX0VOViA9IFwiV0VCX1NFQVJDSF9NT0RFTFwiO1xuXG4vKiogQXBwS2l0J3Mgc3RhbmRhcmQgZW52aXJvbm1lbnQgbmFtZSBmb3IgYSBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50IGJpbmRpbmcuICovXG5leHBvcnQgY29uc3QgU0VSVklOR19FTkRQT0lOVF9FTlYgPSBcIkRBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FXCI7XG5cbi8qKiBXaGVyZSB0aGUgcGlubmVkIHdlYi1zZWFyY2ggZW5kcG9pbnQgaWQgY2FtZSBmcm9tLCBvciBgXCJub25lXCJgIHdoZW4gdW5waW5uZWQuICovXG5leHBvcnQgdHlwZSBNb2RlbFNvdXJjZSA9IFwiY29uZmlnXCIgfCB0eXBlb2YgTU9ERUxfRU5WIHwgdHlwZW9mIFNFUlZJTkdfRU5EUE9JTlRfRU5WIHwgXCJub25lXCI7XG5cbi8qKlxuICogRGVmYXVsdCB3ZWItc2VhcmNoIGZhbWlseSBwcmVmZXJlbmNlLCB0cmllZCBpbiBvcmRlciB3aGVuIG5vIG1vZGVsIGlzXG4gKiBwaW5uZWQuIEVhY2ggcXVlcnkgc2VsZWN0cyB0aGUgaGlnaGVzdC1yYW5rZWQgZGVwbG95ZWQgbW9kZWwgaW4gdGhhdCBmYW1pbHlcbiAqIGFmdGVyIG1vZGVsLW93bmVkIHdlYi1zZWFyY2ggY2FwYWJpbGl0eSBmaWx0ZXJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREVMX0ZBTExCQUNLUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXCJnZW1pbmlcIiwgXCJncHRcIl07XG5cbi8qKiBEZWZhdWx0IGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyByZXR1cm5lZCBmcm9tIGEgc2luZ2xlIHNlYXJjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9DSVRBVElPTlMgPSAxMDtcblxuLyoqIERlZmF1bHQgY2FwIG9uIGNoYXJhY3RlcnMgcmV0dXJuZWQgZnJvbSBhIHNpbmdsZSBgd2ViX2ZldGNoYC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFVENIX01BWF9MRU5HVEggPSA1MF8wMDA7XG5cbi8qKiBEZWZhdWx0IHBlci1yZXF1ZXN0IG5ldHdvcmsgdGltZW91dCAobXMpIGZvciBzZWFyY2ggKyBmZXRjaC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSA2MF8wMDA7XG5cbi8qKiBBcHBLaXQgY29uZmlnIGFjY2VwdGVkIGJ5IHRoZSB3ZWItc2VhcmNoIHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBHUFQgcHJlZmVyZW5jZSB1c2VkIHdoZW4gbm8gY2FwYWJsZSBHZW1pbmkgaXMgYXZhaWxhYmxlLiBBY2NlcHRzIGFcbiAgICogRGF0YWJyaWNrcyBzZXJ2aW5nIGVuZHBvaW50IG5hbWUgb3IgbG9vc2UgZmFtaWx5IHNlYXJjaCBhbmQgZmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9NT0RFTGAsIHRoZW4gYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYC5cbiAgICovXG4gIG1vZGVsPzogc3RyaW5nO1xuICAvKipcbiAgICogUHJpb3JpdHktb3JkZXJlZCB3ZWItc2VhcmNoIG1vZGVsIGNhbmRpZGF0ZXMgdHJpZWQgd2hlbiB7QGxpbmsgbW9kZWx9IGlzXG4gICAqIHVuc2V0LCBlYWNoIGZ1enp5LW1hdGNoZWQgYW5kIGNoZWNrZWQgZm9yIHdlYi1zZWFyY2ggc3VwcG9ydC4gRmFsbHMgYmFja1xuICAgKiB0byBgV0VCX1NFQVJDSF9NT0RFTF9GQUxMQkFDS1NgIChjb21tYS9zcGFjZS1zZXBhcmF0ZWQpLCB0aGVuXG4gICAqIHtAbGluayBERUZBVUxUX01PREVMX0ZBTExCQUNLU30gKEdlbWluaSwgdGhlbiBHUFQpLlxuICAgKi9cbiAgbW9kZWxGYWxsYmFja3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIC0+IHJlcXVlc3QtZnJhZ21lbnQgb3ZlcnJpZGUgbWFwLCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW5cbiAgICoge0BsaW5rIFdFQl9TRUFSQ0hfUFJPVklERVJTfSBkZWZhdWx0cy4gS2V5ZWQgYnkgcHJvdmlkZXIgZmFtaWx5XG4gICAqIChgXCJvcGVuYWlcImAsIGBcImdlbWluaVwiYCk7IGVhY2ggdmFsdWUgbWF5IG92ZXJyaWRlIHRoZSBgcmVxdWVzdGAgZnJhZ21lbnRcbiAgICogYW5kL29yIHRoZSBgYXBpYCBzdXJmYWNlLiBVc2UgdG8gY2hhbmdlIHRoZSB0b29sIHNoYXBlIGFzIHRoZSBwbGF0Zm9ybVxuICAgKiBldm9sdmVzIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS4gRmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9UT09MU2AgcGFyc2VkIGFzXG4gICAqIEpTT04uIFRoaXMgaXMgdGhlIGBXRUJfU0VBUkNIX1RPT0xTYCBzZXR0aW5nLlxuICAgKi9cbiAgd2ViU2VhcmNoVG9vbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEVuYWJsZSBmdXp6eSBtYXRjaGluZyBvZiBsb29zZSBtb2RlbCBuYW1lcyBhZ2FpbnN0IHRoZSBjYXRhbG9ndWUuXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYDsgZmFsbHMgYmFjayB0byBgV0VCX1NFQVJDSF9GVVpaWWAuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyBmdXp6eSB0aHJlc2hvbGQuIEZhbGxzIGJhY2sgdG8gYFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEYCwgdGhlbiB0aGUgc2hhcmVkIGRlZmF1bHQuICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIYXJkIGNhcCBvbiB0aGUgbnVtYmVyIG9mIGNpdGF0aW9ucyBhIHNpbmdsZSBzZWFyY2ggcmV0dXJucy4gRmFsbHMgYmFja1xuICAgKiB0byBgV0VCX1NFQVJDSF9NQVhfQ0lUQVRJT05TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9NQVhfQ0lUQVRJT05TfS5cbiAgICovXG4gIG1heENpdGF0aW9ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhhcmQgY2FwIG9uIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgc2luZ2xlIGB3ZWJfZmV0Y2hgIHJlc3VsdC4gRmFsbHNcbiAgICogYmFjayB0byBgV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9GRVRDSF9NQVhfTEVOR1RIfS5cbiAgICovXG4gIGZldGNoTWF4TGVuZ3RoPzogbnVtYmVyO1xuICAvKipcbiAgICogUGVyLXJlcXVlc3QgbmV0d29yayB0aW1lb3V0IGluIG1zIGZvciBzZWFyY2ggKyBmZXRjaC4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9USU1FT1VUX01TYCwgdGhlbiB7QGxpbmsgREVGQVVMVF9USU1FT1VUX01TfS5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEZhbGwgYmFjayB0byBhIER1Y2tEdWNrR28gc2NyYXBlIHdoZW4gdGhlIHdvcmtzcGFjZSBoYXMgTk8gZGVwbG95ZWRcbiAgICogd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsIChubyBHUFQgLyBHZW1pbmkgc2VydmluZyBlbmRwb2ludCkuIFRoZSBuYXRpdmVcbiAgICogRGF0YWJyaWNrcyB0b29sIGlzIGFsd2F5cyBwcmVmZXJyZWQ7IHRoaXMgb25seSBraWNrcyBpbiB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIG5hdGl2ZSBvcHRpb24sIHNvIHRoZSB0b29sIHN0aWxsIHJldHVybnMgcmVzdWx0cyBpbnN0ZWFkIG9mIGVycm9yaW5nLlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldCBgZmFsc2VgIChvciBgV0VCX1NFQVJDSF9TQ1JBUEVfRkFMTEJBQ0s9MGApIHRvXG4gICAqIHJlcXVpcmUgYSBuYXRpdmUgbW9kZWwgYW5kIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG4gIHNjcmFwZUZhbGxiYWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoaWNoIFVSTHMgdGhlIHRvb2xzIG1heSByZWFjaCAoe0BsaW5rIFVybFBvbGljeU1vZGV9KS4gRmFsbHMgYmFjayB0b1xuICAgKiBgV0VCX1NFQVJDSF9VUkxfUE9MSUNZYCwgdGhlbiB0byBgXCJhbGxvd2xpc3RcImAgd2hlbiB7QGxpbmsgYWxsb3dlZFVybHN9XG4gICAqIGhhcyBlbnRyaWVzIGFuZCBgXCJ1bnJlc3RyaWN0ZWRcImAgd2hlbiBpdCBkb2VzIG5vdC4gTmFtaW5nIHRoZSBtb2RlXG4gICAqIGV4cGxpY2l0bHkgaXMgdGhlIHdheSB0byBzdGF0ZSB0aGF0IGFuIG9wZW4gZGVwbG95bWVudCBpcyBpbnRlbmRlZDtcbiAgICogYFwiYWxsb3dsaXN0XCJgIHdpdGggbm8gZW50cmllcywgb3IgYFwidW5yZXN0cmljdGVkXCJgIGFsb25nc2lkZSBlbnRyaWVzLCBpc1xuICAgKiBhIGNvbnRyYWRpY3Rpb24gYW5kIGZhaWxzIGF0IHJlc29sdXRpb24uXG4gICAqL1xuICB1cmxQb2xpY3k/OiBVcmxQb2xpY3lNb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgVVJMIGFsbG93LWxpc3QuIEVhY2ggZW50cnkgaXMgYSBnbG9iIChvciBiYXJlIGhvc3QpIHRlc3RlZFxuICAgKiBhZ2FpbnN0IGEgVVJMJ3MgZnVsbCBgaHJlZmAuIFdoZW4gc2V0LCBgd2ViX3NlYXJjaGAgc2lsZW50bHkgZmlsdGVyc1xuICAgKiBjaXRhdGlvbnMgdG8gdGhlIHBlcm1pdHRlZCBzZXQgYW5kIGB3ZWJfZmV0Y2hgIHJlZnVzZXMgYSBkaXNhbGxvd2VkIFVSTC5cbiAgICogQWNjZXB0cyBhIGBzdHJpbmdbXWAgb3IgYSBjb21tYS0vd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nOyBmYWxscyBiYWNrXG4gICAqIHRvIGBXRUJfU0VBUkNIX0FMTE9XRURfVVJMU2AuIE9taXQgKG9yIGxlYXZlIGVtcHR5KSBmb3Igbm8gcmVzdHJpY3Rpb24uXG4gICAqIFNlZSBgYWxsb3dsaXN0LnRzYC5cbiAgICovXG4gIGFsbG93ZWRVcmxzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKlxuICAgKiBBcHByb3ZhbCBnYXRlIGFwcGxpZWQgdG8gQk9USCB0b29scyAocGVyLXRvb2wgb3ZlcnJpZGVzIHZpYVxuICAgKiB7QGxpbmsgV2ViU2VhcmNoVG9vbE9wdGlvbnMuYXBwcm92YWx9IHdpbikuIGB0cnVlYCBnYXRlcyBldmVyeSBjYWxsO1xuICAgKiBhIFVSTC1wYXR0ZXJuIChvciBsaXN0KSBnYXRlcyBvbmx5IG1hdGNoaW5nIGNhbGxzOyBhblxuICAgKiB7QGxpbmsgQXBwcm92YWxQb2xpY3l9IHN0YXRlcyB0aGUgbW9kZSBkaXJlY3RseS4gT21pdCBmb3Igbm8gYXBwcm92YWwuXG4gICAqL1xuICBhcHByb3ZhbD86IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogQ29uY3JldGUsIHZhbGlkYXRlZCBjb25maWcgdGhlIHJ1bnRpbWUgKyB0b29scyByZWFkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyB7XG4gIC8qKiBQaW5uZWQgd2ViLXNlYXJjaCBtb2RlbCwgd2hlbiBjb25maWd1cmVkIChlbHNlIHVuZGVmaW5lZCAtIHVzZSBmYWxsYmFja3MpLiAqL1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqIFdoZXJlIHtAbGluayBtb2RlbH0gY2FtZSBmcm9tLCB3aGljaCBkZWNpZGVzIHdoZXRoZXIgYW4gdW5zdXBwb3J0ZWQgcGluIGlzIGZhdGFsLiAqL1xuICBtb2RlbFNvdXJjZTogTW9kZWxTb3VyY2U7XG4gIC8qKiBPcmRlcmVkIGZhbGxiYWNrIG1vZGVsIGNhbmRpZGF0ZXMgKEdlbWluaSwgdGhlbiBHUFQsIHRoZW4gYSBmbG9vcikuICovXG4gIG1vZGVsRmFsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFByb3ZpZGVyIC0+IHJlcXVlc3QtZnJhZ21lbnQgb3ZlcnJpZGUgbWFwLCBtZXJnZWQgb3ZlciB0aGUgYnVpbHQtaW4gZGVmYXVsdHMuICovXG4gIHdlYlNlYXJjaFRvb2xzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFdoZXRoZXIgdG8gZnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMuICovXG4gIGZ1enp5OiBib29sZWFuO1xuICAvKiogRnVzZS5qcyBmdXp6eSB0aHJlc2hvbGQuICovXG4gIGZ1enp5VGhyZXNob2xkOiBudW1iZXI7XG4gIG1heENpdGF0aW9uczogbnVtYmVyO1xuICBmZXRjaE1heExlbmd0aDogbnVtYmVyO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdG8gc2NyYXBlLWZhbGxiYWNrIHdoZW4gbm8gbmF0aXZlIHdlYi1zZWFyY2ggbW9kZWwgaXMgZGVwbG95ZWQuICovXG4gIHNjcmFwZUZhbGxiYWNrOiBib29sZWFuO1xuICAvKiogVGhlIG5hbWVkIFVSTCBwb2xpY3kgaW4gZm9yY2UuICovXG4gIHVybFBvbGljeTogVXJsUG9saWN5TW9kZTtcbiAgLyoqIENvbXBpbGVkIGFsbG93LWxpc3QgKHBlcm1pdC1hbGwgdW5kZXIgdGhlIGB1bnJlc3RyaWN0ZWRgIHBvbGljeSkuICovXG4gIGFsbG93TGlzdDogVXJsQWxsb3dMaXN0O1xuICAvKiogRGVmYXVsdCBwZXItdG9vbCBhcHByb3ZhbCBwb2xpY3kuICovXG4gIGFwcHJvdmFsOiBBcHByb3ZhbFBvbGljeTtcbn1cblxuLyoqIEpTT04gU2NoZW1hIHB1Ymxpc2hlZCBvbiB0aGUgbWFuaWZlc3QncyBgY29uZmlnLnNjaGVtYWAuICovXG5leHBvcnQgY29uc3QgV0VCX1NFQVJDSF9DT05GSUdfU0NIRU1BOiBKU09OU2NoZW1hNyA9IHtcbiAgdHlwZTogXCJvYmplY3RcIixcbiAgcHJvcGVydGllczoge1xuICAgIG1vZGVsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGVmYXVsdCB3ZWItc2VhcmNoIG1vZGVsIChlbmRwb2ludCBuYW1lLCBsb29zZSBuYW1lLCBvciBjbGFzcykuIEZ1enp5LW1hdGNoZWQuIEVudjogV0VCX1NFQVJDSF9NT0RFTCwgdGhlbiBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRS5cIixcbiAgICB9LFxuICAgIG1vZGVsRmFsbGJhY2tzOiB7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJPcmRlcmVkIHdlYi1zZWFyY2ggbW9kZWwgY2FuZGlkYXRlcyB3aGVuIGBtb2RlbGAgaXMgdW5zZXQgKEdlbWluaSwgdGhlbiBHUFQpLiBFbnY6IFdFQl9TRUFSQ0hfTU9ERUxfRkFMTEJBQ0tTLlwiLFxuICAgIH0sXG4gICAgd2ViU2VhcmNoVG9vbHM6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1Byb3ZpZGVyIC0+IHJlcXVlc3QtZnJhZ21lbnQgb3ZlcnJpZGUgbWFwIG1lcmdlZCBvdmVyIHRoZSBidWlsdC1pbiBkZWZhdWx0cyAob3BlbmFpIC0+IHtcInRvb2xzXCI6W3tcInR5cGVcIjpcIndlYl9zZWFyY2hcIn1dfSwgZ2VtaW5pIC0+IHtcImdvb2dsZV9zZWFyY2hcIjp7fX0pLiBFbnY6IFdFQl9TRUFSQ0hfVE9PTFMgKEpTT04pLicsXG4gICAgfSxcbiAgICBtb2RlbEZ1enp5TWF0Y2g6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgYWdhaW5zdCB0aGUgbGl2ZSBjYXRhbG9ndWUuIERlZmF1bHQgdHJ1ZSAoZW52OiBXRUJfU0VBUkNIX0ZVWlpZKS5cIixcbiAgICB9LFxuICAgIG1vZGVsRnV6enlUaHJlc2hvbGQ6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXNlLmpzIHNjb3JlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBhIGZ1enp5IG1vZGVsIG1hdGNoIGlzIGFjY2VwdGVkIChlbnY6IFdFQl9TRUFSQ0hfRlVaWllfVEhSRVNIT0xEKS5cIixcbiAgICB9LFxuICAgIG1heENpdGF0aW9uczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkhhcmQgY2FwIG9uIGNpdGF0aW9ucyByZXR1cm5lZCAoZW52OiBXRUJfU0VBUkNIX01BWF9DSVRBVElPTlMpLlwiLFxuICAgIH0sXG4gICAgZmV0Y2hNYXhMZW5ndGg6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJIYXJkIGNhcCBvbiB3ZWJfZmV0Y2ggY29udGVudCBsZW5ndGggKGVudjogV0VCX1NFQVJDSF9GRVRDSF9NQVhfTEVOR1RIKS5cIixcbiAgICB9LFxuICAgIHRpbWVvdXRNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlBlci1yZXF1ZXN0IG5ldHdvcmsgdGltZW91dCBpbiBtcyAoZW52OiBXRUJfU0VBUkNIX1RJTUVPVVRfTVMpLlwiLFxuICAgIH0sXG4gICAgc2NyYXBlRmFsbGJhY2s6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRmFsbCBiYWNrIHRvIGEgRHVja0R1Y2tHbyBzY3JhcGUgd2hlbiBubyB3ZWItc2VhcmNoLWNhcGFibGUgbW9kZWwgaXMgZGVwbG95ZWQuIERlZmF1bHQgdHJ1ZSAoZW52OiBXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDSykuXCIsXG4gICAgfSxcbiAgICB1cmxQb2xpY3k6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJ1bnJlc3RyaWN0ZWRcIiwgXCJhbGxvd2xpc3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJXaGljaCBVUkxzIHRoZSB0b29scyBtYXkgcmVhY2guIERlZmF1bHRzIHRvIGFsbG93bGlzdCB3aGVuIGFsbG93ZWRVcmxzIGhhcyBlbnRyaWVzLCBlbHNlIHVucmVzdHJpY3RlZCAoZW52OiBXRUJfU0VBUkNIX1VSTF9QT0xJQ1kpLlwiLFxuICAgIH0sXG4gICAgYWxsb3dlZFVybHM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnVVJMIGFsbG93LWxpc3Qgb2YgZ2xvYnMgLyBiYXJlIGhvc3RzIChlLmcuIFwiKi5kYXRhYnJpY2tzLmNvbVwiLCBcImRvY3MuZXhhbXBsZS5jb21cIikuIEFsc28gYWNjZXB0cyBhIGNvbW1hL3NwYWNlLXNlcGFyYXRlZCBzdHJpbmcuIEZhbGxzIGJhY2sgdG8gV0VCX1NFQVJDSF9BTExPV0VEX1VSTFMuIEVtcHR5ID0gdW5yZXN0cmljdGVkLicsXG4gICAgfSxcbiAgICBhcHByb3ZhbDoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdBcHByb3ZhbCBnYXRlIGZvciBib3RoIHRvb2xzOiB0cnVlIGdhdGVzIGV2ZXJ5IGNhbGwsIGEgZ2xvYiAob3IgbGlzdCBvZiBnbG9icykgZ2F0ZXMgb25seSBtYXRjaGluZyBVUkxzLCBvciBzdGF0ZSB0aGUgbW9kZSBkaXJlY3RseSBhcyB7XCJtb2RlXCI6XCJub25lXCJ8XCJhbHdheXNcInxcInVybHNcIn0uIERlZmF1bHQgbm9uZS4nLFxuICAgICAgb25lT2Y6IFtcbiAgICAgICAgeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtb2RlOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcIm5vbmVcIiwgXCJhbHdheXNcIiwgXCJ1cmxzXCJdIH0sXG4gICAgICAgICAgICBwYXR0ZXJuczogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFtcIm1vZGVcIl0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBgV0VCX1NFQVJDSF9UT09MU2AgZW52IHZhciAoSlNPTiBvYmplY3QpLCBlbHNlIGB7fWAuIEEgdmFsdWUgdGhhdFxuICogaXMgc2V0IGJ1dCBub3QgYSBKU09OIG9iamVjdCBpcyBhIGRlcGxveW1lbnQgbWlzdGFrZSB0aGF0IHdvdWxkIG90aGVyd2lzZVxuICogc2lsZW50bHkgbGVhdmUgdGhlIGJ1aWx0LWluIHRvb2wgc3BlY3MgaW4gcGxhY2UsIHNvIGl0IHRocm93cy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VUb29sc0VudigpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHJhdyA9IGNvbmZpZ1V0aWxzLnRleHQoXCJXRUJfU0VBUkNIX1RPT0xTXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4ge307XG4gIGNvbnN0IHBhcnNlZCA9IGpzb24ucGFyc2VSZWNvcmQocmF3KTtcbiAgaWYgKCFwYXJzZWQpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgXCJXRUJfU0VBUkNIX1RPT0xTIG11c3QgYmUgYSBKU09OIG9iamVjdCBtYXBwaW5nIGEgcHJvdmlkZXIgZmFtaWx5IHRvIGl0cyByZXF1ZXN0IGZyYWdtZW50XCIsXG4gICAgICB7IGNvbnRleHQ6IHsgZW52VmFyOiBcIldFQl9TRUFSQ0hfVE9PTFNcIiB9IH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG4vKiogUmVhZCB0aGUgcGlubmVkIGVuZHBvaW50IGlkIGFuZCByZWNvcmQgd2hpY2ggc291cmNlIHN1cHBsaWVkIGl0LiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU1vZGVsUGluKGNvbmZpZzogV2ViU2VhcmNoUGx1Z2luQ29uZmlnKTogeyBtb2RlbD86IHN0cmluZzsgc291cmNlOiBNb2RlbFNvdXJjZSB9IHtcbiAgY29uc3QgZnJvbUNvbmZpZyA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoY29uZmlnLm1vZGVsKTtcbiAgaWYgKGZyb21Db25maWcgIT09IG51bGwpIHJldHVybiB7IG1vZGVsOiBmcm9tQ29uZmlnLCBzb3VyY2U6IFwiY29uZmlnXCIgfTtcbiAgY29uc3QgZnJvbU1vZGVsRW52ID0gY29uZmlnVXRpbHMudGV4dChNT0RFTF9FTlYsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgaWYgKGZyb21Nb2RlbEVudiAhPT0gdW5kZWZpbmVkKSByZXR1cm4geyBtb2RlbDogZnJvbU1vZGVsRW52LCBzb3VyY2U6IE1PREVMX0VOViB9O1xuICBjb25zdCBmcm9tUmVzb3VyY2VFbnYgPSBjb25maWdVdGlscy50ZXh0KFNFUlZJTkdfRU5EUE9JTlRfRU5WLCBjb25maWdVdGlscy5FTlZfT05MWSk7XG4gIGlmIChmcm9tUmVzb3VyY2VFbnYgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7IG1vZGVsOiBmcm9tUmVzb3VyY2VFbnYsIHNvdXJjZTogU0VSVklOR19FTkRQT0lOVF9FTlYgfTtcbiAgfVxuICByZXR1cm4geyBzb3VyY2U6IFwibm9uZVwiIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbmFtZWQge0BsaW5rIFVybFBvbGljeU1vZGV9LCBmYWlsaW5nIG9uIGEgc3RhdGVkIG1vZGUgdGhhdFxuICogY29udHJhZGljdHMgdGhlIGFsbG93LWxpc3QgZW50cmllcyBpdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVVcmxQb2xpY3koXG4gIGNvbmZpZ3VyZWQ6IFVybFBvbGljeU1vZGUgfCB1bmRlZmluZWQsXG4gIHBhdHRlcm5zOiByZWFkb25seSBzdHJpbmdbXSxcbik6IFVybFBvbGljeU1vZGUge1xuICBjb25zdCByYXcgPSBjb25maWd1cmVkID8/IGNvbmZpZ1V0aWxzLnRleHQoXCJXRUJfU0VBUkNIX1VSTF9QT0xJQ1lcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHJldHVybiBwYXR0ZXJucy5sZW5ndGggPiAwID8gXCJhbGxvd2xpc3RcIiA6IFwidW5yZXN0cmljdGVkXCI7XG4gIGlmIChyYXcgIT09IFwiYWxsb3dsaXN0XCIgJiYgcmF3ICE9PSBcInVucmVzdHJpY3RlZFwiKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgICd1cmxQb2xpY3kgbXVzdCBiZSBcImFsbG93bGlzdFwiIG9yIFwidW5yZXN0cmljdGVkXCIgKGVudjogV0VCX1NFQVJDSF9VUkxfUE9MSUNZKScsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwidXJsUG9saWN5XCIsIGVudlZhcjogXCJXRUJfU0VBUkNIX1VSTF9QT0xJQ1lcIiB9IH0sXG4gICAgKTtcbiAgfVxuICBpZiAocmF3ID09PSBcImFsbG93bGlzdFwiICYmIHBhdHRlcm5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAndXJsUG9saWN5IFwiYWxsb3dsaXN0XCIgbmVlZHMgYXQgbGVhc3Qgb25lIGVudHJ5IGluIGFsbG93ZWRVcmxzIChlbnY6IFdFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTKScsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwiYWxsb3dlZFVybHNcIiwgZW52VmFyOiBcIldFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgaWYgKHJhdyA9PT0gXCJ1bnJlc3RyaWN0ZWRcIiAmJiBwYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgICd1cmxQb2xpY3kgXCJ1bnJlc3RyaWN0ZWRcIiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbGxvd2VkVXJscyBlbnRyaWVzOyBkcm9wIHRoZSBlbnRyaWVzIG9yIHNldCB1cmxQb2xpY3kgdG8gXCJhbGxvd2xpc3RcIicsXG4gICAgICB7IGNvbnRleHQ6IHsgZmllbGQ6IFwiYWxsb3dlZFVybHNcIiwgZW52VmFyOiBcIldFQl9TRUFSQ0hfQUxMT1dFRF9VUkxTXCIgfSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJhdztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYW55IGFjY2VwdGVkIGFwcHJvdmFsIHNwZWxsaW5nIGludG8gYW4ge0BsaW5rIEFwcHJvdmFsUG9saWN5fS5cbiAqIEEgcGF0dGVybiBnYXRlIHdpdGggbm8gdXNhYmxlIHBhdHRlcm5zIGNvbGxhcHNlcyB0byBgXCJub25lXCJgIHJhdGhlciB0aGFuXG4gKiBnYXRpbmcgZXZlcnl0aGluZywgc28gYSBibGFuayBlbnYgdmFyIGNhbiBuZXZlciB3ZWRnZSB0aGUgdG9vbHMgYmVoaW5kIGFuXG4gKiBhcHByb3ZhbCBub2JvZHkgY29uZmlndXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXBwcm92YWxQb2xpY3koZ2F0ZTogQXBwcm92YWxHYXRlIHwgQXBwcm92YWxQb2xpY3kgfCB1bmRlZmluZWQpOiBBcHByb3ZhbFBvbGljeSB7XG4gIGlmIChnYXRlID09PSB1bmRlZmluZWQgfHwgZ2F0ZSA9PT0gZmFsc2UpIHJldHVybiB7IG1vZGU6IFwibm9uZVwiIH07XG4gIGlmIChnYXRlID09PSB0cnVlKSByZXR1cm4geyBtb2RlOiBcImFsd2F5c1wiIH07XG4gIGlmIChvYmplY3QuaXNSZWNvcmQoZ2F0ZSkgJiYgXCJtb2RlXCIgaW4gZ2F0ZSkge1xuICAgIGlmIChnYXRlLm1vZGUgPT09IFwidXJsc1wiKSB7XG4gICAgICBjb25zdCBwYXR0ZXJucyA9IHBhcnNlQWxsb3dlZFVybHMoWy4uLmdhdGUucGF0dGVybnNdKTtcbiAgICAgIHJldHVybiBwYXR0ZXJucy5sZW5ndGggPiAwID8geyBtb2RlOiBcInVybHNcIiwgcGF0dGVybnMgfSA6IHsgbW9kZTogXCJub25lXCIgfTtcbiAgICB9XG4gICAgaWYgKGdhdGUubW9kZSA9PT0gXCJhbHdheXNcIiB8fCBnYXRlLm1vZGUgPT09IFwibm9uZVwiKSByZXR1cm4geyBtb2RlOiBnYXRlLm1vZGUgfTtcbiAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdhcHByb3ZhbCBtb2RlIG11c3QgYmUgXCJub25lXCIsIFwiYWx3YXlzXCIgb3IgXCJ1cmxzXCInLCB7XG4gICAgICBjb250ZXh0OiB7IGZpZWxkOiBcImFwcHJvdmFsXCIgfSxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBwYXR0ZXJucyA9IHBhcnNlQWxsb3dlZFVybHModHlwZW9mIGdhdGUgPT09IFwic3RyaW5nXCIgPyBnYXRlIDogWy4uLmdhdGVdKTtcbiAgcmV0dXJuIHBhdHRlcm5zLmxlbmd0aCA+IDAgPyB7IG1vZGU6IFwidXJsc1wiLCBwYXR0ZXJucyB9IDogeyBtb2RlOiBcIm5vbmVcIiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzIGludG8gdGhlIGNvbmNyZXRlXG4gKiB7QGxpbmsgUmVzb2x2ZWRXZWJTZWFyY2hDb25maWd9LiBXaGljaCBtb2RlbCBpcyB1c2VkIHN0YXlzIGxhenkgLSBpdCBpc1xuICogcGlja2VkIGF0IGNhbGwgdGltZSBhZ2FpbnN0IHRoZSBsaXZlIGNhdGFsb2d1ZSAtIGJ1dCBldmVyeXRoaW5nIGVsc2UgaXNcbiAqIHNldHRsZWQgaGVyZSwgYW5kIGEgY29udHJhZGljdGlvbiAodW5wYXJzZWFibGUgYFdFQl9TRUFSQ0hfVE9PTFNgLCBhblxuICogdW5rbm93biBVUkwgcG9saWN5LCBhIHBvbGljeSB0aGF0IGRpc2FncmVlcyB3aXRoIGl0cyBhbGxvdy1saXN0KSB0aHJvd3MgYVxuICoge0BsaW5rIENvbmZpZ3VyYXRpb25FcnJvcn0gbmFtaW5nIHRoZSBmaWVsZCBhbmQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdlYlNlYXJjaENvbmZpZyhcbiAgY29uZmlnOiBXZWJTZWFyY2hQbHVnaW5Db25maWcgPSB7fSxcbik6IFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIHtcbiAgY29uc3QgcGF0dGVybnMgPSBwYXJzZUFsbG93ZWRVcmxzKFxuICAgIGNvbmZpZy5hbGxvd2VkVXJscyA/PyBjb25maWdVdGlscy50ZXh0KFwiV0VCX1NFQVJDSF9BTExPV0VEX1VSTFNcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpLFxuICApO1xuICBjb25zdCB1cmxQb2xpY3kgPSByZXNvbHZlVXJsUG9saWN5KGNvbmZpZy51cmxQb2xpY3ksIHBhdHRlcm5zKTtcbiAgY29uc3QgeyBtb2RlbCwgc291cmNlIH0gPSByZXNvbHZlTW9kZWxQaW4oY29uZmlnKTtcbiAgY29uc3QgZmFsbGJhY2tzID0gY29uZmlnVXRpbHMubGlzdChcbiAgICBjb25maWcubW9kZWxGYWxsYmFja3MsXG4gICAgXCJXRUJfU0VBUkNIX01PREVMX0ZBTExCQUNLU1wiLFxuICAgIHVuZGVmaW5lZCxcbiAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICAuLi4obW9kZWwgPyB7IG1vZGVsIH0gOiB7fSksXG4gICAgbW9kZWxTb3VyY2U6IHNvdXJjZSxcbiAgICBtb2RlbEZhbGxiYWNrczogZmFsbGJhY2tzLmxlbmd0aCA+IDAgPyBmYWxsYmFja3MgOiBERUZBVUxUX01PREVMX0ZBTExCQUNLUyxcbiAgICB3ZWJTZWFyY2hUb29sczogeyAuLi5wYXJzZVRvb2xzRW52KCksIC4uLihjb25maWcud2ViU2VhcmNoVG9vbHMgPz8ge30pIH0sXG4gICAgZnV6enk6XG4gICAgICBjb25maWdVdGlscy5ib29sZWFuKGNvbmZpZy5tb2RlbEZ1enp5TWF0Y2gsIFwiV0VCX1NFQVJDSF9GVVpaWVwiLCBjb25maWdVdGlscy5FTlZfT05MWSkgPz8gdHJ1ZSxcbiAgICBmdXp6eVRocmVzaG9sZDogY29uZmlnVXRpbHMucG9zaXRpdmVOdW1iZXIoXG4gICAgICBjb25maWcubW9kZWxGdXp6eVRocmVzaG9sZCxcbiAgICAgIFwiV0VCX1NFQVJDSF9GVVpaWV9USFJFU0hPTERcIixcbiAgICAgIG1vZGVsQ2F0YWxvZy5ERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCxcbiAgICAgIGNvbmZpZ1V0aWxzLkVOVl9PTkxZLFxuICAgICksXG4gICAgbWF4Q2l0YXRpb25zOiBjb25maWdVdGlscy5wb3NpdGl2ZUludChcbiAgICAgIGNvbmZpZy5tYXhDaXRhdGlvbnMsXG4gICAgICBcIldFQl9TRUFSQ0hfTUFYX0NJVEFUSU9OU1wiLFxuICAgICAgREVGQVVMVF9NQVhfQ0lUQVRJT05TLFxuICAgICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICAgKSxcbiAgICBmZXRjaE1heExlbmd0aDogY29uZmlnVXRpbHMucG9zaXRpdmVJbnQoXG4gICAgICBjb25maWcuZmV0Y2hNYXhMZW5ndGgsXG4gICAgICBcIldFQl9TRUFSQ0hfRkVUQ0hfTUFYX0xFTkdUSFwiLFxuICAgICAgREVGQVVMVF9GRVRDSF9NQVhfTEVOR1RILFxuICAgICAgY29uZmlnVXRpbHMuRU5WX09OTFksXG4gICAgKSxcbiAgICB0aW1lb3V0TXM6IGNvbmZpZ1V0aWxzLnBvc2l0aXZlSW50KFxuICAgICAgY29uZmlnLnRpbWVvdXRNcyxcbiAgICAgIFwiV0VCX1NFQVJDSF9USU1FT1VUX01TXCIsXG4gICAgICBERUZBVUxUX1RJTUVPVVRfTVMsXG4gICAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgICApLFxuICAgIHNjcmFwZUZhbGxiYWNrOlxuICAgICAgY29uZmlnVXRpbHMuYm9vbGVhbihcbiAgICAgICAgY29uZmlnLnNjcmFwZUZhbGxiYWNrLFxuICAgICAgICBcIldFQl9TRUFSQ0hfU0NSQVBFX0ZBTExCQUNLXCIsXG4gICAgICAgIGNvbmZpZ1V0aWxzLkVOVl9PTkxZLFxuICAgICAgKSA/PyB0cnVlLFxuICAgIHVybFBvbGljeSxcbiAgICBhbGxvd0xpc3Q6IHRvVXJsQWxsb3dMaXN0KHVybFBvbGljeSA9PT0gXCJhbGxvd2xpc3RcIiA/IHBhdHRlcm5zIDogW10pLFxuICAgIGFwcHJvdmFsOiB0b0FwcHJvdmFsUG9saWN5KGNvbmZpZy5hcHByb3ZhbCksXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBhcHByb3ZhbCBnYXRlIGFnYWluc3QgYSBzZXQgb2YgY2FuZGlkYXRlIFVSTHMgaW50byBhIGNvbmNyZXRlXG4gKiBib29sZWFuOiBgXCJub25lXCJgIC8gYFwiYWx3YXlzXCJgIHBhc3Mgc3RyYWlnaHQgdGhyb3VnaDsgYSBgXCJ1cmxzXCJgIHBvbGljeVxuICogZ2F0ZXMgd2hlbiBBTlkgY2FuZGlkYXRlIG1hdGNoZXMuIEVtcHR5IGNhbmRpZGF0ZXMgd2l0aCBhIHBhdHRlcm4gZ2F0ZVxuICogbmV2ZXIgbWF0Y2ggKG5vdGhpbmcgdG8gYXBwcm92ZSkuIFJldXNlcyB0aGUgYWxsb3ctbGlzdCBtYXRjaGVyIHNvIGFwcHJvdmFsXG4gKiBnbG9icyByZWFkIGV4YWN0bHkgbGlrZSBhbGxvdy1saXN0IGdsb2JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwcm92YWxNYXRjaGVzKFxuICBnYXRlOiBBcHByb3ZhbEdhdGUgfCBBcHByb3ZhbFBvbGljeSxcbiAgdXJsczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgcG9saWN5ID0gdG9BcHByb3ZhbFBvbGljeShnYXRlKTtcbiAgaWYgKHBvbGljeS5tb2RlID09PSBcIm5vbmVcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAocG9saWN5Lm1vZGUgPT09IFwiYWx3YXlzXCIpIHJldHVybiB0cnVlO1xuICBjb25zdCBsaXN0ID0gdG9VcmxBbGxvd0xpc3QocG9saWN5LnBhdHRlcm5zKTtcbiAgcmV0dXJuIHVybHMuc29tZSgodXJsKSA9PiBsaXN0LmFsbG93cyh1cmwpKTtcbn1cbiJdfQ==
package/lib/src/fetch.js CHANGED
@@ -56,6 +56,9 @@ export async function runWebFetch(request, runtimeOrConfig, signal) {
56
56
  ]), async (executeSignal) => {
57
57
  const response = await gotScraping({
58
58
  url: request.url,
59
+ // Bun's node:http2 reports default-port origins with :443 while
60
+ // http2-wrapper compares them against URL-normalized origins.
61
+ http2: false,
59
62
  // got's own timeout aborts the socket and reports which phase timed
60
63
  // out; the interceptor timeout bounds the whole attempt around it.
61
64
  timeout: { request: config.timeoutMs },
@@ -98,4 +101,4 @@ export async function runWebFetch(request, runtimeOrConfig, signal) {
98
101
  truncated,
99
102
  };
100
103
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBOEIsTUFBTSxjQUFjLENBQUM7QUFHM0YsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBVTlDLG1FQUFtRTtBQUNuRSxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNwRSxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLFNBQVMsUUFBUSxDQUFDLElBQVksRUFBRSxHQUFXO0lBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHO1FBQUUsT0FBTyxFQUFF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LENBQUM7SUFDNUYsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRTNELE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1FBQ3RCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztRQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtRQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQ3ZCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN4QixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQzFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7UUFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7UUFDdkIsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlELEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPO1FBQ1AsU0FBUztLQUNWLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYWdlIGZldGNoaW5nIG92ZXIge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2dvdC1zY3JhcGluZyB8IGdvdC1zY3JhcGluZ31cbiAqIC0gYSBgZ290YCB3cmFwcGVyIHRoYXQgZ2VuZXJhdGVzIGJyb3dzZXItbGlrZSBUTFMgKyBoZWFkZXIgZmluZ2VycHJpbnRzLCBzb1xuICogZmV0Y2hlcyBzdXJ2aXZlIHRoZSBib3Qgd2FsbHMgYSBwbGFpbiBgZmV0Y2hgIHRyaXBzLiB7QGxpbmsgcnVuV2ViRmV0Y2h9XG4gKiBlbmZvcmNlcyB0aGUgVVJMIGFsbG93LWxpc3QgKGFuIGV4cGxpY2l0IGZldGNoIG9mIGEgZGlzYWxsb3dlZCBVUkwgaXNcbiAqIHJlZnVzZWQsIG5vdCBzaWxlbnRseSBlbXB0aWVkKSwgZmV0Y2hlcyB3aXRoIHRoZSBwbHVnaW4ncyB0aW1lb3V0LCBhbmRcbiAqIHJldHVybnMgZWl0aGVyIHRoZSByYXcgSFRNTCBvciBhIHJlYWRhYmxlIHBsYWluLXRleHQgcmVkdWN0aW9uLCBjYXBwZWQgYXRcbiAqIHRoZSBjb25maWd1cmVkIGxlbmd0aC5cbiAqXG4gKiBUaGUgSFRNTC10by10ZXh0IHJlZHVjdGlvbiBpcyBkZWxpYmVyYXRlbHkgZGVwZW5kZW5jeS1mcmVlIChzdHJpcFxuICogc2NyaXB0L3N0eWxlLCB1bndyYXAgdGFncywgZGVjb2RlIGEgaGFuZGZ1bCBvZiBlbnRpdGllcywgY29sbGFwc2VcbiAqIHdoaXRlc3BhY2UpOiBnb29kIGVub3VnaCB0byBmZWVkIGEgbW9kZWwsIGFuZCBpdCBrZWVwcyB0aGUgYWRkLW9uJ3NcbiAqIGRlcGVuZGVuY3kgc3VyZmFjZSB0byB0aGUgdHdvIGxpYnJhcmllcyB0aGUgdGFzayBjYWxsZWQgZm9yLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZ290U2NyYXBpbmcgfSBmcm9tIFwiZ290LXNjcmFwaW5nXCI7XG5pbXBvcnQgeyBhc3NlcnRGZXRjaFVybEFsbG93ZWQgfSBmcm9tIFwiLi9fZmV0Y2gtdXJsLnRzXCI7XG5pbXBvcnQgeyB0b0NhbGxTZXR0aW5ncywgd2ViRmV0Y2hFeGVjdXRlRGVmYXVsdHMgfSBmcm9tIFwiLi9kZWZhdWx0cy50c1wiO1xuaW1wb3J0IHsgZGVjb2RlSHRtbEVudGl0aWVzLCBodG1sVG9UZXh0IH0gZnJvbSBcIi4vaHRtbC10ZXh0LnRzXCI7XG5pbXBvcnQgeyBleGVjdXRlUmVhZCwgdG9XZWJTZWFyY2hSdW50aW1lLCB0eXBlIFdlYlNlYXJjaFJ1bnRpbWVJbnB1dCB9IGZyb20gXCIuL3J1bnRpbWUudHNcIjtcbmltcG9ydCB0eXBlIHsgV2ViRmV0Y2hSZXF1ZXN0LCBXZWJGZXRjaFJlc3VsdCB9IGZyb20gXCIuL3NjaGVtYS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwid2ViLXNlYXJjaC9mZXRjaFwiKTtcblxuLyoqIFRoZSBzbGljZSBvZiBhIGdvdC1zY3JhcGluZyByZXNwb25zZSB0aGlzIG1vZHVsZSByZWFkcy4gKi9cbmludGVyZmFjZSBGZXRjaGVkUGFnZSB7XG4gIHVybDogc3RyaW5nO1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIGNvbnRlbnRUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGJvZHk6IHN0cmluZztcbn1cblxuLyoqIFB1bGwgdGhlIDx0aXRsZT4gdGV4dCBvdXQgb2YgYW4gSFRNTCBkb2N1bWVudCwgd2hlbiBwcmVzZW50LiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRpdGxlKGh0bWw6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hdGNoID0gLzx0aXRsZVtePl0qPihbXFxzXFxTXSo/KTxcXC90aXRsZT4vaS5leGVjKGh0bWwpO1xuICBjb25zdCB0aXRsZSA9IG1hdGNoPy5bMV0gPyBkZWNvZGVIdG1sRW50aXRpZXMobWF0Y2hbMV0pLnRyaW0oKSA6IFwiXCI7XG4gIHJldHVybiB0aXRsZS5sZW5ndGggPiAwID8gdGl0bGUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBUcnVuY2F0ZSBgdGV4dGAgdG8gYG1heGAgY2hhcnMsIHJlcG9ydGluZyB3aGV0aGVyIGl0IHdhcyBjdXQuICovXG5mdW5jdGlvbiB0cnVuY2F0ZSh0ZXh0OiBzdHJpbmcsIG1heDogbnVtYmVyKTogeyBjb250ZW50OiBzdHJpbmc7IHRydW5jYXRlZDogYm9vbGVhbiB9IHtcbiAgaWYgKHRleHQubGVuZ3RoIDw9IG1heCkgcmV0dXJuIHsgY29udGVudDogdGV4dCwgdHJ1bmNhdGVkOiBmYWxzZSB9O1xuICByZXR1cm4geyBjb250ZW50OiB0ZXh0LnNsaWNlKDAsIG1heCksIHRydW5jYXRlZDogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIEZldGNoIGEgc2luZ2xlIFVSTCBhbmQgcmV0dXJuIGl0cyBjb250ZW50IGluIHRoZSByZXF1ZXN0ZWQgZm9ybWF0LlxuICpcbiAqIFRocm93cyB3aGVuIHRoZSBVUkwgaXMgbm90IHBlcm1pdHRlZCBieSB0aGUgYWxsb3ctbGlzdCAodGhlIHZpc2libGUsXG4gKiBjb3JyZWN0YWJsZSBmYWlsdXJlIHRoZSBkZXNpZ24gY2FsbHMgZm9yIG9uIHRoZSBmZXRjaCBwYXRoKS4gVGhlIHJlcXVlc3Qnc1xuICogYG1heExlbmd0aGAgbmFycm93cyAobmV2ZXIgd2lkZW5zKSB0aGUgcGx1Z2luJ3MgYGZldGNoTWF4TGVuZ3RoYCBjYXAuXG4gKiBgc2lnbmFsYCBjYW5jZWxzIHRoZSBpbi1mbGlnaHQgZmV0Y2guXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XZWJGZXRjaChcbiAgcmVxdWVzdDogV2ViRmV0Y2hSZXF1ZXN0LFxuICBydW50aW1lT3JDb25maWc6IFdlYlNlYXJjaFJ1bnRpbWVJbnB1dCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFdlYkZldGNoUmVzdWx0PiB7XG4gIGNvbnN0IHJ1bnRpbWUgPSB0b1dlYlNlYXJjaFJ1bnRpbWUocnVudGltZU9yQ29uZmlnKTtcbiAgY29uc3QgeyBjb25maWcgfSA9IHJ1bnRpbWU7XG4gIGF3YWl0IGFzc2VydEZldGNoVXJsQWxsb3dlZChyZXF1ZXN0LnVybCwgY29uZmlnLmFsbG93TGlzdCk7XG4gIGNvbnN0IGNhcCA9IE1hdGgubWluKHJlcXVlc3QubWF4TGVuZ3RoID8/IGNvbmZpZy5mZXRjaE1heExlbmd0aCwgY29uZmlnLmZldGNoTWF4TGVuZ3RoKTtcblxuICAvLyBUaGUgcmVzcG9uc2UgaXMgY2FjaGVkIGJlZm9yZSB0aGUgZm9ybWF0IHJlZHVjdGlvbiwgc28gdGhlIHNhbWUgcGFnZSByZWFkXG4gIC8vIGFzIHRleHQgYW5kIGFzIGh0bWwgc2hhcmVzIG9uZSBuZXR3b3JrIHJvdW5kIHRyaXAuXG4gIGNvbnN0IHBhZ2UgPSBhd2FpdCBleGVjdXRlUmVhZChcbiAgICBydW50aW1lLFxuICAgIFwicGFnZS1mZXRjaFwiLFxuICAgIHRvQ2FsbFNldHRpbmdzKHdlYkZldGNoRXhlY3V0ZURlZmF1bHRzLCBjb25maWcudGltZW91dE1zLCBbXG4gICAgICBcIndlYi1zZWFyY2hcIixcbiAgICAgIFwiZmV0Y2hcIixcbiAgICAgIHJlcXVlc3QudXJsLFxuICAgICAgLi4uY29uZmlnLmFsbG93TGlzdC5wYXR0ZXJucyxcbiAgICBdKSxcbiAgICBhc3luYyAoZXhlY3V0ZVNpZ25hbCk6IFByb21pc2U8RmV0Y2hlZFBhZ2U+ID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ290U2NyYXBpbmcoe1xuICAgICAgICB1cmw6IHJlcXVlc3QudXJsLFxuICAgICAgICAvLyBnb3QncyBvd24gdGltZW91dCBhYm9ydHMgdGhlIHNvY2tldCBhbmQgcmVwb3J0cyB3aGljaCBwaGFzZSB0aW1lZFxuICAgICAgICAvLyBvdXQ7IHRoZSBpbnRlcmNlcHRvciB0aW1lb3V0IGJvdW5kcyB0aGUgd2hvbGUgYXR0ZW1wdCBhcm91bmQgaXQuXG4gICAgICAgIHRpbWVvdXQ6IHsgcmVxdWVzdDogY29uZmlnLnRpbWVvdXRNcyB9LFxuICAgICAgICB0aHJvd0h0dHBFcnJvcnM6IGZhbHNlLFxuICAgICAgICBmb2xsb3dSZWRpcmVjdDogdHJ1ZSxcbiAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICBiZWZvcmVSZXF1ZXN0OiBbXG4gICAgICAgICAgICBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBhc3NlcnRGZXRjaFVybEFsbG93ZWQoU3RyaW5nKG9wdGlvbnMudXJsKSwgY29uZmlnLmFsbG93TGlzdCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLihleGVjdXRlU2lnbmFsID8geyBzaWduYWw6IGV4ZWN1dGVTaWduYWwgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXJsOiByZXNwb25zZS51cmwgPz8gcmVxdWVzdC51cmwsXG4gICAgICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgIGNvbnRlbnRUeXBlOiByZXNwb25zZS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdLFxuICAgICAgICBib2R5OiB0eXBlb2YgcmVzcG9uc2UuYm9keSA9PT0gXCJzdHJpbmdcIiA/IHJlc3BvbnNlLmJvZHkgOiBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyBcIlwiKSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBzaWduYWwsXG4gICk7XG4gIGF3YWl0IGFzc2VydEZldGNoVXJsQWxsb3dlZChwYWdlLnVybCwgY29uZmlnLmFsbG93TGlzdCk7XG5cbiAgY29uc3QgaXNIdG1sID0gIXBhZ2UuY29udGVudFR5cGUgfHwgL2h0bWx8eG1sL2kudGVzdChwYWdlLmNvbnRlbnRUeXBlKTtcbiAgY29uc3QgcmF3Q29udGVudCA9IHJlcXVlc3QuZm9ybWF0ID09PSBcImh0bWxcIiB8fCAhaXNIdG1sID8gcGFnZS5ib2R5IDogaHRtbFRvVGV4dChwYWdlLmJvZHkpO1xuICBjb25zdCB7IGNvbnRlbnQsIHRydW5jYXRlZCB9ID0gdHJ1bmNhdGUocmF3Q29udGVudCwgY2FwKTtcbiAgY29uc3QgdGl0bGUgPSBpc0h0bWwgPyBleHRyYWN0VGl0bGUocGFnZS5ib2R5KSA6IHVuZGVmaW5lZDtcblxuICBsb2dnZXIuZGVidWcoXCJmZXRjaGVkXCIsIHtcbiAgICB1cmw6IHBhZ2UudXJsLFxuICAgIHN0YXR1czogcGFnZS5zdGF0dXNDb2RlLFxuICAgIGJ5dGVzOiBwYWdlLmJvZHkubGVuZ3RoLFxuICAgIHJldHVybmVkOiBjb250ZW50Lmxlbmd0aCxcbiAgICAuLi4odHJ1bmNhdGVkID8geyB0cnVuY2F0ZWQ6IHRydWUgfSA6IHt9KSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICB1cmw6IHBhZ2UudXJsLFxuICAgIHN0YXR1czogcGFnZS5zdGF0dXNDb2RlLFxuICAgIC4uLihwYWdlLmNvbnRlbnRUeXBlID8geyBjb250ZW50VHlwZTogcGFnZS5jb250ZW50VHlwZSB9IDoge30pLFxuICAgIC4uLih0aXRsZSA/IHsgdGl0bGUgfSA6IHt9KSxcbiAgICBjb250ZW50LFxuICAgIHRydW5jYXRlZCxcbiAgfTtcbn1cbiJdfQ==
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBOEIsTUFBTSxjQUFjLENBQUM7QUFHM0YsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBVTlDLG1FQUFtRTtBQUNuRSxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNwRSxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLFNBQVMsUUFBUSxDQUFDLElBQVksRUFBRSxHQUFXO0lBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHO1FBQUUsT0FBTyxFQUFF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SSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVGLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUUzRCxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtRQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7UUFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7UUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtRQUN2QixRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDeEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUMxQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1FBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1FBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTztRQUNQLFNBQVM7S0FDVixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFnZSBmZXRjaGluZyBvdmVyIHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9nb3Qtc2NyYXBpbmcgfCBnb3Qtc2NyYXBpbmd9XG4gKiAtIGEgYGdvdGAgd3JhcHBlciB0aGF0IGdlbmVyYXRlcyBicm93c2VyLWxpa2UgVExTICsgaGVhZGVyIGZpbmdlcnByaW50cywgc29cbiAqIGZldGNoZXMgc3Vydml2ZSB0aGUgYm90IHdhbGxzIGEgcGxhaW4gYGZldGNoYCB0cmlwcy4ge0BsaW5rIHJ1bldlYkZldGNofVxuICogZW5mb3JjZXMgdGhlIFVSTCBhbGxvdy1saXN0IChhbiBleHBsaWNpdCBmZXRjaCBvZiBhIGRpc2FsbG93ZWQgVVJMIGlzXG4gKiByZWZ1c2VkLCBub3Qgc2lsZW50bHkgZW1wdGllZCksIGZldGNoZXMgd2l0aCB0aGUgcGx1Z2luJ3MgdGltZW91dCwgYW5kXG4gKiByZXR1cm5zIGVpdGhlciB0aGUgcmF3IEhUTUwgb3IgYSByZWFkYWJsZSBwbGFpbi10ZXh0IHJlZHVjdGlvbiwgY2FwcGVkIGF0XG4gKiB0aGUgY29uZmlndXJlZCBsZW5ndGguXG4gKlxuICogVGhlIEhUTUwtdG8tdGV4dCByZWR1Y3Rpb24gaXMgZGVsaWJlcmF0ZWx5IGRlcGVuZGVuY3ktZnJlZSAoc3RyaXBcbiAqIHNjcmlwdC9zdHlsZSwgdW53cmFwIHRhZ3MsIGRlY29kZSBhIGhhbmRmdWwgb2YgZW50aXRpZXMsIGNvbGxhcHNlXG4gKiB3aGl0ZXNwYWNlKTogZ29vZCBlbm91Z2ggdG8gZmVlZCBhIG1vZGVsLCBhbmQgaXQga2VlcHMgdGhlIGFkZC1vbidzXG4gKiBkZXBlbmRlbmN5IHN1cmZhY2UgdG8gdGhlIHR3byBsaWJyYXJpZXMgdGhlIHRhc2sgY2FsbGVkIGZvci5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGdvdFNjcmFwaW5nIH0gZnJvbSBcImdvdC1zY3JhcGluZ1wiO1xuaW1wb3J0IHsgYXNzZXJ0RmV0Y2hVcmxBbGxvd2VkIH0gZnJvbSBcIi4vX2ZldGNoLXVybC50c1wiO1xuaW1wb3J0IHsgdG9DYWxsU2V0dGluZ3MsIHdlYkZldGNoRXhlY3V0ZURlZmF1bHRzIH0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IGRlY29kZUh0bWxFbnRpdGllcywgaHRtbFRvVGV4dCB9IGZyb20gXCIuL2h0bWwtdGV4dC50c1wiO1xuaW1wb3J0IHsgZXhlY3V0ZVJlYWQsIHRvV2ViU2VhcmNoUnVudGltZSwgdHlwZSBXZWJTZWFyY2hSdW50aW1lSW5wdXQgfSBmcm9tIFwiLi9ydW50aW1lLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdlYkZldGNoUmVxdWVzdCwgV2ViRmV0Y2hSZXN1bHQgfSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIndlYi1zZWFyY2gvZmV0Y2hcIik7XG5cbi8qKiBUaGUgc2xpY2Ugb2YgYSBnb3Qtc2NyYXBpbmcgcmVzcG9uc2UgdGhpcyBtb2R1bGUgcmVhZHMuICovXG5pbnRlcmZhY2UgRmV0Y2hlZFBhZ2Uge1xuICB1cmw6IHN0cmluZztcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBjb250ZW50VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBib2R5OiBzdHJpbmc7XG59XG5cbi8qKiBQdWxsIHRoZSA8dGl0bGU+IHRleHQgb3V0IG9mIGFuIEhUTUwgZG9jdW1lbnQsIHdoZW4gcHJlc2VudC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUaXRsZShodG1sOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaCA9IC88dGl0bGVbXj5dKj4oW1xcc1xcU10qPyk8XFwvdGl0bGU+L2kuZXhlYyhodG1sKTtcbiAgY29uc3QgdGl0bGUgPSBtYXRjaD8uWzFdID8gZGVjb2RlSHRtbEVudGl0aWVzKG1hdGNoWzFdKS50cmltKCkgOiBcIlwiO1xuICByZXR1cm4gdGl0bGUubGVuZ3RoID4gMCA/IHRpdGxlIDogdW5kZWZpbmVkO1xufVxuXG4vKiogVHJ1bmNhdGUgYHRleHRgIHRvIGBtYXhgIGNoYXJzLCByZXBvcnRpbmcgd2hldGhlciBpdCB3YXMgY3V0LiAqL1xuZnVuY3Rpb24gdHJ1bmNhdGUodGV4dDogc3RyaW5nLCBtYXg6IG51bWJlcik6IHsgY29udGVudDogc3RyaW5nOyB0cnVuY2F0ZWQ6IGJvb2xlYW4gfSB7XG4gIGlmICh0ZXh0Lmxlbmd0aCA8PSBtYXgpIHJldHVybiB7IGNvbnRlbnQ6IHRleHQsIHRydW5jYXRlZDogZmFsc2UgfTtcbiAgcmV0dXJuIHsgY29udGVudDogdGV4dC5zbGljZSgwLCBtYXgpLCB0cnVuY2F0ZWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBGZXRjaCBhIHNpbmdsZSBVUkwgYW5kIHJldHVybiBpdHMgY29udGVudCBpbiB0aGUgcmVxdWVzdGVkIGZvcm1hdC5cbiAqXG4gKiBUaHJvd3Mgd2hlbiB0aGUgVVJMIGlzIG5vdCBwZXJtaXR0ZWQgYnkgdGhlIGFsbG93LWxpc3QgKHRoZSB2aXNpYmxlLFxuICogY29ycmVjdGFibGUgZmFpbHVyZSB0aGUgZGVzaWduIGNhbGxzIGZvciBvbiB0aGUgZmV0Y2ggcGF0aCkuIFRoZSByZXF1ZXN0J3NcbiAqIGBtYXhMZW5ndGhgIG5hcnJvd3MgKG5ldmVyIHdpZGVucykgdGhlIHBsdWdpbidzIGBmZXRjaE1heExlbmd0aGAgY2FwLlxuICogYHNpZ25hbGAgY2FuY2VscyB0aGUgaW4tZmxpZ2h0IGZldGNoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2ViRmV0Y2goXG4gIHJlcXVlc3Q6IFdlYkZldGNoUmVxdWVzdCxcbiAgcnVudGltZU9yQ29uZmlnOiBXZWJTZWFyY2hSdW50aW1lSW5wdXQsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxXZWJGZXRjaFJlc3VsdD4ge1xuICBjb25zdCBydW50aW1lID0gdG9XZWJTZWFyY2hSdW50aW1lKHJ1bnRpbWVPckNvbmZpZyk7XG4gIGNvbnN0IHsgY29uZmlnIH0gPSBydW50aW1lO1xuICBhd2FpdCBhc3NlcnRGZXRjaFVybEFsbG93ZWQocmVxdWVzdC51cmwsIGNvbmZpZy5hbGxvd0xpc3QpO1xuICBjb25zdCBjYXAgPSBNYXRoLm1pbihyZXF1ZXN0Lm1heExlbmd0aCA/PyBjb25maWcuZmV0Y2hNYXhMZW5ndGgsIGNvbmZpZy5mZXRjaE1heExlbmd0aCk7XG5cbiAgLy8gVGhlIHJlc3BvbnNlIGlzIGNhY2hlZCBiZWZvcmUgdGhlIGZvcm1hdCByZWR1Y3Rpb24sIHNvIHRoZSBzYW1lIHBhZ2UgcmVhZFxuICAvLyBhcyB0ZXh0IGFuZCBhcyBodG1sIHNoYXJlcyBvbmUgbmV0d29yayByb3VuZCB0cmlwLlxuICBjb25zdCBwYWdlID0gYXdhaXQgZXhlY3V0ZVJlYWQoXG4gICAgcnVudGltZSxcbiAgICBcInBhZ2UtZmV0Y2hcIixcbiAgICB0b0NhbGxTZXR0aW5ncyh3ZWJGZXRjaEV4ZWN1dGVEZWZhdWx0cywgY29uZmlnLnRpbWVvdXRNcywgW1xuICAgICAgXCJ3ZWItc2VhcmNoXCIsXG4gICAgICBcImZldGNoXCIsXG4gICAgICByZXF1ZXN0LnVybCxcbiAgICAgIC4uLmNvbmZpZy5hbGxvd0xpc3QucGF0dGVybnMsXG4gICAgXSksXG4gICAgYXN5bmMgKGV4ZWN1dGVTaWduYWwpOiBQcm9taXNlPEZldGNoZWRQYWdlPiA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdvdFNjcmFwaW5nKHtcbiAgICAgICAgdXJsOiByZXF1ZXN0LnVybCxcbiAgICAgICAgLy8gQnVuJ3Mgbm9kZTpodHRwMiByZXBvcnRzIGRlZmF1bHQtcG9ydCBvcmlnaW5zIHdpdGggOjQ0MyB3aGlsZVxuICAgICAgICAvLyBodHRwMi13cmFwcGVyIGNvbXBhcmVzIHRoZW0gYWdhaW5zdCBVUkwtbm9ybWFsaXplZCBvcmlnaW5zLlxuICAgICAgICBodHRwMjogZmFsc2UsXG4gICAgICAgIC8vIGdvdCdzIG93biB0aW1lb3V0IGFib3J0cyB0aGUgc29ja2V0IGFuZCByZXBvcnRzIHdoaWNoIHBoYXNlIHRpbWVkXG4gICAgICAgIC8vIG91dDsgdGhlIGludGVyY2VwdG9yIHRpbWVvdXQgYm91bmRzIHRoZSB3aG9sZSBhdHRlbXB0IGFyb3VuZCBpdC5cbiAgICAgICAgdGltZW91dDogeyByZXF1ZXN0OiBjb25maWcudGltZW91dE1zIH0sXG4gICAgICAgIHRocm93SHR0cEVycm9yczogZmFsc2UsXG4gICAgICAgIGZvbGxvd1JlZGlyZWN0OiB0cnVlLFxuICAgICAgICBob29rczoge1xuICAgICAgICAgIGJlZm9yZVJlcXVlc3Q6IFtcbiAgICAgICAgICAgIGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IGFzc2VydEZldGNoVXJsQWxsb3dlZChTdHJpbmcob3B0aW9ucy51cmwpLCBjb25maWcuYWxsb3dMaXN0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKGV4ZWN1dGVTaWduYWwgPyB7IHNpZ25hbDogZXhlY3V0ZVNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IHJlc3BvbnNlLnVybCA/PyByZXF1ZXN0LnVybCxcbiAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgY29udGVudFR5cGU6IHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0sXG4gICAgICAgIGJvZHk6IHR5cGVvZiByZXNwb25zZS5ib2R5ID09PSBcInN0cmluZ1wiID8gcmVzcG9uc2UuYm9keSA6IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/IFwiXCIpLFxuICAgICAgfTtcbiAgICB9LFxuICAgIHNpZ25hbCxcbiAgKTtcbiAgYXdhaXQgYXNzZXJ0RmV0Y2hVcmxBbGxvd2VkKHBhZ2UudXJsLCBjb25maWcuYWxsb3dMaXN0KTtcblxuICBjb25zdCBpc0h0bWwgPSAhcGFnZS5jb250ZW50VHlwZSB8fCAvaHRtbHx4bWwvaS50ZXN0KHBhZ2UuY29udGVudFR5cGUpO1xuICBjb25zdCByYXdDb250ZW50ID0gcmVxdWVzdC5mb3JtYXQgPT09IFwiaHRtbFwiIHx8ICFpc0h0bWwgPyBwYWdlLmJvZHkgOiBodG1sVG9UZXh0KHBhZ2UuYm9keSk7XG4gIGNvbnN0IHsgY29udGVudCwgdHJ1bmNhdGVkIH0gPSB0cnVuY2F0ZShyYXdDb250ZW50LCBjYXApO1xuICBjb25zdCB0aXRsZSA9IGlzSHRtbCA/IGV4dHJhY3RUaXRsZShwYWdlLmJvZHkpIDogdW5kZWZpbmVkO1xuXG4gIGxvZ2dlci5kZWJ1ZyhcImZldGNoZWRcIiwge1xuICAgIHVybDogcGFnZS51cmwsXG4gICAgc3RhdHVzOiBwYWdlLnN0YXR1c0NvZGUsXG4gICAgYnl0ZXM6IHBhZ2UuYm9keS5sZW5ndGgsXG4gICAgcmV0dXJuZWQ6IGNvbnRlbnQubGVuZ3RoLFxuICAgIC4uLih0cnVuY2F0ZWQgPyB7IHRydW5jYXRlZDogdHJ1ZSB9IDoge30pLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHVybDogcGFnZS51cmwsXG4gICAgc3RhdHVzOiBwYWdlLnN0YXR1c0NvZGUsXG4gICAgLi4uKHBhZ2UuY29udGVudFR5cGUgPyB7IGNvbnRlbnRUeXBlOiBwYWdlLmNvbnRlbnRUeXBlIH0gOiB7fSksXG4gICAgLi4uKHRpdGxlID8geyB0aXRsZSB9IDoge30pLFxuICAgIGNvbnRlbnQsXG4gICAgdHJ1bmNhdGVkLFxuICB9O1xufVxuIl19
@@ -17,6 +17,7 @@
17
17
  import { ResourceType, type ResourceRequirement } from "@databricks/appkit";
18
18
  import { type ToolRegistry } from "@databricks/appkit/beta";
19
19
  import { ToolRegistryPlugin } from "@dbx-tools/appkit";
20
+ import type { AgentToolExecutionContext } from "@dbx-tools/appkit/tool-provider";
20
21
  import { type WebSearchPluginConfig } from "./config.ts";
21
22
  import type { WebFetchRequest, WebFetchResult, WebSearchRequest, WebSearchResult } from "./schema.ts";
22
23
  /**
@@ -95,6 +96,8 @@ export declare class WebSearchPlugin extends ToolRegistryPlugin<WebSearchPluginC
95
96
  * arguments instead of `unknown`.
96
97
  */
97
98
  protected readonly toolRegistry: ToolRegistry;
99
+ /** Dispatch with the actual calling model and optional host progress sink. */
100
+ executeAgentTool(name: string, args: unknown, signal?: AbortSignal, context?: AgentToolExecutionContext): Promise<unknown>;
98
101
  /**
99
102
  * Log the effective policy so an active allow-list and caps are obvious at
100
103
  * boot. Runtime construction already resolved config and captured this