📄 File detail

hooks/notifs/useIDEStatusIndicator.tsx

🧩 .tsx📏 186 lines💾 20,764 bytes📝 text
← Back to All Files

🎯 Use case

This file lives under “hooks/”, which covers reusable UI or integration hooks. On the API surface it exposes useIDEStatusIndicator — mainly functions, hooks, or classes. Dependencies touch React UI and src. It composes internal code from bootstrap, useIdeConnectionStatus, and useIdeSelection (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, { useEffect, useRef } from 'react'; import { useNotifications } from 'src/context/notifications.js'; import { Text } from 'src/ink.js'; import type { MCPServerConnection } from 'src/services/mcp/types.js';

📤 Exports (heuristic)

  • useIDEStatusIndicator

📚 External import roots

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

  • react
  • src

🖥️ Source preview

import { c as _c } from "react/compiler-runtime";
import React, { useEffect, useRef } from 'react';
import { useNotifications } from 'src/context/notifications.js';
import { Text } from 'src/ink.js';
import type { MCPServerConnection } from 'src/services/mcp/types.js';
import { getGlobalConfig, saveGlobalConfig } from 'src/utils/config.js';
import { detectIDEs, type IDEExtensionInstallationStatus, isJetBrainsIde, isSupportedTerminal } from 'src/utils/ide.js';
import { getIsRemoteMode } from '../../bootstrap/state.js';
import { useIdeConnectionStatus } from '../useIdeConnectionStatus.js';
import type { IDESelection } from '../useIdeSelection.js';
const MAX_IDE_HINT_SHOW_COUNT = 5;
type Props = {
  ideInstallationStatus: IDEExtensionInstallationStatus | null;
  ideSelection: IDESelection | undefined;
  mcpClients: MCPServerConnection[];
};
export function useIDEStatusIndicator(t0) {
  const $ = _c(26);
  const {
    ideSelection,
    mcpClients,
    ideInstallationStatus
  } = t0;
  const {
    addNotification,
    removeNotification
  } = useNotifications();
  const {
    status: ideStatus,
    ideName
  } = useIdeConnectionStatus(mcpClients);
  const hasShownHintRef = useRef(false);
  let t1;
  if ($[0] !== ideInstallationStatus) {
    t1 = ideInstallationStatus ? isJetBrainsIde(ideInstallationStatus?.ideType) : false;
    $[0] = ideInstallationStatus;
    $[1] = t1;
  } else {
    t1 = $[1];
  }
  const isJetBrains = t1;
  const showIDEInstallErrorOrJetBrainsInfo = ideInstallationStatus?.error || isJetBrains;
  const shouldShowIdeSelection = ideStatus === "connected" && (ideSelection?.filePath || ideSelection?.text && ideSelection.lineCount > 0);
  const shouldShowConnected = ideStatus === "connected" && !shouldShowIdeSelection;
  const showIDEInstallError = showIDEInstallErrorOrJetBrainsInfo && !isJetBrains && !shouldShowConnected && !shouldShowIdeSelection;
  const showJetBrainsInfo = showIDEInstallErrorOrJetBrainsInfo && isJetBrains && !shouldShowConnected && !shouldShowIdeSelection;
  let t2;
  let t3;
  if ($[2] !== addNotification || $[3] !== ideStatus || $[4] !== removeNotification || $[5] !== showJetBrainsInfo) {
    t2 = () => {
      if (getIsRemoteMode()) {
        return;
      }
      if (isSupportedTerminal() || ideStatus !== null || showJetBrainsInfo) {
        removeNotification("ide-status-hint");
        return;
      }
      if (hasShownHintRef.current || (getGlobalConfig().ideHintShownCount ?? 0) >= MAX_IDE_HINT_SHOW_COUNT) {
        return;
      }
      const timeoutId = setTimeout(_temp2, 3000, hasShownHintRef, addNotification);
      return () => clearTimeout(timeoutId);
    };
    t3 = [addNotification, removeNotification, ideStatus, showJetBrainsInfo];
    $[2] = addNotification;
    $[3] = ideStatus;
    $[4] = removeNotification;
    $[5] = showJetBrainsInfo;
    $[6] = t2;
    $[7] = t3;
  } else {
    t2 = $[6];
    t3 = $[7];
  }
  useEffect(t2, t3);
  let t4;
  let t5;
  if ($[8] !== addNotification || $[9] !== ideName || $[10] !== ideStatus || $[11] !== removeNotification || $[12] !== showIDEInstallError || $[13] !== showJetBrainsInfo) {
    t4 = () => {
      if (getIsRemoteMode()) {
        return;
      }
      if (showIDEInstallError || showJetBrainsInfo || ideStatus !== "disconnected" || !ideName) {
        removeNotification("ide-status-disconnected");
        return;
      }
      addNotification({
        key: "ide-status-disconnected",
        text: `${ideName} disconnected`,
        color: "error",
        priority: "medium"
      });
    };
    t5 = [addNotification, removeNotification, ideStatus, ideName, showIDEInstallError, showJetBrainsInfo];
    $[8] = addNotification;
    $[9] = ideName;
    $[10] = ideStatus;
    $[11] = removeNotification;
    $[12] = showIDEInstallError;
    $[13] = showJetBrainsInfo;
    $[14] = t4;
    $[15] = t5;
  } else {
    t4 = $[14];
    t5 = $[15];
  }
  useEffect(t4, t5);
  let t6;
  let t7;
  if ($[16] !== addNotification || $[17] !== removeNotification || $[18] !== showJetBrainsInfo) {
    t6 = () => {
      if (getIsRemoteMode()) {
        return;
      }
      if (!showJetBrainsInfo) {
        removeNotification("ide-status-jetbrains-disconnected");
        return;
      }
      addNotification({
        key: "ide-status-jetbrains-disconnected",
        text: "IDE plugin not connected \xB7 /status for info",
        priority: "medium"
      });
    };
    t7 = [addNotification, removeNotification, showJetBrainsInfo];
    $[16] = addNotification;
    $[17] = removeNotification;
    $[18] = showJetBrainsInfo;
    $[19] = t6;
    $[20] = t7;
  } else {
    t6 = $[19];
    t7 = $[20];
  }
  useEffect(t6, t7);
  let t8;
  let t9;
  if ($[21] !== addNotification || $[22] !== removeNotification || $[23] !== showIDEInstallError) {
    t8 = () => {
      if (getIsRemoteMode()) {
        return;
      }
      if (!showIDEInstallError) {
        removeNotification("ide-status-install-error");
        return;
      }
      addNotification({
        key: "ide-status-install-error",
        text: "IDE extension install failed (see /status for info)",
        color: "error",
        priority: "medium"
      });
    };
    t9 = [addNotification, removeNotification, showIDEInstallError];
    $[21] = addNotification;
    $[22] = removeNotification;
    $[23] = showIDEInstallError;
    $[24] = t8;
    $[25] = t9;
  } else {
    t8 = $[24];
    t9 = $[25];
  }
  useEffect(t8, t9);
}
function _temp2(hasShownHintRef_0, addNotification_0) {
  detectIDEs(true).then(infos => {
    const ideName_0 = infos[0]?.name;
    if (ideName_0 && !hasShownHintRef_0.current) {
      hasShownHintRef_0.current = true;
      saveGlobalConfig(_temp);
      addNotification_0({
        key: "ide-status-hint",
        jsx: <Text dimColor={true}>/ide for <Text color="ide">{ideName_0}</Text></Text>,
        priority: "low"
      });
    }
  });
}
function _temp(current) {
  return {
    ...current,
    ideHintShownCount: (current.ideHintShownCount ?? 0) + 1
  };
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZU5vdGlmaWNhdGlvbnMiLCJUZXh0IiwiTUNQU2VydmVyQ29ubmVjdGlvbiIsImdldEdsb2JhbENvbmZpZyIsInNhdmVHbG9iYWxDb25maWciLCJkZXRlY3RJREVzIiwiSURFRXh0ZW5zaW9uSW5zdGFsbGF0aW9uU3RhdHVzIiwiaXNKZXRCcmFpbnNJZGUiLCJpc1N1cHBvcnRlZFRlcm1pbmFsIiwiZ2V0SXNSZW1vdGVNb2RlIiwidXNlSWRlQ29ubmVjdGlvblN0YXR1cyIsIklERVNlbGVjdGlvbiIsIk1BWF9JREVfSElOVF9TSE9XX0NPVU5UIiwiUHJvcHMiLCJpZGVJbnN0YWxsYXRpb25TdGF0dXMiLCJpZGVTZWxlY3Rpb24iLCJtY3BDbGllbnRzIiwidXNlSURFU3RhdHVzSW5kaWNhdG9yIiwidDAiLCIkIiwiX2MiLCJhZGROb3RpZmljYXRpb24iLCJyZW1vdmVOb3RpZmljYXRpb24iLCJzdGF0dXMiLCJpZGVTdGF0dXMiLCJpZGVOYW1lIiwiaGFzU2hvd25IaW50UmVmIiwidDEiLCJpZGVUeXBlIiwiaXNKZXRCcmFpbnMiLCJzaG93SURFSW5zdGFsbEVycm9yT3JKZXRCcmFpbnNJbmZvIiwiZXJyb3IiLCJzaG91bGRTaG93SWRlU2VsZWN0aW9uIiwiZmlsZVBhdGgiLCJ0ZXh0IiwibGluZUNvdW50Iiwic2hvdWxkU2hvd0Nvbm5lY3RlZCIsInNob3dJREVJbnN0YWxsRXJyb3IiLCJzaG93SmV0QnJhaW5zSW5mbyIsInQyIiwidDMiLCJjdXJyZW50IiwiaWRlSGludFNob3duQ291bnQiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiX3RlbXAyIiwiY2xlYXJUaW1lb3V0IiwidDQiLCJ0NSIsImtleSIsImNvbG9yIiwicHJpb3JpdHkiLCJ0NiIsInQ3IiwidDgiLCJ0OSIsImhhc1Nob3duSGludFJlZl8wIiwiYWRkTm90aWZpY2F0aW9uXzAiLCJ0aGVuIiwiaW5mb3MiLCJpZGVOYW1lXzAiLCJuYW1lIiwiX3RlbXAiLCJqc3giXSwic291cmNlcyI6WyJ1c2VJREVTdGF0dXNJbmRpY2F0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTm90aWZpY2F0aW9ucyB9IGZyb20gJ3NyYy9jb250ZXh0L25vdGlmaWNhdGlvbnMuanMnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnc3JjL2luay5qcydcbmltcG9ydCB0eXBlIHsgTUNQU2VydmVyQ29ubmVjdGlvbiB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9tY3AvdHlwZXMuanMnXG5pbXBvcnQgeyBnZXRHbG9iYWxDb25maWcsIHNhdmVHbG9iYWxDb25maWcgfSBmcm9tICdzcmMvdXRpbHMvY29uZmlnLmpzJ1xuaW1wb3J0IHtcbiAgZGV0ZWN0SURFcyxcbiAgdHlwZSBJREVFeHRlbnNpb25JbnN0YWxsYXRpb25TdGF0dXMsXG4gIGlzSmV0QnJhaW5zSWRlLFxuICBpc1N1cHBvcnRlZFRlcm1pbmFsLFxufSBmcm9tICdzcmMvdXRpbHMvaWRlLmpzJ1xuaW1wb3J0IHsgZ2V0SXNSZW1vdGVNb2RlIH0gZnJvbSAnLi4vLi4vYm9vdHN0cmFwL3N0YXRlLmpzJ1xuaW1wb3J0IHsgdXNlSWRlQ29ubmVjdGlvblN0YXR1cyB9IGZyb20gJy4uL3VzZUlkZUNvbm5lY3Rpb25TdGF0dXMuanMnXG5pbXBvcnQgdHlwZSB7IElERVNlbGVjdGlvbiB9IGZyb20gJy4uL3VzZUlkZVNlbGVjdGlvbi5qcydcblxuY29uc3QgTUFYX0lERV9ISU5UX1NIT1dfQ09VTlQgPSA1XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGlkZUluc3RhbGxhdGlvblN0YXR1czogSURFRXh0ZW5zaW9uSW5zdGFsbGF0aW9uU3RhdHVzIHwgbnVsbFxuICBpZGVTZWxlY3Rpb246IElERVNlbGVjdGlvbiB8IHVuZGVmaW5lZFxuICBtY3BDbGllbnRzOiBNQ1BTZXJ2ZXJDb25uZWN0aW9uW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUlERVN0YXR1c0luZGljYXRvcih7XG4gIGlkZVNlbGVjdGlvbixcbiAgbWNwQ2xpZW50cyxcbiAgaWRlSW5zdGFsbGF0aW9uU3RhdHVzLFxufTogUHJvcHMpOiB2b2lkIHtcbiAgY29uc3QgeyBhZGROb3RpZmljYXRpb24sIHJlbW92ZU5vdGlmaWNhdGlvbiB9ID0gdXNlTm90aWZpY2F0aW9ucygpXG4gIGNvbnN0IHsgc3RhdHVzOiBpZGVTdGF0dXMsIGlkZU5hbWUgfSA9IHVzZUlkZUNvbm5lY3Rpb25TdGF0dXMobWNwQ2xpZW50cylcbiAgY29uc3QgaGFzU2hvd25IaW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IGlzSmV0QnJhaW5zID0gaWRlSW5zdGFsbGF0aW9uU3RhdHVzXG4gICAgPyBpc0pldEJyYWluc0lkZShpZGVJbnN0YWxsYXRpb25TdGF0dXM/LmlkZVR5cGUpXG4gICAgOiBmYWxzZVxuICBjb25zdCBzaG93SURFSW5zdGFsbEVycm9yT3JKZXRCcmFpbnNJbmZvID1cbiAgICBpZGVJbnN0YWxsYXRpb25TdGF0dXM/LmVycm9yIHx8IGlzSmV0QnJhaW5zXG5cbiAgY29uc3Qgc2hvdWxkU2hvd0lkZVNlbGVjdGlvbiA9XG4gICAgaWRlU3RhdHVzID09PSAnY29ubmVjdGVkJyAmJlxuICAgIChpZGVTZWxlY3Rpb24/LmZpbGVQYXRoIHx8XG4gICAgICAoaWRlU2VsZWN0aW9uPy50ZXh0ICYmIGlkZVNlbGVjdGlvbi5saW5lQ291bnQgPiAwKSlcblxuICAvLyBPbmx5IHNob3cgdGhlIGNvbm5lY3RlZCBpZiBub3Qgc2hvd2luZyBjb250ZXh0XG4gIGNvbnN0IHNob3VsZFNob3dDb25uZWN0ZWQgPVxuICAgIGlkZVN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgJiYgIXNob3VsZFNob3dJZGVTZWxlY3Rpb25cblxuICBjb25zdCBzaG93SURFSW5zdGFsbEVycm9yID1cbiAgICBzaG93SURFSW5zdGFsbEVycm9yT3JKZXRCcmFpbnNJbmZvICYmXG4gICAgIWlzSmV0QnJhaW5zICYmXG4gICAgIXNob3VsZFNob3dDb25uZWN0ZWQgJiZcbiAgICAhc2hvdWxkU2hvd0lkZVNlbGVjdGlvblxuXG4gIGNvbnN0IHNob3dKZXRCcmFpbnNJbmZvID1cbiAgICBzaG93SURFSW5zdGFsbEVycm9yT3JKZXRCcmFpbnNJbmZvICYmXG4gICAgaXNKZXRCcmFpbnMgJiZcbiAgICAhc2hvdWxkU2hvd0Nvbm5lY3RlZCAmJlxuICAgICFzaG91bGRTaG93SWRlU2VsZWN0aW9uXG5cbiAgLy8gU2hvdyB0aGUgL2lkZSBjb21tYW5kIGhpbnQgaWYgcnVubmluZyBmcm9tIGFuIGV4dGVybmFsIHRlcm1pbmFsIGFuZCBmb3VuZCBydW5uaW5nIElERShzKVxuICAvLyBEZWxheSBzaG93aW5nIGhpbnQgdG8gYXZvaWQgYnJpZWYgZmxhc2ggZHVyaW5nIGF1dG8tY29ubmVjdCBzdGFydHVwXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdldElzUmVtb3RlTW9kZSgpKSByZXR1cm5cbiAgICBpZiAoaXNTdXBwb3J0ZWRUZXJtaW5hbCgpIHx8IGlkZVN0YXR1cyAhPT0gbnVsbCB8fCBzaG93SmV0QnJhaW5zSW5mbykge1xuICAgICAgcmVtb3ZlTm90aWZpY2F0aW9uKCdpZGUtc3RhdHVzLWhpbnQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8vIFdhaXQgYSBiaXQgdG8gbGV0IGF1dG8tY29ubmVjdCBoYXBwZW4gZmlyc3QsIGF2b2lkaW5nIGJyaWVmIGhpbnQgZmxhc2hcbiAgICBpZiAoXG4gICAgICBoYXNTaG93bkhpbnRSZWYuY3VycmVudCB8fFxuICAgICAgKGdldEdsb2JhbENvbmZpZygpLmlkZUhpbnRTaG93bkNvdW50ID8/IDApID49IE1BWF9JREVfSElOVF9TSE9XX0NPVU5UXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dChcbiAgICAgIChoYXNTaG93bkhpbnRSZWYsIGFkZE5vdGlmaWNhdGlvbikgPT4ge1xuICAgICAgICB2b2lkIGRldGVjdElERXModHJ1ZSkudGhlbihpbmZvcyA9PiB7XG4gICAgICAgICAgY29uc3QgaWRlTmFtZSA9IGluZm9zWzBdPy5uYW1lXG4gICAgICAgICAgaWYgKGlkZU5hbWUgJiYgIWhhc1Nob3duSGludFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBoYXNTaG93bkhpbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgICAgIHNhdmVHbG9iYWxDb25maWcoY3VycmVudCA9PiAoe1xuICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICBpZGVIaW50U2hvd25Db3VudDogKGN1cnJlbnQuaWRlSGludFNob3duQ291bnQgPz8gMCkgKyAxLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBhZGROb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBrZXk6ICdpZGUtc3RhdHVzLWhpbnQnLFxuICAgICAgICAgICAgICBqc3g6IChcbiAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICAgIC9pZGUgZm9yIDxUZXh0IGNvbG9yPVwiaWRlXCI+e2lkZU5hbWV9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgcHJpb3JpdHk6ICdsb3cnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgMzAwMCxcbiAgICAgIGhhc1Nob3duSGludFJlZixcbiAgICAgIGFkZE5vdGlmaWNhdGlvbixcbiAgICApXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gIH0sIFthZGROb3RpZmljYXRpb24sIHJlbW92ZU5vdGlmaWNhdGlvbiwgaWRlU3RhdHVzLCBzaG93SmV0QnJhaW5zSW5mb10pXG5cbiAgLy8gU2hvdyBJREUgZGlzY29ubmVjdGVkL2ZhaWxlZCBub3RpZmljYXRpb24gd2hlbiBzdGF0dXMgaXMgZGlzY29ubmVjdGVkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdldElzUmVtb3RlTW9kZSgpKSByZXR1cm5cbiAgICBpZiAoXG4gICAgICBzaG93SURFSW5zdGFsbEVycm9yIHx8XG4gICAgICBzaG93SmV0QnJhaW5zSW5mbyB8fFxuICAgICAgaWRlU3RhdHVzICE9PSAnZGlzY29ubmVjdGVkJyB8fFxuICAgICAgIWlkZU5hbWVcbiAgICApIHtcbiAgICAgIHJlbW92ZU5vdGlmaWNhdGlvbignaWRlLXN0YXR1cy1kaXNjb25uZWN0ZWQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGFkZE5vdGlmaWNhdGlvbih7XG4gICAgICBrZXk6ICdpZGUtc3RhdHVzLWRpc2Nvbm5lY3RlZCcsXG4gICAgICB0ZXh0OiBgJHtpZGVOYW1lfSBkaXNjb25uZWN0ZWRgLFxuICAgICAgY29sb3I6ICdlcnJvcicsXG4gICAgICBwcmlvcml0eTogJ21lZGl1bScsXG4gICAgfSlcbiAgfSwgW1xuICAgIGFkZE5vdGlmaWNhdGlvbixcbiAgICByZW1vdmVOb3RpZmljYXRpb24sXG4gICAgaWRlU3RhdHVzLFxuICAgIGlkZU5hbWUsXG4gICAgc2hvd0lERUluc3RhbGxFcnJvcixcbiAgICBzaG93SmV0QnJhaW5zSW5mbyxcbiAgXSlcblxuICAvLyBTaG93IEpldEJyYWlucyBwbHVnaW4gbm90IGNvbm5lY3RlZCBoaW50XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdldElzUmVtb3RlTW9kZSgpKSByZXR1cm5cbiAgICBpZiAoIXNob3dKZXRCcmFpbnNJbmZvKSB7XG4gICAgICByZW1vdmVOb3RpZmljYXRpb24oJ2lkZS1zdGF0dXMtamV0YnJhaW5zLWRpc2Nvbm5lY3RlZCcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgYWRkTm90aWZpY2F0aW9uKHtcbiAgICAgIGtleTogJ2lkZS1zdGF0dXMtamV0YnJhaW5zLWRpc2Nvbm5lY3RlZCcsXG4gICAgICB0ZXh0OiAnSURFIHBsdWdpbiBub3QgY29ubmVjdGVkIMK3IC9zdGF0dXMgZm9yIGluZm8nLFxuICAgICAgcHJpb3JpdHk6ICdtZWRpdW0nLFxuICAgIH0pXG4gIH0sIFthZGROb3RpZmljYXRpb24sIHJlbW92ZU5vdGlmaWNhdGlvbiwgc2hvd0pldEJyYWluc0luZm9dKVxuXG4gIC8vIFNob3cgSURFIGluc3RhbGwgZXJyb3JcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZ2V0SXNSZW1vdGVNb2RlKCkpIHJldHVyblxuICAgIGlmICghc2hvd0lERUluc3RhbGxFcnJvcikge1xuICAgICAgcmVtb3ZlTm90aWZpY2F0aW9uKCdpZGUtc3RhdHVzLWluc3RhbGwtZXJyb3InKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGFkZE5vdGlmaWNhdGlvbih7XG4gICAgICBrZXk6ICdpZGUtc3RhdHVzLWluc3RhbGwtZXJyb3InLFxuICAgICAgdGV4dDogJ0lERSBleHRlbnNpb24gaW5zdGFsbCBmYWlsZWQgKHNlZSAvc3RhdHVzIGZvciBpbmZvKScsXG4gICAgICBjb2xvcjogJ2Vycm9yJyxcbiAgICAgIHByaW9yaXR5OiAnbWVkaXVtJyxcbiAgICB9KVxuICB9LCBbYWRkTm90aWZpY2F0aW9uLCByZW1vdmVOb3RpZmljYXRpb24sIHNob3dJREVJbnN0YWxsRXJyb3JdKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxTQUFTLEVBQUVDLE1BQU0sUUFBUSxPQUFPO0FBQ2hELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMvRCxTQUFTQyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxjQUFjQyxtQkFBbUIsUUFBUSwyQkFBMkI7QUFDcEUsU0FBU0MsZUFBZSxFQUFFQyxnQkFBZ0IsUUFBUSxxQkFBcUI7QUFDdkUsU0FDRUMsVUFBVSxFQUNWLEtBQUtDLDhCQUE4QixFQUNuQ0MsY0FBYyxFQUNkQyxtQkFBbUIsUUFDZCxrQkFBa0I7QUFDekIsU0FBU0MsZUFBZSxRQUFRLDBCQUEwQjtBQUMx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O1FBQUE7TUFBQTtNQUNyQixJQUFJLENBQUM0QixtQkFBbUI7UUFDdEJmLGtCQUFrQixDQUFDLDBCQUEwQixDQUFDO1FBQUE7TUFBQTtNQUdoREQsZUFBZSxDQUFDO1FBQUE0QixHQUFBLEVBQ1QsMEJBQTBCO1FBQUFmLElBQUEsRUFDekIscURBQXFEO1FBQUFnQixLQUFBLEVBQ3BELE9BQU87UUFBQUMsUUFBQSxFQUNKO01BQ1osQ0FBQyxDQUFDO0lBQUEsQ0FDSDtJQUFFSSxFQUFBLElBQUNsQyxlQUFlLEVBQUVDLGtCQUFrQixFQUFFZSxtQkFBbUIsQ0FBQztJQUFBbEIsQ0FBQSxPQUFBRSxlQUFBO0lBQUFGLENBQUEsT0FBQUcsa0JBQUE7SUFBQUgsQ0FBQSxPQUFBa0IsbUJBQUE7SUFBQWxCLENBQUEsT0FBQW1DLEVBQUE7SUFBQW5DLENBQUEsT0FBQW9DLEVBQUE7RUFBQTtJQUFBRCxFQUFBLEdBQUFuQyxDQUFBO0lBQUFvQyxFQUFBLEdBQUFwQyxDQUFBO0VBQUE7RUFaN0RyQixTQUFTLENBQUN3RCxFQVlULEVBQUVDLEVBQTBELENBQUM7QUFBQTtBQXRJekQsU0FBQVYsT0FBQVcsaUJBQUEsRUFBQUMsaUJBQUE7RUFxRE1wRCxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUFxRCxJQUFLLENBQUNDLEtBQUE7SUFDekIsTUFBQUMsU0FBQSxHQUFnQkQsS0FBSyxHQUFTLEVBQUFFLElBQUE7SUFDOUIsSUFBSUQsU0FBbUMsSUFBbkMsQ0FBWWxDLGlCQUFlLENBQUFlLE9BQVE7TUFDckNmLGlCQUFlLENBQUFlLE9BQUEsR0FBVyxJQUFIO01BQ3ZCckMsZ0JBQWdCLENBQUMwRCxLQUdmLENBQUM7TUFDSHpDLGlCQUFlLENBQUM7UUFBQTRCLEdBQUEsRUFDVCxpQkFBaUI7UUFBQWMsR0FBQSxFQUVwQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQVIsS0FBTyxDQUFDLENBQUMsU0FDSixDQUFDLElBQUksQ0FBTyxLQUFLLENBQUwsS0FBSyxDQUFFdEMsVUFBTSxDQUFFLEVBQTFCLElBQUksQ0FDaEIsRUFGQyxJQUFJLENBRUU7UUFBQTBCLFFBQUEsRUFFQztNQUNaLENBQUMsQ0FBQztJQUFBO0VBQ0gsQ0FDRixDQUFDO0FBQUE7QUF2RUgsU0FBQVcsTUFBQXJCLE9BQUE7RUFBQSxPQXlEa0M7SUFBQSxHQUN4QkEsT0FBTztJQUFBQyxpQkFBQSxFQUNTLENBQUNELE9BQU8sQ0FBQUMsaUJBQXVCLElBQTlCLENBQThCLElBQUk7RUFDeEQsQ0FBQztBQUFBIiwiaWdub3JlTGlzdCI6W119