__vite_ssr_exportName__("profileMissingError", () => { try { return profileMissingError } catch {} });
__vite_ssr_exportName__("credentialMissingError", () => { try { return credentialMissingError } catch {} });
__vite_ssr_exportName__("environmentMismatchError", () => { try { return environmentMismatchError } catch {} });
__vite_ssr_exportName__("mapManagedRelayError", () => { try { return mapManagedRelayError } catch {} });
__vite_ssr_exportName__("mapRemoteEnvironmentError", () => { try { return mapRemoteEnvironmentError } catch {} });
__vite_ssr_exportName__("mapRemoteDpopEnvironmentError", () => { try { return mapRemoteDpopEnvironmentError } catch {} });
const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/relay/errorPresentation.ts", {"importedNames":["dpopFailureMessage","relayProtectedErrorMessage"]});
const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/errors/network.ts", {"importedNames":["NETWORK_BLOCKING_HINT"]});
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/client-runtime/src/connection/model.ts", {"importedNames":["ConnectionBlockedError","ConnectionTransientError"]});



function profileMissingError(connectionId) {
	return new __vite_ssr_import_2__.ConnectionBlockedError({
		reason: "configuration",
		detail: `Connection profile ${connectionId} is unavailable.`,
		hop: "device"
	});
};
function credentialMissingError(connectionId) {
	return new __vite_ssr_import_2__.ConnectionBlockedError({
		reason: "authentication",
		detail: `Connection credential ${connectionId} is unavailable.`,
		hop: "device"
	});
};
function environmentMismatchError(input) {
	return new __vite_ssr_import_2__.ConnectionBlockedError({
		reason: "configuration",
		detail: `Connected environment ${input.actual} does not match ${input.expected}.`
	});
};
function relayProtectedError(error) {
	const detail = (0,__vite_ssr_import_0__.relayProtectedErrorMessage)(error);
	const traceId = error.traceId;
	switch (error._tag) {
		case "RelayAuthInvalidError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "authentication",
			detail,
			traceId,
			hop: "relay",
			...error.dpopFailureReason === "time_window" ? { failureCause: "clock_skew" } : {}
		});
		case "RelayEnvironmentLinkProofExpiredError":
		case "RelayAgentActivityPublishProofExpiredError":
		case "RelayAgentActivityPublishProofInvalidError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "authentication",
			detail,
			traceId,
			hop: "relay"
		});
		case "RelayEnvironmentConnectNotAuthorizedError":
			// A host swapping in a new tunnel leaves its allocation unready until
			// the tunnel is up, and nothing on the client changes when it is.
			if (error.reason === "managed_endpoint_allocation_not_ready") {
				return new __vite_ssr_import_2__.ConnectionTransientError({
					reason: "endpoint-unavailable",
					detail,
					traceId,
					hop: "tunnel",
					failureCause: "tunnel_pending"
				});
			};
			if (error.reason === "endpoint_provider_not_managed") {
				return new __vite_ssr_import_2__.ConnectionBlockedError({
					reason: "permission",
					detail,
					traceId,
					hop: "tunnel",
					failureCause: "tunnel_not_enabled"
				});
			};
			return new __vite_ssr_import_2__.ConnectionBlockedError({
				reason: "permission",
				detail,
				traceId,
				hop: "relay",
				...error.reason === "environment_link_not_found" ? { failureCause: "not_linked" } : {}
			});
		case "RelayEnvironmentLinkProofInvalidError":
		case "RelayEnvironmentLinkLimitExceededError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "permission",
			detail,
			traceId,
			hop: "relay"
		});
		case "RelayEnvironmentEndpointTimedOutError": return new __vite_ssr_import_2__.ConnectionTransientError({
			reason: "timeout",
			detail,
			traceId,
			hop: "tunnel",
			failureCause: "timeout"
		});
		case "RelayEnvironmentEndpointUnavailableError": {
			const endpointFailure = error.endpointFailure ?? (error.reason === "endpoint_response_invalid" ? "invalid_response" : undefined);
			return new __vite_ssr_import_2__.ConnectionTransientError({
				reason: "endpoint-unavailable",
				detail,
				traceId,
				// The tunnel carried the request when T3 Code is what failed to answer.
				hop: endpointFailure === "origin_unreachable" || endpointFailure === "invalid_response" ? "server" : "tunnel",
				via: "relay",
				...endpointFailure ? { failureCause: endpointFailure } : {},
				...error.endpointStatus ? { httpStatus: error.endpointStatus } : {}
			});
		}
		case "RelayEnvironmentLinkUnavailableError": return new __vite_ssr_import_2__.ConnectionTransientError({
			reason: "endpoint-unavailable",
			detail,
			traceId,
			hop: "tunnel"
		});
		case "RelayEnvironmentLinkFailedError":
		case "RelayInternalError": return new __vite_ssr_import_2__.ConnectionTransientError({
			reason: "relay-unavailable",
			detail,
			traceId,
			hop: "relay",
			failureCause: "relay_error"
		});
	}
}
function mapManagedRelayError(error) {
	switch (error._tag) {
		case "ManagedRelayRequestFailedError":
			if (error.relayError) {
				return relayProtectedError(error.relayError);
			};
			return new __vite_ssr_import_2__.ConnectionTransientError({
				reason: "relay-unavailable",
				detail: error.message,
				hop: "relay",
				// A status means the relay answered, so this device did reach it.
				...error.status !== undefined ? {
					httpStatus: error.status,
					failureCause: "relay_error"
				} : {},
				...error.traceId ? { traceId: error.traceId } : {}
			});
		case "ManagedRelayRequestTimeoutError": return new __vite_ssr_import_2__.ConnectionTransientError({
			reason: "timeout",
			detail: error.message,
			hop: "relay"
		});
		case "ManagedRelayUrlInvalidError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "configuration",
			detail: error.message,
			hop: "relay"
		});
		case "ManagedRelayAccessTokenScopesUnexpectedError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "permission",
			detail: error.message,
			hop: "relay"
		});
		case "ManagedRelayDpopKeyLoadError":
		case "ManagedRelayTokenProofCreationError":
		case "ManagedRelayRequestProofCreationError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "authentication",
			detail: error.message,
			hop: "device"
		});
	}
};
function mapRemoteEnvironmentError(error, connectionMethod = "direct") {
	const networkHint = connectionMethod === "relay" ? ` ${__vite_ssr_import_1__.NETWORK_BLOCKING_HINT}` : "";
	// Over T3 Connect the relay already reached the host, so a request that never
	// arrives was blocked between this device and the tunnel.
	const unreachableHop = connectionMethod === "relay" ? "tunnel" : "server";
	const via = connectionMethod === "relay" ? "relay" : "direct";
	switch (error._tag) {
		case "EnvironmentAuthInvalidError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "authentication",
			detail: "The environment credential is invalid.",
			traceId: error.traceId,
			hop: "server",
			via
		});
		case "EnvironmentScopeRequiredError":
		case "EnvironmentOperationForbiddenError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "permission",
			detail: "The environment credential does not grant the required access.",
			traceId: error.traceId,
			hop: "server",
			via
		});
		case "EnvironmentRequestInvalidError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "configuration",
			detail: "The environment rejected the authentication request.",
			traceId: error.traceId,
			hop: "server",
			via
		});
		case "EnvironmentResourceNotFoundError": return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "configuration",
			detail: "The environment endpoint could not be found.",
			traceId: error.traceId,
			hop: "server",
			via
		});
		case "RemoteEnvironmentAuthTimeoutError": return new __vite_ssr_import_2__.ConnectionTransientError({
			reason: "timeout",
			detail: `${error.message}${networkHint}`,
			hop: unreachableHop,
			via
		});
		case "RemoteEnvironmentAuthFetchError": return new __vite_ssr_import_2__.ConnectionTransientError({
			reason: "network",
			detail: `${error.message}${networkHint}`,
			hop: unreachableHop,
			via
		});
		case "EnvironmentInternalError": return new __vite_ssr_import_2__.ConnectionTransientError({
			reason: "remote-unavailable",
			detail: "The environment could not authorize the connection.",
			traceId: error.traceId,
			hop: "server",
			via
		});
		case "RemoteEnvironmentAuthInvalidJsonError":
		case "RemoteEnvironmentAuthUndeclaredStatusError": return new __vite_ssr_import_2__.ConnectionTransientError({
			reason: "remote-unavailable",
			detail: error.message,
			hop: "server",
			via
		});
	}
};
/**
* An older environment server reports a DPoP clock failure as the same generic
* invalid-credential response as other failures, so keep the compatibility hint
* cautious when the server omits the category.
*/
function mapRemoteDpopEnvironmentError(error) {
	if (error._tag === "EnvironmentAuthInvalidError" && error.reason === "invalid_credential") {
		return new __vite_ssr_import_2__.ConnectionBlockedError({
			reason: "authentication",
			detail: (0,__vite_ssr_import_0__.dpopFailureMessage)("The environment credential is invalid.", error.dpopFailureReason),
			traceId: error.traceId,
			hop: "server",
			via: "relay",
			...error.dpopFailureReason === "time_window" ? { failureCause: "clock_skew" } : {}
		});
	};
	return mapRemoteEnvironmentError(error, "relay");
}
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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WyJpbXBvcnQgdHlwZSB7IENsaWVudENvbm5lY3Rpb25NZXRob2QsIEVudmlyb25tZW50SWQgfSBmcm9tIFwiQHQzdG9vbHMvY29udHJhY3RzXCI7XG5pbXBvcnQgdHlwZSB7IFJlbGF5UHJvdGVjdGVkRXJyb3IgfSBmcm9tIFwiQHQzdG9vbHMvY29udHJhY3RzL3JlbGF5XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmFnZWRSZWxheUNsaWVudEVycm9yIH0gZnJvbSBcIi4uL3JlbGF5L21hbmFnZWRSZWxheS50c1wiO1xuaW1wb3J0IHsgZHBvcEZhaWx1cmVNZXNzYWdlLCByZWxheVByb3RlY3RlZEVycm9yTWVzc2FnZSB9IGZyb20gXCIuLi9yZWxheS9lcnJvclByZXNlbnRhdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBSZW1vdGVFbnZpcm9ubWVudEF1dGhFcnJvciB9IGZyb20gXCIuLi9hdXRob3JpemF0aW9uL3JlbW90ZS50c1wiO1xuaW1wb3J0IHsgTkVUV09SS19CTE9DS0lOR19ISU5UIH0gZnJvbSBcIi4uL2Vycm9ycy9uZXR3b3JrLnRzXCI7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uQmxvY2tlZEVycm9yLFxuICB0eXBlIENvbm5lY3Rpb25BdHRlbXB0RXJyb3IsXG4gIENvbm5lY3Rpb25UcmFuc2llbnRFcnJvcixcbn0gZnJvbSBcIi4vbW9kZWwudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2ZpbGVNaXNzaW5nRXJyb3IoY29ubmVjdGlvbklkOiBzdHJpbmcpOiBDb25uZWN0aW9uQmxvY2tlZEVycm9yIHtcbiAgcmV0dXJuIG5ldyBDb25uZWN0aW9uQmxvY2tlZEVycm9yKHtcbiAgICByZWFzb246IFwiY29uZmlndXJhdGlvblwiLFxuICAgIGRldGFpbDogYENvbm5lY3Rpb24gcHJvZmlsZSAke2Nvbm5lY3Rpb25JZH0gaXMgdW5hdmFpbGFibGUuYCxcbiAgICBob3A6IFwiZGV2aWNlXCIsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlZGVudGlhbE1pc3NpbmdFcnJvcihjb25uZWN0aW9uSWQ6IHN0cmluZyk6IENvbm5lY3Rpb25CbG9ja2VkRXJyb3Ige1xuICByZXR1cm4gbmV3IENvbm5lY3Rpb25CbG9ja2VkRXJyb3Ioe1xuICAgIHJlYXNvbjogXCJhdXRoZW50aWNhdGlvblwiLFxuICAgIGRldGFpbDogYENvbm5lY3Rpb24gY3JlZGVudGlhbCAke2Nvbm5lY3Rpb25JZH0gaXMgdW5hdmFpbGFibGUuYCxcbiAgICBob3A6IFwiZGV2aWNlXCIsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW52aXJvbm1lbnRNaXNtYXRjaEVycm9yKGlucHV0OiB7XG4gIHJlYWRvbmx5IGV4cGVjdGVkOiBFbnZpcm9ubWVudElkO1xuICByZWFkb25seSBhY3R1YWw6IEVudmlyb25tZW50SWQ7XG59KTogQ29ubmVjdGlvbkJsb2NrZWRFcnJvciB7XG4gIHJldHVybiBuZXcgQ29ubmVjdGlvbkJsb2NrZWRFcnJvcih7XG4gICAgcmVhc29uOiBcImNvbmZpZ3VyYXRpb25cIixcbiAgICBkZXRhaWw6IGBDb25uZWN0ZWQgZW52aXJvbm1lbnQgJHtpbnB1dC5hY3R1YWx9IGRvZXMgbm90IG1hdGNoICR7aW5wdXQuZXhwZWN0ZWR9LmAsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWxheVByb3RlY3RlZEVycm9yKGVycm9yOiBSZWxheVByb3RlY3RlZEVycm9yKTogQ29ubmVjdGlvbkF0dGVtcHRFcnJvciB7XG4gIGNvbnN0IGRldGFpbCA9IHJlbGF5UHJvdGVjdGVkRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgY29uc3QgdHJhY2VJZCA9IGVycm9yLnRyYWNlSWQ7XG4gIHN3aXRjaCAoZXJyb3IuX3RhZykge1xuICAgIGNhc2UgXCJSZWxheUF1dGhJbnZhbGlkRXJyb3JcIjpcbiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkJsb2NrZWRFcnJvcih7XG4gICAgICAgIHJlYXNvbjogXCJhdXRoZW50aWNhdGlvblwiLFxuICAgICAgICBkZXRhaWwsXG4gICAgICAgIHRyYWNlSWQsXG4gICAgICAgIGhvcDogXCJyZWxheVwiLFxuICAgICAgICAuLi4oZXJyb3IuZHBvcEZhaWx1cmVSZWFzb24gPT09IFwidGltZV93aW5kb3dcIiA/IHsgZmFpbHVyZUNhdXNlOiBcImNsb2NrX3NrZXdcIiB9IDoge30pLFxuICAgICAgfSk7XG4gICAgY2FzZSBcIlJlbGF5RW52aXJvbm1lbnRMaW5rUHJvb2ZFeHBpcmVkRXJyb3JcIjpcbiAgICBjYXNlIFwiUmVsYXlBZ2VudEFjdGl2aXR5UHVibGlzaFByb29mRXhwaXJlZEVycm9yXCI6XG4gICAgY2FzZSBcIlJlbGF5QWdlbnRBY3Rpdml0eVB1Ymxpc2hQcm9vZkludmFsaWRFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uQmxvY2tlZEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBcImF1dGhlbnRpY2F0aW9uXCIsXG4gICAgICAgIGRldGFpbCxcbiAgICAgICAgdHJhY2VJZCxcbiAgICAgICAgaG9wOiBcInJlbGF5XCIsXG4gICAgICB9KTtcbiAgICBjYXNlIFwiUmVsYXlFbnZpcm9ubWVudENvbm5lY3ROb3RBdXRob3JpemVkRXJyb3JcIjpcbiAgICAgIC8vIEEgaG9zdCBzd2FwcGluZyBpbiBhIG5ldyB0dW5uZWwgbGVhdmVzIGl0cyBhbGxvY2F0aW9uIHVucmVhZHkgdW50aWxcbiAgICAgIC8vIHRoZSB0dW5uZWwgaXMgdXAsIGFuZCBub3RoaW5nIG9uIHRoZSBjbGllbnQgY2hhbmdlcyB3aGVuIGl0IGlzLlxuICAgICAgaWYgKGVycm9yLnJlYXNvbiA9PT0gXCJtYW5hZ2VkX2VuZHBvaW50X2FsbG9jYXRpb25fbm90X3JlYWR5XCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVHJhbnNpZW50RXJyb3Ioe1xuICAgICAgICAgIHJlYXNvbjogXCJlbmRwb2ludC11bmF2YWlsYWJsZVwiLFxuICAgICAgICAgIGRldGFpbCxcbiAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgIGhvcDogXCJ0dW5uZWxcIixcbiAgICAgICAgICBmYWlsdXJlQ2F1c2U6IFwidHVubmVsX3BlbmRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZXJyb3IucmVhc29uID09PSBcImVuZHBvaW50X3Byb3ZpZGVyX25vdF9tYW5hZ2VkXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uQmxvY2tlZEVycm9yKHtcbiAgICAgICAgICByZWFzb246IFwicGVybWlzc2lvblwiLFxuICAgICAgICAgIGRldGFpbCxcbiAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgIGhvcDogXCJ0dW5uZWxcIixcbiAgICAgICAgICBmYWlsdXJlQ2F1c2U6IFwidHVubmVsX25vdF9lbmFibGVkXCIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uQmxvY2tlZEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBcInBlcm1pc3Npb25cIixcbiAgICAgICAgZGV0YWlsLFxuICAgICAgICB0cmFjZUlkLFxuICAgICAgICBob3A6IFwicmVsYXlcIixcbiAgICAgICAgLi4uKGVycm9yLnJlYXNvbiA9PT0gXCJlbnZpcm9ubWVudF9saW5rX25vdF9mb3VuZFwiID8geyBmYWlsdXJlQ2F1c2U6IFwibm90X2xpbmtlZFwiIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICBjYXNlIFwiUmVsYXlFbnZpcm9ubWVudExpbmtQcm9vZkludmFsaWRFcnJvclwiOlxuICAgIGNhc2UgXCJSZWxheUVudmlyb25tZW50TGlua0xpbWl0RXhjZWVkZWRFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uQmxvY2tlZEVycm9yKHsgcmVhc29uOiBcInBlcm1pc3Npb25cIiwgZGV0YWlsLCB0cmFjZUlkLCBob3A6IFwicmVsYXlcIiB9KTtcbiAgICBjYXNlIFwiUmVsYXlFbnZpcm9ubWVudEVuZHBvaW50VGltZWRPdXRFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVHJhbnNpZW50RXJyb3Ioe1xuICAgICAgICByZWFzb246IFwidGltZW91dFwiLFxuICAgICAgICBkZXRhaWwsXG4gICAgICAgIHRyYWNlSWQsXG4gICAgICAgIGhvcDogXCJ0dW5uZWxcIixcbiAgICAgICAgZmFpbHVyZUNhdXNlOiBcInRpbWVvdXRcIixcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJSZWxheUVudmlyb25tZW50RW5kcG9pbnRVbmF2YWlsYWJsZUVycm9yXCI6IHtcbiAgICAgIGNvbnN0IGVuZHBvaW50RmFpbHVyZSA9XG4gICAgICAgIGVycm9yLmVuZHBvaW50RmFpbHVyZSA/P1xuICAgICAgICAoZXJyb3IucmVhc29uID09PSBcImVuZHBvaW50X3Jlc3BvbnNlX2ludmFsaWRcIiA/IFwiaW52YWxpZF9yZXNwb25zZVwiIDogdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRyYW5zaWVudEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBcImVuZHBvaW50LXVuYXZhaWxhYmxlXCIsXG4gICAgICAgIGRldGFpbCxcbiAgICAgICAgdHJhY2VJZCxcbiAgICAgICAgLy8gVGhlIHR1bm5lbCBjYXJyaWVkIHRoZSByZXF1ZXN0IHdoZW4gVDMgQ29kZSBpcyB3aGF0IGZhaWxlZCB0byBhbnN3ZXIuXG4gICAgICAgIGhvcDpcbiAgICAgICAgICBlbmRwb2ludEZhaWx1cmUgPT09IFwib3JpZ2luX3VucmVhY2hhYmxlXCIgfHwgZW5kcG9pbnRGYWlsdXJlID09PSBcImludmFsaWRfcmVzcG9uc2VcIlxuICAgICAgICAgICAgPyBcInNlcnZlclwiXG4gICAgICAgICAgICA6IFwidHVubmVsXCIsXG4gICAgICAgIHZpYTogXCJyZWxheVwiLFxuICAgICAgICAuLi4oZW5kcG9pbnRGYWlsdXJlID8geyBmYWlsdXJlQ2F1c2U6IGVuZHBvaW50RmFpbHVyZSB9IDoge30pLFxuICAgICAgICAuLi4oZXJyb3IuZW5kcG9pbnRTdGF0dXMgPyB7IGh0dHBTdGF0dXM6IGVycm9yLmVuZHBvaW50U3RhdHVzIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2FzZSBcIlJlbGF5RW52aXJvbm1lbnRMaW5rVW5hdmFpbGFibGVFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVHJhbnNpZW50RXJyb3Ioe1xuICAgICAgICByZWFzb246IFwiZW5kcG9pbnQtdW5hdmFpbGFibGVcIixcbiAgICAgICAgZGV0YWlsLFxuICAgICAgICB0cmFjZUlkLFxuICAgICAgICBob3A6IFwidHVubmVsXCIsXG4gICAgICB9KTtcbiAgICBjYXNlIFwiUmVsYXlFbnZpcm9ubWVudExpbmtGYWlsZWRFcnJvclwiOlxuICAgIGNhc2UgXCJSZWxheUludGVybmFsRXJyb3JcIjpcbiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRyYW5zaWVudEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBcInJlbGF5LXVuYXZhaWxhYmxlXCIsXG4gICAgICAgIGRldGFpbCxcbiAgICAgICAgdHJhY2VJZCxcbiAgICAgICAgaG9wOiBcInJlbGF5XCIsXG4gICAgICAgIGZhaWx1cmVDYXVzZTogXCJyZWxheV9lcnJvclwiLFxuICAgICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcE1hbmFnZWRSZWxheUVycm9yKGVycm9yOiBNYW5hZ2VkUmVsYXlDbGllbnRFcnJvcik6IENvbm5lY3Rpb25BdHRlbXB0RXJyb3Ige1xuICBzd2l0Y2ggKGVycm9yLl90YWcpIHtcbiAgICBjYXNlIFwiTWFuYWdlZFJlbGF5UmVxdWVzdEZhaWxlZEVycm9yXCI6XG4gICAgICBpZiAoZXJyb3IucmVsYXlFcnJvcikge1xuICAgICAgICByZXR1cm4gcmVsYXlQcm90ZWN0ZWRFcnJvcihlcnJvci5yZWxheUVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRyYW5zaWVudEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBcInJlbGF5LXVuYXZhaWxhYmxlXCIsXG4gICAgICAgIGRldGFpbDogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgaG9wOiBcInJlbGF5XCIsXG4gICAgICAgIC8vIEEgc3RhdHVzIG1lYW5zIHRoZSByZWxheSBhbnN3ZXJlZCwgc28gdGhpcyBkZXZpY2UgZGlkIHJlYWNoIGl0LlxuICAgICAgICAuLi4oZXJyb3Iuc3RhdHVzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgaHR0cFN0YXR1czogZXJyb3Iuc3RhdHVzLCBmYWlsdXJlQ2F1c2U6IFwicmVsYXlfZXJyb3JcIiB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihlcnJvci50cmFjZUlkID8geyB0cmFjZUlkOiBlcnJvci50cmFjZUlkIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICBjYXNlIFwiTWFuYWdlZFJlbGF5UmVxdWVzdFRpbWVvdXRFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVHJhbnNpZW50RXJyb3Ioe1xuICAgICAgICByZWFzb246IFwidGltZW91dFwiLFxuICAgICAgICBkZXRhaWw6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIGhvcDogXCJyZWxheVwiLFxuICAgICAgfSk7XG4gICAgY2FzZSBcIk1hbmFnZWRSZWxheVVybEludmFsaWRFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uQmxvY2tlZEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBcImNvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgZGV0YWlsOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBob3A6IFwicmVsYXlcIixcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJNYW5hZ2VkUmVsYXlBY2Nlc3NUb2tlblNjb3Blc1VuZXhwZWN0ZWRFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uQmxvY2tlZEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBcInBlcm1pc3Npb25cIixcbiAgICAgICAgZGV0YWlsOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBob3A6IFwicmVsYXlcIixcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJNYW5hZ2VkUmVsYXlEcG9wS2V5TG9hZEVycm9yXCI6XG4gICAgY2FzZSBcIk1hbmFnZWRSZWxheVRva2VuUHJvb2ZDcmVhdGlvbkVycm9yXCI6XG4gICAgY2FzZSBcIk1hbmFnZWRSZWxheVJlcXVlc3RQcm9vZkNyZWF0aW9uRXJyb3JcIjpcbiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkJsb2NrZWRFcnJvcih7XG4gICAgICAgIHJlYXNvbjogXCJhdXRoZW50aWNhdGlvblwiLFxuICAgICAgICBkZXRhaWw6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIGhvcDogXCJkZXZpY2VcIixcbiAgICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBSZW1vdGVFbnZpcm9ubWVudEVycm9yKFxuICBlcnJvcjogUmVtb3RlRW52aXJvbm1lbnRBdXRoRXJyb3IsXG4gIGNvbm5lY3Rpb25NZXRob2Q6IENsaWVudENvbm5lY3Rpb25NZXRob2QgPSBcImRpcmVjdFwiLFxuKTogQ29ubmVjdGlvbkF0dGVtcHRFcnJvciB7XG4gIGNvbnN0IG5ldHdvcmtIaW50ID0gY29ubmVjdGlvbk1ldGhvZCA9PT0gXCJyZWxheVwiID8gYCAke05FVFdPUktfQkxPQ0tJTkdfSElOVH1gIDogXCJcIjtcbiAgLy8gT3ZlciBUMyBDb25uZWN0IHRoZSByZWxheSBhbHJlYWR5IHJlYWNoZWQgdGhlIGhvc3QsIHNvIGEgcmVxdWVzdCB0aGF0IG5ldmVyXG4gIC8vIGFycml2ZXMgd2FzIGJsb2NrZWQgYmV0d2VlbiB0aGlzIGRldmljZSBhbmQgdGhlIHR1bm5lbC5cbiAgY29uc3QgdW5yZWFjaGFibGVIb3AgPSBjb25uZWN0aW9uTWV0aG9kID09PSBcInJlbGF5XCIgPyBcInR1bm5lbFwiIDogXCJzZXJ2ZXJcIjtcbiAgY29uc3QgdmlhID0gY29ubmVjdGlvbk1ldGhvZCA9PT0gXCJyZWxheVwiID8gXCJyZWxheVwiIDogXCJkaXJlY3RcIjtcbiAgc3dpdGNoIChlcnJvci5fdGFnKSB7XG4gICAgY2FzZSBcIkVudmlyb25tZW50QXV0aEludmFsaWRFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uQmxvY2tlZEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBcImF1dGhlbnRpY2F0aW9uXCIsXG4gICAgICAgIGRldGFpbDogXCJUaGUgZW52aXJvbm1lbnQgY3JlZGVudGlhbCBpcyBpbnZhbGlkLlwiLFxuICAgICAgICB0cmFjZUlkOiBlcnJvci50cmFjZUlkLFxuICAgICAgICBob3A6IFwic2VydmVyXCIsXG4gICAgICAgIHZpYSxcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJFbnZpcm9ubWVudFNjb3BlUmVxdWlyZWRFcnJvclwiOlxuICAgIGNhc2UgXCJFbnZpcm9ubWVudE9wZXJhdGlvbkZvcmJpZGRlbkVycm9yXCI6XG4gICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25CbG9ja2VkRXJyb3Ioe1xuICAgICAgICByZWFzb246IFwicGVybWlzc2lvblwiLFxuICAgICAgICBkZXRhaWw6IFwiVGhlIGVudmlyb25tZW50IGNyZWRlbnRpYWwgZG9lcyBub3QgZ3JhbnQgdGhlIHJlcXVpcmVkIGFjY2Vzcy5cIixcbiAgICAgICAgdHJhY2VJZDogZXJyb3IudHJhY2VJZCxcbiAgICAgICAgaG9wOiBcInNlcnZlclwiLFxuICAgICAgICB2aWEsXG4gICAgICB9KTtcbiAgICBjYXNlIFwiRW52aXJvbm1lbnRSZXF1ZXN0SW52YWxpZEVycm9yXCI6XG4gICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25CbG9ja2VkRXJyb3Ioe1xuICAgICAgICByZWFzb246IFwiY29uZmlndXJhdGlvblwiLFxuICAgICAgICBkZXRhaWw6IFwiVGhlIGVudmlyb25tZW50IHJlamVjdGVkIHRoZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlwiLFxuICAgICAgICB0cmFjZUlkOiBlcnJvci50cmFjZUlkLFxuICAgICAgICBob3A6IFwic2VydmVyXCIsXG4gICAgICAgIHZpYSxcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJFbnZpcm9ubWVudFJlc291cmNlTm90Rm91bmRFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uQmxvY2tlZEVycm9yKHtcbiAgICAgICAgcmVhc29uOiBcImNvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgZGV0YWlsOiBcIlRoZSBlbnZpcm9ubWVudCBlbmRwb2ludCBjb3VsZCBub3QgYmUgZm91bmQuXCIsXG4gICAgICAgIHRyYWNlSWQ6IGVycm9yLnRyYWNlSWQsXG4gICAgICAgIGhvcDogXCJzZXJ2ZXJcIixcbiAgICAgICAgdmlhLFxuICAgICAgfSk7XG4gICAgY2FzZSBcIlJlbW90ZUVudmlyb25tZW50QXV0aFRpbWVvdXRFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVHJhbnNpZW50RXJyb3Ioe1xuICAgICAgICByZWFzb246IFwidGltZW91dFwiLFxuICAgICAgICBkZXRhaWw6IGAke2Vycm9yLm1lc3NhZ2V9JHtuZXR3b3JrSGludH1gLFxuICAgICAgICBob3A6IHVucmVhY2hhYmxlSG9wLFxuICAgICAgICB2aWEsXG4gICAgICB9KTtcbiAgICBjYXNlIFwiUmVtb3RlRW52aXJvbm1lbnRBdXRoRmV0Y2hFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVHJhbnNpZW50RXJyb3Ioe1xuICAgICAgICByZWFzb246IFwibmV0d29ya1wiLFxuICAgICAgICBkZXRhaWw6IGAke2Vycm9yLm1lc3NhZ2V9JHtuZXR3b3JrSGludH1gLFxuICAgICAgICBob3A6IHVucmVhY2hhYmxlSG9wLFxuICAgICAgICB2aWEsXG4gICAgICB9KTtcbiAgICBjYXNlIFwiRW52aXJvbm1lbnRJbnRlcm5hbEVycm9yXCI6XG4gICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25UcmFuc2llbnRFcnJvcih7XG4gICAgICAgIHJlYXNvbjogXCJyZW1vdGUtdW5hdmFpbGFibGVcIixcbiAgICAgICAgZGV0YWlsOiBcIlRoZSBlbnZpcm9ubWVudCBjb3VsZCBub3QgYXV0aG9yaXplIHRoZSBjb25uZWN0aW9uLlwiLFxuICAgICAgICB0cmFjZUlkOiBlcnJvci50cmFjZUlkLFxuICAgICAgICBob3A6IFwic2VydmVyXCIsXG4gICAgICAgIHZpYSxcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJSZW1vdGVFbnZpcm9ubWVudEF1dGhJbnZhbGlkSnNvbkVycm9yXCI6XG4gICAgY2FzZSBcIlJlbW90ZUVudmlyb25tZW50QXV0aFVuZGVjbGFyZWRTdGF0dXNFcnJvclwiOlxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVHJhbnNpZW50RXJyb3Ioe1xuICAgICAgICByZWFzb246IFwicmVtb3RlLXVuYXZhaWxhYmxlXCIsXG4gICAgICAgIGRldGFpbDogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgaG9wOiBcInNlcnZlclwiLFxuICAgICAgICB2aWEsXG4gICAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIG9sZGVyIGVudmlyb25tZW50IHNlcnZlciByZXBvcnRzIGEgRFBvUCBjbG9jayBmYWlsdXJlIGFzIHRoZSBzYW1lIGdlbmVyaWNcbiAqIGludmFsaWQtY3JlZGVudGlhbCByZXNwb25zZSBhcyBvdGhlciBmYWlsdXJlcywgc28ga2VlcCB0aGUgY29tcGF0aWJpbGl0eSBoaW50XG4gKiBjYXV0aW91cyB3aGVuIHRoZSBzZXJ2ZXIgb21pdHMgdGhlIGNhdGVnb3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwUmVtb3RlRHBvcEVudmlyb25tZW50RXJyb3IoXG4gIGVycm9yOiBSZW1vdGVFbnZpcm9ubWVudEF1dGhFcnJvcixcbik6IENvbm5lY3Rpb25BdHRlbXB0RXJyb3Ige1xuICBpZiAoZXJyb3IuX3RhZyA9PT0gXCJFbnZpcm9ubWVudEF1dGhJbnZhbGlkRXJyb3JcIiAmJiBlcnJvci5yZWFzb24gPT09IFwiaW52YWxpZF9jcmVkZW50aWFsXCIpIHtcbiAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25CbG9ja2VkRXJyb3Ioe1xuICAgICAgcmVhc29uOiBcImF1dGhlbnRpY2F0aW9uXCIsXG4gICAgICBkZXRhaWw6IGRwb3BGYWlsdXJlTWVzc2FnZShcIlRoZSBlbnZpcm9ubWVudCBjcmVkZW50aWFsIGlzIGludmFsaWQuXCIsIGVycm9yLmRwb3BGYWlsdXJlUmVhc29uKSxcbiAgICAgIHRyYWNlSWQ6IGVycm9yLnRyYWNlSWQsXG4gICAgICBob3A6IFwic2VydmVyXCIsXG4gICAgICB2aWE6IFwicmVsYXlcIixcbiAgICAgIC4uLihlcnJvci5kcG9wRmFpbHVyZVJlYXNvbiA9PT0gXCJ0aW1lX3dpbmRvd1wiID8geyBmYWlsdXJlQ2F1c2U6IFwiY2xvY2tfc2tld1wiIH0gOiB7fSksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG1hcFJlbW90ZUVudmlyb25tZW50RXJyb3IoZXJyb3IsIFwicmVsYXlcIik7XG59XG4iXSwiZmlsZSI6Ii9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY2xpZW50LXJ1bnRpbWUvc3JjL2Nvbm5lY3Rpb24vZXJyb3JzLnRzIn0=

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY2xpZW50LXJ1bnRpbWUvc3JjL2Nvbm5lY3Rpb24vZXJyb3JzLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jbGllbnQtcnVudGltZS9zcmMvY29ubmVjdGlvbi9lcnJvcnMudHMiLHsidXJscyI6IjYiLCJpZHMiOiI3In0sWyI4IiwiOSIsIjEwIl0sW10sWyI4IiwiOSIsIjEwIl0se30sIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY2xpZW50LXJ1bnRpbWUvc3JjL3JlbGF5L2Vycm9yUHJlc2VudGF0aW9uLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jbGllbnQtcnVudGltZS9zcmMvZXJyb3JzL25ldHdvcmsudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NsaWVudC1ydW50aW1lL3NyYy9jb25uZWN0aW9uL21vZGVsLnRzIl0=