@blokjs/trigger-mcp 1.1.0 → 1.3.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.
Files changed (2) hide show
  1. package/dist/McpTrigger.js +20 -2
  2. package/package.json +4 -4
@@ -311,7 +311,25 @@ export default class McpTrigger extends TriggerBase {
311
311
  span.setAttribute("workflow_name", workflowName);
312
312
  span.setAttribute("mcp_label", spanLabel);
313
313
  span.setStatus({ code: SpanStatusCode.OK });
314
- return ctx.response?.data;
314
+ const data = ctx.response?.data;
315
+ // #436 — when BLOK_VALIDATE_WORKFLOW_OUTPUT is on, validate the result
316
+ // against the workflow's declared `output` Zod (reached via `_config`,
317
+ // same as the tool inputSchema derivation). A failure THROWS, which
318
+ // dispatchTool turns into a proper MCP error result (isError:true) —
319
+ // never a raw 500 / transport crash. No declared output → pass through.
320
+ const validateOutput = process.env.BLOK_VALIDATE_WORKFLOW_OUTPUT === "1" || process.env.BLOK_VALIDATE_WORKFLOW_OUTPUT === "true";
321
+ if (validateOutput) {
322
+ const wf = entry.workflow?._config ?? entry.workflow;
323
+ const outputZod = wf?.output;
324
+ if (outputZod && typeof outputZod.safeParse === "function") {
325
+ const parsed = outputZod.safeParse(data);
326
+ if (!parsed.success) {
327
+ throw new Error(`workflow "${workflowName}" output failed validation against workflow.output: ${parsed.error?.message ?? "invalid output"}`);
328
+ }
329
+ return parsed.data;
330
+ }
331
+ }
332
+ return data;
315
333
  }
316
334
  catch (err) {
317
335
  const msg = err instanceof Error ? err.message : String(err);
@@ -420,4 +438,4 @@ export function _setActiveMcpTrigger(trigger) {
420
438
  export function _getActiveMcpTrigger() {
421
439
  return activeTrigger;
422
440
  }
423
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWNwVHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9NY3BUcmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlDRztBQUdILE9BQU8sRUFDTixhQUFhLEVBRWIsV0FBVyxFQUNYLGdCQUFnQixHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDekgsT0FBTyxFQUNOLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsc0JBQXNCLEVBQ3RCLHlCQUF5QixHQUN6QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBYSxjQUFjLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW9FckQsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7QUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUM7QUFDdkMsTUFBTSxrQkFBa0IsR0FBdUIsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUUxRSxnRkFBZ0Y7QUFDaEYsVUFBVTtBQUNWLGdGQUFnRjtBQUVoRiw0RkFBNEY7QUFDNUYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWdDO0lBQ2hFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtB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TUFBTSxVQUFVLG9CQUFvQjtJQUNuQyxPQUFPLGFBQWEsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNY3BUcmlnZ2VyIOKAlCBNb2RlbCBDb250ZXh0IFByb3RvY29sIHRyaWdnZXIuIEV4cG9zZXMgQmxvayB3b3JrZmxvd3MgYXNcbiAqIE1DUCAqKnRvb2xzKiogKGFuZCAqKnJlc291cmNlcyoqKSB0byBleHRlcm5hbCBjbGllbnRzIChDdXJzb3IsIENsYXVkZVxuICogQ29kZSwg4oCmKSBvdmVyIHR3byB0cmFuc3BvcnRzIG11bHRpcGxleGVkIG9uIHRoZSBzaGFyZWQgSG9ubyBwb3J0OlxuICpcbiAqICAgLSAqKlNTRSAobGVnYWN5IDIwMjQtMTEtMDUpKiog4oCUIGBHRVQgPHBhdGg+L3NzZWAgb3BlbnMgdGhlIHN0cmVhbSBhbmRcbiAqICAgICBhbm5vdW5jZXMgYFBPU1QgPHBhdGg+L21lc3NhZ2VzP3Nlc3Npb25JZD3igKZgIGZvciBKU09OLVJQQy4gVGhpcyBpcyB0aGVcbiAqICAgICAyLWVuZHBvaW50IHNoYXBlIGV4aXN0aW5nIElERSBjb25maWdzIGV4cGVjdCAoZHJvcC1pbiBwYXJpdHkpLlxuICogICAtICoqU3RyZWFtYWJsZS1IVFRQKiog4oCUIGEgc2luZ2xlIGA8cGF0aD5gIGVuZHBvaW50ICh0aGUgY3VycmVudCBvZmZpY2lhbFxuICogICAgIHJlbW90ZSB0cmFuc3BvcnQpLCBzZXJ2ZWQgc3RhdGVsZXNzbHkgdmlhIHRoZSBTREsncyB3ZWItc3RhbmRhcmRcbiAqICAgICB0cmFuc3BvcnQgZGlyZWN0bHkgb2ZmIGBjLnJlcS5yYXdgLlxuICpcbiAqICoqQXV0aG9yaW5nIHN1cmZhY2UqKiDigJQgYSB3b3JrZmxvdyBvcHRzIGluIHdpdGggYHRyaWdnZXIubWNwYDpcbiAqXG4gKiBgYGB0c1xuICogZXhwb3J0IGRlZmF1bHQgd29ya2Zsb3coe1xuICogICBuYW1lOiBcInNlYXJjaF9jb2RlXCIsXG4gKiAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAqICAgaW5wdXQ6IHoub2JqZWN0KHsgcXVlcnk6IHouc3RyaW5nKCksIGxpbWl0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCkgfSksXG4gKiAgIHRyaWdnZXI6IHsgbWNwOiB7IHBhdGg6IFwiL21jcFwiLCBzZXJ2ZXJOYW1lOiBcInRldHJpeC1wbGF0Zm9ybVwiLFxuICogICAgICAgICAgICAgICAgICAgICB0b29sOiB7IGRlc2NyaXB0aW9uOiBcIkZ1bGwtdGV4dCBzZWFyY2ggdGhlIGluZGV4ZWQgY29kZVwiIH0gfSB9LFxuICogICBzdGVwczogWyB7IGlkOiBcInNlYXJjaFwiLCB1c2U6IFwiQHRldHJpeC9tZWlsaS1zZWFyY2hcIiwgaW5wdXRzOiB7IHF1ZXJ5OiAkLnJlcS5ib2R5LnF1ZXJ5IH0gfSBdLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBFdmVyeSB3b3JrZmxvdyBzaGFyaW5nIHRoZSBzYW1lIGBwYXRoYCArIGBzZXJ2ZXJOYW1lYCBpcyBhZ2dyZWdhdGVkIGludG8gb25lXG4gKiBNQ1Agc2VydmVyLiBFYWNoIHRvb2wncyBgaW5wdXRTY2hlbWFgIGlzIGdlbmVyYXRlZCBmcm9tIHRoZSB3b3JrZmxvdydzIGBpbnB1dGBcbiAqIFpvZCBzY2hlbWEgKHZpYSB6b2QtdG8tanNvbi1zY2hlbWEpLiBPbiBgdG9vbHMvY2FsbGAgdGhlIHRyaWdnZXIgcnVucyB0aGVcbiAqIG1hcHBlZCB3b3JrZmxvdyB0aHJvdWdoIHRoZSBydW5uZXIg4oCUIHNvIGV2ZXJ5IGNhbGwgaXMgYSBCbG9rIFN0dWRpbyBydW4gd2l0aFxuICogdHJhY2luZyAvIHJldHJpZXMgLyBpZGVtcG90ZW5jeSBmb3IgZnJlZS5cbiAqXG4gKiAqKkhvbm8gaW50ZWdyYXRpb246KiogaWRlbnRpY2FsIHRvIGBTU0VUcmlnZ2VyYC9gV2ViaG9va1RyaWdnZXJgIOKAlCBhY2NlcHRzIHRoZVxuICogc2hhcmVkIGBIb25vYCBhcHAgKyBhbiBvcHRpb25hbCBgSHR0cFRyaWdnZXJMaWtlYCBleHBvc2luZyBgYWRkUHJlQ2F0Y2hBbGxIb29rYFxuICogc28gcm91dGVzIHJlZ2lzdGVyIEFGVEVSIHRoZSB3b3JrZmxvdyByZWdpc3RyeSBpcyBwb3B1bGF0ZWQgYnV0IEJFRk9SRSB0aGVcbiAqIGxlZ2FjeSBgLzp3b3JrZmxvd3suK31gIGNhdGNoLWFsbC5cbiAqXG4gKiAqKklkZW50aXR5OioqIGFuIGB4LXVzZXItY29udGV4dGAgaGVhZGVyIChvciBgP3VzZXJfY29udGV4dD1gKSBjYXJyeWluZyBiYXNlNjRcbiAqIGB7dXNlcklkLGVtYWlsfWAgaXMgcGFyc2VkIHBlciBjb25uZWN0aW9uIGFuZCBwYXNzZWQgdG8gdGhlIHdvcmtmbG93IGN0eCBmb3JcbiAqIGNyZWRlbnRpYWwgaW5qZWN0aW9uLiBJdCBpcyBOT1QgYWNjZXNzIGNvbnRyb2wg4oCUIHRoZXJlIGlzIG5vIHNjb3BpbmcgaGVyZVxuICogKHRoYXQncyB0aGUgYXBwJ3MgY2FsbCkuIFRva2VucyBhcmUgbmV2ZXIgbG9nZ2VkICh0aGUgZ2xvYmFsIHNhbml0aXplciBtaWRkbGV3YXJlXG4gKiBoYW5kbGVzIHJlZGFjdGlvbikuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSBcIm5vZGU6aHR0cFwiO1xuaW1wb3J0IHtcblx0RGVmYXVsdExvZ2dlcixcblx0dHlwZSBHbG9iYWxPcHRpb25zIGFzIFJ1bm5lckdsb2JhbE9wdGlvbnMsXG5cdFRyaWdnZXJCYXNlLFxuXHRXb3JrZmxvd1JlZ2lzdHJ5LFxufSBmcm9tIFwiQGJsb2tqcy9ydW5uZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCwgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQGJsb2tqcy9zaGFyZWRcIjtcbmltcG9ydCB7IFJFU1BPTlNFX0FMUkVBRFlfU0VOVCB9IGZyb20gXCJAaG9uby9ub2RlLXNlcnZlci91dGlscy9yZXNwb25zZVwiO1xuaW1wb3J0IHsgU2VydmVyIGFzIE1jcFNka1NlcnZlciB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU1NFU2VydmVyVHJhbnNwb3J0IH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3NzZS5qc1wiO1xuaW1wb3J0IHsgV2ViU3RhbmRhcmRTdHJlYW1hYmxlSFRUUFNlcnZlclRyYW5zcG9ydCB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci93ZWJTdGFuZGFyZFN0cmVhbWFibGVIdHRwLmpzXCI7XG5pbXBvcnQge1xuXHRDYWxsVG9vbFJlcXVlc3RTY2hlbWEsXG5cdExpc3RSZXNvdXJjZXNSZXF1ZXN0U2NoZW1hLFxuXHRMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hLFxuXHRSZWFkUmVzb3VyY2VSZXF1ZXN0U2NoZW1hLFxufSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qc1wiO1xuaW1wb3J0IHsgdHlwZSBTcGFuLCBTcGFuU3RhdHVzQ29kZSwgbWV0cmljcywgdHJhY2UgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvYXBpXCI7XG5pbXBvcnQgdHlwZSB7IEhvbm8sIENvbnRleHQgYXMgSG9ub0NvbnRleHQgfSBmcm9tIFwiaG9ub1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyB6b2RUb0pzb25TY2hlbWEgfSBmcm9tIFwiem9kLXRvLWpzb24tc2NoZW1hXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUeXBlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFBhcnNlZCBgeC11c2VyLWNvbnRleHRgIGlkZW50aXR5IChjcmVkZW50aWFsIGluamVjdGlvbiBvbmx5IOKAlCBuZXZlciBzY29waW5nKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWNwVXNlckNvbnRleHQge1xuXHR1c2VySWQ6IHN0cmluZztcblx0ZW1haWw6IHN0cmluZztcbn1cblxudHlwZSBNY3BUcmFuc3BvcnRLaW5kID0gXCJzc2VcIiB8IFwic3RyZWFtYWJsZS1odHRwXCI7XG5cbmludGVyZmFjZSBNY3BUb29sTWV0YSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIE1jcFJlc291cmNlTWV0YSB7XG5cdHVyaTogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0bWltZVR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKiBMb29zZWx5LXJlYWQgYHRyaWdnZXIubWNwYCBjb25maWcgKHZhbGlkYXRlZCBhdCB3b3JrZmxvdyBsb2FkIGJ5IHRoZSBoZWxwZXIpLiAqL1xuaW50ZXJmYWNlIE1jcFRyaWdnZXJDb25maWcge1xuXHRwYXRoOiBzdHJpbmc7XG5cdHNlcnZlck5hbWU/OiBzdHJpbmc7XG5cdHNlcnZlclZlcnNpb24/OiBzdHJpbmc7XG5cdHRyYW5zcG9ydHM/OiBNY3BUcmFuc3BvcnRLaW5kW107XG5cdHRvb2w/OiBNY3BUb29sTWV0YTtcblx0cmVzb3VyY2U/OiBNY3BSZXNvdXJjZU1ldGE7XG5cdG1pZGRsZXdhcmU/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEh0dHBUcmlnZ2VyTGlrZSB7XG5cdGFkZFByZUNhdGNoQWxsSG9vayhjYjogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pOiB2b2lkO1xufVxuXG4vKiogQSB3b3JrZmxvdyBleHBvc2VkIGFzIGFuIE1DUCB0b29sLiAqL1xuaW50ZXJmYWNlIFRvb2xFbnRyeSB7XG5cdHdvcmtmbG93TmFtZTogc3RyaW5nO1xuXHR0b29sTmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbjogc3RyaW5nO1xuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHdvcmtmbG93IGBpbnB1dGAgaXMgYW4gb3BhcXVlIFpvZFR5cGVcblx0aW5wdXRab2Q6IGFueSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEEgd29ya2Zsb3cgZXhwb3NlZCBhcyBhbiBNQ1AgcmVzb3VyY2UuICovXG5pbnRlcmZhY2UgUmVzb3VyY2VFbnRyeSB7XG5cdHdvcmtmbG93TmFtZTogc3RyaW5nO1xuXHR1cmk6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0bWltZVR5cGU6IHN0cmluZztcbn1cblxuLyoqIEFsbCB3b3JrZmxvd3MgdGhhdCBzaGFyZSBhIChwYXRoLCBzZXJ2ZXJOYW1lKSBmb3JtIG9uZSBNQ1Agc2VydmVyLiAqL1xuaW50ZXJmYWNlIFNlcnZlckdyb3VwIHtcblx0cGF0aDogc3RyaW5nO1xuXHRzZXJ2ZXJOYW1lOiBzdHJpbmc7XG5cdHNlcnZlclZlcnNpb246IHN0cmluZztcblx0dHJhbnNwb3J0czogTWNwVHJhbnNwb3J0S2luZFtdO1xuXHR0b29sczogVG9vbEVudHJ5W107XG5cdHJlc291cmNlczogUmVzb3VyY2VFbnRyeVtdO1xufVxuXG5jb25zdCBERUZBVUxUX1NFUlZFUl9OQU1FID0gXCJibG9rLW1jcFwiO1xuY29uc3QgREVGQVVMVF9TRVJWRVJfVkVSU0lPTiA9IFwiMS4wLjBcIjtcbmNvbnN0IERFRkFVTFRfVFJBTlNQT1JUUzogTWNwVHJhbnNwb3J0S2luZFtdID0gW1wic3NlXCIsIFwic3RyZWFtYWJsZS1odHRwXCJdO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFBhcnNlIGEgYmFzZTY0LWVuY29kZWQgYHt1c2VySWQsZW1haWx9YCBpZGVudGl0eSBzdHJpbmcuIFJldHVybnMgbnVsbCBvbiBhbnkgZmFpbHVyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVzZXJDb250ZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogTWNwVXNlckNvbnRleHQgfCBudWxsIHtcblx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBudWxsO1xuXHR0cnkge1xuXHRcdGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbSh2YWx1ZSwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGYtOFwiKTtcblx0XHRpZiAoIWRlY29kZWQgfHwgZGVjb2RlZC50cmltKCkgPT09IFwibnVsbFwiKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCBjdHggPSBKU09OLnBhcnNlKGRlY29kZWQpIGFzIHsgdXNlcklkPzogc3RyaW5nOyBlbWFpbD86IHN0cmluZyB9O1xuXHRcdGlmICghY3R4IHx8IHR5cGVvZiBjdHgudXNlcklkICE9PSBcInN0cmluZ1wiKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4geyB1c2VySWQ6IGN0eC51c2VySWQsIGVtYWlsOiB0eXBlb2YgY3R4LmVtYWlsID09PSBcInN0cmluZ1wiID8gY3R4LmVtYWlsIDogXCJ1bmtub3duXCIgfTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cblxuLyoqIENvbnZlcnQgYSBab2Qgc2NoZW1hIHRvIGEgSlNPTi1TY2hlbWEgb2JqZWN0IHN1aXRhYmxlIGZvciBhbiBNQ1AgdG9vbCBgaW5wdXRTY2hlbWFgLiAqL1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiB6b2Qgc2NoZW1hIGlzIG9wYXF1ZSBoZXJlXG5mdW5jdGlvbiB0b0lucHV0SnNvblNjaGVtYShpbnB1dFpvZDogYW55IHwgdW5kZWZpbmVkKTogeyB0eXBlOiBcIm9iamVjdFwiOyBbazogc3RyaW5nXTogdW5rbm93biB9IHtcblx0Y29uc3QgZW1wdHkgPSB7IHR5cGU6IFwib2JqZWN0XCIgYXMgY29uc3QsIHByb3BlcnRpZXM6IHt9LCBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSB9O1xuXHRpZiAoIWlucHV0Wm9kIHx8IHR5cGVvZiBpbnB1dFpvZCAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgaW5wdXRab2Quc2FmZVBhcnNlICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRyZXR1cm4gZW1wdHk7XG5cdH1cblx0dHJ5IHtcblx0XHRjb25zdCBqc29uID0gem9kVG9Kc29uU2NoZW1hKGlucHV0Wm9kLCB7IHRhcmdldDogXCJqc29uU2NoZW1hN1wiLCAkcmVmU3RyYXRlZ3k6IFwibm9uZVwiIH0pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3BlcmZvcm1hbmNlL25vRGVsZXRlOiBzdHJpcCBKU09OLVNjaGVtYSBtZXRhIHRoZSBNQ1AgY2xpZW50IGRvZXNuJ3QgbmVlZFxuXHRcdGRlbGV0ZSBqc29uLiRzY2hlbWE7XG5cdFx0aWYgKGpzb24udHlwZSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0cmV0dXJuIHsgLi4uZW1wdHksIF93cmFwcGVkOiBqc29uIH0gYXMgeyB0eXBlOiBcIm9iamVjdFwiOyBbazogc3RyaW5nXTogdW5rbm93biB9O1xuXHRcdH1cblx0XHRyZXR1cm4ganNvbiBhcyB7IHR5cGU6IFwib2JqZWN0XCI7IFtrOiBzdHJpbmddOiB1bmtub3duIH07XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBlbXB0eTtcblx0fVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHJpZ2dlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWNwVHJpZ2dlciBleHRlbmRzIFRyaWdnZXJCYXNlIHtcblx0cHJvdGVjdGVkIG5vZGVNYXA6IFJ1bm5lckdsb2JhbE9wdGlvbnMgPSB7fSBhcyBSdW5uZXJHbG9iYWxPcHRpb25zO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nZ2VyID0gbmV3IERlZmF1bHRMb2dnZXIoKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX05BTUUgfHwgXCJ0cmlnZ2VyLW1jcC13b3JrZmxvd1wiLFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfVkVSU0lPTiB8fCBcIjAuMC4xXCIsXG5cdCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgbWV0ZXIgPSBtZXRyaWNzLmdldE1ldGVyKFwiYmxva1wiKTtcblx0cHJpdmF0ZSByZWFkb25seSBjb3VudGVyVG9vbENhbGxzID0gdGhpcy5tZXRlci5jcmVhdGVDb3VudGVyKFwiYmxva19tY3BfdG9vbF9jYWxsc190b3RhbFwiLCB7XG5cdFx0ZGVzY3JpcHRpb246IFwiTUNQIHRvb2xzL2NhbGwgZGlzcGF0Y2hlcy5cIixcblx0XHR1bml0OiBcIjFcIixcblx0fSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY291bnRlclNlc3Npb25zID0gdGhpcy5tZXRlci5jcmVhdGVDb3VudGVyKFwiYmxva19tY3Bfc3NlX3Nlc3Npb25zX3RvdGFsXCIsIHtcblx0XHRkZXNjcmlwdGlvbjogXCJNQ1AgU1NFIHNlc3Npb25zIG9wZW5lZC5cIixcblx0XHR1bml0OiBcIjFcIixcblx0fSk7XG5cblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBIb25vIGdlbmVyaWMgcHJvcGFnYXRpb24gKG1hdGNoZXMgU1NFL1dTIHRyaWdnZXJzKVxuXHRwcml2YXRlIHJlYWRvbmx5IGFwcDogSG9ubzxhbnksIGFueSwgYW55Pjtcblx0cHJpdmF0ZSByZWFkb25seSBodHRwVHJpZ2dlcjogSHR0cFRyaWdnZXJMaWtlIHwgbnVsbDtcblx0cHJpdmF0ZSB3aXJlZCA9IGZhbHNlO1xuXG5cdC8qKiBMaXZlIFNTRSBzZXNzaW9uczogc2Vzc2lvbklkIOKGkiB7IHRyYW5zcG9ydCwgc2VydmVyLCB1c2VyQ29udGV4dCB9LiAqL1xuXHRwcml2YXRlIHNzZVNlc3Npb25zID0gbmV3IE1hcDxcblx0XHRzdHJpbmcsXG5cdFx0eyB0cmFuc3BvcnQ6IFNTRVNlcnZlclRyYW5zcG9ydDsgc2VydmVyOiBNY3BTZGtTZXJ2ZXI7IHVzZXJDb250ZXh0OiBNY3BVc2VyQ29udGV4dCB8IG51bGwgfVxuXHQ+KCk7XG5cblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBtYXRjaGVzIGBhcHBgIGZpZWxkIGdlbmVyaWNcblx0Y29uc3RydWN0b3IoYXBwOiBIb25vPGFueSwgYW55LCBhbnk+LCBodHRwVHJpZ2dlcj86IEh0dHBUcmlnZ2VyTGlrZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hcHAgPSBhcHA7XG5cdFx0dGhpcy5odHRwVHJpZ2dlciA9IGh0dHBUcmlnZ2VyID8/IG51bGw7XG5cdFx0X3NldEFjdGl2ZU1jcFRyaWdnZXIodGhpcyk7XG5cdH1cblxuXHQvKiogSW5qZWN0IHRoZSBydW5uZXIncyBHbG9iYWxPcHRpb25zIChub2RlcyArIHdvcmtmbG93cykuIENhbGxlZCBiZWZvcmUgYGxpc3RlbigpYC4gKi9cblx0c2V0Tm9kZU1hcChub2RlTWFwOiBSdW5uZXJHbG9iYWxPcHRpb25zKTogdm9pZCB7XG5cdFx0dGhpcy5ub2RlTWFwID0gbm9kZU1hcDtcblx0fVxuXG5cdGFzeW5jIGxpc3RlbigpOiBQcm9taXNlPG51bWJlcj4ge1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuc3RhcnRDb3VudGVyKCk7XG5cdFx0aWYgKHRoaXMud2lyZWQpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmxvZyhcIltibG9rXVttY3BdIGxpc3RlbigpIGNhbGxlZCB0d2ljZTsgaWdub3JpbmdcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5lbmRDb3VudGVyKHN0YXJ0VGltZSk7XG5cdFx0fVxuXHRcdHRoaXMud2lyZWQgPSB0cnVlO1xuXG5cdFx0aWYgKHRoaXMuaHR0cFRyaWdnZXIpIHtcblx0XHRcdHRoaXMuaHR0cFRyaWdnZXIuYWRkUHJlQ2F0Y2hBbGxIb29rKCgpID0+IHRoaXMucmVnaXN0ZXJSb3V0ZXNGcm9tUmVnaXN0cnkoKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVnaXN0ZXJSb3V0ZXNGcm9tUmVnaXN0cnkoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZW5kQ291bnRlcihzdGFydFRpbWUpO1xuXHR9XG5cblx0YXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRmb3IgKGNvbnN0IHsgdHJhbnNwb3J0IH0gb2YgdGhpcy5zc2VTZXNzaW9ucy52YWx1ZXMoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdHJhbnNwb3J0LmNsb3NlKCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0LyogaWdub3JlICovXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuc3NlU2Vzc2lvbnMuY2xlYXIoKTtcblx0XHR0aGlzLndpcmVkID0gZmFsc2U7XG5cdFx0aWYgKF9nZXRBY3RpdmVNY3BUcmlnZ2VyKCkgPT09IHRoaXMpIF9zZXRBY3RpdmVNY3BUcmlnZ2VyKG51bGwpO1xuXHRcdHRoaXMuZGVzdHJveU1vbml0b3JpbmcoKTtcblx0XHR0aGlzLmxvZ2dlci5sb2coXCJbYmxva11bbWNwXSBzdG9wcGVkXCIpO1xuXHR9XG5cblx0Z2V0U3RhdHMoKTogeyBzZXNzaW9uczogbnVtYmVyIH0ge1xuXHRcdHJldHVybiB7IHNlc3Npb25zOiB0aGlzLnNzZVNlc3Npb25zLnNpemUgfTtcblx0fVxuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBSZWdpc3RyeSBzY2FuICsgZ3JvdXBpbmdcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSByZWdpc3RlclJvdXRlc0Zyb21SZWdpc3RyeSgpOiB2b2lkIHtcblx0XHRjb25zdCBncm91cHMgPSB0aGlzLmdldFNlcnZlckdyb3VwcygpO1xuXHRcdGlmIChncm91cHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coXCJbYmxva11bbWNwXSBubyB3b3JrZmxvd3Mgd2l0aCB0cmlnZ2VyLm1jcCBmb3VuZFwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcblx0XHRcdHRoaXMucmVnaXN0ZXJHcm91cFJvdXRlcyhncm91cCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRTZXJ2ZXJHcm91cHMoKTogU2VydmVyR3JvdXBbXSB7XG5cdFx0Y29uc3QgcmVnaXN0cnkgPSBXb3JrZmxvd1JlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG5cdFx0Y29uc3QgYnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIFNlcnZlckdyb3VwPigpO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5saXN0KCkpIHtcblx0XHRcdC8vIFdvcmtmbG93cyByZWdpc3RlcmVkIGFzIGJ1aWxkZXJzIGV4cG9zZSBjb25maWcgb24gYF9jb25maWdgOyBwbGFpblxuXHRcdFx0Ly8gb2JqZWN0cyAodGVzdHMgLyBKU09OKSBleHBvc2UgaXQgYXQgdGhlIHRvcCBsZXZlbC5cblx0XHRcdGNvbnN0IHdmID0gKGVudHJ5LndvcmtmbG93IGFzIHsgX2NvbmZpZz86IHVua25vd24gfSk/Ll9jb25maWcgPz8gZW50cnkud29ya2Zsb3c7XG5cdFx0XHRjb25zdCBjZmcgPSAod2YgYXMgeyB0cmlnZ2VyPzogeyBtY3A/OiBNY3BUcmlnZ2VyQ29uZmlnIH0gfSk/LnRyaWdnZXI/Lm1jcDtcblx0XHRcdGlmICghY2ZnIHx8IHR5cGVvZiBjZmcucGF0aCAhPT0gXCJzdHJpbmdcIikgY29udGludWU7XG5cblx0XHRcdGNvbnN0IHBhdGggPSBjZmcucGF0aDtcblx0XHRcdGxldCBncm91cCA9IGJ5UGF0aC5nZXQocGF0aCk7XG5cdFx0XHRpZiAoIWdyb3VwKSB7XG5cdFx0XHRcdGdyb3VwID0ge1xuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0c2VydmVyTmFtZTogY2ZnLnNlcnZlck5hbWUgfHwgREVGQVVMVF9TRVJWRVJfTkFNRSxcblx0XHRcdFx0XHRzZXJ2ZXJWZXJzaW9uOiBjZmcuc2VydmVyVmVyc2lvbiB8fCBERUZBVUxUX1NFUlZFUl9WRVJTSU9OLFxuXHRcdFx0XHRcdHRyYW5zcG9ydHM6IEFycmF5LmlzQXJyYXkoY2ZnLnRyYW5zcG9ydHMpICYmIGNmZy50cmFuc3BvcnRzLmxlbmd0aCA+IDAgPyBjZmcudHJhbnNwb3J0cyA6IERFRkFVTFRfVFJBTlNQT1JUUyxcblx0XHRcdFx0XHR0b29sczogW10sXG5cdFx0XHRcdFx0cmVzb3VyY2VzOiBbXSxcblx0XHRcdFx0fTtcblx0XHRcdFx0YnlQYXRoLnNldChwYXRoLCBncm91cCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjZmcucmVzb3VyY2UgJiYgdHlwZW9mIGNmZy5yZXNvdXJjZS51cmkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0Z3JvdXAucmVzb3VyY2VzLnB1c2goe1xuXHRcdFx0XHRcdHdvcmtmbG93TmFtZTogZW50cnkubmFtZSxcblx0XHRcdFx0XHR1cmk6IGNmZy5yZXNvdXJjZS51cmksXG5cdFx0XHRcdFx0bmFtZTogY2ZnLnJlc291cmNlLm5hbWUgfHwgZW50cnkubmFtZSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogY2ZnLnJlc291cmNlLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdG1pbWVUeXBlOiBjZmcucmVzb3VyY2UubWltZVR5cGUgfHwgXCJhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRab2QgPSAod2YgYXMgeyBpbnB1dD86IHVua25vd24gfSk/LmlucHV0O1xuXHRcdFx0XHRncm91cC50b29scy5wdXNoKHtcblx0XHRcdFx0XHR3b3JrZmxvd05hbWU6IGVudHJ5Lm5hbWUsXG5cdFx0XHRcdFx0dG9vbE5hbWU6IGNmZy50b29sPy5uYW1lIHx8IGVudHJ5Lm5hbWUsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IGNmZy50b29sPy5kZXNjcmlwdGlvbiB8fCBgUnVuIHRoZSBcIiR7ZW50cnkubmFtZX1cIiB3b3JrZmxvdy5gLFxuXHRcdFx0XHRcdGlucHV0Wm9kLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gWy4uLmJ5UGF0aC52YWx1ZXMoKV07XG5cdH1cblxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gTUNQIHNlcnZlciBmYWN0b3J5IChvbmUgcGVyIHJlcXVlc3Qvc2Vzc2lvbiwgYm91bmQgdG8gYSB1c2VyIGNvbnRleHQpXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgYnVpbGRTZXJ2ZXIoZ3JvdXA6IFNlcnZlckdyb3VwLCBnZXRVc2VyQ29udGV4dDogKCkgPT4gTWNwVXNlckNvbnRleHQgfCBudWxsKTogTWNwU2RrU2VydmVyIHtcblx0XHRjb25zdCBzZXJ2ZXIgPSBuZXcgTWNwU2RrU2VydmVyKFxuXHRcdFx0eyBuYW1lOiBncm91cC5zZXJ2ZXJOYW1lLCB2ZXJzaW9uOiBncm91cC5zZXJ2ZXJWZXJzaW9uIH0sXG5cdFx0XHR7IGNhcGFiaWxpdGllczogeyB0b29sczoge30sIHJlc291cmNlczoge30gfSB9LFxuXHRcdCk7XG5cblx0XHRzZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSwgYXN5bmMgKCkgPT4gKHtcblx0XHRcdHRvb2xzOiBncm91cC50b29scy5tYXAoKHQpID0+ICh7XG5cdFx0XHRcdG5hbWU6IHQudG9vbE5hbWUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiB0LmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRpbnB1dFNjaGVtYTogdG9JbnB1dEpzb25TY2hlbWEodC5pbnB1dFpvZCksXG5cdFx0XHR9KSksXG5cdFx0fSkpO1xuXG5cdFx0c2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKENhbGxUb29sUmVxdWVzdFNjaGVtYSwgYXN5bmMgKHJlcSkgPT4ge1xuXHRcdFx0Y29uc3QgdG9vbE5hbWUgPSByZXEucGFyYW1zLm5hbWU7XG5cdFx0XHRjb25zdCB0b29sID0gZ3JvdXAudG9vbHMuZmluZCgodCkgPT4gdC50b29sTmFtZSA9PT0gdG9vbE5hbWUpO1xuXHRcdFx0aWYgKCF0b29sKSB7XG5cdFx0XHRcdHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgVW5rbm93biB0b29sOiAke3Rvb2xOYW1lfWAgfV0sIGlzRXJyb3I6IHRydWUgfTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGFyZ3MgPSAocmVxLnBhcmFtcy5hcmd1bWVudHMgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0cmV0dXJuIHRoaXMuZGlzcGF0Y2hUb29sKHRvb2wsIGFyZ3MsIGdldFVzZXJDb250ZXh0KCkpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGdyb3VwLnJlc291cmNlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoTGlzdFJlc291cmNlc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+ICh7XG5cdFx0XHRcdHJlc291cmNlczogZ3JvdXAucmVzb3VyY2VzLm1hcCgocikgPT4gKHtcblx0XHRcdFx0XHR1cmk6IHIudXJpLFxuXHRcdFx0XHRcdG5hbWU6IHIubmFtZSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogci5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHRtaW1lVHlwZTogci5taW1lVHlwZSxcblx0XHRcdFx0fSkpLFxuXHRcdFx0fSkpO1xuXG5cdFx0XHRzZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoUmVhZFJlc291cmNlUmVxdWVzdFNjaGVtYSwgYXN5bmMgKHJlcSkgPT4ge1xuXHRcdFx0XHRjb25zdCB1cmkgPSByZXEucGFyYW1zLnVyaTtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2UgPSBncm91cC5yZXNvdXJjZXMuZmluZCgocikgPT4gci51cmkgPT09IHVyaSk7XG5cdFx0XHRcdGlmICghcmVzb3VyY2UpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXNvdXJjZTogJHt1cml9YCk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZGlzcGF0Y2hSZXNvdXJjZShyZXNvdXJjZSwgZ2V0VXNlckNvbnRleHQoKSk7XG5cdFx0XHRcdGNvbnN0IHRleHQgPSB0eXBlb2YgcmVzdWx0ID09PSBcInN0cmluZ1wiID8gcmVzdWx0IDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKTtcblx0XHRcdFx0cmV0dXJuIHsgY29udGVudHM6IFt7IHVyaTogcmVzb3VyY2UudXJpLCBtaW1lVHlwZTogcmVzb3VyY2UubWltZVR5cGUsIHRleHQgfV0gfTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzZXJ2ZXI7XG5cdH1cblxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gV29ya2Zsb3cgZGlzcGF0Y2ggKHRvb2xzL2NhbGwgKyByZXNvdXJjZXMvcmVhZCBydW4gdGhyb3VnaCB0aGUgcnVubmVyKVxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3BhdGNoVG9vbChcblx0XHR0b29sOiBUb29sRW50cnksXG5cdFx0YXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0dXNlckNvbnRleHQ6IE1jcFVzZXJDb250ZXh0IHwgbnVsbCxcblx0KTogUHJvbWlzZTx7IGNvbnRlbnQ6IEFycmF5PHsgdHlwZTogXCJ0ZXh0XCI7IHRleHQ6IHN0cmluZyB9PjsgaXNFcnJvcj86IGJvb2xlYW4gfT4ge1xuXHRcdHRoaXMuY291bnRlclRvb2xDYWxscy5hZGQoMSwgeyB0b29sOiB0b29sLnRvb2xOYW1lIH0pO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ydW5Xb3JrZmxvdyh0b29sLndvcmtmbG93TmFtZSwgYXJncywgdXNlckNvbnRleHQsIGBtY3AudG9vbDoke3Rvb2wudG9vbE5hbWV9YCk7XG5cdFx0XHRjb25zdCB0ZXh0ID0gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgPyBkYXRhIDogSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XG5cdFx0XHRyZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dCB9XSB9O1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc3QgbXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYFtibG9rXVttY3BdIHRvb2wgXCIke3Rvb2wudG9vbE5hbWV9XCIgZmFpbGVkOiAke21zZ31gKTtcblx0XHRcdC8vIFRvb2wgZmFpbHVyZSDihpIgTUNQIHRvb2wgZXJyb3IgcmVzdWx0LCBOT1QgYSB0cmFuc3BvcnQgY3Jhc2guXG5cdFx0XHRyZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYEVycm9yOiAke21zZ31gIH1dLCBpc0Vycm9yOiB0cnVlIH07XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwYXRjaFJlc291cmNlKHJlc291cmNlOiBSZXNvdXJjZUVudHJ5LCB1c2VyQ29udGV4dDogTWNwVXNlckNvbnRleHQgfCBudWxsKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIHRoaXMucnVuV29ya2Zsb3cocmVzb3VyY2Uud29ya2Zsb3dOYW1lLCB7fSwgdXNlckNvbnRleHQsIGBtY3AucmVzb3VyY2U6JHtyZXNvdXJjZS51cml9YCk7XG5cdH1cblxuXHQvKipcblx0ICogUnVuIGEgd29ya2Zsb3cgdGhyb3VnaCB0aGUgcnVubmVyIGFuZCByZXR1cm4gYGN0eC5yZXNwb25zZS5kYXRhYC4gTWlycm9yc1xuXHQgKiB0aGUgV2ViaG9va1RyaWdnZXIgcmVxdWVzdOKGknJlc3BvbnNlIGRpc3BhdGNoIChpbml0IOKGkiBjb250ZXh0IOKGkiBtaWRkbGV3YXJlIOKGklxuXHQgKiBydW4pLiBNQ1AgdG9vbCBjYWxscyB3aXRoaW4gYSBzZXNzaW9uIGFyZSBzZXJpYWwsIG1hdGNoaW5nIHRoZSBzaGFyZWRcblx0ICogYHRoaXMuY29uZmlndXJhdGlvbmAgbGlmZWN5Y2xlIHRoZSBvdGhlciB0cmlnZ2VycyB1c2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJ1bldvcmtmbG93KFxuXHRcdHdvcmtmbG93TmFtZTogc3RyaW5nLFxuXHRcdGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdHVzZXJDb250ZXh0OiBNY3BVc2VyQ29udGV4dCB8IG51bGwsXG5cdFx0c3BhbkxhYmVsOiBzdHJpbmcsXG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RJZCA9IHV1aWQoKTtcblx0XHRyZXR1cm4gdGhpcy50cmFjZXIuc3RhcnRBY3RpdmVTcGFuKGBtY3A6JHt3b3JrZmxvd05hbWV9YCwgYXN5bmMgKHNwYW46IFNwYW4pID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHJlZ2lzdHJ5ID0gV29ya2Zsb3dSZWdpc3RyeS5nZXRJbnN0YW5jZSgpO1xuXHRcdFx0XHRjb25zdCBlbnRyeSA9IHJlZ2lzdHJ5LmdldCh3b3JrZmxvd05hbWUpO1xuXHRcdFx0XHRpZiAoIWVudHJ5KSB0aHJvdyBuZXcgRXJyb3IoYHdvcmtmbG93IFwiJHt3b3JrZmxvd05hbWV9XCIgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5pbml0KHdvcmtmbG93TmFtZSwgdGhpcy5ub2RlTWFwLCBlbnRyeS53b3JrZmxvdyk7XG5cblx0XHRcdFx0Y29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdFx0XHRpZiAodXNlckNvbnRleHQpIHtcblx0XHRcdFx0XHQvLyBDYXJyeSBpZGVudGl0eSB0byB0aGUgd29ya2Zsb3cgZXhhY3RseSBhcyBIVFRQIHdvdWxkIChiYXNlNjQgaGVhZGVyKS5cblx0XHRcdFx0XHRoZWFkZXJzW1wieC11c2VyLWNvbnRleHRcIl0gPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh1c2VyQ29udGV4dCksIFwidXRmLThcIikudG9TdHJpbmcoXCJiYXNlNjRcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBjdHg6IENvbnRleHQgPSB0aGlzLmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkLCB3b3JrZmxvd05hbWUsIHJlcXVlc3RJZCk7XG5cdFx0XHRcdGN0eC5yZXF1ZXN0ID0ge1xuXHRcdFx0XHRcdGJvZHk6IGFyZ3MsXG5cdFx0XHRcdFx0aGVhZGVycyxcblx0XHRcdFx0XHRwYXJhbXM6IHt9LFxuXHRcdFx0XHRcdHF1ZXJ5OiB7fSxcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIFJlcXVlc3RDb250ZXh0O1xuXHRcdFx0XHQoY3R4IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5fbWNwID0geyB1c2VyQ29udGV4dCB9O1xuXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwbHlNaWRkbGV3YXJlQ2hhaW4oY3R4LCB0aGlzLm5vZGVNYXApO1xuXHRcdFx0XHRhd2FpdCB0aGlzLnJ1bihjdHgpO1xuXG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwid29ya2Zsb3dfbmFtZVwiLCB3b3JrZmxvd05hbWUpO1xuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcIm1jcF9sYWJlbFwiLCBzcGFuTGFiZWwpO1xuXHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXHRcdFx0XHRyZXR1cm4gY3R4LnJlc3BvbnNlPy5kYXRhO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdFx0c3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyIGFzIEVycm9yKTtcblx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZTogbXNnIH0pO1xuXHRcdFx0XHR0aHJvdyBlcnI7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRzcGFuLmVuZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIFJvdXRlIHJlZ2lzdHJhdGlvbiAoU1NFICsgU3RyZWFtYWJsZS1IVFRQKVxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIHJlZ2lzdGVyR3JvdXBSb3V0ZXMoZ3JvdXA6IFNlcnZlckdyb3VwKTogdm9pZCB7XG5cdFx0dGhpcy5sb2dnZXIubG9nKFxuXHRcdFx0YFtibG9rXVttY3BdIHNlcnZlciBcIiR7Z3JvdXAuc2VydmVyTmFtZX1cIiBhdCAke2dyb3VwLnBhdGh9IOKAlCAke2dyb3VwLnRvb2xzLmxlbmd0aH0gdG9vbChzKSwgJHtncm91cC5yZXNvdXJjZXMubGVuZ3RofSByZXNvdXJjZShzKSwgdHJhbnNwb3J0cz1bJHtncm91cC50cmFuc3BvcnRzLmpvaW4oXCIsXCIpfV1gLFxuXHRcdCk7XG5cblx0XHRpZiAoZ3JvdXAudHJhbnNwb3J0cy5pbmNsdWRlcyhcInNzZVwiKSkge1xuXHRcdFx0dGhpcy5yZWdpc3RlclNzZVJvdXRlcyhncm91cCk7XG5cdFx0fVxuXHRcdGlmIChncm91cC50cmFuc3BvcnRzLmluY2x1ZGVzKFwic3RyZWFtYWJsZS1odHRwXCIpKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyU3RyZWFtYWJsZUh0dHBSb3V0ZShncm91cCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlclNzZVJvdXRlcyhncm91cDogU2VydmVyR3JvdXApOiB2b2lkIHtcblx0XHRjb25zdCBzc2VQYXRoID0gYCR7Z3JvdXAucGF0aH0vc3NlYDtcblx0XHRjb25zdCBtZXNzYWdlc1BhdGggPSBgJHtncm91cC5wYXRofS9tZXNzYWdlc2A7XG5cdFx0dGhpcy5sb2dnZXIubG9nKGBbYmxva11bbWNwXSAgIEdFVCAgJHtzc2VQYXRofSAgIFBPU1QgJHttZXNzYWdlc1BhdGh9ICAoc3NlKWApO1xuXG5cdFx0Ly8gR0VUIDxwYXRoPi9zc2Ug4oCUIG9wZW4gdGhlIFNTRSBzdHJlYW07IFNESyBhbm5vdW5jZXMgdGhlIG1lc3NhZ2VzIGVuZHBvaW50LlxuXHRcdHRoaXMuYXBwLmdldChzc2VQYXRoLCBhc3luYyAoYzogSG9ub0NvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IGVudiA9IGMuZW52IGFzIHVua25vd24gYXMgeyBpbmNvbWluZzogSW5jb21pbmdNZXNzYWdlOyBvdXRnb2luZzogU2VydmVyUmVzcG9uc2UgfTtcblx0XHRcdGlmICghZW52Py5vdXRnb2luZykge1xuXHRcdFx0XHRyZXR1cm4gYy50ZXh0KFwiTUNQIFNTRSB0cmFuc3BvcnQgcmVxdWlyZXMgdGhlIE5vZGUgc2VydmVyIChAaG9uby9ub2RlLXNlcnZlcikuXCIsIDUwMCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCByYXdVc2VyQ3R4ID1cblx0XHRcdFx0Yy5yZXEuaGVhZGVyKFwieC11c2VyLWNvbnRleHRcIikgfHwgKG5ldyBVUkwoYy5yZXEudXJsKS5zZWFyY2hQYXJhbXMuZ2V0KFwidXNlcl9jb250ZXh0XCIpID8/IHVuZGVmaW5lZCk7XG5cdFx0XHRjb25zdCB1c2VyQ29udGV4dCA9IHBhcnNlVXNlckNvbnRleHQocmF3VXNlckN0eCk7XG5cblx0XHRcdGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBTU0VTZXJ2ZXJUcmFuc3BvcnQobWVzc2FnZXNQYXRoLCBlbnYub3V0Z29pbmcpO1xuXHRcdFx0Y29uc3Qgc2Vzc2lvbklkID0gdHJhbnNwb3J0LnNlc3Npb25JZDtcblx0XHRcdGNvbnN0IHNlcnZlciA9IHRoaXMuYnVpbGRTZXJ2ZXIoZ3JvdXAsICgpID0+IHRoaXMuc3NlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk/LnVzZXJDb250ZXh0ID8/IG51bGwpO1xuXHRcdFx0dGhpcy5zc2VTZXNzaW9ucy5zZXQoc2Vzc2lvbklkLCB7IHRyYW5zcG9ydCwgc2VydmVyLCB1c2VyQ29udGV4dCB9KTtcblx0XHRcdHRoaXMuY291bnRlclNlc3Npb25zLmFkZCgxLCB7IHNlcnZlcjogZ3JvdXAuc2VydmVyTmFtZSB9KTtcblxuXHRcdFx0dHJhbnNwb3J0Lm9uY2xvc2UgPSAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc3NlU2Vzc2lvbnMuZGVsZXRlKHNlc3Npb25JZCk7XG5cdFx0XHR9O1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBzZXJ2ZXIuY29ubmVjdCh0cmFuc3BvcnQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHRoaXMuc3NlU2Vzc2lvbnMuZGVsZXRlKHNlc3Npb25JZCk7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYFtibG9rXVttY3BdIHNzZSBjb25uZWN0IGZhaWxlZDogJHttc2d9YCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUkVTUE9OU0VfQUxSRUFEWV9TRU5UO1xuXHRcdH0pO1xuXG5cdFx0Ly8gUE9TVCA8cGF0aD4vbWVzc2FnZXM/c2Vzc2lvbklkPeKApiDigJQgSlNPTi1SUEMgbWVzc2FnZXMgZm9yIGFuIG9wZW4gc3RyZWFtLlxuXHRcdHRoaXMuYXBwLnBvc3QobWVzc2FnZXNQYXRoLCBhc3luYyAoYzogSG9ub0NvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IGVudiA9IGMuZW52IGFzIHVua25vd24gYXMgeyBpbmNvbWluZzogSW5jb21pbmdNZXNzYWdlOyBvdXRnb2luZzogU2VydmVyUmVzcG9uc2UgfTtcblx0XHRcdGNvbnN0IHNlc3Npb25JZCA9IG5ldyBVUkwoYy5yZXEudXJsKS5zZWFyY2hQYXJhbXMuZ2V0KFwic2Vzc2lvbklkXCIpID8/IHVuZGVmaW5lZDtcblx0XHRcdGlmICghc2Vzc2lvbklkKSByZXR1cm4gYy50ZXh0KFwiTWlzc2luZyBzZXNzaW9uSWQgcXVlcnkgcGFyYW1ldGVyXCIsIDQwMCk7XG5cdFx0XHRjb25zdCBzZXNzaW9uID0gdGhpcy5zc2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcblx0XHRcdGlmICghc2Vzc2lvbikgcmV0dXJuIGMudGV4dChcIlNlc3Npb24gbm90IGZvdW5kXCIsIDQwNCk7XG5cdFx0XHRjb25zdCBib2R5ID0gYXdhaXQgYy5yZXEuanNvbigpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBzZXNzaW9uLnRyYW5zcG9ydC5oYW5kbGVQb3N0TWVzc2FnZShlbnYuaW5jb21pbmcsIGVudi5vdXRnb2luZywgYm9keSk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Y29uc3QgbXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW21jcF0gaGFuZGxlUG9zdE1lc3NhZ2UgZmFpbGVkOiAke21zZ31gKTtcblx0XHRcdFx0aWYgKCFlbnYub3V0Z29pbmcuaGVhZGVyc1NlbnQpIHJldHVybiBjLnRleHQoXCJFcnJvciBoYW5kbGluZyBNQ1AgbWVzc2FnZVwiLCA1MDApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFJFU1BPTlNFX0FMUkVBRFlfU0VOVDtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVnaXN0ZXJTdHJlYW1hYmxlSHR0cFJvdXRlKGdyb3VwOiBTZXJ2ZXJHcm91cCk6IHZvaWQge1xuXHRcdHRoaXMubG9nZ2VyLmxvZyhgW2Jsb2tdW21jcF0gICBBTEwgICR7Z3JvdXAucGF0aH0gIChzdHJlYW1hYmxlLWh0dHApYCk7XG5cblx0XHQvLyBTdGF0ZWxlc3MgU3RyZWFtYWJsZS1IVFRQOiBhIGZyZXNoIHNlcnZlciArIHRyYW5zcG9ydCBwZXIgcmVxdWVzdCwgc2VydmVkXG5cdFx0Ly8gZGlyZWN0bHkgb2ZmIHRoZSBGZXRjaCBgUmVxdWVzdGAgKHdvcmtzIG9uIGFueSBIb25vIHJ1bnRpbWUpLlxuXHRcdHRoaXMuYXBwLmFsbChncm91cC5wYXRoLCBhc3luYyAoYzogSG9ub0NvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IHJhd1VzZXJDdHggPVxuXHRcdFx0XHRjLnJlcS5oZWFkZXIoXCJ4LXVzZXItY29udGV4dFwiKSB8fCAobmV3IFVSTChjLnJlcS51cmwpLnNlYXJjaFBhcmFtcy5nZXQoXCJ1c2VyX2NvbnRleHRcIikgPz8gdW5kZWZpbmVkKTtcblx0XHRcdGNvbnN0IHVzZXJDb250ZXh0ID0gcGFyc2VVc2VyQ29udGV4dChyYXdVc2VyQ3R4KTtcblxuXHRcdFx0Y29uc3Qgc2VydmVyID0gdGhpcy5idWlsZFNlcnZlcihncm91cCwgKCkgPT4gdXNlckNvbnRleHQpO1xuXHRcdFx0Y29uc3QgdHJhbnNwb3J0ID0gbmV3IFdlYlN0YW5kYXJkU3RyZWFtYWJsZUhUVFBTZXJ2ZXJUcmFuc3BvcnQoeyBzZXNzaW9uSWRHZW5lcmF0b3I6IHVuZGVmaW5lZCB9KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG5cdFx0XHRcdGNvbnN0IHJlcyA9IGF3YWl0IHRyYW5zcG9ydC5oYW5kbGVSZXF1ZXN0KGMucmVxLnJhdyk7XG5cdFx0XHRcdHJldHVybiByZXM7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Y29uc3QgbXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW21jcF0gc3RyZWFtYWJsZS1odHRwIHJlcXVlc3QgZmFpbGVkOiAke21zZ31gKTtcblx0XHRcdFx0cmV0dXJuIGMuanNvbih7IGpzb25ycGM6IFwiMi4wXCIsIGVycm9yOiB7IGNvZGU6IC0zMjYwMywgbWVzc2FnZTogbXNnIH0sIGlkOiBudWxsIH0sIDUwMCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNpbmdsZXRvbiBhY2Nlc3NvciAocGFyaXR5IHdpdGggU1NFL1dlYmhvb2sgdHJpZ2dlcnMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5sZXQgYWN0aXZlVHJpZ2dlcjogTWNwVHJpZ2dlciB8IG51bGwgPSBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIF9zZXRBY3RpdmVNY3BUcmlnZ2VyKHRyaWdnZXI6IE1jcFRyaWdnZXIgfCBudWxsKTogdm9pZCB7XG5cdGFjdGl2ZVRyaWdnZXIgPSB0cmlnZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9nZXRBY3RpdmVNY3BUcmlnZ2VyKCk6IE1jcFRyaWdnZXIgfCBudWxsIHtcblx0cmV0dXJuIGFjdGl2ZVRyaWdnZXI7XG59XG5cbmV4cG9ydCB0eXBlIHsgTWNwVHJpZ2dlckNvbmZpZyB9O1xuIl19
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWNwVHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9NY3BUcmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlDRztBQUdILE9BQU8sRUFDTixhQUFhLEVBRWIsV0FBVyxFQUNYLGdCQUFnQixHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDekgsT0FBTyxFQUNOLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsc0JBQXNCLEVBQ3RCLHlCQUF5QixHQUN6QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBYSxjQUFjLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW9FckQsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7QUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUM7QUFDdkMsTUFBTSxrQkFBa0IsR0FBdUIsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUUxRSxnRkFBZ0Y7QUFDaEYsVUFBVTtBQUNWLGdGQUFnRjtBQUVoRiw0RkFBNEY7QUFDNUYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWdDO0lBQ2hFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtB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Q0FBQyxDQUFDO2dCQUNoQyxNQUFNLEdBQUcsR0FBRyxNQUFNLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckQsT0FBTyxHQUFHLENBQUM7WUFDWixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDZCxNQUFNLEdBQUcsR0FBRyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLCtDQUErQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3pGLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRDtBQUVELGdGQUFnRjtBQUNoRix3REFBd0Q7QUFDeEQsZ0ZBQWdGO0FBRWhGLElBQUksYUFBYSxHQUFzQixJQUFJLENBQUM7QUFDNUMsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQTBCO0lBQzlELGFBQWEsR0FBRyxPQUFPLENBQUM7QUFDekIsQ0FBQztBQUNELE1BQU0sVUFBVSxvQkFBb0I7SUFDbkMsT0FBTyxhQUFhLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWNwVHJpZ2dlciDigJQgTW9kZWwgQ29udGV4dCBQcm90b2NvbCB0cmlnZ2VyLiBFeHBvc2VzIEJsb2sgd29ya2Zsb3dzIGFzXG4gKiBNQ1AgKip0b29scyoqIChhbmQgKipyZXNvdXJjZXMqKikgdG8gZXh0ZXJuYWwgY2xpZW50cyAoQ3Vyc29yLCBDbGF1ZGVcbiAqIENvZGUsIOKApikgb3ZlciB0d28gdHJhbnNwb3J0cyBtdWx0aXBsZXhlZCBvbiB0aGUgc2hhcmVkIEhvbm8gcG9ydDpcbiAqXG4gKiAgIC0gKipTU0UgKGxlZ2FjeSAyMDI0LTExLTA1KSoqIOKAlCBgR0VUIDxwYXRoPi9zc2VgIG9wZW5zIHRoZSBzdHJlYW0gYW5kXG4gKiAgICAgYW5ub3VuY2VzIGBQT1NUIDxwYXRoPi9tZXNzYWdlcz9zZXNzaW9uSWQ94oCmYCBmb3IgSlNPTi1SUEMuIFRoaXMgaXMgdGhlXG4gKiAgICAgMi1lbmRwb2ludCBzaGFwZSBleGlzdGluZyBJREUgY29uZmlncyBleHBlY3QgKGRyb3AtaW4gcGFyaXR5KS5cbiAqICAgLSAqKlN0cmVhbWFibGUtSFRUUCoqIOKAlCBhIHNpbmdsZSBgPHBhdGg+YCBlbmRwb2ludCAodGhlIGN1cnJlbnQgb2ZmaWNpYWxcbiAqICAgICByZW1vdGUgdHJhbnNwb3J0KSwgc2VydmVkIHN0YXRlbGVzc2x5IHZpYSB0aGUgU0RLJ3Mgd2ViLXN0YW5kYXJkXG4gKiAgICAgdHJhbnNwb3J0IGRpcmVjdGx5IG9mZiBgYy5yZXEucmF3YC5cbiAqXG4gKiAqKkF1dGhvcmluZyBzdXJmYWNlKiog4oCUIGEgd29ya2Zsb3cgb3B0cyBpbiB3aXRoIGB0cmlnZ2VyLm1jcGA6XG4gKlxuICogYGBgdHNcbiAqIGV4cG9ydCBkZWZhdWx0IHdvcmtmbG93KHtcbiAqICAgbmFtZTogXCJzZWFyY2hfY29kZVwiLFxuICogICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gKiAgIGlucHV0OiB6Lm9iamVjdCh7IHF1ZXJ5OiB6LnN0cmluZygpLCBsaW1pdDogei5udW1iZXIoKS5vcHRpb25hbCgpIH0pLFxuICogICB0cmlnZ2VyOiB7IG1jcDogeyBwYXRoOiBcIi9tY3BcIiwgc2VydmVyTmFtZTogXCJ0ZXRyaXgtcGxhdGZvcm1cIixcbiAqICAgICAgICAgICAgICAgICAgICAgdG9vbDogeyBkZXNjcmlwdGlvbjogXCJGdWxsLXRleHQgc2VhcmNoIHRoZSBpbmRleGVkIGNvZGVcIiB9IH0gfSxcbiAqICAgc3RlcHM6IFsgeyBpZDogXCJzZWFyY2hcIiwgdXNlOiBcIkB0ZXRyaXgvbWVpbGktc2VhcmNoXCIsIGlucHV0czogeyBxdWVyeTogJC5yZXEuYm9keS5xdWVyeSB9IH0gXSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogRXZlcnkgd29ya2Zsb3cgc2hhcmluZyB0aGUgc2FtZSBgcGF0aGAgKyBgc2VydmVyTmFtZWAgaXMgYWdncmVnYXRlZCBpbnRvIG9uZVxuICogTUNQIHNlcnZlci4gRWFjaCB0b29sJ3MgYGlucHV0U2NoZW1hYCBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgd29ya2Zsb3cncyBgaW5wdXRgXG4gKiBab2Qgc2NoZW1hICh2aWEgem9kLXRvLWpzb24tc2NoZW1hKS4gT24gYHRvb2xzL2NhbGxgIHRoZSB0cmlnZ2VyIHJ1bnMgdGhlXG4gKiBtYXBwZWQgd29ya2Zsb3cgdGhyb3VnaCB0aGUgcnVubmVyIOKAlCBzbyBldmVyeSBjYWxsIGlzIGEgQmxvayBTdHVkaW8gcnVuIHdpdGhcbiAqIHRyYWNpbmcgLyByZXRyaWVzIC8gaWRlbXBvdGVuY3kgZm9yIGZyZWUuXG4gKlxuICogKipIb25vIGludGVncmF0aW9uOioqIGlkZW50aWNhbCB0byBgU1NFVHJpZ2dlcmAvYFdlYmhvb2tUcmlnZ2VyYCDigJQgYWNjZXB0cyB0aGVcbiAqIHNoYXJlZCBgSG9ub2AgYXBwICsgYW4gb3B0aW9uYWwgYEh0dHBUcmlnZ2VyTGlrZWAgZXhwb3NpbmcgYGFkZFByZUNhdGNoQWxsSG9va2BcbiAqIHNvIHJvdXRlcyByZWdpc3RlciBBRlRFUiB0aGUgd29ya2Zsb3cgcmVnaXN0cnkgaXMgcG9wdWxhdGVkIGJ1dCBCRUZPUkUgdGhlXG4gKiBsZWdhY3kgYC86d29ya2Zsb3d7Lit9YCBjYXRjaC1hbGwuXG4gKlxuICogKipJZGVudGl0eToqKiBhbiBgeC11c2VyLWNvbnRleHRgIGhlYWRlciAob3IgYD91c2VyX2NvbnRleHQ9YCkgY2FycnlpbmcgYmFzZTY0XG4gKiBge3VzZXJJZCxlbWFpbH1gIGlzIHBhcnNlZCBwZXIgY29ubmVjdGlvbiBhbmQgcGFzc2VkIHRvIHRoZSB3b3JrZmxvdyBjdHggZm9yXG4gKiBjcmVkZW50aWFsIGluamVjdGlvbi4gSXQgaXMgTk9UIGFjY2VzcyBjb250cm9sIOKAlCB0aGVyZSBpcyBubyBzY29waW5nIGhlcmVcbiAqICh0aGF0J3MgdGhlIGFwcCdzIGNhbGwpLiBUb2tlbnMgYXJlIG5ldmVyIGxvZ2dlZCAodGhlIGdsb2JhbCBzYW5pdGl6ZXIgbWlkZGxld2FyZVxuICogaGFuZGxlcyByZWRhY3Rpb24pLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB7XG5cdERlZmF1bHRMb2dnZXIsXG5cdHR5cGUgR2xvYmFsT3B0aW9ucyBhcyBSdW5uZXJHbG9iYWxPcHRpb25zLFxuXHRUcmlnZ2VyQmFzZSxcblx0V29ya2Zsb3dSZWdpc3RyeSxcbn0gZnJvbSBcIkBibG9ranMvcnVubmVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBibG9ranMvc2hhcmVkXCI7XG5pbXBvcnQgeyBSRVNQT05TRV9BTFJFQURZX1NFTlQgfSBmcm9tIFwiQGhvbm8vbm9kZS1zZXJ2ZXIvdXRpbHMvcmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlciBhcyBNY3BTZGtTZXJ2ZXIgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IFNTRVNlcnZlclRyYW5zcG9ydCB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9zc2UuanNcIjtcbmltcG9ydCB7IFdlYlN0YW5kYXJkU3RyZWFtYWJsZUhUVFBTZXJ2ZXJUcmFuc3BvcnQgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvd2ViU3RhbmRhcmRTdHJlYW1hYmxlSHR0cC5qc1wiO1xuaW1wb3J0IHtcblx0Q2FsbFRvb2xSZXF1ZXN0U2NoZW1hLFxuXHRMaXN0UmVzb3VyY2VzUmVxdWVzdFNjaGVtYSxcblx0TGlzdFRvb2xzUmVxdWVzdFNjaGVtYSxcblx0UmVhZFJlc291cmNlUmVxdWVzdFNjaGVtYSxcbn0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvdHlwZXMuanNcIjtcbmltcG9ydCB7IHR5cGUgU3BhbiwgU3BhblN0YXR1c0NvZGUsIG1ldHJpY3MsIHRyYWNlIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHR5cGUgeyBIb25vLCBDb250ZXh0IGFzIEhvbm9Db250ZXh0IH0gZnJvbSBcImhvbm9cIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgem9kVG9Kc29uU2NoZW1hIH0gZnJvbSBcInpvZC10by1qc29uLXNjaGVtYVwiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHlwZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBQYXJzZWQgYHgtdXNlci1jb250ZXh0YCBpZGVudGl0eSAoY3JlZGVudGlhbCBpbmplY3Rpb24gb25seSDigJQgbmV2ZXIgc2NvcGluZykuICovXG5leHBvcnQgaW50ZXJmYWNlIE1jcFVzZXJDb250ZXh0IHtcblx0dXNlcklkOiBzdHJpbmc7XG5cdGVtYWlsOiBzdHJpbmc7XG59XG5cbnR5cGUgTWNwVHJhbnNwb3J0S2luZCA9IFwic3NlXCIgfCBcInN0cmVhbWFibGUtaHR0cFwiO1xuXG5pbnRlcmZhY2UgTWNwVG9vbE1ldGEge1xuXHRuYW1lPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbmludGVyZmFjZSBNY3BSZXNvdXJjZU1ldGEge1xuXHR1cmk6IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdG1pbWVUeXBlPzogc3RyaW5nO1xufVxuXG4vKiogTG9vc2VseS1yZWFkIGB0cmlnZ2VyLm1jcGAgY29uZmlnICh2YWxpZGF0ZWQgYXQgd29ya2Zsb3cgbG9hZCBieSB0aGUgaGVscGVyKS4gKi9cbmludGVyZmFjZSBNY3BUcmlnZ2VyQ29uZmlnIHtcblx0cGF0aDogc3RyaW5nO1xuXHRzZXJ2ZXJOYW1lPzogc3RyaW5nO1xuXHRzZXJ2ZXJWZXJzaW9uPzogc3RyaW5nO1xuXHR0cmFuc3BvcnRzPzogTWNwVHJhbnNwb3J0S2luZFtdO1xuXHR0b29sPzogTWNwVG9vbE1ldGE7XG5cdHJlc291cmNlPzogTWNwUmVzb3VyY2VNZXRhO1xuXHRtaWRkbGV3YXJlPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBIdHRwVHJpZ2dlckxpa2Uge1xuXHRhZGRQcmVDYXRjaEFsbEhvb2soY2I6ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KTogdm9pZDtcbn1cblxuLyoqIEEgd29ya2Zsb3cgZXhwb3NlZCBhcyBhbiBNQ1AgdG9vbC4gKi9cbmludGVyZmFjZSBUb29sRW50cnkge1xuXHR3b3JrZmxvd05hbWU6IHN0cmluZztcblx0dG9vbE5hbWU6IHN0cmluZztcblx0ZGVzY3JpcHRpb246IHN0cmluZztcblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiB3b3JrZmxvdyBgaW5wdXRgIGlzIGFuIG9wYXF1ZSBab2RUeXBlXG5cdGlucHV0Wm9kOiBhbnkgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBBIHdvcmtmbG93IGV4cG9zZWQgYXMgYW4gTUNQIHJlc291cmNlLiAqL1xuaW50ZXJmYWNlIFJlc291cmNlRW50cnkge1xuXHR3b3JrZmxvd05hbWU6IHN0cmluZztcblx0dXJpOiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdG1pbWVUeXBlOiBzdHJpbmc7XG59XG5cbi8qKiBBbGwgd29ya2Zsb3dzIHRoYXQgc2hhcmUgYSAocGF0aCwgc2VydmVyTmFtZSkgZm9ybSBvbmUgTUNQIHNlcnZlci4gKi9cbmludGVyZmFjZSBTZXJ2ZXJHcm91cCB7XG5cdHBhdGg6IHN0cmluZztcblx0c2VydmVyTmFtZTogc3RyaW5nO1xuXHRzZXJ2ZXJWZXJzaW9uOiBzdHJpbmc7XG5cdHRyYW5zcG9ydHM6IE1jcFRyYW5zcG9ydEtpbmRbXTtcblx0dG9vbHM6IFRvb2xFbnRyeVtdO1xuXHRyZXNvdXJjZXM6IFJlc291cmNlRW50cnlbXTtcbn1cblxuY29uc3QgREVGQVVMVF9TRVJWRVJfTkFNRSA9IFwiYmxvay1tY3BcIjtcbmNvbnN0IERFRkFVTFRfU0VSVkVSX1ZFUlNJT04gPSBcIjEuMC4wXCI7XG5jb25zdCBERUZBVUxUX1RSQU5TUE9SVFM6IE1jcFRyYW5zcG9ydEtpbmRbXSA9IFtcInNzZVwiLCBcInN0cmVhbWFibGUtaHR0cFwiXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBQYXJzZSBhIGJhc2U2NC1lbmNvZGVkIGB7dXNlcklkLGVtYWlsfWAgaWRlbnRpdHkgc3RyaW5nLiBSZXR1cm5zIG51bGwgb24gYW55IGZhaWx1cmUuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVc2VyQ29udGV4dCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IE1jcFVzZXJDb250ZXh0IHwgbnVsbCB7XG5cdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gbnVsbDtcblx0dHJ5IHtcblx0XHRjb25zdCBkZWNvZGVkID0gQnVmZmVyLmZyb20odmFsdWUsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmLThcIik7XG5cdFx0aWYgKCFkZWNvZGVkIHx8IGRlY29kZWQudHJpbSgpID09PSBcIm51bGxcIikgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgY3R4ID0gSlNPTi5wYXJzZShkZWNvZGVkKSBhcyB7IHVzZXJJZD86IHN0cmluZzsgZW1haWw/OiBzdHJpbmcgfTtcblx0XHRpZiAoIWN0eCB8fCB0eXBlb2YgY3R4LnVzZXJJZCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIHsgdXNlcklkOiBjdHgudXNlcklkLCBlbWFpbDogdHlwZW9mIGN0eC5lbWFpbCA9PT0gXCJzdHJpbmdcIiA/IGN0eC5lbWFpbCA6IFwidW5rbm93blwiIH07XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG5cbi8qKiBDb252ZXJ0IGEgWm9kIHNjaGVtYSB0byBhIEpTT04tU2NoZW1hIG9iamVjdCBzdWl0YWJsZSBmb3IgYW4gTUNQIHRvb2wgYGlucHV0U2NoZW1hYC4gKi9cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogem9kIHNjaGVtYSBpcyBvcGFxdWUgaGVyZVxuZnVuY3Rpb24gdG9JbnB1dEpzb25TY2hlbWEoaW5wdXRab2Q6IGFueSB8IHVuZGVmaW5lZCk6IHsgdHlwZTogXCJvYmplY3RcIjsgW2s6IHN0cmluZ106IHVua25vd24gfSB7XG5cdGNvbnN0IGVtcHR5ID0geyB0eXBlOiBcIm9iamVjdFwiIGFzIGNvbnN0LCBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUgfTtcblx0aWYgKCFpbnB1dFpvZCB8fCB0eXBlb2YgaW5wdXRab2QgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGlucHV0Wm9kLnNhZmVQYXJzZSAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0cmV0dXJuIGVtcHR5O1xuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QganNvbiA9IHpvZFRvSnNvblNjaGVtYShpbnB1dFpvZCwgeyB0YXJnZXQ6IFwianNvblNjaGVtYTdcIiwgJHJlZlN0cmF0ZWd5OiBcIm5vbmVcIiB9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9wZXJmb3JtYW5jZS9ub0RlbGV0ZTogc3RyaXAgSlNPTi1TY2hlbWEgbWV0YSB0aGUgTUNQIGNsaWVudCBkb2Vzbid0IG5lZWRcblx0XHRkZWxldGUganNvbi4kc2NoZW1hO1xuXHRcdGlmIChqc29uLnR5cGUgIT09IFwib2JqZWN0XCIpIHtcblx0XHRcdHJldHVybiB7IC4uLmVtcHR5LCBfd3JhcHBlZDoganNvbiB9IGFzIHsgdHlwZTogXCJvYmplY3RcIjsgW2s6IHN0cmluZ106IHVua25vd24gfTtcblx0XHR9XG5cdFx0cmV0dXJuIGpzb24gYXMgeyB0eXBlOiBcIm9iamVjdFwiOyBbazogc3RyaW5nXTogdW5rbm93biB9O1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZW1wdHk7XG5cdH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRyaWdnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1jcFRyaWdnZXIgZXh0ZW5kcyBUcmlnZ2VyQmFzZSB7XG5cdHByb3RlY3RlZCBub2RlTWFwOiBSdW5uZXJHbG9iYWxPcHRpb25zID0ge30gYXMgUnVubmVyR2xvYmFsT3B0aW9ucztcblx0cHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlciA9IG5ldyBEZWZhdWx0TG9nZ2VyKCk7XG5cdHByb3RlY3RlZCByZWFkb25seSB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXG5cdFx0cHJvY2Vzcy5lbnYuUFJPSkVDVF9OQU1FIHx8IFwidHJpZ2dlci1tY3Atd29ya2Zsb3dcIixcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX1ZFUlNJT04gfHwgXCIwLjAuMVwiLFxuXHQpO1xuXHRwcml2YXRlIHJlYWRvbmx5IG1ldGVyID0gbWV0cmljcy5nZXRNZXRlcihcImJsb2tcIik7XG5cdHByaXZhdGUgcmVhZG9ubHkgY291bnRlclRvb2xDYWxscyA9IHRoaXMubWV0ZXIuY3JlYXRlQ291bnRlcihcImJsb2tfbWNwX3Rvb2xfY2FsbHNfdG90YWxcIiwge1xuXHRcdGRlc2NyaXB0aW9uOiBcIk1DUCB0b29scy9jYWxsIGRpc3BhdGNoZXMuXCIsXG5cdFx0dW5pdDogXCIxXCIsXG5cdH0pO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNvdW50ZXJTZXNzaW9ucyA9IHRoaXMubWV0ZXIuY3JlYXRlQ291bnRlcihcImJsb2tfbWNwX3NzZV9zZXNzaW9uc190b3RhbFwiLCB7XG5cdFx0ZGVzY3JpcHRpb246IFwiTUNQIFNTRSBzZXNzaW9ucyBvcGVuZWQuXCIsXG5cdFx0dW5pdDogXCIxXCIsXG5cdH0pO1xuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogSG9ubyBnZW5lcmljIHByb3BhZ2F0aW9uIChtYXRjaGVzIFNTRS9XUyB0cmlnZ2Vycylcblx0cHJpdmF0ZSByZWFkb25seSBhcHA6IEhvbm88YW55LCBhbnksIGFueT47XG5cdHByaXZhdGUgcmVhZG9ubHkgaHR0cFRyaWdnZXI6IEh0dHBUcmlnZ2VyTGlrZSB8IG51bGw7XG5cdHByaXZhdGUgd2lyZWQgPSBmYWxzZTtcblxuXHQvKiogTGl2ZSBTU0Ugc2Vzc2lvbnM6IHNlc3Npb25JZCDihpIgeyB0cmFuc3BvcnQsIHNlcnZlciwgdXNlckNvbnRleHQgfS4gKi9cblx0cHJpdmF0ZSBzc2VTZXNzaW9ucyA9IG5ldyBNYXA8XG5cdFx0c3RyaW5nLFxuXHRcdHsgdHJhbnNwb3J0OiBTU0VTZXJ2ZXJUcmFuc3BvcnQ7IHNlcnZlcjogTWNwU2RrU2VydmVyOyB1c2VyQ29udGV4dDogTWNwVXNlckNvbnRleHQgfCBudWxsIH1cblx0PigpO1xuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogbWF0Y2hlcyBgYXBwYCBmaWVsZCBnZW5lcmljXG5cdGNvbnN0cnVjdG9yKGFwcDogSG9ubzxhbnksIGFueSwgYW55PiwgaHR0cFRyaWdnZXI/OiBIdHRwVHJpZ2dlckxpa2UpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuYXBwID0gYXBwO1xuXHRcdHRoaXMuaHR0cFRyaWdnZXIgPSBodHRwVHJpZ2dlciA/PyBudWxsO1xuXHRcdF9zZXRBY3RpdmVNY3BUcmlnZ2VyKHRoaXMpO1xuXHR9XG5cblx0LyoqIEluamVjdCB0aGUgcnVubmVyJ3MgR2xvYmFsT3B0aW9ucyAobm9kZXMgKyB3b3JrZmxvd3MpLiBDYWxsZWQgYmVmb3JlIGBsaXN0ZW4oKWAuICovXG5cdHNldE5vZGVNYXAobm9kZU1hcDogUnVubmVyR2xvYmFsT3B0aW9ucyk6IHZvaWQge1xuXHRcdHRoaXMubm9kZU1hcCA9IG5vZGVNYXA7XG5cdH1cblxuXHRhc3luYyBsaXN0ZW4oKTogUHJvbWlzZTxudW1iZXI+IHtcblx0XHRjb25zdCBzdGFydFRpbWUgPSB0aGlzLnN0YXJ0Q291bnRlcigpO1xuXHRcdGlmICh0aGlzLndpcmVkKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coXCJbYmxva11bbWNwXSBsaXN0ZW4oKSBjYWxsZWQgdHdpY2U7IGlnbm9yaW5nXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuZW5kQ291bnRlcihzdGFydFRpbWUpO1xuXHRcdH1cblx0XHR0aGlzLndpcmVkID0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLmh0dHBUcmlnZ2VyKSB7XG5cdFx0XHR0aGlzLmh0dHBUcmlnZ2VyLmFkZFByZUNhdGNoQWxsSG9vaygoKSA9PiB0aGlzLnJlZ2lzdGVyUm91dGVzRnJvbVJlZ2lzdHJ5KCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyUm91dGVzRnJvbVJlZ2lzdHJ5KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVuZENvdW50ZXIoc3RhcnRUaW1lKTtcblx0fVxuXG5cdGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Zm9yIChjb25zdCB7IHRyYW5zcG9ydCB9IG9mIHRoaXMuc3NlU2Vzc2lvbnMudmFsdWVzKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRyYW5zcG9ydC5jbG9zZSgpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8qIGlnbm9yZSAqL1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnNzZVNlc3Npb25zLmNsZWFyKCk7XG5cdFx0dGhpcy53aXJlZCA9IGZhbHNlO1xuXHRcdGlmIChfZ2V0QWN0aXZlTWNwVHJpZ2dlcigpID09PSB0aGlzKSBfc2V0QWN0aXZlTWNwVHJpZ2dlcihudWxsKTtcblx0XHR0aGlzLmRlc3Ryb3lNb25pdG9yaW5nKCk7XG5cdFx0dGhpcy5sb2dnZXIubG9nKFwiW2Jsb2tdW21jcF0gc3RvcHBlZFwiKTtcblx0fVxuXG5cdGdldFN0YXRzKCk6IHsgc2Vzc2lvbnM6IG51bWJlciB9IHtcblx0XHRyZXR1cm4geyBzZXNzaW9uczogdGhpcy5zc2VTZXNzaW9ucy5zaXplIH07XG5cdH1cblxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gUmVnaXN0cnkgc2NhbiArIGdyb3VwaW5nXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgcmVnaXN0ZXJSb3V0ZXNGcm9tUmVnaXN0cnkoKTogdm9pZCB7XG5cdFx0Y29uc3QgZ3JvdXBzID0gdGhpcy5nZXRTZXJ2ZXJHcm91cHMoKTtcblx0XHRpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5sb2dnZXIubG9nKFwiW2Jsb2tdW21jcF0gbm8gd29ya2Zsb3dzIHdpdGggdHJpZ2dlci5tY3AgZm91bmRcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyR3JvdXBSb3V0ZXMoZ3JvdXApO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0U2VydmVyR3JvdXBzKCk6IFNlcnZlckdyb3VwW10ge1xuXHRcdGNvbnN0IHJlZ2lzdHJ5ID0gV29ya2Zsb3dSZWdpc3RyeS5nZXRJbnN0YW5jZSgpO1xuXHRcdGNvbnN0IGJ5UGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBTZXJ2ZXJHcm91cD4oKTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgcmVnaXN0cnkubGlzdCgpKSB7XG5cdFx0XHQvLyBXb3JrZmxvd3MgcmVnaXN0ZXJlZCBhcyBidWlsZGVycyBleHBvc2UgY29uZmlnIG9uIGBfY29uZmlnYDsgcGxhaW5cblx0XHRcdC8vIG9iamVjdHMgKHRlc3RzIC8gSlNPTikgZXhwb3NlIGl0IGF0IHRoZSB0b3AgbGV2ZWwuXG5cdFx0XHRjb25zdCB3ZiA9IChlbnRyeS53b3JrZmxvdyBhcyB7IF9jb25maWc/OiB1bmtub3duIH0pPy5fY29uZmlnID8/IGVudHJ5LndvcmtmbG93O1xuXHRcdFx0Y29uc3QgY2ZnID0gKHdmIGFzIHsgdHJpZ2dlcj86IHsgbWNwPzogTWNwVHJpZ2dlckNvbmZpZyB9IH0pPy50cmlnZ2VyPy5tY3A7XG5cdFx0XHRpZiAoIWNmZyB8fCB0eXBlb2YgY2ZnLnBhdGggIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xuXG5cdFx0XHRjb25zdCBwYXRoID0gY2ZnLnBhdGg7XG5cdFx0XHRsZXQgZ3JvdXAgPSBieVBhdGguZ2V0KHBhdGgpO1xuXHRcdFx0aWYgKCFncm91cCkge1xuXHRcdFx0XHRncm91cCA9IHtcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHNlcnZlck5hbWU6IGNmZy5zZXJ2ZXJOYW1lIHx8IERFRkFVTFRfU0VSVkVSX05BTUUsXG5cdFx0XHRcdFx0c2VydmVyVmVyc2lvbjogY2ZnLnNlcnZlclZlcnNpb24gfHwgREVGQVVMVF9TRVJWRVJfVkVSU0lPTixcblx0XHRcdFx0XHR0cmFuc3BvcnRzOiBBcnJheS5pc0FycmF5KGNmZy50cmFuc3BvcnRzKSAmJiBjZmcudHJhbnNwb3J0cy5sZW5ndGggPiAwID8gY2ZnLnRyYW5zcG9ydHMgOiBERUZBVUxUX1RSQU5TUE9SVFMsXG5cdFx0XHRcdFx0dG9vbHM6IFtdLFxuXHRcdFx0XHRcdHJlc291cmNlczogW10sXG5cdFx0XHRcdH07XG5cdFx0XHRcdGJ5UGF0aC5zZXQocGF0aCwgZ3JvdXApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2ZnLnJlc291cmNlICYmIHR5cGVvZiBjZmcucmVzb3VyY2UudXJpID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGdyb3VwLnJlc291cmNlcy5wdXNoKHtcblx0XHRcdFx0XHR3b3JrZmxvd05hbWU6IGVudHJ5Lm5hbWUsXG5cdFx0XHRcdFx0dXJpOiBjZmcucmVzb3VyY2UudXJpLFxuXHRcdFx0XHRcdG5hbWU6IGNmZy5yZXNvdXJjZS5uYW1lIHx8IGVudHJ5Lm5hbWUsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IGNmZy5yZXNvdXJjZS5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHRtaW1lVHlwZTogY2ZnLnJlc291cmNlLm1pbWVUeXBlIHx8IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGlucHV0Wm9kID0gKHdmIGFzIHsgaW5wdXQ/OiB1bmtub3duIH0pPy5pbnB1dDtcblx0XHRcdFx0Z3JvdXAudG9vbHMucHVzaCh7XG5cdFx0XHRcdFx0d29ya2Zsb3dOYW1lOiBlbnRyeS5uYW1lLFxuXHRcdFx0XHRcdHRvb2xOYW1lOiBjZmcudG9vbD8ubmFtZSB8fCBlbnRyeS5uYW1lLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBjZmcudG9vbD8uZGVzY3JpcHRpb24gfHwgYFJ1biB0aGUgXCIke2VudHJ5Lm5hbWV9XCIgd29ya2Zsb3cuYCxcblx0XHRcdFx0XHRpbnB1dFpvZCxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFsuLi5ieVBhdGgudmFsdWVzKCldO1xuXHR9XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIE1DUCBzZXJ2ZXIgZmFjdG9yeSAob25lIHBlciByZXF1ZXN0L3Nlc3Npb24sIGJvdW5kIHRvIGEgdXNlciBjb250ZXh0KVxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGJ1aWxkU2VydmVyKGdyb3VwOiBTZXJ2ZXJHcm91cCwgZ2V0VXNlckNvbnRleHQ6ICgpID0+IE1jcFVzZXJDb250ZXh0IHwgbnVsbCk6IE1jcFNka1NlcnZlciB7XG5cdFx0Y29uc3Qgc2VydmVyID0gbmV3IE1jcFNka1NlcnZlcihcblx0XHRcdHsgbmFtZTogZ3JvdXAuc2VydmVyTmFtZSwgdmVyc2lvbjogZ3JvdXAuc2VydmVyVmVyc2lvbiB9LFxuXHRcdFx0eyBjYXBhYmlsaXRpZXM6IHsgdG9vbHM6IHt9LCByZXNvdXJjZXM6IHt9IH0gfSxcblx0XHQpO1xuXG5cdFx0c2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+ICh7XG5cdFx0XHR0b29sczogZ3JvdXAudG9vbHMubWFwKCh0KSA9PiAoe1xuXHRcdFx0XHRuYW1lOiB0LnRvb2xOYW1lLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogdC5kZXNjcmlwdGlvbixcblx0XHRcdFx0aW5wdXRTY2hlbWE6IHRvSW5wdXRKc29uU2NoZW1hKHQuaW5wdXRab2QpLFxuXHRcdFx0fSkpLFxuXHRcdH0pKTtcblxuXHRcdHNlcnZlci5zZXRSZXF1ZXN0SGFuZGxlcihDYWxsVG9vbFJlcXVlc3RTY2hlbWEsIGFzeW5jIChyZXEpID0+IHtcblx0XHRcdGNvbnN0IHRvb2xOYW1lID0gcmVxLnBhcmFtcy5uYW1lO1xuXHRcdFx0Y29uc3QgdG9vbCA9IGdyb3VwLnRvb2xzLmZpbmQoKHQpID0+IHQudG9vbE5hbWUgPT09IHRvb2xOYW1lKTtcblx0XHRcdGlmICghdG9vbCkge1xuXHRcdFx0XHRyZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYFVua25vd24gdG9vbDogJHt0b29sTmFtZX1gIH1dLCBpc0Vycm9yOiB0cnVlIH07XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhcmdzID0gKHJlcS5wYXJhbXMuYXJndW1lbnRzID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdHJldHVybiB0aGlzLmRpc3BhdGNoVG9vbCh0b29sLCBhcmdzLCBnZXRVc2VyQ29udGV4dCgpKTtcblx0XHR9KTtcblxuXHRcdGlmIChncm91cC5yZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RSZXNvdXJjZXNSZXF1ZXN0U2NoZW1hLCBhc3luYyAoKSA9PiAoe1xuXHRcdFx0XHRyZXNvdXJjZXM6IGdyb3VwLnJlc291cmNlcy5tYXAoKHIpID0+ICh7XG5cdFx0XHRcdFx0dXJpOiByLnVyaSxcblx0XHRcdFx0XHRuYW1lOiByLm5hbWUsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHIuZGVzY3JpcHRpb24sXG5cdFx0XHRcdFx0bWltZVR5cGU6IHIubWltZVR5cGUsXG5cdFx0XHRcdH0pKSxcblx0XHRcdH0pKTtcblxuXHRcdFx0c2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKFJlYWRSZXNvdXJjZVJlcXVlc3RTY2hlbWEsIGFzeW5jIChyZXEpID0+IHtcblx0XHRcdFx0Y29uc3QgdXJpID0gcmVxLnBhcmFtcy51cmk7XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlID0gZ3JvdXAucmVzb3VyY2VzLmZpbmQoKHIpID0+IHIudXJpID09PSB1cmkpO1xuXHRcdFx0XHRpZiAoIXJlc291cmNlKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVzb3VyY2U6ICR7dXJpfWApO1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRpc3BhdGNoUmVzb3VyY2UocmVzb3VyY2UsIGdldFVzZXJDb250ZXh0KCkpO1xuXHRcdFx0XHRjb25zdCB0ZXh0ID0gdHlwZW9mIHJlc3VsdCA9PT0gXCJzdHJpbmdcIiA/IHJlc3VsdCA6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMik7XG5cdFx0XHRcdHJldHVybiB7IGNvbnRlbnRzOiBbeyB1cmk6IHJlc291cmNlLnVyaSwgbWltZVR5cGU6IHJlc291cmNlLm1pbWVUeXBlLCB0ZXh0IH1dIH07XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc2VydmVyO1xuXHR9XG5cblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vIFdvcmtmbG93IGRpc3BhdGNoICh0b29scy9jYWxsICsgcmVzb3VyY2VzL3JlYWQgcnVuIHRocm91Z2ggdGhlIHJ1bm5lcilcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwYXRjaFRvb2woXG5cdFx0dG9vbDogVG9vbEVudHJ5LFxuXHRcdGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdHVzZXJDb250ZXh0OiBNY3BVc2VyQ29udGV4dCB8IG51bGwsXG5cdCk6IFByb21pc2U8eyBjb250ZW50OiBBcnJheTx7IHR5cGU6IFwidGV4dFwiOyB0ZXh0OiBzdHJpbmcgfT47IGlzRXJyb3I/OiBib29sZWFuIH0+IHtcblx0XHR0aGlzLmNvdW50ZXJUb29sQ2FsbHMuYWRkKDEsIHsgdG9vbDogdG9vbC50b29sTmFtZSB9KTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucnVuV29ya2Zsb3codG9vbC53b3JrZmxvd05hbWUsIGFyZ3MsIHVzZXJDb250ZXh0LCBgbWNwLnRvb2w6JHt0b29sLnRvb2xOYW1lfWApO1xuXHRcdFx0Y29uc3QgdGV4dCA9IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiID8gZGF0YSA6IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuXHRcdFx0cmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQgfV0gfTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBbYmxva11bbWNwXSB0b29sIFwiJHt0b29sLnRvb2xOYW1lfVwiIGZhaWxlZDogJHttc2d9YCk7XG5cdFx0XHQvLyBUb29sIGZhaWx1cmUg4oaSIE1DUCB0b29sIGVycm9yIHJlc3VsdCwgTk9UIGEgdHJhbnNwb3J0IGNyYXNoLlxuXHRcdFx0cmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGBFcnJvcjogJHttc2d9YCB9XSwgaXNFcnJvcjogdHJ1ZSB9O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcGF0Y2hSZXNvdXJjZShyZXNvdXJjZTogUmVzb3VyY2VFbnRyeSwgdXNlckNvbnRleHQ6IE1jcFVzZXJDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiB0aGlzLnJ1bldvcmtmbG93KHJlc291cmNlLndvcmtmbG93TmFtZSwge30sIHVzZXJDb250ZXh0LCBgbWNwLnJlc291cmNlOiR7cmVzb3VyY2UudXJpfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biBhIHdvcmtmbG93IHRocm91Z2ggdGhlIHJ1bm5lciBhbmQgcmV0dXJuIGBjdHgucmVzcG9uc2UuZGF0YWAuIE1pcnJvcnNcblx0ICogdGhlIFdlYmhvb2tUcmlnZ2VyIHJlcXVlc3TihpJyZXNwb25zZSBkaXNwYXRjaCAoaW5pdCDihpIgY29udGV4dCDihpIgbWlkZGxld2FyZSDihpJcblx0ICogcnVuKS4gTUNQIHRvb2wgY2FsbHMgd2l0aGluIGEgc2Vzc2lvbiBhcmUgc2VyaWFsLCBtYXRjaGluZyB0aGUgc2hhcmVkXG5cdCAqIGB0aGlzLmNvbmZpZ3VyYXRpb25gIGxpZmVjeWNsZSB0aGUgb3RoZXIgdHJpZ2dlcnMgdXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBydW5Xb3JrZmxvdyhcblx0XHR3b3JrZmxvd05hbWU6IHN0cmluZyxcblx0XHRhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHR1c2VyQ29udGV4dDogTWNwVXNlckNvbnRleHQgfCBudWxsLFxuXHRcdHNwYW5MYWJlbDogc3RyaW5nLFxuXHQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCByZXF1ZXN0SWQgPSB1dWlkKCk7XG5cdFx0cmV0dXJuIHRoaXMudHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihgbWNwOiR7d29ya2Zsb3dOYW1lfWAsIGFzeW5jIChzcGFuOiBTcGFuKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCByZWdpc3RyeSA9IFdvcmtmbG93UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcblx0XHRcdFx0Y29uc3QgZW50cnkgPSByZWdpc3RyeS5nZXQod29ya2Zsb3dOYW1lKTtcblx0XHRcdFx0aWYgKCFlbnRyeSkgdGhyb3cgbmV3IEVycm9yKGB3b3JrZmxvdyBcIiR7d29ya2Zsb3dOYW1lfVwiIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApO1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uaW5pdCh3b3JrZmxvd05hbWUsIHRoaXMubm9kZU1hcCwgZW50cnkud29ya2Zsb3cpO1xuXG5cdFx0XHRcdGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRcdFx0aWYgKHVzZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gQ2FycnkgaWRlbnRpdHkgdG8gdGhlIHdvcmtmbG93IGV4YWN0bHkgYXMgSFRUUCB3b3VsZCAoYmFzZTY0IGhlYWRlcikuXG5cdFx0XHRcdFx0aGVhZGVyc1tcIngtdXNlci1jb250ZXh0XCJdID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodXNlckNvbnRleHQpLCBcInV0Zi04XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY3R4OiBDb250ZXh0ID0gdGhpcy5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCwgd29ya2Zsb3dOYW1lLCByZXF1ZXN0SWQpO1xuXHRcdFx0XHRjdHgucmVxdWVzdCA9IHtcblx0XHRcdFx0XHRib2R5OiBhcmdzLFxuXHRcdFx0XHRcdGhlYWRlcnMsXG5cdFx0XHRcdFx0cGFyYW1zOiB7fSxcblx0XHRcdFx0XHRxdWVyeToge30sXG5cdFx0XHRcdH0gYXMgdW5rbm93biBhcyBSZXF1ZXN0Q29udGV4dDtcblx0XHRcdFx0KGN0eCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuX21jcCA9IHsgdXNlckNvbnRleHQgfTtcblxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcGx5TWlkZGxld2FyZUNoYWluKGN0eCwgdGhpcy5ub2RlTWFwKTtcblx0XHRcdFx0YXdhaXQgdGhpcy5ydW4oY3R4KTtcblxuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcIndvcmtmbG93X25hbWVcIiwgd29ya2Zsb3dOYW1lKTtcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJtY3BfbGFiZWxcIiwgc3BhbkxhYmVsKTtcblx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcblxuXHRcdFx0XHRjb25zdCBkYXRhID0gY3R4LnJlc3BvbnNlPy5kYXRhO1xuXHRcdFx0XHQvLyAjNDM2IOKAlCB3aGVuIEJMT0tfVkFMSURBVEVfV09SS0ZMT1dfT1VUUFVUIGlzIG9uLCB2YWxpZGF0ZSB0aGUgcmVzdWx0XG5cdFx0XHRcdC8vIGFnYWluc3QgdGhlIHdvcmtmbG93J3MgZGVjbGFyZWQgYG91dHB1dGAgWm9kIChyZWFjaGVkIHZpYSBgX2NvbmZpZ2AsXG5cdFx0XHRcdC8vIHNhbWUgYXMgdGhlIHRvb2wgaW5wdXRTY2hlbWEgZGVyaXZhdGlvbikuIEEgZmFpbHVyZSBUSFJPV1MsIHdoaWNoXG5cdFx0XHRcdC8vIGRpc3BhdGNoVG9vbCB0dXJucyBpbnRvIGEgcHJvcGVyIE1DUCBlcnJvciByZXN1bHQgKGlzRXJyb3I6dHJ1ZSkg4oCUXG5cdFx0XHRcdC8vIG5ldmVyIGEgcmF3IDUwMCAvIHRyYW5zcG9ydCBjcmFzaC4gTm8gZGVjbGFyZWQgb3V0cHV0IOKGkiBwYXNzIHRocm91Z2guXG5cdFx0XHRcdGNvbnN0IHZhbGlkYXRlT3V0cHV0ID1cblx0XHRcdFx0XHRwcm9jZXNzLmVudi5CTE9LX1ZBTElEQVRFX1dPUktGTE9XX09VVFBVVCA9PT0gXCIxXCIgfHwgcHJvY2Vzcy5lbnYuQkxPS19WQUxJREFURV9XT1JLRkxPV19PVVRQVVQgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRpZiAodmFsaWRhdGVPdXRwdXQpIHtcblx0XHRcdFx0XHRjb25zdCB3ZiA9IChlbnRyeS53b3JrZmxvdyBhcyB7IF9jb25maWc/OiB1bmtub3duIH0pPy5fY29uZmlnID8/IGVudHJ5LndvcmtmbG93O1xuXHRcdFx0XHRcdGNvbnN0IG91dHB1dFpvZCA9ICh3ZiBhcyB7IG91dHB1dD86IHsgc2FmZVBhcnNlPzogKGQ6IHVua25vd24pID0+IHVua25vd24gfSB9IHwgdW5kZWZpbmVkKT8ub3V0cHV0O1xuXHRcdFx0XHRcdGlmIChvdXRwdXRab2QgJiYgdHlwZW9mIG91dHB1dFpvZC5zYWZlUGFyc2UgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFyc2VkID0gb3V0cHV0Wm9kLnNhZmVQYXJzZShkYXRhKSBhcyB7XG5cdFx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGJvb2xlYW47XG5cdFx0XHRcdFx0XHRcdGRhdGE/OiB1bmtub3duO1xuXHRcdFx0XHRcdFx0XHRlcnJvcj86IHsgbWVzc2FnZTogc3RyaW5nIH07XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0aWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdFx0YHdvcmtmbG93IFwiJHt3b3JrZmxvd05hbWV9XCIgb3V0cHV0IGZhaWxlZCB2YWxpZGF0aW9uIGFnYWluc3Qgd29ya2Zsb3cub3V0cHV0OiAke3BhcnNlZC5lcnJvcj8ubWVzc2FnZSA/PyBcImludmFsaWQgb3V0cHV0XCJ9YCxcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBwYXJzZWQuZGF0YTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0Y29uc3QgbXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0XHRzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnIgYXMgRXJyb3IpO1xuXHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlOiBtc2cgfSk7XG5cdFx0XHRcdHRocm93IGVycjtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdHNwYW4uZW5kKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gUm91dGUgcmVnaXN0cmF0aW9uIChTU0UgKyBTdHJlYW1hYmxlLUhUVFApXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgcmVnaXN0ZXJHcm91cFJvdXRlcyhncm91cDogU2VydmVyR3JvdXApOiB2b2lkIHtcblx0XHR0aGlzLmxvZ2dlci5sb2coXG5cdFx0XHRgW2Jsb2tdW21jcF0gc2VydmVyIFwiJHtncm91cC5zZXJ2ZXJOYW1lfVwiIGF0ICR7Z3JvdXAucGF0aH0g4oCUICR7Z3JvdXAudG9vbHMubGVuZ3RofSB0b29sKHMpLCAke2dyb3VwLnJlc291cmNlcy5sZW5ndGh9IHJlc291cmNlKHMpLCB0cmFuc3BvcnRzPVske2dyb3VwLnRyYW5zcG9ydHMuam9pbihcIixcIil9XWAsXG5cdFx0KTtcblxuXHRcdGlmIChncm91cC50cmFuc3BvcnRzLmluY2x1ZGVzKFwic3NlXCIpKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyU3NlUm91dGVzKGdyb3VwKTtcblx0XHR9XG5cdFx0aWYgKGdyb3VwLnRyYW5zcG9ydHMuaW5jbHVkZXMoXCJzdHJlYW1hYmxlLWh0dHBcIikpIHtcblx0XHRcdHRoaXMucmVnaXN0ZXJTdHJlYW1hYmxlSHR0cFJvdXRlKGdyb3VwKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVyU3NlUm91dGVzKGdyb3VwOiBTZXJ2ZXJHcm91cCk6IHZvaWQge1xuXHRcdGNvbnN0IHNzZVBhdGggPSBgJHtncm91cC5wYXRofS9zc2VgO1xuXHRcdGNvbnN0IG1lc3NhZ2VzUGF0aCA9IGAke2dyb3VwLnBhdGh9L21lc3NhZ2VzYDtcblx0XHR0aGlzLmxvZ2dlci5sb2coYFtibG9rXVttY3BdICAgR0VUICAke3NzZVBhdGh9ICAgUE9TVCAke21lc3NhZ2VzUGF0aH0gIChzc2UpYCk7XG5cblx0XHQvLyBHRVQgPHBhdGg+L3NzZSDigJQgb3BlbiB0aGUgU1NFIHN0cmVhbTsgU0RLIGFubm91bmNlcyB0aGUgbWVzc2FnZXMgZW5kcG9pbnQuXG5cdFx0dGhpcy5hcHAuZ2V0KHNzZVBhdGgsIGFzeW5jIChjOiBIb25vQ29udGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgZW52ID0gYy5lbnYgYXMgdW5rbm93biBhcyB7IGluY29taW5nOiBJbmNvbWluZ01lc3NhZ2U7IG91dGdvaW5nOiBTZXJ2ZXJSZXNwb25zZSB9O1xuXHRcdFx0aWYgKCFlbnY/Lm91dGdvaW5nKSB7XG5cdFx0XHRcdHJldHVybiBjLnRleHQoXCJNQ1AgU1NFIHRyYW5zcG9ydCByZXF1aXJlcyB0aGUgTm9kZSBzZXJ2ZXIgKEBob25vL25vZGUtc2VydmVyKS5cIiwgNTAwKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHJhd1VzZXJDdHggPVxuXHRcdFx0XHRjLnJlcS5oZWFkZXIoXCJ4LXVzZXItY29udGV4dFwiKSB8fCAobmV3IFVSTChjLnJlcS51cmwpLnNlYXJjaFBhcmFtcy5nZXQoXCJ1c2VyX2NvbnRleHRcIikgPz8gdW5kZWZpbmVkKTtcblx0XHRcdGNvbnN0IHVzZXJDb250ZXh0ID0gcGFyc2VVc2VyQ29udGV4dChyYXdVc2VyQ3R4KTtcblxuXHRcdFx0Y29uc3QgdHJhbnNwb3J0ID0gbmV3IFNTRVNlcnZlclRyYW5zcG9ydChtZXNzYWdlc1BhdGgsIGVudi5vdXRnb2luZyk7XG5cdFx0XHRjb25zdCBzZXNzaW9uSWQgPSB0cmFuc3BvcnQuc2Vzc2lvbklkO1xuXHRcdFx0Y29uc3Qgc2VydmVyID0gdGhpcy5idWlsZFNlcnZlcihncm91cCwgKCkgPT4gdGhpcy5zc2VTZXNzaW9ucy5nZXQoc2Vzc2lvbklkKT8udXNlckNvbnRleHQgPz8gbnVsbCk7XG5cdFx0XHR0aGlzLnNzZVNlc3Npb25zLnNldChzZXNzaW9uSWQsIHsgdHJhbnNwb3J0LCBzZXJ2ZXIsIHVzZXJDb250ZXh0IH0pO1xuXHRcdFx0dGhpcy5jb3VudGVyU2Vzc2lvbnMuYWRkKDEsIHsgc2VydmVyOiBncm91cC5zZXJ2ZXJOYW1lIH0pO1xuXG5cdFx0XHR0cmFuc3BvcnQub25jbG9zZSA9ICgpID0+IHtcblx0XHRcdFx0dGhpcy5zc2VTZXNzaW9ucy5kZWxldGUoc2Vzc2lvbklkKTtcblx0XHRcdH07XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhpcy5zc2VTZXNzaW9ucy5kZWxldGUoc2Vzc2lvbklkKTtcblx0XHRcdFx0Y29uc3QgbXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW21jcF0gc3NlIGNvbm5lY3QgZmFpbGVkOiAke21zZ31gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBSRVNQT05TRV9BTFJFQURZX1NFTlQ7XG5cdFx0fSk7XG5cblx0XHQvLyBQT1NUIDxwYXRoPi9tZXNzYWdlcz9zZXNzaW9uSWQ94oCmIOKAlCBKU09OLVJQQyBtZXNzYWdlcyBmb3IgYW4gb3BlbiBzdHJlYW0uXG5cdFx0dGhpcy5hcHAucG9zdChtZXNzYWdlc1BhdGgsIGFzeW5jIChjOiBIb25vQ29udGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgZW52ID0gYy5lbnYgYXMgdW5rbm93biBhcyB7IGluY29taW5nOiBJbmNvbWluZ01lc3NhZ2U7IG91dGdvaW5nOiBTZXJ2ZXJSZXNwb25zZSB9O1xuXHRcdFx0Y29uc3Qgc2Vzc2lvbklkID0gbmV3IFVSTChjLnJlcS51cmwpLnNlYXJjaFBhcmFtcy5nZXQoXCJzZXNzaW9uSWRcIikgPz8gdW5kZWZpbmVkO1xuXHRcdFx0aWYgKCFzZXNzaW9uSWQpIHJldHVybiBjLnRleHQoXCJNaXNzaW5nIHNlc3Npb25JZCBxdWVyeSBwYXJhbWV0ZXJcIiwgNDAwKTtcblx0XHRcdGNvbnN0IHNlc3Npb24gPSB0aGlzLnNzZVNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuXHRcdFx0aWYgKCFzZXNzaW9uKSByZXR1cm4gYy50ZXh0KFwiU2Vzc2lvbiBub3QgZm91bmRcIiwgNDA0KTtcblx0XHRcdGNvbnN0IGJvZHkgPSBhd2FpdCBjLnJlcS5qc29uKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHNlc3Npb24udHJhbnNwb3J0LmhhbmRsZVBvc3RNZXNzYWdlKGVudi5pbmNvbWluZywgZW52Lm91dGdvaW5nLCBib2R5KTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRjb25zdCBtc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBbYmxva11bbWNwXSBoYW5kbGVQb3N0TWVzc2FnZSBmYWlsZWQ6ICR7bXNnfWApO1xuXHRcdFx0XHRpZiAoIWVudi5vdXRnb2luZy5oZWFkZXJzU2VudCkgcmV0dXJuIGMudGV4dChcIkVycm9yIGhhbmRsaW5nIE1DUCBtZXNzYWdlXCIsIDUwMCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUkVTUE9OU0VfQUxSRUFEWV9TRU5UO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlclN0cmVhbWFibGVIdHRwUm91dGUoZ3JvdXA6IFNlcnZlckdyb3VwKTogdm9pZCB7XG5cdFx0dGhpcy5sb2dnZXIubG9nKGBbYmxva11bbWNwXSAgIEFMTCAgJHtncm91cC5wYXRofSAgKHN0cmVhbWFibGUtaHR0cClgKTtcblxuXHRcdC8vIFN0YXRlbGVzcyBTdHJlYW1hYmxlLUhUVFA6IGEgZnJlc2ggc2VydmVyICsgdHJhbnNwb3J0IHBlciByZXF1ZXN0LCBzZXJ2ZWRcblx0XHQvLyBkaXJlY3RseSBvZmYgdGhlIEZldGNoIGBSZXF1ZXN0YCAod29ya3Mgb24gYW55IEhvbm8gcnVudGltZSkuXG5cdFx0dGhpcy5hcHAuYWxsKGdyb3VwLnBhdGgsIGFzeW5jIChjOiBIb25vQ29udGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgcmF3VXNlckN0eCA9XG5cdFx0XHRcdGMucmVxLmhlYWRlcihcIngtdXNlci1jb250ZXh0XCIpIHx8IChuZXcgVVJMKGMucmVxLnVybCkuc2VhcmNoUGFyYW1zLmdldChcInVzZXJfY29udGV4dFwiKSA/PyB1bmRlZmluZWQpO1xuXHRcdFx0Y29uc3QgdXNlckNvbnRleHQgPSBwYXJzZVVzZXJDb250ZXh0KHJhd1VzZXJDdHgpO1xuXG5cdFx0XHRjb25zdCBzZXJ2ZXIgPSB0aGlzLmJ1aWxkU2VydmVyKGdyb3VwLCAoKSA9PiB1c2VyQ29udGV4dCk7XG5cdFx0XHRjb25zdCB0cmFuc3BvcnQgPSBuZXcgV2ViU3RhbmRhcmRTdHJlYW1hYmxlSFRUUFNlcnZlclRyYW5zcG9ydCh7IHNlc3Npb25JZEdlbmVyYXRvcjogdW5kZWZpbmVkIH0pO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgc2VydmVyLmNvbm5lY3QodHJhbnNwb3J0KTtcblx0XHRcdFx0Y29uc3QgcmVzID0gYXdhaXQgdHJhbnNwb3J0LmhhbmRsZVJlcXVlc3QoYy5yZXEucmF3KTtcblx0XHRcdFx0cmV0dXJuIHJlcztcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRjb25zdCBtc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBbYmxva11bbWNwXSBzdHJlYW1hYmxlLWh0dHAgcmVxdWVzdCBmYWlsZWQ6ICR7bXNnfWApO1xuXHRcdFx0XHRyZXR1cm4gYy5qc29uKHsganNvbnJwYzogXCIyLjBcIiwgZXJyb3I6IHsgY29kZTogLTMyNjAzLCBtZXNzYWdlOiBtc2cgfSwgaWQ6IG51bGwgfSwgNTAwKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2luZ2xldG9uIGFjY2Vzc29yIChwYXJpdHkgd2l0aCBTU0UvV2ViaG9vayB0cmlnZ2Vycylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmxldCBhY3RpdmVUcmlnZ2VyOiBNY3BUcmlnZ2VyIHwgbnVsbCA9IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gX3NldEFjdGl2ZU1jcFRyaWdnZXIodHJpZ2dlcjogTWNwVHJpZ2dlciB8IG51bGwpOiB2b2lkIHtcblx0YWN0aXZlVHJpZ2dlciA9IHRyaWdnZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gX2dldEFjdGl2ZU1jcFRyaWdnZXIoKTogTWNwVHJpZ2dlciB8IG51bGwge1xuXHRyZXR1cm4gYWN0aXZlVHJpZ2dlcjtcbn1cblxuZXhwb3J0IHR5cGUgeyBNY3BUcmlnZ2VyQ29uZmlnIH07XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blokjs/trigger-mcp",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "files": ["dist"],
5
5
  "description": "Model Context Protocol (MCP) trigger for Blok workflows — expose workflows as MCP tools over SSE + Streamable-HTTP on the shared Hono port.",
6
6
  "type": "module",
@@ -15,9 +15,9 @@
15
15
  "author": "Deskree Technologies Inc.",
16
16
  "license": "Apache-2.0",
17
17
  "dependencies": {
18
- "@blokjs/helper": "^1.1.0",
19
- "@blokjs/runner": "^1.1.0",
20
- "@blokjs/shared": "^1.1.0",
18
+ "@blokjs/helper": "^1.3.0",
19
+ "@blokjs/runner": "^1.3.0",
20
+ "@blokjs/shared": "^1.3.0",
21
21
  "@modelcontextprotocol/sdk": "^1.29.0",
22
22
  "@opentelemetry/api": "^1.9.0",
23
23
  "hono": "^4.11.7",