πŸ“„ File detail

components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx

🧩 .tsxπŸ“ 378 linesπŸ’Ύ 35,034 bytesπŸ“ text
← Back to All Files

🎯 Use case

This file lives under β€œcomponents/”, which covers shared React UI pieces. On the API surface it exposes ConfirmStep β€” mainly types, interfaces, or factory objects. Dependencies touch React UI. It composes internal code from ink, keybindings, memdir, Tool, and tools (relative imports).

Generated from folder role, exports, dependency roots, and inline comments β€” not hand-reviewed for every path.

🧠 Inline summary

import { c as _c } from "react/compiler-runtime"; import React, { type ReactNode } from 'react'; import type { KeyboardEvent } from '../../../../ink/events/keyboard-event.js'; import { Box, Text } from '../../../../ink.js'; import { useKeybinding } from '../../../../keybindings/useKeybinding.js';

πŸ“€ Exports (heuristic)

  • ConfirmStep

πŸ“š External import roots

Package roots from from "…" (relative paths omitted).

  • react

πŸ–₯️ Source preview

import { c as _c } from "react/compiler-runtime";
import React, { type ReactNode } from 'react';
import type { KeyboardEvent } from '../../../../ink/events/keyboard-event.js';
import { Box, Text } from '../../../../ink.js';
import { useKeybinding } from '../../../../keybindings/useKeybinding.js';
import { isAutoMemoryEnabled } from '../../../../memdir/paths.js';
import type { Tools } from '../../../../Tool.js';
import { getMemoryScopeDisplay } from '../../../../tools/AgentTool/agentMemory.js';
import type { AgentDefinition } from '../../../../tools/AgentTool/loadAgentsDir.js';
import { truncateToWidth } from '../../../../utils/format.js';
import { getAgentModelDisplay } from '../../../../utils/model/agent.js';
import { ConfigurableShortcutHint } from '../../../ConfigurableShortcutHint.js';
import { Byline } from '../../../design-system/Byline.js';
import { KeyboardShortcutHint } from '../../../design-system/KeyboardShortcutHint.js';
import { useWizard } from '../../../wizard/index.js';
import { WizardDialogLayout } from '../../../wizard/WizardDialogLayout.js';
import { getNewRelativeAgentFilePath } from '../../agentFileUtils.js';
import { validateAgent } from '../../validateAgent.js';
import type { AgentWizardData } from '../types.js';
type Props = {
  tools: Tools;
  existingAgents: AgentDefinition[];
  onSave: () => void;
  onSaveAndEdit: () => void;
  error?: string | null;
};
export function ConfirmStep(t0) {
  const $ = _c(88);
  const {
    tools,
    existingAgents,
    onSave,
    onSaveAndEdit,
    error
  } = t0;
  const {
    goBack,
    wizardData
  } = useWizard();
  let t1;
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
    t1 = {
      context: "Confirmation"
    };
    $[0] = t1;
  } else {
    t1 = $[0];
  }
  useKeybinding("confirm:no", goBack, t1);
  let t2;
  if ($[1] !== onSave || $[2] !== onSaveAndEdit) {
    t2 = e => {
      if (e.key === "s" || e.key === "return") {
        e.preventDefault();
        onSave();
      } else {
        if (e.key === "e") {
          e.preventDefault();
          onSaveAndEdit();
        }
      }
    };
    $[1] = onSave;
    $[2] = onSaveAndEdit;
    $[3] = t2;
  } else {
    t2 = $[3];
  }
  const handleKeyDown = t2;
  const agent = wizardData.finalAgent;
  let T0;
  let T1;
  let t10;
  let t11;
  let t12;
  let t13;
  let t14;
  let t15;
  let t16;
  let t17;
  let t18;
  let t19;
  let t3;
  let t4;
  let t5;
  let t6;
  let t7;
  let t8;
  let t9;
  if ($[4] !== agent || $[5] !== existingAgents || $[6] !== handleKeyDown || $[7] !== tools || $[8] !== wizardData.location) {
    const validation = validateAgent(agent, tools, existingAgents);
    let t20;
    if ($[28] !== agent) {
      t20 = truncateToWidth(agent.getSystemPrompt(), 240);
      $[28] = agent;
      $[29] = t20;
    } else {
      t20 = $[29];
    }
    const systemPromptPreview = t20;
    let t21;
    if ($[30] !== agent.whenToUse) {
      t21 = truncateToWidth(agent.whenToUse, 240);
      $[30] = agent.whenToUse;
      $[31] = t21;
    } else {
      t21 = $[31];
    }
    const whenToUsePreview = t21;
    const getToolsDisplay = _temp;
    let t22;
    if ($[32] !== agent.memory) {
      t22 = isAutoMemoryEnabled() ? <Text><Text bold={true}>Memory</Text>: {getMemoryScopeDisplay(agent.memory)}</Text> : null;
      $[32] = agent.memory;
      $[33] = t22;
    } else {
      t22 = $[33];
    }
    const memoryDisplayElement = t22;
    T1 = WizardDialogLayout;
    t18 = "Confirm and save";
    if ($[34] === Symbol.for("react.memo_cache_sentinel")) {
      t19 = <Byline><KeyboardShortcutHint shortcut="s/Enter" action="save" /><KeyboardShortcutHint shortcut="e" action="edit in your editor" /><ConfigurableShortcutHint action="confirm:no" context="Confirmation" fallback="Esc" description="cancel" /></Byline>;
      $[34] = t19;
    } else {
      t19 = $[34];
    }
    T0 = Box;
    t3 = "column";
    t4 = 0;
    t5 = true;
    t6 = handleKeyDown;
    let t23;
    if ($[35] === Symbol.for("react.memo_cache_sentinel")) {
      t23 = <Text bold={true}>Name</Text>;
      $[35] = t23;
    } else {
      t23 = $[35];
    }
    if ($[36] !== agent.agentType) {
      t7 = <Text>{t23}: {agent.agentType}</Text>;
      $[36] = agent.agentType;
      $[37] = t7;
    } else {
      t7 = $[37];
    }
    let t24;
    if ($[38] === Symbol.for("react.memo_cache_sentinel")) {
      t24 = <Text bold={true}>Location</Text>;
      $[38] = t24;
    } else {
      t24 = $[38];
    }
    let t25;
    if ($[39] !== agent.agentType || $[40] !== wizardData.location) {
      t25 = getNewRelativeAgentFilePath({
        source: wizardData.location,
        agentType: agent.agentType
      });
      $[39] = agent.agentType;
      $[40] = wizardData.location;
      $[41] = t25;
    } else {
      t25 = $[41];
    }
    if ($[42] !== t25) {
      t8 = <Text>{t24}:{" "}{t25}</Text>;
      $[42] = t25;
      $[43] = t8;
    } else {
      t8 = $[43];
    }
    let t26;
    if ($[44] === Symbol.for("react.memo_cache_sentinel")) {
      t26 = <Text bold={true}>Tools</Text>;
      $[44] = t26;
    } else {
      t26 = $[44];
    }
    let t27;
    if ($[45] !== agent.tools) {
      t27 = getToolsDisplay(agent.tools);
      $[45] = agent.tools;
      $[46] = t27;
    } else {
      t27 = $[46];
    }
    if ($[47] !== t27) {
      t9 = <Text>{t26}: {t27}</Text>;
      $[47] = t27;
      $[48] = t9;
    } else {
      t9 = $[48];
    }
    let t28;
    if ($[49] === Symbol.for("react.memo_cache_sentinel")) {
      t28 = <Text bold={true}>Model</Text>;
      $[49] = t28;
    } else {
      t28 = $[49];
    }
    let t29;
    if ($[50] !== agent.model) {
      t29 = getAgentModelDisplay(agent.model);
      $[50] = agent.model;
      $[51] = t29;
    } else {
      t29 = $[51];
    }
    if ($[52] !== t29) {
      t10 = <Text>{t28}: {t29}</Text>;
      $[52] = t29;
      $[53] = t10;
    } else {
      t10 = $[53];
    }
    t11 = memoryDisplayElement;
    if ($[54] === Symbol.for("react.memo_cache_sentinel")) {
      t12 = <Box marginTop={1}><Text><Text bold={true}>Description</Text> (tells Claude when to use this agent):</Text></Box>;
      $[54] = t12;
    } else {
      t12 = $[54];
    }
    if ($[55] !== whenToUsePreview) {
      t13 = <Box marginLeft={2} marginTop={1}><Text>{whenToUsePreview}</Text></Box>;
      $[55] = whenToUsePreview;
      $[56] = t13;
    } else {
      t13 = $[56];
    }
    if ($[57] === Symbol.for("react.memo_cache_sentinel")) {
      t14 = <Box marginTop={1}><Text><Text bold={true}>System prompt</Text>:</Text></Box>;
      $[57] = t14;
    } else {
      t14 = $[57];
    }
    if ($[58] !== systemPromptPreview) {
      t15 = <Box marginLeft={2} marginTop={1}><Text>{systemPromptPreview}</Text></Box>;
      $[58] = systemPromptPreview;
      $[59] = t15;
    } else {
      t15 = $[59];
    }
    t16 = validation.warnings.length > 0 && <Box marginTop={1} flexDirection="column"><Text color="warning">Warnings:</Text>{validation.warnings.map(_temp2)}</Box>;
    t17 = validation.errors.length > 0 && <Box marginTop={1} flexDirection="column"><Text color="error">Errors:</Text>{validation.errors.map(_temp3)}</Box>;
    $[4] = agent;
    $[5] = existingAgents;
    $[6] = handleKeyDown;
    $[7] = tools;
    $[8] = wizardData.location;
    $[9] = T0;
    $[10] = T1;
    $[11] = t10;
    $[12] = t11;
    $[13] = t12;
    $[14] = t13;
    $[15] = t14;
    $[16] = t15;
    $[17] = t16;
    $[18] = t17;
    $[19] = t18;
    $[20] = t19;
    $[21] = t3;
    $[22] = t4;
    $[23] = t5;
    $[24] = t6;
    $[25] = t7;
    $[26] = t8;
    $[27] = t9;
  } else {
    T0 = $[9];
    T1 = $[10];
    t10 = $[11];
    t11 = $[12];
    t12 = $[13];
    t13 = $[14];
    t14 = $[15];
    t15 = $[16];
    t16 = $[17];
    t17 = $[18];
    t18 = $[19];
    t19 = $[20];
    t3 = $[21];
    t4 = $[22];
    t5 = $[23];
    t6 = $[24];
    t7 = $[25];
    t8 = $[26];
    t9 = $[27];
  }
  let t20;
  if ($[60] !== error) {
    t20 = error && <Box marginTop={1}><Text color="error">{error}</Text></Box>;
    $[60] = error;
    $[61] = t20;
  } else {
    t20 = $[61];
  }
  let t21;
  if ($[62] === Symbol.for("react.memo_cache_sentinel")) {
    t21 = <Text bold={true}>s</Text>;
    $[62] = t21;
  } else {
    t21 = $[62];
  }
  let t22;
  if ($[63] === Symbol.for("react.memo_cache_sentinel")) {
    t22 = <Text bold={true}>Enter</Text>;
    $[63] = t22;
  } else {
    t22 = $[63];
  }
  let t23;
  if ($[64] === Symbol.for("react.memo_cache_sentinel")) {
    t23 = <Box marginTop={2}><Text color="success">Press {t21} or {t22} to save,{" "}<Text bold={true}>e</Text> to save and edit</Text></Box>;
    $[64] = t23;
  } else {
    t23 = $[64];
  }
  let t24;
  if ($[65] !== T0 || $[66] !== t10 || $[67] !== t11 || $[68] !== t12 || $[69] !== t13 || $[70] !== t14 || $[71] !== t15 || $[72] !== t16 || $[73] !== t17 || $[74] !== t20 || $[75] !== t3 || $[76] !== t4 || $[77] !== t5 || $[78] !== t6 || $[79] !== t7 || $[80] !== t8 || $[81] !== t9) {
    t24 = <T0 flexDirection={t3} tabIndex={t4} autoFocus={t5} onKeyDown={t6}>{t7}{t8}{t9}{t10}{t11}{t12}{t13}{t14}{t15}{t16}{t17}{t20}{t23}</T0>;
    $[65] = T0;
    $[66] = t10;
    $[67] = t11;
    $[68] = t12;
    $[69] = t13;
    $[70] = t14;
    $[71] = t15;
    $[72] = t16;
    $[73] = t17;
    $[74] = t20;
    $[75] = t3;
    $[76] = t4;
    $[77] = t5;
    $[78] = t6;
    $[79] = t7;
    $[80] = t8;
    $[81] = t9;
    $[82] = t24;
  } else {
    t24 = $[82];
  }
  let t25;
  if ($[83] !== T1 || $[84] !== t18 || $[85] !== t19 || $[86] !== t24) {
    t25 = <T1 subtitle={t18} footerText={t19}>{t24}</T1>;
    $[83] = T1;
    $[84] = t18;
    $[85] = t19;
    $[86] = t24;
    $[87] = t25;
  } else {
    t25 = $[87];
  }
  return t25;
}
function _temp3(err, i_0) {
  return <Text key={i_0} color="error">{" "}β€’ {err}</Text>;
}
function _temp2(warning, i) {
  return <Text key={i} dimColor={true}>{" "}β€’ {warning}</Text>;
}
function _temp(toolNames) {
  if (toolNames === undefined) {
    return "All tools";
  }
  if (toolNames.length === 0) {
    return "None";
  }
  if (toolNames.length === 1) {
    return toolNames[0] || "None";
  }
  if (toolNames.length === 2) {
    return toolNames.join(" and ");
  }
  return `${toolNames.slice(0, -1).join(", ")}, and ${toolNames[toolNames.length - 1]}`;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlJlYWN0Tm9kZSIsIktleWJvYXJkRXZlbnQiLCJCb3giLCJUZXh0IiwidXNlS2V5YmluZGluZyIsImlzQXV0b01lbW9yeUVuYWJsZWQiLCJUb29scyIsImdldE1lbW9yeVNjb3BlRGlzcGxheSIsIkFnZW50RGVmaW5pdGlvbiIsInRydW5jYXRlVG9XaWR0aCIsImdldEFnZW50TW9kZWxEaXNwbGF5IiwiQ29uZmlndXJhYmxlU2hvcnRjdXRIaW50IiwiQnlsaW5lIiwiS2V5Ym9hcmRTaG9ydGN1dEhpbnQiLCJ1c2VXaXphcmQiLCJXaXphcmREaWFsb2dMYXlvdXQiLCJnZXROZXdSZWxhdGl2ZUFnZW50RmlsZVBhdGgiLCJ2YWxpZGF0ZUFnZW50IiwiQWdlbnRXaXphcmREYXRhIiwiUHJvcHMiLCJ0b29scyIsImV4aXN0aW5nQWdlbnRzIiwib25TYXZlIiwib25TYXZlQW5kRWRpdCIsImVycm9yIiwiQ29uZmlybVN0ZXAiLCJ0MCIsIiQiLCJfYyIsImdvQmFjayIsIndpemFyZERhdGEiLCJ0MSIsIlN5bWJvbCIsImZvciIsImNvbnRleHQiLCJ0MiIsImUiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZUtleURvd24iLCJhZ2VudCIsImZpbmFsQWdlbnQiLCJUMCIsIlQxIiwidDEwIiwidDExIiwidDEyIiwidDEzIiwidDE0IiwidDE1IiwidDE2IiwidDE3IiwidDE4IiwidDE5IiwidDMiLCJ0NCIsInQ1IiwidDYiLCJ0NyIsInQ4IiwidDkiLCJsb2NhdGlvbiIsInZhbGlkYXRpb24iLCJ0MjAiLCJnZXRTeXN0ZW1Qcm9tcHQiLCJzeXN0ZW1Qcm9tcHRQcmV2aWV3IiwidDIxIiwid2hlblRvVXNlIiwid2hlblRvVXNlUHJldmlldyIsImdldFRvb2xzRGlzcGxheSIsIl90ZW1wIiwidDIyIiwibWVtb3J5IiwibWVtb3J5RGlzcGxheUVsZW1lbnQiLCJ0MjMiLCJhZ2VudFR5cGUiLCJ0MjQiLCJ0MjUiLCJzb3VyY2UiLCJ0MjYiLCJ0MjciLCJ0MjgiLCJ0MjkiLCJtb2RlbCIsIndhcm5pbmdzIiwibGVuZ3RoIiwibWFwIiwiX3RlbXAyIiwiZXJyb3JzIiwiX3RlbXAzIiwiZXJyIiwiaV8wIiwiaSIsIndhcm5pbmciLCJ0b29sTmFtZXMiLCJ1bmRlZmluZWQiLCJqb2luIiwic2xpY2UiXSwic291cmNlcyI6WyJDb25maXJtU3RlcC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHR5cGUgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEtleWJvYXJkRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9pbmsvZXZlbnRzL2tleWJvYXJkLWV2ZW50LmpzJ1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgdXNlS2V5YmluZGluZyB9IGZyb20gJy4uLy4uLy4uLy4uL2tleWJpbmRpbmdzL3VzZUtleWJpbmRpbmcuanMnXG5pbXBvcnQgeyBpc0F1dG9NZW1vcnlFbmFibGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbWVtZGlyL3BhdGhzLmpzJ1xuaW1wb3J0IHR5cGUgeyBUb29scyB9IGZyb20gJy4uLy4uLy4uLy4uL1Rvb2wuanMnXG5pbXBvcnQgeyBnZXRNZW1vcnlTY29wZURpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi8uLi90b29scy9BZ2VudFRvb2wvYWdlbnRNZW1vcnkuanMnXG5pbXBvcnQgdHlwZSB7IEFnZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3Rvb2xzL0FnZW50VG9vbC9sb2FkQWdlbnRzRGlyLmpzJ1xuaW1wb3J0IHsgdHJ1bmNhdGVUb1dpZHRoIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgZ2V0QWdlbnRNb2RlbERpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9tb2RlbC9hZ2VudC5qcydcbmltcG9ydCB7IENvbmZpZ3VyYWJsZVNob3J0Y3V0SGludCB9IGZyb20gJy4uLy4uLy4uL0NvbmZpZ3VyYWJsZVNob3J0Y3V0SGludC5qcydcbmltcG9ydCB7IEJ5bGluZSB9IGZyb20gJy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vQnlsaW5lLmpzJ1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dEhpbnQgfSBmcm9tICcuLi8uLi8uLi9kZXNpZ24tc3lzdGVtL0tleWJvYXJkU2hvcnRjdXRIaW50LmpzJ1xuaW1wb3J0IHsgdXNlV2l6YXJkIH0gZnJvbSAnLi4vLi4vLi4vd2l6YXJkL2luZGV4LmpzJ1xuaW1wb3J0IHsgV2l6YXJkRGlhbG9nTGF5b3V0IH0gZnJvbSAnLi4vLi4vLi4vd2l6YXJkL1dpemFyZERpYWxvZ0xheW91dC5qcydcbmltcG9ydCB7IGdldE5ld1JlbGF0aXZlQWdlbnRGaWxlUGF0aCB9IGZyb20gJy4uLy4uL2FnZW50RmlsZVV0aWxzLmpzJ1xuaW1wb3J0IHsgdmFsaWRhdGVBZ2VudCB9IGZyb20gJy4uLy4uL3ZhbGlkYXRlQWdlbnQuanMnXG5pbXBvcnQgdHlwZSB7IEFnZW50V2l6YXJkRGF0YSB9IGZyb20gJy4uL3R5cGVzLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICB0b29sczogVG9vbHNcbiAgZXhpc3RpbmdBZ2VudHM6IEFnZW50RGVmaW5pdGlvbltdXG4gIG9uU2F2ZTogKCkgPT4gdm9pZFxuICBvblNhdmVBbmRFZGl0OiAoKSA9PiB2b2lkXG4gIGVycm9yPzogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlybVN0ZXAoe1xuICB0b29scyxcbiAgZXhpc3RpbmdBZ2VudHMsXG4gIG9uU2F2ZSxcbiAgb25TYXZlQW5kRWRpdCxcbiAgZXJyb3IsXG59OiBQcm9wcyk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgZ29CYWNrLCB3aXphcmREYXRhIH0gPSB1c2VXaXphcmQ8QWdlbnRXaXphcmREYXRhPigpXG5cbiAgdXNlS2V5YmluZGluZygnY29uZmlybTpubycsIGdvQmFjaywgeyBjb250ZXh0OiAnQ29uZmlybWF0aW9uJyB9KVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ3MnIHx8IGUua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBvblNhdmUoKVxuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdlJykge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBvblNhdmVBbmRFZGl0KClcbiAgICB9XG4gIH1cblxuICBjb25zdCBhZ2VudCA9IHdpemFyZERhdGEuZmluYWxBZ2VudCFcbiAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlQWdlbnQoYWdlbnQsIHRvb2xzLCBleGlzdGluZ0FnZW50cylcblxuICBjb25zdCBzeXN0ZW1Qcm9tcHRQcmV2aWV3ID0gdHJ1bmNhdGVUb1dpZHRoKGFnZW50LmdldFN5c3RlbVByb21wdCgpLCAyNDApXG4gIGNvbnN0IHdoZW5Ub1VzZVByZXZpZXcgPSB0cnVuY2F0ZVRvV2lkdGgoYWdlbnQud2hlblRvVXNlLCAyNDApXG5cbiAgY29uc3QgZ2V0VG9vbHNEaXNwbGF5ID0gKHRvb2xOYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIC8vIHVuZGVmaW5lZCBtZWFucyBcImFsbCB0b29sc1wiIHBlciBQUiBzZW1hbnRpY1xuICAgIGlmICh0b29sTmFtZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuICdBbGwgdG9vbHMnXG4gICAgaWYgKHRvb2xOYW1lcy5sZW5ndGggPT09IDApIHJldHVybiAnTm9uZSdcbiAgICBpZiAodG9vbE5hbWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRvb2xOYW1lc1swXSB8fCAnTm9uZSdcbiAgICBpZiAodG9vbE5hbWVzLmxlbmd0aCA9PT0gMikgcmV0dXJuIHRvb2xOYW1lcy5qb2luKCcgYW5kICcpXG4gICAgcmV0dXJuIGAke3Rvb2xOYW1lcy5zbGljZSgwLCAtMSkuam9pbignLCAnKX0sIGFuZCAke3Rvb2xOYW1lc1t0b29sTmFtZXMubGVuZ3RoIC0gMV19YFxuICB9XG5cbiAgLy8gQ29tcHV0ZSBtZW1vcnkgZGlzcGxheSBvdXRzaWRlIEpTWFxuICBjb25zdCBtZW1vcnlEaXNwbGF5RWxlbWVudCA9IGlzQXV0b01lbW9yeUVuYWJsZWQoKSA/IChcbiAgICA8VGV4dD5cbiAgICAgIDxUZXh0IGJvbGQ+TWVtb3J5PC9UZXh0Pjoge2dldE1lbW9yeVNjb3BlRGlzcGxheShhZ2VudC5tZW1vcnkpfVxuICAgIDwvVGV4dD5cbiAgKSA6IG51bGxcblxuICByZXR1cm4gKFxuICAgIDxXaXphcmREaWFsb2dMYXlvdXRcbiAgICAgIHN1YnRpdGxlPVwiQ29uZmlybSBhbmQgc2F2ZVwiXG4gICAgICBmb290ZXJUZXh0PXtcbiAgICAgICAgPEJ5bGluZT5cbiAgICAgICAgICA8S2V5Ym9hcmRTaG9ydGN1dEhpbnQgc2hvcnRjdXQ9XCJzL0VudGVyXCIgYWN0aW9uPVwic2F2ZVwiIC8+XG4gICAgICAgICAgPEtleWJvYXJkU2hvcnRjdXRIaW50IHNob3J0Y3V0PVwiZVwiIGFjdGlvbj1cImVkaXQgaW4geW91ciBlZGl0b3JcIiAvPlxuICAgICAgICAgIDxDb25maWd1cmFibGVTaG9ydGN1dEhpbnRcbiAgICAgICAgICAgIGFjdGlvbj1cImNvbmZpcm06bm9cIlxuICAgICAgICAgICAgY29udGV4dD1cIkNvbmZpcm1hdGlvblwiXG4gICAgICAgICAgICBmYWxsYmFjaz1cIkVzY1wiXG4gICAgICAgICAgICBkZXNjcmlwdGlvbj1cImNhbmNlbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9CeWxpbmU+XG4gICAgICB9XG4gICAgPlxuICAgICAgPEJveFxuICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIDxUZXh0IGJvbGQ+TmFtZTwvVGV4dD46IHthZ2VudC5hZ2VudFR5cGV9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgPFRleHQgYm9sZD5Mb2NhdGlvbjwvVGV4dD46eycgJ31cbiAgICAgICAgICB7Z2V0TmV3UmVsYXRpdmVBZ2VudEZpbGVQYXRoKHtcbiAgICAgICAgICAgIHNvdXJjZTogd2l6YXJkRGF0YS5sb2NhdGlvbiEsXG4gICAgICAgICAgICBhZ2VudFR5cGU6IGFnZW50LmFnZW50VHlwZSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8VGV4dCBib2xkPlRvb2xzPC9UZXh0Pjoge2dldFRvb2xzRGlzcGxheShhZ2VudC50b29scyl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgPFRleHQgYm9sZD5Nb2RlbDwvVGV4dD46IHtnZXRBZ2VudE1vZGVsRGlzcGxheShhZ2VudC5tb2RlbCl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAge21lbW9yeURpc3BsYXlFbGVtZW50fVxuXG4gICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+RGVzY3JpcHRpb248L1RleHQ+ICh0ZWxscyBDbGF1ZGUgd2hlbiB0byB1c2UgdGhpcyBhZ2VudCk6XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgICAgPEJveCBtYXJnaW5MZWZ0PXsyfSBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgIDxUZXh0Pnt3aGVuVG9Vc2VQcmV2aWV3fTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgPFRleHQgYm9sZD5TeXN0ZW0gcHJvbXB0PC9UZXh0PjpcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezJ9IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgPFRleHQ+e3N5c3RlbVByb21wdFByZXZpZXd9PC9UZXh0PlxuICAgICAgICA8L0JveD5cblxuICAgICAgICB7dmFsaWRhdGlvbi53YXJuaW5ncy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ3YXJuaW5nXCI+V2FybmluZ3M6PC9UZXh0PlxuICAgICAgICAgICAge3ZhbGlkYXRpb24ud2FybmluZ3MubWFwKCh3YXJuaW5nLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxUZXh0IGtleT17aX0gZGltQ29sb3I+XG4gICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICDigKIge3dhcm5pbmd9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQm94PlxuICAgICAgICApfVxuXG4gICAgICAgIHt2YWxpZGF0aW9uLmVycm9ycy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJlcnJvclwiPkVycm9yczo8L1RleHQ+XG4gICAgICAgICAgICB7dmFsaWRhdGlvbi5lcnJvcnMubWFwKChlcnIsIGkpID0+IChcbiAgICAgICAgICAgICAgPFRleHQga2V5PXtpfSBjb2xvcj1cImVycm9yXCI+XG4gICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICDigKIge2Vycn1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICl9XG5cbiAgICAgICAge2Vycm9yICYmIChcbiAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cImVycm9yXCI+e2Vycm9yfTwvVGV4dD5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKX1cblxuICAgICAgICA8Qm94IG1hcmdpblRvcD17Mn0+XG4gICAgICAgICAgPFRleHQgY29sb3I9XCJzdWNjZXNzXCI+XG4gICAgICAgICAgICBQcmVzcyA8VGV4dCBib2xkPnM8L1RleHQ+IG9yIDxUZXh0IGJvbGQ+RW50ZXI8L1RleHQ+IHRvIHNhdmUseycgJ31cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+ZTwvVGV4dD4gdG8gc2F2ZSBhbmQgZWRpdFxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICA8L1dpemFyZERpYWxvZ0xheW91dD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsS0FBSyxJQUFJLEtBQUtDLFNBQVMsUUFBUSxPQUFPO0FBQzdDLGNBQWNDLGFBQWEsUUFBUSwwQ0FBMEM7QUFDN0UsU0FBU0MsR0FBRyxFQUFFQyxJQUFJLFFBQVEsb0JBQW9CO0FBQzlDLFNBQVNDLGFBQWEsUUFBUSwwQ0FBMEM7QUFDeEUsU0FBU0MsbUJBQW1CLFFBQVEsNkJBQTZCO0FBQ2pFLGNBQWNDLEtBQUssUUFBUSxxQkFBcUI7QUFDaEQsU0FBU0MscUJBQXFCLFFBQVEsNENBQTRDO0FBQ2xGLGNBQWNDLGVBQWUsUUFBUSw4Q0FBOEM7QUFDbkYsU0FBU0MsZUFBZSxRQUFRLDZCQUE2QjtBQUM3RCxTQUFTQyxvQkFBb0IsUUFBUSxrQ0FBa0M7QUFDdkUsU0FBU0Msd0JBQXdCLFFBQVEsc0NBQXNDO0FBQy9FLFNBQVNDLE1BQU0sUUFBUSxrQ0FBa0M7QUFDekQsU0FBU0Msb0JBQW9CLFFBQVEsZ0RBQWdEO0FBQ3JGLFNBQVNDLFNBQVMsUUFBUSwwQkFBMEI7QUFDcEQsU0FBU0Msa0JBQWtCLFFBQVEsdUNBQXVDO0FBQzFFLFNBQVNDLDJCQUEyQixRQUFRLHlCQUF5QjtB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