@cartanova/qgrid-cli 2.1.1 → 2.2.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/bundle/dist/application/qgrid/conv-routing.js +68 -0
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +2 -2
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +16 -15
- package/bundle/dist/application/qgrid/qgrid.frame.js +11 -4
- package/bundle/dist/application/qgrid/qgrid.types.js +12 -3
- package/bundle/dist/application/qgrid/tool-emulation.js +11 -6
- package/bundle/dist/utils/providers/openai/codex-worker.js +65 -21
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +65 -21
- package/bundle/src/application/qgrid/conv-routing.ts +97 -0
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +2 -1
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +16 -5
- package/bundle/src/application/qgrid/qgrid.frame.ts +11 -3
- package/bundle/src/application/qgrid/qgrid.types.ts +14 -1
- package/bundle/src/application/qgrid/tool-emulation.ts +20 -5
- package/bundle/src/application/sonamu.generated.http +14 -2
- package/bundle/src/utils/providers/common/provider-dispatcher.ts +29 -2
- package/bundle/src/utils/providers/openai/codex-worker.test.ts +91 -0
- package/bundle/src/utils/providers/openai/codex-worker.ts +105 -19
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +104 -27
- package/bundle/web-dist/client/assets/cost-CpjVoAqp.js +1 -0
- package/bundle/web-dist/client/assets/{index-ZV-tHpAg.js → index-DeThumA3.js} +2 -2
- package/bundle/web-dist/client/assets/logs-CtmOVH58.js +1 -0
- package/bundle/web-dist/client/assets/{routes-BMRwPj6F.js → routes-Cfoe9J0I.js} +1 -1
- package/bundle/web-dist/client/assets/show-C6OofoAL.js +30 -0
- package/bundle/web-dist/client/assets/{tokens-Cg1f0Ga2.js → tokens-BAZq8sTo.js} +1 -1
- package/bundle/web-dist/client/index.html +1 -1
- package/bundle/web-dist/server/assets/cost-DzjfVtUr.js +24 -0
- package/bundle/web-dist/server/assets/{logs-Xt934T5f.js → logs-CHM0fhfO.js} +2 -7
- package/bundle/web-dist/server/assets/{routes-B7QYbNIv.js → routes-C9xFMJ_r.js} +1 -1
- package/bundle/web-dist/server/assets/{show-Dxz6UJnD.js → show-BZWqH09U.js} +2 -4
- package/bundle/web-dist/server/entry-server.generated.js +3 -3
- package/package.json +1 -1
- package/bundle/web-dist/client/assets/cost-DE_8cLD-.js +0 -1
- package/bundle/web-dist/client/assets/logs-HJYkbqom.js +0 -1
- package/bundle/web-dist/client/assets/show-DI6iWDzV.js +0 -30
- package/bundle/web-dist/server/assets/cost-DdHTzQDR.js +0 -14
|
@@ -38,7 +38,16 @@ const QgridLogMode = z.enum([
|
|
|
38
38
|
"run",
|
|
39
39
|
"none"
|
|
40
40
|
]);
|
|
41
|
-
const
|
|
41
|
+
const QgridThreadCoord = z.object({
|
|
42
|
+
workerId: z.number(),
|
|
43
|
+
threadId: z.string(),
|
|
44
|
+
epoch: z.number(),
|
|
45
|
+
systemHash: z.string()
|
|
46
|
+
});
|
|
47
|
+
const QgridRunContext = z.object({
|
|
48
|
+
requestLogId: z.number().optional(),
|
|
49
|
+
threadCoord: QgridThreadCoord.optional()
|
|
50
|
+
});
|
|
42
51
|
const QgridToolResultInput = z.object({
|
|
43
52
|
toolCallId: z.string(),
|
|
44
53
|
toolName: z.string().optional(),
|
|
@@ -195,6 +204,6 @@ function maskToken(token) {
|
|
|
195
204
|
return token.length > 4 ? `...${token.slice(-4)}` : token;
|
|
196
205
|
}
|
|
197
206
|
//#endregion
|
|
198
|
-
export { AddTokenInput, AppendStepInput, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, OAuthStartResult, ProcessError, QgridContent, QgridLogMode, QgridRunContext, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QuotaError, ReasoningSummary, RemoveTokenInput, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
|
|
207
|
+
export { AddTokenInput, AppendStepInput, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, OAuthStartResult, ProcessError, QgridContent, QgridLogMode, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QuotaError, ReasoningSummary, RemoveTokenInput, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
|
|
199
208
|
|
|
200
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkQ29udGVudCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidG9vbC1jYWxsXCIpLFxuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuXSk7XG5leHBvcnQgdHlwZSBRZ3JpZENvbnRlbnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZENvbnRlbnQ+O1xuXG5leHBvcnQgY29uc3QgRmluaXNoUmVhc29uID0gei5lbnVtKFtcInN0b3BcIiwgXCJ0b29sLWNhbGxzXCJdKTtcbmV4cG9ydCB0eXBlIEZpbmlzaFJlYXNvbiA9IHouaW5mZXI8dHlwZW9mIEZpbmlzaFJlYXNvbj47XG5cbmV4cG9ydCBjb25zdCBWZXJib3NpdHkgPSB6LmVudW0oW1wibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiXSk7XG5leHBvcnQgdHlwZSBWZXJib3NpdHkgPSB6LmluZmVyPHR5cGVvZiBWZXJib3NpdHk+O1xuXG5leHBvcnQgY29uc3QgUmVhc29uaW5nU3VtbWFyeSA9IHouZW51bShbXCJhdXRvXCIsIFwiY29uY2lzZVwiLCBcImRldGFpbGVkXCIsIFwibm9uZVwiXSk7XG5leHBvcnQgdHlwZSBSZWFzb25pbmdTdW1tYXJ5ID0gei5pbmZlcjx0eXBlb2YgUmVhc29uaW5nU3VtbWFyeT47XG5cbmV4cG9ydCBjb25zdCBTZXJ2aWNlVGllciA9IHouZW51bShbXCJmYXN0XCIsIFwiZmxleFwiXSk7XG5leHBvcnQgdHlwZSBTZXJ2aWNlVGllciA9IHouaW5mZXI8dHlwZW9mIFNlcnZpY2VUaWVyPjtcblxuLy8g4pSA4pSA4pSAIFJ1biBMaWZlY3ljbGUgQ29udGV4dCAoU0RLIOKGlCBTZXJ2ZXIgY29udHJhY3QpIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgUWdyaWRMb2dNb2RlID0gei5lbnVtKFtcImF1dG9cIiwgXCJydW5cIiwgXCJub25lXCJdKTtcbmV4cG9ydCB0eXBlIFFncmlkTG9nTW9kZSA9IHouaW5mZXI8dHlwZW9mIFFncmlkTG9nTW9kZT47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFJ1bkNvbnRleHQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRSdW5Db250ZXh0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRSdW5Db250ZXh0PjtcblxuZXhwb3J0IGNvbnN0IFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5vYmplY3Qoe1xuICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBvdXRwdXQ6IHouc3RyaW5nKCksXG4gIGlzRXJyb3I6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sUmVzdWx0SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlJbnB1dCA9IHoub2JqZWN0KHtcbiAgc3lzdGVtOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb21wdDogei5zdHJpbmcoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGltZW91dDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBqc29uU2NoZW1hOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xzOiB6LmFycmF5KFFncmlkVG9vbCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZlcmJvc2l0eTogVmVyYm9zaXR5Lm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1N1bW1hcnk6IFJlYXNvbmluZ1N1bW1hcnkub3B0aW9uYWwoKSxcbiAgc2VydmljZVRpZXI6IFNlcnZpY2VUaWVyLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvamVjdE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaXNTdGVwOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBsb2dNb2RlOiBRZ3JpZExvZ01vZGUub3B0aW9uYWwoKSxcbiAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG4gIHRvb2xSZXN1bHRzOiB6LmFycmF5KFFncmlkVG9vbFJlc3VsdElucHV0KS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRdWVyeUlucHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBRdWVyeU91dHB1dCA9IHoub2JqZWN0KHtcbiAgdGV4dDogei5zdHJpbmcoKSxcbiAgY29udGVudDogei5hcnJheShRZ3JpZENvbnRlbnQpLFxuICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzYWdlOiB6Lm9iamVjdCh7XG4gICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICB9KSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFF1ZXJ5T3V0cHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlPdXRwdXQ+O1xuXG4vLyDilIDilIDilIAgU3RyZWFtIEV2ZW50cyDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN0cmVhbUV2ZW50cyA9IHoub2JqZWN0KHtcbiAgZGVsdGE6IHoub2JqZWN0KHsgdGV4dDogei5zdHJpbmcoKSB9KSxcbiAgdG9vbENhbGw6IHoub2JqZWN0KHtcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgZG9uZTogei5vYmplY3Qoe1xuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gICAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgICB1c2FnZTogei5vYmplY3Qoe1xuICAgICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIH0pLFxuICAgIGR1cmF0aW9uTXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb250ZW50OiB6LmFycmF5KFFncmlkQ29udGVudCksXG4gICAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG4gIH0pLFxuICBlcnJvcjogei5vYmplY3QoeyBtZXNzYWdlOiB6LnN0cmluZygpIH0pLFxufSk7XG5leHBvcnQgdHlwZSBTdHJlYW1FdmVudHMgPSB6LmluZmVyPHR5cGVvZiBTdHJlYW1FdmVudHM+O1xuXG4vLyDilIDilIDilIAgUnVuIExpZmVjeWNsZSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IENyZWF0ZVJ1bklucHV0ID0gei5vYmplY3Qoe1xuICB1c2VyUHJvbXB0OiB6LnN0cmluZygpLFxuICBzeXN0ZW1Qcm9tcHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIENyZWF0ZVJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgQ3JlYXRlUnVuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgQXBwZW5kU3RlcElucHV0ID0gei5vYmplY3Qoe1xuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCksXG4gIHN0ZXBJbmRleDogei5udW1iZXIoKSxcbiAgdHlwZTogei5lbnVtKFtcImdlbmVyYXRlXCIsIFwidG9vbF9jYWxsXCJdKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG90YWxJbnB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbE91dHB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlQ3JlYXRpb25Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXJyb3JNZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEZpbmlzaFJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgRmluaXNoUnVuSW5wdXQ+O1xuXG4vLyDilIDilIDilIAgVG9rZW4gTWFuYWdlbWVudCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEFkZFRva2VuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBBZGRUb2tlbklucHV0ID0gei5pbmZlcjx0eXBlb2YgQWRkVG9rZW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBSZW1vdmVUb2tlbklucHV0ID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVG9rZW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIFJlbW92ZVRva2VuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgVG9rZW5TdGF0cyA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICByZXF1ZXN0czogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVG9rZW5TdGF0cyA9IHouaW5mZXI8dHlwZW9mIFRva2VuU3RhdHM+O1xuXG4vLyDilIDilIDilIAgT0F1dGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBPQXV0aFN0YXJ0UmVzdWx0ID0gei5vYmplY3Qoe1xuICBhdXRoVXJsOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBPQXV0aFN0YXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgT0F1dGhTdGFydFJlc3VsdD47XG5cbmNvbnN0IFJhdGVXaW5kb3cgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHV0aWxpemF0aW9uOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgcmVzZXRzQXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgfSlcbiAgLm51bGxhYmxlKCk7XG5cbmV4cG9ydCBjb25zdCBVc2FnZVJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmaXZlSG91cjogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxuICBzZXZlbkRheTogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBVc2FnZVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgVXNhZ2VSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBIZWFsdGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBTdWJzY3JpYmVyU3RhdHVzID0gei5vYmplY3Qoe1xuICBjb25uZWN0ZWQ6IHouYm9vbGVhbigpLFxuICBjb25uZWN0ZWRBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgbGFzdFJlY29uY2lsZUF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBhdHRlbXB0OiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBTdWJzY3JpYmVyU3RhdHVzID0gei5pbmZlcjx0eXBlb2YgU3Vic2NyaWJlclN0YXR1cz47XG5cbmV4cG9ydCBjb25zdCBIZWFsdGhSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBhY3RpdmVUb2tlbnM6IHoubnVtYmVyKCksXG4gIHN1YnNjcmliZXI6IFN1YnNjcmliZXJTdGF0dXMubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgSGVhbHRoUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBIZWFsdGhSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBFcnJvcnMg4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBRdW90YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9FWEhBVVNURURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlRJTUVPVVRcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBQcm9jZXNzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlBST0NFU1NfRVJST1JcIiBhcyBjb25zdDtcbn1cblxuLy8g4pSA4pSA4pSAIFV0aWxzIOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gbWFza1Rva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9rZW4ubGVuZ3RoID4gNCA/IGAuLi4ke3Rva2VuLnNsaWNlKC00KX1gIDogdG9rZW47XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUlBLE1BQWEsU0FBUyxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7Q0FBTyxDQUFDO0FBR3ZELE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLFFBQVE7Q0FDaEIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2xDLGFBQWEsRUFBRSxTQUFTO0NBQ3pCLENBQUM7QUFHRixNQUFhLGVBQWUsRUFBRSxtQkFBbUIsUUFBUSxDQUN2RCxFQUFFLE9BQU87Q0FDUCxNQUFNLEVBQUUsUUFBUSxPQUFPO0NBQ3ZCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUMsRUFDRixFQUFFLE9BQU87Q0FDUCxN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
|
|
209
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkQ29udGVudCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidG9vbC1jYWxsXCIpLFxuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuXSk7XG5leHBvcnQgdHlwZSBRZ3JpZENvbnRlbnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZENvbnRlbnQ+O1xuXG5leHBvcnQgY29uc3QgRmluaXNoUmVhc29uID0gei5lbnVtKFtcInN0b3BcIiwgXCJ0b29sLWNhbGxzXCJdKTtcbmV4cG9ydCB0eXBlIEZpbmlzaFJlYXNvbiA9IHouaW5mZXI8dHlwZW9mIEZpbmlzaFJlYXNvbj47XG5cbmV4cG9ydCBjb25zdCBWZXJib3NpdHkgPSB6LmVudW0oW1wibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiXSk7XG5leHBvcnQgdHlwZSBWZXJib3NpdHkgPSB6LmluZmVyPHR5cGVvZiBWZXJib3NpdHk+O1xuXG5leHBvcnQgY29uc3QgUmVhc29uaW5nU3VtbWFyeSA9IHouZW51bShbXCJhdXRvXCIsIFwiY29uY2lzZVwiLCBcImRldGFpbGVkXCIsIFwibm9uZVwiXSk7XG5leHBvcnQgdHlwZSBSZWFzb25pbmdTdW1tYXJ5ID0gei5pbmZlcjx0eXBlb2YgUmVhc29uaW5nU3VtbWFyeT47XG5cbmV4cG9ydCBjb25zdCBTZXJ2aWNlVGllciA9IHouZW51bShbXCJmYXN0XCIsIFwiZmxleFwiXSk7XG5leHBvcnQgdHlwZSBTZXJ2aWNlVGllciA9IHouaW5mZXI8dHlwZW9mIFNlcnZpY2VUaWVyPjtcblxuLy8g4pSA4pSA4pSAIFJ1biBMaWZlY3ljbGUgQ29udGV4dCAoU0RLIOKGlCBTZXJ2ZXIgY29udHJhY3QpIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgUWdyaWRMb2dNb2RlID0gei5lbnVtKFtcImF1dG9cIiwgXCJydW5cIiwgXCJub25lXCJdKTtcbmV4cG9ydCB0eXBlIFFncmlkTG9nTW9kZSA9IHouaW5mZXI8dHlwZW9mIFFncmlkTG9nTW9kZT47XG5cbi8vIGNvZGV4IHRocmVhZCDsooztkZwuIHRocmVhZCDsnqzsgqzsmqnsnLzroZwgY29udmVyc2F0aW9uX2lkKD1wcm9tcHRfY2FjaGVfa2V5KeulvCDqs6DsoJXtlbRcbi8vIE9wZW5BSSBwcm9tcHQgY2FjaGluZyDsnYQg7IK066as6riwIOychO2VnCDtlbjrk6QuIOyEnOuyhOqwgCDrsJzquIntlZjqs6Ag7YG065286rCAIOuLpOydjCDsmpTssq3sl5Ag6re464yA66GcIO2ajOyGoe2VnOuLpC5cbi8vIO2VuOuTpCDrr7jsoITshqEg7IucIOq4sOyhtCBcIuunpCB0dXJuIOyDiCB0aHJlYWQgKyBoaXN0b3J5IGluamVjdFwiIOuPmeyekeycvOuhnCDtj7TrsLEoUWdyaWRSdW5Db250ZXh0IOywuOyhsCkuXG5leHBvcnQgY29uc3QgUWdyaWRUaHJlYWRDb29yZCA9IHoub2JqZWN0KHtcbiAgd29ya2VySWQ6IHoubnVtYmVyKCksIC8vIOqzoOyglSDrnbzsmrDtjIUgKHRocmVhZCDripQgd29ya2VyIO2UhOuhnOyEuOyKpCDrqZTrqqjrpqzsl5Drp4wg7KG07J6sKVxuICB0aHJlYWRJZDogei5zdHJpbmcoKSwgLy8gY29kZXggY29udmVyc2F0aW9uX2lkID0gcHJvbXB0X2NhY2hlX2tleVxuICBlcG9jaDogei5udW1iZXIoKSwgLy8gd29ya2VyIHNwYXduIOy5tOyatO2EsC4gcmVzdGFydCDroZwgdGhyZWFkIOymneuwnCDqsJDsp4BcbiAgc3lzdGVtSGFzaDogei5zdHJpbmcoKSwgLy8gc3lzdGVtX3Byb21wdCDtlbTsi5wuIOuLpOuluCDrjIDtmZQg7Jik7KCR7IaNIOuwqeyngFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRocmVhZENvb3JkID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUaHJlYWRDb29yZD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFJ1bkNvbnRleHQgPSB6Lm9iamVjdCh7XG4gIC8vIHJ1biBsaWZlY3ljbGUobG9nTW9kZT1cInJ1blwiKSDsl5DshJzrp4wg67Cc6riJLiBhdXRvIOuqqOuTnCjsmIg6IElGKeuKlCB0aHJlYWRDb29yZCDrp4wg7JmV67O1LlxuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdGhyZWFkQ29vcmQ6IFFncmlkVGhyZWFkQ29vcmQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRSdW5Db250ZXh0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRSdW5Db250ZXh0PjtcblxuZXhwb3J0IGNvbnN0IFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5vYmplY3Qoe1xuICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBvdXRwdXQ6IHouc3RyaW5nKCksXG4gIGlzRXJyb3I6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sUmVzdWx0SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlJbnB1dCA9IHoub2JqZWN0KHtcbiAgc3lzdGVtOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb21wdDogei5zdHJpbmcoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGltZW91dDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBqc29uU2NoZW1hOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xzOiB6LmFycmF5KFFncmlkVG9vbCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZlcmJvc2l0eTogVmVyYm9zaXR5Lm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1N1bW1hcnk6IFJlYXNvbmluZ1N1bW1hcnkub3B0aW9uYWwoKSxcbiAgc2VydmljZVRpZXI6IFNlcnZpY2VUaWVyLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvamVjdE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaXNTdGVwOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBsb2dNb2RlOiBRZ3JpZExvZ01vZGUub3B0aW9uYWwoKSxcbiAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG4gIHRvb2xSZXN1bHRzOiB6LmFycmF5KFFncmlkVG9vbFJlc3VsdElucHV0KS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRdWVyeUlucHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBRdWVyeU91dHB1dCA9IHoub2JqZWN0KHtcbiAgdGV4dDogei5zdHJpbmcoKSxcbiAgY29udGVudDogei5hcnJheShRZ3JpZENvbnRlbnQpLFxuICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzYWdlOiB6Lm9iamVjdCh7XG4gICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICB9KSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFF1ZXJ5T3V0cHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlPdXRwdXQ+O1xuXG4vLyDilIDilIDilIAgU3RyZWFtIEV2ZW50cyDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN0cmVhbUV2ZW50cyA9IHoub2JqZWN0KHtcbiAgZGVsdGE6IHoub2JqZWN0KHsgdGV4dDogei5zdHJpbmcoKSB9KSxcbiAgdG9vbENhbGw6IHoub2JqZWN0KHtcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgZG9uZTogei5vYmplY3Qoe1xuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gICAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgICB1c2FnZTogei5vYmplY3Qoe1xuICAgICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIH0pLFxuICAgIGR1cmF0aW9uTXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb250ZW50OiB6LmFycmF5KFFncmlkQ29udGVudCksXG4gICAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG4gIH0pLFxuICBlcnJvcjogei5vYmplY3QoeyBtZXNzYWdlOiB6LnN0cmluZygpIH0pLFxufSk7XG5leHBvcnQgdHlwZSBTdHJlYW1FdmVudHMgPSB6LmluZmVyPHR5cGVvZiBTdHJlYW1FdmVudHM+O1xuXG4vLyDilIDilIDilIAgUnVuIExpZmVjeWNsZSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IENyZWF0ZVJ1bklucHV0ID0gei5vYmplY3Qoe1xuICB1c2VyUHJvbXB0OiB6LnN0cmluZygpLFxuICBzeXN0ZW1Qcm9tcHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIENyZWF0ZVJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgQ3JlYXRlUnVuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgQXBwZW5kU3RlcElucHV0ID0gei5vYmplY3Qoe1xuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCksXG4gIHN0ZXBJbmRleDogei5udW1iZXIoKSxcbiAgdHlwZTogei5lbnVtKFtcImdlbmVyYXRlXCIsIFwidG9vbF9jYWxsXCJdKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG90YWxJbnB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbE91dHB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlQ3JlYXRpb25Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXJyb3JNZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEZpbmlzaFJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgRmluaXNoUnVuSW5wdXQ+O1xuXG4vLyDilIDilIDilIAgVG9rZW4gTWFuYWdlbWVudCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEFkZFRva2VuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBBZGRUb2tlbklucHV0ID0gei5pbmZlcjx0eXBlb2YgQWRkVG9rZW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBSZW1vdmVUb2tlbklucHV0ID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVG9rZW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIFJlbW92ZVRva2VuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgVG9rZW5TdGF0cyA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICByZXF1ZXN0czogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVG9rZW5TdGF0cyA9IHouaW5mZXI8dHlwZW9mIFRva2VuU3RhdHM+O1xuXG4vLyDilIDilIDilIAgT0F1dGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBPQXV0aFN0YXJ0UmVzdWx0ID0gei5vYmplY3Qoe1xuICBhdXRoVXJsOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBPQXV0aFN0YXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgT0F1dGhTdGFydFJlc3VsdD47XG5cbmNvbnN0IFJhdGVXaW5kb3cgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHV0aWxpemF0aW9uOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgcmVzZXRzQXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgfSlcbiAgLm51bGxhYmxlKCk7XG5cbmV4cG9ydCBjb25zdCBVc2FnZVJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmaXZlSG91cjogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxuICBzZXZlbkRheTogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBVc2FnZVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgVXNhZ2VSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBIZWFsdGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBTdWJzY3JpYmVyU3RhdHVzID0gei5vYmplY3Qoe1xuICBjb25uZWN0ZWQ6IHouYm9vbGVhbigpLFxuICBjb25uZWN0ZWRBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgbGFzdFJlY29uY2lsZUF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBhdHRlbXB0OiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBTdWJzY3JpYmVyU3RhdHVzID0gei5pbmZlcjx0eXBlb2YgU3Vic2NyaWJlclN0YXR1cz47XG5cbmV4cG9ydCBjb25zdCBIZWFsdGhSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBhY3RpdmVUb2tlbnM6IHoubnVtYmVyKCksXG4gIHN1YnNjcmliZXI6IFN1YnNjcmliZXJTdGF0dXMubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgSGVhbHRoUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBIZWFsdGhSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBFcnJvcnMg4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBRdW90YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9FWEhBVVNURURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlRJTUVPVVRcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBQcm9jZXNzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlBST0NFU1NfRVJST1JcIiBhcyBjb25zdDtcbn1cblxuLy8g4pSA4pSA4pSAIFV0aWxzIOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gbWFza1Rva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9rZW4ubGVuZ3RoID4gNCA/IGAuLi4ke3Rva2VuLnNsaWNlKC00KX1gIDogdG9rZW47XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUlBLE1BQWEsU0FBUyxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7Q0FBTyxDQUFDO0FBR3ZELE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLFFBQVE7Q0FDaEIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2xDLGFBQWEsRUFBRSxTQUFTO0NBQ3pCLENBQUM7QUFHRixNQUFhLGVBQWUsRUFBRSxtQkFBbUIsUUFBUSxDQUN2RCxFQUFFLE9BQU87Q0FDUCxNQUFNLEVBQUUsUUFBUSxPQUFPO0NBQ3ZCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUMsRUFDRixFQUFFLE9BQU87Q0FDUCxNQUFNLEVBQUUsUUFBUSxZQUFZO0NBQzVCLFlBQVksRUFBRSxRQUFRO0NBQ3RCLFVBQVUsRUFBRSxRQUFRO0NBQ3BCLE9BQU8sRUFBRSxRQUFRO0NBQ2xCLENBQUMsQ0FDSCxDQUFDO0FBR0YsTUFBYSxlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVEsYUFBYSxDQUFDO0FBRzFELE1BQWEsWUFBWSxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7Q0FBTyxDQUFDO0FBRzFELE1BQWEsbUJBQW1CLEVBQUUsS0FBSztDQUFDO0NBQVE7Q0FBVztDQUFZO0NBQU8sQ0FBQztBQUcvRSxNQUFhLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUSxPQUFPLENBQUM7QUFLbkQsTUFBYSxlQUFlLEVBQUUsS0FBSztDQUFDO0NBQVE7Q0FBTztDQUFPLENBQUM7QUFNM0QsTUFBYSxtQkFBbUIsRUFBRSxPQUFPO0NBQ3ZDLFVBQVUsRUFBRSxRQUFRO0NBQ3BCLFVBQVUsRUFBRSxRQUFRO0NBQ3BCLE9BQU8sRUFBRSxRQUFRO0NBQ2pCLFlBQVksRUFBRSxRQUFRO0NBQ3ZCLENBQUM7QUFHRixNQUFhLGtCQUFrQixFQUFFLE9BQU87Q0FFdEMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ25DLGFBQWEsaUJBQWlCLFVBQVU7Q0FDekMsQ0FBQztBQUdGLE1BQWEsdUJBQXVCLEVBQUUsT0FBTztDQUMzQyxZQUFZLEVBQUUsUUFBUTtDQUN0QixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDL0IsUUFBUSxFQUFFLFFBQVE7Q0FDbEIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxVQUFVO0NBQ2hDLENBQUM7QUFHRixNQUFhLGFBQWEsRUFBRSxPQUFPO0NBQ2pDLFFBQVEsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM3QixRQUFRLEVBQUUsUUFBUTtDQUNsQixPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDNUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQzlCLFlBQVksRUFBRSxRQUFRLENBQUMsVUFBVTtDQUNqQyxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUMsVUFBVTtDQUNwQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDN0IsV0FBVyxVQUFVLFVBQVU7Q0FDL0Isa0JBQWtCLGlCQUFpQixVQUFVO0NBQzdDLGFBQWEsWUFBWSxVQUFVO0NBQ25DLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM5QixhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDbEMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxVQUFVO0NBQzlCLFNBQVMsYUFBYSxVQUFVO0NBQ2hDLFlBQVksZ0JBQWdCLFVBQVU7Q0FDdEMsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUMsVUFBVTtDQUN0RCxDQUFDO0FBR0YsTUFBYSxjQUFjLEVBQUUsT0FBTztDQUNsQyxNQUFNLEVBQUUsUUFBUTtDQUNoQixTQUFTLEVBQUUsTUFBTSxhQUFhO0NBQzlCLGNBQWM7Q0FDZCxXQUFXLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDaEMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQzVCLE9BQU8sRUFBRSxPQUFPO0VBQ2QsY0FBYyxFQUFFLFFBQVE7RUFDeEIsZUFBZSxFQUFFLFFBQVE7RUFDekIsNkJBQTZCLEVBQUUsUUFBUTtFQUN2Qyx5QkFBeUIsRUFBRSxRQUFRO0VBQ3BDLENBQUM7Q0FDRixZQUFZLEVBQUUsUUFBUTtDQUN0QixTQUFTLEVBQUUsUUFBUTtDQUNuQixZQUFZLGdCQUFnQixVQUFVO0NBQ3ZDLENBQUM7QUFLRixNQUFhLGVBQWUsRUFBRSxPQUFPO0NBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0NBQ3JDLFVBQVUsRUFBRSxPQUFPO0VBQ2pCLFlBQVksRUFBRSxRQUFRO0VBQ3RCLFVBQVUsRUFBRSxRQUFRO0VBQ3BCLE9BQU8sRUFBRSxRQUFRO0VBQ2xCLENBQUM7Q0FDRixNQUFNLEVBQUUsT0FBTztFQUNiLE1BQU0sRUFBRSxRQUFRO0VBQ2hCLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVTtFQUM1QixXQUFXLEVBQUUsUUFBUSxDQUFDLFVBQVU7RUFDaEMsY0FBYztFQUNkLE9BQU8sRUFBRSxPQUFPO0dBQ2QsY0FBYyxFQUFFLFFBQVE7R0FDeEIsZUFBZSxFQUFFLFFBQVE7R0FDekIsNkJBQTZCLEVBQUUsUUFBUTtHQUN2Qyx5QkFBeUIsRUFBRSxRQUFRO0dBQ3BDLENBQUM7RUFDRixZQUFZLEVBQUUsUUFBUTtFQUN0QixTQUFTLEVBQUUsUUFBUTtFQUNuQixTQUFTLEVBQUUsTUFBTSxhQUFhO0VBQzlCLFlBQVksZ0JBQWdCLFVBQVU7RUFDdkMsQ0FBQztDQUNGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0NBQ3pDLENBQUM7QUFLRixNQUFhLGlCQUFpQixFQUFFLE9BQU87Q0FDckMsWUFBWSxFQUFFLFFBQVE7Q0FDdEIsY0FBYyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ25DLFdBQVcsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUNoQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDN0IsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2xDLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUMvQixDQUFDO0FBR0YsTUFBYSxrQkFBa0IsRUFBRSxPQUFPO0NBQ3RDLGNBQWMsRUFBRSxRQUFRO0NBQ3hCLFdBQVcsRUFBRSxRQUFRO0NBQ3JCLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxZQUFZLENBQUM7Q0FDdkMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2xDLGNBQWMsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUNuQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUN0QyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUMxQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDakMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ25DLGVBQWUsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUNwQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUN0QyxlQUFlLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDcEMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2pDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUMvQixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDL0IsWUFBWSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2pDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ3JDLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM3QixDQUFDO0FBR0YsTUFBYSxpQkFBaUIsRUFBRSxPQUFPO0NBQ3JDLGNBQWMsRUFBRSxRQUFRO0NBQ3hCLFFBQVEsRUFBRSxLQUFLO0VBQUM7RUFBYTtFQUFTO0VBQVUsQ0FBQztDQUNqRCxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDL0IsV0FBVyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2hDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ3ZDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ3hDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQzNDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQy9DLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ3RDLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM5QixjQUFjLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDcEMsQ0FBQztBQUtGLE1BQWEsZ0JBQWdCLEVBQUUsT0FBTztDQUNwQyxPQUFPLEVBQUUsUUFBUTtDQUNqQixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBR0YsTUFBYSxtQkFBbUIsRUFBRSxPQUFPLEVBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQ2xCLENBQUM7QUFHRixNQUFhLGFBQWEsRUFBRSxPQUFPO0NBQ2pDLE9BQU8sRUFBRSxRQUFRO0NBQ2pCLE1BQU0sRUFBRSxRQUFRO0NBQ2hCLFVBQVUsRUFBRSxRQUFRO0NBQ3BCLFVBQVUsRUFBRSxRQUFRO0NBQ3JCLENBQUM7QUFLRixNQUFhLG1CQUFtQixFQUFFLE9BQU8sRUFDdkMsU0FBUyxFQUFFLFFBQVEsRUFDcEIsQ0FBQztBQUdGLE1BQU0sYUFBYSxFQUNoQixPQUFPO0NBQ04sYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2xDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUNoQyxDQUFDLENBQ0QsVUFBVTtBQUViLE1BQWEsZ0JBQWdCLEVBQUUsT0FBTztDQUNwQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDNUIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQy9CLFVBQVUsV0FBVyxVQUFVO0NBQy9CLFVBQVUsV0FBVyxVQUFVO0NBQ2hDLENBQUM7QUFLRixNQUFhLG1CQUFtQixFQUFFLE9BQU87Q0FDdkMsV0FBVyxFQUFFLFNBQVM7Q0FDdEIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxVQUFVO0NBQ2hDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxVQUFVO0NBQ3BDLFNBQVMsRUFBRSxRQUFRO0NBQ3BCLENBQUM7QUFHRixNQUFhLGlCQUFpQixFQUFFLE9BQU87Q0FDckMsUUFBUSxFQUFFLFFBQVE7Q0FDbEIsY0FBYyxFQUFFLFFBQVE7Q0FDeEIsWUFBWSxpQkFBaUIsVUFBVTtDQUN4QyxDQUFDO0FBS0YsSUFBYSxhQUFiLGNBQWdDLE1BQU07Q0FDcEMsT0FBZ0I7O0FBRWxCLElBQWEsZUFBYixjQUFrQyxNQUFNO0NBQ3RDLE9BQWdCOztBQUVsQixJQUFhLGVBQWIsY0FBa0MsTUFBTTtDQUN0QyxPQUFnQjs7QUFLbEIsU0FBZ0IsVUFBVSxPQUF1QjtBQUMvQyxRQUFPLE1BQU0sU0FBUyxJQUFJLE1BQU0sTUFBTSxNQUFNLEdBQUcsS0FBSyJ9
|
|
@@ -43,7 +43,8 @@ function buildToolCallSchema(tools) {
|
|
|
43
43
|
additionalProperties: false
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
function applyToolCallEmulation(result, tools) {
|
|
46
|
+
function applyToolCallEmulation(result, tools, threadCoord) {
|
|
47
|
+
const runContext = threadCoord ? { threadCoord } : void 0;
|
|
47
48
|
if (!tools?.length) {
|
|
48
49
|
const content = [{
|
|
49
50
|
type: "text",
|
|
@@ -52,7 +53,8 @@ function applyToolCallEmulation(result, tools) {
|
|
|
52
53
|
return {
|
|
53
54
|
...result,
|
|
54
55
|
content,
|
|
55
|
-
finishReason: "stop"
|
|
56
|
+
finishReason: "stop",
|
|
57
|
+
runContext
|
|
56
58
|
};
|
|
57
59
|
}
|
|
58
60
|
let parsed;
|
|
@@ -66,7 +68,8 @@ function applyToolCallEmulation(result, tools) {
|
|
|
66
68
|
type: "text",
|
|
67
69
|
text: result.text
|
|
68
70
|
}],
|
|
69
|
-
finishReason: "stop"
|
|
71
|
+
finishReason: "stop",
|
|
72
|
+
runContext
|
|
70
73
|
};
|
|
71
74
|
}
|
|
72
75
|
if (parsed.action === "tool_call") {
|
|
@@ -82,7 +85,8 @@ function applyToolCallEmulation(result, tools) {
|
|
|
82
85
|
return {
|
|
83
86
|
...result,
|
|
84
87
|
content,
|
|
85
|
-
finishReason: "tool-calls"
|
|
88
|
+
finishReason: "tool-calls",
|
|
89
|
+
runContext
|
|
86
90
|
};
|
|
87
91
|
}
|
|
88
92
|
const text = parsed.answer ?? result.text;
|
|
@@ -93,10 +97,11 @@ function applyToolCallEmulation(result, tools) {
|
|
|
93
97
|
type: "text",
|
|
94
98
|
text
|
|
95
99
|
}],
|
|
96
|
-
finishReason: "stop"
|
|
100
|
+
finishReason: "stop",
|
|
101
|
+
runContext
|
|
97
102
|
};
|
|
98
103
|
}
|
|
99
104
|
//#endregion
|
|
100
105
|
export { applyToolCallEmulation, buildToolCallSchema };
|
|
101
106
|
|
|
102
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3Rvb2wtZW11bGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQge1xuICB0eXBlIFFncmlkQ29udGVudCxcbiAgdHlwZSBRZ3JpZFRocmVhZENvb3JkLFxuICB0eXBlIFFncmlkVG9vbCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidG9vbC1lbXVsYXRpb25cIl0pO1xuXG50eXBlIFRvb2xDYWxsUmVzcG9uc2UgPSB7XG4gIGFjdGlvbjogXCJhbnN3ZXJcIiB8IFwidG9vbF9jYWxsXCI7XG4gIGFuc3dlcj86IHN0cmluZyB8IG51bGw7XG4gIHRvb2xDYWxscz86IEFycmF5PHsgdG9vbE5hbWU6IHN0cmluZzsgYXJnczogc3RyaW5nIH0+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvb2xDYWxsU2NoZW1hKHRvb2xzOiBRZ3JpZFRvb2xbXSk6IEpzb25WYWx1ZSB7XG4gIGNvbnN0IHRvb2xEZXNjcmlwdGlvbnMgPSB0b29sc1xuICAgIC5tYXAoKHRvb2wpID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpTT04uc3RyaW5naWZ5KHRvb2wuaW5wdXRTY2hlbWEpO1xuICAgICAgcmV0dXJuIGAtICR7dG9vbC5uYW1lfTogJHt0b29sLmRlc2NyaXB0aW9uID8/IFwiXCJ9XFxuICBpbnB1dFNjaGVtYTogJHtzY2hlbWF9YDtcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBhY3Rpb246IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1wiYW5zd2VyXCIsIFwidG9vbF9jYWxsXCJdIH0sXG4gICAgICBhbnN3ZXI6IHsgYW55T2Y6IFt7IHR5cGU6IFwic3RyaW5nXCIgfSwgeyB0eXBlOiBcIm51bGxcIiB9XSB9LFxuICAgICAgdG9vbENhbGxzOiB7XG4gICAgICAgIGFueU9mOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHRvb2xOYW1lOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgZW51bTogdG9vbHMubWFwKCh0b29sKSA9PiB0b29sLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRvb2xEZXNjcmlwdGlvbnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhcmdzOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIlRvb2wgYXJndW1lbnRzIGFzIEpTT04gc3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IFtcInRvb2xOYW1lXCIsIFwiYXJnc1wiXSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgdHlwZTogXCJudWxsXCIgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1aXJlZDogW1wiYWN0aW9uXCIsIFwiYW5zd2VyXCIsIFwidG9vbENhbGxzXCJdLFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5VG9vbENhbGxFbXVsYXRpb24oXG4gIHJlc3VsdDogT21pdDxRdWVyeU91dHB1dCwgXCJjb250ZW50XCIgfCBcImZpbmlzaFJlYXNvblwiIHwgXCJydW5Db250ZXh0XCI+LFxuICB0b29scz86IFFncmlkVG9vbFtdLFxuICB0aHJlYWRDb29yZD86IFFncmlkVGhyZWFkQ29vcmQsXG4pOiBRdWVyeU91dHB1dCB7XG4gIC8vIHRocmVhZCDsnqzsgqzsmqkg7KKM7ZGc66W8IHJ1bkNvbnRleHQg66GcIOyLpOyWtCDsmKzrprDri6QgKGF1dG8g66qo65Oc64qUIHJlcXVlc3RMb2dJZCDsl4bsnbQgdGhyZWFkQ29vcmQg66eMKS5cbiAgY29uc3QgcnVuQ29udGV4dCA9IHRocmVhZENvb3JkID8geyB0aHJlYWRDb29yZCB9IDogdW5kZWZpbmVkO1xuXG4gIGlmICghdG9vbHM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IGNvbnRlbnQ6IFFncmlkQ29udGVudFtdID0gW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IHJlc3VsdC50ZXh0IH1dO1xuICAgIHJldHVybiB7IC4uLnJlc3VsdCwgY29udGVudCwgZmluaXNoUmVhc29uOiBcInN0b3BcIiwgcnVuQ29udGV4dCB9O1xuICB9XG5cbiAgbGV0IHBhcnNlZDogVG9vbENhbGxSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJlc3VsdC50ZXh0KSBhcyBUb29sQ2FsbFJlc3BvbnNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oYHRvb2wtY2FsbCBlbXVsYXRpb24gcGFyc2UgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gdGV4dDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzdWx0LFxuICAgICAgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IHJlc3VsdC50ZXh0IH1dLFxuICAgICAgZmluaXNoUmVhc29uOiBcInN0b3BcIixcbiAgICAgIHJ1bkNvbnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChwYXJzZWQuYWN0aW9uID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgY29uc3QgdG9vbENhbGxzID0gcGFyc2VkLnRvb2xDYWxscyA/PyBbXTtcbiAgICBjb25zdCBjb250ZW50OiBRZ3JpZENvbnRlbnRbXSA9IHRvb2xDYWxscy5tYXAoKHRvb2xDYWxsKSA9PiB7XG4gICAgICBpZiAoIXRvb2xzLnNvbWUoKHRvb2wpID0+IHRvb2wubmFtZSA9PT0gdG9vbENhbGwudG9vbE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBlbXVsYXRlZCB0b29sOiAke3Rvb2xDYWxsLnRvb2xOYW1lfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRvb2wtY2FsbFwiLFxuICAgICAgICB0b29sQ2FsbElkOiBgY2FsbF8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gLFxuICAgICAgICB0b29sTmFtZTogdG9vbENhbGwudG9vbE5hbWUsXG4gICAgICAgIGlucHV0OiB0b29sQ2FsbC5hcmdzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4geyAuLi5yZXN1bHQsIGNvbnRlbnQsIGZpbmlzaFJlYXNvbjogXCJ0b29sLWNhbGxzXCIsIHJ1bkNvbnRleHQgfTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBwYXJzZWQuYW5zd2VyID8/IHJlc3VsdC50ZXh0O1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICB0ZXh0LFxuICAgIGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0IH1dLFxuICAgIGZpbmlzaFJlYXNvbjogXCJzdG9wXCIsXG4gICAgcnVuQ29udGV4dCxcbiAgfTtcbn1cbiJdLCJtYXBwaW5n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
|
|
@@ -16,10 +16,7 @@ const THREAD_DEFAULTS = {
|
|
|
16
16
|
open_world_enabled: false
|
|
17
17
|
} } }
|
|
18
18
|
};
|
|
19
|
-
const BASE_INSTRUCTIONS =
|
|
20
|
-
text: "You are a helpful assistant. Do not use any tools such as shell, file operations, or web search. Respond with text only.",
|
|
21
|
-
withSchema: "You are a helpful assistant. Respond using the provided output schema."
|
|
22
|
-
};
|
|
19
|
+
const BASE_INSTRUCTIONS = "You are a helpful assistant. Do not use any tools such as shell, file operations, or web search. Respond with text only.";
|
|
23
20
|
const CODEX_CONFIG_TOML = `web_search = "disabled"
|
|
24
21
|
include_permissions_instructions = false
|
|
25
22
|
include_apps_instructions = false
|
|
@@ -40,7 +37,7 @@ view_image = false
|
|
|
40
37
|
[skills]
|
|
41
38
|
include_instructions = false
|
|
42
39
|
`;
|
|
43
|
-
var CodexAppServerWorker = class {
|
|
40
|
+
var CodexAppServerWorker = class CodexAppServerWorker {
|
|
44
41
|
proc = null;
|
|
45
42
|
rpc = null;
|
|
46
43
|
codexHome;
|
|
@@ -52,12 +49,18 @@ var CodexAppServerWorker = class {
|
|
|
52
49
|
active = true;
|
|
53
50
|
onReady;
|
|
54
51
|
serverRequestHandler;
|
|
52
|
+
threadMeta = /* @__PURE__ */ new Map();
|
|
53
|
+
epochCounter = 0;
|
|
54
|
+
static THREAD_IDLE_TTL_MS = 10 * 6e4;
|
|
55
|
+
static MAX_THREADS_PER_WORKER = 16;
|
|
55
56
|
constructor(config) {
|
|
56
57
|
this.config = config;
|
|
57
58
|
const suffix = config.workerIndex !== void 0 ? `-${config.workerIndex}` : "";
|
|
58
59
|
this.codexHome = `/tmp/qgrid-codex/${config.tokenId}${suffix}`;
|
|
59
60
|
}
|
|
60
61
|
async spawnAndInit() {
|
|
62
|
+
this.epochCounter++;
|
|
63
|
+
this.threadMeta.clear();
|
|
61
64
|
const cwd = `${this.codexHome}/cwd`;
|
|
62
65
|
mkdirSync(cwd, { recursive: true });
|
|
63
66
|
writeFileSync(`${this.codexHome}/config.toml`, CODEX_CONFIG_TOML);
|
|
@@ -179,6 +182,9 @@ var CodexAppServerWorker = class {
|
|
|
179
182
|
get tokenId() {
|
|
180
183
|
return this.config.tokenId;
|
|
181
184
|
}
|
|
185
|
+
get workerIndex() {
|
|
186
|
+
return this.config.workerIndex ?? 0;
|
|
187
|
+
}
|
|
182
188
|
get tokenName() {
|
|
183
189
|
return this.config.tokenName;
|
|
184
190
|
}
|
|
@@ -216,8 +222,9 @@ var CodexAppServerWorker = class {
|
|
|
216
222
|
get hasCapacity() {
|
|
217
223
|
return !this.busy;
|
|
218
224
|
}
|
|
219
|
-
async
|
|
225
|
+
async createThread(req) {
|
|
220
226
|
if (!this.rpc || !this.ready) throw new Error("worker not ready");
|
|
227
|
+
this.sweepIdleThreads();
|
|
221
228
|
const threadConfig = {
|
|
222
229
|
...THREAD_DEFAULTS.config,
|
|
223
230
|
...req.verbosity ? { model_verbosity: req.verbosity } : {}
|
|
@@ -225,18 +232,25 @@ var CodexAppServerWorker = class {
|
|
|
225
232
|
const { thread, model: threadModel } = await this.rpc.request("thread/start", {
|
|
226
233
|
ephemeral: true,
|
|
227
234
|
cwd: `${this.codexHome}/cwd`,
|
|
228
|
-
baseInstructions:
|
|
235
|
+
baseInstructions: BASE_INSTRUCTIONS,
|
|
229
236
|
developerInstructions: req.developerInstructions ?? "",
|
|
230
237
|
sandbox: THREAD_DEFAULTS.sandbox,
|
|
231
238
|
approvalPolicy: THREAD_DEFAULTS.approvalPolicy,
|
|
232
239
|
config: threadConfig
|
|
233
240
|
});
|
|
234
241
|
const threadId = thread.id;
|
|
235
|
-
const model = req.model ?? threadModel;
|
|
236
242
|
if (req.history?.length) await this.rpc.request("thread/inject_items", {
|
|
237
243
|
threadId,
|
|
238
244
|
items: req.history
|
|
239
245
|
});
|
|
246
|
+
this.threadMeta.set(threadId, { lastUsedAt: Date.now() });
|
|
247
|
+
return {
|
|
248
|
+
threadId,
|
|
249
|
+
model: req.model ?? threadModel
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
async startTurnOnThread(threadId, req) {
|
|
253
|
+
if (!this.rpc || !this.ready) throw new Error("worker not ready");
|
|
240
254
|
const { turn } = await this.rpc.request("turn/start", {
|
|
241
255
|
threadId,
|
|
242
256
|
input: req.input,
|
|
@@ -246,21 +260,51 @@ var CodexAppServerWorker = class {
|
|
|
246
260
|
...req.reasoningSummary ? { summary: req.reasoningSummary } : {},
|
|
247
261
|
...req.serviceTier ? { serviceTier: req.serviceTier } : {}
|
|
248
262
|
});
|
|
263
|
+
const meta = this.threadMeta.get(threadId);
|
|
264
|
+
if (meta) meta.lastUsedAt = Date.now();
|
|
265
|
+
return { turnId: turn.id };
|
|
266
|
+
}
|
|
267
|
+
async executeTurn(req, existingThreadId) {
|
|
268
|
+
let threadId;
|
|
269
|
+
let model;
|
|
270
|
+
if (existingThreadId) {
|
|
271
|
+
threadId = existingThreadId;
|
|
272
|
+
model = req.model ?? "";
|
|
273
|
+
} else ({threadId, model} = await this.createThread(req));
|
|
274
|
+
await this.startTurnOnThread(threadId, req);
|
|
249
275
|
return {
|
|
250
|
-
threadId,
|
|
251
|
-
|
|
252
|
-
model
|
|
276
|
+
...await this.consumeTurnNotifications(threadId, model),
|
|
277
|
+
threadId
|
|
253
278
|
};
|
|
254
279
|
}
|
|
255
|
-
async
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
280
|
+
async executeTurnStream(req, cb, existingThreadId) {
|
|
281
|
+
let threadId;
|
|
282
|
+
let model;
|
|
283
|
+
if (existingThreadId) {
|
|
284
|
+
threadId = existingThreadId;
|
|
285
|
+
model = req.model ?? "";
|
|
286
|
+
} else ({threadId, model} = await this.createThread(req));
|
|
287
|
+
const { turnId } = await this.startTurnOnThread(threadId, req);
|
|
261
288
|
cb.onThreadId?.(threadId);
|
|
262
289
|
cb.onTurnId?.(turnId);
|
|
263
|
-
|
|
290
|
+
await this.consumeStreamNotifications(threadId, model, cb);
|
|
291
|
+
return { threadId };
|
|
292
|
+
}
|
|
293
|
+
get epoch() {
|
|
294
|
+
return this.epochCounter;
|
|
295
|
+
}
|
|
296
|
+
hasThread(threadId) {
|
|
297
|
+
return this.threadMeta.has(threadId);
|
|
298
|
+
}
|
|
299
|
+
sweepIdleThreads() {
|
|
300
|
+
const now = Date.now();
|
|
301
|
+
for (const [id, meta] of this.threadMeta) if (now - meta.lastUsedAt > CodexAppServerWorker.THREAD_IDLE_TTL_MS) this.threadMeta.delete(id);
|
|
302
|
+
const limit = CodexAppServerWorker.MAX_THREADS_PER_WORKER - 1;
|
|
303
|
+
if (this.threadMeta.size > limit) {
|
|
304
|
+
const sorted = [...this.threadMeta.entries()].toSorted((a, b) => a[1].lastUsedAt - b[1].lastUsedAt);
|
|
305
|
+
const over = this.threadMeta.size - limit;
|
|
306
|
+
for (let i = 0; i < over; i++) this.threadMeta.delete(sorted[i][0]);
|
|
307
|
+
}
|
|
264
308
|
}
|
|
265
309
|
async interruptTurn(threadId, turnId) {
|
|
266
310
|
if (!this.rpc || !this.ready) return;
|
|
@@ -323,7 +367,7 @@ var CodexAppServerWorker = class {
|
|
|
323
367
|
});
|
|
324
368
|
this.rpc.onNotification("thread/tokenUsage/updated", (p) => {
|
|
325
369
|
if (p.threadId !== threadId) return;
|
|
326
|
-
usage = p.tokenUsage.
|
|
370
|
+
usage = p.tokenUsage.last;
|
|
327
371
|
});
|
|
328
372
|
this.rpc.onNotification("turn/completed", (p) => {
|
|
329
373
|
if (p.threadId !== threadId) return;
|
|
@@ -395,7 +439,7 @@ var CodexAppServerWorker = class {
|
|
|
395
439
|
});
|
|
396
440
|
this.rpc.onNotification("thread/tokenUsage/updated", (p) => {
|
|
397
441
|
if (p.threadId !== threadId) return;
|
|
398
|
-
usage = p.tokenUsage.
|
|
442
|
+
usage = p.tokenUsage.last;
|
|
399
443
|
});
|
|
400
444
|
this.rpc.onNotification("turn/completed", (p) => {
|
|
401
445
|
if (p.threadId !== threadId) return;
|
|
@@ -433,4 +477,4 @@ var CodexAppServerWorker = class {
|
|
|
433
477
|
//#endregion
|
|
434
478
|
export { CodexAppServerWorker };
|
|
435
479
|
|
|
436
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXgtd29ya2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvb3BlbmFpL2NvZGV4LXdvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgdHlwZSBUaHJlYWRJbmplY3RJdGVtc1BhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRJbmplY3RJdGVtc1BhcmFtc1wiO1xuaW1wb3J0IHsgdHlwZSBUaHJlYWRTdGFydFBhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRTdGFydFBhcmFtc1wiO1xuaW1wb3J0IHsgdHlwZSBUaHJlYWRTdGFydFJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1RocmVhZFN0YXJ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Ub2tlblVzYWdlQnJlYWtkb3duXCI7XG5pbXBvcnQgeyB0eXBlIFR1cm5TdGFydFBhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UdXJuU3RhcnRQYXJhbXNcIjtcbmltcG9ydCB7IHR5cGUgVHVyblN0YXJ0UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVHVyblN0YXJ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENvZGV4UnBjQ2xpZW50IH0gZnJvbSBcIi4vY29kZXgtcnBjXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcImNvZGV4LXdvcmtlclwiXSk7XG5cbmNvbnN0IE1BWF9SRVNUQVJUX0FUVEVNUFRTID0gMztcbmNvbnN0IFJFU1RBUlRfQkFDS09GRl9CQVNFX01TID0gMV8wMDA7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJDb25maWcge1xuICB0b2tlbklkOiBudW1iZXI7XG4gIHRva2VuTmFtZTogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgcGxhblR5cGU/OiBzdHJpbmc7XG4gIHdvcmtlckluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cm5SZXF1ZXN0IHtcbiAgaW5wdXQ6IFR1cm5TdGFydFBhcmFtc1tcImlucHV0XCJdO1xuICBvdXRwdXRTY2hlbWE/OiBUdXJuU3RhcnRQYXJhbXNbXCJvdXRwdXRTY2hlbWFcIl07XG4gIGVmZm9ydD86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIGRldmVsb3Blckluc3RydWN0aW9ucz86IHN0cmluZztcbiAgaGlzdG9yeT86IFRocmVhZEluamVjdEl0ZW1zUGFyYW1zW1wiaXRlbXNcIl07XG4gIHZlcmJvc2l0eT86IHN0cmluZztcbiAgcmVhc29uaW5nU3VtbWFyeT86IHN0cmluZztcbiAgc2VydmljZVRpZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyblJlc3VsdCB7XG4gIHRleHQ6IHN0cmluZztcbiAgdXNhZ2U6IFRva2VuVXNhZ2VCcmVha2Rvd247XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgbW9kZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1DYWxsYmFja3Mge1xuICBvbkRlbHRhOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNvbXBsZXRlOiAocmVzdWx0OiBUdXJuUmVzdWx0KSA9PiB2b2lkO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICBvblRocmVhZElkPzogKHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uVHVybklkPzogKHR1cm5JZDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG50eXBlIFJlZnJlc2hhYmxlV29ya2VyQ3JlZGVudGlhbHMgPSBQaWNrPFdvcmtlckNvbmZpZywgXCJhY2Nlc3NUb2tlblwiIHwgXCJhY2NvdW50SWRcIiB8IFwicGxhblR5cGVcIj47XG50eXBlIEFjdGl2ZVR1cm5BYm9ydCA9IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG5cbi8vIHRocmVhZC9zdGFydCDqs7XthrUg7Ji17IWYXG5jb25zdCBUSFJFQURfREVGQVVMVFMgPSB7XG4gIHNhbmRib3g6IFwicmVhZC1vbmx5XCIsXG4gIGFwcHJvdmFsUG9saWN5OiBcIm5ldmVyXCIsXG4gIGNvbmZpZzoge1xuICAgIGFwcHM6IHsgX2RlZmF1bHQ6IHsgZW5hYmxlZDogZmFsc2UsIGRlc3RydWN0aXZlX2VuYWJsZWQ6IGZhbHNlLCBvcGVuX3dvcmxkX2VuYWJsZWQ6IGZhbHNlIH0gfSxcbiAgfSxcbn0gc2F0aXNmaWVzIFBhcnRpYWw8VGhyZWFkU3RhcnRQYXJhbXM+O1xuXG5jb25zdCBCQVNFX0lOU1RSVUNUSU9OUyA9IHtcbiAgdGV4dDogXCJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuIERvIG5vdCB1c2UgYW55IHRvb2xzIHN1Y2ggYXMgc2hlbGwsIGZpbGUgb3BlcmF0aW9ucywgb3Igd2ViIHNlYXJjaC4gUmVzcG9uZCB3aXRoIHRleHQgb25seS5cIixcbiAgd2l0aFNjaGVtYTogXCJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuIFJlc3BvbmQgdXNpbmcgdGhlIHByb3ZpZGVkIG91dHB1dCBzY2hlbWEuXCIsXG59IGFzIGNvbnN0O1xuXG4vLyBjb2RleOqwgCDrp6Qg7JqU7LKt7JeQIOyekOuPmSDso7zsnoXtlZjripQg64K07J6lIHRvb2woc2hlbGwvd2ViX3NlYXJjaC9zcGF3bl9hZ2VudCDrk7EgMTTqsJwp6rO8XG4vLyBpbnN0cnVjdGlvbiDruJTroZ0ocGVybWlzc2lvbnMvZW52aXJvbm1lbnRfY29udGV4dC9za2lsbHMsIH4xMEtCKeydhCDruYTtmZzshLHtmZRcbi8vICRDT0RFWF9IT01FL2NvbmZpZy50b21sIOuhnCDsjajrhKPsnLzrqbQgY29kZXgg67aA7YyFIOyLnCBzY2FuXG4vLyDthrXsoJzrtojqsIA6IHVwZGF0ZV9wbGFuL3JlcXVlc3RfdXNlcl9pbnB1dFxuY29uc3QgQ09ERVhfQ09ORklHX1RPTUwgPSBgd2ViX3NlYXJjaCA9IFwiZGlzYWJsZWRcIlxuaW5jbHVkZV9wZXJtaXNzaW9uc19pbnN0cnVjdGlvbnMgPSBmYWxzZVxuaW5jbHVkZV9hcHBzX2luc3RydWN0aW9ucyA9IGZhbHNlXG5pbmNsdWRlX2Vudmlyb25tZW50X2NvbnRleHQgPSBmYWxzZVxuXG5bZmVhdHVyZXNdXG5zaGVsbF90b29sID0gZmFsc2VcbnRvb2xfc2VhcmNoID0gZmFsc2VcbnRvb2xfc3VnZ2VzdCA9IGZhbHNlXG5tdWx0aV9hZ2VudCA9IGZhbHNlXG5pbWFnZV9nZW5lcmF0aW9uID0gZmFsc2VcbmFwcHMgPSBmYWxzZVxucGx1Z2lucyA9IGZhbHNlXG5cblt0b29sc11cbnZpZXdfaW1hZ2UgPSBmYWxzZVxuXG5bc2tpbGxzXVxuaW5jbHVkZV9pbnN0cnVjdGlvbnMgPSBmYWxzZVxuYDtcblxuLy8g4pSA4pSAIFdvcmtlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIENvZGV4QXBwU2VydmVyV29ya2VyIHtcbiAgcHJpdmF0ZSBwcm9jOiBDaGlsZFByb2Nlc3MgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBycGM6IENvZGV4UnBjQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29kZXhIb21lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVzdGFydEF0dGVtcHRzID0gMDtcbiAgcHJpdmF0ZSByZWFkeSA9IGZhbHNlO1xuICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xuICBwcml2YXRlIGJ1c3kgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhY3RpdmVUdXJuQWJvcnQ/OiBBY3RpdmVUdXJuQWJvcnQ7XG4gIGFjdGl2ZSA9IHRydWU7XG4gIG9uUmVhZHk/OiAoKSA9PiB2b2lkO1xuICAvLyByZXN0YXJ0IOyLnCBycGMg6rCd7LK06rCAIOyDiOuhnCDsg53shLHrkJjrr4DroZwsIO2VuOuTpOufrOulvCDrs7TqtIDtlojri6TqsIAg66ekIHNwYXdu66eI64ukIOyerOuwlOyduOuUqe2VnOuLpC5cbiAgc2VydmVyUmVxdWVzdEhhbmRsZXI/OiAobWV0aG9kOiBzdHJpbmcsIHBhcmFtczogdW5rbm93bikgPT4gUHJvbWlzZTx1bmtub3duPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogV29ya2VyQ29uZmlnKSB7XG4gICAgY29uc3Qgc3VmZml4ID0gY29uZmlnLndvcmtlckluZGV4ICE9PSB1bmRlZmluZWQgPyBgLSR7Y29uZmlnLndvcmtlckluZGV4fWAgOiBcIlwiO1xuICAgIHRoaXMuY29kZXhIb21lID0gYC90bXAvcWdyaWQtY29kZXgvJHtjb25maWcudG9rZW5JZH0ke3N1ZmZpeH1gO1xuICB9XG5cbiAgLy8g4pSA4pSAIExpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIGFzeW5jIHNwYXduQW5kSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjd2QgPSBgJHt0aGlzLmNvZGV4SG9tZX0vY3dkYDtcbiAgICBta2RpclN5bmMoY3dkLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBjb2RleCDrgrTsnqUgdG9vbC93ZWJfc2VhcmNoL2luc3RydWN0aW9uIOu4lOuhnSDruYTtmZzshLHtmZRcbiAgICB3cml0ZUZpbGVTeW5jKGAke3RoaXMuY29kZXhIb21lfS9jb25maWcudG9tbGAsIENPREVYX0NPTkZJR19UT01MKTtcblxuICAgIHRoaXMucHJvYyA9IHNwYXduKFwiY29kZXhcIiwgW1wiYXBwLXNlcnZlclwiLCBcIi0tbGlzdGVuXCIsIFwic3RkaW86Ly9cIl0sIHtcbiAgICAgIHN0ZGlvOiBbXCJwaXBlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgICBjd2QsXG4gICAgICBlbnY6IHtcbiAgICAgICAgUEFUSDogcHJvY2Vzcy5lbnYuUEFUSCxcbiAgICAgICAgVE1QRElSOiBwcm9jZXNzLmVudi5UTVBESVIsXG4gICAgICAgIENPREVYX0hPTUU6IHRoaXMuY29kZXhIb21lLFxuICAgICAgICAvLyBlbnZpcm9ubWVudCDruYTtmZzshLHtmZQg4oaSIGhhc19lbnZpcm9ubWVudD1mYWxzZSDihpIgc2hlbGwvYXBwbHlfcGF0Y2gvdmlld19pbWFnZSDsoJzqsbBcbiAgICAgICAgQ09ERVhfRVhFQ19TRVJWRVJfVVJMOiBcIm5vbmVcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSBleGl0ZWQgKGNvZGU9JHtjb2RlfSlgKTtcbiAgICAgIHRoaXMuZmFpbEFjdGl2ZVR1cm4oXG4gICAgICAgIG5ldyBFcnJvcihgY29kZXggd29ya2VyIGV4aXRlZCB3aGlsZSB0dXJuIHdhcyBydW5uaW5nIChjb2RlPSR7Y29kZSA/PyBcInVua25vd25cIn0pYCksXG4gICAgICApO1xuICAgICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgICAgdGhpcy5ycGMgPSBudWxsO1xuICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHRoaXMuc2NoZWR1bGVSZXN0YXJ0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJwYyA9IG5ldyBDb2RleFJwY0NsaWVudCh0aGlzLnByb2MpO1xuICAgIC8vIHJlc3RhcnQg7ZuE7JeQ64+EIHJlZnJlc2ggc2VydmVyLXJlcXVlc3Qg7ZW465Ok65+s66W8IOycoOyngCAo7JeG7Jy866m0IGNvZGV4IO2GoO2BsCDtmozsoIQg7Iuk7YyoIOKGkiBzZXNzaW9uIGV4cGlyZWQpXG4gICAgdGhpcy5iaW5kU2VydmVyUmVxdWVzdEhhbmRsZXIoKTtcblxuICAgIGF3YWl0IHRoaXMucnBjLnJlcXVlc3QoXCJpbml0aWFsaXplXCIsIHtcbiAgICAgIGNsaWVudEluZm86IHsgbmFtZTogXCJxZ3JpZFwiLCB2ZXJzaW9uOiBcIjEuMC4wXCIgfSxcbiAgICAgIGNhcGFiaWxpdGllczogeyBleHBlcmltZW50YWxBcGk6IHRydWUgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd2FpdEZvckxvZ2luQ29tcGxldGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKFwibG9naW4gdGltZW91dFwiKSksIDEyMF8wMDApO1xuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiYWNjb3VudC9sb2dpbi9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBpZiAocC5zdWNjZXNzKSByZXNvbHZlKCk7XG4gICAgICAgIGVsc2UgcmVqZWN0KG5ldyBFcnJvcihgbG9naW4gZmFpbGVkOiAke3AuZXJyb3IgPz8gXCJ1bmtub3duXCJ9YCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3Bhd25BbmRJbml0KCk7XG5cbiAgICBhd2FpdCB0aGlzLnJwYyEucmVxdWVzdChcImFjY291bnQvbG9naW4vc3RhcnRcIiwge1xuICAgICAgdHlwZTogXCJjaGF0Z3B0QXV0aFRva2Vuc1wiLFxuICAgICAgYWNjZXNzVG9rZW46IHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuLFxuICAgICAgY2hhdGdwdEFjY291bnRJZDogdGhpcy5jb25maWcuYWNjb3VudElkLFxuICAgICAgLi4uKHRoaXMuY29uZmlnLnBsYW5UeXBlID8geyBjaGF0Z3B0UGxhblR5cGU6IHRoaXMuY29uZmlnLnBsYW5UeXBlIH0gOiB7fSksXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLndhaXRGb3JMb2dpbkNvbXBsZXRlZCgpO1xuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIHRoaXMucmVzdGFydEF0dGVtcHRzID0gMDtcbiAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSByZWFkeWApO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRCcm93c2VyTG9naW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLnNwYXduQW5kSW5pdCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjIS5yZXF1ZXN0PHsgYXV0aFVybDogc3RyaW5nIH0+KFwiYWNjb3VudC9sb2dpbi9zdGFydFwiLCB7XG4gICAgICB0eXBlOiBcImNoYXRncHRcIixcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSBicm93c2VyIGxvZ2luIHN0YXJ0ZWRgKTtcbiAgICByZXR1cm4gcmVzdWx0LmF1dGhVcmw7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yQnJvd3NlckxvZ2luQ29tcGxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yTG9naW5Db21wbGV0ZWQoKTtcbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3RhcnRBdHRlbXB0cyA9IDA7XG4gICAgbG9nZ2VyLmluZm8oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gYnJvd3NlciBsb2dpbiBjb21wbGV0ZWRgKTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRNYW5hZ2VkQ3JlZGVudGlhbHMoKTogUHJvbWlzZTx7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICBpZFRva2VuPzogc3RyaW5nO1xuICAgIGFjY291bnRJZDogc3RyaW5nO1xuICB9IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhgJHt0aGlzLmNvZGV4SG9tZX0vYXV0aC5qc29uYCwgXCJ1dGYtOFwiKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2Nlc3NUb2tlbjogcmF3LnRva2Vucz8uYWNjZXNzX3Rva2VuID8/IFwiXCIsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogcmF3LnRva2Vucz8ucmVmcmVzaF90b2tlbiA/PyBcIlwiLFxuICAgICAgICBpZFRva2VuOiByYXcudG9rZW5zPy5pZF90b2tlbixcbiAgICAgICAgYWNjb3VudElkOiByYXcudG9rZW5zPy5hY2NvdW50X2lkID8/IFwiXCIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMga2lsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuZmFpbEFjdGl2ZVR1cm4obmV3IEVycm9yKFwiY29kZXggd29ya2VyIHN0b3BwZWRcIikpO1xuICAgIHRoaXMucnBjPy5kZXN0cm95KCk7XG5cbiAgICBpZiAodGhpcy5wcm9jKSB7XG4gICAgICB0aGlzLnByb2Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvYz8ua2lsbChcIlNJR0tJTExcIik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCAzXzAwMCk7XG4gICAgICAgIHRoaXMucHJvYyEub24oXCJleGl0XCIsICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcm1TeW5jKHRoaXMuY29kZXhIb21lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkgJiYgIXRoaXMuZGVzdHJveWVkO1xuICB9XG4gIGdldCBpc0Rlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95ZWQ7XG4gIH1cbiAgZ2V0IHRva2VuSWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudG9rZW5JZDtcbiAgfVxuICBnZXQgdG9rZW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnRva2VuTmFtZTtcbiAgfVxuXG4gIGNhblJldXNlRm9yVG9rZW4oX3Rva2VuTmFtZTogc3RyaW5nLCBjcmVkZW50aWFsczogUmVmcmVzaGFibGVXb3JrZXJDcmVkZW50aWFscyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZy5hY2NvdW50SWQgPT09IGNyZWRlbnRpYWxzLmFjY291bnRJZCAmJlxuICAgICAgKHRoaXMuY29uZmlnLnBsYW5UeXBlID8/IHVuZGVmaW5lZCkgPT09IChjcmVkZW50aWFscy5wbGFuVHlwZSA/PyB1bmRlZmluZWQpXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRva2VuU3RhdGUodG9rZW5OYW1lOiBzdHJpbmcsIGNyZWRlbnRpYWxzOiBSZWZyZXNoYWJsZVdvcmtlckNyZWRlbnRpYWxzKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcudG9rZW5OYW1lID0gdG9rZW5OYW1lO1xuICAgIHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuID0gY3JlZGVudGlhbHMuYWNjZXNzVG9rZW47XG4gICAgdGhpcy5jb25maWcuYWNjb3VudElkID0gY3JlZGVudGlhbHMuYWNjb3VudElkO1xuICAgIGlmIChjcmVkZW50aWFscy5wbGFuVHlwZSkge1xuICAgICAgdGhpcy5jb25maWcucGxhblR5cGUgPSBjcmVkZW50aWFscy5wbGFuVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMuY29uZmlnLnBsYW5UeXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBSYXRlIGxpbWl0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhc3luYyBnZXRSYXRlTGltaXRzKCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHRocm93IG5ldyBFcnJvcihcIndvcmtlciBub3QgcmVhZHlcIik7XG4gICAgcmV0dXJuIHRoaXMucnBjLnJlcXVlc3QoXCJhY2NvdW50L3JhdGVMaW1pdHMvcmVhZFwiLCB7fSk7XG4gIH1cblxuICAvLyDilIDilIAgU2VydmVyLXJlcXVlc3QgZGVsZWdhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBzZXRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcihoYW5kbGVyOiAobWV0aG9kOiBzdHJpbmcsIHBhcmFtczogdW5rbm93bikgPT4gUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuc2VydmVyUmVxdWVzdEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMuYmluZFNlcnZlclJlcXVlc3RIYW5kbGVyKCk7XG4gIH1cblxuICAvLyBzcGF3bkFuZEluaXTsl5DshJwgcnBjIOyDneyEsSDsp4Htm4Qg7Zi47LacLiByZXN0YXJ066GcIHJwY+qwgCDsg4jroZwg66eM65Ok7Ja07KC464+EIO2VuOuTpOufrOqwgCDsnKDsp4DrkJzri6QuXG4gIGJpbmRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcigpOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5zZXJ2ZXJSZXF1ZXN0SGFuZGxlcjtcbiAgICBpZiAoIWhhbmRsZXIpIHJldHVybjtcbiAgICB0aGlzLnJwYz8ub25TZXJ2ZXJSZXF1ZXN0KFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIChwYXJhbXMpID0+XG4gICAgICBoYW5kbGVyKFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIHBhcmFtcyksXG4gICAgKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBUdXJuIGV4ZWN1dGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICB0cnlBY3F1aXJlVHVybigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5idXN5KSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZWxlYXNlVHVybigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgfVxuICBnZXQgaGFzQ2FwYWNpdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmJ1c3k7XG4gIH1cblxuICBhc3luYyBzdGFydFRocmVhZChcbiAgICByZXE6IFR1cm5SZXF1ZXN0LFxuICApOiBQcm9taXNlPHsgdGhyZWFkSWQ6IHN0cmluZzsgdHVybklkOiBzdHJpbmc7IG1vZGVsOiBzdHJpbmcgfT4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHRocm93IG5ldyBFcnJvcihcIndvcmtlciBub3QgcmVhZHlcIik7XG5cbiAgICBjb25zdCB0aHJlYWRDb25maWc6IFRocmVhZFN0YXJ0UGFyYW1zW1wiY29uZmlnXCJdID0ge1xuICAgICAgLi4uVEhSRUFEX0RFRkFVTFRTLmNvbmZpZyxcbiAgICAgIC4uLihyZXEudmVyYm9zaXR5ID8geyBtb2RlbF92ZXJib3NpdHk6IHJlcS52ZXJib3NpdHkgfSA6IHt9KSxcbiAgICB9O1xuICAgIGNvbnN0IHsgdGhyZWFkLCBtb2RlbDogdGhyZWFkTW9kZWwgfSA9IGF3YWl0IHRoaXMucnBjLnJlcXVlc3Q8VGhyZWFkU3RhcnRSZXNwb25zZT4oXG4gICAgICBcInRocmVhZC9zdGFydFwiLFxuICAgICAge1xuICAgICAgICBlcGhlbWVyYWw6IHRydWUsXG4gICAgICAgIGN3ZDogYCR7dGhpcy5jb2RleEhvbWV9L2N3ZGAsXG4gICAgICAgIGJhc2VJbnN0cnVjdGlvbnM6IHJlcS5vdXRwdXRTY2hlbWEgPyBCQVNFX0lOU1RSVUNUSU9OUy53aXRoU2NoZW1hIDogQkFTRV9JTlNUUlVDVElPTlMudGV4dCxcbiAgICAgICAgZGV2ZWxvcGVySW5zdHJ1Y3Rpb25zOiByZXEuZGV2ZWxvcGVySW5zdHJ1Y3Rpb25zID8/IFwiXCIsXG4gICAgICAgIHNhbmRib3g6IFRIUkVBRF9ERUZBVUxUUy5zYW5kYm94LFxuICAgICAgICBhcHByb3ZhbFBvbGljeTogVEhSRUFEX0RFRkFVTFRTLmFwcHJvdmFsUG9saWN5LFxuICAgICAgICBjb25maWc6IHRocmVhZENvbmZpZyxcbiAgICAgIH0gc2F0aXNmaWVzIFBhcnRpYWw8VGhyZWFkU3RhcnRQYXJhbXM+LFxuICAgICk7XG5cbiAgICBjb25zdCB0aHJlYWRJZCA9IHRocmVhZC5pZDtcbiAgICBjb25zdCBtb2RlbCA9IHJlcS5tb2RlbCA/PyB0aHJlYWRNb2RlbDtcbiAgICBpZiAocmVxLmhpc3Rvcnk/Lmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5ycGMucmVxdWVzdChcInRocmVhZC9pbmplY3RfaXRlbXNcIiwge1xuICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgaXRlbXM6IHJlcS5oaXN0b3J5LFxuICAgICAgfSBzYXRpc2ZpZXMgVGhyZWFkSW5qZWN0SXRlbXNQYXJhbXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdHVybiB9ID0gYXdhaXQgdGhpcy5ycGMucmVxdWVzdDxUdXJuU3RhcnRSZXNwb25zZT4oXCJ0dXJuL3N0YXJ0XCIsIHtcbiAgICAgIHRocmVhZElkLFxuICAgICAgaW5wdXQ6IHJlcS5pbnB1dCxcbiAgICAgIC4uLihyZXEub3V0cHV0U2NoZW1hID8geyBvdXRwdXRTY2hlbWE6IHJlcS5vdXRwdXRTY2hlbWEgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEuZWZmb3J0ID8geyBlZmZvcnQ6IHJlcS5lZmZvcnQgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEubW9kZWwgPyB7IG1vZGVsOiByZXEubW9kZWwgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEucmVhc29uaW5nU3VtbWFyeSA/IHsgc3VtbWFyeTogcmVxLnJlYXNvbmluZ1N1bW1hcnkgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEuc2VydmljZVRpZXIgPyB7IHNlcnZpY2VUaWVyOiByZXEuc2VydmljZVRpZXIgfSA6IHt9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7IHRocmVhZElkLCB0dXJuSWQ6IHR1cm4uaWQsIG1vZGVsIH07XG4gIH1cblxuICBhc3luYyBleGVjdXRlVHVybihyZXE6IFR1cm5SZXF1ZXN0KTogUHJvbWlzZTxUdXJuUmVzdWx0PiB7XG4gICAgY29uc3QgeyB0aHJlYWRJZCwgbW9kZWwgfSA9IGF3YWl0IHRoaXMuc3RhcnRUaHJlYWQocmVxKTtcbiAgICByZXR1cm4gdGhpcy5jb25zdW1lVHVybk5vdGlmaWNhdGlvbnModGhyZWFkSWQsIG1vZGVsKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVUdXJuU3RyZWFtKHJlcTogVHVyblJlcXVlc3QsIGNiOiBTdHJlYW1DYWxsYmFja3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRocmVhZElkLCB0dXJuSWQsIG1vZGVsIH0gPSBhd2FpdCB0aGlzLnN0YXJ0VGhyZWFkKHJlcSk7XG4gICAgY2Iub25UaHJlYWRJZD8uKHRocmVhZElkKTtcbiAgICBjYi5vblR1cm5JZD8uKHR1cm5JZCk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZVN0cmVhbU5vdGlmaWNhdGlvbnModGhyZWFkSWQsIG1vZGVsLCBjYik7XG4gIH1cblxuICBhc3luYyBpbnRlcnJ1cHRUdXJuKHRocmVhZElkOiBzdHJpbmcsIHR1cm5JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0KFwidHVybi9pbnRlcnJ1cHRcIiwgeyB0aHJlYWRJZCwgdHVybklkIH0pO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIHByaXZhdGUgZmFpbEFjdGl2ZVR1cm4oZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgY29uc3QgYWJvcnQgPSB0aGlzLmFjdGl2ZVR1cm5BYm9ydDtcbiAgICB0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9IHVuZGVmaW5lZDtcbiAgICBhYm9ydD8uKGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZVR1cm5Ob3RpZmljYXRpb25zKHRocmVhZElkOiBzdHJpbmcsIG1vZGVsOiBzdHJpbmcpOiBQcm9taXNlPFR1cm5SZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VHVyblJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgIGxldCBhYm9ydDogQWN0aXZlVHVybkFib3J0O1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKFwidHVybiB0aW1lb3V0ICg2MDBzKVwiKSk7XG4gICAgICB9LCA2MDBfMDAwKTtcblxuICAgICAgbGV0IHRleHQgPSBcIlwiO1xuICAgICAgbGV0IHVzYWdlOiBUb2tlblVzYWdlQnJlYWtkb3duID0ge1xuICAgICAgICB0b3RhbFRva2VuczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIG91dHB1dFRva2VuczogMCxcbiAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIHJlYXNvbmluZ091dHB1dFRva2VuczogMCxcbiAgICAgIH07XG4gICAgICBsZXQgZHVyYXRpb25NcyA9IDA7XG5cbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVHVybkFib3J0ID09PSBhYm9ydCkgdGhpcy5hY3RpdmVUdXJuQWJvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBbXG4gICAgICAgICAgXCJpdGVtL2NvbXBsZXRlZFwiLFxuICAgICAgICAgIFwiaXRlbS9hZ2VudE1lc3NhZ2UvZGVsdGFcIixcbiAgICAgICAgICBcInR1cm4vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJ0aHJlYWQvdG9rZW5Vc2FnZS91cGRhdGVkXCIsXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICBdIGFzIGNvbnN0KSB7XG4gICAgICAgICAgdGhpcy5ycGM/Lm9uTm90aWZpY2F0aW9uKG4sICgpID0+IHt9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluaXNoV2l0aEVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluaXNoV2l0aFJlc3VsdCA9IChyZXN1bHQ6IFR1cm5SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfTtcblxuICAgICAgYWJvcnQgPSBmaW5pc2hXaXRoRXJyb3I7XG4gICAgICB0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9IGFib3J0O1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKHAuaXRlbS50eXBlID09PSBcImFnZW50TWVzc2FnZVwiKSB0ZXh0ID0gcC5pdGVtLnRleHQ7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidGhyZWFkL3Rva2VuVXNhZ2UvdXBkYXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgdXNhZ2UgPSBwLnRva2VuVXNhZ2UudG90YWw7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidHVybi9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGR1cmF0aW9uTXMgPSBwLnR1cm4uZHVyYXRpb25NcyA/PyAwO1xuICAgICAgICBpZiAocC50dXJuLnN0YXR1cyA9PT0gXCJjb21wbGV0ZWRcIikgZmluaXNoV2l0aFJlc3VsdCh7IHRleHQsIHVzYWdlLCBkdXJhdGlvbk1zLCBtb2RlbCB9KTtcbiAgICAgICAgZWxzZSBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKGB0dXJuIGZhaWxlZDogJHtKU09OLnN0cmluZ2lmeShwLnR1cm4uZXJyb3IpfWApKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJlcnJvclwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKCFwLndpbGxSZXRyeSkge1xuICAgICAgICAgIGZpbmlzaFdpdGhFcnJvcihuZXcgRXJyb3IoYGNvZGV4IGVycm9yOiAke3AuZXJyb3IubWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lU3RyZWFtTm90aWZpY2F0aW9ucyhcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIG1vZGVsOiBzdHJpbmcsXG4gICAgY2I6IFN0cmVhbUNhbGxiYWNrcyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgICBsZXQgYWJvcnQ6IEFjdGl2ZVR1cm5BYm9ydDtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZmluaXNoV2l0aEVycm9yKG5ldyBFcnJvcihcInR1cm4gdGltZW91dCAoNjAwcylcIikpO1xuICAgICAgfSwgNjAwXzAwMCk7XG5cbiAgICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICAgIGxldCB1c2FnZTogVG9rZW5Vc2FnZUJyZWFrZG93biA9IHtcbiAgICAgICAgdG90YWxUb2tlbnM6IDAsXG4gICAgICAgIGlucHV0VG9rZW5zOiAwLFxuICAgICAgICBvdXRwdXRUb2tlbnM6IDAsXG4gICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLFxuICAgICAgICByZWFzb25pbmdPdXRwdXRUb2tlbnM6IDAsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9PT0gYWJvcnQpIHRoaXMuYWN0aXZlVHVybkFib3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgW1xuICAgICAgICAgIFwiaXRlbS9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcIml0ZW0vYWdlbnRNZXNzYWdlL2RlbHRhXCIsXG4gICAgICAgICAgXCJ0dXJuL2NvbXBsZXRlZFwiLFxuICAgICAgICAgIFwidGhyZWFkL3Rva2VuVXNhZ2UvdXBkYXRlZFwiLFxuICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgXSBhcyBjb25zdCkge1xuICAgICAgICAgIHRoaXMucnBjPy5vbk5vdGlmaWNhdGlvbihuLCAoKSA9PiB7fSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbmlzaFdpdGhFcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgY2Iub25FcnJvcihlcnJvcik7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5pc2hXaXRoQ29tcGxldGUgPSAocmVzdWx0OiBUdXJuUmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGNiLm9uQ29tcGxldGUocmVzdWx0KTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfTtcblxuICAgICAgYWJvcnQgPSBmaW5pc2hXaXRoRXJyb3I7XG4gICAgICB0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9IGFib3J0O1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgdGV4dCArPSBwLmRlbHRhO1xuICAgICAgICBjYi5vbkRlbHRhKHAuZGVsdGEpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC5pdGVtLnR5cGUgPT09IFwiYWdlbnRNZXNzYWdlXCIpIHRleHQgPSBwLml0ZW0udGV4dDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0aHJlYWQvdG9rZW5Vc2FnZS91cGRhdGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICB1c2FnZSA9IHAudG9rZW5Vc2FnZS50b3RhbDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0dXJuL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKHAudHVybi5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICBmaW5pc2hXaXRoQ29tcGxldGUoeyB0ZXh0LCB1c2FnZSwgZHVyYXRpb25NczogcC50dXJuLmR1cmF0aW9uTXMgPz8gMCwgbW9kZWwgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmluaXNoV2l0aEVycm9yKG5ldyBFcnJvcihgdHVybiAke3AudHVybi5zdGF0dXN9OiAke0pTT04uc3RyaW5naWZ5KHAudHVybi5lcnJvcil9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiZXJyb3JcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmICghcC53aWxsUmV0cnkpIHtcbiAgICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKGBjb2RleCBlcnJvcjogJHtwLmVycm9yLm1lc3NhZ2V9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZXN0YXJ0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgc2NoZWR1bGVSZXN0YXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCB8fCB0aGlzLnJlc3RhcnRBdHRlbXB0cyA+PSBNQVhfUkVTVEFSVF9BVFRFTVBUUykge1xuICAgICAgaWYgKHRoaXMucmVzdGFydEF0dGVtcHRzID49IE1BWF9SRVNUQVJUX0FUVEVNUFRTKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IG1heCByZXN0YXJ0IGF0dGVtcHRzIHJlYWNoZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3RhcnRBdHRlbXB0cysrO1xuICAgIGNvbnN0IGJhc2VEZWxheSA9IFJFU1RBUlRfQkFDS09GRl9CQVNFX01TICogMiAqKiAodGhpcy5yZXN0YXJ0QXR0ZW1wdHMgLSAxKTtcbiAgICBjb25zdCBzdGFnZ2VyID0gKHRoaXMuY29uZmlnLndvcmtlckluZGV4ID8/IDApICogMl8wMDA7XG4gICAgY29uc3QgZGVsYXkgPSBiYXNlRGVsYXkgKyBzdGFnZ2VyO1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX1bJHt0aGlzLmNvbmZpZy53b3JrZXJJbmRleCA/PyAwfV0gcmVzdGFydGluZyBpbiAke2RlbGF5fW1zIChhdHRlbXB0ICR7dGhpcy5yZXN0YXJ0QXR0ZW1wdHN9KWAsXG4gICAgKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICB0aGlzLmluaXRpYWxpemUoKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLm9uUmVhZHk/LigpKVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBsb2dnZXIud2Fybihgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSByZXN0YXJ0IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlUmVzdGFydCgpO1xuICAgICAgICB9KTtcbiAgICB9LCBkZWxheSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBYUEsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLGVBQWUsQ0FBQztBQUVuRCxNQUFNLHVCQUF1QjtBQUM3QixNQUFNLDBCQUEwQjtBQTRDaEMsTUFBTSxrQkFBa0I7Q0FDdEIsU0FBUztDQUNULGdCQUFnQjtDQUNoQixRQUFRLEVBQ04sTUFBTSxFQUFFLFVBQVU7RUFBRSxTQUFTO0VBQU8scUJBQXFCO0VBQU8sb0JBQW9CO0VBQU8sRUFBRSxFQUM5RjtDQUNGO0FBRUQsTUFBTSxvQkFBb0I7Q0FDeEIsTUFBTTtDQUNOLFlBQVk7Q0FDYjtBQU1ELE1BQU0sb0JBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCMUIsSUFBYSx1QkFBYixNQUFrQztDQUNoQyxPQUFvQztDQUNwQyxNQUFxQztDQUNyQztDQUNBLGtCQUEwQjtDQUMxQixRQUFnQjtDQUNoQixZQUFvQjtDQUNwQixPQUFlO0NBQ2Y7Q0FDQSxTQUFTO0NBQ1Q7Q0FFQTtDQUVBLFlBQVksUUFBOEI7QUFBdEIsT0FBQSxTQUFBO0VBQ2xCLE1BQU0sU0FBUyxPQUFPLGdCQUFnQixTQUFZLElBQUksT0FBTyxnQkFBZ0I7QUFDN0UsT0FBSyxZQUFZLG9CQUFvQixPQUFPLFVBQVU7O0NBS3hELE1BQWMsZUFBOEI7RUFDMUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxVQUFVO0FBQzlCLFlBQVUsS0FBSyxFQUFFLFdBQVcsTUFBTSxDQUFDO0FBRW5DLGdCQUFjLEdBQUcsS0FBSyxVQUFVLGVBQWUsa0JBQWtCO0FBRWpFLE9BQUssT0FBTyxNQUFNLFNBQVM7R0FBQztHQUFjO0dBQVk7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
|
|
480
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXgtd29ya2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvb3BlbmFpL2NvZGV4LXdvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgdHlwZSBUaHJlYWRJbmplY3RJdGVtc1BhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRJbmplY3RJdGVtc1BhcmFtc1wiO1xuaW1wb3J0IHsgdHlwZSBUaHJlYWRTdGFydFBhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRTdGFydFBhcmFtc1wiO1xuaW1wb3J0IHsgdHlwZSBUaHJlYWRTdGFydFJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1RocmVhZFN0YXJ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Ub2tlblVzYWdlQnJlYWtkb3duXCI7XG5pbXBvcnQgeyB0eXBlIFR1cm5TdGFydFBhcmFtcyB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UdXJuU3RhcnRQYXJhbXNcIjtcbmltcG9ydCB7IHR5cGUgVHVyblN0YXJ0UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVHVyblN0YXJ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENvZGV4UnBjQ2xpZW50IH0gZnJvbSBcIi4vY29kZXgtcnBjXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcImNvZGV4LXdvcmtlclwiXSk7XG5cbmNvbnN0IE1BWF9SRVNUQVJUX0FUVEVNUFRTID0gMztcbmNvbnN0IFJFU1RBUlRfQkFDS09GRl9CQVNFX01TID0gMV8wMDA7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJDb25maWcge1xuICB0b2tlbklkOiBudW1iZXI7XG4gIHRva2VuTmFtZTogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgcGxhblR5cGU/OiBzdHJpbmc7XG4gIHdvcmtlckluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cm5SZXF1ZXN0IHtcbiAgaW5wdXQ6IFR1cm5TdGFydFBhcmFtc1tcImlucHV0XCJdO1xuICBvdXRwdXRTY2hlbWE/OiBUdXJuU3RhcnRQYXJhbXNbXCJvdXRwdXRTY2hlbWFcIl07XG4gIGVmZm9ydD86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIGRldmVsb3Blckluc3RydWN0aW9ucz86IHN0cmluZztcbiAgaGlzdG9yeT86IFRocmVhZEluamVjdEl0ZW1zUGFyYW1zW1wiaXRlbXNcIl07XG4gIHZlcmJvc2l0eT86IHN0cmluZztcbiAgcmVhc29uaW5nU3VtbWFyeT86IHN0cmluZztcbiAgc2VydmljZVRpZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyblJlc3VsdCB7XG4gIHRleHQ6IHN0cmluZztcbiAgdXNhZ2U6IFRva2VuVXNhZ2VCcmVha2Rvd247XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgbW9kZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1DYWxsYmFja3Mge1xuICBvbkRlbHRhOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNvbXBsZXRlOiAocmVzdWx0OiBUdXJuUmVzdWx0KSA9PiB2b2lkO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICBvblRocmVhZElkPzogKHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uVHVybklkPzogKHR1cm5JZDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG50eXBlIFJlZnJlc2hhYmxlV29ya2VyQ3JlZGVudGlhbHMgPSBQaWNrPFdvcmtlckNvbmZpZywgXCJhY2Nlc3NUb2tlblwiIHwgXCJhY2NvdW50SWRcIiB8IFwicGxhblR5cGVcIj47XG50eXBlIEFjdGl2ZVR1cm5BYm9ydCA9IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG5cbi8vIHRocmVhZC9zdGFydCDqs7XthrUg7Ji17IWYXG5jb25zdCBUSFJFQURfREVGQVVMVFMgPSB7XG4gIHNhbmRib3g6IFwicmVhZC1vbmx5XCIsXG4gIGFwcHJvdmFsUG9saWN5OiBcIm5ldmVyXCIsXG4gIGNvbmZpZzoge1xuICAgIGFwcHM6IHsgX2RlZmF1bHQ6IHsgZW5hYmxlZDogZmFsc2UsIGRlc3RydWN0aXZlX2VuYWJsZWQ6IGZhbHNlLCBvcGVuX3dvcmxkX2VuYWJsZWQ6IGZhbHNlIH0gfSxcbiAgfSxcbn0gc2F0aXNmaWVzIFBhcnRpYWw8VGhyZWFkU3RhcnRQYXJhbXM+O1xuXG5jb25zdCBCQVNFX0lOU1RSVUNUSU9OUyA9XG4gIFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LiBEbyBub3QgdXNlIGFueSB0b29scyBzdWNoIGFzIHNoZWxsLCBmaWxlIG9wZXJhdGlvbnMsIG9yIHdlYiBzZWFyY2guIFJlc3BvbmQgd2l0aCB0ZXh0IG9ubHkuXCI7XG5cbi8vIGNvZGV46rCAIOunpCDsmpTssq3sl5Ag7J6Q64+ZIOyjvOyehe2VmOuKlCDrgrTsnqUgdG9vbChzaGVsbC93ZWJfc2VhcmNoL3NwYXduX2FnZW50IOuTsSAxNOqwnCnqs7xcbi8vIGluc3RydWN0aW9uIOu4lOuhnShwZXJtaXNzaW9ucy9lbnZpcm9ubWVudF9jb250ZXh0L3NraWxscywgfjEwS0Ip7J2EIOu5hO2ZnOyEse2ZlFxuLy8gJENPREVYX0hPTUUvY29uZmlnLnRvbWwg66GcIOyNqOuEo+ycvOuptCBjb2RleCDrtoDtjIUg7IucIHNjYW5cbi8vIO2GteygnOu2iOqwgDogdXBkYXRlX3BsYW4vcmVxdWVzdF91c2VyX2lucHV0XG5jb25zdCBDT0RFWF9DT05GSUdfVE9NTCA9IGB3ZWJfc2VhcmNoID0gXCJkaXNhYmxlZFwiXG5pbmNsdWRlX3Blcm1pc3Npb25zX2luc3RydWN0aW9ucyA9IGZhbHNlXG5pbmNsdWRlX2FwcHNfaW5zdHJ1Y3Rpb25zID0gZmFsc2VcbmluY2x1ZGVfZW52aXJvbm1lbnRfY29udGV4dCA9IGZhbHNlXG5cbltmZWF0dXJlc11cbnNoZWxsX3Rvb2wgPSBmYWxzZVxudG9vbF9zZWFyY2ggPSBmYWxzZVxudG9vbF9zdWdnZXN0ID0gZmFsc2Vcbm11bHRpX2FnZW50ID0gZmFsc2VcbmltYWdlX2dlbmVyYXRpb24gPSBmYWxzZVxuYXBwcyA9IGZhbHNlXG5wbHVnaW5zID0gZmFsc2VcblxuW3Rvb2xzXVxudmlld19pbWFnZSA9IGZhbHNlXG5cbltza2lsbHNdXG5pbmNsdWRlX2luc3RydWN0aW9ucyA9IGZhbHNlXG5gO1xuXG4vLyDilIDilIAgV29ya2VyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgY2xhc3MgQ29kZXhBcHBTZXJ2ZXJXb3JrZXIge1xuICBwcml2YXRlIHByb2M6IENoaWxkUHJvY2VzcyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJwYzogQ29kZXhScGNDbGllbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb2RleEhvbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZXN0YXJ0QXR0ZW1wdHMgPSAwO1xuICBwcml2YXRlIHJlYWR5ID0gZmFsc2U7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG4gIHByaXZhdGUgYnVzeSA9IGZhbHNlO1xuICBwcml2YXRlIGFjdGl2ZVR1cm5BYm9ydD86IEFjdGl2ZVR1cm5BYm9ydDtcbiAgYWN0aXZlID0gdHJ1ZTtcbiAgb25SZWFkeT86ICgpID0+IHZvaWQ7XG4gIC8vIHJlc3RhcnQg7IucIHJwYyDqsJ3ssrTqsIAg7IOI66GcIOyDneyEseuQmOuvgOuhnCwg7ZW465Ok65+s66W8IOuztOq0gO2WiOuLpOqwgCDrp6Qgc3Bhd27rp4jri6Qg7J6s67CU7J2465Sp7ZWc64ukLlxuICBzZXJ2ZXJSZXF1ZXN0SGFuZGxlcj86IChtZXRob2Q6IHN0cmluZywgcGFyYW1zOiB1bmtub3duKSA9PiBQcm9taXNlPHVua25vd24+O1xuXG4gIC8vIHRocmVhZCDsnqzsgqzsmqkocHJvbXB0IGNhY2hlKTogd29ya2VyIOqwgCDsg53shLHtlZwgdGhyZWFkIOuTpOydmCDrqZTtg4AuXG4gIC8vIGVwaGVtZXJhbCB0aHJlYWQg64qUIOydtCDtlITroZzshLjsiqQg66mU66qo66as7JeQ66eMIOyhtOyerO2VmOuvgOuhnCByZXN0YXJ0IOyLnCDsoITrtoAg66y07ZqoLlxuICBwcml2YXRlIHRocmVhZE1ldGEgPSBuZXcgTWFwPHN0cmluZywgeyBsYXN0VXNlZEF0OiBudW1iZXIgfT4oKTtcbiAgLy8gc3Bhd24g7Lm07Jq07YSwLiByZXN0YXJ0IOuniOuLpCDspp3qsIAg4oaSIGNvbnYg7ZW465Ok7J2YIGVwb2NoIOyZgCDrjIDsobDtlbQgc3RhbGUgdGhyZWFkIOqwkOyngC5cbiAgcHJpdmF0ZSBlcG9jaENvdW50ZXIgPSAwO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUSFJFQURfSURMRV9UVExfTVMgPSAxMCAqIDYwXzAwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFYX1RIUkVBRFNfUEVSX1dPUktFUiA9IDE2O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBXb3JrZXJDb25maWcpIHtcbiAgICBjb25zdCBzdWZmaXggPSBjb25maWcud29ya2VySW5kZXggIT09IHVuZGVmaW5lZCA/IGAtJHtjb25maWcud29ya2VySW5kZXh9YCA6IFwiXCI7XG4gICAgdGhpcy5jb2RleEhvbWUgPSBgL3RtcC9xZ3JpZC1jb2RleC8ke2NvbmZpZy50b2tlbklkfSR7c3VmZml4fWA7XG4gIH1cblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgYXN5bmMgc3Bhd25BbmRJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIOyDiCBjb2RleCDtlITroZzshLjsiqQg4oaSIOq4sOyhtCBlcGhlbWVyYWwgdGhyZWFkIOyghOu2gCDrrLTtmqguIGVwb2NoIOymneqwgOuhnCBzdGFsZSDqsJDsp4AuXG4gICAgdGhpcy5lcG9jaENvdW50ZXIrKztcbiAgICB0aGlzLnRocmVhZE1ldGEuY2xlYXIoKTtcbiAgICBjb25zdCBjd2QgPSBgJHt0aGlzLmNvZGV4SG9tZX0vY3dkYDtcbiAgICBta2RpclN5bmMoY3dkLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBjb2RleCDrgrTsnqUgdG9vbC93ZWJfc2VhcmNoL2luc3RydWN0aW9uIOu4lOuhnSDruYTtmZzshLHtmZRcbiAgICB3cml0ZUZpbGVTeW5jKGAke3RoaXMuY29kZXhIb21lfS9jb25maWcudG9tbGAsIENPREVYX0NPTkZJR19UT01MKTtcblxuICAgIHRoaXMucHJvYyA9IHNwYXduKFwiY29kZXhcIiwgW1wiYXBwLXNlcnZlclwiLCBcIi0tbGlzdGVuXCIsIFwic3RkaW86Ly9cIl0sIHtcbiAgICAgIHN0ZGlvOiBbXCJwaXBlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgICBjd2QsXG4gICAgICBlbnY6IHtcbiAgICAgICAgUEFUSDogcHJvY2Vzcy5lbnYuUEFUSCxcbiAgICAgICAgVE1QRElSOiBwcm9jZXNzLmVudi5UTVBESVIsXG4gICAgICAgIENPREVYX0hPTUU6IHRoaXMuY29kZXhIb21lLFxuICAgICAgICAvLyBlbnZpcm9ubWVudCDruYTtmZzshLHtmZQg4oaSIGhhc19lbnZpcm9ubWVudD1mYWxzZSDihpIgc2hlbGwvYXBwbHlfcGF0Y2gvdmlld19pbWFnZSDsoJzqsbBcbiAgICAgICAgQ09ERVhfRVhFQ19TRVJWRVJfVVJMOiBcIm5vbmVcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSBleGl0ZWQgKGNvZGU9JHtjb2RlfSlgKTtcbiAgICAgIHRoaXMuZmFpbEFjdGl2ZVR1cm4oXG4gICAgICAgIG5ldyBFcnJvcihgY29kZXggd29ya2VyIGV4aXRlZCB3aGlsZSB0dXJuIHdhcyBydW5uaW5nIChjb2RlPSR7Y29kZSA/PyBcInVua25vd25cIn0pYCksXG4gICAgICApO1xuICAgICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgICAgdGhpcy5ycGMgPSBudWxsO1xuICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHRoaXMuc2NoZWR1bGVSZXN0YXJ0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJwYyA9IG5ldyBDb2RleFJwY0NsaWVudCh0aGlzLnByb2MpO1xuICAgIC8vIHJlc3RhcnQg7ZuE7JeQ64+EIHJlZnJlc2ggc2VydmVyLXJlcXVlc3Qg7ZW465Ok65+s66W8IOycoOyngCAo7JeG7Jy866m0IGNvZGV4IO2GoO2BsCDtmozsoIQg7Iuk7YyoIOKGkiBzZXNzaW9uIGV4cGlyZWQpXG4gICAgdGhpcy5iaW5kU2VydmVyUmVxdWVzdEhhbmRsZXIoKTtcblxuICAgIGF3YWl0IHRoaXMucnBjLnJlcXVlc3QoXCJpbml0aWFsaXplXCIsIHtcbiAgICAgIGNsaWVudEluZm86IHsgbmFtZTogXCJxZ3JpZFwiLCB2ZXJzaW9uOiBcIjEuMC4wXCIgfSxcbiAgICAgIGNhcGFiaWxpdGllczogeyBleHBlcmltZW50YWxBcGk6IHRydWUgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd2FpdEZvckxvZ2luQ29tcGxldGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKFwibG9naW4gdGltZW91dFwiKSksIDEyMF8wMDApO1xuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiYWNjb3VudC9sb2dpbi9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBpZiAocC5zdWNjZXNzKSByZXNvbHZlKCk7XG4gICAgICAgIGVsc2UgcmVqZWN0KG5ldyBFcnJvcihgbG9naW4gZmFpbGVkOiAke3AuZXJyb3IgPz8gXCJ1bmtub3duXCJ9YCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3Bhd25BbmRJbml0KCk7XG5cbiAgICBhd2FpdCB0aGlzLnJwYyEucmVxdWVzdChcImFjY291bnQvbG9naW4vc3RhcnRcIiwge1xuICAgICAgdHlwZTogXCJjaGF0Z3B0QXV0aFRva2Vuc1wiLFxuICAgICAgYWNjZXNzVG9rZW46IHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuLFxuICAgICAgY2hhdGdwdEFjY291bnRJZDogdGhpcy5jb25maWcuYWNjb3VudElkLFxuICAgICAgLi4uKHRoaXMuY29uZmlnLnBsYW5UeXBlID8geyBjaGF0Z3B0UGxhblR5cGU6IHRoaXMuY29uZmlnLnBsYW5UeXBlIH0gOiB7fSksXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLndhaXRGb3JMb2dpbkNvbXBsZXRlZCgpO1xuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIHRoaXMucmVzdGFydEF0dGVtcHRzID0gMDtcbiAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSByZWFkeWApO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRCcm93c2VyTG9naW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLnNwYXduQW5kSW5pdCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjIS5yZXF1ZXN0PHsgYXV0aFVybDogc3RyaW5nIH0+KFwiYWNjb3VudC9sb2dpbi9zdGFydFwiLCB7XG4gICAgICB0eXBlOiBcImNoYXRncHRcIixcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSBicm93c2VyIGxvZ2luIHN0YXJ0ZWRgKTtcbiAgICByZXR1cm4gcmVzdWx0LmF1dGhVcmw7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yQnJvd3NlckxvZ2luQ29tcGxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yTG9naW5Db21wbGV0ZWQoKTtcbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3RhcnRBdHRlbXB0cyA9IDA7XG4gICAgbG9nZ2VyLmluZm8oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gYnJvd3NlciBsb2dpbiBjb21wbGV0ZWRgKTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRNYW5hZ2VkQ3JlZGVudGlhbHMoKTogUHJvbWlzZTx7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICBpZFRva2VuPzogc3RyaW5nO1xuICAgIGFjY291bnRJZDogc3RyaW5nO1xuICB9IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhgJHt0aGlzLmNvZGV4SG9tZX0vYXV0aC5qc29uYCwgXCJ1dGYtOFwiKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2Nlc3NUb2tlbjogcmF3LnRva2Vucz8uYWNjZXNzX3Rva2VuID8/IFwiXCIsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogcmF3LnRva2Vucz8ucmVmcmVzaF90b2tlbiA/PyBcIlwiLFxuICAgICAgICBpZFRva2VuOiByYXcudG9rZW5zPy5pZF90b2tlbixcbiAgICAgICAgYWNjb3VudElkOiByYXcudG9rZW5zPy5hY2NvdW50X2lkID8/IFwiXCIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMga2lsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuZmFpbEFjdGl2ZVR1cm4obmV3IEVycm9yKFwiY29kZXggd29ya2VyIHN0b3BwZWRcIikpO1xuICAgIHRoaXMucnBjPy5kZXN0cm95KCk7XG5cbiAgICBpZiAodGhpcy5wcm9jKSB7XG4gICAgICB0aGlzLnByb2Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvYz8ua2lsbChcIlNJR0tJTExcIik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCAzXzAwMCk7XG4gICAgICAgIHRoaXMucHJvYyEub24oXCJleGl0XCIsICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcm1TeW5jKHRoaXMuY29kZXhIb21lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkgJiYgIXRoaXMuZGVzdHJveWVkO1xuICB9XG4gIGdldCBpc0Rlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95ZWQ7XG4gIH1cbiAgZ2V0IHRva2VuSWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudG9rZW5JZDtcbiAgfVxuICBnZXQgd29ya2VySW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcud29ya2VySW5kZXggPz8gMDtcbiAgfVxuICBnZXQgdG9rZW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnRva2VuTmFtZTtcbiAgfVxuXG4gIGNhblJldXNlRm9yVG9rZW4oX3Rva2VuTmFtZTogc3RyaW5nLCBjcmVkZW50aWFsczogUmVmcmVzaGFibGVXb3JrZXJDcmVkZW50aWFscyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZy5hY2NvdW50SWQgPT09IGNyZWRlbnRpYWxzLmFjY291bnRJZCAmJlxuICAgICAgKHRoaXMuY29uZmlnLnBsYW5UeXBlID8/IHVuZGVmaW5lZCkgPT09IChjcmVkZW50aWFscy5wbGFuVHlwZSA/PyB1bmRlZmluZWQpXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRva2VuU3RhdGUodG9rZW5OYW1lOiBzdHJpbmcsIGNyZWRlbnRpYWxzOiBSZWZyZXNoYWJsZVdvcmtlckNyZWRlbnRpYWxzKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcudG9rZW5OYW1lID0gdG9rZW5OYW1lO1xuICAgIHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuID0gY3JlZGVudGlhbHMuYWNjZXNzVG9rZW47XG4gICAgdGhpcy5jb25maWcuYWNjb3VudElkID0gY3JlZGVudGlhbHMuYWNjb3VudElkO1xuICAgIGlmIChjcmVkZW50aWFscy5wbGFuVHlwZSkge1xuICAgICAgdGhpcy5jb25maWcucGxhblR5cGUgPSBjcmVkZW50aWFscy5wbGFuVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMuY29uZmlnLnBsYW5UeXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBSYXRlIGxpbWl0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhc3luYyBnZXRSYXRlTGltaXRzKCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHRocm93IG5ldyBFcnJvcihcIndvcmtlciBub3QgcmVhZHlcIik7XG4gICAgcmV0dXJuIHRoaXMucnBjLnJlcXVlc3QoXCJhY2NvdW50L3JhdGVMaW1pdHMvcmVhZFwiLCB7fSk7XG4gIH1cblxuICAvLyDilIDilIAgU2VydmVyLXJlcXVlc3QgZGVsZWdhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBzZXRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcihoYW5kbGVyOiAobWV0aG9kOiBzdHJpbmcsIHBhcmFtczogdW5rbm93bikgPT4gUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuc2VydmVyUmVxdWVzdEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMuYmluZFNlcnZlclJlcXVlc3RIYW5kbGVyKCk7XG4gIH1cblxuICAvLyBzcGF3bkFuZEluaXTsl5DshJwgcnBjIOyDneyEsSDsp4Htm4Qg7Zi47LacLiByZXN0YXJ066GcIHJwY+qwgCDsg4jroZwg66eM65Ok7Ja07KC464+EIO2VuOuTpOufrOqwgCDsnKDsp4DrkJzri6QuXG4gIGJpbmRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcigpOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5zZXJ2ZXJSZXF1ZXN0SGFuZGxlcjtcbiAgICBpZiAoIWhhbmRsZXIpIHJldHVybjtcbiAgICB0aGlzLnJwYz8ub25TZXJ2ZXJSZXF1ZXN0KFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIChwYXJhbXMpID0+XG4gICAgICBoYW5kbGVyKFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIHBhcmFtcyksXG4gICAgKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBUdXJuIGV4ZWN1dGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICB0cnlBY3F1aXJlVHVybigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5idXN5KSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZWxlYXNlVHVybigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgfVxuICBnZXQgaGFzQ2FwYWNpdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmJ1c3k7XG4gIH1cblxuICAvLyDsg4ggdGhyZWFkIOyDneyEsSAodGhyZWFkL3N0YXJ0ICsg7ZWE7JqUIOyLnCBoaXN0b3J5IGluamVjdCkuIOyyqyB0dXJuIC8g7Y+067CxIOqyveuhnOyaqS5cbiAgLy8g7ZuE7IaNIHR1cm4g7J2AIGNyZWF0ZVRocmVhZCDsl4bsnbQgc3RhcnRUdXJuT25UaHJlYWQg66eMIO2YuOy2nO2VtCBjb252ZXJzYXRpb25faWQg66W8IOqzoOygle2VnOuLpC5cbiAgLy8gdGhyZWFkIOydmCDquLDrs7ggbW9kZWwg64+EIOuwmO2ZmCAocmVxLm1vZGVsIOuvuOyngOyglSDsi5wgZmFsbGJhY2spLlxuICBhc3luYyBjcmVhdGVUaHJlYWQocmVxOiBUdXJuUmVxdWVzdCk6IFByb21pc2U8eyB0aHJlYWRJZDogc3RyaW5nOyBtb2RlbDogc3RyaW5nIH0+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JrZXIgbm90IHJlYWR5XCIpO1xuICAgIHRoaXMuc3dlZXBJZGxlVGhyZWFkcygpO1xuXG4gICAgY29uc3QgdGhyZWFkQ29uZmlnOiBUaHJlYWRTdGFydFBhcmFtc1tcImNvbmZpZ1wiXSA9IHtcbiAgICAgIC4uLlRIUkVBRF9ERUZBVUxUUy5jb25maWcsXG4gICAgICAuLi4ocmVxLnZlcmJvc2l0eSA/IHsgbW9kZWxfdmVyYm9zaXR5OiByZXEudmVyYm9zaXR5IH0gOiB7fSksXG4gICAgfTtcbiAgICBjb25zdCB7IHRocmVhZCwgbW9kZWw6IHRocmVhZE1vZGVsIH0gPSBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0PFRocmVhZFN0YXJ0UmVzcG9uc2U+KFxuICAgICAgXCJ0aHJlYWQvc3RhcnRcIixcbiAgICAgIHtcbiAgICAgICAgZXBoZW1lcmFsOiB0cnVlLFxuICAgICAgICBjd2Q6IGAke3RoaXMuY29kZXhIb21lfS9jd2RgLFxuICAgICAgICBiYXNlSW5zdHJ1Y3Rpb25zOiBCQVNFX0lOU1RSVUNUSU9OUyxcbiAgICAgICAgZGV2ZWxvcGVySW5zdHJ1Y3Rpb25zOiByZXEuZGV2ZWxvcGVySW5zdHJ1Y3Rpb25zID8/IFwiXCIsXG4gICAgICAgIHNhbmRib3g6IFRIUkVBRF9ERUZBVUxUUy5zYW5kYm94LFxuICAgICAgICBhcHByb3ZhbFBvbGljeTogVEhSRUFEX0RFRkFVTFRTLmFwcHJvdmFsUG9saWN5LFxuICAgICAgICBjb25maWc6IHRocmVhZENvbmZpZyxcbiAgICAgIH0gc2F0aXNmaWVzIFBhcnRpYWw8VGhyZWFkU3RhcnRQYXJhbXM+LFxuICAgICk7XG5cbiAgICBjb25zdCB0aHJlYWRJZCA9IHRocmVhZC5pZDtcbiAgICBpZiAocmVxLmhpc3Rvcnk/Lmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5ycGMucmVxdWVzdChcInRocmVhZC9pbmplY3RfaXRlbXNcIiwge1xuICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgaXRlbXM6IHJlcS5oaXN0b3J5LFxuICAgICAgfSBzYXRpc2ZpZXMgVGhyZWFkSW5qZWN0SXRlbXNQYXJhbXMpO1xuICAgIH1cbiAgICB0aGlzLnRocmVhZE1ldGEuc2V0KHRocmVhZElkLCB7IGxhc3RVc2VkQXQ6IERhdGUubm93KCkgfSk7XG5cbiAgICByZXR1cm4geyB0aHJlYWRJZCwgbW9kZWw6IHJlcS5tb2RlbCA/PyB0aHJlYWRNb2RlbCB9O1xuICB9XG5cbiAgLy8g6riw7KG0IHRocmVhZCDsl5AgdHVybiDrp4wg7Iuk7ZaJIChpbmplY3Qg7JeG7J2MKS4gY29udmVyc2F0aW9uX2lkIOycoOyngCDihpIgcHJvbXB0IGNhY2hlIOyggeykkS5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydFR1cm5PblRocmVhZCh0aHJlYWRJZDogc3RyaW5nLCByZXE6IFR1cm5SZXF1ZXN0KTogUHJvbWlzZTx7IHR1cm5JZDogc3RyaW5nIH0+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JrZXIgbm90IHJlYWR5XCIpO1xuXG4gICAgY29uc3QgeyB0dXJuIH0gPSBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0PFR1cm5TdGFydFJlc3BvbnNlPihcInR1cm4vc3RhcnRcIiwge1xuICAgICAgdGhyZWFkSWQsXG4gICAgICBpbnB1dDogcmVxLmlucHV0LFxuICAgICAgLi4uKHJlcS5vdXRwdXRTY2hlbWEgPyB7IG91dHB1dFNjaGVtYTogcmVxLm91dHB1dFNjaGVtYSB9IDoge30pLFxuICAgICAgLi4uKHJlcS5lZmZvcnQgPyB7IGVmZm9ydDogcmVxLmVmZm9ydCB9IDoge30pLFxuICAgICAgLi4uKHJlcS5tb2RlbCA/IHsgbW9kZWw6IHJlcS5tb2RlbCB9IDoge30pLFxuICAgICAgLi4uKHJlcS5yZWFzb25pbmdTdW1tYXJ5ID8geyBzdW1tYXJ5OiByZXEucmVhc29uaW5nU3VtbWFyeSB9IDoge30pLFxuICAgICAgLi4uKHJlcS5zZXJ2aWNlVGllciA/IHsgc2VydmljZVRpZXI6IHJlcS5zZXJ2aWNlVGllciB9IDoge30pLFxuICAgIH0pO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnRocmVhZE1ldGEuZ2V0KHRocmVhZElkKTtcbiAgICBpZiAobWV0YSkgbWV0YS5sYXN0VXNlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4geyB0dXJuSWQ6IHR1cm4uaWQgfTtcbiAgfVxuXG4gIC8vIGV4aXN0aW5nVGhyZWFkSWQg7J6I7Jy866m0IOq3uCB0aHJlYWQg7J6s7IKs7JqpKO2bhOyGjSB0dXJuKSwg7JeG7Jy866m0IOyDiCB0aHJlYWQg7IOd7ISxKOyyqyB0dXJuKS5cbiAgLy8g7Zi47LacIO2bhCDsgqzsmqntlZwgdGhyZWFkSWQg66W8IOuwmO2ZmO2VtCBkaXNwYXRjaGVyIOqwgCBjb252IO2VuOuTpOydhCDrsJzquIntlZzri6QuXG4gIGFzeW5jIGV4ZWN1dGVUdXJuKFxuICAgIHJlcTogVHVyblJlcXVlc3QsXG4gICAgZXhpc3RpbmdUaHJlYWRJZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxUdXJuUmVzdWx0ICYgeyB0aHJlYWRJZDogc3RyaW5nIH0+IHtcbiAgICBsZXQgdGhyZWFkSWQ6IHN0cmluZztcbiAgICBsZXQgbW9kZWw6IHN0cmluZztcbiAgICBpZiAoZXhpc3RpbmdUaHJlYWRJZCkge1xuICAgICAgdGhyZWFkSWQgPSBleGlzdGluZ1RocmVhZElkO1xuICAgICAgbW9kZWwgPSByZXEubW9kZWwgPz8gXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgKHsgdGhyZWFkSWQsIG1vZGVsIH0gPSBhd2FpdCB0aGlzLmNyZWF0ZVRocmVhZChyZXEpKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5zdGFydFR1cm5PblRocmVhZCh0aHJlYWRJZCwgcmVxKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbnN1bWVUdXJuTm90aWZpY2F0aW9ucyh0aHJlYWRJZCwgbW9kZWwpO1xuICAgIHJldHVybiB7IC4uLnJlc3VsdCwgdGhyZWFkSWQgfTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVUdXJuU3RyZWFtKFxuICAgIHJlcTogVHVyblJlcXVlc3QsXG4gICAgY2I6IFN0cmVhbUNhbGxiYWNrcyxcbiAgICBleGlzdGluZ1RocmVhZElkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgdGhyZWFkSWQ6IHN0cmluZyB9PiB7XG4gICAgbGV0IHRocmVhZElkOiBzdHJpbmc7XG4gICAgbGV0IG1vZGVsOiBzdHJpbmc7XG4gICAgaWYgKGV4aXN0aW5nVGhyZWFkSWQpIHtcbiAgICAgIHRocmVhZElkID0gZXhpc3RpbmdUaHJlYWRJZDtcbiAgICAgIG1vZGVsID0gcmVxLm1vZGVsID8/IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICh7IHRocmVhZElkLCBtb2RlbCB9ID0gYXdhaXQgdGhpcy5jcmVhdGVUaHJlYWQocmVxKSk7XG4gICAgfVxuICAgIGNvbnN0IHsgdHVybklkIH0gPSBhd2FpdCB0aGlzLnN0YXJ0VHVybk9uVGhyZWFkKHRocmVhZElkLCByZXEpO1xuICAgIGNiLm9uVGhyZWFkSWQ/Lih0aHJlYWRJZCk7XG4gICAgY2Iub25UdXJuSWQ/Lih0dXJuSWQpO1xuICAgIGF3YWl0IHRoaXMuY29uc3VtZVN0cmVhbU5vdGlmaWNhdGlvbnModGhyZWFkSWQsIG1vZGVsLCBjYik7XG4gICAgcmV0dXJuIHsgdGhyZWFkSWQgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCB0aHJlYWQg7J6s7IKs7JqpIOyngOybkCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBnZXQgZXBvY2goKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lcG9jaENvdW50ZXI7XG4gIH1cblxuICBoYXNUaHJlYWQodGhyZWFkSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRocmVhZE1ldGEuaGFzKHRocmVhZElkKTtcbiAgfVxuXG4gIC8vIGlkbGUgVFRMIOy0iOqzvCAvIOqwnOyImCDsg4HtlZwg7LSI6rO8IHRocmVhZCDrpbwg7KCV66asLiBjcmVhdGVUaHJlYWQg7KeB7KCEIGxhenkg7Zi47LacLlxuICAvLyBjb2RleCBlcGhlbWVyYWwgdGhyZWFkIOuKlCDrqoXsi5zsoIEgY2xvc2UgUlBDIOyXhuydtCDrp7Xsl5DshJwg7KCc6rGwIOKGkiDrjZQg7J207IOBIHR1cm4g7JWIIOuztOuDhC5cbiAgc3dlZXBJZGxlVGhyZWFkcygpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgW2lkLCBtZXRhXSBvZiB0aGlzLnRocmVhZE1ldGEpIHtcbiAgICAgIGlmIChub3cgLSBtZXRhLmxhc3RVc2VkQXQgPiBDb2RleEFwcFNlcnZlcldvcmtlci5USFJFQURfSURMRV9UVExfTVMpIHtcbiAgICAgICAgdGhpcy50aHJlYWRNZXRhLmRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNyZWF0ZVRocmVhZCDsp4HsoIQg7Zi47LacIOKGkiDsg4ggdGhyZWFkIDEg6rCc6rCAIOqzpyDstpTqsIDrkJzri6QuIOy2lOqwgCDtm4Tsl5Drj4QgTUFYIOulvCDrhJjsp4Ag7JWK64+E66GdXG4gICAgLy8gTUFYLTEg7J207ZWY66GcIOykhOyXrCDrkZTri6Qo6re4656Y7JW8IOyDneyEsSDsp4Htm4Qg7KCV7ZmV7Z6IIE1BWCkuIExSVTogbGFzdFVzZWRBdCDsmKTrpoTssKjsiJzsnLzroZwg7KCc6rGwLlxuICAgIGNvbnN0IGxpbWl0ID0gQ29kZXhBcHBTZXJ2ZXJXb3JrZXIuTUFYX1RIUkVBRFNfUEVSX1dPUktFUiAtIDE7XG4gICAgaWYgKHRoaXMudGhyZWFkTWV0YS5zaXplID4gbGltaXQpIHtcbiAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi50aGlzLnRocmVhZE1ldGEuZW50cmllcygpXS50b1NvcnRlZChcbiAgICAgICAgKGEsIGIpID0+IGFbMV0ubGFzdFVzZWRBdCAtIGJbMV0ubGFzdFVzZWRBdCxcbiAgICAgICk7XG4gICAgICBjb25zdCBvdmVyID0gdGhpcy50aHJlYWRNZXRhLnNpemUgLSBsaW1pdDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3ZlcjsgaSsrKSB0aGlzLnRocmVhZE1ldGEuZGVsZXRlKHNvcnRlZFtpXSFbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGludGVycnVwdFR1cm4odGhyZWFkSWQ6IHN0cmluZywgdHVybklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucnBjLnJlcXVlc3QoXCJ0dXJuL2ludGVycnVwdFwiLCB7IHRocmVhZElkLCB0dXJuSWQgfSk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgcHJpdmF0ZSBmYWlsQWN0aXZlVHVybihlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBjb25zdCBhYm9ydCA9IHRoaXMuYWN0aXZlVHVybkFib3J0O1xuICAgIHRoaXMuYWN0aXZlVHVybkFib3J0ID0gdW5kZWZpbmVkO1xuICAgIGFib3J0Py4oZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lVHVybk5vdGlmaWNhdGlvbnModGhyZWFkSWQ6IHN0cmluZywgbW9kZWw6IHN0cmluZyk6IFByb21pc2U8VHVyblJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUdXJuUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGFib3J0OiBBY3RpdmVUdXJuQWJvcnQ7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZpbmlzaFdpdGhFcnJvcihuZXcgRXJyb3IoXCJ0dXJuIHRpbWVvdXQgKDYwMHMpXCIpKTtcbiAgICAgIH0sIDYwMF8wMDApO1xuXG4gICAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgICBsZXQgdXNhZ2U6IFRva2VuVXNhZ2VCcmVha2Rvd24gPSB7XG4gICAgICAgIHRvdGFsVG9rZW5zOiAwLFxuICAgICAgICBpbnB1dFRva2VuczogMCxcbiAgICAgICAgb3V0cHV0VG9rZW5zOiAwLFxuICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogMCxcbiAgICAgICAgcmVhc29uaW5nT3V0cHV0VG9rZW5zOiAwLFxuICAgICAgfTtcbiAgICAgIGxldCBkdXJhdGlvbk1zID0gMDtcblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVUdXJuQWJvcnQgPT09IGFib3J0KSB0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIFtcbiAgICAgICAgICBcIml0ZW0vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLFxuICAgICAgICAgIFwidHVybi9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgICB0aGlzLnJwYz8ub25Ob3RpZmljYXRpb24obiwgKCkgPT4ge30pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5pc2hXaXRoRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5pc2hXaXRoUmVzdWx0ID0gKHJlc3VsdDogVHVyblJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9O1xuXG4gICAgICBhYm9ydCA9IGZpbmlzaFdpdGhFcnJvcjtcbiAgICAgIHRoaXMuYWN0aXZlVHVybkFib3J0ID0gYWJvcnQ7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC5pdGVtLnR5cGUgPT09IFwiYWdlbnRNZXNzYWdlXCIpIHRleHQgPSBwLml0ZW0udGV4dDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0aHJlYWQvdG9rZW5Vc2FnZS91cGRhdGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICAvLyB0aHJlYWQg7J6s7IKs7JqpIOyLnCAudG90YWwg7J2AIOuMgO2ZlCDsoITssrQg64iE7KCB7J206528LCBjb2xkIOyYgOuNmCDsnbTsoIQgdHVybiDquYzsp4Ag7ISe7JesXG4gICAgICAgIC8vIOydtCDsmpTssq0g7J6Q7LK07J2YIGNhY2hlIOyggeykkeuloOydtCDtnazshJ3rkJzri6Qo7JiIOiB0dXJuMSBjb2xkIDAlICsgdHVybjIgOTAlIOKGkiA0OCUg66GcIOq4sOuhnSkuXG4gICAgICAgIC8vIC5sYXN0IOuKlCDsnbTrsoggdHVybiDrp4zsnZggdXNhZ2Ug6528IHJlcXVlc3RfbG9nIOqwgCDqt7gg7JqU7LKt7J2YIOyLpOygnCDthqDtgbDsnYQg7KCV7ZmV7Z6IIOuwmOyYge2VnOuLpC5cbiAgICAgICAgdXNhZ2UgPSBwLnRva2VuVXNhZ2UubGFzdDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0dXJuL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgZHVyYXRpb25NcyA9IHAudHVybi5kdXJhdGlvbk1zID8/IDA7XG4gICAgICAgIGlmIChwLnR1cm4uc3RhdHVzID09PSBcImNvbXBsZXRlZFwiKSBmaW5pc2hXaXRoUmVzdWx0KHsgdGV4dCwgdXNhZ2UsIGR1cmF0aW9uTXMsIG1vZGVsIH0pO1xuICAgICAgICBlbHNlIGZpbmlzaFdpdGhFcnJvcihuZXcgRXJyb3IoYHR1cm4gZmFpbGVkOiAke0pTT04uc3RyaW5naWZ5KHAudHVybi5lcnJvcil9YCkpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcImVycm9yXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXAud2lsbFJldHJ5KSB7XG4gICAgICAgICAgZmluaXNoV2l0aEVycm9yKG5ldyBFcnJvcihgY29kZXggZXJyb3I6ICR7cC5lcnJvci5tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVTdHJlYW1Ob3RpZmljYXRpb25zKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgbW9kZWw6IHN0cmluZyxcbiAgICBjYjogU3RyZWFtQ2FsbGJhY2tzLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgIGxldCBhYm9ydDogQWN0aXZlVHVybkFib3J0O1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKFwidHVybiB0aW1lb3V0ICg2MDBzKVwiKSk7XG4gICAgICB9LCA2MDBfMDAwKTtcblxuICAgICAgbGV0IHRleHQgPSBcIlwiO1xuICAgICAgbGV0IHVzYWdlOiBUb2tlblVzYWdlQnJlYWtkb3duID0ge1xuICAgICAgICB0b3RhbFRva2VuczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIG91dHB1dFRva2VuczogMCxcbiAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIHJlYXNvbmluZ091dHB1dFRva2VuczogMCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVHVybkFib3J0ID09PSBhYm9ydCkgdGhpcy5hY3RpdmVUdXJuQWJvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBbXG4gICAgICAgICAgXCJpdGVtL2NvbXBsZXRlZFwiLFxuICAgICAgICAgIFwiaXRlbS9hZ2VudE1lc3NhZ2UvZGVsdGFcIixcbiAgICAgICAgICBcInR1cm4vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJ0aHJlYWQvdG9rZW5Vc2FnZS91cGRhdGVkXCIsXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICBdIGFzIGNvbnN0KSB7XG4gICAgICAgICAgdGhpcy5ycGM/Lm9uTm90aWZpY2F0aW9uKG4sICgpID0+IHt9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluaXNoV2l0aEVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICBjYi5vbkVycm9yKGVycm9yKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbmlzaFdpdGhDb21wbGV0ZSA9IChyZXN1bHQ6IFR1cm5SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgY2Iub25Db21wbGV0ZShyZXN1bHQpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICBhYm9ydCA9IGZpbmlzaFdpdGhFcnJvcjtcbiAgICAgIHRoaXMuYWN0aXZlVHVybkFib3J0ID0gYWJvcnQ7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vYWdlbnRNZXNzYWdlL2RlbHRhXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICB0ZXh0ICs9IHAuZGVsdGE7XG4gICAgICAgIGNiLm9uRGVsdGEocC5kZWx0YSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiaXRlbS9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmIChwLml0ZW0udHlwZSA9PT0gXCJhZ2VudE1lc3NhZ2VcIikgdGV4dCA9IHAuaXRlbS50ZXh0O1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIC8vIHRocmVhZCDsnqzsgqzsmqkg7IucIC50b3RhbCDsnYAg64yA7ZmUIOyghOyytCDriITsoIHsnbTrnbwsIGNvbGQg7JiA642YIOydtOyghCB0dXJuIOq5jOyngCDshJ7sl6xcbiAgICAgICAgLy8g7J20IOyalOyyrSDsnpDssrTsnZggY2FjaGUg7KCB7KSR66Wg7J20IO2drOyEneuQnOuLpCjsmIg6IHR1cm4xIGNvbGQgMCUgKyB0dXJuMiA5MCUg4oaSIDQ4JSDroZwg6riw66GdKS5cbiAgICAgICAgLy8gLmxhc3Qg64qUIOydtOuyiCB0dXJuIOunjOydmCB1c2FnZSDrnbwgcmVxdWVzdF9sb2cg6rCAIOq3uCDsmpTssq3snZgg7Iuk7KCcIO2GoO2BsOydhCDsoJXtmZXtnogg67CY7JiB7ZWc64ukLlxuICAgICAgICB1c2FnZSA9IHAudG9rZW5Vc2FnZS5sYXN0O1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcInR1cm4vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC50dXJuLnN0YXR1cyA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgIGZpbmlzaFdpdGhDb21wbGV0ZSh7IHRleHQsIHVzYWdlLCBkdXJhdGlvbk1zOiBwLnR1cm4uZHVyYXRpb25NcyA/PyAwLCBtb2RlbCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKGB0dXJuICR7cC50dXJuLnN0YXR1c306ICR7SlNPTi5zdHJpbmdpZnkocC50dXJuLmVycm9yKX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJlcnJvclwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKCFwLndpbGxSZXRyeSkge1xuICAgICAgICAgIGZpbmlzaFdpdGhFcnJvcihuZXcgRXJyb3IoYGNvZGV4IGVycm9yOiAke3AuZXJyb3IubWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJlc3RhcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVJlc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IHRoaXMucmVzdGFydEF0dGVtcHRzID49IE1BWF9SRVNUQVJUX0FUVEVNUFRTKSB7XG4gICAgICBpZiAodGhpcy5yZXN0YXJ0QXR0ZW1wdHMgPj0gTUFYX1JFU1RBUlRfQVRURU1QVFMpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gbWF4IHJlc3RhcnQgYXR0ZW1wdHMgcmVhY2hlZGApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzdGFydEF0dGVtcHRzKys7XG4gICAgY29uc3QgYmFzZURlbGF5ID0gUkVTVEFSVF9CQUNLT0ZGX0JBU0VfTVMgKiAyICoqICh0aGlzLnJlc3RhcnRBdHRlbXB0cyAtIDEpO1xuICAgIGNvbnN0IHN0YWdnZXIgPSAodGhpcy5jb25maWcud29ya2VySW5kZXggPz8gMCkgKiAyXzAwMDtcbiAgICBjb25zdCBkZWxheSA9IGJhc2VEZWxheSArIHN0YWdnZXI7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfVske3RoaXMuY29uZmlnLndvcmtlckluZGV4ID8/IDB9XSByZXN0YXJ0aW5nIGluICR7ZGVsYXl9bXMgKGF0dGVtcHQgJHt0aGlzLnJlc3RhcnRBdHRlbXB0c30pYCxcbiAgICApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMub25SZWFkeT8uKCkpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IHJlc3RhcnQgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVSZXN0YXJ0KCk7XG4gICAgICAgIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFhQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsZUFBZSxDQUFDO0FBRW5E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
|