@dbx-tools/shared-model 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.ts CHANGED
@@ -2,17 +2,17 @@
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
 
5
- export * as classify from "./src/classify";
6
- export * as display from "./src/display";
7
- export * as model from "./src/model";
8
- export * as openaiChat from "./src/openai-chat";
9
- export * as openaiResponses from "./src/openai-responses";
10
- export { endpointCapabilities, versionTuple, classifyByFamily, classifyEndpoints } from "./src/classify";
11
- export type { EndpointCapabilities, FamilyClass } from "./src/classify";
12
- export { toModelDisplayName } from "./src/display";
13
- export { ModelClass, ModelClassSchema, ModelProfileSchema, ServingEndpointSummarySchema, ModelQuerySchema, RankedModelSchema } from "./src/model";
14
- export type { ModelProfile, ServingEndpointSummary, ModelQuery, RankedModel } from "./src/model";
15
- export { UNSUPPORTED_CHAT_FIELDS, stripUnsupportedChatFields, chatContentToText } from "./src/openai-chat";
16
- export type { ChatRole, ChatContentPart, ChatToolCallFunction, ChatToolCall, ChatMessage, ChatContentToTextOptions } from "./src/openai-chat";
17
- export { responsesToChat, chatToResponsesRequest, chatToResponse, responseToChatCompletion, createResponsesStreamTranslator, readResponsesOutput, sanitizeResponsesTools, REASONING_TYPES, sanitizeOpenResponsesInput, sanitizeOpenResponsesRequest } from "./src/openai-responses";
18
- export type { ResponsesStreamTranslator, ResponsesCitation, ResponsesOutput } from "./src/openai-responses";
5
+ export * as classify from "./src/classify.ts";
6
+ export * as display from "./src/display.ts";
7
+ export * as model from "./src/model.ts";
8
+ export * as openaiChat from "./src/openai-chat.ts";
9
+ export * as openaiResponses from "./src/openai-responses.ts";
10
+ export { endpointCapabilities, versionTuple, classifyByFamily, classifyEndpoints } from "./src/classify.ts";
11
+ export type { EndpointCapabilities, FamilyClass } from "./src/classify.ts";
12
+ export { toModelDisplayName } from "./src/display.ts";
13
+ export { ModelClass, ModelClassSchema, ModelProfileSchema, ServingEndpointSummarySchema, ModelQuerySchema, RankedModelSchema } from "./src/model.ts";
14
+ export type { ModelProfile, ServingEndpointSummary, ModelQuery, RankedModel } from "./src/model.ts";
15
+ export { UNSUPPORTED_CHAT_FIELDS, stripUnsupportedChatFields, chatContentToText } from "./src/openai-chat.ts";
16
+ export type { ChatRole, ChatContentPart, ChatToolCallFunction, ChatToolCall, ChatMessage, ChatContentToTextOptions } from "./src/openai-chat.ts";
17
+ export { responsesToChat, chatToResponsesRequest, chatToResponse, responseToChatCompletion, createResponsesStreamTranslator, readResponsesOutput, sanitizeResponsesTools, REASONING_TYPES, sanitizeOpenResponsesInput, sanitizeOpenResponsesRequest } from "./src/openai-responses.ts";
18
+ export type { ResponsesStreamTranslator, ResponsesCitation, ResponsesOutput } from "./src/openai-responses.ts";
package/lib/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- export * as classify from "./src/classify.js";
2
- export * as display from "./src/display.js";
3
- export * as model from "./src/model.js";
4
- export * as openaiChat from "./src/openai-chat.js";
5
- export * as openaiResponses from "./src/openai-responses.js";
6
- export { endpointCapabilities, versionTuple, classifyByFamily, classifyEndpoints } from "./src/classify.js";
7
- export type { EndpointCapabilities, FamilyClass } from "./src/classify.js";
8
- export { toModelDisplayName } from "./src/display.js";
9
- export { ModelClass, ModelClassSchema, ModelProfileSchema, ServingEndpointSummarySchema, ModelQuerySchema, RankedModelSchema } from "./src/model.js";
10
- export type { ModelProfile, ServingEndpointSummary, ModelQuery, RankedModel } from "./src/model.js";
11
- export { UNSUPPORTED_CHAT_FIELDS, stripUnsupportedChatFields, chatContentToText } from "./src/openai-chat.js";
12
- export type { ChatRole, ChatContentPart, ChatToolCallFunction, ChatToolCall, ChatMessage, ChatContentToTextOptions } from "./src/openai-chat.js";
13
- export { responsesToChat, chatToResponsesRequest, chatToResponse, responseToChatCompletion, createResponsesStreamTranslator, readResponsesOutput, sanitizeResponsesTools, REASONING_TYPES, sanitizeOpenResponsesInput, sanitizeOpenResponsesRequest } from "./src/openai-responses.js";
14
- export type { ResponsesStreamTranslator, ResponsesCitation, ResponsesOutput } from "./src/openai-responses.js";
1
+ export * as classify from "./src/classify.ts";
2
+ export * as display from "./src/display.ts";
3
+ export * as model from "./src/model.ts";
4
+ export * as openaiChat from "./src/openai-chat.ts";
5
+ export * as openaiResponses from "./src/openai-responses.ts";
6
+ export { endpointCapabilities, versionTuple, classifyByFamily, classifyEndpoints } from "./src/classify.ts";
7
+ export type { EndpointCapabilities, FamilyClass } from "./src/classify.ts";
8
+ export { toModelDisplayName } from "./src/display.ts";
9
+ export { ModelClass, ModelClassSchema, ModelProfileSchema, ServingEndpointSummarySchema, ModelQuerySchema, RankedModelSchema } from "./src/model.ts";
10
+ export type { ModelProfile, ServingEndpointSummary, ModelQuery, RankedModel } from "./src/model.ts";
11
+ export { UNSUPPORTED_CHAT_FIELDS, stripUnsupportedChatFields, chatContentToText } from "./src/openai-chat.ts";
12
+ export type { ChatRole, ChatContentPart, ChatToolCallFunction, ChatToolCall, ChatMessage, ChatContentToTextOptions } from "./src/openai-chat.ts";
13
+ export { responsesToChat, chatToResponsesRequest, chatToResponse, responseToChatCompletion, createResponsesStreamTranslator, readResponsesOutput, sanitizeResponsesTools, REASONING_TYPES, sanitizeOpenResponsesInput, sanitizeOpenResponsesRequest } from "./src/openai-responses.ts";
14
+ export type { ResponsesStreamTranslator, ResponsesCitation, ResponsesOutput } from "./src/openai-responses.ts";
package/lib/index.js CHANGED
@@ -11,4 +11,4 @@ export { toModelDisplayName } from "./src/display.js";
11
11
  export { ModelClass, ModelClassSchema, ModelProfileSchema, ServingEndpointSummarySchema, ModelQuerySchema, RankedModelSchema } from "./src/model.js";
12
12
  export { UNSUPPORTED_CHAT_FIELDS, stripUnsupportedChatFields, chatContentToText } from "./src/openai-chat.js";
13
13
  export { responsesToChat, chatToResponsesRequest, chatToResponse, responseToChatCompletion, createResponsesStreamTranslator, readResponsesOutput, sanitizeResponsesTools, REASONING_TYPES, sanitizeOpenResponsesInput, sanitizeOpenResponsesRequest } from "./src/openai-responses.js";
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sS0FBSyxVQUFVLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxLQUFLLGVBQWUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbEosT0FBTyxFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsK0JBQStCLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgKiBhcyBjbGFzc2lmeSBmcm9tIFwiLi9zcmMvY2xhc3NpZnlcIjtcbmV4cG9ydCAqIGFzIGRpc3BsYXkgZnJvbSBcIi4vc3JjL2Rpc3BsYXlcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbFwiO1xuZXhwb3J0ICogYXMgb3BlbmFpQ2hhdCBmcm9tIFwiLi9zcmMvb3BlbmFpLWNoYXRcIjtcbmV4cG9ydCAqIGFzIG9wZW5haVJlc3BvbnNlcyBmcm9tIFwiLi9zcmMvb3BlbmFpLXJlc3BvbnNlc1wiO1xuZXhwb3J0IHsgZW5kcG9pbnRDYXBhYmlsaXRpZXMsIHZlcnNpb25UdXBsZSwgY2xhc3NpZnlCeUZhbWlseSwgY2xhc3NpZnlFbmRwb2ludHMgfSBmcm9tIFwiLi9zcmMvY2xhc3NpZnlcIjtcbmV4cG9ydCB0eXBlIHsgRW5kcG9pbnRDYXBhYmlsaXRpZXMsIEZhbWlseUNsYXNzIH0gZnJvbSBcIi4vc3JjL2NsYXNzaWZ5XCI7XG5leHBvcnQgeyB0b01vZGVsRGlzcGxheU5hbWUgfSBmcm9tIFwiLi9zcmMvZGlzcGxheVwiO1xuZXhwb3J0IHsgTW9kZWxDbGFzcywgTW9kZWxDbGFzc1NjaGVtYSwgTW9kZWxQcm9maWxlU2NoZW1hLCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hLCBNb2RlbFF1ZXJ5U2NoZW1hLCBSYW5rZWRNb2RlbFNjaGVtYSB9IGZyb20gXCIuL3NyYy9tb2RlbFwiO1xuZXhwb3J0IHR5cGUgeyBNb2RlbFByb2ZpbGUsIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksIE1vZGVsUXVlcnksIFJhbmtlZE1vZGVsIH0gZnJvbSBcIi4vc3JjL21vZGVsXCI7XG5leHBvcnQgeyBVTlNVUFBPUlRFRF9DSEFUX0ZJRUxEUywgc3RyaXBVbnN1cHBvcnRlZENoYXRGaWVsZHMsIGNoYXRDb250ZW50VG9UZXh0IH0gZnJvbSBcIi4vc3JjL29wZW5haS1jaGF0XCI7XG5leHBvcnQgdHlwZSB7IENoYXRSb2xlLCBDaGF0Q29udGVudFBhcnQsIENoYXRUb29sQ2FsbEZ1bmN0aW9uLCBDaGF0VG9vbENhbGwsIENoYXRNZXNzYWdlLCBDaGF0Q29udGVudFRvVGV4dE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb3BlbmFpLWNoYXRcIjtcbmV4cG9ydCB7IHJlc3BvbnNlc1RvQ2hhdCwgY2hhdFRvUmVzcG9uc2VzUmVxdWVzdCwgY2hhdFRvUmVzcG9uc2UsIHJlc3BvbnNlVG9DaGF0Q29tcGxldGlvbiwgY3JlYXRlUmVzcG9uc2VzU3RyZWFtVHJhbnNsYXRvciwgcmVhZFJlc3BvbnNlc091dHB1dCwgc2FuaXRpemVSZXNwb25zZXNUb29scywgUkVBU09OSU5HX1RZUEVTLCBzYW5pdGl6ZU9wZW5SZXNwb25zZXNJbnB1dCwgc2FuaXRpemVPcGVuUmVzcG9uc2VzUmVxdWVzdCB9IGZyb20gXCIuL3NyYy9vcGVuYWktcmVzcG9uc2VzXCI7XG5leHBvcnQgdHlwZSB7IFJlc3BvbnNlc1N0cmVhbVRyYW5zbGF0b3IsIFJlc3BvbnNlc0NpdGF0aW9uLCBSZXNwb25zZXNPdXRwdXQgfSBmcm9tIFwiLi9zcmMvb3BlbmFpLXJlc3BvbnNlc1wiO1xuIl19
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxlQUFlLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVySixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RyxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsMEJBQTBCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCAqIGFzIGNsYXNzaWZ5IGZyb20gXCIuL3NyYy9jbGFzc2lmeS50c1wiO1xuZXhwb3J0ICogYXMgZGlzcGxheSBmcm9tIFwiLi9zcmMvZGlzcGxheS50c1wiO1xuZXhwb3J0ICogYXMgbW9kZWwgZnJvbSBcIi4vc3JjL21vZGVsLnRzXCI7XG5leHBvcnQgKiBhcyBvcGVuYWlDaGF0IGZyb20gXCIuL3NyYy9vcGVuYWktY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgb3BlbmFpUmVzcG9uc2VzIGZyb20gXCIuL3NyYy9vcGVuYWktcmVzcG9uc2VzLnRzXCI7XG5leHBvcnQgeyBlbmRwb2ludENhcGFiaWxpdGllcywgdmVyc2lvblR1cGxlLCBjbGFzc2lmeUJ5RmFtaWx5LCBjbGFzc2lmeUVuZHBvaW50cyB9IGZyb20gXCIuL3NyYy9jbGFzc2lmeS50c1wiO1xuZXhwb3J0IHR5cGUgeyBFbmRwb2ludENhcGFiaWxpdGllcywgRmFtaWx5Q2xhc3MgfSBmcm9tIFwiLi9zcmMvY2xhc3NpZnkudHNcIjtcbmV4cG9ydCB7IHRvTW9kZWxEaXNwbGF5TmFtZSB9IGZyb20gXCIuL3NyYy9kaXNwbGF5LnRzXCI7XG5leHBvcnQgeyBNb2RlbENsYXNzLCBNb2RlbENsYXNzU2NoZW1hLCBNb2RlbFByb2ZpbGVTY2hlbWEsIFNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEsIE1vZGVsUXVlcnlTY2hlbWEsIFJhbmtlZE1vZGVsU2NoZW1hIH0gZnJvbSBcIi4vc3JjL21vZGVsLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsUHJvZmlsZSwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSwgTW9kZWxRdWVyeSwgUmFua2VkTW9kZWwgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB7IFVOU1VQUE9SVEVEX0NIQVRfRklFTERTLCBzdHJpcFVuc3VwcG9ydGVkQ2hhdEZpZWxkcywgY2hhdENvbnRlbnRUb1RleHQgfSBmcm9tIFwiLi9zcmMvb3BlbmFpLWNoYXQudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2hhdFJvbGUsIENoYXRDb250ZW50UGFydCwgQ2hhdFRvb2xDYWxsRnVuY3Rpb24sIENoYXRUb29sQ2FsbCwgQ2hhdE1lc3NhZ2UsIENoYXRDb250ZW50VG9UZXh0T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vcGVuYWktY2hhdC50c1wiO1xuZXhwb3J0IHsgcmVzcG9uc2VzVG9DaGF0LCBjaGF0VG9SZXNwb25zZXNSZXF1ZXN0LCBjaGF0VG9SZXNwb25zZSwgcmVzcG9uc2VUb0NoYXRDb21wbGV0aW9uLCBjcmVhdGVSZXNwb25zZXNTdHJlYW1UcmFuc2xhdG9yLCByZWFkUmVzcG9uc2VzT3V0cHV0LCBzYW5pdGl6ZVJlc3BvbnNlc1Rvb2xzLCBSRUFTT05JTkdfVFlQRVMsIHNhbml0aXplT3BlblJlc3BvbnNlc0lucHV0LCBzYW5pdGl6ZU9wZW5SZXNwb25zZXNSZXF1ZXN0IH0gZnJvbSBcIi4vc3JjL29wZW5haS1yZXNwb25zZXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgUmVzcG9uc2VzU3RyZWFtVHJhbnNsYXRvciwgUmVzcG9uc2VzQ2l0YXRpb24sIFJlc3BvbnNlc091dHB1dCB9IGZyb20gXCIuL3NyYy9vcGVuYWktcmVzcG9uc2VzLnRzXCI7XG4iXX0=
@@ -25,7 +25,7 @@
25
25
  *
26
26
  * @module
27
27
  */
28
- import { ModelClass, type ServingEndpointSummary } from "./model.js";
28
+ import { ModelClass, type ServingEndpointSummary } from "./model.ts";
29
29
  /** What an endpoint can be asked to do, as derived by {@link endpointCapabilities}. */
30
30
  export interface EndpointCapabilities {
31
31
  /** OpenAI chat/completions + Responses: the surface a chat agent needs. */
@@ -258,4 +258,4 @@ export function classifyEndpoints(endpoints) {
258
258
  [ModelClass.Embedding]: embeddings,
259
259
  };
260
260
  }
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xhc3NpZnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBK0IsTUFBTSxTQUFTLENBQUM7QUFFbEUsZ0VBQWdFO0FBQ2hFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUVoQywwREFBMEQ7QUFDMUQsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUM7QUFZM0M7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQWdDO0lBQ25FLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5Riw4RUFBOEU7SUFDOUUsOENBQThDO0lBQzlDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN6RixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQVVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUk7U0FDZCxLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ1osS0FBSyxDQUFDLGFBQWEsQ0FBQztTQUNwQixHQUFHLENBQUMs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TSxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSxTQUFTLFFBQVEsQ0FBQyxTQUE0QixFQUFFLENBQVM7SUFDdkQsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDOUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBRSxDQUFDO0lBQ3JDLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFlRCxTQUFTLFNBQVMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNyQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07UUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJO1FBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxPQUFPO1FBQUUsT0FBTyxDQUFDLENBQUMsT0FB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QUFJO1lBQ2pCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7WUFDakMsUUFBUSxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUFDO0lBRXRFLE9BQU87UUFDTCxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUYsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVGLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVO0tBQ25DLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2RlbC1jbGFzcyBjbGFzc2lmaWNhdGlvbiBmb3IgRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50cy5cbiAqXG4gKiBDaGF0IGNhcGFiaWxpdHkgYmFuZHMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgbGl2ZSB3b3Jrc3BhY2UgY2F0YWxvZ3VlXG4gKiByYXRoZXIgdGhhbiBhIGhhbmQtbWFpbnRhaW5lZCB0YWJsZS4gRGF0YWJyaWNrcyBwdWJsaXNoZXNcbiAqIHBlci1lbmRwb2ludCBgcXVhbGl0eWAgLyBgc3BlZWRgIC8gYGNvc3RgIHNjb3JlcyAodGhlIEFJIFBsYXlncm91bmRcbiAqIGJhcnMpIG9uIHRoZSBzZXJ2aW5nIGxpc3Q7IHtAbGluayBjbGFzc2lmeUVuZHBvaW50c30gYnVja2V0cyBzY29yZWRcbiAqIGNoYXQgbW9kZWxzIGludG8gdGhlIGNoYXQge0BsaW5rIE1vZGVsQ2xhc3N9IGJhbmRzIGJ5IHRoZSAqcmVsYXRpdmUqXG4gKiBkaXN0cmlidXRpb24gb2YgdGhvc2Ugc2NvcmVzIChxdWFudGlsZXMsIG5vdCBmaXhlZCBjdXQtb2Zmcykgc28gYVxuICogYnJhbmQtbmV3IG1vZGVsIHRoYXQgbGFuZHMgb3V0c2lkZSB0b2RheSdzIHNjb3JlIHJhbmdlIHN0aWxsIHNsb3RzIGluXG4gKiBuZXh0IHRvIGl0cyBwZWVycy4gRW1iZWRkaW5nIGVuZHBvaW50cyAoYHRhc2sgPT09IFwibGxtL3YxL2VtYmVkZGluZ3NcImApXG4gKiBhcmUgYnVja2V0ZWQgaW50byB7QGxpbmsgTW9kZWxDbGFzcy5FbWJlZGRpbmd9IGJ5IHRhc2ssIGluZGVwZW5kZW50IG9mXG4gKiBhbnkgc2NvcmUuXG4gKlxuICogVW5zY29yZWQtYnV0LXJlY29nbml6YWJsZSBjaGF0IGVuZHBvaW50cyBhcmUgc3RpbGwgcGxhY2VkIGJ5IGEgc21hbGxcbiAqIGZhbWlseSBoZXVyaXN0aWMgKHtAbGluayBjbGFzc2lmeUJ5RmFtaWx5fSkgc28gYSB3b3Jrc3BhY2Ugd2hvc2VcbiAqIG1vZGVscyBwcmVkYXRlIEZvdW5kYXRpb24gTW9kZWwgQVBJIHNjb3Jpbmcga2VlcHMgd29ya2luZy4gVGhlXG4gKiBvZmZsaW5lIGZhbGxiYWNrIGZsb29yIC0gdGhlIGhhcmQtY29kZWQgbW9kZWwgbGlzdCByZWFjaGVkIGZvciB3aGVuXG4gKiB0aGUgbGl2ZSBjYXRhbG9ndWUgY2FuJ3QgYmUgcmVhZCBhdCBhbGwgLSBpcyBhIHNlcnZlciBjb25jZXJuIGFuZFxuICogbGl2ZXMgaW4gYEBkYngtdG9vbHMvbW9kZWxgLCBub3QgaGVyZTogYSBicm93c2VyIGNsaWVudCBuZXZlciB0YWxrc1xuICogdG8gRGF0YWJyaWNrcyBkaXJlY3RseSwgc28gaXQgaGFzIG5vdGhpbmcgdG8gZmFsbCBiYWNrIHRvLlxuICpcbiAqIFB1cmUgKG5vIE5vZGUtb25seSBpbXBvcnRzKSwgc28gYSBjbGllbnQgY2FuIGNsYXNzaWZ5IGEgYC9tb2RlbHNgXG4gKiByZXNwb25zZSB3aXRob3V0IHNlcnZlciBkZXBlbmRlbmNpZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IE1vZGVsQ2xhc3MsIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSB9IGZyb20gXCIuL21vZGVsXCI7XG5cbi8qKiBUYXNrIGhpbnQgRGF0YWJyaWNrcyBzdGFtcHMgb24gY2hhdCBjb21wbGV0aW9uIGVuZHBvaW50cy4gKi9cbmNvbnN0IENIQVRfVEFTSyA9IFwibGxtL3YxL2NoYXRcIjtcblxuLyoqIFRhc2sgaGludCBEYXRhYnJpY2tzIHN0YW1wcyBvbiBlbWJlZGRpbmcgZW5kcG9pbnRzLiAqL1xuY29uc3QgRU1CRURESU5HX1RBU0sgPSBcImxsbS92MS9lbWJlZGRpbmdzXCI7XG5cbi8qKiBXaGF0IGFuIGVuZHBvaW50IGNhbiBiZSBhc2tlZCB0byBkbywgYXMgZGVyaXZlZCBieSB7QGxpbmsgZW5kcG9pbnRDYXBhYmlsaXRpZXN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludENhcGFiaWxpdGllcyB7XG4gIC8qKiBPcGVuQUkgY2hhdC9jb21wbGV0aW9ucyArIFJlc3BvbnNlczogdGhlIHN1cmZhY2UgYSBjaGF0IGFnZW50IG5lZWRzLiAqL1xuICBjaGF0OiBib29sZWFuO1xuICAvKiogRW1iZWRkaW5nICh2ZWN0b3IpIGVuZHBvaW50LiAqL1xuICBlbWJlZGRpbmc6IGJvb2xlYW47XG4gIC8qKiBGdW5jdGlvbiAvIHRvb2wgY2FsbGluZy4gRXZlcnkgY2hhdCBlbmRwb2ludCBvbiBEYXRhYnJpY2tzIHN1cHBvcnRzIGl0LiAqL1xuICB0b29sczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZXJpdmUgYW4gZW5kcG9pbnQncyBjYXBhYmlsaXRpZXMgZnJvbSBpdHMgRGF0YWJyaWNrcyB0YXNrIGhpbnQgYW5kIGl0c1xuICogY2xhc3NpZmllZCB7QGxpbmsgTW9kZWxDbGFzc30sIHNvIGNvbnN1bWVycyBmaWx0ZXIgb24gY2FwYWJpbGl0eSBpbnN0ZWFkIG9mXG4gKiByZS1kZXJpdmluZyBpdCBmcm9tIHJhdyBgdGFza2AgLyBgY2xhc3NgIHN0cmluZ3MuXG4gKlxuICogRWl0aGVyIHNpZ25hbCBhbG9uZSBpcyBlbm91Z2g6IHRoZSB0YXNrIGhpbnQgaXMgYXV0aG9yaXRhdGl2ZSB3aGVuIHByZXNlbnQsXG4gKiBhbmQgdGhlIGNsYXNzIGNvdmVycyBlbmRwb2ludHMgRGF0YWJyaWNrcyBsZWZ0IHVudGFza2VkIGJ1dCB0aGUgY2xhc3NpZmllclxuICogcmVjb2duaXplZC4gRW1iZWRkaW5nIHdpbnMgb3ZlciBjaGF0IHdoZW4gYm90aCBwb2ludCBhdCBpdCwgc2luY2UgdGhlIHR3byBhcmVcbiAqIG5vdCBpbnRlcmNoYW5nZWFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludENhcGFiaWxpdGllcyhlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IEVuZHBvaW50Q2FwYWJpbGl0aWVzIHtcbiAgY29uc3QgZW1iZWRkaW5nID0gZW5kcG9pbnQudGFzayA9PT0gRU1CRURESU5HX1RBU0sgfHwgZW5kcG9pbnQuY2xhc3MgPT09IE1vZGVsQ2xhc3MuRW1iZWRkaW5nO1xuICAvLyBFdmVyeSBub24tZW1iZWRkaW5nIGNsYXNzIGlzIGEgY2hhdCBiYW5kLCBzbyBcImNsYXNzaWZpZWQgYnV0IG5vdCBlbWJlZGRpbmdcIlxuICAvLyBpcyB0aGUgY2xhc3Mtc2lkZSB0ZXN0IGZvciBjaGF0IGNhcGFiaWxpdHkuXG4gIGNvbnN0IGNoYXQgPSAhZW1iZWRkaW5nICYmIChlbmRwb2ludC50YXNrID09PSBDSEFUX1RBU0sgfHwgZW5kcG9pbnQuY2xhc3MgIT09IHVuZGVmaW5lZCk7XG4gIHJldHVybiB7IGNoYXQsIGVtYmVkZGluZywgdG9vbHM6IGNoYXQgfTtcbn1cblxuLyoqIEZhbWlseS1oZXVyaXN0aWMgY2xhc3NpZmljYXRpb24gb2YgYSBzaW5nbGUgZW5kcG9pbnQgbmFtZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5Q2xhc3Mge1xuICAvKiogQ2hhdCBjYXBhYmlsaXR5IGJhbmQgdGhlIGZhbWlseSBtYXBzIHRvIChuZXZlciBlbWJlZGRpbmcpLiAqL1xuICBjbGFzczogTW9kZWxDbGFzcztcbiAgLyoqIEludHJhLWZhbWlseSBvcmRlcmluZyBoaW50IChoaWdoZXIgaXMgbmV3ZXIgLyBtb3JlIGNhcGFibGUpLiAqL1xuICByYW5rOiBudW1iZXI7XG59XG5cbi8qKlxuICogTnVtZXJpYyBgW21ham9yLCBtaW5vciwgcGF0Y2hdYCB2ZXJzaW9uIHBhcnNlZCBmcm9tIGFuIGVuZHBvaW50XG4gKiBuYW1lLCB1c2VkIHRvIG9yZGVyIHNpYmxpbmdzIHdpdGhpbiBhIGZhbWlseS90aWVyLiBTdGFydHMgYXQgdGhlXG4gKiBmaXJzdCBkaWdpdCBpbiB0aGUgbmFtZSwgdGhlbiByZWFkcyBzdWNjZXNzaXZlIHNlcGFyYXRvci1kZWxpbWl0ZWQsXG4gKiBkaWdpdC1wcmVmaXhlZCBjaHVua3MgYXMgdGhlIHRocmVlIGNvbXBvbmVudHMgKG1pc3Npbmcgb25lcyBkZWZhdWx0XG4gKiB0byBgMGApOlxuICpcbiAqICAgLSBgZGF0YWJyaWNrcy1jbGF1ZGUtb3B1cy00LThgICAgLT4gYFs0LCA4LCAwXWBcbiAqICAgLSBgZGF0YWJyaWNrcy1jbGF1ZGUtb3B1cy00LTEwYCAgLT4gYFs0LCAxMCwgMF1gIChzb3J0cyBhYm92ZSA0LTgpXG4gKiAgIC0gYGRhdGFicmlja3MtbWV0YS1sbGFtYS0zLTMtNzBiYC0+IGBbMywgMywgNzBdYFxuICogICAtIGBkYXRhYnJpY2tzLWJnZS1sYXJnZS1lbmAgICAgICAtPiBgWzAsIDAsIDBdYCAobm8gZGlnaXRzKVxuICpcbiAqIENvbXBvbmVudC13aXNlIGNvbXBhcmlzb24gKG5vdCBhIGRlY2ltYWwgY29sbGFwc2UpIHNvIGA0LjEwYCBiZWF0c1xuICogYDQuOGAgLSB0aGUgYnVnIGEgYG1ham9yICsgbWlub3IvMTBgIHNjb3JlIHdvdWxkIGhpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb25UdXBsZShuYW1lOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBzdGFydCA9IG5hbWUuc2VhcmNoKC9cXGQvKTtcbiAgaWYgKHN0YXJ0IDwgMCkgcmV0dXJuIFswLCAwLCAwXTtcbiAgY29uc3QgbnVtcyA9IG5hbWVcbiAgICAuc2xpY2Uoc3RhcnQpXG4gICAgLnNwbGl0KC9bXmEtejAtOV0rL2kpXG4gICAgLm1hcCgoY2h1bmspID0+IGNodW5rLm1hdGNoKC9eXFxkKy8pPy5bMF0pXG4gICAgLmZpbHRlcigoZGlnaXRzKTogZGlnaXRzIGlzIHN0cmluZyA9PiBkaWdpdHMgIT09IHVuZGVmaW5lZClcbiAgICAubWFwKE51bWJlcik7XG4gIHJldHVybiBbbnVtc1swXSA/PyAwLCBudW1zWzFdID8/IDAsIG51bXNbMl0gPz8gMF07XG59XG5cbi8qKiBDb21wYXJlIHR3byB2ZXJzaW9uIHR1cGxlcyBzbyB0aGUgaGlnaGVyIHZlcnNpb24gc29ydHMgZmlyc3QgKGRlc2NlbmRpbmcpLiAqL1xuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25EZXNjKGE6IHJlYWRvbmx5IG51bWJlcltdLCBiOiByZWFkb25seSBudW1iZXJbXSk6IG51bWJlciB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgY29uc3QgZGlmZiA9IChiW2ldID8/IDApIC0gKGFbaV0gPz8gMCk7XG4gICAgaWYgKGRpZmYgIT09IDApIHJldHVybiBkaWZmO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIE1vbm90b25pYyB2ZXJzaW9uIGtleSBmb3Igb3JkZXJpbmcgc2libGluZ3Mgd2l0aGluIGEgZmFtaWx5L3RpZXJcbiAqIChlLmcuIGBvcHVzLTQtOGAgb3ZlciBgb3B1cy00LTdgKS4gRW5jb2RlcyB0aGUge0BsaW5rIHZlcnNpb25UdXBsZX1cbiAqIGFzIGEgc2luZ2xlIG51bWJlciBzbyBjYWxsZXJzIHRoYXQgbmVlZCBhIHNjYWxhciByYW5rICh0aGUgZmFtaWx5XG4gKiBoZXVyaXN0aWMsIHRoZSBzdGF0aWMgZmFsbGJhY2sgb3JkZXJpbmcpIGtlZXAgd29ya2luZzsgdGhlIGVuY29kaW5nXG4gKiBwcmVzZXJ2ZXMgY29tcG9uZW50IG9yZGVyIHdpdGhvdXQgdGhlIGRlY2ltYWwtY29sbGFwc2UgYnVnLlxuICovXG5mdW5jdGlvbiB2ZXJzaW9uU2NvcmUobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gdmVyc2lvblR1cGxlKG5hbWUpO1xuICByZXR1cm4gbWFqb3IgKiAxXzAwMF8wMDAgKyBtaW5vciAqIDFfMDAwICsgcGF0Y2g7XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgY2hhdCBjYXBhYmlsaXR5IGJhbmQgZm9yIGFuIGVuZHBvaW50IHdlIGhhdmUgbm8gbGl2ZVxuICogc2NvcmUgZm9yLCBrZXllZCBvZmYgcHJvdmlkZXIgZmFtaWx5IGFuZCB0aGUgd2VsbC1rbm93biB2YXJpYW50IHdvcmRzXG4gKiBpbiB0aGUgbmFtZSAoYG9wdXNgL2Bzb25uZXRgL2BoYWlrdWAsIGBwcm9gL2BtaW5pYC9gbmFub2AsXG4gKiBgZmxhc2hgL2BmbGFzaC1saXRlYCwgTGxhbWEgcGFyYW1ldGVyIHNpemVzLCBldGMpLiBSZXR1cm5zIGBudWxsYCBmb3JcbiAqIG5hbWVzIHdlIGRvbid0IHJlY29nbml6ZSBzbyB1bmtub3duIGN1c3RvbSBlbmRwb2ludHMgYXJlIG5ldmVyXG4gKiBhdXRvLXNlbGVjdGVkIGFzIGEgZGVmYXVsdC4gVGhlIGFjY29tcGFueWluZyBgcmFua2Agb3JkZXJzIHNpYmxpbmdzXG4gKiB3aXRoaW4gYSBjbGFzcy4gT25seSBldmVyIHJldHVybnMgYSBjaGF0IGJhbmQgLSBlbWJlZGRpbmcgZW5kcG9pbnRzXG4gKiBhcmUgY2xhc3NpZmllZCBieSB0YXNrLCBub3QgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5QnlGYW1pbHkobmFtZTogc3RyaW5nKTogRmFtaWx5Q2xhc3MgfCBudWxsIHtcbiAgY29uc3QgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgYXQgPSAoY2xzOiBNb2RlbENsYXNzKTogRmFtaWx5Q2xhc3MgPT4gKHsgY2xhc3M6IGNscywgcmFuazogdmVyc2lvblNjb3JlKG4pIH0pO1xuXG4gIC8vIEFudGhyb3BpYyBDbGF1ZGVcbiAgaWYgKG4uaW5jbHVkZXMoXCJvcHVzXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmcpO1xuICBpZiAobi5pbmNsdWRlcyhcInNvbm5ldFwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcbiAgaWYgKG4uaW5jbHVkZXMoXCJoYWlrdVwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuXG4gIC8vIE9wZW5BSSBvcGVuLXdlaWdodHMgKGNoZWNrIGJlZm9yZSB0aGUgZ2VuZXJpYyBncHQgYnJhbmNoKVxuICBpZiAobi5pbmNsdWRlcyhcImdwdC1vc3NcIikpIHtcbiAgICByZXR1cm4gYXQobi5pbmNsdWRlcyhcIjEyMGJcIikgPyBNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCA6IE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuICB9XG4gIC8vIE9wZW5BSSBHUFQgZmFtaWx5XG4gIGlmIChuLmluY2x1ZGVzKFwiZ3B0XCIpKSB7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCJwcm9cIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRUaGlua2luZyk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCJtaW5pXCIpIHx8IG4uaW5jbHVkZXMoXCJuYW5vXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0RmFzdCk7XG4gICAgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcbiAgfVxuXG4gIC8vIEdvb2dsZSBHZW1pbmkgLyBHZW1tYVxuICBpZiAobi5pbmNsdWRlcyhcImdlbWluaVwiKSkge1xuICAgIGlmIChuLmluY2x1ZGVzKFwiZmxhc2gtbGl0ZVwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuICAgIGlmIChuLmluY2x1ZGVzKFwicHJvXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmcpO1xuICAgIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCk7XG4gIH1cbiAgaWYgKG4uaW5jbHVkZXMoXCJnZW1tYVwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuXG4gIC8vIE1ldGEgTGxhbWFcbiAgaWYgKG4uaW5jbHVkZXMoXCJsbGFtYVwiKSkge1xuICAgIGlmIChuLmluY2x1ZGVzKFwibWF2ZXJpY2tcIikgfHwgbi5pbmNsdWRlcyhcIjQwNWJcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRUaGlua2luZyk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCI3MGJcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCI4YlwiKSB8fCBuLmluY2x1ZGVzKFwiMWJcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRGYXN0KTtcbiAgICByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQpO1xuICB9XG5cbiAgLy8gQWxpYmFiYSBRd2VuXG4gIGlmIChuLmluY2x1ZGVzKFwicXdlblwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIExpbmVhci1pbnRlcnBvbGF0ZWQgcXVhbnRpbGUgb2YgYW4gYXNjZW5kaW5nLXNvcnRlZCBudW1lcmljIGFycmF5LiAqL1xuZnVuY3Rpb24gcXVhbnRpbGUoc29ydGVkQXNjOiByZWFkb25seSBudW1iZXJbXSwgcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHNvcnRlZEFzYy5sZW5ndGggPT09IDApIHJldHVybiBOdW1iZXIuTmFOO1xuICBjb25zdCBpZHggPSAoc29ydGVkQXNjLmxlbmd0aCAtIDEpICogcDtcbiAgY29uc3QgbG8gPSBNYXRoLmZsb29yKGlkeCk7XG4gIGNvbnN0IGhpID0gTWF0aC5jZWlsKGlkeCk7XG4gIGlmIChsbyA9PT0gaGkpIHJldHVybiBzb3J0ZWRBc2NbbG9dITtcbiAgcmV0dXJuIHNvcnRlZEFzY1tsb10hICsgKHNvcnRlZEFzY1toaV0hIC0gc29ydGVkQXNjW2xvXSEpICogKGlkeCAtIGxvKTtcbn1cblxuLyoqIEludGVybmFsIHNvcnRhYmxlIHdyYXBwZXIgY2FycnlpbmcgdGhlIG9yZGVyaW5nIGtleXMgZm9yIGEgYnVja2V0IGVudHJ5LiAqL1xuaW50ZXJmYWNlIFJhbmtlZCB7XG4gIGVwOiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5O1xuICAvKiogUXVhbGl0eSAoc2NvcmVkKSBvciBmYW1pbHkgdmVyc2lvbiAodW5zY29yZWQpIC0gaGlnaGVyIGZpcnN0LiAqL1xuICBzb3J0OiBudW1iZXI7XG4gIC8qKiBTY29yZWQgZW5kcG9pbnRzIHJhbmsgYWhlYWQgb2YgZmFtaWx5LW9ubHkgZ3Vlc3Nlcy4gKi9cbiAgc2NvcmVkOiBib29sZWFuO1xuICB0aWVDb3N0OiBudW1iZXI7XG4gIHRpZVNwZWVkOiBudW1iZXI7XG4gIC8qKiBQYXJzZWQgbmFtZSB2ZXJzaW9uLCB0aGUgZmluYWwgdGllLWJyZWFrZXIgKG5ld2VyIHNpYmxpbmcgZmlyc3QpLiAqL1xuICB2ZXJzaW9uOiByZWFkb25seSBudW1iZXJbXTtcbn1cblxuZnVuY3Rpb24gcmFua09yZGVyKGE6IFJhbmtlZCwgYjogUmFua2VkKTogbnVtYmVyIHtcbiAgaWYgKGEuc2NvcmVkICE9PSBiLnNjb3JlZCkgcmV0dXJuIGEuc2NvcmVkID8gLTEgOiAxO1xuICBpZiAoYi5zb3J0ICE9PSBhLnNvcnQpIHJldHVybiBiLnNvcnQgLSBhLnNvcnQ7XG4gIGlmIChhLnRpZUNvc3QgIT09IGIudGllQ29zdCkgcmV0dXJuIGEudGllQ29zdCAtIGIudGllQ29zdDtcbiAgaWYgKGIudGllU3BlZWQgIT09IGEudGllU3BlZWQpIHJldHVybiBiLnRpZVNwZWVkIC0gYS50aWVTcGVlZDtcbiAgLy8gU2FtZSBzY29yZWQtbmVzcywgcXVhbGl0eSwgY29zdCwgYW5kIHNwZWVkIChlLmcuIHNldmVyYWwgQ2xhdWRlXG4gIC8vIE9wdXMgcG9pbnQgcmVsZWFzZXMpOiBwcmVmZXIgdGhlIG5ld2VyIHBhcnNlZCB2ZXJzaW9uIHNvXG4gIC8vIGBvcHVzLTQtOGAgYmVhdHMgYG9wdXMtNC03YC5cbiAgcmV0dXJuIGNvbXBhcmVWZXJzaW9uRGVzYyhhLnZlcnNpb24sIGIudmVyc2lvbik7XG59XG5cbi8qKlxuICogQnVja2V0IGxpdmUgZW5kcG9pbnRzIGludG8ge0BsaW5rIE1vZGVsQ2xhc3N9ZXMsIHJhbmtlZCBiZXN0LWZpcnN0XG4gKiB3aXRoaW4gZWFjaCBjaGF0IGJhbmQuXG4gKlxuICogRW1iZWRkaW5nIGVuZHBvaW50cyAoYHRhc2sgPT09IFwibGxtL3YxL2VtYmVkZGluZ3NcImApIGdvIGludG9cbiAqIHtAbGluayBNb2RlbENsYXNzLkVtYmVkZGluZ30gYnkgdGFzaywgaW4gbGlzdGluZyBvcmRlciAodGhleSBjYXJyeSBub1xuICogY2FwYWJpbGl0eSBzY29yZSB0byByYW5rIG9uKS5cbiAqXG4gKiBDaGF0IGVuZHBvaW50cyAoYHRhc2sgPT09IFwibGxtL3YxL2NoYXRcImApIHNwbGl0IGludG8gdGhlIHRocmVlIGNoYXRcbiAqIGJhbmRzLiBTY29yZWQgZW5kcG9pbnRzICh0aG9zZSBjYXJyeWluZyBhIGBwcm9maWxlLnF1YWxpdHlgKSBkcml2ZVxuICogdGhlIGJhbmRpbmc6IHRoZSBvYnNlcnZlZCBxdWFsaXR5IGRpc3RyaWJ1dGlvbiBpcyBzcGxpdCBhdCBpdHMgMS8zXG4gKiBhbmQgMi8zIHF1YW50aWxlcywgc28gdGhlIHRvcCB0aGlyZCBpcyB7QGxpbmsgTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmd9LFxuICogdGhlIGJvdHRvbSB0aGlyZCB7QGxpbmsgTW9kZWxDbGFzcy5DaGF0RmFzdH0sIGFuZCB0aGUgbWlkZGxlXG4gKiB7QGxpbmsgTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWR9LiBCZWNhdXNlIHRoZSB0aHJlc2hvbGRzIGNvbWUgZnJvbSB0aGVcbiAqIGRhdGEsIHRoZSBzcGxpdCBhZGFwdHMgYXMgRGF0YWJyaWNrcyBhZGRzIG9yIHJlc2NvcmVzIG1vZGVscyAtXG4gKiBub3RoaW5nIGlzIHBpbm5lZCB0byBhIGZpeGVkIHNjb3JlIGJhbmQuXG4gKlxuICogVW5zY29yZWQgY2hhdCBlbmRwb2ludHMgYXJlIHBsYWNlZCBieSB7QGxpbmsgY2xhc3NpZnlCeUZhbWlseX0gYW5kXG4gKiByYW5rZWQgYWZ0ZXIgdGhlIHNjb3JlZCBvbmVzIGluIHRoZWlyIGJhbmQ7IHVucmVjb2duaXplZCwgdW5zY29yZWRcbiAqIGVuZHBvaW50cyAoZS5nLiBjdXN0b20gZXh0ZXJuYWwgbW9kZWxzKSBhcmUgb21pdHRlZCBlbnRpcmVseSBzbyB0aGV5XG4gKiBhcmUgbmV2ZXIgcGlja2VkIGFzIGFuIGF1dG9tYXRpYyBkZWZhdWx0LlxuICpcbiAqIFdpdGhpbiBhIGNoYXQgYmFuZCwgc2NvcmVkIG1vZGVscyBzb3J0IGJ5IGBxdWFsaXR5YCBkZXNjLCB0aGVuIGBjb3N0YFxuICogYXNjLCB0aGVuIGBzcGVlZGAgZGVzYywgdGhlbiBwYXJzZWQgbmFtZSB2ZXJzaW9uIGRlc2M7IGZhbWlseS1vbmx5XG4gKiBtb2RlbHMgc29ydCBieSB2ZXJzaW9uIHJhbmsgdGhlbiBwYXJzZWQgdmVyc2lvbi4gVGhlIHZlcnNpb25cbiAqIHRpZS1icmVhayAoe0BsaW5rIHZlcnNpb25UdXBsZX0pIGlzIHdoYXQgc2VwYXJhdGVzIHBvaW50IHJlbGVhc2VzXG4gKiB0aGF0IHNoYXJlIGEgc2NvcmUgcHJvZmlsZSAoZS5nLiBgb3B1cy00LThgIGFoZWFkIG9mIGBvcHVzLTQtN2ApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlFbmRwb2ludHMoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuKTogUmVjb3JkPE1vZGVsQ2xhc3MsIFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXT4ge1xuICBjb25zdCBjaGF0ID0gZW5kcG9pbnRzLmZpbHRlcigoZSkgPT4gZS50YXNrID09PSBDSEFUX1RBU0spO1xuICBjb25zdCBxdWFsaXRpZXMgPSBjaGF0XG4gICAgLm1hcCgoZSkgPT4gZS5wcm9maWxlPy5xdWFsaXR5KVxuICAgIC5maWx0ZXIoKHEpOiBxIGlzIG51bWJlciA9PiBOdW1iZXIuaXNGaW5pdGUocSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgY29uc3QgbG93ID0gcXVhbnRpbGUocXVhbGl0aWVzLCAxIC8gMyk7XG4gIGNvbnN0IGhpZ2ggPSBxdWFudGlsZShxdWFsaXRpZXMsIDIgLyAzKTtcblxuICBjb25zdCBidWNrZXRzOiBSZWNvcmQ8TW9kZWxDbGFzcywgUmFua2VkW10+ID0ge1xuICAgIFtNb2RlbENsYXNzLkNoYXRUaGlua2luZ106IFtdLFxuICAgIFtNb2RlbENsYXNzLkNoYXRCYWxhbmNlZF06IFtdLFxuICAgIFtNb2RlbENsYXNzLkNoYXRGYXN0XTogW10sXG4gICAgW01vZGVsQ2xhc3MuRW1iZWRkaW5nXTogW10sXG4gIH07XG5cbiAgZm9yIChjb25zdCBlcCBvZiBjaGF0KSB7XG4gICAgY29uc3QgcSA9IGVwLnByb2ZpbGU/LnF1YWxpdHk7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShxKSkge1xuICAgICAgY29uc3QgcXVhbGl0eSA9IHEgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgY2xzID1cbiAgICAgICAgcXVhbGl0eSA+PSBoaWdoXG4gICAgICAgICAgPyBNb2RlbENsYXNzLkNoYXRUaGlua2luZ1xuICAgICAgICAgIDogcXVhbGl0eSA8PSBsb3dcbiAgICAgICAgICAgID8gTW9kZWxDbGFzcy5DaGF0RmFzdFxuICAgICAgICAgICAgOiBNb2RlbENsYXNzLkNoYXRCYWxhbmNlZDtcbiAgICAgIGJ1Y2tldHNbY2xzXS5wdXNoKHtcbiAgICAgICAgZXAsXG4gICAgICAgIHNvcnQ6IHF1YWxpdHksXG4gICAgICAgIHNjb3JlZDogdHJ1ZSxcbiAgICAgICAgdGllQ29zdDogZXAucHJvZmlsZT8uY29zdCA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4gICAgICAgIHRpZVNwZWVkOiBlcC5wcm9maWxlPy5zcGVlZCA/PyAwLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uVHVwbGUoZXAubmFtZSksXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBmYW1pbHkgPSBjbGFzc2lmeUJ5RmFtaWx5KGVwLm5hbWUpO1xuICAgIGlmICghZmFtaWx5KSBjb250aW51ZTtcbiAgICBidWNrZXRzW2ZhbWlseS5jbGFzc10ucHVzaCh7XG4gICAgICBlcCxcbiAgICAgIHNvcnQ6IGZhbWlseS5yYW5rLFxuICAgICAgc2NvcmVkOiBmYWxzZSxcbiAgICAgIHRpZUNvc3Q6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICAgIHRpZVNwZWVkOiAwLFxuICAgICAgdmVyc2lvbjogdmVyc2lvblR1cGxlKGVwLm5hbWUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gRW1iZWRkaW5ncyBhcmUgYnVja2V0ZWQgYnkgdGFzayBpbiBsaXN0aW5nIG9yZGVyIC0gbm8gc2NvcmUgdG8gcmFuay5cbiAgY29uc3QgZW1iZWRkaW5ncyA9IGVuZHBvaW50cy5maWx0ZXIoKGUpID0+IGUudGFzayA9PT0gRU1CRURESU5HX1RBU0spO1xuXG4gIHJldHVybiB7XG4gICAgW01vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nXTogYnVja2V0c1tNb2RlbENsYXNzLkNoYXRUaGlua2luZ10uc29ydChyYW5rT3JkZXIpLm1hcCgoeCkgPT4geC5lcCksXG4gICAgW01vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTogYnVja2V0c1tNb2RlbENsYXNzLkNoYXRCYWxhbmNlZF0uc29ydChyYW5rT3JkZXIpLm1hcCgoeCkgPT4geC5lcCksXG4gICAgW01vZGVsQ2xhc3MuQ2hhdEZhc3RdOiBidWNrZXRzW01vZGVsQ2xhc3MuQ2hhdEZhc3RdLnNvcnQocmFua09yZGVyKS5tYXAoKHgpID0+IHguZXApLFxuICAgIFtNb2RlbENsYXNzLkVtYmVkZGluZ106IGVtYmVkZGluZ3MsXG4gIH07XG59XG4iXX0=
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xhc3NpZnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBK0IsTUFBTSxZQUFZLENBQUM7QUFFckUsZ0VBQWdFO0FBQ2hFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUVoQywwREFBMEQ7QUFDMUQsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUM7QUFZM0M7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQWdDO0lBQ25FLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5Riw4RUFBOEU7SUFDOUUsOENBQThDO0lBQzlDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN6RixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQVVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUk7U0FDZCxLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ1osS0FBSyxDQUFDLGFBQWEsQ0FBQztTQUNwQixHQUFHLENBQUMs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TSxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSxTQUFTLFFBQVEsQ0FBQyxTQUE0QixFQUFFLENBQVM7SUFDdkQsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDOUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBRSxDQUFDO0lBQ3JDLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFlRCxTQUFTLFNBQVMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNyQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07UUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJO1FBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxPQUFPO1FBQUUsT0FBTyxDQUFDLENBQUMsT0FB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QUFJO1lBQ2pCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7WUFDakMsUUFBUSxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUFDO0lBRXRFLE9BQU87UUFDTCxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUYsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVGLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVO0tBQ25DLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2RlbC1jbGFzcyBjbGFzc2lmaWNhdGlvbiBmb3IgRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50cy5cbiAqXG4gKiBDaGF0IGNhcGFiaWxpdHkgYmFuZHMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgbGl2ZSB3b3Jrc3BhY2UgY2F0YWxvZ3VlXG4gKiByYXRoZXIgdGhhbiBhIGhhbmQtbWFpbnRhaW5lZCB0YWJsZS4gRGF0YWJyaWNrcyBwdWJsaXNoZXNcbiAqIHBlci1lbmRwb2ludCBgcXVhbGl0eWAgLyBgc3BlZWRgIC8gYGNvc3RgIHNjb3JlcyAodGhlIEFJIFBsYXlncm91bmRcbiAqIGJhcnMpIG9uIHRoZSBzZXJ2aW5nIGxpc3Q7IHtAbGluayBjbGFzc2lmeUVuZHBvaW50c30gYnVja2V0cyBzY29yZWRcbiAqIGNoYXQgbW9kZWxzIGludG8gdGhlIGNoYXQge0BsaW5rIE1vZGVsQ2xhc3N9IGJhbmRzIGJ5IHRoZSAqcmVsYXRpdmUqXG4gKiBkaXN0cmlidXRpb24gb2YgdGhvc2Ugc2NvcmVzIChxdWFudGlsZXMsIG5vdCBmaXhlZCBjdXQtb2Zmcykgc28gYVxuICogYnJhbmQtbmV3IG1vZGVsIHRoYXQgbGFuZHMgb3V0c2lkZSB0b2RheSdzIHNjb3JlIHJhbmdlIHN0aWxsIHNsb3RzIGluXG4gKiBuZXh0IHRvIGl0cyBwZWVycy4gRW1iZWRkaW5nIGVuZHBvaW50cyAoYHRhc2sgPT09IFwibGxtL3YxL2VtYmVkZGluZ3NcImApXG4gKiBhcmUgYnVja2V0ZWQgaW50byB7QGxpbmsgTW9kZWxDbGFzcy5FbWJlZGRpbmd9IGJ5IHRhc2ssIGluZGVwZW5kZW50IG9mXG4gKiBhbnkgc2NvcmUuXG4gKlxuICogVW5zY29yZWQtYnV0LXJlY29nbml6YWJsZSBjaGF0IGVuZHBvaW50cyBhcmUgc3RpbGwgcGxhY2VkIGJ5IGEgc21hbGxcbiAqIGZhbWlseSBoZXVyaXN0aWMgKHtAbGluayBjbGFzc2lmeUJ5RmFtaWx5fSkgc28gYSB3b3Jrc3BhY2Ugd2hvc2VcbiAqIG1vZGVscyBwcmVkYXRlIEZvdW5kYXRpb24gTW9kZWwgQVBJIHNjb3Jpbmcga2VlcHMgd29ya2luZy4gVGhlXG4gKiBvZmZsaW5lIGZhbGxiYWNrIGZsb29yIC0gdGhlIGhhcmQtY29kZWQgbW9kZWwgbGlzdCByZWFjaGVkIGZvciB3aGVuXG4gKiB0aGUgbGl2ZSBjYXRhbG9ndWUgY2FuJ3QgYmUgcmVhZCBhdCBhbGwgLSBpcyBhIHNlcnZlciBjb25jZXJuIGFuZFxuICogbGl2ZXMgaW4gYEBkYngtdG9vbHMvbW9kZWxgLCBub3QgaGVyZTogYSBicm93c2VyIGNsaWVudCBuZXZlciB0YWxrc1xuICogdG8gRGF0YWJyaWNrcyBkaXJlY3RseSwgc28gaXQgaGFzIG5vdGhpbmcgdG8gZmFsbCBiYWNrIHRvLlxuICpcbiAqIFB1cmUgKG5vIE5vZGUtb25seSBpbXBvcnRzKSwgc28gYSBjbGllbnQgY2FuIGNsYXNzaWZ5IGEgYC9tb2RlbHNgXG4gKiByZXNwb25zZSB3aXRob3V0IHNlcnZlciBkZXBlbmRlbmNpZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IE1vZGVsQ2xhc3MsIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSB9IGZyb20gXCIuL21vZGVsLnRzXCI7XG5cbi8qKiBUYXNrIGhpbnQgRGF0YWJyaWNrcyBzdGFtcHMgb24gY2hhdCBjb21wbGV0aW9uIGVuZHBvaW50cy4gKi9cbmNvbnN0IENIQVRfVEFTSyA9IFwibGxtL3YxL2NoYXRcIjtcblxuLyoqIFRhc2sgaGludCBEYXRhYnJpY2tzIHN0YW1wcyBvbiBlbWJlZGRpbmcgZW5kcG9pbnRzLiAqL1xuY29uc3QgRU1CRURESU5HX1RBU0sgPSBcImxsbS92MS9lbWJlZGRpbmdzXCI7XG5cbi8qKiBXaGF0IGFuIGVuZHBvaW50IGNhbiBiZSBhc2tlZCB0byBkbywgYXMgZGVyaXZlZCBieSB7QGxpbmsgZW5kcG9pbnRDYXBhYmlsaXRpZXN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludENhcGFiaWxpdGllcyB7XG4gIC8qKiBPcGVuQUkgY2hhdC9jb21wbGV0aW9ucyArIFJlc3BvbnNlczogdGhlIHN1cmZhY2UgYSBjaGF0IGFnZW50IG5lZWRzLiAqL1xuICBjaGF0OiBib29sZWFuO1xuICAvKiogRW1iZWRkaW5nICh2ZWN0b3IpIGVuZHBvaW50LiAqL1xuICBlbWJlZGRpbmc6IGJvb2xlYW47XG4gIC8qKiBGdW5jdGlvbiAvIHRvb2wgY2FsbGluZy4gRXZlcnkgY2hhdCBlbmRwb2ludCBvbiBEYXRhYnJpY2tzIHN1cHBvcnRzIGl0LiAqL1xuICB0b29sczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZXJpdmUgYW4gZW5kcG9pbnQncyBjYXBhYmlsaXRpZXMgZnJvbSBpdHMgRGF0YWJyaWNrcyB0YXNrIGhpbnQgYW5kIGl0c1xuICogY2xhc3NpZmllZCB7QGxpbmsgTW9kZWxDbGFzc30sIHNvIGNvbnN1bWVycyBmaWx0ZXIgb24gY2FwYWJpbGl0eSBpbnN0ZWFkIG9mXG4gKiByZS1kZXJpdmluZyBpdCBmcm9tIHJhdyBgdGFza2AgLyBgY2xhc3NgIHN0cmluZ3MuXG4gKlxuICogRWl0aGVyIHNpZ25hbCBhbG9uZSBpcyBlbm91Z2g6IHRoZSB0YXNrIGhpbnQgaXMgYXV0aG9yaXRhdGl2ZSB3aGVuIHByZXNlbnQsXG4gKiBhbmQgdGhlIGNsYXNzIGNvdmVycyBlbmRwb2ludHMgRGF0YWJyaWNrcyBsZWZ0IHVudGFza2VkIGJ1dCB0aGUgY2xhc3NpZmllclxuICogcmVjb2duaXplZC4gRW1iZWRkaW5nIHdpbnMgb3ZlciBjaGF0IHdoZW4gYm90aCBwb2ludCBhdCBpdCwgc2luY2UgdGhlIHR3byBhcmVcbiAqIG5vdCBpbnRlcmNoYW5nZWFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludENhcGFiaWxpdGllcyhlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IEVuZHBvaW50Q2FwYWJpbGl0aWVzIHtcbiAgY29uc3QgZW1iZWRkaW5nID0gZW5kcG9pbnQudGFzayA9PT0gRU1CRURESU5HX1RBU0sgfHwgZW5kcG9pbnQuY2xhc3MgPT09IE1vZGVsQ2xhc3MuRW1iZWRkaW5nO1xuICAvLyBFdmVyeSBub24tZW1iZWRkaW5nIGNsYXNzIGlzIGEgY2hhdCBiYW5kLCBzbyBcImNsYXNzaWZpZWQgYnV0IG5vdCBlbWJlZGRpbmdcIlxuICAvLyBpcyB0aGUgY2xhc3Mtc2lkZSB0ZXN0IGZvciBjaGF0IGNhcGFiaWxpdHkuXG4gIGNvbnN0IGNoYXQgPSAhZW1iZWRkaW5nICYmIChlbmRwb2ludC50YXNrID09PSBDSEFUX1RBU0sgfHwgZW5kcG9pbnQuY2xhc3MgIT09IHVuZGVmaW5lZCk7XG4gIHJldHVybiB7IGNoYXQsIGVtYmVkZGluZywgdG9vbHM6IGNoYXQgfTtcbn1cblxuLyoqIEZhbWlseS1oZXVyaXN0aWMgY2xhc3NpZmljYXRpb24gb2YgYSBzaW5nbGUgZW5kcG9pbnQgbmFtZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5Q2xhc3Mge1xuICAvKiogQ2hhdCBjYXBhYmlsaXR5IGJhbmQgdGhlIGZhbWlseSBtYXBzIHRvIChuZXZlciBlbWJlZGRpbmcpLiAqL1xuICBjbGFzczogTW9kZWxDbGFzcztcbiAgLyoqIEludHJhLWZhbWlseSBvcmRlcmluZyBoaW50IChoaWdoZXIgaXMgbmV3ZXIgLyBtb3JlIGNhcGFibGUpLiAqL1xuICByYW5rOiBudW1iZXI7XG59XG5cbi8qKlxuICogTnVtZXJpYyBgW21ham9yLCBtaW5vciwgcGF0Y2hdYCB2ZXJzaW9uIHBhcnNlZCBmcm9tIGFuIGVuZHBvaW50XG4gKiBuYW1lLCB1c2VkIHRvIG9yZGVyIHNpYmxpbmdzIHdpdGhpbiBhIGZhbWlseS90aWVyLiBTdGFydHMgYXQgdGhlXG4gKiBmaXJzdCBkaWdpdCBpbiB0aGUgbmFtZSwgdGhlbiByZWFkcyBzdWNjZXNzaXZlIHNlcGFyYXRvci1kZWxpbWl0ZWQsXG4gKiBkaWdpdC1wcmVmaXhlZCBjaHVua3MgYXMgdGhlIHRocmVlIGNvbXBvbmVudHMgKG1pc3Npbmcgb25lcyBkZWZhdWx0XG4gKiB0byBgMGApOlxuICpcbiAqICAgLSBgZGF0YWJyaWNrcy1jbGF1ZGUtb3B1cy00LThgICAgLT4gYFs0LCA4LCAwXWBcbiAqICAgLSBgZGF0YWJyaWNrcy1jbGF1ZGUtb3B1cy00LTEwYCAgLT4gYFs0LCAxMCwgMF1gIChzb3J0cyBhYm92ZSA0LTgpXG4gKiAgIC0gYGRhdGFicmlja3MtbWV0YS1sbGFtYS0zLTMtNzBiYC0+IGBbMywgMywgNzBdYFxuICogICAtIGBkYXRhYnJpY2tzLWJnZS1sYXJnZS1lbmAgICAgICAtPiBgWzAsIDAsIDBdYCAobm8gZGlnaXRzKVxuICpcbiAqIENvbXBvbmVudC13aXNlIGNvbXBhcmlzb24gKG5vdCBhIGRlY2ltYWwgY29sbGFwc2UpIHNvIGA0LjEwYCBiZWF0c1xuICogYDQuOGAgLSB0aGUgYnVnIGEgYG1ham9yICsgbWlub3IvMTBgIHNjb3JlIHdvdWxkIGhpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb25UdXBsZShuYW1lOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBzdGFydCA9IG5hbWUuc2VhcmNoKC9cXGQvKTtcbiAgaWYgKHN0YXJ0IDwgMCkgcmV0dXJuIFswLCAwLCAwXTtcbiAgY29uc3QgbnVtcyA9IG5hbWVcbiAgICAuc2xpY2Uoc3RhcnQpXG4gICAgLnNwbGl0KC9bXmEtejAtOV0rL2kpXG4gICAgLm1hcCgoY2h1bmspID0+IGNodW5rLm1hdGNoKC9eXFxkKy8pPy5bMF0pXG4gICAgLmZpbHRlcigoZGlnaXRzKTogZGlnaXRzIGlzIHN0cmluZyA9PiBkaWdpdHMgIT09IHVuZGVmaW5lZClcbiAgICAubWFwKE51bWJlcik7XG4gIHJldHVybiBbbnVtc1swXSA/PyAwLCBudW1zWzFdID8/IDAsIG51bXNbMl0gPz8gMF07XG59XG5cbi8qKiBDb21wYXJlIHR3byB2ZXJzaW9uIHR1cGxlcyBzbyB0aGUgaGlnaGVyIHZlcnNpb24gc29ydHMgZmlyc3QgKGRlc2NlbmRpbmcpLiAqL1xuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25EZXNjKGE6IHJlYWRvbmx5IG51bWJlcltdLCBiOiByZWFkb25seSBudW1iZXJbXSk6IG51bWJlciB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgY29uc3QgZGlmZiA9IChiW2ldID8/IDApIC0gKGFbaV0gPz8gMCk7XG4gICAgaWYgKGRpZmYgIT09IDApIHJldHVybiBkaWZmO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIE1vbm90b25pYyB2ZXJzaW9uIGtleSBmb3Igb3JkZXJpbmcgc2libGluZ3Mgd2l0aGluIGEgZmFtaWx5L3RpZXJcbiAqIChlLmcuIGBvcHVzLTQtOGAgb3ZlciBgb3B1cy00LTdgKS4gRW5jb2RlcyB0aGUge0BsaW5rIHZlcnNpb25UdXBsZX1cbiAqIGFzIGEgc2luZ2xlIG51bWJlciBzbyBjYWxsZXJzIHRoYXQgbmVlZCBhIHNjYWxhciByYW5rICh0aGUgZmFtaWx5XG4gKiBoZXVyaXN0aWMsIHRoZSBzdGF0aWMgZmFsbGJhY2sgb3JkZXJpbmcpIGtlZXAgd29ya2luZzsgdGhlIGVuY29kaW5nXG4gKiBwcmVzZXJ2ZXMgY29tcG9uZW50IG9yZGVyIHdpdGhvdXQgdGhlIGRlY2ltYWwtY29sbGFwc2UgYnVnLlxuICovXG5mdW5jdGlvbiB2ZXJzaW9uU2NvcmUobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gdmVyc2lvblR1cGxlKG5hbWUpO1xuICByZXR1cm4gbWFqb3IgKiAxXzAwMF8wMDAgKyBtaW5vciAqIDFfMDAwICsgcGF0Y2g7XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgY2hhdCBjYXBhYmlsaXR5IGJhbmQgZm9yIGFuIGVuZHBvaW50IHdlIGhhdmUgbm8gbGl2ZVxuICogc2NvcmUgZm9yLCBrZXllZCBvZmYgcHJvdmlkZXIgZmFtaWx5IGFuZCB0aGUgd2VsbC1rbm93biB2YXJpYW50IHdvcmRzXG4gKiBpbiB0aGUgbmFtZSAoYG9wdXNgL2Bzb25uZXRgL2BoYWlrdWAsIGBwcm9gL2BtaW5pYC9gbmFub2AsXG4gKiBgZmxhc2hgL2BmbGFzaC1saXRlYCwgTGxhbWEgcGFyYW1ldGVyIHNpemVzLCBldGMpLiBSZXR1cm5zIGBudWxsYCBmb3JcbiAqIG5hbWVzIHdlIGRvbid0IHJlY29nbml6ZSBzbyB1bmtub3duIGN1c3RvbSBlbmRwb2ludHMgYXJlIG5ldmVyXG4gKiBhdXRvLXNlbGVjdGVkIGFzIGEgZGVmYXVsdC4gVGhlIGFjY29tcGFueWluZyBgcmFua2Agb3JkZXJzIHNpYmxpbmdzXG4gKiB3aXRoaW4gYSBjbGFzcy4gT25seSBldmVyIHJldHVybnMgYSBjaGF0IGJhbmQgLSBlbWJlZGRpbmcgZW5kcG9pbnRzXG4gKiBhcmUgY2xhc3NpZmllZCBieSB0YXNrLCBub3QgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5QnlGYW1pbHkobmFtZTogc3RyaW5nKTogRmFtaWx5Q2xhc3MgfCBudWxsIHtcbiAgY29uc3QgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgYXQgPSAoY2xzOiBNb2RlbENsYXNzKTogRmFtaWx5Q2xhc3MgPT4gKHsgY2xhc3M6IGNscywgcmFuazogdmVyc2lvblNjb3JlKG4pIH0pO1xuXG4gIC8vIEFudGhyb3BpYyBDbGF1ZGVcbiAgaWYgKG4uaW5jbHVkZXMoXCJvcHVzXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmcpO1xuICBpZiAobi5pbmNsdWRlcyhcInNvbm5ldFwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcbiAgaWYgKG4uaW5jbHVkZXMoXCJoYWlrdVwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuXG4gIC8vIE9wZW5BSSBvcGVuLXdlaWdodHMgKGNoZWNrIGJlZm9yZSB0aGUgZ2VuZXJpYyBncHQgYnJhbmNoKVxuICBpZiAobi5pbmNsdWRlcyhcImdwdC1vc3NcIikpIHtcbiAgICByZXR1cm4gYXQobi5pbmNsdWRlcyhcIjEyMGJcIikgPyBNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCA6IE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuICB9XG4gIC8vIE9wZW5BSSBHUFQgZmFtaWx5XG4gIGlmIChuLmluY2x1ZGVzKFwiZ3B0XCIpKSB7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCJwcm9cIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRUaGlua2luZyk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCJtaW5pXCIpIHx8IG4uaW5jbHVkZXMoXCJuYW5vXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0RmFzdCk7XG4gICAgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcbiAgfVxuXG4gIC8vIEdvb2dsZSBHZW1pbmkgLyBHZW1tYVxuICBpZiAobi5pbmNsdWRlcyhcImdlbWluaVwiKSkge1xuICAgIGlmIChuLmluY2x1ZGVzKFwiZmxhc2gtbGl0ZVwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuICAgIGlmIChuLmluY2x1ZGVzKFwicHJvXCIpKSByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmcpO1xuICAgIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCk7XG4gIH1cbiAgaWYgKG4uaW5jbHVkZXMoXCJnZW1tYVwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEZhc3QpO1xuXG4gIC8vIE1ldGEgTGxhbWFcbiAgaWYgKG4uaW5jbHVkZXMoXCJsbGFtYVwiKSkge1xuICAgIGlmIChuLmluY2x1ZGVzKFwibWF2ZXJpY2tcIikgfHwgbi5pbmNsdWRlcyhcIjQwNWJcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRUaGlua2luZyk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCI3MGJcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCk7XG4gICAgaWYgKG4uaW5jbHVkZXMoXCI4YlwiKSB8fCBuLmluY2x1ZGVzKFwiMWJcIikpIHJldHVybiBhdChNb2RlbENsYXNzLkNoYXRGYXN0KTtcbiAgICByZXR1cm4gYXQoTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQpO1xuICB9XG5cbiAgLy8gQWxpYmFiYSBRd2VuXG4gIGlmIChuLmluY2x1ZGVzKFwicXdlblwiKSkgcmV0dXJuIGF0KE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIExpbmVhci1pbnRlcnBvbGF0ZWQgcXVhbnRpbGUgb2YgYW4gYXNjZW5kaW5nLXNvcnRlZCBudW1lcmljIGFycmF5LiAqL1xuZnVuY3Rpb24gcXVhbnRpbGUoc29ydGVkQXNjOiByZWFkb25seSBudW1iZXJbXSwgcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHNvcnRlZEFzYy5sZW5ndGggPT09IDApIHJldHVybiBOdW1iZXIuTmFOO1xuICBjb25zdCBpZHggPSAoc29ydGVkQXNjLmxlbmd0aCAtIDEpICogcDtcbiAgY29uc3QgbG8gPSBNYXRoLmZsb29yKGlkeCk7XG4gIGNvbnN0IGhpID0gTWF0aC5jZWlsKGlkeCk7XG4gIGlmIChsbyA9PT0gaGkpIHJldHVybiBzb3J0ZWRBc2NbbG9dITtcbiAgcmV0dXJuIHNvcnRlZEFzY1tsb10hICsgKHNvcnRlZEFzY1toaV0hIC0gc29ydGVkQXNjW2xvXSEpICogKGlkeCAtIGxvKTtcbn1cblxuLyoqIEludGVybmFsIHNvcnRhYmxlIHdyYXBwZXIgY2FycnlpbmcgdGhlIG9yZGVyaW5nIGtleXMgZm9yIGEgYnVja2V0IGVudHJ5LiAqL1xuaW50ZXJmYWNlIFJhbmtlZCB7XG4gIGVwOiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5O1xuICAvKiogUXVhbGl0eSAoc2NvcmVkKSBvciBmYW1pbHkgdmVyc2lvbiAodW5zY29yZWQpIC0gaGlnaGVyIGZpcnN0LiAqL1xuICBzb3J0OiBudW1iZXI7XG4gIC8qKiBTY29yZWQgZW5kcG9pbnRzIHJhbmsgYWhlYWQgb2YgZmFtaWx5LW9ubHkgZ3Vlc3Nlcy4gKi9cbiAgc2NvcmVkOiBib29sZWFuO1xuICB0aWVDb3N0OiBudW1iZXI7XG4gIHRpZVNwZWVkOiBudW1iZXI7XG4gIC8qKiBQYXJzZWQgbmFtZSB2ZXJzaW9uLCB0aGUgZmluYWwgdGllLWJyZWFrZXIgKG5ld2VyIHNpYmxpbmcgZmlyc3QpLiAqL1xuICB2ZXJzaW9uOiByZWFkb25seSBudW1iZXJbXTtcbn1cblxuZnVuY3Rpb24gcmFua09yZGVyKGE6IFJhbmtlZCwgYjogUmFua2VkKTogbnVtYmVyIHtcbiAgaWYgKGEuc2NvcmVkICE9PSBiLnNjb3JlZCkgcmV0dXJuIGEuc2NvcmVkID8gLTEgOiAxO1xuICBpZiAoYi5zb3J0ICE9PSBhLnNvcnQpIHJldHVybiBiLnNvcnQgLSBhLnNvcnQ7XG4gIGlmIChhLnRpZUNvc3QgIT09IGIudGllQ29zdCkgcmV0dXJuIGEudGllQ29zdCAtIGIudGllQ29zdDtcbiAgaWYgKGIudGllU3BlZWQgIT09IGEudGllU3BlZWQpIHJldHVybiBiLnRpZVNwZWVkIC0gYS50aWVTcGVlZDtcbiAgLy8gU2FtZSBzY29yZWQtbmVzcywgcXVhbGl0eSwgY29zdCwgYW5kIHNwZWVkIChlLmcuIHNldmVyYWwgQ2xhdWRlXG4gIC8vIE9wdXMgcG9pbnQgcmVsZWFzZXMpOiBwcmVmZXIgdGhlIG5ld2VyIHBhcnNlZCB2ZXJzaW9uIHNvXG4gIC8vIGBvcHVzLTQtOGAgYmVhdHMgYG9wdXMtNC03YC5cbiAgcmV0dXJuIGNvbXBhcmVWZXJzaW9uRGVzYyhhLnZlcnNpb24sIGIudmVyc2lvbik7XG59XG5cbi8qKlxuICogQnVja2V0IGxpdmUgZW5kcG9pbnRzIGludG8ge0BsaW5rIE1vZGVsQ2xhc3N9ZXMsIHJhbmtlZCBiZXN0LWZpcnN0XG4gKiB3aXRoaW4gZWFjaCBjaGF0IGJhbmQuXG4gKlxuICogRW1iZWRkaW5nIGVuZHBvaW50cyAoYHRhc2sgPT09IFwibGxtL3YxL2VtYmVkZGluZ3NcImApIGdvIGludG9cbiAqIHtAbGluayBNb2RlbENsYXNzLkVtYmVkZGluZ30gYnkgdGFzaywgaW4gbGlzdGluZyBvcmRlciAodGhleSBjYXJyeSBub1xuICogY2FwYWJpbGl0eSBzY29yZSB0byByYW5rIG9uKS5cbiAqXG4gKiBDaGF0IGVuZHBvaW50cyAoYHRhc2sgPT09IFwibGxtL3YxL2NoYXRcImApIHNwbGl0IGludG8gdGhlIHRocmVlIGNoYXRcbiAqIGJhbmRzLiBTY29yZWQgZW5kcG9pbnRzICh0aG9zZSBjYXJyeWluZyBhIGBwcm9maWxlLnF1YWxpdHlgKSBkcml2ZVxuICogdGhlIGJhbmRpbmc6IHRoZSBvYnNlcnZlZCBxdWFsaXR5IGRpc3RyaWJ1dGlvbiBpcyBzcGxpdCBhdCBpdHMgMS8zXG4gKiBhbmQgMi8zIHF1YW50aWxlcywgc28gdGhlIHRvcCB0aGlyZCBpcyB7QGxpbmsgTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmd9LFxuICogdGhlIGJvdHRvbSB0aGlyZCB7QGxpbmsgTW9kZWxDbGFzcy5DaGF0RmFzdH0sIGFuZCB0aGUgbWlkZGxlXG4gKiB7QGxpbmsgTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWR9LiBCZWNhdXNlIHRoZSB0aHJlc2hvbGRzIGNvbWUgZnJvbSB0aGVcbiAqIGRhdGEsIHRoZSBzcGxpdCBhZGFwdHMgYXMgRGF0YWJyaWNrcyBhZGRzIG9yIHJlc2NvcmVzIG1vZGVscyAtXG4gKiBub3RoaW5nIGlzIHBpbm5lZCB0byBhIGZpeGVkIHNjb3JlIGJhbmQuXG4gKlxuICogVW5zY29yZWQgY2hhdCBlbmRwb2ludHMgYXJlIHBsYWNlZCBieSB7QGxpbmsgY2xhc3NpZnlCeUZhbWlseX0gYW5kXG4gKiByYW5rZWQgYWZ0ZXIgdGhlIHNjb3JlZCBvbmVzIGluIHRoZWlyIGJhbmQ7IHVucmVjb2duaXplZCwgdW5zY29yZWRcbiAqIGVuZHBvaW50cyAoZS5nLiBjdXN0b20gZXh0ZXJuYWwgbW9kZWxzKSBhcmUgb21pdHRlZCBlbnRpcmVseSBzbyB0aGV5XG4gKiBhcmUgbmV2ZXIgcGlja2VkIGFzIGFuIGF1dG9tYXRpYyBkZWZhdWx0LlxuICpcbiAqIFdpdGhpbiBhIGNoYXQgYmFuZCwgc2NvcmVkIG1vZGVscyBzb3J0IGJ5IGBxdWFsaXR5YCBkZXNjLCB0aGVuIGBjb3N0YFxuICogYXNjLCB0aGVuIGBzcGVlZGAgZGVzYywgdGhlbiBwYXJzZWQgbmFtZSB2ZXJzaW9uIGRlc2M7IGZhbWlseS1vbmx5XG4gKiBtb2RlbHMgc29ydCBieSB2ZXJzaW9uIHJhbmsgdGhlbiBwYXJzZWQgdmVyc2lvbi4gVGhlIHZlcnNpb25cbiAqIHRpZS1icmVhayAoe0BsaW5rIHZlcnNpb25UdXBsZX0pIGlzIHdoYXQgc2VwYXJhdGVzIHBvaW50IHJlbGVhc2VzXG4gKiB0aGF0IHNoYXJlIGEgc2NvcmUgcHJvZmlsZSAoZS5nLiBgb3B1cy00LThgIGFoZWFkIG9mIGBvcHVzLTQtN2ApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlFbmRwb2ludHMoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuKTogUmVjb3JkPE1vZGVsQ2xhc3MsIFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXT4ge1xuICBjb25zdCBjaGF0ID0gZW5kcG9pbnRzLmZpbHRlcigoZSkgPT4gZS50YXNrID09PSBDSEFUX1RBU0spO1xuICBjb25zdCBxdWFsaXRpZXMgPSBjaGF0XG4gICAgLm1hcCgoZSkgPT4gZS5wcm9maWxlPy5xdWFsaXR5KVxuICAgIC5maWx0ZXIoKHEpOiBxIGlzIG51bWJlciA9PiBOdW1iZXIuaXNGaW5pdGUocSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgY29uc3QgbG93ID0gcXVhbnRpbGUocXVhbGl0aWVzLCAxIC8gMyk7XG4gIGNvbnN0IGhpZ2ggPSBxdWFudGlsZShxdWFsaXRpZXMsIDIgLyAzKTtcblxuICBjb25zdCBidWNrZXRzOiBSZWNvcmQ8TW9kZWxDbGFzcywgUmFua2VkW10+ID0ge1xuICAgIFtNb2RlbENsYXNzLkNoYXRUaGlua2luZ106IFtdLFxuICAgIFtNb2RlbENsYXNzLkNoYXRCYWxhbmNlZF06IFtdLFxuICAgIFtNb2RlbENsYXNzLkNoYXRGYXN0XTogW10sXG4gICAgW01vZGVsQ2xhc3MuRW1iZWRkaW5nXTogW10sXG4gIH07XG5cbiAgZm9yIChjb25zdCBlcCBvZiBjaGF0KSB7XG4gICAgY29uc3QgcSA9IGVwLnByb2ZpbGU/LnF1YWxpdHk7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShxKSkge1xuICAgICAgY29uc3QgcXVhbGl0eSA9IHEgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgY2xzID1cbiAgICAgICAgcXVhbGl0eSA+PSBoaWdoXG4gICAgICAgICAgPyBNb2RlbENsYXNzLkNoYXRUaGlua2luZ1xuICAgICAgICAgIDogcXVhbGl0eSA8PSBsb3dcbiAgICAgICAgICAgID8gTW9kZWxDbGFzcy5DaGF0RmFzdFxuICAgICAgICAgICAgOiBNb2RlbENsYXNzLkNoYXRCYWxhbmNlZDtcbiAgICAgIGJ1Y2tldHNbY2xzXS5wdXNoKHtcbiAgICAgICAgZXAsXG4gICAgICAgIHNvcnQ6IHF1YWxpdHksXG4gICAgICAgIHNjb3JlZDogdHJ1ZSxcbiAgICAgICAgdGllQ29zdDogZXAucHJvZmlsZT8uY29zdCA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4gICAgICAgIHRpZVNwZWVkOiBlcC5wcm9maWxlPy5zcGVlZCA/PyAwLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uVHVwbGUoZXAubmFtZSksXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBmYW1pbHkgPSBjbGFzc2lmeUJ5RmFtaWx5KGVwLm5hbWUpO1xuICAgIGlmICghZmFtaWx5KSBjb250aW51ZTtcbiAgICBidWNrZXRzW2ZhbWlseS5jbGFzc10ucHVzaCh7XG4gICAgICBlcCxcbiAgICAgIHNvcnQ6IGZhbWlseS5yYW5rLFxuICAgICAgc2NvcmVkOiBmYWxzZSxcbiAgICAgIHRpZUNvc3Q6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICAgIHRpZVNwZWVkOiAwLFxuICAgICAgdmVyc2lvbjogdmVyc2lvblR1cGxlKGVwLm5hbWUpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gRW1iZWRkaW5ncyBhcmUgYnVja2V0ZWQgYnkgdGFzayBpbiBsaXN0aW5nIG9yZGVyIC0gbm8gc2NvcmUgdG8gcmFuay5cbiAgY29uc3QgZW1iZWRkaW5ncyA9IGVuZHBvaW50cy5maWx0ZXIoKGUpID0+IGUudGFzayA9PT0gRU1CRURESU5HX1RBU0spO1xuXG4gIHJldHVybiB7XG4gICAgW01vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nXTogYnVja2V0c1tNb2RlbENsYXNzLkNoYXRUaGlua2luZ10uc29ydChyYW5rT3JkZXIpLm1hcCgoeCkgPT4geC5lcCksXG4gICAgW01vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTogYnVja2V0c1tNb2RlbENsYXNzLkNoYXRCYWxhbmNlZF0uc29ydChyYW5rT3JkZXIpLm1hcCgoeCkgPT4geC5lcCksXG4gICAgW01vZGVsQ2xhc3MuQ2hhdEZhc3RdOiBidWNrZXRzW01vZGVsQ2xhc3MuQ2hhdEZhc3RdLnNvcnQocmFua09yZGVyKS5tYXAoKHgpID0+IHguZXApLFxuICAgIFtNb2RlbENsYXNzLkVtYmVkZGluZ106IGVtYmVkZGluZ3MsXG4gIH07XG59XG4iXX0=
@@ -683,4 +683,4 @@ export function sanitizeOpenResponsesInput(body) {
683
683
  export function sanitizeOpenResponsesRequest(body) {
684
684
  return sanitizeOpenResponsesInput(sanitizeResponsesTools(body));
685
685
  }
686
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLXJlc3BvbnNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYWktcmVzcG9uc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEQsT0FBTyxFQUF1QyxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2Rjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUE2QjtJQUkzRCxNQUFNLFFBQVEsR0FBa0IsRUFBRSxDQUFDO0lBRW5DLHFEQUFxRDtJQUNyRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsNERBQTREO0lBQzVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxTQUFTO1FBQzlDLE1BQU0sSUFBSSxHQUFHLEdBQThCLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUV2QixJQUFJLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUM3Qix1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TUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hFLFNBQVM7WUFDWCxDQUFDO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsU0FBUztRQUNYLENBQUM7UUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsNEVBQTRFO1FBQzVFLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXO1lBQUUsU0FBUztRQUNoRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsSUFBNkI7SUFFN0IsT0FBTywwQkFBMEIsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wZW5BSSBSZXNwb25zZXMgQVBJIDwtPiBDaGF0IENvbXBsZXRpb25zIHRyYW5zbGF0aW9uLlxuICpcbiAqIFNvbWUgY2xpZW50cyBzcGVhayBvbmx5IHRoZSBSZXNwb25zZXMgQVBJIChgUE9TVCAvdjEvcmVzcG9uc2VzYCkgLSB0aGUgQ29kZXhcbiAqIENMSSBpcyB0aGUgbW90aXZhdGluZyBvbmUuIERhdGFicmlja3Mgbm93IGFsc28gZXhwb3NlcyBuYXRpdmUgUmVzcG9uc2VzXG4gKiBzdXJmYWNlcyAoYC9zZXJ2aW5nLWVuZHBvaW50cy9yZXNwb25zZXNgIGFuZCBgL3NlcnZpbmctZW5kcG9pbnRzL29wZW4tcmVzcG9uc2VzYCksXG4gKiB3aGlsZSBtb3N0IGVuZHBvaW50cyBzdGlsbCBzcGVhayBDaGF0IENvbXBsZXRpb25zIGF0IGAvaW52b2NhdGlvbnNgLiBUaGlzXG4gKiBtb2R1bGUgYnJpZGdlcyB0aGUgdHdvLCBpbiBib3RoIGRpcmVjdGlvbnM6XG4gKlxuICogICAtIHtAbGluayByZXNwb25zZXNUb0NoYXR9IGxvd2VycyBhIFJlc3BvbnNlcyByZXF1ZXN0IGJvZHkgdG8gYSBjaGF0XG4gKiAgICAgY29tcGxldGlvbnMgYm9keSAoaW5zdHJ1Y3Rpb25zIC0+IHN5c3RlbSBtZXNzYWdlLCB0eXBlZCBgaW5wdXRgIGl0ZW1zIC0+XG4gKiAgICAgYG1lc3NhZ2VzYCwgYHRvb2xzYC9gdG9vbF9jaG9pY2VgIGNhcnJpZWQgdGhyb3VnaCwgZnVuY3Rpb24tY2FsbCBvdXRwdXRzXG4gKiAgICAgZm9sZGVkIGJhY2sgaW50byB0aGUgdHJhbnNjcmlwdCkuXG4gKiAgIC0ge0BsaW5rIGNoYXRUb1Jlc3BvbnNlc1JlcXVlc3R9IHJhaXNlcyBhIGNoYXQtY29tcGxldGlvbnMgcmVxdWVzdCBpbnRvIGFcbiAqICAgICBSZXNwb25zZXMgcmVxdWVzdCAodGhlIGludmVyc2Ugb2Yge0BsaW5rIHJlc3BvbnNlc1RvQ2hhdH0pLCBmb3Igcm91dGluZyBhXG4gKiAgICAgY2hhdCBjbGllbnQgYXQgYSBSZXNwb25zZXMtb25seSBtb2RlbCBsaWtlIENvZGV4LlxuICogICAtIHtAbGluayBjaGF0VG9SZXNwb25zZX0gbGlmdHMgYSBub24tc3RyZWFtaW5nIGNoYXQgY29tcGxldGlvbiBiYWNrIGludG8gYVxuICogICAgIFJlc3BvbnNlcyBgcmVzcG9uc2VgIG9iamVjdC5cbiAqICAgLSB7QGxpbmsgcmVzcG9uc2VUb0NoYXRDb21wbGV0aW9ufSBsaWZ0cyBhIG5hdGl2ZSBSZXNwb25zZXMgYHJlc3BvbnNlYFxuICogICAgIGJhY2sgaW50byBhIGNoYXQtY29tcGxldGlvbnMgYm9keSAodGhlIGludmVyc2Ugb2Yge0BsaW5rIGNoYXRUb1Jlc3BvbnNlfSkuXG4gKiAgIC0ge0BsaW5rIGNyZWF0ZVJlc3BvbnNlc1N0cmVhbVRyYW5zbGF0b3J9IGxpZnRzIGEgc3RyZWFtaW5nIGNoYXQgY29tcGxldGlvblxuICogICAgIChhbiBPcGVuQUkgU1NFIGBjaGF0LmNvbXBsZXRpb24uY2h1bmtgIHN0cmVhbSkgaW50byB0aGUgUmVzcG9uc2VzIFNTRVxuICogICAgIGV2ZW50IHN0cmVhbSB0aG9zZSBjbGllbnRzIGNvbnN1bWUgKGByZXNwb25zZS5jcmVhdGVkYCxcbiAqICAgICBgcmVzcG9uc2Uub3V0cHV0X3RleHQuZGVsdGFgLCBmdW5jdGlvbi1jYWxsIGFyZ3VtZW50IGRlbHRhcyxcbiAqICAgICBgcmVzcG9uc2UuY29tcGxldGVkYCkuXG4gKiAgIC0ge0BsaW5rIHJlYWRSZXNwb25zZXNPdXRwdXR9IHJlYWRzIHRoZSBvdGhlciBkaXJlY3Rpb246IHB1bGwgdGhlIGFuc3dlclxuICogICAgIHRleHQgYW5kIGNpdGF0aW9ucyBvdXQgb2YgYSBgcmVzcG9uc2VgIG9iamVjdCByZXR1cm5lZCBieSBhbiBlbmRwb2ludFxuICogICAgIHRoYXQgc3BlYWtzIFJlc3BvbnNlcyBuYXRpdmVseSAodGhlIERhdGFicmlja3MgbmF0aXZlIHdlYi1zZWFyY2ggdG9vbCkuXG4gKiAgIC0ge0BsaW5rIHNhbml0aXplUmVzcG9uc2VzVG9vbHN9IGtlZXBzIG9ubHkgYGZ1bmN0aW9uYCB0b29scyBvbiBhIFJlc3BvbnNlc1xuICogICAgIHJlcXVlc3QgYm9keSAoZm9yIGAvb3Blbi1yZXNwb25zZXNgIC8gQW50aHJvcGljLCB3aGljaCByZWplY3QgQ29kZXhcbiAqICAgICBidWlsdC1pbnMgbGlrZSBgd2ViX3NlYXJjaGApLlxuICogICAtIHtAbGluayBzYW5pdGl6ZU9wZW5SZXNwb25zZXNJbnB1dH0gcmV3cml0ZXMgYG91dHB1dF8qYCBjb250ZW50IHBhcnQgdHlwZXNcbiAqICAgICBpbiBgaW5wdXRgIHRvIGBpbnB1dF8qYCwgYW5kIGRyb3BzIENsYXVkZSB0aGlua2luZyAvIHJlYXNvbmluZyBibG9ja3NcbiAqICAgICB0aGF0IE9wZW4gUmVzcG9uc2VzIHJlamVjdHMgb24gcmVwbGF5IChgcmVkYWN0ZWRfdGhpbmtpbmdgLCDigKYpLlxuICpcbiAqIE9ubHkgdGhlIHN1cmZhY2UgcmVhbCBjbGllbnRzIGV4ZXJjaXNlIGlzIHRyYW5zbGF0ZWQ7IHVua25vd24gZmllbGRzIGFyZVxuICogaWdub3JlZCByYXRoZXIgdGhhbiByZWplY3RlZCwgc28gYSBuZXdlciBjbGllbnQgZGVncmFkZXMgaW5zdGVhZCBvZiBicmVha2luZy5cbiAqXG4gKiBCcm93c2VyLXNhZmU6IHB1cmUgZnVuY3Rpb25zIG92ZXIgcGxhaW4gSlNPTiwgbm8gdHJhbnNwb3J0IGFuZCBubyBOb2RlXG4gKiBidWlsdC1pbnMsIHNvIHRoZSBzYW1lIHRyYW5zbGF0aW9uIHJ1bnMgaW4gYSBwcm94eSwgYSBzZXJ2ZXIgcm91dGUsIG9yIGEgdGVzdC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuaW1wb3J0IHsgdHlwZSBDaGF0TWVzc2FnZSwgdHlwZSBDaGF0VG9vbENhbGwsIGNoYXRDb250ZW50VG9UZXh0IH0gZnJvbSBcIi4vb3BlbmFpLWNoYXRcIjtcblxuLyoqXG4gKiBMb3dlciBhIFJlc3BvbnNlcyByZXF1ZXN0IGJvZHkgdG8gYSBjaGF0LWNvbXBsZXRpb25zIGJvZHkuIFJldHVybnMgdGhlIGNoYXRcbiAqIGJvZHkgcGx1cyB3aGV0aGVyIHRoZSBjYWxsZXIgYXNrZWQgZm9yIHN0cmVhbWluZyAodGhlIHNlcnZlciBuZWVkcyBpdCB0byBwaWNrXG4gKiB0aGUgdXBzdHJlYW0gYGFjY2VwdGAgaGVhZGVyIGFuZCB0aGUgdHJhbnNsYXRpb24gcGF0aCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNwb25zZXNUb0NoYXQoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB7XG4gIGNoYXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzdHJlYW06IGJvb2xlYW47XG59IHtcbiAgY29uc3QgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10gPSBbXTtcblxuICAvLyBgaW5zdHJ1Y3Rpb25zYCBiZWNvbWVzIHRoZSBsZWFkaW5nIHN5c3RlbSBtZXNzYWdlLlxuICBpZiAodHlwZW9mIGJvZHkuaW5zdHJ1Y3Rpb25zID09PSBcInN0cmluZ1wiICYmIGJvZHkuaW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICBtZXNzYWdlcy5wdXNoKHsgcm9sZTogXCJzeXN0ZW1cIiwgY29udGVudDogYm9keS5pbnN0cnVjdGlvbnMgfSk7XG4gIH1cblxuICAvLyBgaW5wdXRgIGlzIGFuIGFycmF5IG9mIHR5cGVkIGl0ZW1zOiBtZXNzYWdlcywgZnVuY3Rpb25fY2FsbCwgYW5kXG4gIC8vIGZ1bmN0aW9uX2NhbGxfb3V0cHV0LiBGb2xkIGVhY2ggaW50byB0aGUgY2hhdCB0cmFuc2NyaXB0LlxuICBjb25zdCBpbnB1dCA9IEFycmF5LmlzQXJyYXkoYm9keS5pbnB1dCkgPyBib2R5LmlucHV0IDogW107XG4gIGZvciAoY29uc3QgcmF3IG9mIGlucHV0KSB7XG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gXCJvYmplY3RcIikgY29udGludWU7XG4gICAgY29uc3QgaXRlbSA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCB0eXBlID0gaXRlbS50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbFwiKSB7XG4gICAgICAvLyBBIHByaW9yIHRvb2wgY2FsbCB0aGUgbW9kZWwgbWFkZTsgcmUtYXR0YWNoIGl0IHRvIGFuIGFzc2lzdGFudCB0dXJuLlxuICAgICAgbWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgICAgIHRvb2xfY2FsbHM6IFt0b0NoYXRUb29sQ2FsbChpdGVtKV0sXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBcImZ1bmN0aW9uX2NhbGxfb3V0cHV0XCIpIHtcbiAgICAgIC8vIFRoZSB0b29sJ3MgcmVzdWx0LCBrZXllZCBiYWNrIHRvIHRoZSBjYWxsIGl0IGFuc3dlcnMuXG4gICAgICBtZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgcm9sZTogXCJ0b29sXCIsXG4gICAgICAgIHRvb2xfY2FsbF9pZDogU3RyaW5nKGl0ZW0uY2FsbF9pZCA/PyBpdGVtLmlkID8/IFwiXCIpLFxuICAgICAgICBjb250ZW50OiB0eXBlb2YgaXRlbS5vdXRwdXQgPT09IFwic3RyaW5nXCIgPyBpdGVtLm91dHB1dCA6IGNoYXRDb250ZW50VG9UZXh0KGl0ZW0ub3V0cHV0KSxcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogYSBtZXNzYWdlIGl0ZW0gd2l0aCBhIHJvbGUgYW5kIHR5cGVkIGNvbnRlbnQuXG4gICAgY29uc3Qgcm9sZSA9IHR5cGVvZiBpdGVtLnJvbGUgPT09IFwic3RyaW5nXCIgPyBpdGVtLnJvbGUgOiBcInVzZXJcIjtcbiAgICAvLyBDaGF0IGhhcyBubyBcImRldmVsb3BlclwiIHJvbGU7IHRyZWF0IGl0IGFzIHN5c3RlbSAoaXRzIGludGVudCBoZXJlKS5cbiAgICBjb25zdCBjaGF0Um9sZSA9IHJvbGUgPT09IFwiZGV2ZWxvcGVyXCIgPyBcInN5c3RlbVwiIDogcm9sZTtcbiAgICBtZXNzYWdlcy5wdXNoKHsgcm9sZTogY2hhdFJvbGUsIGNvbnRlbnQ6IGNoYXRDb250ZW50VG9UZXh0KGl0ZW0uY29udGVudCkgfSk7XG4gIH1cblxuICBjb25zdCBjaGF0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBtb2RlbDogYm9keS5tb2RlbCxcbiAgICBtZXNzYWdlcyxcbiAgICBzdHJlYW06IGJvZHkuc3RyZWFtID09PSB0cnVlLFxuICB9O1xuXG4gIC8vIENhcnJ5IHRocm91Z2ggZnVuY3Rpb24tY2FsbGluZyBjb25maWcgd2hlbiBwcmVzZW50LiBSZXNwb25zZXMgZnVuY3Rpb25cbiAgLy8gdG9vbHMgYXJlIEZMQVQgKGB7dHlwZTpcImZ1bmN0aW9uXCIsIG5hbWUsIGRlc2NyaXB0aW9uLCBwYXJhbWV0ZXJzfWApOyBjaGF0XG4gIC8vIHdhbnRzIHRoZW0gTkVTVEVEIChge3R5cGU6XCJmdW5jdGlvblwiLCBmdW5jdGlvbjp7bmFtZSwg4oCmfX1gKS4gQ2xpZW50cyBhbHNvXG4gIC8vIHNlbmQgYnVpbHQtaW4gdG9vbCB0eXBlcyAobG9jYWxfc2hlbGwsIHdlYl9zZWFyY2gsIOKApikgdGhhdCBEYXRhYnJpY2tzIGNoYXRcbiAgLy8gcmVqZWN0cyAoXCJNaXNzaW5nICdmdW5jdGlvbicgaW4gdGhlIHRvb2wgc3BlY2lmaWNhdGlvblwiKSwgc28gd2UgdHJhbnNsYXRlXG4gIC8vIG9ubHkgZnVuY3Rpb24gdG9vbHMgYW5kIGRyb3AgdGhlIHJlc3QuXG4gIGlmIChBcnJheS5pc0FycmF5KGJvZHkudG9vbHMpICYmIGJvZHkudG9vbHMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGNoYXRUb29scyA9IGJvZHkudG9vbHNcbiAgICAgIC5tYXAodG9DaGF0VG9vbClcbiAgICAgIC5maWx0ZXIoKHQpOiB0IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHQgIT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKGNoYXRUb29scy5sZW5ndGggPiAwKSB7XG4gICAgICBjaGF0LnRvb2xzID0gY2hhdFRvb2xzO1xuICAgICAgaWYgKGJvZHkudG9vbF9jaG9pY2UgIT09IHVuZGVmaW5lZCkgY2hhdC50b29sX2Nob2ljZSA9IGJvZHkudG9vbF9jaG9pY2U7XG4gICAgICAvLyBOT1RFOiBkbyBOT1QgZm9yd2FyZCBgcGFyYWxsZWxfdG9vbF9jYWxsc2AuIENsaWVudHMgc2VuZCBpdCwgYnV0XG4gICAgICAvLyBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcncyBjaGF0IEFQSSByZWplY3RzIHVua25vd24gZmllbGRzXG4gICAgICAvLyAoXCJwYXJhbGxlbF90b29sX2NhbGxzOiBFeHRyYSBpbnB1dHMgYXJlIG5vdCBwZXJtaXR0ZWRcIiksIHdoaWNoIHdvdWxkXG4gICAgICAvLyBmYWlsIHRoZSB3aG9sZSB0dXJuLiBEcm9wIGl0LlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGNoYXQsIHN0cmVhbTogYm9keS5zdHJlYW0gPT09IHRydWUgfTtcbn1cblxuLyoqXG4gKiBSYWlzZSBhIGNoYXQtY29tcGxldGlvbnMgcmVxdWVzdCBpbnRvIGEgUmVzcG9uc2VzIHJlcXVlc3QgYm9keS4gSW52ZXJzZSBvZlxuICoge0BsaW5rIHJlc3BvbnNlc1RvQ2hhdH06IHVzZWQgd2hlbiBhIGNoYXQgY2xpZW50IGhpdHMgYSBSZXNwb25zZXMtb25seVxuICogRGF0YWJyaWNrcyBtb2RlbCAoZS5nLiBDb2RleCkgc28gdGhlIHByb3h5IGNhbiBQT1NUIHRvXG4gKiBgL3NlcnZpbmctZW5kcG9pbnRzL3Jlc3BvbnNlc2Agd2l0aG91dCB0aGUgY2xpZW50IGtub3dpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGF0VG9SZXNwb25zZXNSZXF1ZXN0KGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KToge1xuICByZXNwb25zZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzdHJlYW06IGJvb2xlYW47XG59IHtcbiAgY29uc3QgbWVzc2FnZXMgPSBBcnJheS5pc0FycmF5KGJvZHkubWVzc2FnZXMpID8gYm9keS5tZXNzYWdlcyA6IFtdO1xuICBjb25zdCBpbnB1dDogdW5rbm93bltdID0gW107XG4gIGxldCBpbnN0cnVjdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IHJhdyBvZiBtZXNzYWdlcykge1xuICAgIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgcm9sZSA9IHR5cGVvZiBtZXNzYWdlLnJvbGUgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlLnJvbGUgOiBcInVzZXJcIjtcblxuICAgIC8vIExlYWRpbmcgc3lzdGVtIC8gZGV2ZWxvcGVyIG1lc3NhZ2VzIGJlY29tZSB0b3AtbGV2ZWwgYGluc3RydWN0aW9uc2AuXG4gICAgaWYgKFxuICAgICAgKHJvbGUgPT09IFwic3lzdGVtXCIgfHwgcm9sZSA9PT0gXCJkZXZlbG9wZXJcIikgJiZcbiAgICAgIGluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnB1dC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IHRleHQgPSBjaGF0Q29udGVudFRvVGV4dChtZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgaWYgKHRleHQpIGluc3RydWN0aW9ucyA9IHRleHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocm9sZSA9PT0gXCJ0b29sXCIpIHtcbiAgICAgIGlucHV0LnB1c2goe1xuICAgICAgICB0eXBlOiBcImZ1bmN0aW9uX2NhbGxfb3V0cHV0XCIsXG4gICAgICAgIGNhbGxfaWQ6IFN0cmluZyhtZXNzYWdlLnRvb2xfY2FsbF9pZCA/PyBcIlwiKSxcbiAgICAgICAgb3V0cHV0OiBjaGF0Q29udGVudFRvVGV4dChtZXNzYWdlLmNvbnRlbnQpLFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByb2xlID09PSBcImFzc2lzdGFudFwiICYmXG4gICAgICBBcnJheS5pc0FycmF5KG1lc3NhZ2UudG9vbF9jYWxscykgJiZcbiAgICAgIG1lc3NhZ2UudG9vbF9jYWxscy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBmb3IgKGNvbnN0IHJhd0NhbGwgb2YgbWVzc2FnZS50b29sX2NhbGxzKSB7XG4gICAgICAgIGlmICghcmF3Q2FsbCB8fCB0eXBlb2YgcmF3Q2FsbCAhPT0gXCJvYmplY3RcIikgY29udGludWU7XG4gICAgICAgIGlucHV0LnB1c2godG9GdW5jdGlvbkNhbGxJdGVtKHJhd0NhbGwgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRleHQgPSBjaGF0Q29udGVudFRvVGV4dChtZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgaW5wdXQucHVzaCh7IHR5cGU6IFwibWVzc2FnZVwiLCByb2xlOiBcImFzc2lzdGFudFwiLCBjb250ZW50OiB0ZXh0IH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaW5wdXQucHVzaCh7XG4gICAgICB0eXBlOiBcIm1lc3NhZ2VcIixcbiAgICAgIHJvbGUsXG4gICAgICBjb250ZW50OiBjaGF0Q29udGVudFRvVGV4dChtZXNzYWdlLmNvbnRlbnQpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2VzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBtb2RlbDogYm9keS5tb2RlbCxcbiAgICBpbnB1dCxcbiAgICBzdHJlYW06IGJvZHkuc3RyZWFtID09PSB0cnVlLFxuICB9O1xuICBpZiAoaW5zdHJ1Y3Rpb25zKSByZXNwb25zZXMuaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zO1xuXG4gIC8vIENoYXQgdG9vbHMgYXJlIG5lc3RlZCAoYGZ1bmN0aW9uOiB7IG5hbWUsIOKApiB9YCk7IFJlc3BvbnNlcyB3YW50cyB0aGVtIGZsYXQuXG4gIGlmIChBcnJheS5pc0FycmF5KGJvZHkudG9vbHMpICYmIGJvZHkudG9vbHMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHRvb2xzID0gYm9keS50b29sc1xuICAgICAgLm1hcCh0b1Jlc3BvbnNlc1Rvb2wpXG4gICAgICAuZmlsdGVyKCh0KTogdCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB0ICE9PSB1bmRlZmluZWQpO1xuICAgIGlmICh0b29scy5sZW5ndGggPiAwKSB7XG4gICAgICByZXNwb25zZXMudG9vbHMgPSB0b29scztcbiAgICAgIGlmIChib2R5LnRvb2xfY2hvaWNlICE9PSB1bmRlZmluZWQpIHJlc3BvbnNlcy50b29sX2Nob2ljZSA9IGJvZHkudG9vbF9jaG9pY2U7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJlZmVyIFJlc3BvbnNlcycgbWF4X291dHB1dF90b2tlbnMgbmFtaW5nOyBmYWxsIGJhY2sgZnJvbSBjaGF0IG1heF90b2tlbnMuXG4gIGlmICh0eXBlb2YgYm9keS5tYXhfb3V0cHV0X3Rva2VucyA9PT0gXCJudW1iZXJcIikge1xuICAgIHJlc3BvbnNlcy5tYXhfb3V0cHV0X3Rva2VucyA9IGJvZHkubWF4X291dHB1dF90b2tlbnM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkubWF4X3Rva2VucyA9PT0gXCJudW1iZXJcIikge1xuICAgIHJlc3BvbnNlcy5tYXhfb3V0cHV0X3Rva2VucyA9IGJvZHkubWF4X3Rva2VucztcbiAgfVxuXG4gIHJldHVybiB7IHJlc3BvbnNlcywgc3RyZWFtOiBib2R5LnN0cmVhbSA9PT0gdHJ1ZSB9O1xufVxuXG4vKiogTGlmdCBhIG5vbi1zdHJlYW1pbmcgY2hhdCBjb21wbGV0aW9uIEpTT04gaW50byBhIFJlc3BvbnNlcyBgcmVzcG9uc2VgIG9iamVjdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGF0VG9SZXNwb25zZShjaGF0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbW9kZWw6IHN0cmluZyk6IHVua25vd24ge1xuICBjb25zdCBjaG9pY2VzID0gQXJyYXkuaXNBcnJheShjaGF0LmNob2ljZXMpID8gY2hhdC5jaG9pY2VzIDogW107XG4gIGNvbnN0IGZpcnN0ID0gKGNob2ljZXNbMF0gPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBtZXNzYWdlID0gKGZpcnN0Lm1lc3NhZ2UgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBvdXRwdXQ6IHVua25vd25bXSA9IFtdO1xuXG4gIGNvbnN0IHRleHQgPSB0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSBcInN0cmluZ1wiID8gbWVzc2FnZS5jb250ZW50IDogXCJcIjtcbiAgaWYgKHRleHQpIHtcbiAgICBvdXRwdXQucHVzaCh7XG4gICAgICB0eXBlOiBcIm1lc3NhZ2VcIixcbiAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICBjb250ZW50OiBbeyB0eXBlOiBcIm91dHB1dF90ZXh0XCIsIHRleHQgfV0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBTdXJmYWNlIGFueSB0b29sIGNhbGxzIGFzIFJlc3BvbnNlcyBgZnVuY3Rpb25fY2FsbGAgb3V0cHV0IGl0ZW1zLlxuICBjb25zdCB0b29sQ2FsbHMgPSBBcnJheS5pc0FycmF5KG1lc3NhZ2UudG9vbF9jYWxscykgPyBtZXNzYWdlLnRvb2xfY2FsbHMgOiBbXTtcbiAgZm9yIChjb25zdCByYXcgb2YgdG9vbENhbGxzKSB7XG4gICAgb3V0cHV0LnB1c2godG9GdW5jdGlvbkNhbGxJdGVtKHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpO1xuICB9XG5cbiAgY29uc3QgdXNhZ2UgPSAoY2hhdC51c2FnZSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiB7XG4gICAgaWQ6IFN0cmluZyhjaGF0LmlkID8/IFwicmVzcFwiKSxcbiAgICBvYmplY3Q6IFwicmVzcG9uc2VcIixcbiAgICBjcmVhdGVkX2F0OiB0eXBlb2YgY2hhdC5jcmVhdGVkID09PSBcIm51bWJlclwiID8gY2hhdC5jcmVhdGVkIDogMCxcbiAgICBtb2RlbCxcbiAgICBzdGF0dXM6IFwiY29tcGxldGVkXCIsXG4gICAgb3V0cHV0LFxuICAgIHVzYWdlOiB7XG4gICAgICBpbnB1dF90b2tlbnM6IE51bWJlcih1c2FnZS5wcm9tcHRfdG9rZW5zID8/IDApLFxuICAgICAgb3V0cHV0X3Rva2VuczogTnVtYmVyKHVzYWdlLmNvbXBsZXRpb25fdG9rZW5zID8/IDApLFxuICAgICAgdG90YWxfdG9rZW5zOiBOdW1iZXIodXNhZ2UudG90YWxfdG9rZW5zID8/IDApLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogTGlmdCBhIG5hdGl2ZSBSZXNwb25zZXMgYHJlc3BvbnNlYCBvYmplY3QgaW50byBhIGNoYXQtY29tcGxldGlvbnMgYm9keS5cbiAqIEludmVyc2Ugb2Yge0BsaW5rIGNoYXRUb1Jlc3BvbnNlfTogdXNlZCBhZnRlciBhIFJlc3BvbnNlcy1vbmx5IHVwc3RyZWFtIGNhbGxcbiAqIHdoZW4gdGhlIGNsaWVudCBzcG9rZSBDaGF0IENvbXBsZXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzcG9uc2VUb0NoYXRDb21wbGV0aW9uKFxuICByZXNwb25zZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG1vZGVsOiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHsgdGV4dCB9ID0gcmVhZFJlc3BvbnNlc091dHB1dChyZXNwb25zZSk7XG4gIGNvbnN0IHRvb2xDYWxsczogdW5rbm93bltdID0gW107XG4gIGNvbnN0IG91dHB1dCA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2Uub3V0cHV0KSA/IHJlc3BvbnNlLm91dHB1dCA6IFtdO1xuICBmb3IgKGNvbnN0IHJhdyBvZiBvdXRwdXQpIHtcbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICBjb25zdCBpdGVtID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChpdGVtLnR5cGUgIT09IFwiZnVuY3Rpb25fY2FsbFwiKSBjb250aW51ZTtcbiAgICB0b29sQ2FsbHMucHVzaCh0b0NoYXRUb29sQ2FsbChpdGVtKSk7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgIGNvbnRlbnQ6IHRleHQgfHwgbnVsbCxcbiAgfTtcbiAgaWYgKHRvb2xDYWxscy5sZW5ndGggPiAwKSBtZXNzYWdlLnRvb2xfY2FsbHMgPSB0b29sQ2FsbHM7XG5cbiAgY29uc3QgdXNhZ2UgPSAocmVzcG9uc2UudXNhZ2UgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXR1cm4ge1xuICAgIGlkOiBTdHJpbmcocmVzcG9uc2UuaWQgPz8gXCJjaGF0Y21wbFwiKSxcbiAgICBvYmplY3Q6IFwiY2hhdC5jb21wbGV0aW9uXCIsXG4gICAgY3JlYXRlZDogdHlwZW9mIHJlc3BvbnNlLmNyZWF0ZWRfYXQgPT09IFwibnVtYmVyXCIgPyByZXNwb25zZS5jcmVhdGVkX2F0IDogMCxcbiAgICBtb2RlbCxcbiAgICBjaG9pY2VzOiBbXG4gICAgICB7XG4gICAgICAgIGluZGV4OiAwLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBmaW5pc2hfcmVhc29uOiB0b29sQ2FsbHMubGVuZ3RoID4gMCA/IFwidG9vbF9jYWxsc1wiIDogXCJzdG9wXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdXNhZ2U6IHtcbiAgICAgIHByb21wdF90b2tlbnM6IE51bWJlcih1c2FnZS5pbnB1dF90b2tlbnMgPz8gMCksXG4gICAgICBjb21wbGV0aW9uX3Rva2VuczogTnVtYmVyKHVzYWdlLm91dHB1dF90b2tlbnMgPz8gMCksXG4gICAgICB0b3RhbF90b2tlbnM6IE51bWJlcih1c2FnZS50b3RhbF90b2tlbnMgPz8gMCksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHRvb2wgY2FsbCdzIGBhcmd1bWVudHNgIEpTT04uIEJvdGggd2lyZXMgY2FycnkgaXQgYXMgYW4gdW5wYXJzZWQgc3RyaW5nO1xuICogYW55dGhpbmcgZWxzZSAoYWJzZW50LCBhbiBhbHJlYWR5LXBhcnNlZCBvYmplY3QpIGJlY29tZXMgYW4gZW1wdHkgbGl0ZXJhbCBzb1xuICogdGhlIHJlY2VpdmluZyBzaWRlIGFsd2F5cyBoYXMgdmFsaWQgSlNPTiB0byBwYXJzZS5cbiAqL1xuZnVuY3Rpb24gY2FsbEFyZ3VtZW50cyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IFwie31cIjtcbn1cblxuLyoqXG4gKiBUaGUgUmVzcG9uc2VzIGBmdW5jdGlvbl9jYWxsYCBpdGVtIGZvciBhIHRvb2wgY2FsbCBpbiBlaXRoZXIgc3BlbGxpbmc6IGEgY2hhdFxuICogYHRvb2xfY2FsbHNbXWAgZW50cnkgKGB7aWQsIGZ1bmN0aW9uOntuYW1lLCBhcmd1bWVudHN9fWApIG9yIGFuIGl0ZW0gdGhhdCBpc1xuICogYWxyZWFkeSBmbGF0LlxuICovXG5mdW5jdGlvbiB0b0Z1bmN0aW9uQ2FsbEl0ZW0oY2FsbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IGZuID0gKGNhbGwuZnVuY3Rpb24gPz8gY2FsbCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJmdW5jdGlvbl9jYWxsXCIsXG4gICAgY2FsbF9pZDogU3RyaW5nKGNhbGwuY2FsbF9pZCA/PyBjYWxsLmlkID8/IFwiXCIpLFxuICAgIG5hbWU6IFN0cmluZyhmbi5uYW1lID8/IFwiXCIpLFxuICAgIGFyZ3VtZW50czogY2FsbEFyZ3VtZW50cyhmbi5hcmd1bWVudHMpLFxuICB9O1xufVxuXG4vKiogVGhlIGNoYXQgYHRvb2xfY2FsbHNbXWAgZW50cnkgZm9yIGEgUmVzcG9uc2VzIGBmdW5jdGlvbl9jYWxsYCBpdGVtLiAqL1xuZnVuY3Rpb24gdG9DaGF0VG9vbENhbGwoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBDaGF0VG9vbENhbGwge1xuICByZXR1cm4ge1xuICAgIGlkOiBTdHJpbmcoaXRlbS5jYWxsX2lkID8/IGl0ZW0uaWQgPz8gXCJcIiksXG4gICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgIGZ1bmN0aW9uOiB7XG4gICAgICBuYW1lOiBTdHJpbmcoaXRlbS5uYW1lID8/IFwiXCIpLFxuICAgICAgYXJndW1lbnRzOiBjYWxsQXJndW1lbnRzKGl0ZW0uYXJndW1lbnRzKSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFRoZSBjaGF0LW5lc3RlZCBzcGVsbGluZyAoYHt0eXBlOlwiZnVuY3Rpb25cIiwgZnVuY3Rpb246e25hbWUsIOKApn19YCkgb2YgYSB0b29sXG4gKiBzcGVjLCBvciBgdW5kZWZpbmVkYCBmb3IgYSBidWlsdC1pbiBSZXNwb25zZXMgdG9vbCAoYHdlYl9zZWFyY2hgLFxuICogYGxvY2FsX3NoZWxsYCwg4oCmKSB0aGF0IGNoYXQgY2Fubm90IGV4cHJlc3MgYW5kIERhdGFicmlja3MgcmVqZWN0cy5cbiAqL1xuZnVuY3Rpb24gdG9DaGF0VG9vbCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRvb2wgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHRvb2wudHlwZSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodG9vbC5mdW5jdGlvbiAmJiB0eXBlb2YgdG9vbC5mdW5jdGlvbiA9PT0gXCJvYmplY3RcIikgcmV0dXJuIHRvb2w7IC8vIGFscmVhZHkgbmVzdGVkXG4gIGlmICh0eXBlb2YgdG9vbC5uYW1lICE9PSBcInN0cmluZ1wiKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICBmdW5jdGlvbjoge1xuICAgICAgbmFtZTogdG9vbC5uYW1lLFxuICAgICAgLi4uKHRvb2wuZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uOiB0b29sLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAuLi4odG9vbC5wYXJhbWV0ZXJzID8geyBwYXJhbWV0ZXJzOiB0b29sLnBhcmFtZXRlcnMgfSA6IHt9KSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFRoZSBmbGF0IFJlc3BvbnNlcyBzcGVsbGluZyAoYHt0eXBlOlwiZnVuY3Rpb25cIiwgbmFtZSwg4oCmfWApIG9mIGEgdG9vbCBzcGVjLlxuICogSW52ZXJzZSBvZiB7QGxpbmsgdG9DaGF0VG9vbH07IG5vbi1mdW5jdGlvbiB0b29scyBhcmUgZHJvcHBlZCB0aGUgc2FtZSB3YXkuXG4gKi9cbmZ1bmN0aW9uIHRvUmVzcG9uc2VzVG9vbCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRvb2wgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHRvb2wudHlwZSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodG9vbC5mdW5jdGlvbiAmJiB0eXBlb2YgdG9vbC5mdW5jdGlvbiA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IGZuID0gdG9vbC5mdW5jdGlvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgbmFtZTogZm4ubmFtZSxcbiAgICAgIC4uLihmbi5kZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb246IGZuLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAuLi4oZm4ucGFyYW1ldGVycyA/IHsgcGFyYW1ldGVyczogZm4ucGFyYW1ldGVycyB9IDoge30pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiB0b29sLm5hbWUgPT09IFwic3RyaW5nXCIgPyB0b29sIDogdW5kZWZpbmVkOyAvLyBhbHJlYWR5IGZsYXRcbn1cblxuLyoqIE9uZSBTZXJ2ZXItU2VudCBFdmVudCwgcmVhZHkgdG8gd3JpdGUgdG8gdGhlIGNsaWVudC4gKi9cbmZ1bmN0aW9uIHNzZShldmVudDogc3RyaW5nLCBkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBldmVudDogJHtldmVudH1cXG5kYXRhOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfVxcblxcbmA7XG59XG5cbi8qKlxuICogSW5jcmVtZW50YWwgY2hhdC1jaHVuayAtPiBSZXNwb25zZXMtU1NFIHRyYW5zbGF0b3IuIGBmZWVkYCBhbmQgYGZpbmlzaGAgYm90aFxuICogcmV0dXJuIHRoZSBTU0UgYnl0ZXMgdG8gZm9yd2FyZCwgb3IgYFwiXCJgIHdoZW4gYSBjaHVuayBwcm9kdWNlZCBubyBldmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZXNTdHJlYW1UcmFuc2xhdG9yIHtcbiAgLyoqIFRyYW5zbGF0ZSBvbmUgdXBzdHJlYW0gYGNoYXQuY29tcGxldGlvbi5jaHVua2Agb2JqZWN0LiAqL1xuICBmZWVkKGNodW5rOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZztcbiAgLyoqIENsb3NlIGFueSBvcGVuIGl0ZW1zIGFuZCBlbWl0IGByZXNwb25zZS5jb21wbGV0ZWRgLiBDYWxsIG9uY2UsIGF0IGVuZCBvZiBzdHJlYW0uICovXG4gIGZpbmlzaCgpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGFuIHVwc3RyZWFtIGNoYXQtY29tcGxldGlvbnMgU1NFIHN0cmVhbSBpbnRvIHRoZSBSZXNwb25zZXMgU1NFXG4gKiBldmVudCBzdHJlYW0gYSBSZXNwb25zZXMgY2xpZW50IGNvbnN1bWVzLlxuICpcbiAqIFVwc3RyZWFtIGNodW5rcyBhcmUgYGNoYXQuY29tcGxldGlvbi5jaHVua2Agb2JqZWN0cyB3aG9zZSBgY2hvaWNlc1swXS5kZWx0YWBcbiAqIGNhcnJpZXMgaW5jcmVtZW50YWwgYGNvbnRlbnRgIChhc3Npc3RhbnQgdGV4dCkgYW5kL29yIGB0b29sX2NhbGxzYCAoZnVuY3Rpb25cbiAqIGNhbGxzLCBzdHJlYW1lZCBieSBgaW5kZXhgIHdpdGggcGFydGlhbCBgYXJndW1lbnRzYCkuIFdlIGVtaXQgdGhlIFJlc3BvbnNlc1xuICogbGlmZWN5Y2xlIGFyb3VuZCB0aGVtOlxuICpcbiAqICAgcmVzcG9uc2UuY3JlYXRlZFxuICogICAtPiBwZXIgdGV4dCBydW46ICBvdXRwdXRfaXRlbS5hZGRlZCDihpIgb3V0cHV0X3RleHQuZGVsdGEqIOKGkiBvdXRwdXRfaXRlbS5kb25lXG4gKiAgIC0+IHBlciB0b29sIGNhbGw6IG91dHB1dF9pdGVtLmFkZGVkIOKGkiBmdW5jdGlvbl9jYWxsX2FyZ3VtZW50cy5kZWx0YSpcbiAqICAgICAgICAgICAgICAgICAgICAgICDihpIgZnVuY3Rpb25fY2FsbF9hcmd1bWVudHMuZG9uZSDihpIgb3V0cHV0X2l0ZW0uZG9uZVxuICogICByZXNwb25zZS5jb21wbGV0ZWQgICAod2l0aCB0aGUgYXNzZW1ibGVkIGZpbmFsIGByZXNwb25zZWAgb2JqZWN0KVxuICpcbiAqIFRoZSB0cmFuc2xhdG9yIGlzIGludGVudGlvbmFsbHkgdG9sZXJhbnQ6IG1hbGZvcm1lZC9rZWVwYWxpdmUgbGluZXMgeWllbGRcbiAqIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZXNTdHJlYW1UcmFuc2xhdG9yKFxuICBtb2RlbDogc3RyaW5nLFxuICByZXNwb25zZUlkOiBzdHJpbmcsXG4pOiBSZXNwb25zZXNTdHJlYW1UcmFuc2xhdG9yIHtcbiAgbGV0IHN0YXJ0ZWQgPSBmYWxzZTtcbiAgbGV0IG91dHB1dEluZGV4ID0gMDtcblxuICAvLyBUZXh0IHJ1biBzdGF0ZTogd2hldGhlciBhIG1lc3NhZ2UgaXRlbSBpcyBjdXJyZW50bHkgb3BlbiwgYW5kIGl0cyBidWZmZXIuXG4gIGxldCB0ZXh0T3BlbiA9IGZhbHNlO1xuICBsZXQgdGV4dEJ1ZmZlciA9IFwiXCI7XG4gIGxldCB0ZXh0SXRlbUlkID0gXCJcIjtcblxuICAvLyBUb29sLWNhbGwgc3RhdGUsIGtleWVkIGJ5IHRoZSB1cHN0cmVhbSBgdG9vbF9jYWxsc1tdLmluZGV4YC5cbiAgaW50ZXJmYWNlIFRvb2xTdGF0ZSB7XG4gICAgb3V0cHV0SW5kZXg6IG51bWJlcjtcbiAgICBjYWxsSWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYXJnczogc3RyaW5nO1xuICB9XG4gIGNvbnN0IHRvb2xzID0gbmV3IE1hcDxudW1iZXIsIFRvb2xTdGF0ZT4oKTtcblxuICBjb25zdCBjcmVhdGVkID0gKCkgPT5cbiAgICBzc2UoXCJyZXNwb25zZS5jcmVhdGVkXCIsIHtcbiAgICAgIHR5cGU6IFwicmVzcG9uc2UuY3JlYXRlZFwiLFxuICAgICAgcmVzcG9uc2U6IHsgaWQ6IHJlc3BvbnNlSWQsIG9iamVjdDogXCJyZXNwb25zZVwiLCBzdGF0dXM6IFwiaW5fcHJvZ3Jlc3NcIiwgbW9kZWwsIG91dHB1dDogW10gfSxcbiAgICB9KTtcblxuICBmdW5jdGlvbiBvcGVuVGV4dCgpOiBzdHJpbmcge1xuICAgIHRleHRPcGVuID0gdHJ1ZTtcbiAgICB0ZXh0SXRlbUlkID0gYCR7cmVzcG9uc2VJZH0tbXNnLSR7b3V0cHV0SW5kZXh9YDtcbiAgICBjb25zdCBldiA9IHNzZShcInJlc3BvbnNlLm91dHB1dF9pdGVtLmFkZGVkXCIsIHtcbiAgICAgIHR5cGU6IFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uYWRkZWRcIixcbiAgICAgIG91dHB1dF9pbmRleDogb3V0cHV0SW5kZXgsXG4gICAgICBpdGVtOiB7IGlkOiB0ZXh0SXRlbUlkLCB0eXBlOiBcIm1lc3NhZ2VcIiwgcm9sZTogXCJhc3Npc3RhbnRcIiwgY29udGVudDogW10gfSxcbiAgICB9KTtcbiAgICByZXR1cm4gZXY7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRleHRPcGVuKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBpdGVtID0ge1xuICAgICAgaWQ6IHRleHRJdGVtSWQsXG4gICAgICB0eXBlOiBcIm1lc3NhZ2VcIixcbiAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICBjb250ZW50OiBbeyB0eXBlOiBcIm91dHB1dF90ZXh0XCIsIHRleHQ6IHRleHRCdWZmZXIgfV0sXG4gICAgfTtcbiAgICBjb25zdCBldiA9XG4gICAgICBzc2UoXCJyZXNwb25zZS5vdXRwdXRfdGV4dC5kb25lXCIsIHtcbiAgICAgICAgdHlwZTogXCJyZXNwb25zZS5vdXRwdXRfdGV4dC5kb25lXCIsXG4gICAgICAgIGl0ZW1faWQ6IHRleHRJdGVtSWQsXG4gICAgICAgIG91dHB1dF9pbmRleDogb3V0cHV0SW5kZXgsXG4gICAgICAgIGNvbnRlbnRfaW5kZXg6IDAsXG4gICAgICAgIHRleHQ6IHRleHRCdWZmZXIsXG4gICAgICB9KSArXG4gICAgICBzc2UoXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lXCIsIHtcbiAgICAgICAgdHlwZTogXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lXCIsXG4gICAgICAgIG91dHB1dF9pbmRleDogb3V0cHV0SW5kZXgsXG4gICAgICAgIGl0ZW0sXG4gICAgICB9KTtcbiAgICB0ZXh0T3BlbiA9IGZhbHNlO1xuICAgIHRleHRCdWZmZXIgPSBcIlwiO1xuICAgIG91dHB1dEluZGV4ICs9IDE7XG4gICAgcmV0dXJuIGV2O1xuICB9XG5cbiAgZnVuY3Rpb24gZmVlZChjaHVuazogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICAgIGxldCBvdXQgPSBcIlwiO1xuICAgIGlmICghc3RhcnRlZCkge1xuICAgICAgc3RhcnRlZCA9IHRydWU7XG4gICAgICBvdXQgKz0gY3JlYXRlZCgpO1xuICAgIH1cbiAgICBjb25zdCBjaG9pY2VzID0gQXJyYXkuaXNBcnJheShjaHVuay5jaG9pY2VzKSA/IGNodW5rLmNob2ljZXMgOiBbXTtcbiAgICBjb25zdCBjaG9pY2UgPSAoY2hvaWNlc1swXSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgZGVsdGEgPSAoY2hvaWNlLmRlbHRhID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIEFzc2lzdGFudCB0ZXh0IGRlbHRhcy5cbiAgICBpZiAodHlwZW9mIGRlbHRhLmNvbnRlbnQgPT09IFwic3RyaW5nXCIgJiYgZGVsdGEuY29udGVudC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXRleHRPcGVuKSBvdXQgKz0gb3BlblRleHQoKTtcbiAgICAgIHRleHRCdWZmZXIgKz0gZGVsdGEuY29udGVudDtcbiAgICAgIG91dCArPSBzc2UoXCJyZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YVwiLCB7XG4gICAgICAgIHR5cGU6IFwicmVzcG9uc2Uub3V0cHV0X3RleHQuZGVsdGFcIixcbiAgICAgICAgaXRlbV9pZDogdGV4dEl0ZW1JZCxcbiAgICAgICAgb3V0cHV0X2luZGV4OiBvdXRwdXRJbmRleCxcbiAgICAgICAgY29udGVudF9pbmRleDogMCxcbiAgICAgICAgZGVsdGE6IGRlbHRhLmNvbnRlbnQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUb29sLWNhbGwgZGVsdGFzOiBlYWNoIGlzIGtleWVkIGJ5IGBpbmRleGA7IGBhcmd1bWVudHNgIGFycml2ZXMgaW4gcGllY2VzLlxuICAgIGNvbnN0IHRvb2xEZWx0YXMgPSBBcnJheS5pc0FycmF5KGRlbHRhLnRvb2xfY2FsbHMpID8gZGVsdGEudG9vbF9jYWxscyA6IFtdO1xuICAgIGZvciAoY29uc3QgcmF3VGMgb2YgdG9vbERlbHRhcykge1xuICAgICAgY29uc3QgdGMgPSByYXdUYyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IGlkeCA9IE51bWJlcih0Yy5pbmRleCA/PyAwKTtcbiAgICAgIGNvbnN0IGZuID0gKHRjLmZ1bmN0aW9uID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGxldCBzdGF0ZSA9IHRvb2xzLmdldChpZHgpO1xuICAgICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICAvLyBGaXJzdCBmcmFnbWVudCBmb3IgdGhpcyBjYWxsOiBhIHRleHQgcnVuIChpZiBvcGVuKSBtdXN0IGNsb3NlIGZpcnN0IHNvXG4gICAgICAgIC8vIG91dHB1dCBvcmRlcmluZyBzdGF5cyBtb25vdG9uaWMsIHRoZW4gd2Ugb3BlbiBhIGZ1bmN0aW9uX2NhbGwgaXRlbS5cbiAgICAgICAgb3V0ICs9IGNsb3NlVGV4dCgpO1xuICAgICAgICBzdGF0ZSA9IHtcbiAgICAgICAgICBvdXRwdXRJbmRleCxcbiAgICAgICAgICBjYWxsSWQ6IFN0cmluZyh0Yy5pZCA/PyBgJHtyZXNwb25zZUlkfS1jYWxsLSR7aWR4fWApLFxuICAgICAgICAgIG5hbWU6IFN0cmluZyhmbi5uYW1lID8/IFwiXCIpLFxuICAgICAgICAgIGFyZ3M6IFwiXCIsXG4gICAgICAgIH07XG4gICAgICAgIHRvb2xzLnNldChpZHgsIHN0YXRlKTtcbiAgICAgICAgb3V0ICs9IHNzZShcInJlc3BvbnNlLm91dHB1dF9pdGVtLmFkZGVkXCIsIHtcbiAgICAgICAgICB0eXBlOiBcInJlc3BvbnNlLm91dHB1dF9pdGVtLmFkZGVkXCIsXG4gICAgICAgICAgb3V0cHV0X2luZGV4OiBzdGF0ZS5vdXRwdXRJbmRleCxcbiAgICAgICAgICBpdGVtOiB7XG4gICAgICAgICAgICBpZDogc3RhdGUuY2FsbElkLFxuICAgICAgICAgICAgdHlwZTogXCJmdW5jdGlvbl9jYWxsXCIsXG4gICAgICAgICAgICBjYWxsX2lkOiBzdGF0ZS5jYWxsSWQsXG4gICAgICAgICAgICBuYW1lOiBzdGF0ZS5uYW1lLFxuICAgICAgICAgICAgYXJndW1lbnRzOiBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBvdXRwdXRJbmRleCArPSAxO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBmbi5uYW1lID09PSBcInN0cmluZ1wiICYmIGZuLm5hbWUgJiYgIXN0YXRlLm5hbWUpIHN0YXRlLm5hbWUgPSBmbi5uYW1lO1xuICAgICAgaWYgKHR5cGVvZiBmbi5hcmd1bWVudHMgPT09IFwic3RyaW5nXCIgJiYgZm4uYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhdGUuYXJncyArPSBmbi5hcmd1bWVudHM7XG4gICAgICAgIG91dCArPSBzc2UoXCJyZXNwb25zZS5mdW5jdGlvbl9jYWxsX2FyZ3VtZW50cy5kZWx0YVwiLCB7XG4gICAgICAgICAgdHlwZTogXCJyZXNwb25zZS5mdW5jdGlvbl9jYWxsX2FyZ3VtZW50cy5kZWx0YVwiLFxuICAgICAgICAgIGl0ZW1faWQ6IHN0YXRlLmNhbGxJZCxcbiAgICAgICAgICBvdXRwdXRfaW5kZXg6IHN0YXRlLm91dHB1dEluZGV4LFxuICAgICAgICAgIGRlbHRhOiBmbi5hcmd1bWVudHMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gZmluaXNoKCk6IHN0cmluZyB7XG4gICAgbGV0IG91dCA9IGNsb3NlVGV4dCgpO1xuICAgIC8vIENsb3NlIGFueSBvcGVuIHRvb2wgY2FsbHMsIGVtaXR0aW5nIHRoZWlyIGFzc2VtYmxlZCBhcmd1bWVudHMuXG4gICAgZm9yIChjb25zdCBzdGF0ZSBvZiB0b29scy52YWx1ZXMoKSkge1xuICAgICAgb3V0ICs9IHNzZShcInJlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRvbmVcIiwge1xuICAgICAgICB0eXBlOiBcInJlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRvbmVcIixcbiAgICAgICAgaXRlbV9pZDogc3RhdGUuY2FsbElkLFxuICAgICAgICBvdXRwdXRfaW5kZXg6IHN0YXRlLm91dHB1dEluZGV4LFxuICAgICAgICBhcmd1bWVudHM6IHN0YXRlLmFyZ3MsXG4gICAgICB9KTtcbiAgICAgIG91dCArPSBzc2UoXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lXCIsIHtcbiAgICAgICAgdHlwZTogXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lXCIsXG4gICAgICAgIG91dHB1dF9pbmRleDogc3RhdGUub3V0cHV0SW5kZXgsXG4gICAgICAgIGl0ZW06IHtcbiAgICAgICAgICBpZDogc3RhdGUuY2FsbElkLFxuICAgICAgICAgIHR5cGU6IFwiZnVuY3Rpb25fY2FsbFwiLFxuICAgICAgICAgIGNhbGxfaWQ6IHN0YXRlLmNhbGxJZCxcbiAgICAgICAgICBuYW1lOiBzdGF0ZS5uYW1lLFxuICAgICAgICAgIGFyZ3VtZW50czogc3RhdGUuYXJncyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBvdXQgKz0gc3NlKFwicmVzcG9uc2UuY29tcGxldGVkXCIsIHtcbiAgICAgIHR5cGU6IFwicmVzcG9uc2UuY29tcGxldGVkXCIsXG4gICAgICByZXNwb25zZTogeyBpZDogcmVzcG9uc2VJZCwgb2JqZWN0OiBcInJlc3BvbnNlXCIsIHN0YXR1czogXCJjb21wbGV0ZWRcIiwgbW9kZWwgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcmV0dXJuIHsgZmVlZCwgZmluaXNoIH07XG59XG5cbi8qKiBBIHNvdXJjZSB0aGUgbW9kZWwgY2l0ZWQsIGFzIGNhcnJpZWQgYnkgYSBSZXNwb25zZXMgY29udGVudC1wYXJ0IGFubm90YXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlc0NpdGF0aW9uIHtcbiAgdXJsOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufVxuXG4vKiogV2hhdCB7QGxpbmsgcmVhZFJlc3BvbnNlc091dHB1dH0gcHVsbHMgb3V0IG9mIGEgYHJlc3BvbnNlYCBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlc091dHB1dCB7XG4gIC8qKiBUaGUgYXNzaXN0YW50J3MgYW5zd2VyLCB3aXRoIHRoZSBvdXRwdXQgaXRlbXMgY29uY2F0ZW5hdGVkLiAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBDaXRlZCBzb3VyY2VzIGluIGZpcnN0LXNlZW4gb3JkZXIsIGRlZHVwbGljYXRlZCBieSBVUkwuICovXG4gIGNpdGF0aW9uczogUmVzcG9uc2VzQ2l0YXRpb25bXTtcbn1cblxuLyoqXG4gKiBSZWFkIHRoZSBhbnN3ZXIgdGV4dCBhbmQgY2l0ZWQgc291cmNlcyBvdXQgb2YgYSBSZXNwb25zZXMgYHJlc3BvbnNlYCBwYXlsb2FkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGludmVyc2Ugb2Yge0BsaW5rIGNoYXRUb1Jlc3BvbnNlfTogaXQgY29uc3VtZXMgd2hhdCBhbiBlbmRwb2ludFxuICogc3BlYWtpbmcgUmVzcG9uc2VzIG5hdGl2ZWx5IHJldHVybnMsIHJhdGhlciB0aGFuIHByb2R1Y2luZyBpdC4gVGhlIERhdGFicmlja3NcbiAqIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wgYW5zd2VycyB0aGlzIHdheSwgd2l0aCBlYWNoIHNvdXJjZSBhdHRhY2hlZCBhcyBhXG4gKiBgdXJsX2NpdGF0aW9uYCBhbm5vdGF0aW9uIG9uIHRoZSBjb250ZW50IHBhcnQgdGhhdCB1c2VkIGl0LlxuICpcbiAqIFByZWZlcnMgdGhlIGZsYXR0ZW5lZCBgb3V0cHV0X3RleHRgIHdoZW4gdGhlIHBheWxvYWQgY2FycmllcyBpdCwgYW5kIGZhbGxzXG4gKiBiYWNrIHRvIHdhbGtpbmcgYG91dHB1dFtdLmNvbnRlbnRbXS50ZXh0YC4gRXZlcnkgZmllbGQgaXMgb3B0aW9uYWwgdXBzdHJlYW0sXG4gKiBzbyBhIHBheWxvYWQgbWlzc2luZyBhbnkgb2YgaXQgeWllbGRzIGVtcHR5IHJlc3VsdHMgcmF0aGVyIHRoYW4gdGhyb3dpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzcG9uc2VzT3V0cHV0KHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVzcG9uc2VzT3V0cHV0IHtcbiAgY29uc3Qgb3V0cHV0ID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLm91dHB1dCkgPyAocGF5bG9hZC5vdXRwdXQgYXMgdW5rbm93bltdKSA6IFtdO1xuICBjb25zdCB0ZXh0czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgY2l0YXRpb25zOiBSZXNwb25zZXNDaXRhdGlvbltdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHJhd0l0ZW0gb2Ygb3V0cHV0KSB7XG4gICAgaWYgKCFyYXdJdGVtIHx8IHR5cGVvZiByYXdJdGVtICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICBjb25zdCBjb250ZW50ID0gKHJhd0l0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmNvbnRlbnQ7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSBjb250aW51ZTtcbiAgICBmb3IgKGNvbnN0IHJhd1BhcnQgb2YgY29udGVudCkge1xuICAgICAgaWYgKCFyYXdQYXJ0IHx8IHR5cGVvZiByYXdQYXJ0ICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHBhcnQgPSByYXdQYXJ0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3QgdGV4dCA9IHN0cmluZy50cmltVG9FbXB0eShwYXJ0LnRleHQpO1xuICAgICAgaWYgKHRleHQpIHRleHRzLnB1c2godGV4dCk7XG4gICAgICBjb25zdCBhbm5vdGF0aW9ucyA9IEFycmF5LmlzQXJyYXkocGFydC5hbm5vdGF0aW9ucykgPyBwYXJ0LmFubm90YXRpb25zIDogW107XG4gICAgICBmb3IgKGNvbnN0IHJhd0FubiBvZiBhbm5vdGF0aW9ucykge1xuICAgICAgICBpZiAoIXJhd0FubiB8fCB0eXBlb2YgcmF3QW5uICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYW5uID0gcmF3QW5uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBjb25zdCB1cmwgPSBzdHJpbmcudHJpbVRvRW1wdHkoYW5uLnVybCk7XG4gICAgICAgIGlmICghdXJsIHx8IHNlZW4uaGFzKHVybCkpIGNvbnRpbnVlO1xuICAgICAgICBzZWVuLmFkZCh1cmwpO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHN0cmluZy50cmltVG9FbXB0eShhbm4udGl0bGUpO1xuICAgICAgICBjaXRhdGlvbnMucHVzaCh7IHVybCwgLi4uKHRpdGxlID8geyB0aXRsZSB9IDoge30pIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHRleHQ6IHN0cmluZy50cmltVG9FbXB0eShwYXlsb2FkLm91dHB1dF90ZXh0KSB8fCB0ZXh0cy5qb2luKFwiXFxuXCIpLnRyaW0oKSwgY2l0YXRpb25zIH07XG59XG5cbi8qKlxuICogU3RyaXAgdG9vbCB0eXBlcyB0aGUgdXBzdHJlYW0gbW9kZWwgZG9lc24ndCBzdXBwb3J0IGZyb20gYSBSZXNwb25zZXMgcmVxdWVzdFxuICogYm9keSwgcmV0dXJuaW5nIGEgc2hhbGxvdyBjb3B5IHNhZmUgdG8gZm9yd2FyZCAodGhlIGlucHV0IGlzIG5vdCBtdXRhdGVkKS5cbiAqXG4gKiBDbGllbnRzIGxpa2UgdGhlIENvZGV4IENMSSBpbmNsdWRlIGJ1aWx0LWluIFJlc3BvbnNlcyB0b29scyAoYHdlYl9zZWFyY2hgLFxuICogYGxvY2FsX3NoZWxsYCwgYGN1c3RvbWAsIC4uLikgYWxvbmdzaWRlIHRoZWlyIGBmdW5jdGlvbmAgdG9vbHMuIERhdGFicmlja3MnXG4gKiBPcGVuIFJlc3BvbnNlcyBzdXJmYWNlIGZvciBBbnRocm9waWMvQ2xhdWRlIChhbmQgb3RoZXIgbm9uLU9wZW5BSSBwcm92aWRlcnMpXG4gKiBvbmx5IGFjY2VwdHMgYGZ1bmN0aW9uYCB0b29scyBhbmQgaGFyZC1lcnJvcnMgb3RoZXJ3aXNlOlxuICogICBcIkFudGhyb3BpYyBkb2VzIG5vdCBzdXBwb3J0IHRvb2wgdHlwZSAnd2ViX3NlYXJjaCcuIE9ubHkgJ2Z1bmN0aW9uJyBpcyBzdXBwb3J0ZWQuXCJcbiAqIENhbGwgdGhpcyBiZWZvcmUgZm9yd2FyZGluZyB0byBgL3NlcnZpbmctZW5kcG9pbnRzL29wZW4tcmVzcG9uc2VzYC4gVGhlIE9wZW5BSVxuICogYC9zZXJ2aW5nLWVuZHBvaW50cy9yZXNwb25zZXNgIHBhdGggc2hvdWxkIGtlZXAgYnVpbHQtaW5zIChHUFQgc3VwcG9ydHMgdGhlbSkuXG4gKiBJZiBmaWx0ZXJpbmcgZW1wdGllcyB0aGUgbGlzdCwgYHRvb2xzYCAvIGB0b29sX2Nob2ljZWAgLyBgcGFyYWxsZWxfdG9vbF9jYWxsc2BcbiAqIGFyZSBkcm9wcGVkIHNvIHdlIG5ldmVyIHNlbmQgYW4gZW1wdHkgYHRvb2xzOiBbXWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZVJlc3BvbnNlc1Rvb2xzKGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYm9keS50b29scykgfHwgYm9keS50b29scy5sZW5ndGggPT09IDApIHJldHVybiBib2R5O1xuICBjb25zdCBmblRvb2xzID0gYm9keS50b29scy5maWx0ZXIoXG4gICAgKHQpID0+IHQgJiYgdHlwZW9mIHQgPT09IFwib2JqZWN0XCIgJiYgKHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR5cGUgPT09IFwiZnVuY3Rpb25cIixcbiAgKTtcbiAgaWYgKGZuVG9vbHMubGVuZ3RoID09PSBib2R5LnRvb2xzLmxlbmd0aCkgcmV0dXJuIGJvZHk7IC8vIG5vdGhpbmcgdG8gc3RyaXBcbiAgY29uc3QgbmV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmJvZHkgfTtcbiAgaWYgKGZuVG9vbHMubGVuZ3RoID4gMCkge1xuICAgIG5leHQudG9vbHMgPSBmblRvb2xzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSBuZXh0LnRvb2xzO1xuICAgIGRlbGV0ZSBuZXh0LnRvb2xfY2hvaWNlO1xuICAgIGRlbGV0ZSBuZXh0LnBhcmFsbGVsX3Rvb2xfY2FsbHM7XG4gIH1cbiAgcmV0dXJuIG5leHQ7XG59XG5cbi8qKlxuICogQ29udGVudC1wYXJ0IC8gaW5wdXQtaXRlbSB0eXBlcyBDbGF1ZGUgZXh0ZW5kZWQgdGhpbmtpbmcgdXNlcyBvbiB0aGUgd2lyZS5cbiAqXG4gKiBTaGFyZWQgc28gYm90aCB3aXJlIHN1cmZhY2VzIHN0cmlwIHRoZSBzYW1lIHNldDogdGhlIFJlc3BvbnNlcyBwYXRoIGhlcmVcbiAqICh7QGxpbmsgc2FuaXRpemVPcGVuUmVzcG9uc2VzSW5wdXR9KSBhbmQgdGhlIENoYXQgQ29tcGxldGlvbnMgcGF0aCBpblxuICogYEBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYWAncyBzZXJ2aW5nIHNhbml0aXplLiBBbnRocm9waWMgc2lnbnMgdGhlc2UgYmxvY2tzLFxuICogc28gYSByZXBsYXkgdGhhdCBtdXRhdGVzIG9uZSBpcyByZWplY3RlZCBvdXRyaWdodCAtIGJvdGggcGF0aHMgbXVzdCBhZ3JlZSBvblxuICogd2hhdCBjb3VudHMgYXMgYSByZWFzb25pbmcgYmxvY2suXG4gKi9cbmV4cG9ydCBjb25zdCBSRUFTT05JTkdfVFlQRVM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgXCJyZWFzb25pbmdcIixcbiAgXCJ0aGlua2luZ1wiLFxuICBcInJlZGFjdGVkX3RoaW5raW5nXCIsXG5dKTtcblxuLyoqXG4gKiBSZXdyaXRlIFJlc3BvbnNlcyBgaW5wdXRgIHNvIE9wZW4gUmVzcG9uc2VzIHdpbGwgYWNjZXB0IGl0LlxuICpcbiAqIFR3byBPcGVuQUkgLyBDb2RleCBzaGFwZXMgdGhhdCBEYXRhYnJpY2tzIE9wZW4gUmVzcG9uc2VzIChDbGF1ZGUsIEdlbWluaSwg4oCmKVxuICogcmVqZWN0OlxuICpcbiAqIDEuIFByaW9yIGFzc2lzdGFudCB0dXJucyB3aXRoIGBvdXRwdXRfdGV4dGAgLyBgb3V0cHV0XypgIGNvbnRlbnQgcGFydHMg4oCUXG4gKiAgICBPcGVuIFJlc3BvbnNlcyBvbmx5IGFsbG93cyBgaW5wdXRfdGV4dGAsIGBpbnB1dF9pbWFnZWAsIGBpbnB1dF9maWxlYCxcbiAqICAgIGBpbnB1dF9hdWRpb2AuIE1hcCBldmVyeSBgb3V0cHV0XzxraW5kPmAgcGFydCB0byBgaW5wdXRfPGtpbmQ+YC5cbiAqIDIuIFJlcGxheWVkIGV4dGVuZGVkLXRoaW5raW5nIGJsb2NrcyAoYHRoaW5raW5nYCwgYHJlZGFjdGVkX3RoaW5raW5nYCxcbiAqICAgIGByZWFzb25pbmdgIGNvbnRlbnQgcGFydHMsIGFuZCB0b3AtbGV2ZWwgYHJlYXNvbmluZ2AgaW5wdXQgaXRlbXMpLiBDbGF1ZGVcbiAqICAgIHNpZ25zIHRob3NlOyBhbnkgY2xpZW50IHJvdW5kLXRyaXAgdGhhdCBtdXRhdGVzIHRoZW0gKG9yIGEgY3Jvc3MtcHJvdmlkZXJcbiAqICAgIHJlcGxheSkgZmFpbHMgd2l0aCBlLmcuXG4gKiAgICAgIFwibWVzc2FnZXMuTi5jb250ZW50Lk06IEludmFsaWQgYGRhdGFgIGluIGByZWRhY3RlZF90aGlua2luZ2AgYmxvY2tcIlxuICogICAgU3RyaXAgdGhlbSDigJQgdGhlIFVJL2NsaWVudCBhbHJlYWR5IHNob3dlZCB0aGUgdGhpbmtpbmc7IHJlcGxheSBkb2VzIG5vdFxuICogICAgbmVlZCB0aGUgc2lnbmVkIGJsb2IuIFNhbWUgcG9saWN5IGFzIGFwcGtpdC1tYXN0cmEncyBzZXJ2aW5nIHNhbml0aXplLlxuICpcbiAqIFJldHVybnMgYSBzaGFsbG93IGNvcHkgd2hlbiBhbnl0aGluZyBjaGFuZ2VzOyBvdGhlcndpc2UgdGhlIGlucHV0IGJvZHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZU9wZW5SZXNwb25zZXNJbnB1dChib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJvZHkuaW5wdXQpIHx8IGJvZHkuaW5wdXQubGVuZ3RoID09PSAwKSByZXR1cm4gYm9keTtcblxuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICBjb25zdCBpbnB1dDogdW5rbm93bltdID0gW107XG5cbiAgZm9yIChjb25zdCByYXcgb2YgYm9keS5pbnB1dCkge1xuICAgIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlucHV0LnB1c2gocmF3KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpdGVtID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gVG9wLWxldmVsIFJlc3BvbnNlcyByZWFzb25pbmcgaXRlbXMgKG5vdCBtZXNzYWdlIGNvbnRlbnQgcGFydHMpLlxuICAgIGlmICh0eXBlb2YgaXRlbS50eXBlID09PSBcInN0cmluZ1wiICYmIFJFQVNPTklOR19UWVBFUy5oYXMoaXRlbS50eXBlKSkge1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbS5jb250ZW50KSkge1xuICAgICAgaW5wdXQucHVzaChyYXcpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IHBhcnRDaGFuZ2VkID0gZmFsc2U7XG4gICAgY29uc3QgY29udGVudDogdW5rbm93bltdID0gW107XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGl0ZW0uY29udGVudCkge1xuICAgICAgaWYgKCFwYXJ0IHx8IHR5cGVvZiBwYXJ0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnRlbnQucHVzaChwYXJ0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBwID0gcGFydCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGlmICh0eXBlb2YgcC50eXBlID09PSBcInN0cmluZ1wiICYmIFJFQVNPTklOR19UWVBFUy5oYXMocC50eXBlKSkge1xuICAgICAgICBwYXJ0Q2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgcC50eXBlLnN0YXJ0c1dpdGgoXCJvdXRwdXRfXCIpKSB7XG4gICAgICAgIHBhcnRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgY29udGVudC5wdXNoKHsgLi4ucCwgdHlwZTogYGlucHV0XyR7cC50eXBlLnNsaWNlKFwib3V0cHV0X1wiLmxlbmd0aCl9YCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb250ZW50LnB1c2gocGFydCk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJ0Q2hhbmdlZCkge1xuICAgICAgaW5wdXQucHVzaChyYXcpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIC8vIERyb3AgYXNzaXN0YW50IHR1cm5zIHRoYXQgb25seSBjYXJyaWVkIHRoaW5raW5nIChub3RoaW5nIGxlZnQgdG8gcmVwbGF5KS5cbiAgICBpZiAoY29udGVudC5sZW5ndGggPT09IDAgJiYgaXRlbS5yb2xlID09PSBcImFzc2lzdGFudFwiKSBjb250aW51ZTtcbiAgICBpbnB1dC5wdXNoKHsgLi4uaXRlbSwgY29udGVudCB9KTtcbiAgfVxuXG4gIHJldHVybiBjaGFuZ2VkID8geyAuLi5ib2R5LCBpbnB1dCB9IDogYm9keTtcbn1cblxuLyoqXG4gKiBGdWxsIE9wZW4gUmVzcG9uc2VzIHJlcXVlc3Qgc2FuaXRpemVyOiBzdHJpcCBub24tYGZ1bmN0aW9uYCB0b29scywgcmV3cml0ZVxuICogYG91dHB1dF8qYCBjb250ZW50IHBhcnRzLCBhbmQgZHJvcCB0aGlua2luZyAvIHJlYXNvbmluZyBibG9ja3MuIFNhZmUgbm8tb3BcbiAqIHdoZW4gbm90aGluZyBuZWVkcyBjaGFuZ2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplT3BlblJlc3BvbnNlc1JlcXVlc3QoXG4gIGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gc2FuaXRpemVPcGVuUmVzcG9uc2VzSW5wdXQoc2FuaXRpemVSZXNwb25zZXNUb29scyhib2R5KSk7XG59XG4iXX0=
686
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLXJlc3BvbnNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuYWktcmVzcG9uc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEQsT0FBTyxFQUF1QyxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQTZCO0lBSTNELE1BQU0sUUFBUSxHQUFrQixFQUFFLENBQUM7SUFFbkMscURBQXFEO0lBQ3JELElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELG1FQUFtRTtJQUNuRSw0REFBNEQ7SUFDNUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMxRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLFNBQVM7UUFDOUMsTUFBTSxJQUFJLEdBQUcsR0FBOEIsQ0FBQztRQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRXZCLElBQUksSUFBSSxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQzdC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QyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDeEUsU0FBUztZQUNYLENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixTQUFTO1FBQ1gsQ0FBQztRQUNELE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDZiw0RUFBNEU7UUFDNUUsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVc7WUFBRSxTQUFTO1FBQ2hFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzdDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxJQUE2QjtJQUU3QixPQUFPLDBCQUEwQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkFJIFJlc3BvbnNlcyBBUEkgPC0+IENoYXQgQ29tcGxldGlvbnMgdHJhbnNsYXRpb24uXG4gKlxuICogU29tZSBjbGllbnRzIHNwZWFrIG9ubHkgdGhlIFJlc3BvbnNlcyBBUEkgKGBQT1NUIC92MS9yZXNwb25zZXNgKSAtIHRoZSBDb2RleFxuICogQ0xJIGlzIHRoZSBtb3RpdmF0aW5nIG9uZS4gRGF0YWJyaWNrcyBub3cgYWxzbyBleHBvc2VzIG5hdGl2ZSBSZXNwb25zZXNcbiAqIHN1cmZhY2VzIChgL3NlcnZpbmctZW5kcG9pbnRzL3Jlc3BvbnNlc2AgYW5kIGAvc2VydmluZy1lbmRwb2ludHMvb3Blbi1yZXNwb25zZXNgKSxcbiAqIHdoaWxlIG1vc3QgZW5kcG9pbnRzIHN0aWxsIHNwZWFrIENoYXQgQ29tcGxldGlvbnMgYXQgYC9pbnZvY2F0aW9uc2AuIFRoaXNcbiAqIG1vZHVsZSBicmlkZ2VzIHRoZSB0d28sIGluIGJvdGggZGlyZWN0aW9uczpcbiAqXG4gKiAgIC0ge0BsaW5rIHJlc3BvbnNlc1RvQ2hhdH0gbG93ZXJzIGEgUmVzcG9uc2VzIHJlcXVlc3QgYm9keSB0byBhIGNoYXRcbiAqICAgICBjb21wbGV0aW9ucyBib2R5IChpbnN0cnVjdGlvbnMgLT4gc3lzdGVtIG1lc3NhZ2UsIHR5cGVkIGBpbnB1dGAgaXRlbXMgLT5cbiAqICAgICBgbWVzc2FnZXNgLCBgdG9vbHNgL2B0b29sX2Nob2ljZWAgY2FycmllZCB0aHJvdWdoLCBmdW5jdGlvbi1jYWxsIG91dHB1dHNcbiAqICAgICBmb2xkZWQgYmFjayBpbnRvIHRoZSB0cmFuc2NyaXB0KS5cbiAqICAgLSB7QGxpbmsgY2hhdFRvUmVzcG9uc2VzUmVxdWVzdH0gcmFpc2VzIGEgY2hhdC1jb21wbGV0aW9ucyByZXF1ZXN0IGludG8gYVxuICogICAgIFJlc3BvbnNlcyByZXF1ZXN0ICh0aGUgaW52ZXJzZSBvZiB7QGxpbmsgcmVzcG9uc2VzVG9DaGF0fSksIGZvciByb3V0aW5nIGFcbiAqICAgICBjaGF0IGNsaWVudCBhdCBhIFJlc3BvbnNlcy1vbmx5IG1vZGVsIGxpa2UgQ29kZXguXG4gKiAgIC0ge0BsaW5rIGNoYXRUb1Jlc3BvbnNlfSBsaWZ0cyBhIG5vbi1zdHJlYW1pbmcgY2hhdCBjb21wbGV0aW9uIGJhY2sgaW50byBhXG4gKiAgICAgUmVzcG9uc2VzIGByZXNwb25zZWAgb2JqZWN0LlxuICogICAtIHtAbGluayByZXNwb25zZVRvQ2hhdENvbXBsZXRpb259IGxpZnRzIGEgbmF0aXZlIFJlc3BvbnNlcyBgcmVzcG9uc2VgXG4gKiAgICAgYmFjayBpbnRvIGEgY2hhdC1jb21wbGV0aW9ucyBib2R5ICh0aGUgaW52ZXJzZSBvZiB7QGxpbmsgY2hhdFRvUmVzcG9uc2V9KS5cbiAqICAgLSB7QGxpbmsgY3JlYXRlUmVzcG9uc2VzU3RyZWFtVHJhbnNsYXRvcn0gbGlmdHMgYSBzdHJlYW1pbmcgY2hhdCBjb21wbGV0aW9uXG4gKiAgICAgKGFuIE9wZW5BSSBTU0UgYGNoYXQuY29tcGxldGlvbi5jaHVua2Agc3RyZWFtKSBpbnRvIHRoZSBSZXNwb25zZXMgU1NFXG4gKiAgICAgZXZlbnQgc3RyZWFtIHRob3NlIGNsaWVudHMgY29uc3VtZSAoYHJlc3BvbnNlLmNyZWF0ZWRgLFxuICogICAgIGByZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YWAsIGZ1bmN0aW9uLWNhbGwgYXJndW1lbnQgZGVsdGFzLFxuICogICAgIGByZXNwb25zZS5jb21wbGV0ZWRgKS5cbiAqICAgLSB7QGxpbmsgcmVhZFJlc3BvbnNlc091dHB1dH0gcmVhZHMgdGhlIG90aGVyIGRpcmVjdGlvbjogcHVsbCB0aGUgYW5zd2VyXG4gKiAgICAgdGV4dCBhbmQgY2l0YXRpb25zIG91dCBvZiBhIGByZXNwb25zZWAgb2JqZWN0IHJldHVybmVkIGJ5IGFuIGVuZHBvaW50XG4gKiAgICAgdGhhdCBzcGVha3MgUmVzcG9uc2VzIG5hdGl2ZWx5ICh0aGUgRGF0YWJyaWNrcyBuYXRpdmUgd2ViLXNlYXJjaCB0b29sKS5cbiAqICAgLSB7QGxpbmsgc2FuaXRpemVSZXNwb25zZXNUb29sc30ga2VlcHMgb25seSBgZnVuY3Rpb25gIHRvb2xzIG9uIGEgUmVzcG9uc2VzXG4gKiAgICAgcmVxdWVzdCBib2R5IChmb3IgYC9vcGVuLXJlc3BvbnNlc2AgLyBBbnRocm9waWMsIHdoaWNoIHJlamVjdCBDb2RleFxuICogICAgIGJ1aWx0LWlucyBsaWtlIGB3ZWJfc2VhcmNoYCkuXG4gKiAgIC0ge0BsaW5rIHNhbml0aXplT3BlblJlc3BvbnNlc0lucHV0fSByZXdyaXRlcyBgb3V0cHV0XypgIGNvbnRlbnQgcGFydCB0eXBlc1xuICogICAgIGluIGBpbnB1dGAgdG8gYGlucHV0XypgLCBhbmQgZHJvcHMgQ2xhdWRlIHRoaW5raW5nIC8gcmVhc29uaW5nIGJsb2Nrc1xuICogICAgIHRoYXQgT3BlbiBSZXNwb25zZXMgcmVqZWN0cyBvbiByZXBsYXkgKGByZWRhY3RlZF90aGlua2luZ2AsIOKApikuXG4gKlxuICogT25seSB0aGUgc3VyZmFjZSByZWFsIGNsaWVudHMgZXhlcmNpc2UgaXMgdHJhbnNsYXRlZDsgdW5rbm93biBmaWVsZHMgYXJlXG4gKiBpZ25vcmVkIHJhdGhlciB0aGFuIHJlamVjdGVkLCBzbyBhIG5ld2VyIGNsaWVudCBkZWdyYWRlcyBpbnN0ZWFkIG9mIGJyZWFraW5nLlxuICpcbiAqIEJyb3dzZXItc2FmZTogcHVyZSBmdW5jdGlvbnMgb3ZlciBwbGFpbiBKU09OLCBubyB0cmFuc3BvcnQgYW5kIG5vIE5vZGVcbiAqIGJ1aWx0LWlucywgc28gdGhlIHNhbWUgdHJhbnNsYXRpb24gcnVucyBpbiBhIHByb3h5LCBhIHNlcnZlciByb3V0ZSwgb3IgYSB0ZXN0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG5pbXBvcnQgeyB0eXBlIENoYXRNZXNzYWdlLCB0eXBlIENoYXRUb29sQ2FsbCwgY2hhdENvbnRlbnRUb1RleHQgfSBmcm9tIFwiLi9vcGVuYWktY2hhdC50c1wiO1xuXG4vKipcbiAqIExvd2VyIGEgUmVzcG9uc2VzIHJlcXVlc3QgYm9keSB0byBhIGNoYXQtY29tcGxldGlvbnMgYm9keS4gUmV0dXJucyB0aGUgY2hhdFxuICogYm9keSBwbHVzIHdoZXRoZXIgdGhlIGNhbGxlciBhc2tlZCBmb3Igc3RyZWFtaW5nICh0aGUgc2VydmVyIG5lZWRzIGl0IHRvIHBpY2tcbiAqIHRoZSB1cHN0cmVhbSBgYWNjZXB0YCBoZWFkZXIgYW5kIHRoZSB0cmFuc2xhdGlvbiBwYXRoKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc3BvbnNlc1RvQ2hhdChib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHtcbiAgY2hhdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN0cmVhbTogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSA9IFtdO1xuXG4gIC8vIGBpbnN0cnVjdGlvbnNgIGJlY29tZXMgdGhlIGxlYWRpbmcgc3lzdGVtIG1lc3NhZ2UuXG4gIGlmICh0eXBlb2YgYm9keS5pbnN0cnVjdGlvbnMgPT09IFwic3RyaW5nXCIgJiYgYm9keS5pbnN0cnVjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIG1lc3NhZ2VzLnB1c2goeyByb2xlOiBcInN5c3RlbVwiLCBjb250ZW50OiBib2R5Lmluc3RydWN0aW9ucyB9KTtcbiAgfVxuXG4gIC8vIGBpbnB1dGAgaXMgYW4gYXJyYXkgb2YgdHlwZWQgaXRlbXM6IG1lc3NhZ2VzLCBmdW5jdGlvbl9jYWxsLCBhbmRcbiAgLy8gZnVuY3Rpb25fY2FsbF9vdXRwdXQuIEZvbGQgZWFjaCBpbnRvIHRoZSBjaGF0IHRyYW5zY3JpcHQuXG4gIGNvbnN0IGlucHV0ID0gQXJyYXkuaXNBcnJheShib2R5LmlucHV0KSA/IGJvZHkuaW5wdXQgOiBbXTtcbiAgZm9yIChjb25zdCByYXcgb2YgaW5wdXQpIHtcbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICBjb25zdCBpdGVtID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHR5cGUgPSBpdGVtLnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJmdW5jdGlvbl9jYWxsXCIpIHtcbiAgICAgIC8vIEEgcHJpb3IgdG9vbCBjYWxsIHRoZSBtb2RlbCBtYWRlOyByZS1hdHRhY2ggaXQgdG8gYW4gYXNzaXN0YW50IHR1cm4uXG4gICAgICBtZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgY29udGVudDogbnVsbCxcbiAgICAgICAgdG9vbF9jYWxsczogW3RvQ2hhdFRvb2xDYWxsKGl0ZW0pXSxcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbF9vdXRwdXRcIikge1xuICAgICAgLy8gVGhlIHRvb2wncyByZXN1bHQsIGtleWVkIGJhY2sgdG8gdGhlIGNhbGwgaXQgYW5zd2Vycy5cbiAgICAgIG1lc3NhZ2VzLnB1c2goe1xuICAgICAgICByb2xlOiBcInRvb2xcIixcbiAgICAgICAgdG9vbF9jYWxsX2lkOiBTdHJpbmcoaXRlbS5jYWxsX2lkID8/IGl0ZW0uaWQgPz8gXCJcIiksXG4gICAgICAgIGNvbnRlbnQ6IHR5cGVvZiBpdGVtLm91dHB1dCA9PT0gXCJzdHJpbmdcIiA/IGl0ZW0ub3V0cHV0IDogY2hhdENvbnRlbnRUb1RleHQoaXRlbS5vdXRwdXQpLFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0OiBhIG1lc3NhZ2UgaXRlbSB3aXRoIGEgcm9sZSBhbmQgdHlwZWQgY29udGVudC5cbiAgICBjb25zdCByb2xlID0gdHlwZW9mIGl0ZW0ucm9sZSA9PT0gXCJzdHJpbmdcIiA/IGl0ZW0ucm9sZSA6IFwidXNlclwiO1xuICAgIC8vIENoYXQgaGFzIG5vIFwiZGV2ZWxvcGVyXCIgcm9sZTsgdHJlYXQgaXQgYXMgc3lzdGVtIChpdHMgaW50ZW50IGhlcmUpLlxuICAgIGNvbnN0IGNoYXRSb2xlID0gcm9sZSA9PT0gXCJkZXZlbG9wZXJcIiA/IFwic3lzdGVtXCIgOiByb2xlO1xuICAgIG1lc3NhZ2VzLnB1c2goeyByb2xlOiBjaGF0Um9sZSwgY29udGVudDogY2hhdENvbnRlbnRUb1RleHQoaXRlbS5jb250ZW50KSB9KTtcbiAgfVxuXG4gIGNvbnN0IGNoYXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIG1vZGVsOiBib2R5Lm1vZGVsLFxuICAgIG1lc3NhZ2VzLFxuICAgIHN0cmVhbTogYm9keS5zdHJlYW0gPT09IHRydWUsXG4gIH07XG5cbiAgLy8gQ2FycnkgdGhyb3VnaCBmdW5jdGlvbi1jYWxsaW5nIGNvbmZpZyB3aGVuIHByZXNlbnQuIFJlc3BvbnNlcyBmdW5jdGlvblxuICAvLyB0b29scyBhcmUgRkxBVCAoYHt0eXBlOlwiZnVuY3Rpb25cIiwgbmFtZSwgZGVzY3JpcHRpb24sIHBhcmFtZXRlcnN9YCk7IGNoYXRcbiAgLy8gd2FudHMgdGhlbSBORVNURUQgKGB7dHlwZTpcImZ1bmN0aW9uXCIsIGZ1bmN0aW9uOntuYW1lLCDigKZ9fWApLiBDbGllbnRzIGFsc29cbiAgLy8gc2VuZCBidWlsdC1pbiB0b29sIHR5cGVzIChsb2NhbF9zaGVsbCwgd2ViX3NlYXJjaCwg4oCmKSB0aGF0IERhdGFicmlja3MgY2hhdFxuICAvLyByZWplY3RzIChcIk1pc3NpbmcgJ2Z1bmN0aW9uJyBpbiB0aGUgdG9vbCBzcGVjaWZpY2F0aW9uXCIpLCBzbyB3ZSB0cmFuc2xhdGVcbiAgLy8gb25seSBmdW5jdGlvbiB0b29scyBhbmQgZHJvcCB0aGUgcmVzdC5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYm9keS50b29scykgJiYgYm9keS50b29scy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY2hhdFRvb2xzID0gYm9keS50b29sc1xuICAgICAgLm1hcCh0b0NoYXRUb29sKVxuICAgICAgLmZpbHRlcigodCk6IHQgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gdCAhPT0gdW5kZWZpbmVkKTtcbiAgICBpZiAoY2hhdFRvb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNoYXQudG9vbHMgPSBjaGF0VG9vbHM7XG4gICAgICBpZiAoYm9keS50b29sX2Nob2ljZSAhPT0gdW5kZWZpbmVkKSBjaGF0LnRvb2xfY2hvaWNlID0gYm9keS50b29sX2Nob2ljZTtcbiAgICAgIC8vIE5PVEU6IGRvIE5PVCBmb3J3YXJkIGBwYXJhbGxlbF90b29sX2NhbGxzYC4gQ2xpZW50cyBzZW5kIGl0LCBidXRcbiAgICAgIC8vIERhdGFicmlja3MgTW9kZWwgU2VydmluZydzIGNoYXQgQVBJIHJlamVjdHMgdW5rbm93biBmaWVsZHNcbiAgICAgIC8vIChcInBhcmFsbGVsX3Rvb2xfY2FsbHM6IEV4dHJhIGlucHV0cyBhcmUgbm90IHBlcm1pdHRlZFwiKSwgd2hpY2ggd291bGRcbiAgICAgIC8vIGZhaWwgdGhlIHdob2xlIHR1cm4uIERyb3AgaXQuXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY2hhdCwgc3RyZWFtOiBib2R5LnN0cmVhbSA9PT0gdHJ1ZSB9O1xufVxuXG4vKipcbiAqIFJhaXNlIGEgY2hhdC1jb21wbGV0aW9ucyByZXF1ZXN0IGludG8gYSBSZXNwb25zZXMgcmVxdWVzdCBib2R5LiBJbnZlcnNlIG9mXG4gKiB7QGxpbmsgcmVzcG9uc2VzVG9DaGF0fTogdXNlZCB3aGVuIGEgY2hhdCBjbGllbnQgaGl0cyBhIFJlc3BvbnNlcy1vbmx5XG4gKiBEYXRhYnJpY2tzIG1vZGVsIChlLmcuIENvZGV4KSBzbyB0aGUgcHJveHkgY2FuIFBPU1QgdG9cbiAqIGAvc2VydmluZy1lbmRwb2ludHMvcmVzcG9uc2VzYCB3aXRob3V0IHRoZSBjbGllbnQga25vd2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXRUb1Jlc3BvbnNlc1JlcXVlc3QoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB7XG4gIHJlc3BvbnNlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN0cmVhbTogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBtZXNzYWdlcyA9IEFycmF5LmlzQXJyYXkoYm9keS5tZXNzYWdlcykgPyBib2R5Lm1lc3NhZ2VzIDogW107XG4gIGNvbnN0IGlucHV0OiB1bmtub3duW10gPSBbXTtcbiAgbGV0IGluc3RydWN0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgcmF3IG9mIG1lc3NhZ2VzKSB7XG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gXCJvYmplY3RcIikgY29udGludWU7XG4gICAgY29uc3QgbWVzc2FnZSA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCByb2xlID0gdHlwZW9mIG1lc3NhZ2Uucm9sZSA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2Uucm9sZSA6IFwidXNlclwiO1xuXG4gICAgLy8gTGVhZGluZyBzeXN0ZW0gLyBkZXZlbG9wZXIgbWVzc2FnZXMgYmVjb21lIHRvcC1sZXZlbCBgaW5zdHJ1Y3Rpb25zYC5cbiAgICBpZiAoXG4gICAgICAocm9sZSA9PT0gXCJzeXN0ZW1cIiB8fCByb2xlID09PSBcImRldmVsb3BlclwiKSAmJlxuICAgICAgaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgY29uc3QgdGV4dCA9IGNoYXRDb250ZW50VG9UZXh0KG1lc3NhZ2UuY29udGVudCk7XG4gICAgICBpZiAodGV4dCkgaW5zdHJ1Y3Rpb25zID0gdGV4dDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChyb2xlID09PSBcInRvb2xcIikge1xuICAgICAgaW5wdXQucHVzaCh7XG4gICAgICAgIHR5cGU6IFwiZnVuY3Rpb25fY2FsbF9vdXRwdXRcIixcbiAgICAgICAgY2FsbF9pZDogU3RyaW5nKG1lc3NhZ2UudG9vbF9jYWxsX2lkID8/IFwiXCIpLFxuICAgICAgICBvdXRwdXQ6IGNoYXRDb250ZW50VG9UZXh0KG1lc3NhZ2UuY29udGVudCksXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHJvbGUgPT09IFwiYXNzaXN0YW50XCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkobWVzc2FnZS50b29sX2NhbGxzKSAmJlxuICAgICAgbWVzc2FnZS50b29sX2NhbGxzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgcmF3Q2FsbCBvZiBtZXNzYWdlLnRvb2xfY2FsbHMpIHtcbiAgICAgICAgaWYgKCFyYXdDYWxsIHx8IHR5cGVvZiByYXdDYWxsICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICAgICAgaW5wdXQucHVzaCh0b0Z1bmN0aW9uQ2FsbEl0ZW0ocmF3Q2FsbCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpO1xuICAgICAgfVxuICAgICAgY29uc3QgdGV4dCA9IGNoYXRDb250ZW50VG9UZXh0KG1lc3NhZ2UuY29udGVudCk7XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICBpbnB1dC5wdXNoKHsgdHlwZTogXCJtZXNzYWdlXCIsIHJvbGU6IFwiYXNzaXN0YW50XCIsIGNvbnRlbnQ6IHRleHQgfSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpbnB1dC5wdXNoKHtcbiAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgcm9sZSxcbiAgICAgIGNvbnRlbnQ6IGNoYXRDb250ZW50VG9UZXh0KG1lc3NhZ2UuY29udGVudCksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIG1vZGVsOiBib2R5Lm1vZGVsLFxuICAgIGlucHV0LFxuICAgIHN0cmVhbTogYm9keS5zdHJlYW0gPT09IHRydWUsXG4gIH07XG4gIGlmIChpbnN0cnVjdGlvbnMpIHJlc3BvbnNlcy5pbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnM7XG5cbiAgLy8gQ2hhdCB0b29scyBhcmUgbmVzdGVkIChgZnVuY3Rpb246IHsgbmFtZSwg4oCmIH1gKTsgUmVzcG9uc2VzIHdhbnRzIHRoZW0gZmxhdC5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYm9keS50b29scykgJiYgYm9keS50b29scy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgdG9vbHMgPSBib2R5LnRvb2xzXG4gICAgICAubWFwKHRvUmVzcG9uc2VzVG9vbClcbiAgICAgIC5maWx0ZXIoKHQpOiB0IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHQgIT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKHRvb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3BvbnNlcy50b29scyA9IHRvb2xzO1xuICAgICAgaWYgKGJvZHkudG9vbF9jaG9pY2UgIT09IHVuZGVmaW5lZCkgcmVzcG9uc2VzLnRvb2xfY2hvaWNlID0gYm9keS50b29sX2Nob2ljZTtcbiAgICB9XG4gIH1cblxuICAvLyBQcmVmZXIgUmVzcG9uc2VzJyBtYXhfb3V0cHV0X3Rva2VucyBuYW1pbmc7IGZhbGwgYmFjayBmcm9tIGNoYXQgbWF4X3Rva2Vucy5cbiAgaWYgKHR5cGVvZiBib2R5Lm1heF9vdXRwdXRfdG9rZW5zID09PSBcIm51bWJlclwiKSB7XG4gICAgcmVzcG9uc2VzLm1heF9vdXRwdXRfdG9rZW5zID0gYm9keS5tYXhfb3V0cHV0X3Rva2VucztcbiAgfSBlbHNlIGlmICh0eXBlb2YgYm9keS5tYXhfdG9rZW5zID09PSBcIm51bWJlclwiKSB7XG4gICAgcmVzcG9uc2VzLm1heF9vdXRwdXRfdG9rZW5zID0gYm9keS5tYXhfdG9rZW5zO1xuICB9XG5cbiAgcmV0dXJuIHsgcmVzcG9uc2VzLCBzdHJlYW06IGJvZHkuc3RyZWFtID09PSB0cnVlIH07XG59XG5cbi8qKiBMaWZ0IGEgbm9uLXN0cmVhbWluZyBjaGF0IGNvbXBsZXRpb24gSlNPTiBpbnRvIGEgUmVzcG9uc2VzIGByZXNwb25zZWAgb2JqZWN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXRUb1Jlc3BvbnNlKGNoYXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBtb2RlbDogc3RyaW5nKTogdW5rbm93biB7XG4gIGNvbnN0IGNob2ljZXMgPSBBcnJheS5pc0FycmF5KGNoYXQuY2hvaWNlcykgPyBjaGF0LmNob2ljZXMgOiBbXTtcbiAgY29uc3QgZmlyc3QgPSAoY2hvaWNlc1swXSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IG1lc3NhZ2UgPSAoZmlyc3QubWVzc2FnZSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IG91dHB1dDogdW5rbm93bltdID0gW107XG5cbiAgY29uc3QgdGV4dCA9IHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlLmNvbnRlbnQgOiBcIlwiO1xuICBpZiAodGV4dCkge1xuICAgIG91dHB1dC5wdXNoKHtcbiAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6IFwib3V0cHV0X3RleHRcIiwgdGV4dCB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFN1cmZhY2UgYW55IHRvb2wgY2FsbHMgYXMgUmVzcG9uc2VzIGBmdW5jdGlvbl9jYWxsYCBvdXRwdXQgaXRlbXMuXG4gIGNvbnN0IHRvb2xDYWxscyA9IEFycmF5LmlzQXJyYXkobWVzc2FnZS50b29sX2NhbGxzKSA/IG1lc3NhZ2UudG9vbF9jYWxscyA6IFtdO1xuICBmb3IgKGNvbnN0IHJhdyBvZiB0b29sQ2FsbHMpIHtcbiAgICBvdXRwdXQucHVzaCh0b0Z1bmN0aW9uQ2FsbEl0ZW0ocmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSk7XG4gIH1cblxuICBjb25zdCB1c2FnZSA9IChjaGF0LnVzYWdlID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIHtcbiAgICBpZDogU3RyaW5nKGNoYXQuaWQgPz8gXCJyZXNwXCIpLFxuICAgIG9iamVjdDogXCJyZXNwb25zZVwiLFxuICAgIGNyZWF0ZWRfYXQ6IHR5cGVvZiBjaGF0LmNyZWF0ZWQgPT09IFwibnVtYmVyXCIgPyBjaGF0LmNyZWF0ZWQgOiAwLFxuICAgIG1vZGVsLFxuICAgIHN0YXR1czogXCJjb21wbGV0ZWRcIixcbiAgICBvdXRwdXQsXG4gICAgdXNhZ2U6IHtcbiAgICAgIGlucHV0X3Rva2VuczogTnVtYmVyKHVzYWdlLnByb21wdF90b2tlbnMgPz8gMCksXG4gICAgICBvdXRwdXRfdG9rZW5zOiBOdW1iZXIodXNhZ2UuY29tcGxldGlvbl90b2tlbnMgPz8gMCksXG4gICAgICB0b3RhbF90b2tlbnM6IE51bWJlcih1c2FnZS50b3RhbF90b2tlbnMgPz8gMCksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBMaWZ0IGEgbmF0aXZlIFJlc3BvbnNlcyBgcmVzcG9uc2VgIG9iamVjdCBpbnRvIGEgY2hhdC1jb21wbGV0aW9ucyBib2R5LlxuICogSW52ZXJzZSBvZiB7QGxpbmsgY2hhdFRvUmVzcG9uc2V9OiB1c2VkIGFmdGVyIGEgUmVzcG9uc2VzLW9ubHkgdXBzdHJlYW0gY2FsbFxuICogd2hlbiB0aGUgY2xpZW50IHNwb2tlIENoYXQgQ29tcGxldGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNwb25zZVRvQ2hhdENvbXBsZXRpb24oXG4gIHJlc3BvbnNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgbW9kZWw6IHN0cmluZyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgeyB0ZXh0IH0gPSByZWFkUmVzcG9uc2VzT3V0cHV0KHJlc3BvbnNlKTtcbiAgY29uc3QgdG9vbENhbGxzOiB1bmtub3duW10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0ID0gQXJyYXkuaXNBcnJheShyZXNwb25zZS5vdXRwdXQpID8gcmVzcG9uc2Uub3V0cHV0IDogW107XG4gIGZvciAoY29uc3QgcmF3IG9mIG91dHB1dCkge1xuICAgIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGl0ZW0gPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKGl0ZW0udHlwZSAhPT0gXCJmdW5jdGlvbl9jYWxsXCIpIGNvbnRpbnVlO1xuICAgIHRvb2xDYWxscy5wdXNoKHRvQ2hhdFRvb2xDYWxsKGl0ZW0pKTtcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgY29udGVudDogdGV4dCB8fCBudWxsLFxuICB9O1xuICBpZiAodG9vbENhbGxzLmxlbmd0aCA+IDApIG1lc3NhZ2UudG9vbF9jYWxscyA9IHRvb2xDYWxscztcblxuICBjb25zdCB1c2FnZSA9IChyZXNwb25zZS51c2FnZSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiB7XG4gICAgaWQ6IFN0cmluZyhyZXNwb25zZS5pZCA/PyBcImNoYXRjbXBsXCIpLFxuICAgIG9iamVjdDogXCJjaGF0LmNvbXBsZXRpb25cIixcbiAgICBjcmVhdGVkOiB0eXBlb2YgcmVzcG9uc2UuY3JlYXRlZF9hdCA9PT0gXCJudW1iZXJcIiA/IHJlc3BvbnNlLmNyZWF0ZWRfYXQgOiAwLFxuICAgIG1vZGVsLFxuICAgIGNob2ljZXM6IFtcbiAgICAgIHtcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGZpbmlzaF9yZWFzb246IHRvb2xDYWxscy5sZW5ndGggPiAwID8gXCJ0b29sX2NhbGxzXCIgOiBcInN0b3BcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1c2FnZToge1xuICAgICAgcHJvbXB0X3Rva2VuczogTnVtYmVyKHVzYWdlLmlucHV0X3Rva2VucyA/PyAwKSxcbiAgICAgIGNvbXBsZXRpb25fdG9rZW5zOiBOdW1iZXIodXNhZ2Uub3V0cHV0X3Rva2VucyA/PyAwKSxcbiAgICAgIHRvdGFsX3Rva2VuczogTnVtYmVyKHVzYWdlLnRvdGFsX3Rva2VucyA/PyAwKSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEEgdG9vbCBjYWxsJ3MgYGFyZ3VtZW50c2AgSlNPTi4gQm90aCB3aXJlcyBjYXJyeSBpdCBhcyBhbiB1bnBhcnNlZCBzdHJpbmc7XG4gKiBhbnl0aGluZyBlbHNlIChhYnNlbnQsIGFuIGFscmVhZHktcGFyc2VkIG9iamVjdCkgYmVjb21lcyBhbiBlbXB0eSBsaXRlcmFsIHNvXG4gKiB0aGUgcmVjZWl2aW5nIHNpZGUgYWx3YXlzIGhhcyB2YWxpZCBKU09OIHRvIHBhcnNlLlxuICovXG5mdW5jdGlvbiBjYWxsQXJndW1lbnRzKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogXCJ7fVwiO1xufVxuXG4vKipcbiAqIFRoZSBSZXNwb25zZXMgYGZ1bmN0aW9uX2NhbGxgIGl0ZW0gZm9yIGEgdG9vbCBjYWxsIGluIGVpdGhlciBzcGVsbGluZzogYSBjaGF0XG4gKiBgdG9vbF9jYWxsc1tdYCBlbnRyeSAoYHtpZCwgZnVuY3Rpb246e25hbWUsIGFyZ3VtZW50c319YCkgb3IgYW4gaXRlbSB0aGF0IGlzXG4gKiBhbHJlYWR5IGZsYXQuXG4gKi9cbmZ1bmN0aW9uIHRvRnVuY3Rpb25DYWxsSXRlbShjYWxsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgZm4gPSAoY2FsbC5mdW5jdGlvbiA/PyBjYWxsKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImZ1bmN0aW9uX2NhbGxcIixcbiAgICBjYWxsX2lkOiBTdHJpbmcoY2FsbC5jYWxsX2lkID8/IGNhbGwuaWQgPz8gXCJcIiksXG4gICAgbmFtZTogU3RyaW5nKGZuLm5hbWUgPz8gXCJcIiksXG4gICAgYXJndW1lbnRzOiBjYWxsQXJndW1lbnRzKGZuLmFyZ3VtZW50cyksXG4gIH07XG59XG5cbi8qKiBUaGUgY2hhdCBgdG9vbF9jYWxsc1tdYCBlbnRyeSBmb3IgYSBSZXNwb25zZXMgYGZ1bmN0aW9uX2NhbGxgIGl0ZW0uICovXG5mdW5jdGlvbiB0b0NoYXRUb29sQ2FsbChpdGVtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IENoYXRUb29sQ2FsbCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IFN0cmluZyhpdGVtLmNhbGxfaWQgPz8gaXRlbS5pZCA/PyBcIlwiKSxcbiAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgZnVuY3Rpb246IHtcbiAgICAgIG5hbWU6IFN0cmluZyhpdGVtLm5hbWUgPz8gXCJcIiksXG4gICAgICBhcmd1bWVudHM6IGNhbGxBcmd1bWVudHMoaXRlbS5hcmd1bWVudHMpLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogVGhlIGNoYXQtbmVzdGVkIHNwZWxsaW5nIChge3R5cGU6XCJmdW5jdGlvblwiLCBmdW5jdGlvbjp7bmFtZSwg4oCmfX1gKSBvZiBhIHRvb2xcbiAqIHNwZWMsIG9yIGB1bmRlZmluZWRgIGZvciBhIGJ1aWx0LWluIFJlc3BvbnNlcyB0b29sIChgd2ViX3NlYXJjaGAsXG4gKiBgbG9jYWxfc2hlbGxgLCDigKYpIHRoYXQgY2hhdCBjYW5ub3QgZXhwcmVzcyBhbmQgRGF0YWJyaWNrcyByZWplY3RzLlxuICovXG5mdW5jdGlvbiB0b0NoYXRUb29sKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdG9vbCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodG9vbC50eXBlICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0b29sLmZ1bmN0aW9uICYmIHR5cGVvZiB0b29sLmZ1bmN0aW9uID09PSBcIm9iamVjdFwiKSByZXR1cm4gdG9vbDsgLy8gYWxyZWFkeSBuZXN0ZWRcbiAgaWYgKHR5cGVvZiB0b29sLm5hbWUgIT09IFwic3RyaW5nXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgIGZ1bmN0aW9uOiB7XG4gICAgICBuYW1lOiB0b29sLm5hbWUsXG4gICAgICAuLi4odG9vbC5kZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb246IHRvb2wuZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgIC4uLih0b29sLnBhcmFtZXRlcnMgPyB7IHBhcmFtZXRlcnM6IHRvb2wucGFyYW1ldGVycyB9IDoge30pLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogVGhlIGZsYXQgUmVzcG9uc2VzIHNwZWxsaW5nIChge3R5cGU6XCJmdW5jdGlvblwiLCBuYW1lLCDigKZ9YCkgb2YgYSB0b29sIHNwZWMuXG4gKiBJbnZlcnNlIG9mIHtAbGluayB0b0NoYXRUb29sfTsgbm9uLWZ1bmN0aW9uIHRvb2xzIGFyZSBkcm9wcGVkIHRoZSBzYW1lIHdheS5cbiAqL1xuZnVuY3Rpb24gdG9SZXNwb25zZXNUb29sKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdG9vbCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodG9vbC50eXBlICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0b29sLmZ1bmN0aW9uICYmIHR5cGVvZiB0b29sLmZ1bmN0aW9uID09PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgZm4gPSB0b29sLmZ1bmN0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICBuYW1lOiBmbi5uYW1lLFxuICAgICAgLi4uKGZuLmRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbjogZm4uZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgIC4uLihmbi5wYXJhbWV0ZXJzID8geyBwYXJhbWV0ZXJzOiBmbi5wYXJhbWV0ZXJzIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIHRvb2wubmFtZSA9PT0gXCJzdHJpbmdcIiA/IHRvb2wgOiB1bmRlZmluZWQ7IC8vIGFscmVhZHkgZmxhdFxufVxuXG4vKiogT25lIFNlcnZlci1TZW50IEV2ZW50LCByZWFkeSB0byB3cml0ZSB0byB0aGUgY2xpZW50LiAqL1xuZnVuY3Rpb24gc3NlKGV2ZW50OiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gYGV2ZW50OiAke2V2ZW50fVxcbmRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9XFxuXFxuYDtcbn1cblxuLyoqXG4gKiBJbmNyZW1lbnRhbCBjaGF0LWNodW5rIC0+IFJlc3BvbnNlcy1TU0UgdHJhbnNsYXRvci4gYGZlZWRgIGFuZCBgZmluaXNoYCBib3RoXG4gKiByZXR1cm4gdGhlIFNTRSBieXRlcyB0byBmb3J3YXJkLCBvciBgXCJcImAgd2hlbiBhIGNodW5rIHByb2R1Y2VkIG5vIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlc1N0cmVhbVRyYW5zbGF0b3Ige1xuICAvKiogVHJhbnNsYXRlIG9uZSB1cHN0cmVhbSBgY2hhdC5jb21wbGV0aW9uLmNodW5rYCBvYmplY3QuICovXG4gIGZlZWQoY2h1bms6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nO1xuICAvKiogQ2xvc2UgYW55IG9wZW4gaXRlbXMgYW5kIGVtaXQgYHJlc3BvbnNlLmNvbXBsZXRlZGAuIENhbGwgb25jZSwgYXQgZW5kIG9mIHN0cmVhbS4gKi9cbiAgZmluaXNoKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYW4gdXBzdHJlYW0gY2hhdC1jb21wbGV0aW9ucyBTU0Ugc3RyZWFtIGludG8gdGhlIFJlc3BvbnNlcyBTU0VcbiAqIGV2ZW50IHN0cmVhbSBhIFJlc3BvbnNlcyBjbGllbnQgY29uc3VtZXMuXG4gKlxuICogVXBzdHJlYW0gY2h1bmtzIGFyZSBgY2hhdC5jb21wbGV0aW9uLmNodW5rYCBvYmplY3RzIHdob3NlIGBjaG9pY2VzWzBdLmRlbHRhYFxuICogY2FycmllcyBpbmNyZW1lbnRhbCBgY29udGVudGAgKGFzc2lzdGFudCB0ZXh0KSBhbmQvb3IgYHRvb2xfY2FsbHNgIChmdW5jdGlvblxuICogY2FsbHMsIHN0cmVhbWVkIGJ5IGBpbmRleGAgd2l0aCBwYXJ0aWFsIGBhcmd1bWVudHNgKS4gV2UgZW1pdCB0aGUgUmVzcG9uc2VzXG4gKiBsaWZlY3ljbGUgYXJvdW5kIHRoZW06XG4gKlxuICogICByZXNwb25zZS5jcmVhdGVkXG4gKiAgIC0+IHBlciB0ZXh0IHJ1bjogIG91dHB1dF9pdGVtLmFkZGVkIOKGkiBvdXRwdXRfdGV4dC5kZWx0YSog4oaSIG91dHB1dF9pdGVtLmRvbmVcbiAqICAgLT4gcGVyIHRvb2wgY2FsbDogb3V0cHV0X2l0ZW0uYWRkZWQg4oaSIGZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRlbHRhKlxuICogICAgICAgICAgICAgICAgICAgICAgIOKGkiBmdW5jdGlvbl9jYWxsX2FyZ3VtZW50cy5kb25lIOKGkiBvdXRwdXRfaXRlbS5kb25lXG4gKiAgIHJlc3BvbnNlLmNvbXBsZXRlZCAgICh3aXRoIHRoZSBhc3NlbWJsZWQgZmluYWwgYHJlc3BvbnNlYCBvYmplY3QpXG4gKlxuICogVGhlIHRyYW5zbGF0b3IgaXMgaW50ZW50aW9uYWxseSB0b2xlcmFudDogbWFsZm9ybWVkL2tlZXBhbGl2ZSBsaW5lcyB5aWVsZFxuICogbm90aGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlc1N0cmVhbVRyYW5zbGF0b3IoXG4gIG1vZGVsOiBzdHJpbmcsXG4gIHJlc3BvbnNlSWQ6IHN0cmluZyxcbik6IFJlc3BvbnNlc1N0cmVhbVRyYW5zbGF0b3Ige1xuICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICBsZXQgb3V0cHV0SW5kZXggPSAwO1xuXG4gIC8vIFRleHQgcnVuIHN0YXRlOiB3aGV0aGVyIGEgbWVzc2FnZSBpdGVtIGlzIGN1cnJlbnRseSBvcGVuLCBhbmQgaXRzIGJ1ZmZlci5cbiAgbGV0IHRleHRPcGVuID0gZmFsc2U7XG4gIGxldCB0ZXh0QnVmZmVyID0gXCJcIjtcbiAgbGV0IHRleHRJdGVtSWQgPSBcIlwiO1xuXG4gIC8vIFRvb2wtY2FsbCBzdGF0ZSwga2V5ZWQgYnkgdGhlIHVwc3RyZWFtIGB0b29sX2NhbGxzW10uaW5kZXhgLlxuICBpbnRlcmZhY2UgVG9vbFN0YXRlIHtcbiAgICBvdXRwdXRJbmRleDogbnVtYmVyO1xuICAgIGNhbGxJZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhcmdzOiBzdHJpbmc7XG4gIH1cbiAgY29uc3QgdG9vbHMgPSBuZXcgTWFwPG51bWJlciwgVG9vbFN0YXRlPigpO1xuXG4gIGNvbnN0IGNyZWF0ZWQgPSAoKSA9PlxuICAgIHNzZShcInJlc3BvbnNlLmNyZWF0ZWRcIiwge1xuICAgICAgdHlwZTogXCJyZXNwb25zZS5jcmVhdGVkXCIsXG4gICAgICByZXNwb25zZTogeyBpZDogcmVzcG9uc2VJZCwgb2JqZWN0OiBcInJlc3BvbnNlXCIsIHN0YXR1czogXCJpbl9wcm9ncmVzc1wiLCBtb2RlbCwgb3V0cHV0OiBbXSB9LFxuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIG9wZW5UZXh0KCk6IHN0cmluZyB7XG4gICAgdGV4dE9wZW4gPSB0cnVlO1xuICAgIHRleHRJdGVtSWQgPSBgJHtyZXNwb25zZUlkfS1tc2ctJHtvdXRwdXRJbmRleH1gO1xuICAgIGNvbnN0IGV2ID0gc3NlKFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uYWRkZWRcIiwge1xuICAgICAgdHlwZTogXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5hZGRlZFwiLFxuICAgICAgb3V0cHV0X2luZGV4OiBvdXRwdXRJbmRleCxcbiAgICAgIGl0ZW06IHsgaWQ6IHRleHRJdGVtSWQsIHR5cGU6IFwibWVzc2FnZVwiLCByb2xlOiBcImFzc2lzdGFudFwiLCBjb250ZW50OiBbXSB9LFxuICAgIH0pO1xuICAgIHJldHVybiBldjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICghdGV4dE9wZW4pIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICBpZDogdGV4dEl0ZW1JZCxcbiAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6IFwib3V0cHV0X3RleHRcIiwgdGV4dDogdGV4dEJ1ZmZlciB9XSxcbiAgICB9O1xuICAgIGNvbnN0IGV2ID1cbiAgICAgIHNzZShcInJlc3BvbnNlLm91dHB1dF90ZXh0LmRvbmVcIiwge1xuICAgICAgICB0eXBlOiBcInJlc3BvbnNlLm91dHB1dF90ZXh0LmRvbmVcIixcbiAgICAgICAgaXRlbV9pZDogdGV4dEl0ZW1JZCxcbiAgICAgICAgb3V0cHV0X2luZGV4OiBvdXRwdXRJbmRleCxcbiAgICAgICAgY29udGVudF9pbmRleDogMCxcbiAgICAgICAgdGV4dDogdGV4dEJ1ZmZlcixcbiAgICAgIH0pICtcbiAgICAgIHNzZShcInJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVcIiwge1xuICAgICAgICB0eXBlOiBcInJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVcIixcbiAgICAgICAgb3V0cHV0X2luZGV4OiBvdXRwdXRJbmRleCxcbiAgICAgICAgaXRlbSxcbiAgICAgIH0pO1xuICAgIHRleHRPcGVuID0gZmFsc2U7XG4gICAgdGV4dEJ1ZmZlciA9IFwiXCI7XG4gICAgb3V0cHV0SW5kZXggKz0gMTtcbiAgICByZXR1cm4gZXY7XG4gIH1cblxuICBmdW5jdGlvbiBmZWVkKGNodW5rOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gICAgbGV0IG91dCA9IFwiXCI7XG4gICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICBzdGFydGVkID0gdHJ1ZTtcbiAgICAgIG91dCArPSBjcmVhdGVkKCk7XG4gICAgfVxuICAgIGNvbnN0IGNob2ljZXMgPSBBcnJheS5pc0FycmF5KGNodW5rLmNob2ljZXMpID8gY2h1bmsuY2hvaWNlcyA6IFtdO1xuICAgIGNvbnN0IGNob2ljZSA9IChjaG9pY2VzWzBdID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBkZWx0YSA9IChjaG9pY2UuZGVsdGEgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gQXNzaXN0YW50IHRleHQgZGVsdGFzLlxuICAgIGlmICh0eXBlb2YgZGVsdGEuY29udGVudCA9PT0gXCJzdHJpbmdcIiAmJiBkZWx0YS5jb250ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghdGV4dE9wZW4pIG91dCArPSBvcGVuVGV4dCgpO1xuICAgICAgdGV4dEJ1ZmZlciArPSBkZWx0YS5jb250ZW50O1xuICAgICAgb3V0ICs9IHNzZShcInJlc3BvbnNlLm91dHB1dF90ZXh0LmRlbHRhXCIsIHtcbiAgICAgICAgdHlwZTogXCJyZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YVwiLFxuICAgICAgICBpdGVtX2lkOiB0ZXh0SXRlbUlkLFxuICAgICAgICBvdXRwdXRfaW5kZXg6IG91dHB1dEluZGV4LFxuICAgICAgICBjb250ZW50X2luZGV4OiAwLFxuICAgICAgICBkZWx0YTogZGVsdGEuY29udGVudCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRvb2wtY2FsbCBkZWx0YXM6IGVhY2ggaXMga2V5ZWQgYnkgYGluZGV4YDsgYGFyZ3VtZW50c2AgYXJyaXZlcyBpbiBwaWVjZXMuXG4gICAgY29uc3QgdG9vbERlbHRhcyA9IEFycmF5LmlzQXJyYXkoZGVsdGEudG9vbF9jYWxscykgPyBkZWx0YS50b29sX2NhbGxzIDogW107XG4gICAgZm9yIChjb25zdCByYXdUYyBvZiB0b29sRGVsdGFzKSB7XG4gICAgICBjb25zdCB0YyA9IHJhd1RjIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3QgaWR4ID0gTnVtYmVyKHRjLmluZGV4ID8/IDApO1xuICAgICAgY29uc3QgZm4gPSAodGMuZnVuY3Rpb24gPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgbGV0IHN0YXRlID0gdG9vbHMuZ2V0KGlkeCk7XG4gICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgIC8vIEZpcnN0IGZyYWdtZW50IGZvciB0aGlzIGNhbGw6IGEgdGV4dCBydW4gKGlmIG9wZW4pIG11c3QgY2xvc2UgZmlyc3Qgc29cbiAgICAgICAgLy8gb3V0cHV0IG9yZGVyaW5nIHN0YXlzIG1vbm90b25pYywgdGhlbiB3ZSBvcGVuIGEgZnVuY3Rpb25fY2FsbCBpdGVtLlxuICAgICAgICBvdXQgKz0gY2xvc2VUZXh0KCk7XG4gICAgICAgIHN0YXRlID0ge1xuICAgICAgICAgIG91dHB1dEluZGV4LFxuICAgICAgICAgIGNhbGxJZDogU3RyaW5nKHRjLmlkID8/IGAke3Jlc3BvbnNlSWR9LWNhbGwtJHtpZHh9YCksXG4gICAgICAgICAgbmFtZTogU3RyaW5nKGZuLm5hbWUgPz8gXCJcIiksXG4gICAgICAgICAgYXJnczogXCJcIixcbiAgICAgICAgfTtcbiAgICAgICAgdG9vbHMuc2V0KGlkeCwgc3RhdGUpO1xuICAgICAgICBvdXQgKz0gc3NlKFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uYWRkZWRcIiwge1xuICAgICAgICAgIHR5cGU6IFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uYWRkZWRcIixcbiAgICAgICAgICBvdXRwdXRfaW5kZXg6IHN0YXRlLm91dHB1dEluZGV4LFxuICAgICAgICAgIGl0ZW06IHtcbiAgICAgICAgICAgIGlkOiBzdGF0ZS5jYWxsSWQsXG4gICAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uX2NhbGxcIixcbiAgICAgICAgICAgIGNhbGxfaWQ6IHN0YXRlLmNhbGxJZCxcbiAgICAgICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICAgICAgICBhcmd1bWVudHM6IFwiXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIG91dHB1dEluZGV4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGZuLm5hbWUgPT09IFwic3RyaW5nXCIgJiYgZm4ubmFtZSAmJiAhc3RhdGUubmFtZSkgc3RhdGUubmFtZSA9IGZuLm5hbWU7XG4gICAgICBpZiAodHlwZW9mIGZuLmFyZ3VtZW50cyA9PT0gXCJzdHJpbmdcIiAmJiBmbi5hcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGF0ZS5hcmdzICs9IGZuLmFyZ3VtZW50cztcbiAgICAgICAgb3V0ICs9IHNzZShcInJlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRlbHRhXCIsIHtcbiAgICAgICAgICB0eXBlOiBcInJlc3BvbnNlLmZ1bmN0aW9uX2NhbGxfYXJndW1lbnRzLmRlbHRhXCIsXG4gICAgICAgICAgaXRlbV9pZDogc3RhdGUuY2FsbElkLFxuICAgICAgICAgIG91dHB1dF9pbmRleDogc3RhdGUub3V0cHV0SW5kZXgsXG4gICAgICAgICAgZGVsdGE6IGZuLmFyZ3VtZW50cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2goKTogc3RyaW5nIHtcbiAgICBsZXQgb3V0ID0gY2xvc2VUZXh0KCk7XG4gICAgLy8gQ2xvc2UgYW55IG9wZW4gdG9vbCBjYWxscywgZW1pdHRpbmcgdGhlaXIgYXNzZW1ibGVkIGFyZ3VtZW50cy5cbiAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIHRvb2xzLnZhbHVlcygpKSB7XG4gICAgICBvdXQgKz0gc3NlKFwicmVzcG9uc2UuZnVuY3Rpb25fY2FsbF9hcmd1bWVudHMuZG9uZVwiLCB7XG4gICAgICAgIHR5cGU6IFwicmVzcG9uc2UuZnVuY3Rpb25fY2FsbF9hcmd1bWVudHMuZG9uZVwiLFxuICAgICAgICBpdGVtX2lkOiBzdGF0ZS5jYWxsSWQsXG4gICAgICAgIG91dHB1dF9pbmRleDogc3RhdGUub3V0cHV0SW5kZXgsXG4gICAgICAgIGFyZ3VtZW50czogc3RhdGUuYXJncyxcbiAgICAgIH0pO1xuICAgICAgb3V0ICs9IHNzZShcInJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVcIiwge1xuICAgICAgICB0eXBlOiBcInJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVcIixcbiAgICAgICAgb3V0cHV0X2luZGV4OiBzdGF0ZS5vdXRwdXRJbmRleCxcbiAgICAgICAgaXRlbToge1xuICAgICAgICAgIGlkOiBzdGF0ZS5jYWxsSWQsXG4gICAgICAgICAgdHlwZTogXCJmdW5jdGlvbl9jYWxsXCIsXG4gICAgICAgICAgY2FsbF9pZDogc3RhdGUuY2FsbElkLFxuICAgICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICAgICAgYXJndW1lbnRzOiBzdGF0ZS5hcmdzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIG91dCArPSBzc2UoXCJyZXNwb25zZS5jb21wbGV0ZWRcIiwge1xuICAgICAgdHlwZTogXCJyZXNwb25zZS5jb21wbGV0ZWRcIixcbiAgICAgIHJlc3BvbnNlOiB7IGlkOiByZXNwb25zZUlkLCBvYmplY3Q6IFwicmVzcG9uc2VcIiwgc3RhdHVzOiBcImNvbXBsZXRlZFwiLCBtb2RlbCB9LFxuICAgIH0pO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICByZXR1cm4geyBmZWVkLCBmaW5pc2ggfTtcbn1cblxuLyoqIEEgc291cmNlIHRoZSBtb2RlbCBjaXRlZCwgYXMgY2FycmllZCBieSBhIFJlc3BvbnNlcyBjb250ZW50LXBhcnQgYW5ub3RhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VzQ2l0YXRpb24ge1xuICB1cmw6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKiBXaGF0IHtAbGluayByZWFkUmVzcG9uc2VzT3V0cHV0fSBwdWxscyBvdXQgb2YgYSBgcmVzcG9uc2VgIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VzT3V0cHV0IHtcbiAgLyoqIFRoZSBhc3Npc3RhbnQncyBhbnN3ZXIsIHdpdGggdGhlIG91dHB1dCBpdGVtcyBjb25jYXRlbmF0ZWQuICovXG4gIHRleHQ6IHN0cmluZztcbiAgLyoqIENpdGVkIHNvdXJjZXMgaW4gZmlyc3Qtc2VlbiBvcmRlciwgZGVkdXBsaWNhdGVkIGJ5IFVSTC4gKi9cbiAgY2l0YXRpb25zOiBSZXNwb25zZXNDaXRhdGlvbltdO1xufVxuXG4vKipcbiAqIFJlYWQgdGhlIGFuc3dlciB0ZXh0IGFuZCBjaXRlZCBzb3VyY2VzIG91dCBvZiBhIFJlc3BvbnNlcyBgcmVzcG9uc2VgIHBheWxvYWQuXG4gKlxuICogVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiB7QGxpbmsgY2hhdFRvUmVzcG9uc2V9OiBpdCBjb25zdW1lcyB3aGF0IGFuIGVuZHBvaW50XG4gKiBzcGVha2luZyBSZXNwb25zZXMgbmF0aXZlbHkgcmV0dXJucywgcmF0aGVyIHRoYW4gcHJvZHVjaW5nIGl0LiBUaGUgRGF0YWJyaWNrc1xuICogbmF0aXZlIHdlYi1zZWFyY2ggdG9vbCBhbnN3ZXJzIHRoaXMgd2F5LCB3aXRoIGVhY2ggc291cmNlIGF0dGFjaGVkIGFzIGFcbiAqIGB1cmxfY2l0YXRpb25gIGFubm90YXRpb24gb24gdGhlIGNvbnRlbnQgcGFydCB0aGF0IHVzZWQgaXQuXG4gKlxuICogUHJlZmVycyB0aGUgZmxhdHRlbmVkIGBvdXRwdXRfdGV4dGAgd2hlbiB0aGUgcGF5bG9hZCBjYXJyaWVzIGl0LCBhbmQgZmFsbHNcbiAqIGJhY2sgdG8gd2Fsa2luZyBgb3V0cHV0W10uY29udGVudFtdLnRleHRgLiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbCB1cHN0cmVhbSxcbiAqIHNvIGEgcGF5bG9hZCBtaXNzaW5nIGFueSBvZiBpdCB5aWVsZHMgZW1wdHkgcmVzdWx0cyByYXRoZXIgdGhhbiB0aHJvd2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNwb25zZXNPdXRwdXQocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZXNwb25zZXNPdXRwdXQge1xuICBjb25zdCBvdXRwdXQgPSBBcnJheS5pc0FycmF5KHBheWxvYWQub3V0cHV0KSA/IChwYXlsb2FkLm91dHB1dCBhcyB1bmtub3duW10pIDogW107XG4gIGNvbnN0IHRleHRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBjaXRhdGlvbnM6IFJlc3BvbnNlc0NpdGF0aW9uW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgcmF3SXRlbSBvZiBvdXRwdXQpIHtcbiAgICBpZiAoIXJhd0l0ZW0gfHwgdHlwZW9mIHJhd0l0ZW0gIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNvbnRlbnQgPSAocmF3SXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuY29udGVudDtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIGNvbnRpbnVlO1xuICAgIGZvciAoY29uc3QgcmF3UGFydCBvZiBjb250ZW50KSB7XG4gICAgICBpZiAoIXJhd1BhcnQgfHwgdHlwZW9mIHJhd1BhcnQgIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgcGFydCA9IHJhd1BhcnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCB0ZXh0ID0gc3RyaW5nLnRyaW1Ub0VtcHR5KHBhcnQudGV4dCk7XG4gICAgICBpZiAodGV4dCkgdGV4dHMucHVzaCh0ZXh0KTtcbiAgICAgIGNvbnN0IGFubm90YXRpb25zID0gQXJyYXkuaXNBcnJheShwYXJ0LmFubm90YXRpb25zKSA/IHBhcnQuYW5ub3RhdGlvbnMgOiBbXTtcbiAgICAgIGZvciAoY29uc3QgcmF3QW5uIG9mIGFubm90YXRpb25zKSB7XG4gICAgICAgIGlmICghcmF3QW5uIHx8IHR5cGVvZiByYXdBbm4gIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBhbm4gPSByYXdBbm4gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IHVybCA9IHN0cmluZy50cmltVG9FbXB0eShhbm4udXJsKTtcbiAgICAgICAgaWYgKCF1cmwgfHwgc2Vlbi5oYXModXJsKSkgY29udGludWU7XG4gICAgICAgIHNlZW4uYWRkKHVybCk7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gc3RyaW5nLnRyaW1Ub0VtcHR5KGFubi50aXRsZSk7XG4gICAgICAgIGNpdGF0aW9ucy5wdXNoKHsgdXJsLCAuLi4odGl0bGUgPyB7IHRpdGxlIH0gOiB7fSkgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgdGV4dDogc3RyaW5nLnRyaW1Ub0VtcHR5KHBheWxvYWQub3V0cHV0X3RleHQpIHx8IHRleHRzLmpvaW4oXCJcXG5cIikudHJpbSgpLCBjaXRhdGlvbnMgfTtcbn1cblxuLyoqXG4gKiBTdHJpcCB0b29sIHR5cGVzIHRoZSB1cHN0cmVhbSBtb2RlbCBkb2Vzbid0IHN1cHBvcnQgZnJvbSBhIFJlc3BvbnNlcyByZXF1ZXN0XG4gKiBib2R5LCByZXR1cm5pbmcgYSBzaGFsbG93IGNvcHkgc2FmZSB0byBmb3J3YXJkICh0aGUgaW5wdXQgaXMgbm90IG11dGF0ZWQpLlxuICpcbiAqIENsaWVudHMgbGlrZSB0aGUgQ29kZXggQ0xJIGluY2x1ZGUgYnVpbHQtaW4gUmVzcG9uc2VzIHRvb2xzIChgd2ViX3NlYXJjaGAsXG4gKiBgbG9jYWxfc2hlbGxgLCBgY3VzdG9tYCwgLi4uKSBhbG9uZ3NpZGUgdGhlaXIgYGZ1bmN0aW9uYCB0b29scy4gRGF0YWJyaWNrcydcbiAqIE9wZW4gUmVzcG9uc2VzIHN1cmZhY2UgZm9yIEFudGhyb3BpYy9DbGF1ZGUgKGFuZCBvdGhlciBub24tT3BlbkFJIHByb3ZpZGVycylcbiAqIG9ubHkgYWNjZXB0cyBgZnVuY3Rpb25gIHRvb2xzIGFuZCBoYXJkLWVycm9ycyBvdGhlcndpc2U6XG4gKiAgIFwiQW50aHJvcGljIGRvZXMgbm90IHN1cHBvcnQgdG9vbCB0eXBlICd3ZWJfc2VhcmNoJy4gT25seSAnZnVuY3Rpb24nIGlzIHN1cHBvcnRlZC5cIlxuICogQ2FsbCB0aGlzIGJlZm9yZSBmb3J3YXJkaW5nIHRvIGAvc2VydmluZy1lbmRwb2ludHMvb3Blbi1yZXNwb25zZXNgLiBUaGUgT3BlbkFJXG4gKiBgL3NlcnZpbmctZW5kcG9pbnRzL3Jlc3BvbnNlc2AgcGF0aCBzaG91bGQga2VlcCBidWlsdC1pbnMgKEdQVCBzdXBwb3J0cyB0aGVtKS5cbiAqIElmIGZpbHRlcmluZyBlbXB0aWVzIHRoZSBsaXN0LCBgdG9vbHNgIC8gYHRvb2xfY2hvaWNlYCAvIGBwYXJhbGxlbF90b29sX2NhbGxzYFxuICogYXJlIGRyb3BwZWQgc28gd2UgbmV2ZXIgc2VuZCBhbiBlbXB0eSBgdG9vbHM6IFtdYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplUmVzcG9uc2VzVG9vbHMoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShib2R5LnRvb2xzKSB8fCBib2R5LnRvb2xzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGJvZHk7XG4gIGNvbnN0IGZuVG9vbHMgPSBib2R5LnRvb2xzLmZpbHRlcihcbiAgICAodCkgPT4gdCAmJiB0eXBlb2YgdCA9PT0gXCJvYmplY3RcIiAmJiAodCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikudHlwZSA9PT0gXCJmdW5jdGlvblwiLFxuICApO1xuICBpZiAoZm5Ub29scy5sZW5ndGggPT09IGJvZHkudG9vbHMubGVuZ3RoKSByZXR1cm4gYm9keTsgLy8gbm90aGluZyB0byBzdHJpcFxuICBjb25zdCBuZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uYm9keSB9O1xuICBpZiAoZm5Ub29scy5sZW5ndGggPiAwKSB7XG4gICAgbmV4dC50b29scyA9IGZuVG9vbHM7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIG5leHQudG9vbHM7XG4gICAgZGVsZXRlIG5leHQudG9vbF9jaG9pY2U7XG4gICAgZGVsZXRlIG5leHQucGFyYWxsZWxfdG9vbF9jYWxscztcbiAgfVxuICByZXR1cm4gbmV4dDtcbn1cblxuLyoqXG4gKiBDb250ZW50LXBhcnQgLyBpbnB1dC1pdGVtIHR5cGVzIENsYXVkZSBleHRlbmRlZCB0aGlua2luZyB1c2VzIG9uIHRoZSB3aXJlLlxuICpcbiAqIFNoYXJlZCBzbyBib3RoIHdpcmUgc3VyZmFjZXMgc3RyaXAgdGhlIHNhbWUgc2V0OiB0aGUgUmVzcG9uc2VzIHBhdGggaGVyZVxuICogKHtAbGluayBzYW5pdGl6ZU9wZW5SZXNwb25zZXNJbnB1dH0pIGFuZCB0aGUgQ2hhdCBDb21wbGV0aW9ucyBwYXRoIGluXG4gKiBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYCdzIHNlcnZpbmcgc2FuaXRpemUuIEFudGhyb3BpYyBzaWducyB0aGVzZSBibG9ja3MsXG4gKiBzbyBhIHJlcGxheSB0aGF0IG11dGF0ZXMgb25lIGlzIHJlamVjdGVkIG91dHJpZ2h0IC0gYm90aCBwYXRocyBtdXN0IGFncmVlIG9uXG4gKiB3aGF0IGNvdW50cyBhcyBhIHJlYXNvbmluZyBibG9jay5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFQVNPTklOR19UWVBFUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICBcInJlYXNvbmluZ1wiLFxuICBcInRoaW5raW5nXCIsXG4gIFwicmVkYWN0ZWRfdGhpbmtpbmdcIixcbl0pO1xuXG4vKipcbiAqIFJld3JpdGUgUmVzcG9uc2VzIGBpbnB1dGAgc28gT3BlbiBSZXNwb25zZXMgd2lsbCBhY2NlcHQgaXQuXG4gKlxuICogVHdvIE9wZW5BSSAvIENvZGV4IHNoYXBlcyB0aGF0IERhdGFicmlja3MgT3BlbiBSZXNwb25zZXMgKENsYXVkZSwgR2VtaW5pLCDigKYpXG4gKiByZWplY3Q6XG4gKlxuICogMS4gUHJpb3IgYXNzaXN0YW50IHR1cm5zIHdpdGggYG91dHB1dF90ZXh0YCAvIGBvdXRwdXRfKmAgY29udGVudCBwYXJ0cyDigJRcbiAqICAgIE9wZW4gUmVzcG9uc2VzIG9ubHkgYWxsb3dzIGBpbnB1dF90ZXh0YCwgYGlucHV0X2ltYWdlYCwgYGlucHV0X2ZpbGVgLFxuICogICAgYGlucHV0X2F1ZGlvYC4gTWFwIGV2ZXJ5IGBvdXRwdXRfPGtpbmQ+YCBwYXJ0IHRvIGBpbnB1dF88a2luZD5gLlxuICogMi4gUmVwbGF5ZWQgZXh0ZW5kZWQtdGhpbmtpbmcgYmxvY2tzIChgdGhpbmtpbmdgLCBgcmVkYWN0ZWRfdGhpbmtpbmdgLFxuICogICAgYHJlYXNvbmluZ2AgY29udGVudCBwYXJ0cywgYW5kIHRvcC1sZXZlbCBgcmVhc29uaW5nYCBpbnB1dCBpdGVtcykuIENsYXVkZVxuICogICAgc2lnbnMgdGhvc2U7IGFueSBjbGllbnQgcm91bmQtdHJpcCB0aGF0IG11dGF0ZXMgdGhlbSAob3IgYSBjcm9zcy1wcm92aWRlclxuICogICAgcmVwbGF5KSBmYWlscyB3aXRoIGUuZy5cbiAqICAgICAgXCJtZXNzYWdlcy5OLmNvbnRlbnQuTTogSW52YWxpZCBgZGF0YWAgaW4gYHJlZGFjdGVkX3RoaW5raW5nYCBibG9ja1wiXG4gKiAgICBTdHJpcCB0aGVtIOKAlCB0aGUgVUkvY2xpZW50IGFscmVhZHkgc2hvd2VkIHRoZSB0aGlua2luZzsgcmVwbGF5IGRvZXMgbm90XG4gKiAgICBuZWVkIHRoZSBzaWduZWQgYmxvYi4gU2FtZSBwb2xpY3kgYXMgYXBwa2l0LW1hc3RyYSdzIHNlcnZpbmcgc2FuaXRpemUuXG4gKlxuICogUmV0dXJucyBhIHNoYWxsb3cgY29weSB3aGVuIGFueXRoaW5nIGNoYW5nZXM7IG90aGVyd2lzZSB0aGUgaW5wdXQgYm9keS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplT3BlblJlc3BvbnNlc0lucHV0KGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYm9keS5pbnB1dCkgfHwgYm9keS5pbnB1dC5sZW5ndGggPT09IDApIHJldHVybiBib2R5O1xuXG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGNvbnN0IGlucHV0OiB1bmtub3duW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJhdyBvZiBib2R5LmlucHV0KSB7XG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgaW5wdXQucHVzaChyYXcpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBUb3AtbGV2ZWwgUmVzcG9uc2VzIHJlYXNvbmluZyBpdGVtcyAobm90IG1lc3NhZ2UgY29udGVudCBwYXJ0cykuXG4gICAgaWYgKHR5cGVvZiBpdGVtLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgUkVBU09OSU5HX1RZUEVTLmhhcyhpdGVtLnR5cGUpKSB7XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtLmNvbnRlbnQpKSB7XG4gICAgICBpbnB1dC5wdXNoKHJhdyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgcGFydENoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjb250ZW50OiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgaXRlbS5jb250ZW50KSB7XG4gICAgICBpZiAoIXBhcnQgfHwgdHlwZW9mIHBhcnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY29udGVudC5wdXNoKHBhcnQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHAgPSBwYXJ0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgaWYgKHR5cGVvZiBwLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgUkVBU09OSU5HX1RZUEVTLmhhcyhwLnR5cGUpKSB7XG4gICAgICAgIHBhcnRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHAudHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBwLnR5cGUuc3RhcnRzV2l0aChcIm91dHB1dF9cIikpIHtcbiAgICAgICAgcGFydENoYW5nZWQgPSB0cnVlO1xuICAgICAgICBjb250ZW50LnB1c2goeyAuLi5wLCB0eXBlOiBgaW5wdXRfJHtwLnR5cGUuc2xpY2UoXCJvdXRwdXRfXCIubGVuZ3RoKX1gIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQucHVzaChwYXJ0KTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnRDaGFuZ2VkKSB7XG4gICAgICBpbnB1dC5wdXNoKHJhdyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gICAgLy8gRHJvcCBhc3Npc3RhbnQgdHVybnMgdGhhdCBvbmx5IGNhcnJpZWQgdGhpbmtpbmcgKG5vdGhpbmcgbGVmdCB0byByZXBsYXkpLlxuICAgIGlmIChjb250ZW50Lmxlbmd0aCA9PT0gMCAmJiBpdGVtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpIGNvbnRpbnVlO1xuICAgIGlucHV0LnB1c2goeyAuLi5pdGVtLCBjb250ZW50IH0pO1xuICB9XG5cbiAgcmV0dXJuIGNoYW5nZWQgPyB7IC4uLmJvZHksIGlucHV0IH0gOiBib2R5O1xufVxuXG4vKipcbiAqIEZ1bGwgT3BlbiBSZXNwb25zZXMgcmVxdWVzdCBzYW5pdGl6ZXI6IHN0cmlwIG5vbi1gZnVuY3Rpb25gIHRvb2xzLCByZXdyaXRlXG4gKiBgb3V0cHV0XypgIGNvbnRlbnQgcGFydHMsIGFuZCBkcm9wIHRoaW5raW5nIC8gcmVhc29uaW5nIGJsb2Nrcy4gU2FmZSBuby1vcFxuICogd2hlbiBub3RoaW5nIG5lZWRzIGNoYW5naW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVPcGVuUmVzcG9uc2VzUmVxdWVzdChcbiAgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiBzYW5pdGl6ZU9wZW5SZXNwb25zZXNJbnB1dChzYW5pdGl6ZVJlc3BvbnNlc1Rvb2xzKGJvZHkpKTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -12,14 +12,14 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "zod": "4.3.6",
15
- "@dbx-tools/shared-core": "0.4.1"
15
+ "@dbx-tools/shared-core": "0.5.0"
16
16
  },
17
17
  "main": "./lib/index.js",
18
18
  "license": "UNLICENSED",
19
19
  "publishConfig": {
20
20
  "access": "public"
21
21
  },
22
- "version": "0.4.1",
22
+ "version": "0.5.0",
23
23
  "types": "./lib/index.d.ts",
24
24
  "type": "module",
25
25
  "exports": {
package/src/classify.ts CHANGED
@@ -26,7 +26,7 @@
26
26
  * @module
27
27
  */
28
28
 
29
- import { ModelClass, type ServingEndpointSummary } from "./model";
29
+ import { ModelClass, type ServingEndpointSummary } from "./model.ts";
30
30
 
31
31
  /** Task hint Databricks stamps on chat completion endpoints. */
32
32
  const CHAT_TASK = "llm/v1/chat";
@@ -44,7 +44,7 @@
44
44
 
45
45
  import { string } from "@dbx-tools/shared-core";
46
46
 
47
- import { type ChatMessage, type ChatToolCall, chatContentToText } from "./openai-chat";
47
+ import { type ChatMessage, type ChatToolCall, chatContentToText } from "./openai-chat.ts";
48
48
 
49
49
  /**
50
50
  * Lower a Responses request body to a chat-completions body. Returns the chat