__vite_ssr_exportName__("EditorLaunchStyle", () => { try { return EditorLaunchStyle } catch {} });
__vite_ssr_exportName__("EDITORS", () => { try { return EDITORS } catch {} });
__vite_ssr_exportName__("EditorId", () => { try { return EditorId } catch {} });
__vite_ssr_exportName__("FileManagerRevealKind", () => { try { return FileManagerRevealKind } catch {} });
__vite_ssr_exportName__("LaunchEditorInput", () => { try { return LaunchEditorInput } catch {} });
__vite_ssr_exportName__("REMOTE_CAPABLE_EDITOR_IDS", () => { try { return REMOTE_CAPABLE_EDITOR_IDS } catch {} });
__vite_ssr_exportName__("remoteSchemeForEditor", () => { try { return remoteSchemeForEditor } catch {} });
__vite_ssr_exportName__("buildRemoteOpenUrl", () => { try { return buildRemoteOpenUrl } catch {} });
__vite_ssr_exportName__("RemoteOpenTargetKind", () => { try { return RemoteOpenTargetKind } catch {} });
__vite_ssr_exportName__("RemoteOpenTarget", () => { try { return RemoteOpenTarget } catch {} });
__vite_ssr_exportName__("ExternalLauncherUnknownEditorError", () => { try { return ExternalLauncherUnknownEditorError } catch {} });
__vite_ssr_exportName__("ExternalLauncherUnsupportedEditorError", () => { try { return ExternalLauncherUnsupportedEditorError } catch {} });
__vite_ssr_exportName__("ExternalLauncherCommandNotFoundError", () => { try { return ExternalLauncherCommandNotFoundError } catch {} });
__vite_ssr_exportName__("ExternalLauncherUnsupportedTargetError", () => { try { return ExternalLauncherUnsupportedTargetError } catch {} });
__vite_ssr_exportName__("ExternalLauncherBrowserSpawnError", () => { try { return ExternalLauncherBrowserSpawnError } catch {} });
__vite_ssr_exportName__("ExternalLauncherEditorSpawnError", () => { try { return ExternalLauncherEditorSpawnError } catch {} });
__vite_ssr_exportName__("ExternalLauncherError", () => { try { return ExternalLauncherError } catch {} });
const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Schema.js");
const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["TrimmedNonEmptyString"]});


const EditorLaunchStyle = __vite_ssr_import_0__.Literals([
	"direct-path",
	"goto",
	"line-column"
]);
const EDITORS = [
	{
		id: "cursor",
		label: "Cursor",
		commands: ["cursor"],
		// File and workspace opens must target the IDE even when the Agents Window is active.
		baseArgs: ["--classic"],
		launchStyle: "goto",
		remoteScheme: "cursor"
	},
	{
		id: "trae",
		label: "Trae",
		commands: ["trae"],
		launchStyle: "goto"
	},
	{
		id: "kiro",
		label: "Kiro",
		commands: ["kiro"],
		baseArgs: ["ide"],
		launchStyle: "goto"
	},
	{
		id: "vscode",
		label: "VS Code",
		commands: ["code"],
		launchStyle: "goto",
		remoteScheme: "vscode"
	},
	{
		id: "vscode-insiders",
		label: "VS Code Insiders",
		commands: ["code-insiders"],
		launchStyle: "goto",
		remoteScheme: "vscode-insiders"
	},
	{
		id: "vscodium",
		label: "VSCodium",
		commands: ["codium"],
		launchStyle: "goto",
		remoteScheme: "vscodium"
	},
	{
		id: "zed",
		label: "Zed",
		commands: ["zed", "zeditor"],
		launchStyle: "direct-path",
		remoteScheme: "zed"
	},
	{
		id: "antigravity",
		label: "Antigravity",
		// The IDE ships antigravity-ide; agy is the standalone CLI.
		commands: ["antigravity-ide", "agy-ide"],
		launchStyle: "goto"
	},
	{
		id: "idea",
		label: "IntelliJ IDEA",
		commands: ["idea"],
		launchStyle: "line-column",
		jetbrainsProductCode: "IU"
	},
	{
		id: "aqua",
		label: "Aqua",
		commands: ["aqua"],
		launchStyle: "line-column",
		jetbrainsProductCode: "QA"
	},
	{
		id: "clion",
		label: "CLion",
		commands: ["clion"],
		launchStyle: "line-column",
		jetbrainsProductCode: "CL"
	},
	{
		id: "datagrip",
		label: "DataGrip",
		commands: ["datagrip"],
		launchStyle: "line-column",
		jetbrainsProductCode: "DB"
	},
	{
		id: "dataspell",
		label: "DataSpell",
		commands: ["dataspell"],
		launchStyle: "line-column",
		jetbrainsProductCode: "DS"
	},
	{
		id: "goland",
		label: "GoLand",
		commands: ["goland"],
		launchStyle: "line-column",
		jetbrainsProductCode: "GO"
	},
	{
		id: "phpstorm",
		label: "PhpStorm",
		commands: ["phpstorm"],
		launchStyle: "line-column",
		jetbrainsProductCode: "PS"
	},
	{
		id: "pycharm",
		label: "PyCharm",
		commands: ["pycharm"],
		launchStyle: "line-column",
		jetbrainsProductCode: "PY"
	},
	{
		id: "rider",
		label: "Rider",
		commands: ["rider"],
		launchStyle: "line-column",
		jetbrainsProductCode: "RD"
	},
	{
		id: "rubymine",
		label: "RubyMine",
		commands: ["rubymine"],
		launchStyle: "line-column",
		jetbrainsProductCode: "RM"
	},
	{
		id: "rustrover",
		label: "RustRover",
		commands: ["rustrover"],
		launchStyle: "line-column",
		jetbrainsProductCode: "RR"
	},
	{
		id: "webstorm",
		label: "WebStorm",
		commands: ["webstorm"],
		launchStyle: "line-column",
		jetbrainsProductCode: "WS"
	},
	{
		id: "file-manager",
		label: "File Manager",
		commands: null,
		launchStyle: "direct-path"
	}
];
const EditorId = __vite_ssr_import_0__.Literals(EDITORS.map((e) => e.id));
const FileManagerRevealKind = __vite_ssr_import_0__.Literals([
	"finder",
	"file-explorer",
	"files"
]);
const LaunchEditorInput = __vite_ssr_import_0__.Struct({
	cwd: __vite_ssr_import_1__.TrimmedNonEmptyString,
	editor: EditorId,
	/** Only for file-manager; requires the server's shellRevealInFileManager capability. */
	reveal: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean)
});
const remoteSchemeOf = (editor) => editor.remoteScheme ?? (editor.jetbrainsProductCode === undefined ? undefined : "jetbrains");
const REMOTE_CAPABLE_EDITOR_IDS = EDITORS.flatMap((editor) => remoteSchemeOf(editor) !== undefined ? [editor.id] : []);
const remoteSchemeForEditor = (id) => {
	const editor = EDITORS.find((candidate) => candidate.id === id);
	return editor === undefined ? undefined : remoteSchemeOf(editor);
};
const buildRemoteOpenUrl = (input) => {
	const scheme = remoteSchemeForEditor(input.editor);
	if (scheme === undefined) {
		return undefined;
	};
	const editor = EDITORS.find((candidate) => candidate.id === input.editor);
	if (editor !== undefined && "jetbrainsProductCode" in editor) {
		const params = new URLSearchParams({
			h: input.host,
			launchIde: "true",
			ideHint: editor.jetbrainsProductCode,
			projectHint: input.absolutePath.replaceAll("\\", "/")
		});
		if (input.username !== undefined) {
			params.set("u", input.username);
		};
		return `${scheme}://gateway/ssh/environment?${params.toString()}`;
	};
	// Windows server paths (`C:\...`) appear as `/C:/...` in vscode-remote URIs.
	const posixPath = input.absolutePath.replaceAll("\\", "/");
	const rootedPath = posixPath.startsWith("/") ? posixPath : `/${posixPath}`;
	const encodedHost = encodeURIComponent(input.host);
	if (input.editor === "zed") {
		// Zed roots paths on the system drive, so omit the Windows drive prefix.
		const zedPath = /^[Cc]:[\\/]/.test(input.absolutePath) ? rootedPath.slice(3) : rootedPath;
		const encodedZedPath = zedPath.split("/").map(encodeURIComponent).join("/");
		// Zed reads this segment as ssh URL userinfo, so the `@` stays literal.
		const zedDestination = input.username === undefined ? encodedHost : `${encodeURIComponent(input.username)}@${encodedHost}`;
		return `${scheme}://ssh/${zedDestination}${encodedZedPath}`;
	};
	const encodedPath = rootedPath.split("/").map(encodeURIComponent).join("/");
	const destination = input.username === undefined ? input.host : `${input.username}@${input.host}`;
	// VS Code opens a bare vscode-remote path as a folder; a trailing position makes it open the file.
	return `${scheme}://vscode-remote/ssh-remote+${encodeURIComponent(destination)}${encodedPath}${input.isFile ? ":1:1" : ""}`;
};
const RemoteOpenTargetKind = __vite_ssr_import_0__.Literals(["tailscale", "mdns"]);
const RemoteOpenTarget = __vite_ssr_import_0__.Struct({
	kind: RemoteOpenTargetKind,
	host: __vite_ssr_import_1__.TrimmedNonEmptyString,
	username: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_1__.TrimmedNonEmptyString))
});
class ExternalLauncherUnknownEditorError extends __vite_ssr_import_0__.TaggedError()("ExternalLauncherUnknownEditorError", { editor: __vite_ssr_import_0__.String }) {
	get message() {
		return `Unknown editor: ${this.editor}`;
	}
};
class ExternalLauncherUnsupportedEditorError extends __vite_ssr_import_0__.TaggedError()("ExternalLauncherUnsupportedEditorError", { editor: EditorId }) {
	get message() {
		return `Unsupported editor: ${this.editor}`;
	}
};
class ExternalLauncherCommandNotFoundError extends __vite_ssr_import_0__.TaggedError()("ExternalLauncherCommandNotFoundError", {
	editor: EditorId,
	command: __vite_ssr_import_0__.String
}) {
	get message() {
		return `Editor command not found: ${this.command}`;
	}
};
class ExternalLauncherUnsupportedTargetError extends __vite_ssr_import_0__.TaggedError()("ExternalLauncherUnsupportedTargetError", { editor: EditorId }) {
	get message() {
		return `${this.editor} cannot open a path containing line breaks or double quotes`;
	}
};
const ExternalLauncherSpawnFields = {
	command: __vite_ssr_import_0__.String,
	args: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.String),
	cause: __vite_ssr_import_0__.Defect()
};
class ExternalLauncherBrowserSpawnError extends __vite_ssr_import_0__.TaggedError()("ExternalLauncherBrowserSpawnError", {
	...ExternalLauncherSpawnFields,
	target: __vite_ssr_import_0__.String
}) {
	get message() {
		return `Failed to launch browser target '${this.target}' with '${[this.command, ...this.args].join(" ")}'`;
	}
};
class ExternalLauncherEditorSpawnError extends __vite_ssr_import_0__.TaggedError()("ExternalLauncherEditorSpawnError", {
	...ExternalLauncherSpawnFields,
	editor: EditorId,
	target: __vite_ssr_import_0__.String
}) {
	get message() {
		return `Failed to launch '${this.target}' in ${this.editor} with '${[this.command, ...this.args].join(" ")}'`;
	}
};
const ExternalLauncherError = __vite_ssr_import_0__.Union([
	ExternalLauncherUnknownEditorError,
	ExternalLauncherUnsupportedEditorError,
	ExternalLauncherCommandNotFoundError,
	ExternalLauncherUnsupportedTargetError,
	ExternalLauncherBrowserSpawnError,
	ExternalLauncherEditorSpawnError
]);
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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O0FBQ2xCLENBQ0YsQ0FBQyxDQUFDO0NBQ0EsSUFBYSxVQUFrQjtFQUM3QixPQUFPLDZCQUE2QixLQUFLO0NBQzNDO0FBQ0Y7QUFFTyxNQUFNLCtDQUErQyxzQkFBTyxZQUFvRCxDQUFDLENBQ3RILDBDQUNBLEVBQ0UsUUFBUSxTQUNWLENBQ0YsQ0FBQyxDQUFDO0NBQ0EsSUFBYSxVQUFrQjtFQUM3QixPQUFPLEdBQUcsS0FBSyxPQUFPO0NBQ3hCO0FBQ0Y7QUFFQSxNQUFNLDhCQUE4QjtDQUNsQyxTQUFTLHNCQUFPO0NBQ2hCLE1BQU0sc0JBQU8sTUFBTSxzQkFBTyxNQUFNO0NBQ2hDLE9BQU8sc0JBQU8sT0FBTztBQUN2QjtBQUVPLE1BQU0sMENBQTBDLHNCQUFPLFlBQStDLENBQUMsQ0FDNUcscUNBQ0E7Q0FDRSxHQUFHO0NBQ0gsUUFBUSxzQkFBTztBQUNqQixDQUNGLENBQUMsQ0FBQztDQUNBLElBQWEsVUFBa0I7RUFDN0IsT0FBTyxvQ0FBb0MsS0FBSyxPQUFPLFVBQVUsQ0FBQyxLQUFLLFNBQVMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0NBQzFHO0FBQ0Y7QUFFTyxNQUFNLHlDQUF5QyxzQkFBTyxZQUE4QyxDQUFDLENBQzFHLG9DQUNBO0NBQ0UsR0FBRztDQUNILFFBQVE7Q0FDUixRQUFRLHNCQUFPO0FBQ2pCLENBQ0YsQ0FBQyxDQUFDO0NBQ0EsSUFBYSxVQUFrQjtFQUM3QixPQUFPLHFCQUFxQixLQUFLLE9BQU8sT0FBTyxLQUFLLE9BQU8sU0FBUyxDQUFDLEtBQUssU0FBUyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7Q0FDN0c7QUFDRjtBQUVPLE1BQU0sd0JBQXdCLHNCQUFPLE1BQU07Q0FDaEQ7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0YsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZWRpdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFNjaGVtYSBmcm9tIFwiZWZmZWN0L1NjaGVtYVwiO1xuaW1wb3J0IHsgVHJpbW1lZE5vbkVtcHR5U3RyaW5nIH0gZnJvbSBcIi4vYmFzZVNjaGVtYXMudHNcIjtcblxuZXhwb3J0IGNvbnN0IEVkaXRvckxhdW5jaFN0eWxlID0gU2NoZW1hLkxpdGVyYWxzKFtcImRpcmVjdC1wYXRoXCIsIFwiZ290b1wiLCBcImxpbmUtY29sdW1uXCJdKTtcbmV4cG9ydCB0eXBlIEVkaXRvckxhdW5jaFN0eWxlID0gdHlwZW9mIEVkaXRvckxhdW5jaFN0eWxlLlR5cGU7XG5cbnR5cGUgRWRpdG9yRGVmaW5pdGlvbiA9IHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgY29tbWFuZHM6IHJlYWRvbmx5IFtzdHJpbmcsIC4uLnN0cmluZ1tdXSB8IG51bGw7XG4gIHJlYWRvbmx5IGJhc2VBcmdzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGxhdW5jaFN0eWxlOiBFZGl0b3JMYXVuY2hTdHlsZTtcbiAgcmVhZG9ubHkgcmVtb3RlU2NoZW1lPzogc3RyaW5nO1xuICByZWFkb25seSBqZXRicmFpbnNQcm9kdWN0Q29kZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBFRElUT1JTID0gW1xuICB7XG4gICAgaWQ6IFwiY3Vyc29yXCIsXG4gICAgbGFiZWw6IFwiQ3Vyc29yXCIsXG4gICAgY29tbWFuZHM6IFtcImN1cnNvclwiXSxcbiAgICAvLyBGaWxlIGFuZCB3b3Jrc3BhY2Ugb3BlbnMgbXVzdCB0YXJnZXQgdGhlIElERSBldmVuIHdoZW4gdGhlIEFnZW50cyBXaW5kb3cgaXMgYWN0aXZlLlxuICAgIGJhc2VBcmdzOiBbXCItLWNsYXNzaWNcIl0sXG4gICAgbGF1bmNoU3R5bGU6IFwiZ290b1wiLFxuICAgIHJlbW90ZVNjaGVtZTogXCJjdXJzb3JcIixcbiAgfSxcbiAgeyBpZDogXCJ0cmFlXCIsIGxhYmVsOiBcIlRyYWVcIiwgY29tbWFuZHM6IFtcInRyYWVcIl0sIGxhdW5jaFN0eWxlOiBcImdvdG9cIiB9LFxuICB7IGlkOiBcImtpcm9cIiwgbGFiZWw6IFwiS2lyb1wiLCBjb21tYW5kczogW1wia2lyb1wiXSwgYmFzZUFyZ3M6IFtcImlkZVwiXSwgbGF1bmNoU3R5bGU6IFwiZ290b1wiIH0sXG4gIHtcbiAgICBpZDogXCJ2c2NvZGVcIixcbiAgICBsYWJlbDogXCJWUyBDb2RlXCIsXG4gICAgY29tbWFuZHM6IFtcImNvZGVcIl0sXG4gICAgbGF1bmNoU3R5bGU6IFwiZ290b1wiLFxuICAgIHJlbW90ZVNjaGVtZTogXCJ2c2NvZGVcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcInZzY29kZS1pbnNpZGVyc1wiLFxuICAgIGxhYmVsOiBcIlZTIENvZGUgSW5zaWRlcnNcIixcbiAgICBjb21tYW5kczogW1wiY29kZS1pbnNpZGVyc1wiXSxcbiAgICBsYXVuY2hTdHlsZTogXCJnb3RvXCIsXG4gICAgcmVtb3RlU2NoZW1lOiBcInZzY29kZS1pbnNpZGVyc1wiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidnNjb2RpdW1cIixcbiAgICBsYWJlbDogXCJWU0NvZGl1bVwiLFxuICAgIGNvbW1hbmRzOiBbXCJjb2RpdW1cIl0sXG4gICAgbGF1bmNoU3R5bGU6IFwiZ290b1wiLFxuICAgIHJlbW90ZVNjaGVtZTogXCJ2c2NvZGl1bVwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiemVkXCIsXG4gICAgbGFiZWw6IFwiWmVkXCIsXG4gICAgY29tbWFuZHM6IFtcInplZFwiLCBcInplZGl0b3JcIl0sXG4gICAgbGF1bmNoU3R5bGU6IFwiZGlyZWN0LXBhdGhcIixcbiAgICByZW1vdGVTY2hlbWU6IFwiemVkXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhbnRpZ3Jhdml0eVwiLFxuICAgIGxhYmVsOiBcIkFudGlncmF2aXR5XCIsXG4gICAgLy8gVGhlIElERSBzaGlwcyBhbnRpZ3Jhdml0eS1pZGU7IGFneSBpcyB0aGUgc3RhbmRhbG9uZSBDTEkuXG4gICAgY29tbWFuZHM6IFtcImFudGlncmF2aXR5LWlkZVwiLCBcImFneS1pZGVcIl0sXG4gICAgbGF1bmNoU3R5bGU6IFwiZ290b1wiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiaWRlYVwiLFxuICAgIGxhYmVsOiBcIkludGVsbGlKIElERUFcIixcbiAgICBjb21tYW5kczogW1wiaWRlYVwiXSxcbiAgICBsYXVuY2hTdHlsZTogXCJsaW5lLWNvbHVtblwiLFxuICAgIGpldGJyYWluc1Byb2R1Y3RDb2RlOiBcIklVXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhcXVhXCIsXG4gICAgbGFiZWw6IFwiQXF1YVwiLFxuICAgIGNvbW1hbmRzOiBbXCJhcXVhXCJdLFxuICAgIGxhdW5jaFN0eWxlOiBcImxpbmUtY29sdW1uXCIsXG4gICAgamV0YnJhaW5zUHJvZHVjdENvZGU6IFwiUUFcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImNsaW9uXCIsXG4gICAgbGFiZWw6IFwiQ0xpb25cIixcbiAgICBjb21tYW5kczogW1wiY2xpb25cIl0sXG4gICAgbGF1bmNoU3R5bGU6IFwibGluZS1jb2x1bW5cIixcbiAgICBqZXRicmFpbnNQcm9kdWN0Q29kZTogXCJDTFwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiZGF0YWdyaXBcIixcbiAgICBsYWJlbDogXCJEYXRhR3JpcFwiLFxuICAgIGNvbW1hbmRzOiBbXCJkYXRhZ3JpcFwiXSxcbiAgICBsYXVuY2hTdHlsZTogXCJsaW5lLWNvbHVtblwiLFxuICAgIGpldGJyYWluc1Byb2R1Y3RDb2RlOiBcIkRCXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJkYXRhc3BlbGxcIixcbiAgICBsYWJlbDogXCJEYXRhU3BlbGxcIixcbiAgICBjb21tYW5kczogW1wiZGF0YXNwZWxsXCJdLFxuICAgIGxhdW5jaFN0eWxlOiBcImxpbmUtY29sdW1uXCIsXG4gICAgamV0YnJhaW5zUHJvZHVjdENvZGU6IFwiRFNcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImdvbGFuZFwiLFxuICAgIGxhYmVsOiBcIkdvTGFuZFwiLFxuICAgIGNvbW1hbmRzOiBbXCJnb2xhbmRcIl0sXG4gICAgbGF1bmNoU3R5bGU6IFwibGluZS1jb2x1bW5cIixcbiAgICBqZXRicmFpbnNQcm9kdWN0Q29kZTogXCJHT1wiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwicGhwc3Rvcm1cIixcbiAgICBsYWJlbDogXCJQaHBTdG9ybVwiLFxuICAgIGNvbW1hbmRzOiBbXCJwaHBzdG9ybVwiXSxcbiAgICBsYXVuY2hTdHlsZTogXCJsaW5lLWNvbHVtblwiLFxuICAgIGpldGJyYWluc1Byb2R1Y3RDb2RlOiBcIlBTXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJweWNoYXJtXCIsXG4gICAgbGFiZWw6IFwiUHlDaGFybVwiLFxuICAgIGNvbW1hbmRzOiBbXCJweWNoYXJtXCJdLFxuICAgIGxhdW5jaFN0eWxlOiBcImxpbmUtY29sdW1uXCIsXG4gICAgamV0YnJhaW5zUHJvZHVjdENvZGU6IFwiUFlcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcInJpZGVyXCIsXG4gICAgbGFiZWw6IFwiUmlkZXJcIixcbiAgICBjb21tYW5kczogW1wicmlkZXJcIl0sXG4gICAgbGF1bmNoU3R5bGU6IFwibGluZS1jb2x1bW5cIixcbiAgICBqZXRicmFpbnNQcm9kdWN0Q29kZTogXCJSRFwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwicnVieW1pbmVcIixcbiAgICBsYWJlbDogXCJSdWJ5TWluZVwiLFxuICAgIGNvbW1hbmRzOiBbXCJydWJ5bWluZVwiXSxcbiAgICBsYXVuY2hTdHlsZTogXCJsaW5lLWNvbHVtblwiLFxuICAgIGpldGJyYWluc1Byb2R1Y3RDb2RlOiBcIlJNXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJydXN0cm92ZXJcIixcbiAgICBsYWJlbDogXCJSdXN0Um92ZXJcIixcbiAgICBjb21tYW5kczogW1wicnVzdHJvdmVyXCJdLFxuICAgIGxhdW5jaFN0eWxlOiBcImxpbmUtY29sdW1uXCIsXG4gICAgamV0YnJhaW5zUHJvZHVjdENvZGU6IFwiUlJcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcIndlYnN0b3JtXCIsXG4gICAgbGFiZWw6IFwiV2ViU3Rvcm1cIixcbiAgICBjb21tYW5kczogW1wid2Vic3Rvcm1cIl0sXG4gICAgbGF1bmNoU3R5bGU6IFwibGluZS1jb2x1bW5cIixcbiAgICBqZXRicmFpbnNQcm9kdWN0Q29kZTogXCJXU1wiLFxuICB9LFxuICB7IGlkOiBcImZpbGUtbWFuYWdlclwiLCBsYWJlbDogXCJGaWxlIE1hbmFnZXJcIiwgY29tbWFuZHM6IG51bGwsIGxhdW5jaFN0eWxlOiBcImRpcmVjdC1wYXRoXCIgfSxcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlYWRvbmx5QXJyYXk8RWRpdG9yRGVmaW5pdGlvbj47XG5cbmV4cG9ydCBjb25zdCBFZGl0b3JJZCA9IFNjaGVtYS5MaXRlcmFscyhFRElUT1JTLm1hcCgoZSkgPT4gZS5pZCkpO1xuZXhwb3J0IHR5cGUgRWRpdG9ySWQgPSB0eXBlb2YgRWRpdG9ySWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEZpbGVNYW5hZ2VyUmV2ZWFsS2luZCA9IFNjaGVtYS5MaXRlcmFscyhbXCJmaW5kZXJcIiwgXCJmaWxlLWV4cGxvcmVyXCIsIFwiZmlsZXNcIl0pO1xuZXhwb3J0IHR5cGUgRmlsZU1hbmFnZXJSZXZlYWxLaW5kID0gdHlwZW9mIEZpbGVNYW5hZ2VyUmV2ZWFsS2luZC5UeXBlO1xuXG5leHBvcnQgY29uc3QgTGF1bmNoRWRpdG9ySW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgY3dkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIGVkaXRvcjogRWRpdG9ySWQsXG4gIC8qKiBPbmx5IGZvciBmaWxlLW1hbmFnZXI7IHJlcXVpcmVzIHRoZSBzZXJ2ZXIncyBzaGVsbFJldmVhbEluRmlsZU1hbmFnZXIgY2FwYWJpbGl0eS4gKi9cbiAgcmV2ZWFsOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkJvb2xlYW4pLFxufSk7XG5leHBvcnQgdHlwZSBMYXVuY2hFZGl0b3JJbnB1dCA9IHR5cGVvZiBMYXVuY2hFZGl0b3JJbnB1dC5UeXBlO1xuXG5jb25zdCByZW1vdGVTY2hlbWVPZiA9IChlZGl0b3I6IEVkaXRvckRlZmluaXRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgZWRpdG9yLnJlbW90ZVNjaGVtZSA/PyAoZWRpdG9yLmpldGJyYWluc1Byb2R1Y3RDb2RlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBcImpldGJyYWluc1wiKTtcblxuZXhwb3J0IGNvbnN0IFJFTU9URV9DQVBBQkxFX0VESVRPUl9JRFM6IFJlYWRvbmx5QXJyYXk8RWRpdG9ySWQ+ID0gRURJVE9SUy5mbGF0TWFwKChlZGl0b3IpID0+XG4gIHJlbW90ZVNjaGVtZU9mKGVkaXRvcikgIT09IHVuZGVmaW5lZCA/IFtlZGl0b3IuaWRdIDogW10sXG4pO1xuXG5leHBvcnQgY29uc3QgcmVtb3RlU2NoZW1lRm9yRWRpdG9yID0gKGlkOiBFZGl0b3JJZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGVkaXRvciA9IEVESVRPUlMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IGlkKTtcbiAgcmV0dXJuIGVkaXRvciA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVtb3RlU2NoZW1lT2YoZWRpdG9yKTtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFJlbW90ZU9wZW5VcmwgPSAoaW5wdXQ6IHtcbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3JJZDtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgYWJzb2x1dGVQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzRmlsZT86IGJvb2xlYW47XG59KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qgc2NoZW1lID0gcmVtb3RlU2NoZW1lRm9yRWRpdG9yKGlucHV0LmVkaXRvcik7XG4gIGlmIChzY2hlbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZWRpdG9yID0gRURJVE9SUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gaW5wdXQuZWRpdG9yKTtcbiAgaWYgKGVkaXRvciAhPT0gdW5kZWZpbmVkICYmIFwiamV0YnJhaW5zUHJvZHVjdENvZGVcIiBpbiBlZGl0b3IpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIGg6IGlucHV0Lmhvc3QsXG4gICAgICBsYXVuY2hJZGU6IFwidHJ1ZVwiLFxuICAgICAgaWRlSGludDogZWRpdG9yLmpldGJyYWluc1Byb2R1Y3RDb2RlLFxuICAgICAgcHJvamVjdEhpbnQ6IGlucHV0LmFic29sdXRlUGF0aC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIiksXG4gICAgfSk7XG4gICAgaWYgKGlucHV0LnVzZXJuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zZXQoXCJ1XCIsIGlucHV0LnVzZXJuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3NjaGVtZX06Ly9nYXRld2F5L3NzaC9lbnZpcm9ubWVudD8ke3BhcmFtcy50b1N0cmluZygpfWA7XG4gIH1cbiAgLy8gV2luZG93cyBzZXJ2ZXIgcGF0aHMgKGBDOlxcLi4uYCkgYXBwZWFyIGFzIGAvQzovLi4uYCBpbiB2c2NvZGUtcmVtb3RlIFVSSXMuXG4gIGNvbnN0IHBvc2l4UGF0aCA9IGlucHV0LmFic29sdXRlUGF0aC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIik7XG4gIGNvbnN0IHJvb3RlZFBhdGggPSBwb3NpeFBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwb3NpeFBhdGggOiBgLyR7cG9zaXhQYXRofWA7XG4gIGNvbnN0IGVuY29kZWRIb3N0ID0gZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0Lmhvc3QpO1xuICBpZiAoaW5wdXQuZWRpdG9yID09PSBcInplZFwiKSB7XG4gICAgLy8gWmVkIHJvb3RzIHBhdGhzIG9uIHRoZSBzeXN0ZW0gZHJpdmUsIHNvIG9taXQgdGhlIFdpbmRvd3MgZHJpdmUgcHJlZml4LlxuICAgIGNvbnN0IHplZFBhdGggPSAvXltDY106W1xcXFwvXS8udGVzdChpbnB1dC5hYnNvbHV0ZVBhdGgpID8gcm9vdGVkUGF0aC5zbGljZSgzKSA6IHJvb3RlZFBhdGg7XG4gICAgY29uc3QgZW5jb2RlZFplZFBhdGggPSB6ZWRQYXRoLnNwbGl0KFwiL1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiL1wiKTtcbiAgICAvLyBaZWQgcmVhZHMgdGhpcyBzZWdtZW50IGFzIHNzaCBVUkwgdXNlcmluZm8sIHNvIHRoZSBgQGAgc3RheXMgbGl0ZXJhbC5cbiAgICBjb25zdCB6ZWREZXN0aW5hdGlvbiA9XG4gICAgICBpbnB1dC51c2VybmFtZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gZW5jb2RlZEhvc3RcbiAgICAgICAgOiBgJHtlbmNvZGVVUklDb21wb25lbnQoaW5wdXQudXNlcm5hbWUpfUAke2VuY29kZWRIb3N0fWA7XG4gICAgcmV0dXJuIGAke3NjaGVtZX06Ly9zc2gvJHt6ZWREZXN0aW5hdGlvbn0ke2VuY29kZWRaZWRQYXRofWA7XG4gIH1cbiAgY29uc3QgZW5jb2RlZFBhdGggPSByb290ZWRQYXRoLnNwbGl0KFwiL1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiL1wiKTtcbiAgY29uc3QgZGVzdGluYXRpb24gPSBpbnB1dC51c2VybmFtZSA9PT0gdW5kZWZpbmVkID8gaW5wdXQuaG9zdCA6IGAke2lucHV0LnVzZXJuYW1lfUAke2lucHV0Lmhvc3R9YDtcbiAgLy8gVlMgQ29kZSBvcGVucyBhIGJhcmUgdnNjb2RlLXJlbW90ZSBwYXRoIGFzIGEgZm9sZGVyOyBhIHRyYWlsaW5nIHBvc2l0aW9uIG1ha2VzIGl0IG9wZW4gdGhlIGZpbGUuXG4gIHJldHVybiBgJHtzY2hlbWV9Oi8vdnNjb2RlLXJlbW90ZS9zc2gtcmVtb3RlKyR7ZW5jb2RlVVJJQ29tcG9uZW50KGRlc3RpbmF0aW9uKX0ke2VuY29kZWRQYXRofSR7aW5wdXQuaXNGaWxlID8gXCI6MToxXCIgOiBcIlwifWA7XG59O1xuXG5leHBvcnQgY29uc3QgUmVtb3RlT3BlblRhcmdldEtpbmQgPSBTY2hlbWEuTGl0ZXJhbHMoW1widGFpbHNjYWxlXCIsIFwibWRuc1wiXSk7XG5leHBvcnQgdHlwZSBSZW1vdGVPcGVuVGFyZ2V0S2luZCA9IHR5cGVvZiBSZW1vdGVPcGVuVGFyZ2V0S2luZC5UeXBlO1xuXG5leHBvcnQgY29uc3QgUmVtb3RlT3BlblRhcmdldCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBraW5kOiBSZW1vdGVPcGVuVGFyZ2V0S2luZCxcbiAgaG9zdDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICB1c2VybmFtZTogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWROb25FbXB0eVN0cmluZyksXG59KTtcbmV4cG9ydCB0eXBlIFJlbW90ZU9wZW5UYXJnZXQgPSB0eXBlb2YgUmVtb3RlT3BlblRhcmdldC5UeXBlO1xuXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxMYXVuY2hlclVua25vd25FZGl0b3JFcnJvciBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxFeHRlcm5hbExhdW5jaGVyVW5rbm93bkVkaXRvckVycm9yPigpKFxuICBcIkV4dGVybmFsTGF1bmNoZXJVbmtub3duRWRpdG9yRXJyb3JcIixcbiAge1xuICAgIGVkaXRvcjogU2NoZW1hLlN0cmluZyxcbiAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgVW5rbm93biBlZGl0b3I6ICR7dGhpcy5lZGl0b3J9YDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxMYXVuY2hlclVuc3VwcG9ydGVkRWRpdG9yRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RXh0ZXJuYWxMYXVuY2hlclVuc3VwcG9ydGVkRWRpdG9yRXJyb3I+KCkoXG4gIFwiRXh0ZXJuYWxMYXVuY2hlclVuc3VwcG9ydGVkRWRpdG9yRXJyb3JcIixcbiAge1xuICAgIGVkaXRvcjogRWRpdG9ySWQsXG4gIH0sXG4pIHtcbiAgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFVuc3VwcG9ydGVkIGVkaXRvcjogJHt0aGlzLmVkaXRvcn1gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeHRlcm5hbExhdW5jaGVyQ29tbWFuZE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RXh0ZXJuYWxMYXVuY2hlckNvbW1hbmROb3RGb3VuZEVycm9yPigpKFxuICBcIkV4dGVybmFsTGF1bmNoZXJDb21tYW5kTm90Rm91bmRFcnJvclwiLFxuICB7XG4gICAgZWRpdG9yOiBFZGl0b3JJZCxcbiAgICBjb21tYW5kOiBTY2hlbWEuU3RyaW5nLFxuICB9LFxuKSB7XG4gIG92ZXJyaWRlIGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFZGl0b3IgY29tbWFuZCBub3QgZm91bmQ6ICR7dGhpcy5jb21tYW5kfWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4dGVybmFsTGF1bmNoZXJVbnN1cHBvcnRlZFRhcmdldEVycm9yIGV4dGVuZHMgU2NoZW1hLlRhZ2dlZEVycm9yPEV4dGVybmFsTGF1bmNoZXJVbnN1cHBvcnRlZFRhcmdldEVycm9yPigpKFxuICBcIkV4dGVybmFsTGF1bmNoZXJVbnN1cHBvcnRlZFRhcmdldEVycm9yXCIsXG4gIHtcbiAgICBlZGl0b3I6IEVkaXRvcklkLFxuICB9LFxuKSB7XG4gIG92ZXJyaWRlIGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZWRpdG9yfSBjYW5ub3Qgb3BlbiBhIHBhdGggY29udGFpbmluZyBsaW5lIGJyZWFrcyBvciBkb3VibGUgcXVvdGVzYDtcbiAgfVxufVxuXG5jb25zdCBFeHRlcm5hbExhdW5jaGVyU3Bhd25GaWVsZHMgPSB7XG4gIGNvbW1hbmQ6IFNjaGVtYS5TdHJpbmcsXG4gIGFyZ3M6IFNjaGVtYS5BcnJheShTY2hlbWEuU3RyaW5nKSxcbiAgY2F1c2U6IFNjaGVtYS5EZWZlY3QoKSxcbn07XG5cbmV4cG9ydCBjbGFzcyBFeHRlcm5hbExhdW5jaGVyQnJvd3NlclNwYXduRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RXh0ZXJuYWxMYXVuY2hlckJyb3dzZXJTcGF3bkVycm9yPigpKFxuICBcIkV4dGVybmFsTGF1bmNoZXJCcm93c2VyU3Bhd25FcnJvclwiLFxuICB7XG4gICAgLi4uRXh0ZXJuYWxMYXVuY2hlclNwYXduRmllbGRzLFxuICAgIHRhcmdldDogU2NoZW1hLlN0cmluZyxcbiAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRmFpbGVkIHRvIGxhdW5jaCBicm93c2VyIHRhcmdldCAnJHt0aGlzLnRhcmdldH0nIHdpdGggJyR7W3RoaXMuY29tbWFuZCwgLi4udGhpcy5hcmdzXS5qb2luKFwiIFwiKX0nYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxMYXVuY2hlckVkaXRvclNwYXduRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RXh0ZXJuYWxMYXVuY2hlckVkaXRvclNwYXduRXJyb3I+KCkoXG4gIFwiRXh0ZXJuYWxMYXVuY2hlckVkaXRvclNwYXduRXJyb3JcIixcbiAge1xuICAgIC4uLkV4dGVybmFsTGF1bmNoZXJTcGF3bkZpZWxkcyxcbiAgICBlZGl0b3I6IEVkaXRvcklkLFxuICAgIHRhcmdldDogU2NoZW1hLlN0cmluZyxcbiAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRmFpbGVkIHRvIGxhdW5jaCAnJHt0aGlzLnRhcmdldH0nIGluICR7dGhpcy5lZGl0b3J9IHdpdGggJyR7W3RoaXMuY29tbWFuZCwgLi4udGhpcy5hcmdzXS5qb2luKFwiIFwiKX0nYDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgRXh0ZXJuYWxMYXVuY2hlckVycm9yID0gU2NoZW1hLlVuaW9uKFtcbiAgRXh0ZXJuYWxMYXVuY2hlclVua25vd25FZGl0b3JFcnJvcixcbiAgRXh0ZXJuYWxMYXVuY2hlclVuc3VwcG9ydGVkRWRpdG9yRXJyb3IsXG4gIEV4dGVybmFsTGF1bmNoZXJDb21tYW5kTm90Rm91bmRFcnJvcixcbiAgRXh0ZXJuYWxMYXVuY2hlclVuc3VwcG9ydGVkVGFyZ2V0RXJyb3IsXG4gIEV4dGVybmFsTGF1bmNoZXJCcm93c2VyU3Bhd25FcnJvcixcbiAgRXh0ZXJuYWxMYXVuY2hlckVkaXRvclNwYXduRXJyb3IsXG5dKTtcbmV4cG9ydCB0eXBlIEV4dGVybmFsTGF1bmNoZXJFcnJvciA9IHR5cGVvZiBFeHRlcm5hbExhdW5jaGVyRXJyb3IuVHlwZTtcbiJdLCJmaWxlIjoiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2VkaXRvci50cyJ9

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9lZGl0b3IudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvZWRpdG9yLnRzIix7InVybHMiOiI2IiwiaWRzIjoiNyJ9LFsiOCIsIjkiXSxbXSxbIjgiLCI5Il0se30sIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvU2NoZW1hLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2Jhc2VTY2hlbWFzLnRzIl0=