@inkeep/agents-api 0.0.0-dev-20260227045757 → 0.0.0-dev-20260227162019

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.
@@ -54551,44 +54551,6 @@ var runDatasetItemWorkflow = Object.assign(_runDatasetItemWorkflow, {
54551
54551
  workflowId: "workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow"
54552
54552
  });
54553
54553
 
54554
- // src/domains/evals/workflow/functions/evaluateConversation.ts
54555
- var getConversationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getConversationStep");
54556
- var getEvaluatorsStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getEvaluatorsStep");
54557
- var executeEvaluatorStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//executeEvaluatorStep");
54558
- var logStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//logStep");
54559
- async function _evaluateConversationWorkflow(payload) {
54560
- const { conversationId, evaluatorIds } = payload;
54561
- await logStep2("Starting conversation evaluation", payload);
54562
- const conversation = await getConversationStep(payload);
54563
- const evaluators = await getEvaluatorsStep(payload);
54564
- if (evaluators.length === 0) {
54565
- await logStep2("No valid evaluators found", {
54566
- conversationId,
54567
- evaluatorIds
54568
- });
54569
- return {
54570
- success: false,
54571
- reason: "No valid evaluators"
54572
- };
54573
- }
54574
- const results = [];
54575
- for (const evaluator of evaluators) {
54576
- const result = await executeEvaluatorStep2(payload, evaluator.id, conversation);
54577
- results.push(result);
54578
- }
54579
- return {
54580
- success: true,
54581
- conversationId,
54582
- resultCount: results.length
54583
- };
54584
- }
54585
- __name(_evaluateConversationWorkflow, "_evaluateConversationWorkflow");
54586
- _evaluateConversationWorkflow.workflowId = "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow";
54587
- globalThis.__private_workflows.set("workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow", _evaluateConversationWorkflow);
54588
- var evaluateConversationWorkflow = Object.assign(_evaluateConversationWorkflow, {
54589
- workflowId: "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow"
54590
- });
54591
-
54592
54554
  // ../node_modules/.pnpm/@workflow+utils@4.1.0-beta.11/node_modules/@workflow/utils/dist/time.js
54593
54555
  var import_ms = __toESM(require_ms(), 1);
54594
54556
 
@@ -54630,7 +54592,7 @@ __name(getWorkflowMetadata, "getWorkflowMetadata");
54630
54592
  var fetch = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//workflow@4.1.0-beta.54//fetch");
54631
54593
 
54632
54594
  // src/domains/run/workflow/steps/scheduledTriggerSteps.ts
54633
- var logStep3 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//logStep");
54595
+ var logStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//logStep");
54634
54596
  var calculateNextExecutionStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//calculateNextExecutionStep");
54635
54597
  var computeSleepDurationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//computeSleepDurationStep");
54636
54598
  var getNextPendingInvocationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/run/workflow/steps/scheduledTriggerSteps//getNextPendingInvocationStep");
@@ -54654,7 +54616,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54654
54616
  const { tenantId, projectId, agentId, scheduledTriggerId } = payload;
54655
54617
  const metadata = getWorkflowMetadata();
54656
54618
  const runnerId = metadata.workflowRunId;
54657
- await logStep3("Starting scheduled trigger runner workflow", {
54619
+ await logStep2("Starting scheduled trigger runner workflow", {
54658
54620
  tenantId,
54659
54621
  projectId,
54660
54622
  agentId,
@@ -54671,7 +54633,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54671
54633
  runnerId
54672
54634
  });
54673
54635
  if (!enabledCheck.shouldContinue || !enabledCheck.trigger) {
54674
- await logStep3("Scheduled trigger workflow stopping", {
54636
+ await logStep2("Scheduled trigger workflow stopping", {
54675
54637
  scheduledTriggerId,
54676
54638
  reason: enabledCheck.reason
54677
54639
  });
@@ -54692,7 +54654,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54692
54654
  let scheduledFor;
54693
54655
  if (isOneTime) {
54694
54656
  if (!trigger.runAt) {
54695
- await logStep3("One-time trigger missing runAt", {
54657
+ await logStep2("One-time trigger missing runAt", {
54696
54658
  scheduledTriggerId
54697
54659
  });
54698
54660
  return {
@@ -54709,7 +54671,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54709
54671
  });
54710
54672
  scheduledFor = nextExecutionTime;
54711
54673
  } else {
54712
- await logStep3("Trigger missing both cronExpression and runAt", {
54674
+ await logStep2("Trigger missing both cronExpression and runAt", {
54713
54675
  scheduledTriggerId
54714
54676
  });
54715
54677
  return {
@@ -54729,7 +54691,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54729
54691
  });
54730
54692
  invocation = result.invocation;
54731
54693
  if (isOneTime && result.alreadyExists && invocation.status !== "pending") {
54732
- await logStep3("One-time trigger already executed", {
54694
+ await logStep2("One-time trigger already executed", {
54733
54695
  scheduledTriggerId,
54734
54696
  invocationId: invocation.id,
54735
54697
  status: invocation.status
@@ -54740,13 +54702,13 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54740
54702
  };
54741
54703
  }
54742
54704
  }
54743
- await logStep3("Got next pending invocation", {
54705
+ await logStep2("Got next pending invocation", {
54744
54706
  scheduledTriggerId,
54745
54707
  invocationId: invocation.id,
54746
54708
  scheduledFor: invocation.scheduledFor
54747
54709
  });
54748
54710
  const sleepMs = await computeSleepDurationStep(invocation.scheduledFor);
54749
- await logStep3("Sleeping until scheduled time", {
54711
+ await logStep2("Sleeping until scheduled time", {
54750
54712
  scheduledTriggerId,
54751
54713
  invocationId: invocation.id,
54752
54714
  scheduledFor: invocation.scheduledFor,
@@ -54761,7 +54723,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54761
54723
  runnerId
54762
54724
  });
54763
54725
  if (!postSleepCheck.shouldContinue || !postSleepCheck.trigger) {
54764
- await logStep3("Trigger disabled/deleted during sleep, stopping", {
54726
+ await logStep2("Trigger disabled/deleted during sleep, stopping", {
54765
54727
  scheduledTriggerId,
54766
54728
  reason: postSleepCheck.reason
54767
54729
  });
@@ -54779,7 +54741,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54779
54741
  invocationId: invocation.id
54780
54742
  });
54781
54743
  if (cancelCheck.cancelled) {
54782
- await logStep3("Invocation was cancelled, skipping to next", {
54744
+ await logStep2("Invocation was cancelled, skipping to next", {
54783
54745
  scheduledTriggerId,
54784
54746
  invocationId: invocation.id
54785
54747
  });
@@ -54797,7 +54759,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54797
54759
  invocationId: invocation.id
54798
54760
  });
54799
54761
  if (retryCancel.cancelled) {
54800
- await logStep3("Invocation cancelled during retry loop", {
54762
+ await logStep2("Invocation cancelled during retry loop", {
54801
54763
  scheduledTriggerId,
54802
54764
  invocationId: invocation.id
54803
54765
  });
@@ -54839,7 +54801,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54839
54801
  scheduledTriggerId,
54840
54802
  invocationId: invocation.id
54841
54803
  });
54842
- await logStep3("Scheduled trigger execution completed", {
54804
+ await logStep2("Scheduled trigger execution completed", {
54843
54805
  scheduledTriggerId,
54844
54806
  invocationId: invocation.id,
54845
54807
  conversationId: result.conversationId
@@ -54848,7 +54810,7 @@ async function _scheduledTriggerRunnerWorkflow(payload) {
54848
54810
  break;
54849
54811
  }
54850
54812
  lastError = result.error || "Unknown error";
54851
- await logStep3("Scheduled trigger execution failed", {
54813
+ await logStep2("Scheduled trigger execution failed", {
54852
54814
  scheduledTriggerId,
54853
54815
  invocationId: invocation.id,
54854
54816
  attemptNumber,
@@ -54894,7 +54856,45 @@ globalThis.__private_workflows.set("workflow//./src/domains/run/workflow/functio
54894
54856
  var scheduledTriggerRunnerWorkflow = Object.assign(_scheduledTriggerRunnerWorkflow, {
54895
54857
  workflowId: "workflow//./src/domains/run/workflow/functions/scheduledTriggerRunner//_scheduledTriggerRunnerWorkflow"
54896
54858
  });
54897
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21zQDIuMS4zL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHMiLCAic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ad29ya2Zsb3crdXRpbHNANC4xLjAtYmV0YS4xMS9ub2RlX21vZHVsZXMvQHdvcmtmbG93L3V0aWxzL3NyYy90aW1lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ad29ya2Zsb3crY29yZUA0LjEuMC1iZXRhLjU0X0Bhd3Mtc2RrK2NsaWVudC1zdHNAMy45NzAuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL3NyYy9zeW1ib2xzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ad29ya2Zsb3crY29yZUA0LjEuMC1iZXRhLjU0X0Bhd3Mtc2RrK2NsaWVudC1zdHNAMy45NzAuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL3NyYy9zbGVlcC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHdvcmtmbG93K2NvcmVANC4xLjAtYmV0YS41NF9AYXdzLXNkaytjbGllbnQtc3RzQDMuOTcwLjBfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZS9zcmMvd29ya2Zsb3cvZ2V0LXdvcmtmbG93LW1ldGFkYXRhLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS93b3JrZmxvd0A0LjEuMC1iZXRhLjU0X0Bhd3Mtc2RrK2NsaWVudC1zdHNAMy45NzAuMF9AbmVzdGpzK2NvbW1vbkAxMS4xLjEzX3JlZmxlY3QtbWV0YWRfZjg1MjgxZjI1ODBkNzA2NWZjNTE0ZTYzN2Y1ZjVlMWYvbm9kZV9tb2R1bGVzL3dvcmtmbG93L3NyYy9zdGRsaWIudHMiLCAic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy50cyIsICJzcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogSGVscGVycy5cbiAqLyB2YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi8gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgKyBKU09OLnN0cmluZ2lmeSh2YWwpKTtcbn07XG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqLyBmdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoKHR5cGUpe1xuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5cnMnOlxuICAgICAgICBjYXNlICd5cic6XG4gICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiB5O1xuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIHJldHVybiBuICogdztcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBkO1xuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdocnMnOlxuICAgICAgICBjYXNlICdocic6XG4gICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBoO1xuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWlucyc6XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBtO1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlYyc6XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBzO1xuICAgICAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgIGNhc2UgJ21zZWNzJzpcbiAgICAgICAgY2FzZSAnbXNlYyc6XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovIGZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gICAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICAgIGlmIChtc0FicyA+PSBkKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBtKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gICAgfVxuICAgIHJldHVybiBtcyArICdtcyc7XG59XG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi8gZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICAgIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgICBpZiAobXNBYnMgPj0gZCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICAgIH1cbiAgICBpZiAobXNBYnMgPj0gaCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IG0pIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IHMpIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovIGZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgZGF0YXNldCBpdGVtcyB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqXG4gKiBUaGlzIG1ha2VzIGRhdGFzZXQgcnVuIHByb2Nlc3NpbmcgZmlyZS1hbmQtZm9yZ2V0IC0gZWFjaCBpdGVtIGlzIHF1ZXVlZFxuICogaW5kZXBlbmRlbnRseSBhbmQgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSB3b3JrZmxvdyBzeXN0ZW0uXG4gKi8gLyoqX19pbnRlcm5hbF93b3JrZmxvd3N7XCJ3b3JrZmxvd3NcIjp7XCJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHNcIjp7XCJfcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiOntcIndvcmtmbG93SWRcIjpcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIn19fSxcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLnRzXCI6e1wiY2FsbENoYXRBcGlTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCJ9LFwiY3JlYXRlUmVsYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY3JlYXRlUmVsYXRpb25TdGVwXCJ9LFwiZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwifSxcImxvZ1N0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCJ9fX19Ki87XG4vKipcbiAqIFN0ZXA6IENhbGwgdGhlIGNoYXQgQVBJIHRvIHByb2Nlc3MgdGhlIGRhdGFzZXQgaXRlbVxuICovIHZhciBjYWxsQ2hhdEFwaVN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDcmVhdGUgY29udmVyc2F0aW9uIHJlbGF0aW9uIGluIGRhdGFiYXNlXG4gKi8gdmFyIGNyZWF0ZVJlbGF0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9jcmVhdGVSZWxhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgYSBzaW5nbGUgZXZhbHVhdG9yIG9uIGEgY29udmVyc2F0aW9uXG4gKi8gdmFyIGV4ZWN1dGVFdmFsdWF0b3JTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0vL2V4ZWN1dGVFdmFsdWF0b3JTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBMb2cgd29ya2Zsb3cgcHJvZ3Jlc3NcbiAqLyB2YXIgbG9nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBNYWluIHdvcmtmbG93IGZ1bmN0aW9uIC0gcHJvY2Vzc2VzIGEgc2luZ2xlIGRhdGFzZXQgaXRlbSB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqIE9wdGlvbmFsbHkgcnVucyBldmFsdWF0b3JzIG9uIHRoZSByZXN1bHRpbmcgY29udmVyc2F0aW9uLlxuICovIGFzeW5jIGZ1bmN0aW9uIF9ydW5EYXRhc2V0SXRlbVdvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGRhdGFzZXRJdGVtSWQsIGRhdGFzZXRSdW5JZCwgYWdlbnRJZCwgZXZhbHVhdG9ySWRzLCBldmFsdWF0aW9uUnVuSWQgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgZGF0YXNldCBpdGVtIHByb2Nlc3NpbmcnLCB7XG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgaGFzRXZhbHVhdG9yczogISEoZXZhbHVhdG9ySWRzICYmIGV2YWx1YXRvcklkcy5sZW5ndGggPiAwKVxuICAgIH0pO1xuICAgIC8vIENhbGwgY2hhdCBBUElcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsQ2hhdEFwaVN0ZXAocGF5bG9hZCk7XG4gICAgLy8gQ3JlYXRlIHJlbGF0aW9uIGlmIHdlIGdvdCBhIGNvbnZlcnNhdGlvblxuICAgIGlmIChyZXN1bHQuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlUmVsYXRpb25TdGVwKHBheWxvYWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCk7XG4gICAgICAgIC8vIFJ1biBldmFsdWF0aW9ucyBpZiBjb25maWd1cmVkXG4gICAgICAgIGlmIChldmFsdWF0b3JJZHMgJiYgZXZhbHVhdG9ySWRzLmxlbmd0aCA+IDAgJiYgZXZhbHVhdGlvblJ1bklkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2YWx1YXRvcklkIG9mIGV2YWx1YXRvcklkcyl7XG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUV2YWx1YXRvclN0ZXAocGF5bG9hZC50ZW5hbnRJZCwgcGF5bG9hZC5wcm9qZWN0SWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCwgZXZhbHVhdG9ySWQsIGV2YWx1YXRpb25SdW5JZCwgcGF5bG9hZC5kYXRhc2V0SXRlbUV4cGVjdGVkT3V0cHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ05vIGNvbnZlcnNhdGlvbiBjcmVhdGVkJywge1xuICAgICAgICAgICAgZGF0YXNldEl0ZW1JZCxcbiAgICAgICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsXG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZCB8fCBudWxsLFxuICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yIHx8IG51bGxcbiAgICB9O1xufVxuX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIiwgX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdydcbn0pO1xuIiwgIi8qKl9faW50ZXJuYWxfd29ya2Zsb3dze1wid29ya2Zsb3dzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLnRzXCI6e1wiX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvZXZhbHVhdGVDb252ZXJzYXRpb24vL19ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93XCJ9fX0sXCJzdGVwc1wiOntcInNyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi50c1wiOntcImV4ZWN1dGVFdmFsdWF0b3JTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIn0sXCJnZXRDb252ZXJzYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwifSxcImdldEV2YWx1YXRvcnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0RXZhbHVhdG9yc1N0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwifX19fSovO1xudmFyIGdldENvbnZlcnNhdGlvblN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwiKTtcbnZhciBnZXRFdmFsdWF0b3JzU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9nZXRFdmFsdWF0b3JzU3RlcFwiKTtcbnZhciBleGVjdXRlRXZhbHVhdG9yU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTG9nIHdvcmtmbG93IHByb2dyZXNzXG4gKi8gdmFyIGxvZ1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwiKTtcbi8qKlxuICogTWFpbiB3b3JrZmxvdyBmdW5jdGlvbiAtIG9yY2hlc3RyYXRlcyB0aGUgZXZhbHVhdGlvbiBzdGVwcy5cbiAqXG4gKiBJTVBPUlRBTlQ6IFRoaXMgcnVucyBpbiBhIGRldGVybWluaXN0aWMgc2FuZGJveC5cbiAqIC0gRG8gTk9UIGNhbGwgTm9kZS5qcyBBUElzIGRpcmVjdGx5IGhlcmUgKG5vIERCLCBubyBmcywgZXRjLilcbiAqIC0gQWxsIHNpZGUgZWZmZWN0cyBtdXN0IGhhcHBlbiBpbiBzdGVwIGZ1bmN0aW9uc1xuICovIGFzeW5jIGZ1bmN0aW9uIF9ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGNvbnZlcnNhdGlvbklkLCBldmFsdWF0b3JJZHMgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgY29udmVyc2F0aW9uIGV2YWx1YXRpb24nLCBwYXlsb2FkKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25TdGVwKHBheWxvYWQpO1xuICAgIGNvbnN0IGV2YWx1YXRvcnMgPSBhd2FpdCBnZXRFdmFsdWF0b3JzU3RlcChwYXlsb2FkKTtcbiAgICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXdhaXQgbG9nU3RlcCgnTm8gdmFsaWQgZXZhbHVhdG9ycyBmb3VuZCcsIHtcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgZXZhbHVhdG9ySWRzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICByZWFzb246ICdObyB2YWxpZCBldmFsdWF0b3JzJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgZm9yIChjb25zdCBldmFsdWF0b3Igb2YgZXZhbHVhdG9ycyl7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVFdmFsdWF0b3JTdGVwKHBheWxvYWQsIGV2YWx1YXRvci5pZCwgY29udmVyc2F0aW9uKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICByZXN1bHRDb3VudDogcmVzdWx0cy5sZW5ndGhcbiAgICB9O1xufVxuX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIiwgX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdydcbn0pO1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIi8qKlxuICogU3RlcCBmdW5jdGlvbnMgZm9yIHNjaGVkdWxlZCB0cmlnZ2VyIHdvcmtmbG93LlxuICpcbiAqIFRoZXNlIHN0ZXAgZnVuY3Rpb25zIGhhdmUgZnVsbCBOb2RlLmpzIGFjY2VzcyBhbmQgaGFuZGxlIGFsbCBkYXRhYmFzZVxuICogb3BlcmF0aW9ucyBhbmQgZXh0ZXJuYWwgc2VydmljZSBjYWxscy5cbiAqLyAvKipfX2ludGVybmFsX3dvcmtmbG93c3tcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy50c1wiOntcImFkZENvbnZlcnNhdGlvbklkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIn0sXCJjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwifSxcImNoZWNrSW52b2NhdGlvbkNhbmNlbGxlZFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwifSxcImNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCJ9LFwiY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NvbXB1dGVTbGVlcER1cmF0aW9uU3RlcFwifSxcImNyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXBcIn0sXCJkZWxldGVQZW5kaW5nSW52b2NhdGlvbnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIn0sXCJleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCJ9LFwiZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9nZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwXCJ9LFwiaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2xvZ1N0ZXBcIn0sXCJtYXJrQ29tcGxldGVkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwifSxcIm1hcmtGYWlsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCJ9LFwibWFya1J1bm5pbmdTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtSdW5uaW5nU3RlcFwifX19fSovO1xuLyoqXG4gKiBTdGVwOiBMb2cgYSBtZXNzYWdlIChhbGxvd3MgbG9nZ2luZyBmcm9tIHdvcmtmbG93IGNvbnRleHQpXG4gKi8gZXhwb3J0IHZhciBsb2dTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDYWxjdWxhdGUgdGhlIG5leHQgZXhlY3V0aW9uIHRpbWUgcmVsYXRpdmUgdG8gYSBiYXNlIHRpbWUuXG4gKi8gZXhwb3J0IHZhciBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2FsY3VsYXRlTmV4dEV4ZWN1dGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENvbXB1dGUgc2xlZXAgZHVyYXRpb25cbiAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHRvIHNsZWVwLlxuICovIGV4cG9ydCB2YXIgY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jb21wdXRlU2xlZXBEdXJhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEdldCB0aGUgbmV4dCBwZW5kaW5nIGludm9jYXRpb24gdG8gZXhlY3V0ZSAoZWFybGllc3Qgc2NoZWR1bGVkRm9yKS5cbiAqIFJldHVybnMgbnVsbCBpZiBubyBwZW5kaW5nIGludm9jYXRpb25zIGV4aXN0LlxuICovIGV4cG9ydCB2YXIgZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiKTtcbi8qKlxuICogU3RlcDogRGVsZXRlIGFsbCBwZW5kaW5nIGludm9jYXRpb25zIGZvciBhIHRyaWdnZXIuXG4gKiBVc2VkIHdoZW4gY3JvbiBleHByZXNzaW9uIGNoYW5nZXMgb3IgdHJpZ2dlciBpcyBkaXNhYmxlZC5cbiAqLyBleHBvcnQgdmFyIGRlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENoZWNrIGlmIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZCBhbmQgdGhpcyBydW5uZXIgaXMgYXV0aG9yaXRhdGl2ZS5cbiAqLyBleHBvcnQgdmFyIGNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jaGVja1RyaWdnZXJFbmFibGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogVHJ5IHRvIGNyZWF0ZSBpbnZvY2F0aW9uIGlkZW1wb3RlbnRseS5cbiAqIFJldHVybnMgZXhpc3RpbmcgaW52b2NhdGlvbiBpZiBhbHJlYWR5IGNyZWF0ZWQuXG4gKi8gZXhwb3J0IHZhciBjcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiKTtcbi8qKlxuICogU3RlcDogQ2hlY2sgaWYgaW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkIGJlZm9yZSBleGVjdXRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiBjYW5jZWxsZWQgKHNob3VsZCBza2lwIGV4ZWN1dGlvbiksIGZhbHNlIG90aGVyd2lzZVxuICovIGV4cG9ydCB2YXIgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIHJ1bm5pbmdcbiAqLyBleHBvcnQgdmFyIG1hcmtSdW5uaW5nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vbWFya1J1bm5pbmdTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBBZGQgYSBjb252ZXJzYXRpb24gSUQgdG8gdGhlIGludm9jYXRpb24ncyBjb252ZXJzYXRpb25JZHMgYXJyYXlcbiAqIENhbGxlZCBhZnRlciBlYWNoIGF0dGVtcHQgdG8gdHJhY2sgYWxsIGNvbnZlcnNhdGlvbnMgY3JlYXRlZCBkdXJpbmcgcmV0cmllc1xuICovIGV4cG9ydCB2YXIgYWRkQ29udmVyc2F0aW9uSWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IE1hcmsgaW52b2NhdGlvbiBhcyBjb21wbGV0ZWRcbiAqLyBleHBvcnQgdmFyIG1hcmtDb21wbGV0ZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIGZhaWxlZFxuICovIGV4cG9ydCB2YXIgbWFya0ZhaWxlZFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBJbmNyZW1lbnQgYXR0ZW1wdCBudW1iZXIgZm9yIHJldHJ5XG4gKi8gZXhwb3J0IHZhciBpbmNyZW1lbnRBdHRlbXB0U3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgdGhlIHNjaGVkdWxlZCB0cmlnZ2VyIHVzaW5nIGV4ZWN1dGVBZ2VudEFzeW5jLlxuICpcbiAqIFVzZXMgdGhlIHNoYXJlZCBleGVjdXRlQWdlbnRBc3luYyBmcm9tIFRyaWdnZXJTZXJ2aWNlIHdoaWNoIGluY2x1ZGVzXG4gKiBwcm9wZXIgdHJhY2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCBjb252ZXJzYXRpb24gbWFuYWdlbWVudC5cbiAqLyBleHBvcnQgdmFyIGV4ZWN1dGVTY2hlZHVsZWRUcmlnZ2VyU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCIpO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgc2NoZWR1bGVkIHRyaWdnZXJzLlxuICpcbiAqIFRoaXMgd29ya2Zsb3c6XG4gKiAxLiBHZXRzIG9yIGNyZWF0ZXMgdGhlIG5leHQgcGVuZGluZyBpbnZvY2F0aW9uXG4gKiAyLiBTbGVlcHMgdW50aWwgaXRzIHNjaGVkdWxlZCB0aW1lXG4gKiAzLiBDaGVja3MgaWYgdGhlIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZFxuICogNC4gRXhlY3V0ZXMgdGhlIGFnZW50IHdpdGggcmV0cmllc1xuICogNS4gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3BzIGJhY2sgdG8gc3RlcCAxXG4gKlxuICovIGltcG9ydCB7IGdldFdvcmtmbG93TWV0YWRhdGEsIHNsZWVwIH0gZnJvbSAnd29ya2Zsb3cnO1xuaW1wb3J0IHsgYWRkQ29udmVyc2F0aW9uSWRTdGVwLCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCwgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCwgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAsIGNvbXB1dGVTbGVlcER1cmF0aW9uU3RlcCwgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwLCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAsIGdldE5leHRQZW5kaW5nSW52b2NhdGlvblN0ZXAsIGluY3JlbWVudEF0dGVtcHRTdGVwLCBsb2dTdGVwLCBtYXJrQ29tcGxldGVkU3RlcCwgbWFya0ZhaWxlZFN0ZXAsIG1hcmtSdW5uaW5nU3RlcCB9IGZyb20gJy4uL3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcyc7XG4vKipfX2ludGVybmFsX3dvcmtmbG93c3tcIndvcmtmbG93c1wiOntcInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci50c1wiOntcIl9zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIn19fX0qLztcbi8qKlxuICogR2VuZXJhdGUgaWRlbXBvdGVuY3kga2V5IGZvciBhIHNjaGVkdWxlZCBleGVjdXRpb24uXG4gKi8gZnVuY3Rpb24gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleShzY2hlZHVsZWRUcmlnZ2VySWQsIHNjaGVkdWxlZEZvcikge1xuICAgIHJldHVybiBgc2NoZWRfJHtzY2hlZHVsZWRUcmlnZ2VySWR9XyR7c2NoZWR1bGVkRm9yfWA7XG59XG4vKipcbiAqIE1haW4gd29ya2Zsb3cgZnVuY3Rpb24gLSBydW5zIGEgc2NoZWR1bGVkIHRyaWdnZXIuXG4gKiBGb3IgY3JvbiB0cmlnZ2VycywgdGhpcyBsb29wcyBpbmRlZmluaXRlbHkgdW50aWwgZGlzYWJsZWQvZGVsZXRlZC5cbiAqIEZvciBvbmUtdGltZSB0cmlnZ2VycywgaXQgZXhlY3V0ZXMgb25jZSBhbmQgY29tcGxldGVzLlxuICpcbiAqLyBhc3luYyBmdW5jdGlvbiBfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IHRlbmFudElkLCBwcm9qZWN0SWQsIGFnZW50SWQsIHNjaGVkdWxlZFRyaWdnZXJJZCB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGdldFdvcmtmbG93TWV0YWRhdGEoKTtcbiAgICBjb25zdCBydW5uZXJJZCA9IG1ldGFkYXRhLndvcmtmbG93UnVuSWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgc2NoZWR1bGVkIHRyaWdnZXIgcnVubmVyIHdvcmtmbG93Jywge1xuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgcHJvamVjdElkLFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgIHJ1bm5lcklkXG4gICAgfSk7XG4gICAgLy8gVHJhY2sgdGhlIGxhc3Qgc2NoZWR1bGVkIHRpbWUgZm9yIGNyb24gY2FsY3VsYXRpb25zXG4gICAgbGV0IGxhc3RTY2hlZHVsZWRGb3IgPSBudWxsO1xuICAgIC8vIE1haW4gZXhlY3V0aW9uIGxvb3BcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgICAgY29uc3QgZW5hYmxlZENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZW5hYmxlZENoZWNrLnNob3VsZENvbnRpbnVlIHx8ICFlbmFibGVkQ2hlY2sudHJpZ2dlcikge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgd29ya2Zsb3cgc3RvcHBpbmcnLCB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmlnZ2VyID0gZW5hYmxlZENoZWNrLnRyaWdnZXI7XG4gICAgICAgIGNvbnN0IGlzT25lVGltZSA9ICEhdHJpZ2dlci5ydW5BdDtcbiAgICAgICAgbGV0IGludm9jYXRpb24gPSBhd2FpdCBnZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ3JlYXRlIGludm9jYXRpb24gaWYgbm9uZSBleGlzdHNcbiAgICAgICAgaWYgKCFpbnZvY2F0aW9uKSB7XG4gICAgICAgICAgICBsZXQgc2NoZWR1bGVkRm9yO1xuICAgICAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgICAgIGlmICghdHJpZ2dlci5ydW5BdCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdPbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFzb246ICdvbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZEZvciA9IHRyaWdnZXIucnVuQXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRyaWdnZXIuY3JvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG5leHRFeGVjdXRpb25UaW1lIH0gPSBhd2FpdCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCh7XG4gICAgICAgICAgICAgICAgICAgIGNyb25FeHByZXNzaW9uOiB0cmlnZ2VyLmNyb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICBjcm9uVGltZXpvbmU6IHRyaWdnZXIuY3JvblRpbWV6b25lLFxuICAgICAgICAgICAgICAgICAgICBsYXN0U2NoZWR1bGVkRm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yID0gbmV4dEV4ZWN1dGlvblRpbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgbWlzc2luZyBib3RoIGNyb25FeHByZXNzaW9uIGFuZCBydW5BdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246ICd0cmlnZ2VyIG1pc3NpbmcgY3JvbkV4cHJlc3Npb24gYW5kIHJ1bkF0J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZGVtcG90ZW5jeUtleSA9IGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoc2NoZWR1bGVkVHJpZ2dlcklkLCBzY2hlZHVsZWRGb3IpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwKHtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGlkZW1wb3RlbmN5S2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGludm9jYXRpb24gPSByZXN1bHQuaW52b2NhdGlvbjtcbiAgICAgICAgICAgIC8vIEZvciBvbmUtdGltZSB0cmlnZ2VycywgY2hlY2sgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgICAgIGlmIChpc09uZVRpbWUgJiYgcmVzdWx0LmFscmVhZHlFeGlzdHMgJiYgaW52b2NhdGlvbi5zdGF0dXMgIT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ09uZS10aW1lIHRyaWdnZXIgYWxyZWFkeSBleGVjdXRlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogaW52b2NhdGlvbi5zdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdhbHJlYWR5X2V4ZWN1dGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBsb2dTdGVwKCdHb3QgbmV4dCBwZW5kaW5nIGludm9jYXRpb24nLCB7XG4gICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICBzY2hlZHVsZWRGb3I6IGludm9jYXRpb24uc2NoZWR1bGVkRm9yXG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LiBTbGVlcCB1bnRpbCB0aGUgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lXG4gICAgICAgIGNvbnN0IHNsZWVwTXMgPSBhd2FpdCBjb21wdXRlU2xlZXBEdXJhdGlvblN0ZXAoaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IpO1xuICAgICAgICBhd2FpdCBsb2dTdGVwKCdTbGVlcGluZyB1bnRpbCBzY2hlZHVsZWQgdGltZScsIHtcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZEZvcjogaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IsXG4gICAgICAgICAgICBzbGVlcE1zXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzbGVlcChzbGVlcE1zKTtcbiAgICAgICAgLy8gNS4gUmUtY2hlY2sgaWYgdHJpZ2dlciBpcyBzdGlsbCBlbmFibGVkIGFmdGVyIHNsZWVwXG4gICAgICAgIGNvbnN0IHBvc3RTbGVlcENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcG9zdFNsZWVwQ2hlY2suc2hvdWxkQ29udGludWUgfHwgIXBvc3RTbGVlcENoZWNrLnRyaWdnZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgZGlzYWJsZWQvZGVsZXRlZCBkdXJpbmcgc2xlZXAsIHN0b3BwaW5nJywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICByZWFzb246IHBvc3RTbGVlcENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogcG9zdFNsZWVwQ2hlY2sucmVhc29uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZnJlc2ggdHJpZ2dlciBjb25maWcgKG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHNsZWVwKVxuICAgICAgICBjb25zdCBjdXJyZW50VHJpZ2dlciA9IHBvc3RTbGVlcENoZWNrLnRyaWdnZXI7XG4gICAgICAgIC8vIDYuIENoZWNrIGlmIGludm9jYXRpb24gd2FzIGNhbmNlbGxlZCBkdXJpbmcgc2xlZXBcbiAgICAgICAgY29uc3QgY2FuY2VsQ2hlY2sgPSBhd2FpdCBjaGVja0ludm9jYXRpb25DYW5jZWxsZWRTdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNhbmNlbENoZWNrLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkLCBza2lwcGluZyB0byBuZXh0Jywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4gRXhlY3V0ZSB3aXRoIHJldHJpZXNcbiAgICAgICAgbGV0IGF0dGVtcHROdW1iZXIgPSBpbnZvY2F0aW9uLmF0dGVtcHROdW1iZXI7XG4gICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IGN1cnJlbnRUcmlnZ2VyLm1heFJldHJpZXMgKyAxO1xuICAgICAgICB3aGlsZShhdHRlbXB0TnVtYmVyIDw9IG1heEF0dGVtcHRzKXtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FuY2VsID0gYXdhaXQgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmV0cnlDYW5jZWwuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiBjYW5jZWxsZWQgZHVyaW5nIHJldHJ5IGxvb3AnLCB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYXJrIGFzIHJ1bm5pbmdcbiAgICAgICAgICAgIGF3YWl0IG1hcmtSdW5uaW5nU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiBjdXJyZW50VHJpZ2dlci5tZXNzYWdlVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogY3VycmVudFRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHRpbWVvdXRTZWNvbmRzOiBjdXJyZW50VHJpZ2dlci50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgICAgICAgICBydW5Bc1VzZXJJZDogY3VycmVudFRyaWdnZXIucnVuQXNVc2VySWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU2F2ZSBjb252ZXJzYXRpb24gSUQgaW1tZWRpYXRlbHkgYWZ0ZXIgZWFjaCBhdHRlbXB0XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkQ29udmVyc2F0aW9uSWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiByZXN1bHQuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IG1hcmtDb21wbGV0ZWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdTY2hlZHVsZWQgdHJpZ2dlciBleGVjdXRpb24gY29tcGxldGVkJywge1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgZXhlY3V0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkLFxuICAgICAgICAgICAgICAgIGF0dGVtcHROdW1iZXIsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGxhc3RFcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXR0ZW1wdE51bWJlciA8IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaW5jcmVtZW50QXR0ZW1wdFN0ZXAoe1xuICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEF0dGVtcHQ6IGF0dGVtcHROdW1iZXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhdHRlbXB0TnVtYmVyKys7XG4gICAgICAgICAgICAgICAgY29uc3Qgaml0dGVyID0gTWF0aC5yYW5kb20oKSAqIDAuMztcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChjdXJyZW50VHJpZ2dlci5yZXRyeURlbGF5U2Vjb25kcyAqIDEwMDAgKiAoMSArIGppdHRlcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrIGFzIGZhaWxlZCBpZiBhbGwgcmV0cmllcyBleGhhdXN0ZWRcbiAgICAgICAgaWYgKGxhc3RFcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgbWFya0ZhaWxlZFN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYWNrIHRoaXMgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lIGZvciBuZXh0IGNyb24gY2FsY3VsYXRpb25cbiAgICAgICAgbGFzdFNjaGVkdWxlZEZvciA9IGludm9jYXRpb24uc2NoZWR1bGVkRm9yO1xuICAgICAgICAvLyBGb3Igb25lLXRpbWUgdHJpZ2dlcnMsIHdlJ3JlIGRvbmVcbiAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGxhc3RFcnJvciA/ICdmYWlsZWQnIDogJ2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgLy8gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3AgY29udGludWVzIHRvIGNyZWF0ZS9nZXQgbmV4dCBpbnZvY2F0aW9uXG4gICAgfVxufVxuX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdy53b3JrZmxvd0lkID0gXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIiwgX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdyk7XG4vLyBFeHBvcnQgd2l0aCB3b3JrZmxvd0lkIGZvciB0aGUgYnVpbGQgc3lzdGVtXG5leHBvcnQgY29uc3Qgc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93ID0gT2JqZWN0LmFzc2lnbihfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93LCB7XG4gICAgd29ya2Zsb3dJZDogJ3dvcmtmbG93Ly8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci8vX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdydcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxxRUFBQUEsU0FBQTtBQUFBO0FBRUksUUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQUNaLFFBQUksSUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQWFSLElBQUFBLFFBQU8sVUFBVSxTQUFTLEtBQUssU0FBUztBQUN4QyxnQkFBVSxXQUFXLENBQUM7QUFDdEIsVUFBSSxPQUFPLE9BQU87QUFDbEIsVUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTLEdBQUc7QUFDckMsZUFBTyxNQUFNLEdBQUc7QUFBQSxNQUNwQixXQUFXLFNBQVMsWUFBWSxTQUFTLEdBQUcsR0FBRztBQUMzQyxlQUFPLFFBQVEsT0FBTyxRQUFRLEdBQUcsSUFBSSxTQUFTLEdBQUc7QUFB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QUVELFVBQUksT0FBTyxnQkFBZ0I7QUFDdkIsY0FBTSxzQkFBc0I7QUFBQSxVQUN4QjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsY0FBYyxXQUFXO0FBQUEsVUFDekIsZ0JBQWdCLE9BQU87QUFBQSxRQUMzQixDQUFDO0FBQUEsTUFDTDtBQUNBLFVBQUksT0FBTyxTQUFTO0FBQ2hCLGNBQU0sa0JBQWtCO0FBQUEsVUFDcEI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLGNBQWMsV0FBVztBQUFBLFFBQzdCLENBQUM7QUFDRCxjQUFNQSxTQUFRLHlDQUF5QztBQUFBLFVBQ25EO0FBQUEsVUFDQSxjQUFjLFdBQVc7QUFBQSxVQUN6QixnQkFBZ0IsT0FBTztBQUFBLFFBQzNCLENBQUM7QUFDRCxvQkFBWTtBQUNaO0FBQUEsTUFDSjtBQUNBLGtCQUFZLE9BQU8sU0FBUztBQUM1QixZQUFNQSxTQUFRLHNDQUFzQztBQUFBLFFBQ2hEO0FBQUEsUUFDQSxjQUFjLFdBQVc7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsT0FBTztBQUFBLE1BQ1gsQ0FBQztBQUNELFVBQUksZ0JBQWdCLGFBQWE7QUFDN0IsY0FBTSxxQkFBcUI7QUFBQSxVQUN2QjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsY0FBYyxXQUFXO0FBQUEsVUFDekIsZ0JBQWdCO0FBQUEsUUFDcEIsQ0FBQztBQUNEO0FBQ0EsY0FBTSxTQUFTLEtBQUssT0FBTyxJQUFJO0FBQy9CLGNBQU0sTUFBTSxlQUFlLG9CQUFvQixPQUFRLElBQUksT0FBTztBQUFBLE1BQ3RFLE9BQU87QUFDSDtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBRUEsUUFBSSxXQUFXO0FBQ1gsWUFBTSxlQUFlO0FBQUEsUUFDakI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGNBQWMsV0FBVztBQUFBLE1BQzdCLENBQUM7QUFBQSxJQUNMO0FBRUEsdUJBQW1CLFdBQVc7QUFFOUIsUUFBSSxXQUFXO0FBQ1gsYUFBTztBQUFBLFFBQ0gsUUFBUSxZQUFZLFdBQVc7QUFBQSxRQUMvQixjQUFjLFdBQVc7QUFBQSxNQUM3QjtBQUFBLElBQ0o7QUFBQSxFQUVKO0FBQ0o7QUE1UG1CO0FBNlBuQixnQ0FBZ0MsYUFBYTtBQUM3QyxXQUFXLG9CQUFvQixJQUFJLDBHQUEwRywrQkFBK0I7QUFFckssSUFBTSxpQ0FBaUMsT0FBTyxPQUFPLGlDQUFpQztBQUFBLEVBQ3pGLFlBQVk7QUFDaEIsQ0FBQzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1zIiwgImV4ZWN1dGVFdmFsdWF0b3JTdGVwIiwgImxvZ1N0ZXAiLCAibG9nU3RlcCIsICJsb2dTdGVwIl0KfQo=
54859
+
54860
+ // src/domains/evals/workflow/functions/evaluateConversation.ts
54861
+ var getConversationStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getConversationStep");
54862
+ var getEvaluatorsStep = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//getEvaluatorsStep");
54863
+ var executeEvaluatorStep2 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//executeEvaluatorStep");
54864
+ var logStep3 = globalThis[Symbol.for("WORKFLOW_USE_STEP")]("step//./src/domains/evals/workflow/functions/evaluateConversation//logStep");
54865
+ async function _evaluateConversationWorkflow(payload) {
54866
+ const { conversationId, evaluatorIds } = payload;
54867
+ await logStep3("Starting conversation evaluation", payload);
54868
+ const conversation = await getConversationStep(payload);
54869
+ const evaluators = await getEvaluatorsStep(payload);
54870
+ if (evaluators.length === 0) {
54871
+ await logStep3("No valid evaluators found", {
54872
+ conversationId,
54873
+ evaluatorIds
54874
+ });
54875
+ return {
54876
+ success: false,
54877
+ reason: "No valid evaluators"
54878
+ };
54879
+ }
54880
+ const results = [];
54881
+ for (const evaluator of evaluators) {
54882
+ const result = await executeEvaluatorStep2(payload, evaluator.id, conversation);
54883
+ results.push(result);
54884
+ }
54885
+ return {
54886
+ success: true,
54887
+ conversationId,
54888
+ resultCount: results.length
54889
+ };
54890
+ }
54891
+ __name(_evaluateConversationWorkflow, "_evaluateConversationWorkflow");
54892
+ _evaluateConversationWorkflow.workflowId = "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow";
54893
+ globalThis.__private_workflows.set("workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow", _evaluateConversationWorkflow);
54894
+ var evaluateConversationWorkflow = Object.assign(_evaluateConversationWorkflow, {
54895
+ workflowId: "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow"
54896
+ });
54897
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21zQDIuMS4zL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdyt1dGlsc0A0LjEuMC1iZXRhLjExL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvdXRpbHMvc3JjL3RpbWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdytjb3JlQDQuMS4wLWJldGEuNTRfQGF3cy1zZGsrY2xpZW50LXN0c0AzLjk3MC4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQHdvcmtmbG93L2NvcmUvc3JjL3N5bWJvbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdytjb3JlQDQuMS4wLWJldGEuNTRfQGF3cy1zZGsrY2xpZW50LXN0c0AzLjk3MC4wX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQHdvcmtmbG93L2NvcmUvc3JjL3NsZWVwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ad29ya2Zsb3crY29yZUA0LjEuMC1iZXRhLjU0X0Bhd3Mtc2RrK2NsaWVudC1zdHNAMy45NzAuMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL3NyYy93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dvcmtmbG93QDQuMS4wLWJldGEuNTRfQGF3cy1zZGsrY2xpZW50LXN0c0AzLjk3MC4wX0BuZXN0anMrY29tbW9uQDExLjEuMTNfcmVmbGVjdC1tZXRhZF9mODUyODFmMjU4MGQ3MDY1ZmM1MTRlNjM3ZjVmNWUxZi9ub2RlX21vZHVsZXMvd29ya2Zsb3cvc3JjL3N0ZGxpYi50cyIsICJzcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLnRzIiwgInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci50cyIsICJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvZXZhbHVhdGVDb252ZXJzYXRpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogSGVscGVycy5cbiAqLyB2YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi8gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgKyBKU09OLnN0cmluZ2lmeSh2YWwpKTtcbn07XG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqLyBmdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoKHR5cGUpe1xuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5cnMnOlxuICAgICAgICBjYXNlICd5cic6XG4gICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiB5O1xuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIHJldHVybiBuICogdztcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBkO1xuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdocnMnOlxuICAgICAgICBjYXNlICdocic6XG4gICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBoO1xuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWlucyc6XG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBtO1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlYyc6XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgcmV0dXJuIG4gKiBzO1xuICAgICAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgIGNhc2UgJ21zZWNzJzpcbiAgICAgICAgY2FzZSAnbXNlYyc6XG4gICAgICAgIGNhc2UgJ21zJzpcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovIGZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gICAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICAgIGlmIChtc0FicyA+PSBkKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBtKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gICAgfVxuICAgIHJldHVybiBtcyArICdtcyc7XG59XG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi8gZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICAgIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgICBpZiAobXNBYnMgPj0gZCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICAgIH1cbiAgICBpZiAobXNBYnMgPj0gaCkge1xuICAgICAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IG0pIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IHMpIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovIGZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgZGF0YXNldCBpdGVtcyB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqXG4gKiBUaGlzIG1ha2VzIGRhdGFzZXQgcnVuIHByb2Nlc3NpbmcgZmlyZS1hbmQtZm9yZ2V0IC0gZWFjaCBpdGVtIGlzIHF1ZXVlZFxuICogaW5kZXBlbmRlbnRseSBhbmQgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSB3b3JrZmxvdyBzeXN0ZW0uXG4gKi8gLyoqX19pbnRlcm5hbF93b3JrZmxvd3N7XCJ3b3JrZmxvd3NcIjp7XCJzcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0udHNcIjp7XCJfcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiOntcIndvcmtmbG93SWRcIjpcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIn19fSxcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLnRzXCI6e1wiY2FsbENoYXRBcGlTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCJ9LFwiY3JlYXRlUmVsYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY3JlYXRlUmVsYXRpb25TdGVwXCJ9LFwiZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwifSxcImxvZ1N0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCJ9fX19Ki87XG4vKipcbiAqIFN0ZXA6IENhbGwgdGhlIGNoYXQgQVBJIHRvIHByb2Nlc3MgdGhlIGRhdGFzZXQgaXRlbVxuICovIHZhciBjYWxsQ2hhdEFwaVN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vY2FsbENoYXRBcGlTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDcmVhdGUgY29udmVyc2F0aW9uIHJlbGF0aW9uIGluIGRhdGFiYXNlXG4gKi8gdmFyIGNyZWF0ZVJlbGF0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9jcmVhdGVSZWxhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgYSBzaW5nbGUgZXZhbHVhdG9yIG9uIGEgY29udmVyc2F0aW9uXG4gKi8gdmFyIGV4ZWN1dGVFdmFsdWF0b3JTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvcnVuRGF0YXNldEl0ZW0vL2V4ZWN1dGVFdmFsdWF0b3JTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBMb2cgd29ya2Zsb3cgcHJvZ3Jlc3NcbiAqLyB2YXIgbG9nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBNYWluIHdvcmtmbG93IGZ1bmN0aW9uIC0gcHJvY2Vzc2VzIGEgc2luZ2xlIGRhdGFzZXQgaXRlbSB0aHJvdWdoIHRoZSBjaGF0IEFQSS5cbiAqIE9wdGlvbmFsbHkgcnVucyBldmFsdWF0b3JzIG9uIHRoZSByZXN1bHRpbmcgY29udmVyc2F0aW9uLlxuICovIGFzeW5jIGZ1bmN0aW9uIF9ydW5EYXRhc2V0SXRlbVdvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGRhdGFzZXRJdGVtSWQsIGRhdGFzZXRSdW5JZCwgYWdlbnRJZCwgZXZhbHVhdG9ySWRzLCBldmFsdWF0aW9uUnVuSWQgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgZGF0YXNldCBpdGVtIHByb2Nlc3NpbmcnLCB7XG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgaGFzRXZhbHVhdG9yczogISEoZXZhbHVhdG9ySWRzICYmIGV2YWx1YXRvcklkcy5sZW5ndGggPiAwKVxuICAgIH0pO1xuICAgIC8vIENhbGwgY2hhdCBBUElcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsQ2hhdEFwaVN0ZXAocGF5bG9hZCk7XG4gICAgLy8gQ3JlYXRlIHJlbGF0aW9uIGlmIHdlIGdvdCBhIGNvbnZlcnNhdGlvblxuICAgIGlmIChyZXN1bHQuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlUmVsYXRpb25TdGVwKHBheWxvYWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCk7XG4gICAgICAgIC8vIFJ1biBldmFsdWF0aW9ucyBpZiBjb25maWd1cmVkXG4gICAgICAgIGlmIChldmFsdWF0b3JJZHMgJiYgZXZhbHVhdG9ySWRzLmxlbmd0aCA+IDAgJiYgZXZhbHVhdGlvblJ1bklkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2YWx1YXRvcklkIG9mIGV2YWx1YXRvcklkcyl7XG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUV2YWx1YXRvclN0ZXAocGF5bG9hZC50ZW5hbnRJZCwgcGF5bG9hZC5wcm9qZWN0SWQsIHJlc3VsdC5jb252ZXJzYXRpb25JZCwgZXZhbHVhdG9ySWQsIGV2YWx1YXRpb25SdW5JZCwgcGF5bG9hZC5kYXRhc2V0SXRlbUV4cGVjdGVkT3V0cHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ05vIGNvbnZlcnNhdGlvbiBjcmVhdGVkJywge1xuICAgICAgICAgICAgZGF0YXNldEl0ZW1JZCxcbiAgICAgICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6ICFyZXN1bHQuZXJyb3IsXG4gICAgICAgIGRhdGFzZXRJdGVtSWQsXG4gICAgICAgIGRhdGFzZXRSdW5JZCxcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZCB8fCBudWxsLFxuICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yIHx8IG51bGxcbiAgICB9O1xufVxuX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ydW5EYXRhc2V0SXRlbS8vX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3dcIiwgX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX3J1bkRhdGFzZXRJdGVtV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL3J1bkRhdGFzZXRJdGVtLy9fcnVuRGF0YXNldEl0ZW1Xb3JrZmxvdydcbn0pO1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIi8qKlxuICogU3RlcCBmdW5jdGlvbnMgZm9yIHNjaGVkdWxlZCB0cmlnZ2VyIHdvcmtmbG93LlxuICpcbiAqIFRoZXNlIHN0ZXAgZnVuY3Rpb25zIGhhdmUgZnVsbCBOb2RlLmpzIGFjY2VzcyBhbmQgaGFuZGxlIGFsbCBkYXRhYmFzZVxuICogb3BlcmF0aW9ucyBhbmQgZXh0ZXJuYWwgc2VydmljZSBjYWxscy5cbiAqLyAvKipfX2ludGVybmFsX3dvcmtmbG93c3tcInN0ZXBzXCI6e1wic3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy50c1wiOntcImFkZENvbnZlcnNhdGlvbklkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIn0sXCJjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcFwifSxcImNoZWNrSW52b2NhdGlvbkNhbmNlbGxlZFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwifSxcImNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NoZWNrVHJpZ2dlckVuYWJsZWRTdGVwXCJ9LFwiY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NvbXB1dGVTbGVlcER1cmF0aW9uU3RlcFwifSxcImNyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXBcIn0sXCJkZWxldGVQZW5kaW5nSW52b2NhdGlvbnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIn0sXCJleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCJ9LFwiZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9nZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwXCJ9LFwiaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2xvZ1N0ZXBcIn0sXCJtYXJrQ29tcGxldGVkU3RlcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwifSxcIm1hcmtGYWlsZWRTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCJ9LFwibWFya1J1bm5pbmdTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtSdW5uaW5nU3RlcFwifX19fSovO1xuLyoqXG4gKiBTdGVwOiBMb2cgYSBtZXNzYWdlIChhbGxvd3MgbG9nZ2luZyBmcm9tIHdvcmtmbG93IGNvbnRleHQpXG4gKi8gZXhwb3J0IHZhciBsb2dTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9sb2dTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBDYWxjdWxhdGUgdGhlIG5leHQgZXhlY3V0aW9uIHRpbWUgcmVsYXRpdmUgdG8gYSBiYXNlIHRpbWUuXG4gKi8gZXhwb3J0IHZhciBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2FsY3VsYXRlTmV4dEV4ZWN1dGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENvbXB1dGUgc2xlZXAgZHVyYXRpb25cbiAqIFJldHVybnMgbWlsbGlzZWNvbmRzIHRvIHNsZWVwLlxuICovIGV4cG9ydCB2YXIgY29tcHV0ZVNsZWVwRHVyYXRpb25TdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jb21wdXRlU2xlZXBEdXJhdGlvblN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEdldCB0aGUgbmV4dCBwZW5kaW5nIGludm9jYXRpb24gdG8gZXhlY3V0ZSAoZWFybGllc3Qgc2NoZWR1bGVkRm9yKS5cbiAqIFJldHVybnMgbnVsbCBpZiBubyBwZW5kaW5nIGludm9jYXRpb25zIGV4aXN0LlxuICovIGV4cG9ydCB2YXIgZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZ2V0TmV4dFBlbmRpbmdJbnZvY2F0aW9uU3RlcFwiKTtcbi8qKlxuICogU3RlcDogRGVsZXRlIGFsbCBwZW5kaW5nIGludm9jYXRpb25zIGZvciBhIHRyaWdnZXIuXG4gKiBVc2VkIHdoZW4gY3JvbiBleHByZXNzaW9uIGNoYW5nZXMgb3IgdHJpZ2dlciBpcyBkaXNhYmxlZC5cbiAqLyBleHBvcnQgdmFyIGRlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2RlbGV0ZVBlbmRpbmdJbnZvY2F0aW9uc1N0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IENoZWNrIGlmIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZCBhbmQgdGhpcyBydW5uZXIgaXMgYXV0aG9yaXRhdGl2ZS5cbiAqLyBleHBvcnQgdmFyIGNoZWNrVHJpZ2dlckVuYWJsZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9jaGVja1RyaWdnZXJFbmFibGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogVHJ5IHRvIGNyZWF0ZSBpbnZvY2F0aW9uIGlkZW1wb3RlbnRseS5cbiAqIFJldHVybnMgZXhpc3RpbmcgaW52b2NhdGlvbiBpZiBhbHJlYWR5IGNyZWF0ZWQuXG4gKi8gZXhwb3J0IHZhciBjcmVhdGVJbnZvY2F0aW9uSWRlbXBvdGVudFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL2NyZWF0ZUludm9jYXRpb25JZGVtcG90ZW50U3RlcFwiKTtcbi8qKlxuICogU3RlcDogQ2hlY2sgaWYgaW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkIGJlZm9yZSBleGVjdXRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiBjYW5jZWxsZWQgKHNob3VsZCBza2lwIGV4ZWN1dGlvbiksIGZhbHNlIG90aGVyd2lzZVxuICovIGV4cG9ydCB2YXIgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIHJ1bm5pbmdcbiAqLyBleHBvcnQgdmFyIG1hcmtSdW5uaW5nU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vbWFya1J1bm5pbmdTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBBZGQgYSBjb252ZXJzYXRpb24gSUQgdG8gdGhlIGludm9jYXRpb24ncyBjb252ZXJzYXRpb25JZHMgYXJyYXlcbiAqIENhbGxlZCBhZnRlciBlYWNoIGF0dGVtcHQgdG8gdHJhY2sgYWxsIGNvbnZlcnNhdGlvbnMgY3JlYXRlZCBkdXJpbmcgcmV0cmllc1xuICovIGV4cG9ydCB2YXIgYWRkQ29udmVyc2F0aW9uSWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9hZGRDb252ZXJzYXRpb25JZFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IE1hcmsgaW52b2NhdGlvbiBhcyBjb21wbGV0ZWRcbiAqLyBleHBvcnQgdmFyIG1hcmtDb21wbGV0ZWRTdGVwID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvc3RlcHMvc2NoZWR1bGVkVHJpZ2dlclN0ZXBzLy9tYXJrQ29tcGxldGVkU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTWFyayBpbnZvY2F0aW9uIGFzIGZhaWxlZFxuICovIGV4cG9ydCB2YXIgbWFya0ZhaWxlZFN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9zdGVwcy9zY2hlZHVsZWRUcmlnZ2VyU3RlcHMvL21hcmtGYWlsZWRTdGVwXCIpO1xuLyoqXG4gKiBTdGVwOiBJbmNyZW1lbnQgYXR0ZW1wdCBudW1iZXIgZm9yIHJldHJ5XG4gKi8gZXhwb3J0IHZhciBpbmNyZW1lbnRBdHRlbXB0U3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vaW5jcmVtZW50QXR0ZW1wdFN0ZXBcIik7XG4vKipcbiAqIFN0ZXA6IEV4ZWN1dGUgdGhlIHNjaGVkdWxlZCB0cmlnZ2VyIHVzaW5nIGV4ZWN1dGVBZ2VudEFzeW5jLlxuICpcbiAqIFVzZXMgdGhlIHNoYXJlZCBleGVjdXRlQWdlbnRBc3luYyBmcm9tIFRyaWdnZXJTZXJ2aWNlIHdoaWNoIGluY2x1ZGVzXG4gKiBwcm9wZXIgdHJhY2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCBjb252ZXJzYXRpb24gbWFuYWdlbWVudC5cbiAqLyBleHBvcnQgdmFyIGV4ZWN1dGVTY2hlZHVsZWRUcmlnZ2VyU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvcnVuL3dvcmtmbG93L3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcy8vZXhlY3V0ZVNjaGVkdWxlZFRyaWdnZXJTdGVwXCIpO1xuIiwgIi8qKlxuICogV29ya2Zsb3cgZm9yIHJ1bm5pbmcgc2NoZWR1bGVkIHRyaWdnZXJzLlxuICpcbiAqIFRoaXMgd29ya2Zsb3c6XG4gKiAxLiBHZXRzIG9yIGNyZWF0ZXMgdGhlIG5leHQgcGVuZGluZyBpbnZvY2F0aW9uXG4gKiAyLiBTbGVlcHMgdW50aWwgaXRzIHNjaGVkdWxlZCB0aW1lXG4gKiAzLiBDaGVja3MgaWYgdGhlIHRyaWdnZXIgaXMgc3RpbGwgZW5hYmxlZFxuICogNC4gRXhlY3V0ZXMgdGhlIGFnZW50IHdpdGggcmV0cmllc1xuICogNS4gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3BzIGJhY2sgdG8gc3RlcCAxXG4gKlxuICovIGltcG9ydCB7IGdldFdvcmtmbG93TWV0YWRhdGEsIHNsZWVwIH0gZnJvbSAnd29ya2Zsb3cnO1xuaW1wb3J0IHsgYWRkQ29udmVyc2F0aW9uSWRTdGVwLCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCwgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCwgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAsIGNvbXB1dGVTbGVlcER1cmF0aW9uU3RlcCwgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwLCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAsIGdldE5leHRQZW5kaW5nSW52b2NhdGlvblN0ZXAsIGluY3JlbWVudEF0dGVtcHRTdGVwLCBsb2dTdGVwLCBtYXJrQ29tcGxldGVkU3RlcCwgbWFya0ZhaWxlZFN0ZXAsIG1hcmtSdW5uaW5nU3RlcCB9IGZyb20gJy4uL3N0ZXBzL3NjaGVkdWxlZFRyaWdnZXJTdGVwcyc7XG4vKipfX2ludGVybmFsX3dvcmtmbG93c3tcIndvcmtmbG93c1wiOntcInNyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci50c1wiOntcIl9zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIn19fX0qLztcbi8qKlxuICogR2VuZXJhdGUgaWRlbXBvdGVuY3kga2V5IGZvciBhIHNjaGVkdWxlZCBleGVjdXRpb24uXG4gKi8gZnVuY3Rpb24gZ2VuZXJhdGVJZGVtcG90ZW5jeUtleShzY2hlZHVsZWRUcmlnZ2VySWQsIHNjaGVkdWxlZEZvcikge1xuICAgIHJldHVybiBgc2NoZWRfJHtzY2hlZHVsZWRUcmlnZ2VySWR9XyR7c2NoZWR1bGVkRm9yfWA7XG59XG4vKipcbiAqIE1haW4gd29ya2Zsb3cgZnVuY3Rpb24gLSBydW5zIGEgc2NoZWR1bGVkIHRyaWdnZXIuXG4gKiBGb3IgY3JvbiB0cmlnZ2VycywgdGhpcyBsb29wcyBpbmRlZmluaXRlbHkgdW50aWwgZGlzYWJsZWQvZGVsZXRlZC5cbiAqIEZvciBvbmUtdGltZSB0cmlnZ2VycywgaXQgZXhlY3V0ZXMgb25jZSBhbmQgY29tcGxldGVzLlxuICpcbiAqLyBhc3luYyBmdW5jdGlvbiBfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IHRlbmFudElkLCBwcm9qZWN0SWQsIGFnZW50SWQsIHNjaGVkdWxlZFRyaWdnZXJJZCB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGdldFdvcmtmbG93TWV0YWRhdGEoKTtcbiAgICBjb25zdCBydW5uZXJJZCA9IG1ldGFkYXRhLndvcmtmbG93UnVuSWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgc2NoZWR1bGVkIHRyaWdnZXIgcnVubmVyIHdvcmtmbG93Jywge1xuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgcHJvamVjdElkLFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgIHJ1bm5lcklkXG4gICAgfSk7XG4gICAgLy8gVHJhY2sgdGhlIGxhc3Qgc2NoZWR1bGVkIHRpbWUgZm9yIGNyb24gY2FsY3VsYXRpb25zXG4gICAgbGV0IGxhc3RTY2hlZHVsZWRGb3IgPSBudWxsO1xuICAgIC8vIE1haW4gZXhlY3V0aW9uIGxvb3BcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgICAgY29uc3QgZW5hYmxlZENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZW5hYmxlZENoZWNrLnNob3VsZENvbnRpbnVlIHx8ICFlbmFibGVkQ2hlY2sudHJpZ2dlcikge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgd29ya2Zsb3cgc3RvcHBpbmcnLCB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogZW5hYmxlZENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmlnZ2VyID0gZW5hYmxlZENoZWNrLnRyaWdnZXI7XG4gICAgICAgIGNvbnN0IGlzT25lVGltZSA9ICEhdHJpZ2dlci5ydW5BdDtcbiAgICAgICAgbGV0IGludm9jYXRpb24gPSBhd2FpdCBnZXROZXh0UGVuZGluZ0ludm9jYXRpb25TdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ3JlYXRlIGludm9jYXRpb24gaWYgbm9uZSBleGlzdHNcbiAgICAgICAgaWYgKCFpbnZvY2F0aW9uKSB7XG4gICAgICAgICAgICBsZXQgc2NoZWR1bGVkRm9yO1xuICAgICAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgICAgIGlmICghdHJpZ2dlci5ydW5BdCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdPbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFzb246ICdvbmUtdGltZSB0cmlnZ2VyIG1pc3NpbmcgcnVuQXQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZEZvciA9IHRyaWdnZXIucnVuQXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRyaWdnZXIuY3JvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG5leHRFeGVjdXRpb25UaW1lIH0gPSBhd2FpdCBjYWxjdWxhdGVOZXh0RXhlY3V0aW9uU3RlcCh7XG4gICAgICAgICAgICAgICAgICAgIGNyb25FeHByZXNzaW9uOiB0cmlnZ2VyLmNyb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICBjcm9uVGltZXpvbmU6IHRyaWdnZXIuY3JvblRpbWV6b25lLFxuICAgICAgICAgICAgICAgICAgICBsYXN0U2NoZWR1bGVkRm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yID0gbmV4dEV4ZWN1dGlvblRpbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgbWlzc2luZyBib3RoIGNyb25FeHByZXNzaW9uIGFuZCBydW5BdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246ICd0cmlnZ2VyIG1pc3NpbmcgY3JvbkV4cHJlc3Npb24gYW5kIHJ1bkF0J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZGVtcG90ZW5jeUtleSA9IGdlbmVyYXRlSWRlbXBvdGVuY3lLZXkoc2NoZWR1bGVkVHJpZ2dlcklkLCBzY2hlZHVsZWRGb3IpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlSW52b2NhdGlvbklkZW1wb3RlbnRTdGVwKHtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkRm9yLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGlkZW1wb3RlbmN5S2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGludm9jYXRpb24gPSByZXN1bHQuaW52b2NhdGlvbjtcbiAgICAgICAgICAgIC8vIEZvciBvbmUtdGltZSB0cmlnZ2VycywgY2hlY2sgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgICAgIGlmIChpc09uZVRpbWUgJiYgcmVzdWx0LmFscmVhZHlFeGlzdHMgJiYgaW52b2NhdGlvbi5zdGF0dXMgIT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ09uZS10aW1lIHRyaWdnZXIgYWxyZWFkeSBleGVjdXRlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogaW52b2NhdGlvbi5zdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdhbHJlYWR5X2V4ZWN1dGVkJyxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBsb2dTdGVwKCdHb3QgbmV4dCBwZW5kaW5nIGludm9jYXRpb24nLCB7XG4gICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICBzY2hlZHVsZWRGb3I6IGludm9jYXRpb24uc2NoZWR1bGVkRm9yXG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LiBTbGVlcCB1bnRpbCB0aGUgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lXG4gICAgICAgIGNvbnN0IHNsZWVwTXMgPSBhd2FpdCBjb21wdXRlU2xlZXBEdXJhdGlvblN0ZXAoaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IpO1xuICAgICAgICBhd2FpdCBsb2dTdGVwKCdTbGVlcGluZyB1bnRpbCBzY2hlZHVsZWQgdGltZScsIHtcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZEZvcjogaW52b2NhdGlvbi5zY2hlZHVsZWRGb3IsXG4gICAgICAgICAgICBzbGVlcE1zXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzbGVlcChzbGVlcE1zKTtcbiAgICAgICAgLy8gNS4gUmUtY2hlY2sgaWYgdHJpZ2dlciBpcyBzdGlsbCBlbmFibGVkIGFmdGVyIHNsZWVwXG4gICAgICAgIGNvbnN0IHBvc3RTbGVlcENoZWNrID0gYXdhaXQgY2hlY2tUcmlnZ2VyRW5hYmxlZFN0ZXAoe1xuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBwcm9qZWN0SWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgcnVubmVySWRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcG9zdFNsZWVwQ2hlY2suc2hvdWxkQ29udGludWUgfHwgIXBvc3RTbGVlcENoZWNrLnRyaWdnZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvZ1N0ZXAoJ1RyaWdnZXIgZGlzYWJsZWQvZGVsZXRlZCBkdXJpbmcgc2xlZXAsIHN0b3BwaW5nJywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICByZWFzb246IHBvc3RTbGVlcENoZWNrLnJlYXNvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3N0b3BwZWQnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogcG9zdFNsZWVwQ2hlY2sucmVhc29uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZnJlc2ggdHJpZ2dlciBjb25maWcgKG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHNsZWVwKVxuICAgICAgICBjb25zdCBjdXJyZW50VHJpZ2dlciA9IHBvc3RTbGVlcENoZWNrLnRyaWdnZXI7XG4gICAgICAgIC8vIDYuIENoZWNrIGlmIGludm9jYXRpb24gd2FzIGNhbmNlbGxlZCBkdXJpbmcgc2xlZXBcbiAgICAgICAgY29uc3QgY2FuY2VsQ2hlY2sgPSBhd2FpdCBjaGVja0ludm9jYXRpb25DYW5jZWxsZWRTdGVwKHtcbiAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNhbmNlbENoZWNrLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiB3YXMgY2FuY2VsbGVkLCBza2lwcGluZyB0byBuZXh0Jywge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4gRXhlY3V0ZSB3aXRoIHJldHJpZXNcbiAgICAgICAgbGV0IGF0dGVtcHROdW1iZXIgPSBpbnZvY2F0aW9uLmF0dGVtcHROdW1iZXI7XG4gICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICBjb25zdCBtYXhBdHRlbXB0cyA9IGN1cnJlbnRUcmlnZ2VyLm1heFJldHJpZXMgKyAxO1xuICAgICAgICB3aGlsZShhdHRlbXB0TnVtYmVyIDw9IG1heEF0dGVtcHRzKXtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FuY2VsID0gYXdhaXQgY2hlY2tJbnZvY2F0aW9uQ2FuY2VsbGVkU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmV0cnlDYW5jZWwuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnSW52b2NhdGlvbiBjYW5jZWxsZWQgZHVyaW5nIHJldHJ5IGxvb3AnLCB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYXJrIGFzIHJ1bm5pbmdcbiAgICAgICAgICAgIGF3YWl0IG1hcmtSdW5uaW5nU3RlcCh7XG4gICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlU2NoZWR1bGVkVHJpZ2dlclN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiBjdXJyZW50VHJpZ2dlci5tZXNzYWdlVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogY3VycmVudFRyaWdnZXIucGF5bG9hZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHRpbWVvdXRTZWNvbmRzOiBjdXJyZW50VHJpZ2dlci50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgICAgICAgICBydW5Bc1VzZXJJZDogY3VycmVudFRyaWdnZXIucnVuQXNVc2VySWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU2F2ZSBjb252ZXJzYXRpb24gSUQgaW1tZWRpYXRlbHkgYWZ0ZXIgZWFjaCBhdHRlbXB0XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkQ29udmVyc2F0aW9uSWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiByZXN1bHQuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IG1hcmtDb21wbGV0ZWRTdGVwKHtcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkVHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2dTdGVwKCdTY2hlZHVsZWQgdHJpZ2dlciBleGVjdXRpb24gY29tcGxldGVkJywge1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHJlc3VsdC5jb252ZXJzYXRpb25JZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgYXdhaXQgbG9nU3RlcCgnU2NoZWR1bGVkIHRyaWdnZXIgZXhlY3V0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkLFxuICAgICAgICAgICAgICAgIGF0dGVtcHROdW1iZXIsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGxhc3RFcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXR0ZW1wdE51bWJlciA8IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaW5jcmVtZW50QXR0ZW1wdFN0ZXAoe1xuICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRUcmlnZ2VySWQsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25JZDogaW52b2NhdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEF0dGVtcHQ6IGF0dGVtcHROdW1iZXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhdHRlbXB0TnVtYmVyKys7XG4gICAgICAgICAgICAgICAgY29uc3Qgaml0dGVyID0gTWF0aC5yYW5kb20oKSAqIDAuMztcbiAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcChjdXJyZW50VHJpZ2dlci5yZXRyeURlbGF5U2Vjb25kcyAqIDEwMDAgKiAoMSArIGppdHRlcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrIGFzIGZhaWxlZCBpZiBhbGwgcmV0cmllcyBleGhhdXN0ZWRcbiAgICAgICAgaWYgKGxhc3RFcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgbWFya0ZhaWxlZFN0ZXAoe1xuICAgICAgICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZCxcbiAgICAgICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZFRyaWdnZXJJZCxcbiAgICAgICAgICAgICAgICBpbnZvY2F0aW9uSWQ6IGludm9jYXRpb24uaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYWNrIHRoaXMgaW52b2NhdGlvbidzIHNjaGVkdWxlZCB0aW1lIGZvciBuZXh0IGNyb24gY2FsY3VsYXRpb25cbiAgICAgICAgbGFzdFNjaGVkdWxlZEZvciA9IGludm9jYXRpb24uc2NoZWR1bGVkRm9yO1xuICAgICAgICAvLyBGb3Igb25lLXRpbWUgdHJpZ2dlcnMsIHdlJ3JlIGRvbmVcbiAgICAgICAgaWYgKGlzT25lVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGxhc3RFcnJvciA/ICdmYWlsZWQnIDogJ2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgaW52b2NhdGlvbklkOiBpbnZvY2F0aW9uLmlkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgLy8gRm9yIGNyb24gdHJpZ2dlcnMsIGxvb3AgY29udGludWVzIHRvIGNyZWF0ZS9nZXQgbmV4dCBpbnZvY2F0aW9uXG4gICAgfVxufVxuX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdy53b3JrZmxvd0lkID0gXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ydW4vd29ya2Zsb3cvZnVuY3Rpb25zL3NjaGVkdWxlZFRyaWdnZXJSdW5uZXIvL19zY2hlZHVsZWRUcmlnZ2VyUnVubmVyV29ya2Zsb3dcIiwgX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdyk7XG4vLyBFeHBvcnQgd2l0aCB3b3JrZmxvd0lkIGZvciB0aGUgYnVpbGQgc3lzdGVtXG5leHBvcnQgY29uc3Qgc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93ID0gT2JqZWN0LmFzc2lnbihfc2NoZWR1bGVkVHJpZ2dlclJ1bm5lcldvcmtmbG93LCB7XG4gICAgd29ya2Zsb3dJZDogJ3dvcmtmbG93Ly8uL3NyYy9kb21haW5zL3J1bi93b3JrZmxvdy9mdW5jdGlvbnMvc2NoZWR1bGVkVHJpZ2dlclJ1bm5lci8vX3NjaGVkdWxlZFRyaWdnZXJSdW5uZXJXb3JrZmxvdydcbn0pO1xuIiwgIi8qKl9faW50ZXJuYWxfd29ya2Zsb3dze1wid29ya2Zsb3dzXCI6e1wic3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLnRzXCI6e1wiX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi9zcmMvZG9tYWlucy9ldmFscy93b3JrZmxvdy9mdW5jdGlvbnMvZXZhbHVhdGVDb252ZXJzYXRpb24vL19ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93XCJ9fX0sXCJzdGVwc1wiOntcInNyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi50c1wiOntcImV4ZWN1dGVFdmFsdWF0b3JTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZXhlY3V0ZUV2YWx1YXRvclN0ZXBcIn0sXCJnZXRDb252ZXJzYXRpb25TdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwifSxcImdldEV2YWx1YXRvcnNTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0RXZhbHVhdG9yc1N0ZXBcIn0sXCJsb2dTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwifX19fSovO1xudmFyIGdldENvbnZlcnNhdGlvblN0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vZ2V0Q29udmVyc2F0aW9uU3RlcFwiKTtcbnZhciBnZXRFdmFsdWF0b3JzU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9nZXRFdmFsdWF0b3JzU3RlcFwiKTtcbnZhciBleGVjdXRlRXZhbHVhdG9yU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9leGVjdXRlRXZhbHVhdG9yU3RlcFwiKTtcbi8qKlxuICogU3RlcDogTG9nIHdvcmtmbG93IHByb2dyZXNzXG4gKi8gdmFyIGxvZ1N0ZXAgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vbG9nU3RlcFwiKTtcbi8qKlxuICogTWFpbiB3b3JrZmxvdyBmdW5jdGlvbiAtIG9yY2hlc3RyYXRlcyB0aGUgZXZhbHVhdGlvbiBzdGVwcy5cbiAqXG4gKiBJTVBPUlRBTlQ6IFRoaXMgcnVucyBpbiBhIGRldGVybWluaXN0aWMgc2FuZGJveC5cbiAqIC0gRG8gTk9UIGNhbGwgTm9kZS5qcyBBUElzIGRpcmVjdGx5IGhlcmUgKG5vIERCLCBubyBmcywgZXRjLilcbiAqIC0gQWxsIHNpZGUgZWZmZWN0cyBtdXN0IGhhcHBlbiBpbiBzdGVwIGZ1bmN0aW9uc1xuICovIGFzeW5jIGZ1bmN0aW9uIF9ldmFsdWF0ZUNvbnZlcnNhdGlvbldvcmtmbG93KHBheWxvYWQpIHtcbiAgICBjb25zdCB7IGNvbnZlcnNhdGlvbklkLCBldmFsdWF0b3JJZHMgfSA9IHBheWxvYWQ7XG4gICAgYXdhaXQgbG9nU3RlcCgnU3RhcnRpbmcgY29udmVyc2F0aW9uIGV2YWx1YXRpb24nLCBwYXlsb2FkKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25TdGVwKHBheWxvYWQpO1xuICAgIGNvbnN0IGV2YWx1YXRvcnMgPSBhd2FpdCBnZXRFdmFsdWF0b3JzU3RlcChwYXlsb2FkKTtcbiAgICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXdhaXQgbG9nU3RlcCgnTm8gdmFsaWQgZXZhbHVhdG9ycyBmb3VuZCcsIHtcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgZXZhbHVhdG9ySWRzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICByZWFzb246ICdObyB2YWxpZCBldmFsdWF0b3JzJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgZm9yIChjb25zdCBldmFsdWF0b3Igb2YgZXZhbHVhdG9ycyl7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVFdmFsdWF0b3JTdGVwKHBheWxvYWQsIGV2YWx1YXRvci5pZCwgY29udmVyc2F0aW9uKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICByZXN1bHRDb3VudDogcmVzdWx0cy5sZW5ndGhcbiAgICB9O1xufVxuX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3NyYy9kb21haW5zL2V2YWxzL3dvcmtmbG93L2Z1bmN0aW9ucy9ldmFsdWF0ZUNvbnZlcnNhdGlvbi8vX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3dcIiwgX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3cpO1xuLy8gVGhpcyBJRCBtdXN0IG1hdGNoIHdoYXQgd29ya2Zsb3c6YnVpbGQgZ2VuZXJhdGVzIGluIC53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cuY2pzXG5leHBvcnQgY29uc3QgZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdyA9IE9iamVjdC5hc3NpZ24oX2V2YWx1YXRlQ29udmVyc2F0aW9uV29ya2Zsb3csIHtcbiAgICB3b3JrZmxvd0lkOiAnd29ya2Zsb3cvLy4vc3JjL2RvbWFpbnMvZXZhbHMvd29ya2Zsb3cvZnVuY3Rpb25zL2V2YWx1YXRlQ29udmVyc2F0aW9uLy9fZXZhbHVhdGVDb252ZXJzYXRpb25Xb3JrZmxvdydcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxxRUFBQUEsU0FBQTtBQUFBO0FBRUksUUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQUNaLFFBQUksSUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJLElBQUksSUFBSTtBQWFSLElBQUFBLFFBQU8sVUFBVSxTQUFTLEtBQUssU0FBUztBQUN4QyxnQkFBVSxXQUFXLENBQUM7QUFDdEIsVUFBSSxPQUFPLE9BQU87QUFDbEIsVUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTLEdBQUc7QUFDckMsZUFBTyxNQUFNLEdBQUc7QUFBQSxNQUNwQixXQUFXLFNBQVMsWUFBWSxTQUFTLEdBQUcsR0FBRztBQUMzQyxlQUFPLFFBQVEsT0FBTyxRQUFRLEdBQUcsSUFBSSxTQUFTLEdBQUc7QUFB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QUFBQSxNQUM3QixDQUFDO0FBQUEsSUFDTDtBQUVBLHVCQUFtQixXQUFXO0FBRTlCLFFBQUksV0FBVztBQUNYLGFBQU87QUFBQSxRQUNILFFBQVEsWUFBWSxXQUFXO0FBQUEsUUFDL0IsY0FBYyxXQUFXO0FBQUEsTUFDN0I7QUFBQSxJQUNKO0FBQUEsRUFFSjtBQUNKO0FBNVBtQjtBQTZQbkIsZ0NBQWdDLGFBQWE7QUFDN0MsV0FBVyxvQkFBb0IsSUFBSSwwR0FBMEcsK0JBQStCO0FBRXJLLElBQU0saUNBQWlDLE9BQU8sT0FBTyxpQ0FBaUM7QUFBQSxFQUN6RixZQUFZO0FBQ2hCLENBQUM7OztBQ3hSRCxJQUFJLHNCQUFzQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLHdGQUF3RjtBQUM5SixJQUFJLG9CQUFvQixXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLHNGQUFzRjtBQUMxSixJQUFJQyx3QkFBdUIsV0FBVyxPQUFPLElBQUksbUJBQW1CLENBQUMsRUFBRSx5RkFBeUY7QUFHNUosSUFBSUMsV0FBVSxXQUFXLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLDRFQUE0RTtBQU90SSxlQUFlLDhCQUE4QixTQUFTO0FBQ3RELFFBQU0sRUFBRSxnQkFBZ0IsYUFBYSxJQUFJO0FBQ3pDLFFBQU1BLFNBQVEsb0NBQW9DLE9BQU87QUFDekQsUUFBTSxlQUFlLE1BQU0sb0JBQW9CLE9BQU87QUFDdEQsUUFBTSxhQUFhLE1BQU0sa0JBQWtCLE9BQU87QUFDbEQsTUFBSSxXQUFXLFdBQVcsR0FBRztBQUN6QixVQUFNQSxTQUFRLDZCQUE2QjtBQUFBLE1BQ3ZDO0FBQUEsTUFDQTtBQUFBLElBQ0osQ0FBQztBQUNELFdBQU87QUFBQSxNQUNILFNBQVM7QUFBQSxNQUNULFFBQVE7QUFBQSxJQUNaO0FBQUEsRUFDSjtBQUNBLFFBQU0sVUFBVSxDQUFDO0FBQ2pCLGFBQVcsYUFBYSxZQUFXO0FBQy9CLFVBQU0sU0FBUyxNQUFNRCxzQkFBcUIsU0FBUyxVQUFVLElBQUksWUFBWTtBQUM3RSxZQUFRLEtBQUssTUFBTTtBQUFBLEVBQ3ZCO0FBQ0EsU0FBTztBQUFBLElBQ0gsU0FBUztBQUFBLElBQ1Q7QUFBQSxJQUNBLGFBQWEsUUFBUTtBQUFBLEVBQ3pCO0FBQ0o7QUF6Qm1CO0FBMEJuQiw4QkFBOEIsYUFBYTtBQUMzQyxXQUFXLG9CQUFvQixJQUFJLHdHQUF3Ryw2QkFBNkI7QUFFakssSUFBTSwrQkFBK0IsT0FBTyxPQUFPLCtCQUErQjtBQUFBLEVBQ3JGLFlBQVk7QUFDaEIsQ0FBQzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1zIiwgImxvZ1N0ZXAiLCAibG9nU3RlcCIsICJleGVjdXRlRXZhbHVhdG9yU3RlcCIsICJsb2dTdGVwIl0KfQo=
54898
54898
  `;
54899
54899
  var POST = workflowEntrypoint(workflowCode);
54900
54900
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "workflowFiles": [
3
3
  "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/runDatasetItem.ts",
4
- "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts",
5
- "/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts"
4
+ "/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts",
5
+ "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts"
6
6
  ],
7
7
  "serdeOnlyFiles": []
8
8
  }
@@ -17,20 +17,6 @@
17
17
  "stepId": "step//workflow@4.1.0-beta.54//fetch"
18
18
  }
19
19
  },
20
- "src/domains/evals/workflow/functions/evaluateConversation.ts": {
21
- "executeEvaluatorStep": {
22
- "stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//executeEvaluatorStep"
23
- },
24
- "getConversationStep": {
25
- "stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//getConversationStep"
26
- },
27
- "getEvaluatorsStep": {
28
- "stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//getEvaluatorsStep"
29
- },
30
- "logStep": {
31
- "stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//logStep"
32
- }
33
- },
34
20
  "src/domains/evals/workflow/functions/runDatasetItem.ts": {
35
21
  "callChatApiStep": {
36
22
  "stepId": "step//./src/domains/evals/workflow/functions/runDatasetItem//callChatApiStep"
@@ -45,6 +31,20 @@
45
31
  "stepId": "step//./src/domains/evals/workflow/functions/runDatasetItem//logStep"
46
32
  }
47
33
  },
34
+ "src/domains/evals/workflow/functions/evaluateConversation.ts": {
35
+ "executeEvaluatorStep": {
36
+ "stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//executeEvaluatorStep"
37
+ },
38
+ "getConversationStep": {
39
+ "stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//getConversationStep"
40
+ },
41
+ "getEvaluatorsStep": {
42
+ "stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//getEvaluatorsStep"
43
+ },
44
+ "logStep": {
45
+ "stepId": "step//./src/domains/evals/workflow/functions/evaluateConversation//logStep"
46
+ }
47
+ },
48
48
  "src/domains/run/workflow/steps/scheduledTriggerSteps.ts": {
49
49
  "addConversationIdStep": {
50
50
  "stepId": "step//./src/domains/run/workflow/steps/scheduledTriggerSteps//addConversationIdStep"
@@ -91,18 +91,18 @@
91
91
  }
92
92
  },
93
93
  "workflows": {
94
- "src/domains/evals/workflow/functions/evaluateConversation.ts": {
95
- "_evaluateConversationWorkflow": {
96
- "workflowId": "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow",
94
+ "src/domains/evals/workflow/functions/runDatasetItem.ts": {
95
+ "_runDatasetItemWorkflow": {
96
+ "workflowId": "workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow",
97
97
  "graph": {
98
98
  "nodes": [],
99
99
  "edges": []
100
100
  }
101
101
  }
102
102
  },
103
- "src/domains/evals/workflow/functions/runDatasetItem.ts": {
104
- "_runDatasetItemWorkflow": {
105
- "workflowId": "workflow//./src/domains/evals/workflow/functions/runDatasetItem//_runDatasetItemWorkflow",
103
+ "src/domains/evals/workflow/functions/evaluateConversation.ts": {
104
+ "_evaluateConversationWorkflow": {
105
+ "workflowId": "workflow//./src/domains/evals/workflow/functions/evaluateConversation//_evaluateConversationWorkflow",
106
106
  "graph": {
107
107
  "nodes": [],
108
108
  "edges": []
@@ -7,8 +7,8 @@
7
7
  ],
8
8
  "workflowFiles": [
9
9
  "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/runDatasetItem.ts",
10
- "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts",
11
- "/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts"
10
+ "/home/runner/work/agents/agents/agents-api/src/domains/run/workflow/functions/scheduledTriggerRunner.ts",
11
+ "/home/runner/work/agents/agents/agents-api/src/domains/evals/workflow/functions/evaluateConversation.ts"
12
12
  ],
13
13
  "serdeOnlyFiles": []
14
14
  }
@@ -1,10 +1,10 @@
1
1
  import { AppConfig } from "./types/app.js";
2
2
  import "./types/index.js";
3
3
  import { Hono } from "hono";
4
- import * as hono_types11 from "hono/types";
4
+ import * as hono_types3 from "hono/types";
5
5
 
6
6
  //#region src/createApp.d.ts
7
7
  declare const isWebhookRoute: (path: string) => boolean;
8
- declare function createAgentsHono(config: AppConfig): Hono<hono_types11.BlankEnv, hono_types11.BlankSchema, "/">;
8
+ declare function createAgentsHono(config: AppConfig): Hono<hono_types3.BlankEnv, hono_types3.BlankSchema, "/">;
9
9
  //#endregion
10
10
  export { createAgentsHono, isWebhookRoute };
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
- import * as hono18 from "hono";
2
+ import * as hono15 from "hono";
3
3
 
4
4
  //#region src/domains/evals/routes/datasetTriggers.d.ts
5
- declare const app: OpenAPIHono<hono18.Env, {}, "/">;
5
+ declare const app: OpenAPIHono<hono15.Env, {}, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
- import * as hono14 from "hono";
2
+ import * as hono13 from "hono";
3
3
 
4
4
  //#region src/domains/evals/routes/index.d.ts
5
- declare const app: OpenAPIHono<hono14.Env, {}, "/">;
5
+ declare const app: OpenAPIHono<hono13.Env, {}, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,7 +1,7 @@
1
1
  import { Hono } from "hono";
2
- import * as hono_types1 from "hono/types";
2
+ import * as hono_types11 from "hono/types";
3
3
 
4
4
  //#region src/domains/evals/workflow/routes.d.ts
5
- declare const workflowRoutes: Hono<hono_types1.BlankEnv, hono_types1.BlankSchema, "/">;
5
+ declare const workflowRoutes: Hono<hono_types11.BlankEnv, hono_types11.BlankSchema, "/">;
6
6
  //#endregion
7
7
  export { workflowRoutes };
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
- import * as hono15 from "hono";
2
+ import * as hono16 from "hono";
3
3
 
4
4
  //#region src/domains/manage/routes/conversations.d.ts
5
- declare const app: OpenAPIHono<hono15.Env, {}, "/">;
5
+ declare const app: OpenAPIHono<hono16.Env, {}, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
- import * as hono16 from "hono";
2
+ import * as hono14 from "hono";
3
3
 
4
4
  //#region src/domains/manage/routes/index.d.ts
5
- declare const app: OpenAPIHono<hono16.Env, {}, "/">;
5
+ declare const app: OpenAPIHono<hono14.Env, {}, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -1,10 +1,10 @@
1
1
  import { ManageAppVariables } from "../../../types/app.js";
2
2
  import { Hono } from "hono";
3
- import * as hono_types6 from "hono/types";
3
+ import * as hono_types1 from "hono/types";
4
4
 
5
5
  //#region src/domains/manage/routes/invitations.d.ts
6
6
  declare const invitationsRoutes: Hono<{
7
7
  Variables: ManageAppVariables;
8
- }, hono_types6.BlankSchema, "/">;
8
+ }, hono_types1.BlankSchema, "/">;
9
9
  //#endregion
10
10
  export { invitationsRoutes as default };
@@ -1,10 +1,10 @@
1
1
  import { ManageAppVariables } from "../../../types/app.js";
2
2
  import { Hono } from "hono";
3
- import * as hono_types5 from "hono/types";
3
+ import * as hono_types2 from "hono/types";
4
4
 
5
5
  //#region src/domains/manage/routes/passwordResetLinks.d.ts
6
6
  declare const passwordResetLinksRoutes: Hono<{
7
7
  Variables: ManageAppVariables;
8
- }, hono_types5.BlankSchema, "/">;
8
+ }, hono_types2.BlankSchema, "/">;
9
9
  //#endregion
10
10
  export { passwordResetLinksRoutes as default };
@@ -1,10 +1,10 @@
1
1
  import { ManageAppVariables } from "../../../types/app.js";
2
2
  import { Hono } from "hono";
3
- import * as hono_types7 from "hono/types";
3
+ import * as hono_types5 from "hono/types";
4
4
 
5
5
  //#region src/domains/manage/routes/signoz.d.ts
6
6
  declare const app: Hono<{
7
7
  Variables: ManageAppVariables;
8
- }, hono_types7.BlankSchema, "/">;
8
+ }, hono_types5.BlankSchema, "/">;
9
9
  //#endregion
10
10
  export { app as default };
@@ -1,10 +1,10 @@
1
1
  import { ManageAppVariables } from "../../../types/app.js";
2
2
  import { Hono } from "hono";
3
- import * as hono_types8 from "hono/types";
3
+ import * as hono_types6 from "hono/types";
4
4
 
5
5
  //#region src/domains/manage/routes/users.d.ts
6
6
  declare const usersRoutes: Hono<{
7
7
  Variables: ManageAppVariables;
8
- }, hono_types8.BlankSchema, "/">;
8
+ }, hono_types6.BlankSchema, "/">;
9
9
  //#endregion
10
10
  export { usersRoutes as default };
@@ -1,7 +1,7 @@
1
1
  import { Hono } from "hono";
2
- import * as hono_types3 from "hono/types";
2
+ import * as hono_types7 from "hono/types";
3
3
 
4
4
  //#region src/domains/mcp/routes/mcp.d.ts
5
- declare const app: Hono<hono_types3.BlankEnv, hono_types3.BlankSchema, "/">;
5
+ declare const app: Hono<hono_types7.BlankEnv, hono_types7.BlankSchema, "/">;
6
6
  //#endregion
7
7
  export { app as default };
@@ -107,7 +107,7 @@ declare function createInvocationIdempotentStep(params: {
107
107
  projectId: string;
108
108
  tenantId: string;
109
109
  id: string;
110
- status: "pending" | "completed" | "running" | "failed" | "cancelled";
110
+ status: "pending" | "completed" | "failed" | "running" | "cancelled";
111
111
  resolvedPayload?: Record<string, unknown> | null | undefined;
112
112
  };
113
113
  alreadyExists: boolean;
@@ -147,7 +147,7 @@ declare function markRunningStep(params: {
147
147
  projectId: string;
148
148
  tenantId: string;
149
149
  id: string;
150
- status: "pending" | "completed" | "running" | "failed" | "cancelled";
150
+ status: "pending" | "completed" | "failed" | "running" | "cancelled";
151
151
  resolvedPayload?: Record<string, unknown> | null | undefined;
152
152
  }>;
153
153
  /**
@@ -174,7 +174,7 @@ declare function addConversationIdStep(params: {
174
174
  projectId: string;
175
175
  tenantId: string;
176
176
  id: string;
177
- status: "pending" | "completed" | "running" | "failed" | "cancelled";
177
+ status: "pending" | "completed" | "failed" | "running" | "cancelled";
178
178
  resolvedPayload?: Record<string, unknown> | null | undefined;
179
179
  } | undefined>;
180
180
  /**
@@ -199,7 +199,7 @@ declare function markCompletedStep(params: {
199
199
  projectId: string;
200
200
  tenantId: string;
201
201
  id: string;
202
- status: "pending" | "completed" | "running" | "failed" | "cancelled";
202
+ status: "pending" | "completed" | "failed" | "running" | "cancelled";
203
203
  resolvedPayload?: Record<string, unknown> | null | undefined;
204
204
  } | undefined>;
205
205
  /**
@@ -224,7 +224,7 @@ declare function markFailedStep(params: {
224
224
  projectId: string;
225
225
  tenantId: string;
226
226
  id: string;
227
- status: "pending" | "completed" | "running" | "failed" | "cancelled";
227
+ status: "pending" | "completed" | "failed" | "running" | "cancelled";
228
228
  resolvedPayload?: Record<string, unknown> | null | undefined;
229
229
  } | undefined>;
230
230
  /**
package/dist/factory.d.ts CHANGED
@@ -1170,25 +1170,25 @@ declare function createAgentsAuth(userAuthConfig?: UserAuthConfig): better_auth0
1170
1170
  ac: better_auth_plugins0.AccessControl;
1171
1171
  roles: {
1172
1172
  member: {
1173
- authorize<K_1 extends "organization" | "member" | "project" | "invitation" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins0.Statements>[key] | {
1174
- actions: better_auth_plugins0.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins0.Statements>[key];
1173
+ authorize<K_1 extends "organization" | "member" | "invitation" | "ac" | "project" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins0.Statements>[key] | {
1174
+ actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins0.Statements>[key];
1175
1175
  connector: "OR" | "AND";
1176
1176
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
1177
- statements: better_auth_plugins0.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins0.Statements>;
1177
+ statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins0.Statements>;
1178
1178
  };
1179
1179
  admin: {
1180
- authorize<K_1 extends "organization" | "member" | "project" | "invitation" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins0.Statements>[key] | {
1181
- actions: better_auth_plugins0.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins0.Statements>[key];
1180
+ authorize<K_1 extends "organization" | "member" | "invitation" | "ac" | "project" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins0.Statements>[key] | {
1181
+ actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins0.Statements>[key];
1182
1182
  connector: "OR" | "AND";
1183
1183
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
1184
- statements: better_auth_plugins0.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins0.Statements>;
1184
+ statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins0.Statements>;
1185
1185
  };
1186
1186
  owner: {
1187
- authorize<K_1 extends "organization" | "member" | "project" | "invitation" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins0.Statements>[key] | {
1188
- actions: better_auth_plugins0.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins0.Statements>[key];
1187
+ authorize<K_1 extends "organization" | "member" | "invitation" | "ac" | "project" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins0.Statements>[key] | {
1188
+ actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins0.Statements>[key];
1189
1189
  connector: "OR" | "AND";
1190
1190
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
1191
- statements: better_auth_plugins0.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins0.Statements>;
1191
+ statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins0.Statements>;
1192
1192
  };
1193
1193
  };
1194
1194
  creatorRole: "admin";
package/dist/index.d.ts CHANGED
@@ -1170,25 +1170,25 @@ declare const auth: better_auth99.Auth<{
1170
1170
  ac: better_auth_plugins35.AccessControl;
1171
1171
  roles: {
1172
1172
  member: {
1173
- authorize<K_1 extends "organization" | "member" | "project" | "invitation" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins35.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins35.Statements>[key] | {
1174
- actions: better_auth_plugins35.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins35.Statements>[key];
1173
+ authorize<K_1 extends "organization" | "member" | "invitation" | "ac" | "project" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins35.Statements>[key] | {
1174
+ actions: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins35.Statements>[key];
1175
1175
  connector: "OR" | "AND";
1176
1176
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins35.AuthorizeResponse;
1177
- statements: better_auth_plugins35.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins35.Statements>;
1177
+ statements: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins35.Statements>;
1178
1178
  };
1179
1179
  admin: {
1180
- authorize<K_1 extends "organization" | "member" | "project" | "invitation" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins35.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins35.Statements>[key] | {
1181
- actions: better_auth_plugins35.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins35.Statements>[key];
1180
+ authorize<K_1 extends "organization" | "member" | "invitation" | "ac" | "project" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins35.Statements>[key] | {
1181
+ actions: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins35.Statements>[key];
1182
1182
  connector: "OR" | "AND";
1183
1183
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins35.AuthorizeResponse;
1184
- statements: better_auth_plugins35.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins35.Statements>;
1184
+ statements: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins35.Statements>;
1185
1185
  };
1186
1186
  owner: {
1187
- authorize<K_1 extends "organization" | "member" | "project" | "invitation" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins35.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins35.Statements>[key] | {
1188
- actions: better_auth_plugins35.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins35.Statements>[key];
1187
+ authorize<K_1 extends "organization" | "member" | "invitation" | "ac" | "project" | "team">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins35.Statements>[key] | {
1188
+ actions: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins35.Statements>[key];
1189
1189
  connector: "OR" | "AND";
1190
1190
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins35.AuthorizeResponse;
1191
- statements: better_auth_plugins35.Subset<"organization" | "member" | "project" | "invitation" | "team" | "ac", better_auth_plugins35.Statements>;
1191
+ statements: better_auth_plugins35.Subset<"organization" | "member" | "invitation" | "ac" | "project" | "team", better_auth_plugins35.Statements>;
1192
1192
  };
1193
1193
  };
1194
1194
  creatorRole: "admin";
@@ -1,5 +1,5 @@
1
1
  import { BaseExecutionContext } from "@inkeep/agents-core";
2
- import * as hono0 from "hono";
2
+ import * as hono18 from "hono";
3
3
 
4
4
  //#region src/middleware/evalsAuth.d.ts
5
5
 
@@ -7,7 +7,7 @@ import * as hono0 from "hono";
7
7
  * Middleware to authenticate API requests using Bearer token authentication
8
8
  * First checks if token matches INKEEP_AGENTS_EVAL_API_BYPASS_SECRET,
9
9
  */
10
- declare const evalApiKeyAuth: () => hono0.MiddlewareHandler<{
10
+ declare const evalApiKeyAuth: () => hono18.MiddlewareHandler<{
11
11
  Variables: {
12
12
  executionContext: BaseExecutionContext;
13
13
  };
@@ -1,5 +1,5 @@
1
1
  import { BaseExecutionContext } from "@inkeep/agents-core";
2
- import * as hono4 from "hono";
2
+ import * as hono5 from "hono";
3
3
  import { createAuth } from "@inkeep/agents-core/auth";
4
4
 
5
5
  //#region src/middleware/manageAuth.d.ts
@@ -12,7 +12,7 @@ import { createAuth } from "@inkeep/agents-core/auth";
12
12
  * 3. Database API key
13
13
  * 4. Internal service token
14
14
  */
15
- declare const manageApiKeyAuth: () => hono4.MiddlewareHandler<{
15
+ declare const manageApiKeyAuth: () => hono5.MiddlewareHandler<{
16
16
  Variables: {
17
17
  executionContext: BaseExecutionContext;
18
18
  userId?: string;
@@ -25,6 +25,6 @@ declare const manageApiKeyAuth: () => hono4.MiddlewareHandler<{
25
25
  * Middleware that gates a route with manage-domain authentication.
26
26
  * Uses Bearer token → API key auth, otherwise falls back to session auth.
27
27
  */
28
- declare const manageApiKeyOrSessionAuth: () => hono4.MiddlewareHandler<any, string, {}, Response>;
28
+ declare const manageApiKeyOrSessionAuth: () => hono5.MiddlewareHandler<any, string, {}, Response>;
29
29
  //#endregion
30
30
  export { manageApiKeyAuth, manageApiKeyOrSessionAuth };
@@ -1,11 +1,11 @@
1
1
  import { BaseExecutionContext, ResolvedRef } from "@inkeep/agents-core";
2
- import * as hono6 from "hono";
2
+ import * as hono0 from "hono";
3
3
 
4
4
  //#region src/middleware/projectConfig.d.ts
5
5
  /**
6
6
  * Middleware that fetches the full project definition from the Management API
7
7
  */
8
- declare const projectConfigMiddleware: hono6.MiddlewareHandler<{
8
+ declare const projectConfigMiddleware: hono0.MiddlewareHandler<{
9
9
  Variables: {
10
10
  executionContext: BaseExecutionContext;
11
11
  resolvedRef: ResolvedRef;
@@ -15,7 +15,7 @@ declare const projectConfigMiddleware: hono6.MiddlewareHandler<{
15
15
  * Creates a middleware that applies project config fetching except for specified route patterns
16
16
  * @param skipRouteCheck - Function that returns true if the route should skip the middleware
17
17
  */
18
- declare const projectConfigMiddlewareExcept: (skipRouteCheck: (path: string) => boolean) => hono6.MiddlewareHandler<{
18
+ declare const projectConfigMiddlewareExcept: (skipRouteCheck: (path: string) => boolean) => hono0.MiddlewareHandler<{
19
19
  Variables: {
20
20
  executionContext: BaseExecutionContext;
21
21
  resolvedRef: ResolvedRef;
@@ -1,5 +1,5 @@
1
1
  import { ManageAppVariables } from "../types/app.js";
2
- import * as hono10 from "hono";
2
+ import * as hono2 from "hono";
3
3
 
4
4
  //#region src/middleware/requirePermission.d.ts
5
5
  type Permission = {
@@ -9,6 +9,6 @@ declare const requirePermission: <Env$1 extends {
9
9
  Variables: ManageAppVariables;
10
10
  } = {
11
11
  Variables: ManageAppVariables;
12
- }>(permissions: Permission) => hono10.MiddlewareHandler<Env$1, string, {}, Response>;
12
+ }>(permissions: Permission) => hono2.MiddlewareHandler<Env$1, string, {}, Response>;
13
13
  //#endregion
14
14
  export { requirePermission };
@@ -1,8 +1,8 @@
1
1
  import { BaseExecutionContext } from "@inkeep/agents-core";
2
- import * as hono1 from "hono";
2
+ import * as hono7 from "hono";
3
3
 
4
4
  //#region src/middleware/runAuth.d.ts
5
- declare const runApiKeyAuth: () => hono1.MiddlewareHandler<{
5
+ declare const runApiKeyAuth: () => hono7.MiddlewareHandler<{
6
6
  Variables: {
7
7
  executionContext: BaseExecutionContext;
8
8
  };
@@ -11,7 +11,7 @@ declare const runApiKeyAuth: () => hono1.MiddlewareHandler<{
11
11
  * Creates a middleware that applies API key authentication except for specified route patterns
12
12
  * @param skipRouteCheck - Function that returns true if the route should skip authentication
13
13
  */
14
- declare const runApiKeyAuthExcept: (skipRouteCheck: (path: string) => boolean) => hono1.MiddlewareHandler<{
14
+ declare const runApiKeyAuthExcept: (skipRouteCheck: (path: string) => boolean) => hono7.MiddlewareHandler<{
15
15
  Variables: {
16
16
  executionContext: BaseExecutionContext;
17
17
  };
@@ -20,7 +20,7 @@ declare const runApiKeyAuthExcept: (skipRouteCheck: (path: string) => boolean) =
20
20
  * Helper middleware for endpoints that optionally support API key authentication
21
21
  * If no auth header is present, it continues without setting the executionContext
22
22
  */
23
- declare const runOptionalAuth: () => hono1.MiddlewareHandler<{
23
+ declare const runOptionalAuth: () => hono7.MiddlewareHandler<{
24
24
  Variables: {
25
25
  executionContext?: BaseExecutionContext;
26
26
  };
@@ -1,4 +1,4 @@
1
- import * as hono8 from "hono";
1
+ import * as hono3 from "hono";
2
2
 
3
3
  //#region src/middleware/sessionAuth.d.ts
4
4
 
@@ -7,11 +7,11 @@ import * as hono8 from "hono";
7
7
  * Requires that a user has already been authenticated via Better Auth session.
8
8
  * Used primarily for manage routes that require an active user session.
9
9
  */
10
- declare const sessionAuth: () => hono8.MiddlewareHandler<any, string, {}, Response>;
10
+ declare const sessionAuth: () => hono3.MiddlewareHandler<any, string, {}, Response>;
11
11
  /**
12
12
  * Global session middleware - sets user and session in context for all routes
13
13
  * Used for all routes that require an active user session.
14
14
  */
15
- declare const sessionContext: () => hono8.MiddlewareHandler<any, string, {}, Response>;
15
+ declare const sessionContext: () => hono3.MiddlewareHandler<any, string, {}, Response>;
16
16
  //#endregion
17
17
  export { sessionAuth, sessionContext };
@@ -1,4 +1,4 @@
1
- import * as hono13 from "hono";
1
+ import * as hono10 from "hono";
2
2
 
3
3
  //#region src/middleware/tenantAccess.d.ts
4
4
 
@@ -12,7 +12,7 @@ import * as hono13 from "hono";
12
12
  * - API key user: Access only to the tenant associated with the API key
13
13
  * - Session user: Access based on organization membership
14
14
  */
15
- declare const requireTenantAccess: () => hono13.MiddlewareHandler<{
15
+ declare const requireTenantAccess: () => hono10.MiddlewareHandler<{
16
16
  Variables: {
17
17
  userId: string;
18
18
  tenantId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkeep/agents-api",
3
- "version": "0.0.0-dev-20260227045757",
3
+ "version": "0.0.0-dev-20260227162019",
4
4
  "description": "Unified Inkeep Agents API - combines management, runtime, and evaluation capabilities",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {
@@ -70,9 +70,9 @@
70
70
  "openid-client": "^6.8.1",
71
71
  "pg": "^8.16.3",
72
72
  "workflow": "^4.1.0-beta.54",
73
- "@inkeep/agents-core": "^0.0.0-dev-20260227045757",
74
- "@inkeep/agents-mcp": "^0.0.0-dev-20260227045757",
75
- "@inkeep/agents-work-apps": "^0.0.0-dev-20260227045757"
73
+ "@inkeep/agents-core": "^0.0.0-dev-20260227162019",
74
+ "@inkeep/agents-mcp": "^0.0.0-dev-20260227162019",
75
+ "@inkeep/agents-work-apps": "^0.0.0-dev-20260227162019"
76
76
  },
77
77
  "peerDependencies": {
78
78
  "@hono/zod-openapi": "^1.1.5",