__vite_ssr_exportName__("ServerConfigIssue", () => { try { return ServerConfigIssue } catch {} });
__vite_ssr_exportName__("ServerProviderState", () => { try { return ServerProviderState } catch {} });
__vite_ssr_exportName__("ServerProviderAuthStatus", () => { try { return ServerProviderAuthStatus } catch {} });
__vite_ssr_exportName__("ServerProviderAuth", () => { try { return ServerProviderAuth } catch {} });
__vite_ssr_exportName__("ServerProviderModel", () => { try { return ServerProviderModel } catch {} });
__vite_ssr_exportName__("ServerProviderUpdateRequiredModel", () => { try { return ServerProviderUpdateRequiredModel } catch {} });
__vite_ssr_exportName__("ServerProviderSlashCommandInput", () => { try { return ServerProviderSlashCommandInput } catch {} });
__vite_ssr_exportName__("ServerProviderSlashCommand", () => { try { return ServerProviderSlashCommand } catch {} });
__vite_ssr_exportName__("ServerProviderSkill", () => { try { return ServerProviderSkill } catch {} });
__vite_ssr_exportName__("ServerProviderWorkspaceSnapshot", () => { try { return ServerProviderWorkspaceSnapshot } catch {} });
__vite_ssr_exportName__("PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS", () => { try { return PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS } catch {} });
__vite_ssr_exportName__("isProviderWorkspaceSnapshotCurrent", () => { try { return isProviderWorkspaceSnapshotCurrent } catch {} });
__vite_ssr_exportName__("ServerProviderAvailability", () => { try { return ServerProviderAvailability } catch {} });
__vite_ssr_exportName__("ServerProviderContinuation", () => { try { return ServerProviderContinuation } catch {} });
__vite_ssr_exportName__("ServerProviderCompatibilityStatus", () => { try { return ServerProviderCompatibilityStatus } catch {} });
__vite_ssr_exportName__("ServerProviderCompatibilityAdvisory", () => { try { return ServerProviderCompatibilityAdvisory } catch {} });
__vite_ssr_exportName__("ServerProviderVersionAdvisoryStatus", () => { try { return ServerProviderVersionAdvisoryStatus } catch {} });
__vite_ssr_exportName__("ServerProviderVersionAdvisory", () => { try { return ServerProviderVersionAdvisory } catch {} });
__vite_ssr_exportName__("ServerProviderUpdateStatus", () => { try { return ServerProviderUpdateStatus } catch {} });
__vite_ssr_exportName__("ServerProviderUpdateState", () => { try { return ServerProviderUpdateState } catch {} });
__vite_ssr_exportName__("ServerProvider", () => { try { return ServerProvider } catch {} });
__vite_ssr_exportName__("ServerProviders", () => { try { return ServerProviders } catch {} });
__vite_ssr_exportName__("isProviderAvailable", () => { try { return isProviderAvailable } catch {} });
__vite_ssr_exportName__("isProviderTextGenerationCapable", () => { try { return isProviderTextGenerationCapable } catch {} });
__vite_ssr_exportName__("OtlpEndpointSource", () => { try { return OtlpEndpointSource } catch {} });
__vite_ssr_exportName__("ServerObservability", () => { try { return ServerObservability } catch {} });
__vite_ssr_exportName__("OtlpSignal", () => { try { return OtlpSignal } catch {} });
__vite_ssr_exportName__("OtlpEndpointCheckInput", () => { try { return OtlpEndpointCheckInput } catch {} });
__vite_ssr_exportName__("OtlpEndpointCheckResult", () => { try { return OtlpEndpointCheckResult } catch {} });
__vite_ssr_exportName__("ServerTraceDiagnosticsErrorKind", () => { try { return ServerTraceDiagnosticsErrorKind } catch {} });
__vite_ssr_exportName__("ServerTraceDiagnosticsSpanSummary", () => { try { return ServerTraceDiagnosticsSpanSummary } catch {} });
__vite_ssr_exportName__("ServerTraceDiagnosticsFailureSummary", () => { try { return ServerTraceDiagnosticsFailureSummary } catch {} });
__vite_ssr_exportName__("ServerTraceDiagnosticsRecentFailure", () => { try { return ServerTraceDiagnosticsRecentFailure } catch {} });
__vite_ssr_exportName__("ServerTraceDiagnosticsSpanOccurrence", () => { try { return ServerTraceDiagnosticsSpanOccurrence } catch {} });
__vite_ssr_exportName__("ServerTraceDiagnosticsLogEvent", () => { try { return ServerTraceDiagnosticsLogEvent } catch {} });
__vite_ssr_exportName__("ServerTraceDiagnosticsResult", () => { try { return ServerTraceDiagnosticsResult } catch {} });
__vite_ssr_exportName__("ServerProcessSignal", () => { try { return ServerProcessSignal } catch {} });
__vite_ssr_exportName__("ServerProcessDiagnosticsEntry", () => { try { return ServerProcessDiagnosticsEntry } catch {} });
__vite_ssr_exportName__("ServerProcessDiagnosticsResult", () => { try { return ServerProcessDiagnosticsResult } catch {} });
__vite_ssr_exportName__("ServerProcessResourceHistoryInput", () => { try { return ServerProcessResourceHistoryInput } catch {} });
__vite_ssr_exportName__("ServerProcessResourceHistoryBucket", () => { try { return ServerProcessResourceHistoryBucket } catch {} });
__vite_ssr_exportName__("ServerProcessResourceHistorySummary", () => { try { return ServerProcessResourceHistorySummary } catch {} });
__vite_ssr_exportName__("ServerProcessResourceHistoryFailureTag", () => { try { return ServerProcessResourceHistoryFailureTag } catch {} });
__vite_ssr_exportName__("ServerProcessResourceHistoryResult", () => { try { return ServerProcessResourceHistoryResult } catch {} });
__vite_ssr_exportName__("ServerSignalProcessInput", () => { try { return ServerSignalProcessInput } catch {} });
__vite_ssr_exportName__("ServerSignalProcessResult", () => { try { return ServerSignalProcessResult } catch {} });
__vite_ssr_exportName__("EnvironmentThemeColor", () => { try { return EnvironmentThemeColor } catch {} });
__vite_ssr_exportName__("EnvironmentThemeId", () => { try { return EnvironmentThemeId } catch {} });
__vite_ssr_exportName__("EnvironmentThemeFile", () => { try { return EnvironmentThemeFile } catch {} });
__vite_ssr_exportName__("EnvironmentTheme", () => { try { return EnvironmentTheme } catch {} });
__vite_ssr_exportName__("environmentThemeFileHasColors", () => { try { return environmentThemeFileHasColors } catch {} });
__vite_ssr_exportName__("ServerDirectEndpointKind", () => { try { return ServerDirectEndpointKind } catch {} });
__vite_ssr_exportName__("ServerDirectEndpoint", () => { try { return ServerDirectEndpoint } catch {} });
__vite_ssr_exportName__("ServerEventLoopStall", () => { try { return ServerEventLoopStall } catch {} });
__vite_ssr_exportName__("ServerConfig", () => { try { return ServerConfig } catch {} });
__vite_ssr_exportName__("resolveEnvironmentMachineKind", () => { try { return resolveEnvironmentMachineKind } catch {} });
__vite_ssr_exportName__("ServerUpsertKeybindingInput", () => { try { return ServerUpsertKeybindingInput } catch {} });
__vite_ssr_exportName__("ServerRemoveKeybindingInput", () => { try { return ServerRemoveKeybindingInput } catch {} });
__vite_ssr_exportName__("ServerUpsertKeybindingResult", () => { try { return ServerUpsertKeybindingResult } catch {} });
__vite_ssr_exportName__("ServerRemoveKeybindingResult", () => { try { return ServerRemoveKeybindingResult } catch {} });
__vite_ssr_exportName__("ServerConfigUpdatedPayload", () => { try { return ServerConfigUpdatedPayload } catch {} });
__vite_ssr_exportName__("ServerConfigKeybindingsUpdatedPayload", () => { try { return ServerConfigKeybindingsUpdatedPayload } catch {} });
__vite_ssr_exportName__("ServerConfigProviderStatusesPayload", () => { try { return ServerConfigProviderStatusesPayload } catch {} });
__vite_ssr_exportName__("ServerConfigSettingsUpdatedPayload", () => { try { return ServerConfigSettingsUpdatedPayload } catch {} });
__vite_ssr_exportName__("ServerConfigStreamSnapshotEvent", () => { try { return ServerConfigStreamSnapshotEvent } catch {} });
__vite_ssr_exportName__("ServerConfigStreamKeybindingsUpdatedEvent", () => { try { return ServerConfigStreamKeybindingsUpdatedEvent } catch {} });
__vite_ssr_exportName__("ServerConfigStreamProviderStatusesEvent", () => { try { return ServerConfigStreamProviderStatusesEvent } catch {} });
__vite_ssr_exportName__("ServerConfigStreamSettingsUpdatedEvent", () => { try { return ServerConfigStreamSettingsUpdatedEvent } catch {} });
__vite_ssr_exportName__("ServerConfigEnvironmentThemesUpdatedPayload", () => { try { return ServerConfigEnvironmentThemesUpdatedPayload } catch {} });
__vite_ssr_exportName__("ServerConfigStreamEnvironmentThemesUpdatedEvent", () => { try { return ServerConfigStreamEnvironmentThemesUpdatedEvent } catch {} });
__vite_ssr_exportName__("ServerConfigUsageLimitSourcesUpdatedPayload", () => { try { return ServerConfigUsageLimitSourcesUpdatedPayload } catch {} });
__vite_ssr_exportName__("ServerConfigStreamUsageLimitSourcesUpdatedEvent", () => { try { return ServerConfigStreamUsageLimitSourcesUpdatedEvent } catch {} });
__vite_ssr_exportName__("ServerConfigStreamEvent", () => { try { return ServerConfigStreamEvent } catch {} });
__vite_ssr_exportName__("ServerSelfUpdateOutcome", () => { try { return ServerSelfUpdateOutcome } catch {} });
__vite_ssr_exportName__("ServerLifecycleReadyPayload", () => { try { return ServerLifecycleReadyPayload } catch {} });
__vite_ssr_exportName__("ServerLifecycleWelcomePayload", () => { try { return ServerLifecycleWelcomePayload } catch {} });
__vite_ssr_exportName__("ServerLifecycleLegacyThreadMigrationPayload", () => { try { return ServerLifecycleLegacyThreadMigrationPayload } catch {} });
__vite_ssr_exportName__("ServerLifecycleStreamWelcomeEvent", () => { try { return ServerLifecycleStreamWelcomeEvent } catch {} });
__vite_ssr_exportName__("ServerLifecycleStreamReadyEvent", () => { try { return ServerLifecycleStreamReadyEvent } catch {} });
__vite_ssr_exportName__("ServerLifecycleStreamLegacyThreadMigrationEvent", () => { try { return ServerLifecycleStreamLegacyThreadMigrationEvent } catch {} });
__vite_ssr_exportName__("ServerLifecycleStreamEvent", () => { try { return ServerLifecycleStreamEvent } catch {} });
__vite_ssr_exportName__("ServerProviderUpdatedPayload", () => { try { return ServerProviderUpdatedPayload } catch {} });
__vite_ssr_exportName__("ServerProviderUpdateInput", () => { try { return ServerProviderUpdateInput } catch {} });
__vite_ssr_exportName__("ServerProviderUpdateError", () => { try { return ServerProviderUpdateError } catch {} });
__vite_ssr_exportName__("ServerSelfUpdateInput", () => { try { return ServerSelfUpdateInput } catch {} });
__vite_ssr_exportName__("ServerSelfUpdateResult", () => { try { return ServerSelfUpdateResult } catch {} });
__vite_ssr_exportName__("DesktopUpdateCommitInput", () => { try { return DesktopUpdateCommitInput } catch {} });
__vite_ssr_exportName__("ServerSelfUpdateProgressStage", () => { try { return ServerSelfUpdateProgressStage } catch {} });
__vite_ssr_exportName__("ServerSelfUpdateProgressEvent", () => { try { return ServerSelfUpdateProgressEvent } catch {} });
__vite_ssr_exportName__("ServerSelfUpdateError", () => { try { return ServerSelfUpdateError } 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/Effect.js");
const __vite_ssr_import_1__ = 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_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/acpRegistry.ts", {"importedNames":["AcpRegistryUrlAuthAction"]});
const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/environment.ts", {"importedNames":["ExecutionEnvironmentDescriptor","ServerSelfUpdateMethod"]});
const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/auth.ts", {"importedNames":["ServerAuthDescriptor"]});
const __vite_ssr_import_5__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["ForwardCompatibleArray","IsoDateTime","NonNegativeInt","PositiveInt","ProjectId","ThreadId","TrimmedNonEmptyString"]});
const __vite_ssr_import_6__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/keybindings.ts", {"importedNames":["KeybindingCommand","KeybindingValue","KeybindingWhen","ResolvedKeybindingsConfig"]});
const __vite_ssr_import_7__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/editor.ts", {"importedNames":["EditorId","FileManagerRevealKind","RemoteOpenTarget"]});
const __vite_ssr_import_8__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/model.ts", {"importedNames":["ModelCapabilities","ProviderOptionDescriptor"]});
const __vite_ssr_import_9__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/providerPolicy.ts", {"importedNames":["RuntimeMode"]});
const __vite_ssr_import_10__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/providerInstance.ts", {"importedNames":["ProviderDriverKind","ProviderInstanceId"]});
const __vite_ssr_import_11__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/providerUsageLimits.ts", {"importedNames":["ServerProviderUsageLimits","UsageLimitSourceSnapshots"]});
const __vite_ssr_import_12__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/settings.ts", {"importedNames":["ServerSettings"]});













const KeybindingsMalformedConfigIssue = __vite_ssr_import_1__.Struct({
	kind: __vite_ssr_import_1__.Literal("keybindings.malformed-config"),
	message: __vite_ssr_import_5__.TrimmedNonEmptyString
});
const KeybindingsInvalidEntryIssue = __vite_ssr_import_1__.Struct({
	kind: __vite_ssr_import_1__.Literal("keybindings.invalid-entry"),
	message: __vite_ssr_import_5__.TrimmedNonEmptyString,
	index: __vite_ssr_import_1__.Number
});
const ServerConfigIssue = __vite_ssr_import_1__.Union([KeybindingsMalformedConfigIssue, KeybindingsInvalidEntryIssue]);
const ServerConfigIssues = (0,__vite_ssr_import_5__.ForwardCompatibleArray)(ServerConfigIssue);
const ServerProviderState = __vite_ssr_import_1__.Literals([
	"ready",
	"warning",
	"error",
	"disabled"
]);
const ServerProviderAuthStatus = __vite_ssr_import_1__.Literals([
	"authenticated",
	"unauthenticated",
	"unknown"
]);
const ServerProviderAuth = __vite_ssr_import_1__.Struct({
	status: ServerProviderAuthStatus,
	type: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	label: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	email: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	action: __vite_ssr_import_1__.optional((0,__vite_ssr_import_2__.AcpRegistryUrlAuthAction)),
	canLogout: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	subscriptionSharing: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	profileId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	workspaceId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString))
});
const ServerProviderModel = __vite_ssr_import_1__.Struct({
	slug: __vite_ssr_import_5__.TrimmedNonEmptyString,
	name: __vite_ssr_import_5__.TrimmedNonEmptyString,
	shortName: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	subProvider: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	aliases: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array((0,__vite_ssr_import_5__.TrimmedNonEmptyString))),
	badge: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literal("new")),
	isCustom: __vite_ssr_import_1__.Boolean,
	isDefault: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	isLegacy: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	capabilities: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_8__.ModelCapabilities))
});
const ServerProviderUpdateRequiredModel = __vite_ssr_import_1__.Struct({
	slug: __vite_ssr_import_5__.TrimmedNonEmptyString,
	name: __vite_ssr_import_5__.TrimmedNonEmptyString,
	badge: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literal("new")),
	minVersion: __vite_ssr_import_5__.TrimmedNonEmptyString
});
const ServerProviderSlashCommandInput = __vite_ssr_import_1__.Struct({ hint: __vite_ssr_import_5__.TrimmedNonEmptyString });
const ServerProviderSlashCommand = __vite_ssr_import_1__.Struct({
	name: __vite_ssr_import_5__.TrimmedNonEmptyString,
	description: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	input: __vite_ssr_import_1__.optional(ServerProviderSlashCommandInput)
});
const ServerProviderSkill = __vite_ssr_import_1__.Struct({
	name: __vite_ssr_import_5__.TrimmedNonEmptyString,
	description: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	path: __vite_ssr_import_5__.TrimmedNonEmptyString,
	scope: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	enabled: __vite_ssr_import_1__.Boolean,
	displayName: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	shortDescription: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	/** Claude disable-model-invocation: only users can invoke; composers must offer a slash command. */
	userInvocationOnly: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	/** Claude user-invocable:false: only agents can invoke; composers must hide the slash command. */
	userInvocable: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean)
});
const ServerProviderWorkspaceSnapshot = __vite_ssr_import_1__.Struct({
	cwd: __vite_ssr_import_5__.TrimmedNonEmptyString,
	checkedAt: __vite_ssr_import_5__.IsoDateTime,
	slashCommands: __vite_ssr_import_1__.Array(ServerProviderSlashCommand),
	slashCommandsPending: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	skills: __vite_ssr_import_1__.Array(ServerProviderSkill),
	optionDescriptors: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array((0,__vite_ssr_import_8__.ProviderOptionDescriptor)))
});
const PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS = 5 * 6e4;
function isProviderWorkspaceSnapshotCurrent(snapshot, nowMs) {
	return nowMs - Date.parse(snapshot.checkedAt) < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS;
};
/** Unavailable snapshots must set installed and enabled false. */
const ServerProviderAvailability = __vite_ssr_import_1__.Literals(["available", "unavailable"]);
const ServerProviderContinuation = __vite_ssr_import_1__.Struct({ groupKey: __vite_ssr_import_5__.TrimmedNonEmptyString });
const ServerProviderCompatibilityStatus = __vite_ssr_import_1__.Literals([
	"unknown",
	"supported",
	"graceful",
	"unsupported",
	"broken"
]);
const ServerProviderCompatibilityAdvisory = __vite_ssr_import_1__.Struct({
	status: ServerProviderCompatibilityStatus,
	latestVersionStatus: __vite_ssr_import_1__.optionalKey(ServerProviderCompatibilityStatus),
	message: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	recommendedVersion: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	recommendedRange: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString))
});
const ServerProviderVersionAdvisoryStatus = __vite_ssr_import_1__.Literals([
	"unknown",
	"current",
	"behind_latest"
]);
const ServerProviderVersionAdvisory = __vite_ssr_import_1__.Struct({
	status: ServerProviderVersionAdvisoryStatus,
	currentVersion: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	latestVersion: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	updateCommand: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	canUpdate: __vite_ssr_import_1__.Boolean.pipe(__vite_ssr_import_1__.withDecodingDefault(__vite_ssr_import_0__.succeed(false))),
	canInstallVersion: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean),
	checkedAt: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.IsoDateTime)),
	message: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString))
});
const ServerProviderUpdateStatus = __vite_ssr_import_1__.Literals([
	"idle",
	"queued",
	"running",
	"succeeded",
	"failed",
	"unchanged"
]);
const ServerProviderUpdateState = __vite_ssr_import_1__.Struct({
	status: ServerProviderUpdateStatus,
	startedAt: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.IsoDateTime)),
	finishedAt: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.IsoDateTime)),
	message: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	output: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String.check(__vite_ssr_import_1__.isMaxLength(1e4)))
});
const ServerProvider = __vite_ssr_import_1__.Struct({
	// Only instanceId is stable enough for provider routing.
	instanceId: __vite_ssr_import_10__.ProviderInstanceId,
	driver: __vite_ssr_import_10__.ProviderDriverKind,
	displayName: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	accentColor: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	// Validate driver-supplied remote icons against the driver's trusted origin.
	iconUrl: __vite_ssr_import_1__.optional(__vite_ssr_import_5__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isMaxLength(2048))),
	badgeLabel: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	continuation: __vite_ssr_import_1__.optional(ServerProviderContinuation),
	showInteractionModeToggle: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	reportsContextWindow: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	supportedRuntimeModes: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.ForwardCompatibleArray)((0,__vite_ssr_import_9__.RuntimeMode))),
	requiresNewThreadForModelChange: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	supportsConversationRollback: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	supportsTextGeneration: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	setup: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Struct({
		canAuthenticate: __vite_ssr_import_1__.Boolean,
		canInstall: __vite_ssr_import_1__.Boolean,
		documentationUrl: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_5__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isMaxLength(2048)))
	})),
	nativeSessions: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Struct({
		canList: __vite_ssr_import_1__.Boolean,
		canLoad: __vite_ssr_import_1__.Boolean,
		canResume: __vite_ssr_import_1__.Boolean,
		canDelete: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean)
	})),
	configurableProviders: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	runtimePaths: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Struct({
		homePath: __vite_ssr_import_5__.TrimmedNonEmptyString,
		shadowHomePath: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString))
	})),
	enabled: __vite_ssr_import_1__.Boolean,
	installed: __vite_ssr_import_1__.Boolean,
	version: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	// Version reported by the installed CLI for a local provider with a separate
	// server. Null means unknown; absence keeps legacy snapshots on `version`.
	installedVersion: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.NullOr((0,__vite_ssr_import_5__.TrimmedNonEmptyString))),
	status: ServerProviderState,
	auth: ServerProviderAuth,
	checkedAt: __vite_ssr_import_5__.IsoDateTime,
	message: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	availability: __vite_ssr_import_1__.optional(ServerProviderAvailability),
	unavailableReason: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	models: __vite_ssr_import_1__.Array(ServerProviderModel),
	// Kept apart from `models` so clients that predate it never offer them.
	updateRequiredModels: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Array(ServerProviderUpdateRequiredModel)),
	slashCommands: __vite_ssr_import_1__.Array(ServerProviderSlashCommand).pipe(__vite_ssr_import_1__.withDecodingDefault(__vite_ssr_import_0__.succeed([]))),
	skills: __vite_ssr_import_1__.Array(ServerProviderSkill).pipe(__vite_ssr_import_1__.withDecodingDefault(__vite_ssr_import_0__.succeed([]))),
	workspaceSnapshots: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Array(ServerProviderWorkspaceSnapshot)),
	usageLimits: __vite_ssr_import_1__.optional((0,__vite_ssr_import_11__.ServerProviderUsageLimits)),
	versionAdvisory: __vite_ssr_import_1__.optionalKey(ServerProviderVersionAdvisory),
	compatibilityAdvisory: __vite_ssr_import_1__.optionalKey(ServerProviderCompatibilityAdvisory),
	updateState: __vite_ssr_import_1__.optionalKey(ServerProviderUpdateState)
});
const ServerProviders = (0,__vite_ssr_import_5__.ForwardCompatibleArray)(ServerProvider);
const isProviderAvailable = (snapshot) => snapshot.availability !== "unavailable";
/** Legacy producers omit this field and support text generation. */
const isProviderTextGenerationCapable = (snapshot) => snapshot.supportsTextGeneration !== false;
const OtlpEndpointSource = __vite_ssr_import_1__.Literals([
	"environment",
	"bootstrap",
	"settings"
]);
const ServerObservability = __vite_ssr_import_1__.Struct({
	logsDirectoryPath: __vite_ssr_import_5__.TrimmedNonEmptyString,
	localTracingEnabled: __vite_ssr_import_1__.Boolean,
	otlpTracesUrl: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	otlpTracesSource: __vite_ssr_import_1__.optional(OtlpEndpointSource),
	otlpTracesVariable: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	otlpTracesEnabled: __vite_ssr_import_1__.Boolean,
	otlpMetricsUrl: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	otlpMetricsSource: __vite_ssr_import_1__.optional(OtlpEndpointSource),
	otlpMetricsVariable: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	otlpMetricsEnabled: __vite_ssr_import_1__.Boolean,
	otlpLogsUrl: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	otlpLogsSource: __vite_ssr_import_1__.optional(OtlpEndpointSource),
	otlpLogsVariable: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	otlpLogsEnabled: __vite_ssr_import_1__.Boolean.pipe(__vite_ssr_import_1__.withDecodingDefault(__vite_ssr_import_0__.succeed(false)))
});
const OtlpSignal = __vite_ssr_import_1__.Literals([
	"traces",
	"metrics",
	"logs"
]);
const OtlpEndpointCheckInput = __vite_ssr_import_1__.Struct({
	signal: OtlpSignal,
	url: __vite_ssr_import_5__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isPattern(/^https?:\/\/./i))
});
const OtlpEndpointCheckResult = __vite_ssr_import_1__.Union([
	__vite_ssr_import_1__.TaggedStruct("Accepted", { latencyMs: __vite_ssr_import_1__.Number }),
	__vite_ssr_import_1__.TaggedStruct("Rejected", { status: __vite_ssr_import_1__.Number }),
	__vite_ssr_import_1__.TaggedStruct("Unreachable", { timedOut: __vite_ssr_import_1__.Boolean })
]);
const ServerTraceDiagnosticsErrorKind = __vite_ssr_import_1__.Literals(["trace-file-not-found", "trace-file-read-failed"]);
const ServerTraceDiagnosticsSpanSummary = __vite_ssr_import_1__.Struct({
	name: __vite_ssr_import_5__.TrimmedNonEmptyString,
	count: __vite_ssr_import_5__.NonNegativeInt,
	failureCount: __vite_ssr_import_5__.NonNegativeInt,
	totalDurationMs: __vite_ssr_import_1__.Number,
	averageDurationMs: __vite_ssr_import_1__.Number,
	maxDurationMs: __vite_ssr_import_1__.Number
});
const ServerTraceDiagnosticsFailureSummary = __vite_ssr_import_1__.Struct({
	name: __vite_ssr_import_5__.TrimmedNonEmptyString,
	cause: __vite_ssr_import_5__.TrimmedNonEmptyString,
	count: __vite_ssr_import_5__.NonNegativeInt,
	lastSeenAt: __vite_ssr_import_1__.DateTimeUtc,
	traceId: __vite_ssr_import_5__.TrimmedNonEmptyString,
	spanId: __vite_ssr_import_5__.TrimmedNonEmptyString
});
const ServerTraceDiagnosticsRecentFailure = __vite_ssr_import_1__.Struct({
	name: __vite_ssr_import_5__.TrimmedNonEmptyString,
	cause: __vite_ssr_import_5__.TrimmedNonEmptyString,
	durationMs: __vite_ssr_import_1__.Number,
	endedAt: __vite_ssr_import_1__.DateTimeUtc,
	traceId: __vite_ssr_import_5__.TrimmedNonEmptyString,
	spanId: __vite_ssr_import_5__.TrimmedNonEmptyString
});
const ServerTraceDiagnosticsSpanOccurrence = __vite_ssr_import_1__.Struct({
	name: __vite_ssr_import_5__.TrimmedNonEmptyString,
	durationMs: __vite_ssr_import_1__.Number,
	endedAt: __vite_ssr_import_1__.DateTimeUtc,
	traceId: __vite_ssr_import_5__.TrimmedNonEmptyString,
	spanId: __vite_ssr_import_5__.TrimmedNonEmptyString
});
const ServerTraceDiagnosticsLogEvent = __vite_ssr_import_1__.Struct({
	spanName: __vite_ssr_import_5__.TrimmedNonEmptyString,
	level: __vite_ssr_import_5__.TrimmedNonEmptyString,
	message: __vite_ssr_import_5__.TrimmedNonEmptyString,
	seenAt: __vite_ssr_import_1__.DateTimeUtc,
	traceId: __vite_ssr_import_5__.TrimmedNonEmptyString,
	spanId: __vite_ssr_import_5__.TrimmedNonEmptyString
});
const ServerTraceDiagnosticsResult = __vite_ssr_import_1__.Struct({
	traceFilePath: __vite_ssr_import_5__.TrimmedNonEmptyString,
	scannedFilePaths: __vite_ssr_import_1__.Array((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	readAt: __vite_ssr_import_1__.DateTimeUtc,
	recordCount: __vite_ssr_import_5__.NonNegativeInt,
	parseErrorCount: __vite_ssr_import_5__.NonNegativeInt,
	firstSpanAt: __vite_ssr_import_1__.Option(__vite_ssr_import_1__.DateTimeUtc),
	lastSpanAt: __vite_ssr_import_1__.Option(__vite_ssr_import_1__.DateTimeUtc),
	failureCount: __vite_ssr_import_5__.NonNegativeInt,
	interruptionCount: __vite_ssr_import_5__.NonNegativeInt,
	slowSpanThresholdMs: __vite_ssr_import_5__.NonNegativeInt,
	slowSpanCount: __vite_ssr_import_5__.NonNegativeInt,
	logLevelCounts: __vite_ssr_import_1__.Record((0,__vite_ssr_import_5__.TrimmedNonEmptyString), (0,__vite_ssr_import_5__.NonNegativeInt)),
	topSpansByCount: __vite_ssr_import_1__.Array(ServerTraceDiagnosticsSpanSummary),
	slowestSpans: __vite_ssr_import_1__.Array(ServerTraceDiagnosticsSpanOccurrence),
	commonFailures: __vite_ssr_import_1__.Array(ServerTraceDiagnosticsFailureSummary),
	latestFailures: __vite_ssr_import_1__.Array(ServerTraceDiagnosticsRecentFailure),
	latestWarningAndErrorLogs: __vite_ssr_import_1__.Array(ServerTraceDiagnosticsLogEvent),
	partialFailure: __vite_ssr_import_1__.Option(__vite_ssr_import_1__.Boolean),
	error: __vite_ssr_import_1__.Option(__vite_ssr_import_1__.Struct({
		kind: ServerTraceDiagnosticsErrorKind,
		message: __vite_ssr_import_5__.TrimmedNonEmptyString
	}))
});
const ServerProcessSignal = __vite_ssr_import_1__.Literals(["SIGINT", "SIGKILL"]);
const ServerProcessDiagnosticsEntry = __vite_ssr_import_1__.Struct({
	pid: __vite_ssr_import_5__.PositiveInt,
	startTimeMs: __vite_ssr_import_5__.NonNegativeInt,
	ppid: __vite_ssr_import_5__.NonNegativeInt,
	pgid: __vite_ssr_import_1__.Option(__vite_ssr_import_1__.Int),
	status: __vite_ssr_import_5__.TrimmedNonEmptyString,
	cpuPercent: __vite_ssr_import_1__.Number,
	rssBytes: __vite_ssr_import_5__.NonNegativeInt,
	elapsed: __vite_ssr_import_5__.TrimmedNonEmptyString,
	command: __vite_ssr_import_5__.TrimmedNonEmptyString,
	depth: __vite_ssr_import_5__.NonNegativeInt,
	childPids: __vite_ssr_import_1__.Array((0,__vite_ssr_import_5__.PositiveInt))
});
const ServerProcessDiagnosticsResult = __vite_ssr_import_1__.Struct({
	serverPid: __vite_ssr_import_5__.PositiveInt,
	readAt: __vite_ssr_import_1__.DateTimeUtc,
	processCount: __vite_ssr_import_5__.NonNegativeInt,
	totalRssBytes: __vite_ssr_import_5__.NonNegativeInt,
	totalCpuPercent: __vite_ssr_import_1__.Number,
	processes: __vite_ssr_import_1__.Array(ServerProcessDiagnosticsEntry),
	error: __vite_ssr_import_1__.Option(__vite_ssr_import_1__.Struct({ message: __vite_ssr_import_5__.TrimmedNonEmptyString }))
});
const ServerProcessResourceHistoryInput = __vite_ssr_import_1__.Struct({
	windowMs: __vite_ssr_import_5__.NonNegativeInt,
	bucketMs: __vite_ssr_import_5__.NonNegativeInt
});
const ServerProcessResourceHistoryBucket = __vite_ssr_import_1__.Struct({
	startedAt: __vite_ssr_import_1__.DateTimeUtc,
	endedAt: __vite_ssr_import_1__.DateTimeUtc,
	avgCpuPercent: __vite_ssr_import_1__.Number,
	maxCpuPercent: __vite_ssr_import_1__.Number,
	maxRssBytes: __vite_ssr_import_5__.NonNegativeInt,
	maxProcessCount: __vite_ssr_import_5__.NonNegativeInt
});
const ServerProcessResourceHistorySummary = __vite_ssr_import_1__.Struct({
	processKey: __vite_ssr_import_5__.TrimmedNonEmptyString,
	pid: __vite_ssr_import_5__.PositiveInt,
	ppid: __vite_ssr_import_5__.NonNegativeInt,
	command: __vite_ssr_import_5__.TrimmedNonEmptyString,
	depth: __vite_ssr_import_5__.NonNegativeInt,
	isServerRoot: __vite_ssr_import_1__.Boolean,
	firstSeenAt: __vite_ssr_import_1__.DateTimeUtc,
	lastSeenAt: __vite_ssr_import_1__.DateTimeUtc,
	currentCpuPercent: __vite_ssr_import_1__.Number,
	avgCpuPercent: __vite_ssr_import_1__.Number,
	maxCpuPercent: __vite_ssr_import_1__.Number,
	cpuSecondsApprox: __vite_ssr_import_1__.Number,
	currentRssBytes: __vite_ssr_import_5__.NonNegativeInt,
	maxRssBytes: __vite_ssr_import_5__.NonNegativeInt,
	sampleCount: __vite_ssr_import_5__.NonNegativeInt
});
const ServerProcessResourceHistoryFailureTag = __vite_ssr_import_1__.Literals([
	"ProcessDiagnosticsQueryTimeoutError",
	"ProcessDiagnosticsQueryFailedError",
	"ProcessDiagnosticsServerProcessSignalError",
	"ProcessDiagnosticsNotDescendantError",
	"ProcessDiagnosticsSignalFailedError"
]);
const ServerProcessResourceHistoryResult = __vite_ssr_import_1__.Struct({
	readAt: __vite_ssr_import_1__.DateTimeUtc,
	windowMs: __vite_ssr_import_5__.NonNegativeInt,
	bucketMs: __vite_ssr_import_5__.NonNegativeInt,
	sampleIntervalMs: __vite_ssr_import_5__.NonNegativeInt,
	retainedSampleCount: __vite_ssr_import_5__.NonNegativeInt,
	totalCpuSecondsApprox: __vite_ssr_import_1__.Number,
	buckets: __vite_ssr_import_1__.Array(ServerProcessResourceHistoryBucket),
	topProcesses: __vite_ssr_import_1__.Array(ServerProcessResourceHistorySummary),
	error: __vite_ssr_import_1__.Option(__vite_ssr_import_1__.Struct({
		failureTag: ServerProcessResourceHistoryFailureTag,
		message: __vite_ssr_import_5__.TrimmedNonEmptyString
	}))
});
const ServerSignalProcessInput = __vite_ssr_import_1__.Struct({
	pid: __vite_ssr_import_5__.PositiveInt,
	startTimeMs: __vite_ssr_import_5__.NonNegativeInt,
	signal: ServerProcessSignal
});
const ServerSignalProcessResult = __vite_ssr_import_1__.Struct({
	pid: __vite_ssr_import_5__.PositiveInt,
	signal: ServerProcessSignal,
	signaled: __vite_ssr_import_1__.Boolean,
	message: __vite_ssr_import_1__.Option((0,__vite_ssr_import_5__.TrimmedNonEmptyString))
});
const EnvironmentThemeColor = __vite_ssr_import_1__.String.check(__vite_ssr_import_1__.isPattern(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/));
/** Reserve appearance keywords so published themes cannot replace stock preferences. */
const EnvironmentThemeId = __vite_ssr_import_1__.String.check(__vite_ssr_import_1__.isPattern(/^(?!(?:system|light|dark)$)[a-z0-9](?:[a-z0-9-]{0,47})$/));
const EnvironmentThemeColors = __vite_ssr_import_1__.Record(__vite_ssr_import_1__.String.check(__vite_ssr_import_1__.isPattern(/^[a-zA-Z][a-zA-Z0-9]{0,63}$/)), __vite_ssr_import_5__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isMaxLength(64)));
const environmentThemeFields = {
	version: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literal(1)),
	name: __vite_ssr_import_5__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isMaxLength(48)),
	appearance: __vite_ssr_import_1__.Literals(["light", "dark"]),
	/** Derive the palette from canvas/accent, then overlay colors; without them, colors is the palette. */
	canvas: __vite_ssr_import_1__.optional(EnvironmentThemeColor),
	accent: __vite_ssr_import_1__.optional(EnvironmentThemeColor),
	colors: __vite_ssr_import_1__.optional(EnvironmentThemeColors),
	variants: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Struct({
		light: __vite_ssr_import_1__.optional(EnvironmentThemeColors),
		dark: __vite_ssr_import_1__.optional(EnvironmentThemeColors)
	}))
};
const EnvironmentThemeFile = __vite_ssr_import_1__.Struct(environmentThemeFields);
const EnvironmentTheme = __vite_ssr_import_1__.Struct({
	id: EnvironmentThemeId,
	...environmentThemeFields
});
function environmentThemeFileHasColors(file) {
	return file.canvas !== undefined && file.accent !== undefined || file.colors !== undefined && Object.keys(file.colors).length > 0;
};
/** tailnet means this machine's Tailscale interface; other private addresses are lan. */
const ServerDirectEndpointKind = __vite_ssr_import_1__.Literals(["lan", "tailnet"]);
const ServerDirectEndpoint = __vite_ssr_import_1__.Struct({
	kind: ServerDirectEndpointKind,
	httpBaseUrl: __vite_ssr_import_5__.TrimmedNonEmptyString
});
/**
* A stretch where the server's event loop could not run, so it answered
* nothing and clients may have dropped the connection.
*/
const ServerEventLoopStall = __vite_ssr_import_1__.Struct({
	detectedAt: __vite_ssr_import_5__.IsoDateTime,
	durationMs: __vite_ssr_import_5__.NonNegativeInt,
	/** One-minute load average when the stall was seen. Absent on Windows, which has none. */
	loadAverage: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Number),
	cpuCount: __vite_ssr_import_5__.PositiveInt
});
const ServerConfig = __vite_ssr_import_1__.Struct({
	environment: __vite_ssr_import_3__.ExecutionEnvironmentDescriptor,
	auth: __vite_ssr_import_4__.ServerAuthDescriptor,
	cwd: __vite_ssr_import_5__.TrimmedNonEmptyString,
	keybindingsConfigPath: __vite_ssr_import_5__.TrimmedNonEmptyString,
	keybindings: __vite_ssr_import_6__.ResolvedKeybindingsConfig,
	issues: ServerConfigIssues,
	providers: ServerProviders,
	availableEditors: (0,__vite_ssr_import_5__.ForwardCompatibleArray)((0,__vite_ssr_import_7__.EditorId)),
	remoteOpenTargets: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_5__.ForwardCompatibleArray)((0,__vite_ssr_import_7__.RemoteOpenTarget))),
	/** Hints only; verify each address answers as this environment. */
	directEndpoints: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_5__.ForwardCompatibleArray)(ServerDirectEndpoint)),
	observability: ServerObservability,
	settings: __vite_ssr_import_12__.ServerSettings,
	shellResumeCompletionMarker: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean),
	/**
	* The shell can leave idle subagent children out of snapshots (`omitIdleSubagents`), and
	* `getThreadFamily` and `getWorktreeThreadIds` serve the rows it leaves out.
	*/
	shellThreadFamilies: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean),
	shellRevealInFileManager: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean),
	shellRevealInFileManagerKind: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_7__.FileManagerRevealKind)),
	threadResumeCompletionMarker: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean),
	/** Send window fields only when advertised. */
	threadSnapshotPagination: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean),
	reasoningMessages: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean),
	threadFind: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean),
	threadFindProgressive: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean),
	scratchWorkspaceRoot: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	newProjectsRoot: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	/**
	* The latest stall long enough to notice, sent only for a few minutes after
	* it. A client that reconnects reads it to say why the host stopped
	* answering. Clients do not cache it, since it describes the host at connect.
	*/
	lastEventLoopStall: __vite_ssr_import_1__.optionalKey(ServerEventLoopStall),
	/**
	* Never sent in a config snapshot: the theme stream emits the current set
	* before any change, so a snapshot carrying it too would hand every
	* subscriber the same array twice per connect.
	*/
	environmentThemes: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array(EnvironmentTheme)),
	/** Stream-only and opt-in; the source stream emits the current set on subscribe. */
	usageLimitSources: __vite_ssr_import_1__.optional((0,__vite_ssr_import_11__.UsageLimitSourceSnapshots))
});
function resolveEnvironmentMachineKind(config) {
	return config?.settings?.environmentIcon ?? config?.environment.platform.machine ?? "server";
};
const ServerUpsertKeybindingReplaceTarget = __vite_ssr_import_1__.Struct({
	key: __vite_ssr_import_6__.KeybindingValue,
	command: __vite_ssr_import_6__.KeybindingCommand,
	when: __vite_ssr_import_1__.optional((0,__vite_ssr_import_6__.KeybindingWhen))
});
const ServerUpsertKeybindingInput = __vite_ssr_import_1__.Struct({
	key: __vite_ssr_import_6__.KeybindingValue,
	command: __vite_ssr_import_6__.KeybindingCommand,
	when: __vite_ssr_import_1__.optional((0,__vite_ssr_import_6__.KeybindingWhen)),
	replace: __vite_ssr_import_1__.optional(ServerUpsertKeybindingReplaceTarget)
});
const ServerRemoveKeybindingInput = ServerUpsertKeybindingReplaceTarget;
const ServerUpsertKeybindingResult = __vite_ssr_import_1__.Struct({
	keybindings: __vite_ssr_import_6__.ResolvedKeybindingsConfig,
	issues: ServerConfigIssues
});
const ServerRemoveKeybindingResult = ServerUpsertKeybindingResult;
const ServerConfigUpdatedPayload = __vite_ssr_import_1__.Struct({
	issues: ServerConfigIssues,
	providers: ServerProviders,
	settings: __vite_ssr_import_1__.optional((0,__vite_ssr_import_12__.ServerSettings))
});
const ServerConfigKeybindingsUpdatedPayload = __vite_ssr_import_1__.Struct({
	keybindings: __vite_ssr_import_6__.ResolvedKeybindingsConfig,
	issues: ServerConfigIssues
});
const ServerConfigProviderStatusesPayload = __vite_ssr_import_1__.Struct({ providers: ServerProviders });
const ServerConfigSettingsUpdatedPayload = __vite_ssr_import_1__.Struct({ settings: __vite_ssr_import_12__.ServerSettings });
const ServerConfigStreamSnapshotEvent = __vite_ssr_import_1__.Struct({
	version: __vite_ssr_import_1__.Literal(1),
	type: __vite_ssr_import_1__.Literal("snapshot"),
	config: ServerConfig
});
const ServerConfigStreamKeybindingsUpdatedEvent = __vite_ssr_import_1__.Struct({
	version: __vite_ssr_import_1__.Literal(1),
	type: __vite_ssr_import_1__.Literal("keybindingsUpdated"),
	payload: ServerConfigKeybindingsUpdatedPayload
});
const ServerConfigStreamProviderStatusesEvent = __vite_ssr_import_1__.Struct({
	version: __vite_ssr_import_1__.Literal(1),
	type: __vite_ssr_import_1__.Literal("providerStatuses"),
	payload: ServerConfigProviderStatusesPayload
});
const ServerConfigStreamSettingsUpdatedEvent = __vite_ssr_import_1__.Struct({
	version: __vite_ssr_import_1__.Literal(1),
	type: __vite_ssr_import_1__.Literal("settingsUpdated"),
	payload: ServerConfigSettingsUpdatedPayload
});
const ServerConfigEnvironmentThemesUpdatedPayload = __vite_ssr_import_1__.Struct({ themes: __vite_ssr_import_1__.Array(EnvironmentTheme) });
const ServerConfigStreamEnvironmentThemesUpdatedEvent = __vite_ssr_import_1__.Struct({
	version: __vite_ssr_import_1__.Literal(1),
	type: __vite_ssr_import_1__.Literal("environmentThemesUpdated"),
	payload: ServerConfigEnvironmentThemesUpdatedPayload
});
const ServerConfigUsageLimitSourcesUpdatedPayload = __vite_ssr_import_1__.Struct({ sources: __vite_ssr_import_11__.UsageLimitSourceSnapshots });
const ServerConfigStreamUsageLimitSourcesUpdatedEvent = __vite_ssr_import_1__.Struct({
	version: __vite_ssr_import_1__.Literal(1),
	type: __vite_ssr_import_1__.Literal("usageLimitSourcesUpdated"),
	payload: ServerConfigUsageLimitSourcesUpdatedPayload
});
const ServerConfigStreamEvent = __vite_ssr_import_1__.Union([
	ServerConfigStreamSnapshotEvent,
	ServerConfigStreamKeybindingsUpdatedEvent,
	ServerConfigStreamProviderStatusesEvent,
	ServerConfigStreamSettingsUpdatedEvent,
	ServerConfigStreamEnvironmentThemesUpdatedEvent,
	ServerConfigStreamUsageLimitSourcesUpdatedEvent
]);
const ServerSelfUpdateOutcome = __vite_ssr_import_1__.Struct({
	id: __vite_ssr_import_5__.TrimmedNonEmptyString,
	fromVersion: __vite_ssr_import_5__.TrimmedNonEmptyString,
	targetVersion: __vite_ssr_import_5__.TrimmedNonEmptyString,
	status: __vite_ssr_import_1__.Literals([
		"committed",
		"rolled-back",
		"failed"
	]),
	reason: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_5__.TrimmedNonEmptyString))
});
const ServerLifecycleReadyPayload = __vite_ssr_import_1__.Struct({
	at: __vite_ssr_import_5__.IsoDateTime,
	environment: __vite_ssr_import_3__.ExecutionEnvironmentDescriptor,
	updateOutcome: __vite_ssr_import_1__.optionalKey(ServerSelfUpdateOutcome)
});
const ServerLifecycleWelcomePayload = __vite_ssr_import_1__.Struct({
	environment: __vite_ssr_import_3__.ExecutionEnvironmentDescriptor,
	cwd: __vite_ssr_import_5__.TrimmedNonEmptyString,
	projectName: __vite_ssr_import_5__.TrimmedNonEmptyString,
	bootstrapStatus: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literals(["pending", "complete"])),
	bootstrapProjectId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.ProjectId)),
	bootstrapThreadId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_5__.ThreadId)),
	bootstrapProjectCreated: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	bootstrapThreadCreated: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean)
});
const ServerLifecycleLegacyThreadMigrationPayload = __vite_ssr_import_1__.Struct({
	status: __vite_ssr_import_1__.Union([__vite_ssr_import_1__.Literal("running"), __vite_ssr_import_1__.Literal("complete")]),
	totalThreadCount: __vite_ssr_import_5__.NonNegativeInt
});
const ServerLifecycleStreamWelcomeEvent = __vite_ssr_import_1__.Struct({
	version: __vite_ssr_import_1__.Literal(1),
	sequence: __vite_ssr_import_5__.NonNegativeInt,
	type: __vite_ssr_import_1__.Literal("welcome"),
	payload: ServerLifecycleWelcomePayload
});
const ServerLifecycleStreamReadyEvent = __vite_ssr_import_1__.Struct({
	version: __vite_ssr_import_1__.Literal(1),
	sequence: __vite_ssr_import_5__.NonNegativeInt,
	type: __vite_ssr_import_1__.Literal("ready"),
	payload: ServerLifecycleReadyPayload
});
const ServerLifecycleStreamLegacyThreadMigrationEvent = __vite_ssr_import_1__.Struct({
	version: __vite_ssr_import_1__.Literal(1),
	sequence: __vite_ssr_import_5__.NonNegativeInt,
	type: __vite_ssr_import_1__.Literal("legacyThreadMigration"),
	payload: ServerLifecycleLegacyThreadMigrationPayload
});
const ServerLifecycleStreamEvent = __vite_ssr_import_1__.Union([
	ServerLifecycleStreamWelcomeEvent,
	ServerLifecycleStreamReadyEvent,
	ServerLifecycleStreamLegacyThreadMigrationEvent
]);
const ServerProviderUpdatedPayload = __vite_ssr_import_1__.Struct({ providers: ServerProviders });
const ServerProviderUpdateInput = __vite_ssr_import_1__.Struct({
	provider: __vite_ssr_import_10__.ProviderDriverKind,
	targetVersion: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	instanceId: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_10__.ProviderInstanceId))
});
class ServerProviderUpdateError extends __vite_ssr_import_1__.TaggedError()("ServerProviderUpdateError", {
	provider: __vite_ssr_import_10__.ProviderDriverKind,
	reason: __vite_ssr_import_5__.TrimmedNonEmptyString,
	cause: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Defect())
}) {
	get message() {
		return `Provider update failed for ${this.provider}: ${this.reason}`;
	}
};
const ServerSelfUpdateInput = __vite_ssr_import_1__.Struct({
	/** Exact npm version, never a dist-tag, so server and client agree on the request. */
	targetVersion: __vite_ssr_import_5__.TrimmedNonEmptyString,
	continueRunningThreads: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.Boolean)
});
const ServerSelfUpdateResult = __vite_ssr_import_1__.Struct({
	targetVersion: __vite_ssr_import_5__.TrimmedNonEmptyString,
	method: __vite_ssr_import_3__.ServerSelfUpdateMethod,
	updateId: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_5__.TrimmedNonEmptyString)),
	desktopUpdateToken: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_5__.TrimmedNonEmptyString))
});
const DesktopUpdateCommitInput = __vite_ssr_import_1__.Struct({ requestId: __vite_ssr_import_5__.TrimmedNonEmptyString });
const ServerSelfUpdateProgressStage = __vite_ssr_import_1__.Literals(["downloading", "installing"]);
const ServerSelfUpdateProgressEvent = __vite_ssr_import_1__.Union([__vite_ssr_import_1__.Struct({
	type: __vite_ssr_import_1__.Literal("progress"),
	stage: ServerSelfUpdateProgressStage
}), __vite_ssr_import_1__.Struct({
	type: __vite_ssr_import_1__.Literal("complete"),
	result: ServerSelfUpdateResult
})]);
class ServerSelfUpdateError extends __vite_ssr_import_1__.TaggedError()("ServerSelfUpdateError", {
	reason: __vite_ssr_import_5__.TrimmedNonEmptyString,
	cause: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Defect())
}) {
	get message() {
		return `Server update failed: ${this.reason}`;
	}
}
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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c0JBQU8sZUFBWSw0Q0FBcUI7QUFDOUQsQ0FBQztBQUdNLE1BQU0sMkJBQTJCLHNCQUFPLE9BQU8sRUFDcEQsV0FBVyw0Q0FDYixDQUFDO0FBR00sTUFBTSxnQ0FBZ0Msc0JBQU8sU0FBUyxDQUFDLGVBQWUsWUFBWSxDQUFDO0FBR25GLE1BQU0sZ0NBQWdDLHNCQUFPLE1BQU0sQ0FDeEQsc0JBQU8sT0FBTztDQUNaLE1BQU0sc0JBQU8sUUFBUSxVQUFVO0NBQy9CLE9BQU87QUFDVCxDQUFDLEdBQ0Qsc0JBQU8sT0FBTztDQUNaLE1BQU0sc0JBQU8sUUFBUSxVQUFVO0NBQy9CLFFBQVE7QUFDVixDQUFDLENBQ0gsQ0FBQztBQUdNLE1BQU0sOEJBQThCLHNCQUFPLFlBQW1DLENBQUMsQ0FDcEYseUJBQ0E7Q0FDRSxRQUFRO0NBQ1IsT0FBTyxzQkFBTyxTQUFTLHNCQUFPLE9BQU8sQ0FBQztBQUN4QyxDQUNGLENBQUMsQ0FBQztDQUNBLElBQWEsVUFBa0I7RUFDN0IsT0FBTyx5QkFBeUIsS0FBSztDQUN2QztBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJzZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgRWZmZWN0IGZyb20gXCJlZmZlY3QvRWZmZWN0XCI7XG5pbXBvcnQgKiBhcyBTY2hlbWEgZnJvbSBcImVmZmVjdC9TY2hlbWFcIjtcbmltcG9ydCB7IEFjcFJlZ2lzdHJ5VXJsQXV0aEFjdGlvbiB9IGZyb20gXCIuL2FjcFJlZ2lzdHJ5LnRzXCI7XG5pbXBvcnQge1xuICB0eXBlIEVudmlyb25tZW50TWFjaGluZUtpbmQsXG4gIEV4ZWN1dGlvbkVudmlyb25tZW50RGVzY3JpcHRvcixcbiAgU2VydmVyU2VsZlVwZGF0ZU1ldGhvZCxcbn0gZnJvbSBcIi4vZW52aXJvbm1lbnQudHNcIjtcbmltcG9ydCB7IFNlcnZlckF1dGhEZXNjcmlwdG9yIH0gZnJvbSBcIi4vYXV0aC50c1wiO1xuaW1wb3J0IHtcbiAgRm9yd2FyZENvbXBhdGlibGVBcnJheSxcbiAgSXNvRGF0ZVRpbWUsXG4gIE5vbk5lZ2F0aXZlSW50LFxuICBQb3NpdGl2ZUludCxcbiAgUHJvamVjdElkLFxuICBUaHJlYWRJZCxcbiAgVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxufSBmcm9tIFwiLi9iYXNlU2NoZW1hcy50c1wiO1xuaW1wb3J0IHtcbiAgS2V5YmluZGluZ0NvbW1hbmQsXG4gIEtleWJpbmRpbmdWYWx1ZSxcbiAgS2V5YmluZGluZ1doZW4sXG4gIFJlc29sdmVkS2V5YmluZGluZ3NDb25maWcsXG59IGZyb20gXCIuL2tleWJpbmRpbmdzLnRzXCI7XG5pbXBvcnQgeyBFZGl0b3JJZCwgRmlsZU1hbmFnZXJSZXZlYWxLaW5kLCBSZW1vdGVPcGVuVGFyZ2V0IH0gZnJvbSBcIi4vZWRpdG9yLnRzXCI7XG5pbXBvcnQgeyBNb2RlbENhcGFiaWxpdGllcywgUHJvdmlkZXJPcHRpb25EZXNjcmlwdG9yIH0gZnJvbSBcIi4vbW9kZWwudHNcIjtcbmltcG9ydCB7IFJ1bnRpbWVNb2RlIH0gZnJvbSBcIi4vcHJvdmlkZXJQb2xpY3kudHNcIjtcbmltcG9ydCB7IFByb3ZpZGVyRHJpdmVyS2luZCwgUHJvdmlkZXJJbnN0YW5jZUlkIH0gZnJvbSBcIi4vcHJvdmlkZXJJbnN0YW5jZS50c1wiO1xuaW1wb3J0IHsgU2VydmVyUHJvdmlkZXJVc2FnZUxpbWl0cywgVXNhZ2VMaW1pdFNvdXJjZVNuYXBzaG90cyB9IGZyb20gXCIuL3Byb3ZpZGVyVXNhZ2VMaW1pdHMudHNcIjtcbmltcG9ydCB7IFNlcnZlclNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3MudHNcIjtcblxuY29uc3QgS2V5YmluZGluZ3NNYWxmb3JtZWRDb25maWdJc3N1ZSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBraW5kOiBTY2hlbWEuTGl0ZXJhbChcImtleWJpbmRpbmdzLm1hbGZvcm1lZC1jb25maWdcIiksXG4gIG1lc3NhZ2U6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbn0pO1xuXG5jb25zdCBLZXliaW5kaW5nc0ludmFsaWRFbnRyeUlzc3VlID0gU2NoZW1hLlN0cnVjdCh7XG4gIGtpbmQ6IFNjaGVtYS5MaXRlcmFsKFwia2V5YmluZGluZ3MuaW52YWxpZC1lbnRyeVwiKSxcbiAgbWVzc2FnZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBpbmRleDogU2NoZW1hLk51bWJlcixcbn0pO1xuXG5leHBvcnQgY29uc3QgU2VydmVyQ29uZmlnSXNzdWUgPSBTY2hlbWEuVW5pb24oW1xuICBLZXliaW5kaW5nc01hbGZvcm1lZENvbmZpZ0lzc3VlLFxuICBLZXliaW5kaW5nc0ludmFsaWRFbnRyeUlzc3VlLFxuXSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJDb25maWdJc3N1ZSA9IHR5cGVvZiBTZXJ2ZXJDb25maWdJc3N1ZS5UeXBlO1xuXG5jb25zdCBTZXJ2ZXJDb25maWdJc3N1ZXMgPSBGb3J3YXJkQ29tcGF0aWJsZUFycmF5KFNlcnZlckNvbmZpZ0lzc3VlKTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclByb3ZpZGVyU3RhdGUgPSBTY2hlbWEuTGl0ZXJhbHMoW1wicmVhZHlcIiwgXCJ3YXJuaW5nXCIsIFwiZXJyb3JcIiwgXCJkaXNhYmxlZFwiXSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm92aWRlclN0YXRlID0gdHlwZW9mIFNlcnZlclByb3ZpZGVyU3RhdGUuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclByb3ZpZGVyQXV0aFN0YXR1cyA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwiYXV0aGVudGljYXRlZFwiLFxuICBcInVuYXV0aGVudGljYXRlZFwiLFxuICBcInVua25vd25cIixcbl0pO1xuZXhwb3J0IHR5cGUgU2VydmVyUHJvdmlkZXJBdXRoU3RhdHVzID0gdHlwZW9mIFNlcnZlclByb3ZpZGVyQXV0aFN0YXR1cy5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvdmlkZXJBdXRoID0gU2NoZW1hLlN0cnVjdCh7XG4gIHN0YXR1czogU2VydmVyUHJvdmlkZXJBdXRoU3RhdHVzLFxuICB0eXBlOiBTY2hlbWEub3B0aW9uYWwoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgbGFiZWw6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBlbWFpbDogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIGFjdGlvbjogU2NoZW1hLm9wdGlvbmFsKEFjcFJlZ2lzdHJ5VXJsQXV0aEFjdGlvbiksXG4gIGNhbkxvZ291dDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgc3Vic2NyaXB0aW9uU2hhcmluZzogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgcHJvZmlsZUlkOiBTY2hlbWEub3B0aW9uYWwoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgd29ya3NwYWNlSWQ6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm92aWRlckF1dGggPSB0eXBlb2YgU2VydmVyUHJvdmlkZXJBdXRoLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm92aWRlck1vZGVsID0gU2NoZW1hLlN0cnVjdCh7XG4gIHNsdWc6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgbmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBzaG9ydE5hbWU6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBzdWJQcm92aWRlcjogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIGFsaWFzZXM6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQXJyYXkoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSksXG4gIGJhZGdlOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkxpdGVyYWwoXCJuZXdcIikpLFxuICBpc0N1c3RvbTogU2NoZW1hLkJvb2xlYW4sXG4gIGlzRGVmYXVsdDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgaXNMZWdhY3k6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gIGNhcGFiaWxpdGllczogU2NoZW1hLk51bGxPcihNb2RlbENhcGFiaWxpdGllcyksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb3ZpZGVyTW9kZWwgPSB0eXBlb2YgU2VydmVyUHJvdmlkZXJNb2RlbC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvdmlkZXJVcGRhdGVSZXF1aXJlZE1vZGVsID0gU2NoZW1hLlN0cnVjdCh7XG4gIHNsdWc6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgbmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBiYWRnZTogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5MaXRlcmFsKFwibmV3XCIpKSxcbiAgbWluVmVyc2lvbjogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm92aWRlclVwZGF0ZVJlcXVpcmVkTW9kZWwgPSB0eXBlb2YgU2VydmVyUHJvdmlkZXJVcGRhdGVSZXF1aXJlZE1vZGVsLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm92aWRlclNsYXNoQ29tbWFuZElucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGhpbnQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyUHJvdmlkZXJTbGFzaENvbW1hbmRJbnB1dCA9IHR5cGVvZiBTZXJ2ZXJQcm92aWRlclNsYXNoQ29tbWFuZElucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm92aWRlclNsYXNoQ29tbWFuZCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBuYW1lOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBTY2hlbWEub3B0aW9uYWwoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgaW5wdXQ6IFNjaGVtYS5vcHRpb25hbChTZXJ2ZXJQcm92aWRlclNsYXNoQ29tbWFuZElucHV0KSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyUHJvdmlkZXJTbGFzaENvbW1hbmQgPSB0eXBlb2YgU2VydmVyUHJvdmlkZXJTbGFzaENvbW1hbmQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclByb3ZpZGVyU2tpbGwgPSBTY2hlbWEuU3RydWN0KHtcbiAgbmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBkZXNjcmlwdGlvbjogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIHBhdGg6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgc2NvcGU6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBlbmFibGVkOiBTY2hlbWEuQm9vbGVhbixcbiAgZGlzcGxheU5hbWU6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBzaG9ydERlc2NyaXB0aW9uOiBTY2hlbWEub3B0aW9uYWwoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgLyoqIENsYXVkZSBkaXNhYmxlLW1vZGVsLWludm9jYXRpb246IG9ubHkgdXNlcnMgY2FuIGludm9rZTsgY29tcG9zZXJzIG11c3Qgb2ZmZXIgYSBzbGFzaCBjb21tYW5kLiAqL1xuICB1c2VySW52b2NhdGlvbk9ubHk6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gIC8qKiBDbGF1ZGUgdXNlci1pbnZvY2FibGU6ZmFsc2U6IG9ubHkgYWdlbnRzIGNhbiBpbnZva2U7IGNvbXBvc2VycyBtdXN0IGhpZGUgdGhlIHNsYXNoIGNvbW1hbmQuICovXG4gIHVzZXJJbnZvY2FibGU6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb3ZpZGVyU2tpbGwgPSB0eXBlb2YgU2VydmVyUHJvdmlkZXJTa2lsbC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvdmlkZXJXb3Jrc3BhY2VTbmFwc2hvdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBjd2Q6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgY2hlY2tlZEF0OiBJc29EYXRlVGltZSxcbiAgc2xhc2hDb21tYW5kczogU2NoZW1hLkFycmF5KFNlcnZlclByb3ZpZGVyU2xhc2hDb21tYW5kKSxcbiAgc2xhc2hDb21tYW5kc1BlbmRpbmc6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gIHNraWxsczogU2NoZW1hLkFycmF5KFNlcnZlclByb3ZpZGVyU2tpbGwpLFxuICBvcHRpb25EZXNjcmlwdG9yczogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5BcnJheShQcm92aWRlck9wdGlvbkRlc2NyaXB0b3IpKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyUHJvdmlkZXJXb3Jrc3BhY2VTbmFwc2hvdCA9IHR5cGVvZiBTZXJ2ZXJQcm92aWRlcldvcmtzcGFjZVNuYXBzaG90LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBQUk9WSURFUl9XT1JLU1BBQ0VfU05BUFNIT1RfVFRMX01TID0gNSAqIDYwXzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdmlkZXJXb3Jrc3BhY2VTbmFwc2hvdEN1cnJlbnQoXG4gIHNuYXBzaG90OiBQaWNrPFNlcnZlclByb3ZpZGVyV29ya3NwYWNlU25hcHNob3QsIFwiY2hlY2tlZEF0XCI+LFxuICBub3dNczogbnVtYmVyLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBub3dNcyAtIERhdGUucGFyc2Uoc25hcHNob3QuY2hlY2tlZEF0KSA8IFBST1ZJREVSX1dPUktTUEFDRV9TTkFQU0hPVF9UVExfTVM7XG59XG5cbi8qKiBVbmF2YWlsYWJsZSBzbmFwc2hvdHMgbXVzdCBzZXQgaW5zdGFsbGVkIGFuZCBlbmFibGVkIGZhbHNlLiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlclByb3ZpZGVyQXZhaWxhYmlsaXR5ID0gU2NoZW1hLkxpdGVyYWxzKFtcImF2YWlsYWJsZVwiLCBcInVuYXZhaWxhYmxlXCJdKTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb3ZpZGVyQXZhaWxhYmlsaXR5ID0gdHlwZW9mIFNlcnZlclByb3ZpZGVyQXZhaWxhYmlsaXR5LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm92aWRlckNvbnRpbnVhdGlvbiA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBncm91cEtleTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm92aWRlckNvbnRpbnVhdGlvbiA9IHR5cGVvZiBTZXJ2ZXJQcm92aWRlckNvbnRpbnVhdGlvbi5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvdmlkZXJDb21wYXRpYmlsaXR5U3RhdHVzID0gU2NoZW1hLkxpdGVyYWxzKFtcbiAgXCJ1bmtub3duXCIsXG4gIFwic3VwcG9ydGVkXCIsXG4gIFwiZ3JhY2VmdWxcIixcbiAgXCJ1bnN1cHBvcnRlZFwiLFxuICBcImJyb2tlblwiLFxuXSk7XG5leHBvcnQgY29uc3QgU2VydmVyUHJvdmlkZXJDb21wYXRpYmlsaXR5QWR2aXNvcnkgPSBTY2hlbWEuU3RydWN0KHtcbiAgc3RhdHVzOiBTZXJ2ZXJQcm92aWRlckNvbXBhdGliaWxpdHlTdGF0dXMsXG4gIGxhdGVzdFZlcnNpb25TdGF0dXM6IFNjaGVtYS5vcHRpb25hbEtleShTZXJ2ZXJQcm92aWRlckNvbXBhdGliaWxpdHlTdGF0dXMpLFxuICBtZXNzYWdlOiBTY2hlbWEuTnVsbE9yKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIHJlY29tbWVuZGVkVmVyc2lvbjogU2NoZW1hLk51bGxPcihUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICByZWNvbW1lbmRlZFJhbmdlOiBTY2hlbWEuTnVsbE9yKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb3ZpZGVyQ29tcGF0aWJpbGl0eUFkdmlzb3J5ID0gdHlwZW9mIFNlcnZlclByb3ZpZGVyQ29tcGF0aWJpbGl0eUFkdmlzb3J5LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm92aWRlclZlcnNpb25BZHZpc29yeVN0YXR1cyA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwidW5rbm93blwiLFxuICBcImN1cnJlbnRcIixcbiAgXCJiZWhpbmRfbGF0ZXN0XCIsXG5dKTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb3ZpZGVyVmVyc2lvbkFkdmlzb3J5U3RhdHVzID0gdHlwZW9mIFNlcnZlclByb3ZpZGVyVmVyc2lvbkFkdmlzb3J5U3RhdHVzLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm92aWRlclZlcnNpb25BZHZpc29yeSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBzdGF0dXM6IFNlcnZlclByb3ZpZGVyVmVyc2lvbkFkdmlzb3J5U3RhdHVzLFxuICBjdXJyZW50VmVyc2lvbjogU2NoZW1hLk51bGxPcihUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBsYXRlc3RWZXJzaW9uOiBTY2hlbWEuTnVsbE9yKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIHVwZGF0ZUNvbW1hbmQ6IFNjaGVtYS5OdWxsT3IoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgY2FuVXBkYXRlOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBjYW5JbnN0YWxsVmVyc2lvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgY2hlY2tlZEF0OiBTY2hlbWEuTnVsbE9yKElzb0RhdGVUaW1lKSxcbiAgbWVzc2FnZTogU2NoZW1hLk51bGxPcihUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm92aWRlclZlcnNpb25BZHZpc29yeSA9IHR5cGVvZiBTZXJ2ZXJQcm92aWRlclZlcnNpb25BZHZpc29yeS5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvdmlkZXJVcGRhdGVTdGF0dXMgPSBTY2hlbWEuTGl0ZXJhbHMoW1xuICBcImlkbGVcIixcbiAgXCJxdWV1ZWRcIixcbiAgXCJydW5uaW5nXCIsXG4gIFwic3VjY2VlZGVkXCIsXG4gIFwiZmFpbGVkXCIsXG4gIFwidW5jaGFuZ2VkXCIsXG5dKTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb3ZpZGVyVXBkYXRlU3RhdHVzID0gdHlwZW9mIFNlcnZlclByb3ZpZGVyVXBkYXRlU3RhdHVzLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm92aWRlclVwZGF0ZVN0YXRlID0gU2NoZW1hLlN0cnVjdCh7XG4gIHN0YXR1czogU2VydmVyUHJvdmlkZXJVcGRhdGVTdGF0dXMsXG4gIHN0YXJ0ZWRBdDogU2NoZW1hLk51bGxPcihJc29EYXRlVGltZSksXG4gIGZpbmlzaGVkQXQ6IFNjaGVtYS5OdWxsT3IoSXNvRGF0ZVRpbWUpLFxuICBtZXNzYWdlOiBTY2hlbWEuTnVsbE9yKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIG91dHB1dDogU2NoZW1hLk51bGxPcihTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgxMF8wMDApKSksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb3ZpZGVyVXBkYXRlU3RhdGUgPSB0eXBlb2YgU2VydmVyUHJvdmlkZXJVcGRhdGVTdGF0ZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvdmlkZXIgPSBTY2hlbWEuU3RydWN0KHtcbiAgLy8gT25seSBpbnN0YW5jZUlkIGlzIHN0YWJsZSBlbm91Z2ggZm9yIHByb3ZpZGVyIHJvdXRpbmcuXG4gIGluc3RhbmNlSWQ6IFByb3ZpZGVySW5zdGFuY2VJZCxcbiAgZHJpdmVyOiBQcm92aWRlckRyaXZlcktpbmQsXG4gIGRpc3BsYXlOYW1lOiBTY2hlbWEub3B0aW9uYWwoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgYWNjZW50Q29sb3I6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICAvLyBWYWxpZGF0ZSBkcml2ZXItc3VwcGxpZWQgcmVtb3RlIGljb25zIGFnYWluc3QgdGhlIGRyaXZlcidzIHRydXN0ZWQgb3JpZ2luLlxuICBpY29uVXJsOiBTY2hlbWEub3B0aW9uYWwoVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgyXzA0OCkpKSxcbiAgYmFkZ2VMYWJlbDogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIGNvbnRpbnVhdGlvbjogU2NoZW1hLm9wdGlvbmFsKFNlcnZlclByb3ZpZGVyQ29udGludWF0aW9uKSxcbiAgc2hvd0ludGVyYWN0aW9uTW9kZVRvZ2dsZTogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgcmVwb3J0c0NvbnRleHRXaW5kb3c6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gIHN1cHBvcnRlZFJ1bnRpbWVNb2RlczogU2NoZW1hLm9wdGlvbmFsKEZvcndhcmRDb21wYXRpYmxlQXJyYXkoUnVudGltZU1vZGUpKSxcbiAgcmVxdWlyZXNOZXdUaHJlYWRGb3JNb2RlbENoYW5nZTogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgc3VwcG9ydHNDb252ZXJzYXRpb25Sb2xsYmFjazogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgc3VwcG9ydHNUZXh0R2VuZXJhdGlvbjogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgc2V0dXA6IFNjaGVtYS5vcHRpb25hbChcbiAgICBTY2hlbWEuU3RydWN0KHtcbiAgICAgIGNhbkF1dGhlbnRpY2F0ZTogU2NoZW1hLkJvb2xlYW4sXG4gICAgICBjYW5JbnN0YWxsOiBTY2hlbWEuQm9vbGVhbixcbiAgICAgIGRvY3VtZW50YXRpb25Vcmw6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDJfMDQ4KSkpLFxuICAgIH0pLFxuICApLFxuICBuYXRpdmVTZXNzaW9uczogU2NoZW1hLm9wdGlvbmFsKFxuICAgIFNjaGVtYS5TdHJ1Y3Qoe1xuICAgICAgY2FuTGlzdDogU2NoZW1hLkJvb2xlYW4sXG4gICAgICBjYW5Mb2FkOiBTY2hlbWEuQm9vbGVhbixcbiAgICAgIGNhblJlc3VtZTogU2NoZW1hLkJvb2xlYW4sXG4gICAgICBjYW5EZWxldGU6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gICAgfSksXG4gICksXG4gIGNvbmZpZ3VyYWJsZVByb3ZpZGVyczogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgcnVudGltZVBhdGhzOiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLlN0cnVjdCh7XG4gICAgICBob21lUGF0aDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICAgICAgc2hhZG93SG9tZVBhdGg6IFNjaGVtYS5OdWxsT3IoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgICB9KSxcbiAgKSxcbiAgZW5hYmxlZDogU2NoZW1hLkJvb2xlYW4sXG4gIGluc3RhbGxlZDogU2NoZW1hLkJvb2xlYW4sXG4gIHZlcnNpb246IFNjaGVtYS5OdWxsT3IoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgLy8gVmVyc2lvbiByZXBvcnRlZCBieSB0aGUgaW5zdGFsbGVkIENMSSBmb3IgYSBsb2NhbCBwcm92aWRlciB3aXRoIGEgc2VwYXJhdGVcbiAgLy8gc2VydmVyLiBOdWxsIG1lYW5zIHVua25vd247IGFic2VuY2Uga2VlcHMgbGVnYWN5IHNuYXBzaG90cyBvbiBgdmVyc2lvbmAuXG4gIGluc3RhbGxlZFZlcnNpb246IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuTnVsbE9yKFRyaW1tZWROb25FbXB0eVN0cmluZykpLFxuICBzdGF0dXM6IFNlcnZlclByb3ZpZGVyU3RhdGUsXG4gIGF1dGg6IFNlcnZlclByb3ZpZGVyQXV0aCxcbiAgY2hlY2tlZEF0OiBJc29EYXRlVGltZSxcbiAgbWVzc2FnZTogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIGF2YWlsYWJpbGl0eTogU2NoZW1hLm9wdGlvbmFsKFNlcnZlclByb3ZpZGVyQXZhaWxhYmlsaXR5KSxcbiAgdW5hdmFpbGFibGVSZWFzb246IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBtb2RlbHM6IFNjaGVtYS5BcnJheShTZXJ2ZXJQcm92aWRlck1vZGVsKSxcbiAgLy8gS2VwdCBhcGFydCBmcm9tIGBtb2RlbHNgIHNvIGNsaWVudHMgdGhhdCBwcmVkYXRlIGl0IG5ldmVyIG9mZmVyIHRoZW0uXG4gIHVwZGF0ZVJlcXVpcmVkTW9kZWxzOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkFycmF5KFNlcnZlclByb3ZpZGVyVXBkYXRlUmVxdWlyZWRNb2RlbCkpLFxuICBzbGFzaENvbW1hbmRzOiBTY2hlbWEuQXJyYXkoU2VydmVyUHJvdmlkZXJTbGFzaENvbW1hbmQpLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoW10pKSxcbiAgKSxcbiAgc2tpbGxzOiBTY2hlbWEuQXJyYXkoU2VydmVyUHJvdmlkZXJTa2lsbCkucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChbXSkpKSxcbiAgd29ya3NwYWNlU25hcHNob3RzOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkFycmF5KFNlcnZlclByb3ZpZGVyV29ya3NwYWNlU25hcHNob3QpKSxcbiAgdXNhZ2VMaW1pdHM6IFNjaGVtYS5vcHRpb25hbChTZXJ2ZXJQcm92aWRlclVzYWdlTGltaXRzKSxcbiAgdmVyc2lvbkFkdmlzb3J5OiBTY2hlbWEub3B0aW9uYWxLZXkoU2VydmVyUHJvdmlkZXJWZXJzaW9uQWR2aXNvcnkpLFxuICBjb21wYXRpYmlsaXR5QWR2aXNvcnk6IFNjaGVtYS5vcHRpb25hbEtleShTZXJ2ZXJQcm92aWRlckNvbXBhdGliaWxpdHlBZHZpc29yeSksXG4gIHVwZGF0ZVN0YXRlOiBTY2hlbWEub3B0aW9uYWxLZXkoU2VydmVyUHJvdmlkZXJVcGRhdGVTdGF0ZSksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb3ZpZGVyID0gdHlwZW9mIFNlcnZlclByb3ZpZGVyLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm92aWRlcnMgPSBGb3J3YXJkQ29tcGF0aWJsZUFycmF5KFNlcnZlclByb3ZpZGVyKTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb3ZpZGVycyA9IHR5cGVvZiBTZXJ2ZXJQcm92aWRlcnMuVHlwZTtcblxuZXhwb3J0IGNvbnN0IGlzUHJvdmlkZXJBdmFpbGFibGUgPSAoc25hcHNob3Q6IFNlcnZlclByb3ZpZGVyKTogYm9vbGVhbiA9PlxuICBzbmFwc2hvdC5hdmFpbGFiaWxpdHkgIT09IFwidW5hdmFpbGFibGVcIjtcblxuLyoqIExlZ2FjeSBwcm9kdWNlcnMgb21pdCB0aGlzIGZpZWxkIGFuZCBzdXBwb3J0IHRleHQgZ2VuZXJhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBpc1Byb3ZpZGVyVGV4dEdlbmVyYXRpb25DYXBhYmxlID0gKHNuYXBzaG90OiBTZXJ2ZXJQcm92aWRlcik6IGJvb2xlYW4gPT5cbiAgc25hcHNob3Quc3VwcG9ydHNUZXh0R2VuZXJhdGlvbiAhPT0gZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBPdGxwRW5kcG9pbnRTb3VyY2UgPSBTY2hlbWEuTGl0ZXJhbHMoW1wiZW52aXJvbm1lbnRcIiwgXCJib290c3RyYXBcIiwgXCJzZXR0aW5nc1wiXSk7XG5leHBvcnQgdHlwZSBPdGxwRW5kcG9pbnRTb3VyY2UgPSB0eXBlb2YgT3RscEVuZHBvaW50U291cmNlLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJPYnNlcnZhYmlsaXR5ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGxvZ3NEaXJlY3RvcnlQYXRoOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIGxvY2FsVHJhY2luZ0VuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLFxuICBvdGxwVHJhY2VzVXJsOiBTY2hlbWEub3B0aW9uYWwoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgb3RscFRyYWNlc1NvdXJjZTogU2NoZW1hLm9wdGlvbmFsKE90bHBFbmRwb2ludFNvdXJjZSksXG4gIG90bHBUcmFjZXNWYXJpYWJsZTogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIG90bHBUcmFjZXNFbmFibGVkOiBTY2hlbWEuQm9vbGVhbixcbiAgb3RscE1ldHJpY3NVcmw6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBvdGxwTWV0cmljc1NvdXJjZTogU2NoZW1hLm9wdGlvbmFsKE90bHBFbmRwb2ludFNvdXJjZSksXG4gIG90bHBNZXRyaWNzVmFyaWFibGU6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBvdGxwTWV0cmljc0VuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLFxuICBvdGxwTG9nc1VybDogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIG90bHBMb2dzU291cmNlOiBTY2hlbWEub3B0aW9uYWwoT3RscEVuZHBvaW50U291cmNlKSxcbiAgb3RscExvZ3NWYXJpYWJsZTogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIG90bHBMb2dzRW5hYmxlZDogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChmYWxzZSkpKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyT2JzZXJ2YWJpbGl0eSA9IHR5cGVvZiBTZXJ2ZXJPYnNlcnZhYmlsaXR5LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPdGxwU2lnbmFsID0gU2NoZW1hLkxpdGVyYWxzKFtcInRyYWNlc1wiLCBcIm1ldHJpY3NcIiwgXCJsb2dzXCJdKTtcbmV4cG9ydCB0eXBlIE90bHBTaWduYWwgPSB0eXBlb2YgT3RscFNpZ25hbC5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3RscEVuZHBvaW50Q2hlY2tJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBzaWduYWw6IE90bHBTaWduYWwsXG4gIHVybDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc1BhdHRlcm4oL15odHRwcz86XFwvXFwvLi9pKSksXG59KTtcbmV4cG9ydCB0eXBlIE90bHBFbmRwb2ludENoZWNrSW5wdXQgPSB0eXBlb2YgT3RscEVuZHBvaW50Q2hlY2tJbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3RscEVuZHBvaW50Q2hlY2tSZXN1bHQgPSBTY2hlbWEuVW5pb24oW1xuICBTY2hlbWEuVGFnZ2VkU3RydWN0KFwiQWNjZXB0ZWRcIiwgeyBsYXRlbmN5TXM6IFNjaGVtYS5OdW1iZXIgfSksXG4gIFNjaGVtYS5UYWdnZWRTdHJ1Y3QoXCJSZWplY3RlZFwiLCB7IHN0YXR1czogU2NoZW1hLk51bWJlciB9KSxcbiAgU2NoZW1hLlRhZ2dlZFN0cnVjdChcIlVucmVhY2hhYmxlXCIsIHsgdGltZWRPdXQ6IFNjaGVtYS5Cb29sZWFuIH0pLFxuXSk7XG5leHBvcnQgdHlwZSBPdGxwRW5kcG9pbnRDaGVja1Jlc3VsdCA9IHR5cGVvZiBPdGxwRW5kcG9pbnRDaGVja1Jlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyVHJhY2VEaWFnbm9zdGljc0Vycm9yS2luZCA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwidHJhY2UtZmlsZS1ub3QtZm91bmRcIixcbiAgXCJ0cmFjZS1maWxlLXJlYWQtZmFpbGVkXCIsXG5dKTtcbmV4cG9ydCB0eXBlIFNlcnZlclRyYWNlRGlhZ25vc3RpY3NFcnJvcktpbmQgPSB0eXBlb2YgU2VydmVyVHJhY2VEaWFnbm9zdGljc0Vycm9yS2luZC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyVHJhY2VEaWFnbm9zdGljc1NwYW5TdW1tYXJ5ID0gU2NoZW1hLlN0cnVjdCh7XG4gIG5hbWU6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgY291bnQ6IE5vbk5lZ2F0aXZlSW50LFxuICBmYWlsdXJlQ291bnQ6IE5vbk5lZ2F0aXZlSW50LFxuICB0b3RhbER1cmF0aW9uTXM6IFNjaGVtYS5OdW1iZXIsXG4gIGF2ZXJhZ2VEdXJhdGlvbk1zOiBTY2hlbWEuTnVtYmVyLFxuICBtYXhEdXJhdGlvbk1zOiBTY2hlbWEuTnVtYmVyLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJUcmFjZURpYWdub3N0aWNzU3BhblN1bW1hcnkgPSB0eXBlb2YgU2VydmVyVHJhY2VEaWFnbm9zdGljc1NwYW5TdW1tYXJ5LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJUcmFjZURpYWdub3N0aWNzRmFpbHVyZVN1bW1hcnkgPSBTY2hlbWEuU3RydWN0KHtcbiAgbmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBjYXVzZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBjb3VudDogTm9uTmVnYXRpdmVJbnQsXG4gIGxhc3RTZWVuQXQ6IFNjaGVtYS5EYXRlVGltZVV0YyxcbiAgdHJhY2VJZDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBzcGFuSWQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyVHJhY2VEaWFnbm9zdGljc0ZhaWx1cmVTdW1tYXJ5ID0gdHlwZW9mIFNlcnZlclRyYWNlRGlhZ25vc3RpY3NGYWlsdXJlU3VtbWFyeS5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyVHJhY2VEaWFnbm9zdGljc1JlY2VudEZhaWx1cmUgPSBTY2hlbWEuU3RydWN0KHtcbiAgbmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBjYXVzZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBkdXJhdGlvbk1zOiBTY2hlbWEuTnVtYmVyLFxuICBlbmRlZEF0OiBTY2hlbWEuRGF0ZVRpbWVVdGMsXG4gIHRyYWNlSWQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgc3BhbklkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclRyYWNlRGlhZ25vc3RpY3NSZWNlbnRGYWlsdXJlID0gdHlwZW9mIFNlcnZlclRyYWNlRGlhZ25vc3RpY3NSZWNlbnRGYWlsdXJlLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJUcmFjZURpYWdub3N0aWNzU3Bhbk9jY3VycmVuY2UgPSBTY2hlbWEuU3RydWN0KHtcbiAgbmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBkdXJhdGlvbk1zOiBTY2hlbWEuTnVtYmVyLFxuICBlbmRlZEF0OiBTY2hlbWEuRGF0ZVRpbWVVdGMsXG4gIHRyYWNlSWQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgc3BhbklkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclRyYWNlRGlhZ25vc3RpY3NTcGFuT2NjdXJyZW5jZSA9IHR5cGVvZiBTZXJ2ZXJUcmFjZURpYWdub3N0aWNzU3Bhbk9jY3VycmVuY2UuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclRyYWNlRGlhZ25vc3RpY3NMb2dFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBzcGFuTmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBsZXZlbDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBtZXNzYWdlOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIHNlZW5BdDogU2NoZW1hLkRhdGVUaW1lVXRjLFxuICB0cmFjZUlkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIHNwYW5JZDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJUcmFjZURpYWdub3N0aWNzTG9nRXZlbnQgPSB0eXBlb2YgU2VydmVyVHJhY2VEaWFnbm9zdGljc0xvZ0V2ZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJUcmFjZURpYWdub3N0aWNzUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRyYWNlRmlsZVBhdGg6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgc2Nhbm5lZEZpbGVQYXRoczogU2NoZW1hLkFycmF5KFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIHJlYWRBdDogU2NoZW1hLkRhdGVUaW1lVXRjLFxuICByZWNvcmRDb3VudDogTm9uTmVnYXRpdmVJbnQsXG4gIHBhcnNlRXJyb3JDb3VudDogTm9uTmVnYXRpdmVJbnQsXG4gIGZpcnN0U3BhbkF0OiBTY2hlbWEuT3B0aW9uKFNjaGVtYS5EYXRlVGltZVV0YyksXG4gIGxhc3RTcGFuQXQ6IFNjaGVtYS5PcHRpb24oU2NoZW1hLkRhdGVUaW1lVXRjKSxcbiAgZmFpbHVyZUNvdW50OiBOb25OZWdhdGl2ZUludCxcbiAgaW50ZXJydXB0aW9uQ291bnQ6IE5vbk5lZ2F0aXZlSW50LFxuICBzbG93U3BhblRocmVzaG9sZE1zOiBOb25OZWdhdGl2ZUludCxcbiAgc2xvd1NwYW5Db3VudDogTm9uTmVnYXRpdmVJbnQsXG4gIGxvZ0xldmVsQ291bnRzOiBTY2hlbWEuUmVjb3JkKFRyaW1tZWROb25FbXB0eVN0cmluZywgTm9uTmVnYXRpdmVJbnQpLFxuICB0b3BTcGFuc0J5Q291bnQ6IFNjaGVtYS5BcnJheShTZXJ2ZXJUcmFjZURpYWdub3N0aWNzU3BhblN1bW1hcnkpLFxuICBzbG93ZXN0U3BhbnM6IFNjaGVtYS5BcnJheShTZXJ2ZXJUcmFjZURpYWdub3N0aWNzU3Bhbk9jY3VycmVuY2UpLFxuICBjb21tb25GYWlsdXJlczogU2NoZW1hLkFycmF5KFNlcnZlclRyYWNlRGlhZ25vc3RpY3NGYWlsdXJlU3VtbWFyeSksXG4gIGxhdGVzdEZhaWx1cmVzOiBTY2hlbWEuQXJyYXkoU2VydmVyVHJhY2VEaWFnbm9zdGljc1JlY2VudEZhaWx1cmUpLFxuICBsYXRlc3RXYXJuaW5nQW5kRXJyb3JMb2dzOiBTY2hlbWEuQXJyYXkoU2VydmVyVHJhY2VEaWFnbm9zdGljc0xvZ0V2ZW50KSxcbiAgcGFydGlhbEZhaWx1cmU6IFNjaGVtYS5PcHRpb24oU2NoZW1hLkJvb2xlYW4pLFxuICBlcnJvcjogU2NoZW1hLk9wdGlvbihcbiAgICBTY2hlbWEuU3RydWN0KHtcbiAgICAgIGtpbmQ6IFNlcnZlclRyYWNlRGlhZ25vc3RpY3NFcnJvcktpbmQsXG4gICAgICBtZXNzYWdlOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gICAgfSksXG4gICksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclRyYWNlRGlhZ25vc3RpY3NSZXN1bHQgPSB0eXBlb2YgU2VydmVyVHJhY2VEaWFnbm9zdGljc1Jlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvY2Vzc1NpZ25hbCA9IFNjaGVtYS5MaXRlcmFscyhbXCJTSUdJTlRcIiwgXCJTSUdLSUxMXCJdKTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb2Nlc3NTaWduYWwgPSB0eXBlb2YgU2VydmVyUHJvY2Vzc1NpZ25hbC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvY2Vzc0RpYWdub3N0aWNzRW50cnkgPSBTY2hlbWEuU3RydWN0KHtcbiAgcGlkOiBQb3NpdGl2ZUludCxcbiAgc3RhcnRUaW1lTXM6IE5vbk5lZ2F0aXZlSW50LFxuICBwcGlkOiBOb25OZWdhdGl2ZUludCxcbiAgcGdpZDogU2NoZW1hLk9wdGlvbihTY2hlbWEuSW50KSxcbiAgc3RhdHVzOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIGNwdVBlcmNlbnQ6IFNjaGVtYS5OdW1iZXIsXG4gIHJzc0J5dGVzOiBOb25OZWdhdGl2ZUludCxcbiAgZWxhcHNlZDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBjb21tYW5kOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIGRlcHRoOiBOb25OZWdhdGl2ZUludCxcbiAgY2hpbGRQaWRzOiBTY2hlbWEuQXJyYXkoUG9zaXRpdmVJbnQpLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm9jZXNzRGlhZ25vc3RpY3NFbnRyeSA9IHR5cGVvZiBTZXJ2ZXJQcm9jZXNzRGlhZ25vc3RpY3NFbnRyeS5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvY2Vzc0RpYWdub3N0aWNzUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHNlcnZlclBpZDogUG9zaXRpdmVJbnQsXG4gIHJlYWRBdDogU2NoZW1hLkRhdGVUaW1lVXRjLFxuICBwcm9jZXNzQ291bnQ6IE5vbk5lZ2F0aXZlSW50LFxuICB0b3RhbFJzc0J5dGVzOiBOb25OZWdhdGl2ZUludCxcbiAgdG90YWxDcHVQZXJjZW50OiBTY2hlbWEuTnVtYmVyLFxuICBwcm9jZXNzZXM6IFNjaGVtYS5BcnJheShTZXJ2ZXJQcm9jZXNzRGlhZ25vc3RpY3NFbnRyeSksXG4gIGVycm9yOiBTY2hlbWEuT3B0aW9uKFxuICAgIFNjaGVtYS5TdHJ1Y3Qoe1xuICAgICAgbWVzc2FnZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICAgIH0pLFxuICApLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm9jZXNzRGlhZ25vc3RpY3NSZXN1bHQgPSB0eXBlb2YgU2VydmVyUHJvY2Vzc0RpYWdub3N0aWNzUmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm9jZXNzUmVzb3VyY2VIaXN0b3J5SW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgd2luZG93TXM6IE5vbk5lZ2F0aXZlSW50LFxuICBidWNrZXRNczogTm9uTmVnYXRpdmVJbnQsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclByb2Nlc3NSZXNvdXJjZUhpc3RvcnlJbnB1dCA9IHR5cGVvZiBTZXJ2ZXJQcm9jZXNzUmVzb3VyY2VIaXN0b3J5SW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclByb2Nlc3NSZXNvdXJjZUhpc3RvcnlCdWNrZXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgc3RhcnRlZEF0OiBTY2hlbWEuRGF0ZVRpbWVVdGMsXG4gIGVuZGVkQXQ6IFNjaGVtYS5EYXRlVGltZVV0YyxcbiAgYXZnQ3B1UGVyY2VudDogU2NoZW1hLk51bWJlcixcbiAgbWF4Q3B1UGVyY2VudDogU2NoZW1hLk51bWJlcixcbiAgbWF4UnNzQnl0ZXM6IE5vbk5lZ2F0aXZlSW50LFxuICBtYXhQcm9jZXNzQ291bnQ6IE5vbk5lZ2F0aXZlSW50LFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm9jZXNzUmVzb3VyY2VIaXN0b3J5QnVja2V0ID0gdHlwZW9mIFNlcnZlclByb2Nlc3NSZXNvdXJjZUhpc3RvcnlCdWNrZXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclByb2Nlc3NSZXNvdXJjZUhpc3RvcnlTdW1tYXJ5ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHByb2Nlc3NLZXk6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgcGlkOiBQb3NpdGl2ZUludCxcbiAgcHBpZDogTm9uTmVnYXRpdmVJbnQsXG4gIGNvbW1hbmQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgZGVwdGg6IE5vbk5lZ2F0aXZlSW50LFxuICBpc1NlcnZlclJvb3Q6IFNjaGVtYS5Cb29sZWFuLFxuICBmaXJzdFNlZW5BdDogU2NoZW1hLkRhdGVUaW1lVXRjLFxuICBsYXN0U2VlbkF0OiBTY2hlbWEuRGF0ZVRpbWVVdGMsXG4gIGN1cnJlbnRDcHVQZXJjZW50OiBTY2hlbWEuTnVtYmVyLFxuICBhdmdDcHVQZXJjZW50OiBTY2hlbWEuTnVtYmVyLFxuICBtYXhDcHVQZXJjZW50OiBTY2hlbWEuTnVtYmVyLFxuICBjcHVTZWNvbmRzQXBwcm94OiBTY2hlbWEuTnVtYmVyLFxuICBjdXJyZW50UnNzQnl0ZXM6IE5vbk5lZ2F0aXZlSW50LFxuICBtYXhSc3NCeXRlczogTm9uTmVnYXRpdmVJbnQsXG4gIHNhbXBsZUNvdW50OiBOb25OZWdhdGl2ZUludCxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyUHJvY2Vzc1Jlc291cmNlSGlzdG9yeVN1bW1hcnkgPSB0eXBlb2YgU2VydmVyUHJvY2Vzc1Jlc291cmNlSGlzdG9yeVN1bW1hcnkuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclByb2Nlc3NSZXNvdXJjZUhpc3RvcnlGYWlsdXJlVGFnID0gU2NoZW1hLkxpdGVyYWxzKFtcbiAgXCJQcm9jZXNzRGlhZ25vc3RpY3NRdWVyeVRpbWVvdXRFcnJvclwiLFxuICBcIlByb2Nlc3NEaWFnbm9zdGljc1F1ZXJ5RmFpbGVkRXJyb3JcIixcbiAgXCJQcm9jZXNzRGlhZ25vc3RpY3NTZXJ2ZXJQcm9jZXNzU2lnbmFsRXJyb3JcIixcbiAgXCJQcm9jZXNzRGlhZ25vc3RpY3NOb3REZXNjZW5kYW50RXJyb3JcIixcbiAgXCJQcm9jZXNzRGlhZ25vc3RpY3NTaWduYWxGYWlsZWRFcnJvclwiLFxuXSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm9jZXNzUmVzb3VyY2VIaXN0b3J5RmFpbHVyZVRhZyA9XG4gIHR5cGVvZiBTZXJ2ZXJQcm9jZXNzUmVzb3VyY2VIaXN0b3J5RmFpbHVyZVRhZy5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUHJvY2Vzc1Jlc291cmNlSGlzdG9yeVJlc3VsdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICByZWFkQXQ6IFNjaGVtYS5EYXRlVGltZVV0YyxcbiAgd2luZG93TXM6IE5vbk5lZ2F0aXZlSW50LFxuICBidWNrZXRNczogTm9uTmVnYXRpdmVJbnQsXG4gIHNhbXBsZUludGVydmFsTXM6IE5vbk5lZ2F0aXZlSW50LFxuICByZXRhaW5lZFNhbXBsZUNvdW50OiBOb25OZWdhdGl2ZUludCxcbiAgdG90YWxDcHVTZWNvbmRzQXBwcm94OiBTY2hlbWEuTnVtYmVyLFxuICBidWNrZXRzOiBTY2hlbWEuQXJyYXkoU2VydmVyUHJvY2Vzc1Jlc291cmNlSGlzdG9yeUJ1Y2tldCksXG4gIHRvcFByb2Nlc3NlczogU2NoZW1hLkFycmF5KFNlcnZlclByb2Nlc3NSZXNvdXJjZUhpc3RvcnlTdW1tYXJ5KSxcbiAgZXJyb3I6IFNjaGVtYS5PcHRpb24oXG4gICAgU2NoZW1hLlN0cnVjdCh7XG4gICAgICBmYWlsdXJlVGFnOiBTZXJ2ZXJQcm9jZXNzUmVzb3VyY2VIaXN0b3J5RmFpbHVyZVRhZyxcbiAgICAgIG1lc3NhZ2U6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgICB9KSxcbiAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyUHJvY2Vzc1Jlc291cmNlSGlzdG9yeVJlc3VsdCA9IHR5cGVvZiBTZXJ2ZXJQcm9jZXNzUmVzb3VyY2VIaXN0b3J5UmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTaWduYWxQcm9jZXNzSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgcGlkOiBQb3NpdGl2ZUludCxcbiAgc3RhcnRUaW1lTXM6IE5vbk5lZ2F0aXZlSW50LFxuICBzaWduYWw6IFNlcnZlclByb2Nlc3NTaWduYWwsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclNpZ25hbFByb2Nlc3NJbnB1dCA9IHR5cGVvZiBTZXJ2ZXJTaWduYWxQcm9jZXNzSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclNpZ25hbFByb2Nlc3NSZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgcGlkOiBQb3NpdGl2ZUludCxcbiAgc2lnbmFsOiBTZXJ2ZXJQcm9jZXNzU2lnbmFsLFxuICBzaWduYWxlZDogU2NoZW1hLkJvb2xlYW4sXG4gIG1lc3NhZ2U6IFNjaGVtYS5PcHRpb24oVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyU2lnbmFsUHJvY2Vzc1Jlc3VsdCA9IHR5cGVvZiBTZXJ2ZXJTaWduYWxQcm9jZXNzUmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBFbnZpcm9ubWVudFRoZW1lQ29sb3IgPSBTY2hlbWEuU3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNQYXR0ZXJuKC9eIyg/OlswLTlhLWZBLUZdezN9fFswLTlhLWZBLUZdezZ9KSQvKSxcbik7XG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudFRoZW1lQ29sb3IgPSB0eXBlb2YgRW52aXJvbm1lbnRUaGVtZUNvbG9yLlR5cGU7XG5cbi8qKiBSZXNlcnZlIGFwcGVhcmFuY2Uga2V5d29yZHMgc28gcHVibGlzaGVkIHRoZW1lcyBjYW5ub3QgcmVwbGFjZSBzdG9jayBwcmVmZXJlbmNlcy4gKi9cbmV4cG9ydCBjb25zdCBFbnZpcm9ubWVudFRoZW1lSWQgPSBTY2hlbWEuU3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNQYXR0ZXJuKC9eKD8hKD86c3lzdGVtfGxpZ2h0fGRhcmspJClbYS16MC05XSg/OlthLXowLTktXXswLDQ3fSkkLyksXG4pO1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRUaGVtZUlkID0gdHlwZW9mIEVudmlyb25tZW50VGhlbWVJZC5UeXBlO1xuXG5jb25zdCBFbnZpcm9ubWVudFRoZW1lQ29sb3JzID0gU2NoZW1hLlJlY29yZChcbiAgU2NoZW1hLlN0cmluZy5jaGVjayhTY2hlbWEuaXNQYXR0ZXJuKC9eW2EtekEtWl1bYS16QS1aMC05XXswLDYzfSQvKSksXG4gIFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoNjQpKSxcbik7XG5cbmNvbnN0IGVudmlyb25tZW50VGhlbWVGaWVsZHMgPSB7XG4gIHZlcnNpb246IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuTGl0ZXJhbCgxKSksXG4gIG5hbWU6IFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoNDgpKSxcbiAgYXBwZWFyYW5jZTogU2NoZW1hLkxpdGVyYWxzKFtcImxpZ2h0XCIsIFwiZGFya1wiXSksXG4gIC8qKiBEZXJpdmUgdGhlIHBhbGV0dGUgZnJvbSBjYW52YXMvYWNjZW50LCB0aGVuIG92ZXJsYXkgY29sb3JzOyB3aXRob3V0IHRoZW0sIGNvbG9ycyBpcyB0aGUgcGFsZXR0ZS4gKi9cbiAgY2FudmFzOiBTY2hlbWEub3B0aW9uYWwoRW52aXJvbm1lbnRUaGVtZUNvbG9yKSxcbiAgYWNjZW50OiBTY2hlbWEub3B0aW9uYWwoRW52aXJvbm1lbnRUaGVtZUNvbG9yKSxcbiAgY29sb3JzOiBTY2hlbWEub3B0aW9uYWwoRW52aXJvbm1lbnRUaGVtZUNvbG9ycyksXG4gIHZhcmlhbnRzOiBTY2hlbWEub3B0aW9uYWwoXG4gICAgU2NoZW1hLlN0cnVjdCh7XG4gICAgICBsaWdodDogU2NoZW1hLm9wdGlvbmFsKEVudmlyb25tZW50VGhlbWVDb2xvcnMpLFxuICAgICAgZGFyazogU2NoZW1hLm9wdGlvbmFsKEVudmlyb25tZW50VGhlbWVDb2xvcnMpLFxuICAgIH0pLFxuICApLFxufTtcblxuZXhwb3J0IGNvbnN0IEVudmlyb25tZW50VGhlbWVGaWxlID0gU2NoZW1hLlN0cnVjdChlbnZpcm9ubWVudFRoZW1lRmllbGRzKTtcbmV4cG9ydCB0eXBlIEVudmlyb25tZW50VGhlbWVGaWxlID0gdHlwZW9mIEVudmlyb25tZW50VGhlbWVGaWxlLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBFbnZpcm9ubWVudFRoZW1lID0gU2NoZW1hLlN0cnVjdCh7XG4gIGlkOiBFbnZpcm9ubWVudFRoZW1lSWQsXG4gIC4uLmVudmlyb25tZW50VGhlbWVGaWVsZHMsXG59KTtcbmV4cG9ydCB0eXBlIEVudmlyb25tZW50VGhlbWUgPSB0eXBlb2YgRW52aXJvbm1lbnRUaGVtZS5UeXBlO1xuXG5leHBvcnQgZnVuY3Rpb24gZW52aXJvbm1lbnRUaGVtZUZpbGVIYXNDb2xvcnMoZmlsZTogRW52aXJvbm1lbnRUaGVtZUZpbGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoZmlsZS5jYW52YXMgIT09IHVuZGVmaW5lZCAmJiBmaWxlLmFjY2VudCAhPT0gdW5kZWZpbmVkKSB8fFxuICAgIChmaWxlLmNvbG9ycyAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKGZpbGUuY29sb3JzKS5sZW5ndGggPiAwKVxuICApO1xufVxuXG4vKiogdGFpbG5ldCBtZWFucyB0aGlzIG1hY2hpbmUncyBUYWlsc2NhbGUgaW50ZXJmYWNlOyBvdGhlciBwcml2YXRlIGFkZHJlc3NlcyBhcmUgbGFuLiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlckRpcmVjdEVuZHBvaW50S2luZCA9IFNjaGVtYS5MaXRlcmFscyhbXCJsYW5cIiwgXCJ0YWlsbmV0XCJdKTtcbmV4cG9ydCB0eXBlIFNlcnZlckRpcmVjdEVuZHBvaW50S2luZCA9IHR5cGVvZiBTZXJ2ZXJEaXJlY3RFbmRwb2ludEtpbmQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlckRpcmVjdEVuZHBvaW50ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGtpbmQ6IFNlcnZlckRpcmVjdEVuZHBvaW50S2luZCxcbiAgaHR0cEJhc2VVcmw6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyRGlyZWN0RW5kcG9pbnQgPSB0eXBlb2YgU2VydmVyRGlyZWN0RW5kcG9pbnQuVHlwZTtcblxuLyoqXG4gKiBBIHN0cmV0Y2ggd2hlcmUgdGhlIHNlcnZlcidzIGV2ZW50IGxvb3AgY291bGQgbm90IHJ1biwgc28gaXQgYW5zd2VyZWRcbiAqIG5vdGhpbmcgYW5kIGNsaWVudHMgbWF5IGhhdmUgZHJvcHBlZCB0aGUgY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlckV2ZW50TG9vcFN0YWxsID0gU2NoZW1hLlN0cnVjdCh7XG4gIGRldGVjdGVkQXQ6IElzb0RhdGVUaW1lLFxuICBkdXJhdGlvbk1zOiBOb25OZWdhdGl2ZUludCxcbiAgLyoqIE9uZS1taW51dGUgbG9hZCBhdmVyYWdlIHdoZW4gdGhlIHN0YWxsIHdhcyBzZWVuLiBBYnNlbnQgb24gV2luZG93cywgd2hpY2ggaGFzIG5vbmUuICovXG4gIGxvYWRBdmVyYWdlOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLk51bWJlciksXG4gIGNwdUNvdW50OiBQb3NpdGl2ZUludCxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyRXZlbnRMb29wU3RhbGwgPSB0eXBlb2YgU2VydmVyRXZlbnRMb29wU3RhbGwuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlckNvbmZpZyA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBlbnZpcm9ubWVudDogRXhlY3V0aW9uRW52aXJvbm1lbnREZXNjcmlwdG9yLFxuICBhdXRoOiBTZXJ2ZXJBdXRoRGVzY3JpcHRvcixcbiAgY3dkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIGtleWJpbmRpbmdzQ29uZmlnUGF0aDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBrZXliaW5kaW5nczogUmVzb2x2ZWRLZXliaW5kaW5nc0NvbmZpZyxcbiAgaXNzdWVzOiBTZXJ2ZXJDb25maWdJc3N1ZXMsXG4gIHByb3ZpZGVyczogU2VydmVyUHJvdmlkZXJzLFxuICBhdmFpbGFibGVFZGl0b3JzOiBGb3J3YXJkQ29tcGF0aWJsZUFycmF5KEVkaXRvcklkKSxcbiAgcmVtb3RlT3BlblRhcmdldHM6IFNjaGVtYS5vcHRpb25hbEtleShGb3J3YXJkQ29tcGF0aWJsZUFycmF5KFJlbW90ZU9wZW5UYXJnZXQpKSxcbiAgLyoqIEhpbnRzIG9ubHk7IHZlcmlmeSBlYWNoIGFkZHJlc3MgYW5zd2VycyBhcyB0aGlzIGVudmlyb25tZW50LiAqL1xuICBkaXJlY3RFbmRwb2ludHM6IFNjaGVtYS5vcHRpb25hbEtleShGb3J3YXJkQ29tcGF0aWJsZUFycmF5KFNlcnZlckRpcmVjdEVuZHBvaW50KSksXG4gIG9ic2VydmFiaWxpdHk6IFNlcnZlck9ic2VydmFiaWxpdHksXG4gIHNldHRpbmdzOiBTZXJ2ZXJTZXR0aW5ncyxcbiAgc2hlbGxSZXN1bWVDb21wbGV0aW9uTWFya2VyOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICAvKipcbiAgICogVGhlIHNoZWxsIGNhbiBsZWF2ZSBpZGxlIHN1YmFnZW50IGNoaWxkcmVuIG91dCBvZiBzbmFwc2hvdHMgKGBvbWl0SWRsZVN1YmFnZW50c2ApLCBhbmRcbiAgICogYGdldFRocmVhZEZhbWlseWAgYW5kIGBnZXRXb3JrdHJlZVRocmVhZElkc2Agc2VydmUgdGhlIHJvd3MgaXQgbGVhdmVzIG91dC5cbiAgICovXG4gIHNoZWxsVGhyZWFkRmFtaWxpZXM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHNoZWxsUmV2ZWFsSW5GaWxlTWFuYWdlcjogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgc2hlbGxSZXZlYWxJbkZpbGVNYW5hZ2VyS2luZDogU2NoZW1hLm9wdGlvbmFsS2V5KEZpbGVNYW5hZ2VyUmV2ZWFsS2luZCksXG4gIHRocmVhZFJlc3VtZUNvbXBsZXRpb25NYXJrZXI6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIC8qKiBTZW5kIHdpbmRvdyBmaWVsZHMgb25seSB3aGVuIGFkdmVydGlzZWQuICovXG4gIHRocmVhZFNuYXBzaG90UGFnaW5hdGlvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgcmVhc29uaW5nTWVzc2FnZXM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHRocmVhZEZpbmQ6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHRocmVhZEZpbmRQcm9ncmVzc2l2ZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgc2NyYXRjaFdvcmtzcGFjZVJvb3Q6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBuZXdQcm9qZWN0c1Jvb3Q6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICAvKipcbiAgICogVGhlIGxhdGVzdCBzdGFsbCBsb25nIGVub3VnaCB0byBub3RpY2UsIHNlbnQgb25seSBmb3IgYSBmZXcgbWludXRlcyBhZnRlclxuICAgKiBpdC4gQSBjbGllbnQgdGhhdCByZWNvbm5lY3RzIHJlYWRzIGl0IHRvIHNheSB3aHkgdGhlIGhvc3Qgc3RvcHBlZFxuICAgKiBhbnN3ZXJpbmcuIENsaWVudHMgZG8gbm90IGNhY2hlIGl0LCBzaW5jZSBpdCBkZXNjcmliZXMgdGhlIGhvc3QgYXQgY29ubmVjdC5cbiAgICovXG4gIGxhc3RFdmVudExvb3BTdGFsbDogU2NoZW1hLm9wdGlvbmFsS2V5KFNlcnZlckV2ZW50TG9vcFN0YWxsKSxcbiAgLyoqXG4gICAqIE5ldmVyIHNlbnQgaW4gYSBjb25maWcgc25hcHNob3Q6IHRoZSB0aGVtZSBzdHJlYW0gZW1pdHMgdGhlIGN1cnJlbnQgc2V0XG4gICAqIGJlZm9yZSBhbnkgY2hhbmdlLCBzbyBhIHNuYXBzaG90IGNhcnJ5aW5nIGl0IHRvbyB3b3VsZCBoYW5kIGV2ZXJ5XG4gICAqIHN1YnNjcmliZXIgdGhlIHNhbWUgYXJyYXkgdHdpY2UgcGVyIGNvbm5lY3QuXG4gICAqL1xuICBlbnZpcm9ubWVudFRoZW1lczogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5BcnJheShFbnZpcm9ubWVudFRoZW1lKSksXG4gIC8qKiBTdHJlYW0tb25seSBhbmQgb3B0LWluOyB0aGUgc291cmNlIHN0cmVhbSBlbWl0cyB0aGUgY3VycmVudCBzZXQgb24gc3Vic2NyaWJlLiAqL1xuICB1c2FnZUxpbWl0U291cmNlczogU2NoZW1hLm9wdGlvbmFsKFVzYWdlTGltaXRTb3VyY2VTbmFwc2hvdHMpLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJDb25maWcgPSB0eXBlb2YgU2VydmVyQ29uZmlnLlR5cGU7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRW52aXJvbm1lbnRNYWNoaW5lS2luZChcbiAgY29uZmlnOiB7XG4gICAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IFBpY2s8RXhlY3V0aW9uRW52aXJvbm1lbnREZXNjcmlwdG9yLCBcInBsYXRmb3JtXCI+O1xuICAgIHJlYWRvbmx5IHNldHRpbmdzPzogUGljazxTZXJ2ZXJTZXR0aW5ncywgXCJlbnZpcm9ubWVudEljb25cIj47XG4gIH0gfCBudWxsLFxuKTogRW52aXJvbm1lbnRNYWNoaW5lS2luZCB7XG4gIHJldHVybiBjb25maWc/LnNldHRpbmdzPy5lbnZpcm9ubWVudEljb24gPz8gY29uZmlnPy5lbnZpcm9ubWVudC5wbGF0Zm9ybS5tYWNoaW5lID8/IFwic2VydmVyXCI7XG59XG5cbmNvbnN0IFNlcnZlclVwc2VydEtleWJpbmRpbmdSZXBsYWNlVGFyZ2V0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGtleTogS2V5YmluZGluZ1ZhbHVlLFxuICBjb21tYW5kOiBLZXliaW5kaW5nQ29tbWFuZCxcbiAgd2hlbjogU2NoZW1hLm9wdGlvbmFsKEtleWJpbmRpbmdXaGVuKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgU2VydmVyVXBzZXJ0S2V5YmluZGluZ0lucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGtleTogS2V5YmluZGluZ1ZhbHVlLFxuICBjb21tYW5kOiBLZXliaW5kaW5nQ29tbWFuZCxcbiAgd2hlbjogU2NoZW1hLm9wdGlvbmFsKEtleWJpbmRpbmdXaGVuKSxcbiAgcmVwbGFjZTogU2NoZW1hLm9wdGlvbmFsKFNlcnZlclVwc2VydEtleWJpbmRpbmdSZXBsYWNlVGFyZ2V0KSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyVXBzZXJ0S2V5YmluZGluZ0lucHV0ID0gdHlwZW9mIFNlcnZlclVwc2VydEtleWJpbmRpbmdJbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyUmVtb3ZlS2V5YmluZGluZ0lucHV0ID0gU2VydmVyVXBzZXJ0S2V5YmluZGluZ1JlcGxhY2VUYXJnZXQ7XG5leHBvcnQgdHlwZSBTZXJ2ZXJSZW1vdmVLZXliaW5kaW5nSW5wdXQgPSB0eXBlb2YgU2VydmVyUmVtb3ZlS2V5YmluZGluZ0lucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJVcHNlcnRLZXliaW5kaW5nUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGtleWJpbmRpbmdzOiBSZXNvbHZlZEtleWJpbmRpbmdzQ29uZmlnLFxuICBpc3N1ZXM6IFNlcnZlckNvbmZpZ0lzc3Vlcyxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyVXBzZXJ0S2V5YmluZGluZ1Jlc3VsdCA9IHR5cGVvZiBTZXJ2ZXJVcHNlcnRLZXliaW5kaW5nUmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJSZW1vdmVLZXliaW5kaW5nUmVzdWx0ID0gU2VydmVyVXBzZXJ0S2V5YmluZGluZ1Jlc3VsdDtcbmV4cG9ydCB0eXBlIFNlcnZlclJlbW92ZUtleWJpbmRpbmdSZXN1bHQgPSB0eXBlb2YgU2VydmVyUmVtb3ZlS2V5YmluZGluZ1Jlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyQ29uZmlnVXBkYXRlZFBheWxvYWQgPSBTY2hlbWEuU3RydWN0KHtcbiAgaXNzdWVzOiBTZXJ2ZXJDb25maWdJc3N1ZXMsXG4gIHByb3ZpZGVyczogU2VydmVyUHJvdmlkZXJzLFxuICBzZXR0aW5nczogU2NoZW1hLm9wdGlvbmFsKFNlcnZlclNldHRpbmdzKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyQ29uZmlnVXBkYXRlZFBheWxvYWQgPSB0eXBlb2YgU2VydmVyQ29uZmlnVXBkYXRlZFBheWxvYWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlckNvbmZpZ0tleWJpbmRpbmdzVXBkYXRlZFBheWxvYWQgPSBTY2hlbWEuU3RydWN0KHtcbiAga2V5YmluZGluZ3M6IFJlc29sdmVkS2V5YmluZGluZ3NDb25maWcsXG4gIGlzc3VlczogU2VydmVyQ29uZmlnSXNzdWVzLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJDb25maWdLZXliaW5kaW5nc1VwZGF0ZWRQYXlsb2FkID1cbiAgdHlwZW9mIFNlcnZlckNvbmZpZ0tleWJpbmRpbmdzVXBkYXRlZFBheWxvYWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlckNvbmZpZ1Byb3ZpZGVyU3RhdHVzZXNQYXlsb2FkID0gU2NoZW1hLlN0cnVjdCh7XG4gIHByb3ZpZGVyczogU2VydmVyUHJvdmlkZXJzLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJDb25maWdQcm92aWRlclN0YXR1c2VzUGF5bG9hZCA9IHR5cGVvZiBTZXJ2ZXJDb25maWdQcm92aWRlclN0YXR1c2VzUGF5bG9hZC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyQ29uZmlnU2V0dGluZ3NVcGRhdGVkUGF5bG9hZCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBzZXR0aW5nczogU2VydmVyU2V0dGluZ3MsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlckNvbmZpZ1NldHRpbmdzVXBkYXRlZFBheWxvYWQgPSB0eXBlb2YgU2VydmVyQ29uZmlnU2V0dGluZ3NVcGRhdGVkUGF5bG9hZC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyQ29uZmlnU3RyZWFtU25hcHNob3RFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiBTY2hlbWEuTGl0ZXJhbCgxKSxcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJzbmFwc2hvdFwiKSxcbiAgY29uZmlnOiBTZXJ2ZXJDb25maWcsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlckNvbmZpZ1N0cmVhbVNuYXBzaG90RXZlbnQgPSB0eXBlb2YgU2VydmVyQ29uZmlnU3RyZWFtU25hcHNob3RFdmVudC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyQ29uZmlnU3RyZWFtS2V5YmluZGluZ3NVcGRhdGVkRXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdmVyc2lvbjogU2NoZW1hLkxpdGVyYWwoMSksXG4gIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwia2V5YmluZGluZ3NVcGRhdGVkXCIpLFxuICBwYXlsb2FkOiBTZXJ2ZXJDb25maWdLZXliaW5kaW5nc1VwZGF0ZWRQYXlsb2FkLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJDb25maWdTdHJlYW1LZXliaW5kaW5nc1VwZGF0ZWRFdmVudCA9XG4gIHR5cGVvZiBTZXJ2ZXJDb25maWdTdHJlYW1LZXliaW5kaW5nc1VwZGF0ZWRFdmVudC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyQ29uZmlnU3RyZWFtUHJvdmlkZXJTdGF0dXNlc0V2ZW50ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHZlcnNpb246IFNjaGVtYS5MaXRlcmFsKDEpLFxuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcInByb3ZpZGVyU3RhdHVzZXNcIiksXG4gIHBheWxvYWQ6IFNlcnZlckNvbmZpZ1Byb3ZpZGVyU3RhdHVzZXNQYXlsb2FkLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJDb25maWdTdHJlYW1Qcm92aWRlclN0YXR1c2VzRXZlbnQgPVxuICB0eXBlb2YgU2VydmVyQ29uZmlnU3RyZWFtUHJvdmlkZXJTdGF0dXNlc0V2ZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJDb25maWdTdHJlYW1TZXR0aW5nc1VwZGF0ZWRFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiBTY2hlbWEuTGl0ZXJhbCgxKSxcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJzZXR0aW5nc1VwZGF0ZWRcIiksXG4gIHBheWxvYWQ6IFNlcnZlckNvbmZpZ1NldHRpbmdzVXBkYXRlZFBheWxvYWQsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlckNvbmZpZ1N0cmVhbVNldHRpbmdzVXBkYXRlZEV2ZW50ID1cbiAgdHlwZW9mIFNlcnZlckNvbmZpZ1N0cmVhbVNldHRpbmdzVXBkYXRlZEV2ZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJDb25maWdFbnZpcm9ubWVudFRoZW1lc1VwZGF0ZWRQYXlsb2FkID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRoZW1lczogU2NoZW1hLkFycmF5KEVudmlyb25tZW50VGhlbWUpLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJDb25maWdFbnZpcm9ubWVudFRoZW1lc1VwZGF0ZWRQYXlsb2FkID1cbiAgdHlwZW9mIFNlcnZlckNvbmZpZ0Vudmlyb25tZW50VGhlbWVzVXBkYXRlZFBheWxvYWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlckNvbmZpZ1N0cmVhbUVudmlyb25tZW50VGhlbWVzVXBkYXRlZEV2ZW50ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHZlcnNpb246IFNjaGVtYS5MaXRlcmFsKDEpLFxuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcImVudmlyb25tZW50VGhlbWVzVXBkYXRlZFwiKSxcbiAgcGF5bG9hZDogU2VydmVyQ29uZmlnRW52aXJvbm1lbnRUaGVtZXNVcGRhdGVkUGF5bG9hZCxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyQ29uZmlnU3RyZWFtRW52aXJvbm1lbnRUaGVtZXNVcGRhdGVkRXZlbnQgPVxuICB0eXBlb2YgU2VydmVyQ29uZmlnU3RyZWFtRW52aXJvbm1lbnRUaGVtZXNVcGRhdGVkRXZlbnQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlckNvbmZpZ1VzYWdlTGltaXRTb3VyY2VzVXBkYXRlZFBheWxvYWQgPSBTY2hlbWEuU3RydWN0KHtcbiAgc291cmNlczogVXNhZ2VMaW1pdFNvdXJjZVNuYXBzaG90cyxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyQ29uZmlnVXNhZ2VMaW1pdFNvdXJjZXNVcGRhdGVkUGF5bG9hZCA9XG4gIHR5cGVvZiBTZXJ2ZXJDb25maWdVc2FnZUxpbWl0U291cmNlc1VwZGF0ZWRQYXlsb2FkLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJDb25maWdTdHJlYW1Vc2FnZUxpbWl0U291cmNlc1VwZGF0ZWRFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiBTY2hlbWEuTGl0ZXJhbCgxKSxcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJ1c2FnZUxpbWl0U291cmNlc1VwZGF0ZWRcIiksXG4gIHBheWxvYWQ6IFNlcnZlckNvbmZpZ1VzYWdlTGltaXRTb3VyY2VzVXBkYXRlZFBheWxvYWQsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlckNvbmZpZ1N0cmVhbVVzYWdlTGltaXRTb3VyY2VzVXBkYXRlZEV2ZW50ID1cbiAgdHlwZW9mIFNlcnZlckNvbmZpZ1N0cmVhbVVzYWdlTGltaXRTb3VyY2VzVXBkYXRlZEV2ZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJDb25maWdTdHJlYW1FdmVudCA9IFNjaGVtYS5VbmlvbihbXG4gIFNlcnZlckNvbmZpZ1N0cmVhbVNuYXBzaG90RXZlbnQsXG4gIFNlcnZlckNvbmZpZ1N0cmVhbUtleWJpbmRpbmdzVXBkYXRlZEV2ZW50LFxuICBTZXJ2ZXJDb25maWdTdHJlYW1Qcm92aWRlclN0YXR1c2VzRXZlbnQsXG4gIFNlcnZlckNvbmZpZ1N0cmVhbVNldHRpbmdzVXBkYXRlZEV2ZW50LFxuICBTZXJ2ZXJDb25maWdTdHJlYW1FbnZpcm9ubWVudFRoZW1lc1VwZGF0ZWRFdmVudCxcbiAgU2VydmVyQ29uZmlnU3RyZWFtVXNhZ2VMaW1pdFNvdXJjZXNVcGRhdGVkRXZlbnQsXG5dKTtcbmV4cG9ydCB0eXBlIFNlcnZlckNvbmZpZ1N0cmVhbUV2ZW50ID0gdHlwZW9mIFNlcnZlckNvbmZpZ1N0cmVhbUV2ZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZWxmVXBkYXRlT3V0Y29tZSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBpZDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBmcm9tVmVyc2lvbjogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICB0YXJnZXRWZXJzaW9uOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIHN0YXR1czogU2NoZW1hLkxpdGVyYWxzKFtcImNvbW1pdHRlZFwiLCBcInJvbGxlZC1iYWNrXCIsIFwiZmFpbGVkXCJdKSxcbiAgcmVhc29uOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyU2VsZlVwZGF0ZU91dGNvbWUgPSB0eXBlb2YgU2VydmVyU2VsZlVwZGF0ZU91dGNvbWUuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlckxpZmVjeWNsZVJlYWR5UGF5bG9hZCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBhdDogSXNvRGF0ZVRpbWUsXG4gIGVudmlyb25tZW50OiBFeGVjdXRpb25FbnZpcm9ubWVudERlc2NyaXB0b3IsXG4gIHVwZGF0ZU91dGNvbWU6IFNjaGVtYS5vcHRpb25hbEtleShTZXJ2ZXJTZWxmVXBkYXRlT3V0Y29tZSksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlckxpZmVjeWNsZVJlYWR5UGF5bG9hZCA9IHR5cGVvZiBTZXJ2ZXJMaWZlY3ljbGVSZWFkeVBheWxvYWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlckxpZmVjeWNsZVdlbGNvbWVQYXlsb2FkID0gU2NoZW1hLlN0cnVjdCh7XG4gIGVudmlyb25tZW50OiBFeGVjdXRpb25FbnZpcm9ubWVudERlc2NyaXB0b3IsXG4gIGN3ZDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBwcm9qZWN0TmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBib290c3RyYXBTdGF0dXM6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuTGl0ZXJhbHMoW1wicGVuZGluZ1wiLCBcImNvbXBsZXRlXCJdKSksXG4gIGJvb3RzdHJhcFByb2plY3RJZDogU2NoZW1hLm9wdGlvbmFsKFByb2plY3RJZCksXG4gIGJvb3RzdHJhcFRocmVhZElkOiBTY2hlbWEub3B0aW9uYWwoVGhyZWFkSWQpLFxuICBib290c3RyYXBQcm9qZWN0Q3JlYXRlZDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgYm9vdHN0cmFwVGhyZWFkQ3JlYXRlZDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyTGlmZWN5Y2xlV2VsY29tZVBheWxvYWQgPSB0eXBlb2YgU2VydmVyTGlmZWN5Y2xlV2VsY29tZVBheWxvYWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlckxpZmVjeWNsZUxlZ2FjeVRocmVhZE1pZ3JhdGlvblBheWxvYWQgPSBTY2hlbWEuU3RydWN0KHtcbiAgc3RhdHVzOiBTY2hlbWEuVW5pb24oW1NjaGVtYS5MaXRlcmFsKFwicnVubmluZ1wiKSwgU2NoZW1hLkxpdGVyYWwoXCJjb21wbGV0ZVwiKV0pLFxuICB0b3RhbFRocmVhZENvdW50OiBOb25OZWdhdGl2ZUludCxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyTGlmZWN5Y2xlTGVnYWN5VGhyZWFkTWlncmF0aW9uUGF5bG9hZCA9XG4gIHR5cGVvZiBTZXJ2ZXJMaWZlY3ljbGVMZWdhY3lUaHJlYWRNaWdyYXRpb25QYXlsb2FkLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJMaWZlY3ljbGVTdHJlYW1XZWxjb21lRXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdmVyc2lvbjogU2NoZW1hLkxpdGVyYWwoMSksXG4gIHNlcXVlbmNlOiBOb25OZWdhdGl2ZUludCxcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJ3ZWxjb21lXCIpLFxuICBwYXlsb2FkOiBTZXJ2ZXJMaWZlY3ljbGVXZWxjb21lUGF5bG9hZCxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyTGlmZWN5Y2xlU3RyZWFtV2VsY29tZUV2ZW50ID0gdHlwZW9mIFNlcnZlckxpZmVjeWNsZVN0cmVhbVdlbGNvbWVFdmVudC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyTGlmZWN5Y2xlU3RyZWFtUmVhZHlFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiBTY2hlbWEuTGl0ZXJhbCgxKSxcbiAgc2VxdWVuY2U6IE5vbk5lZ2F0aXZlSW50LFxuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcInJlYWR5XCIpLFxuICBwYXlsb2FkOiBTZXJ2ZXJMaWZlY3ljbGVSZWFkeVBheWxvYWQsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlckxpZmVjeWNsZVN0cmVhbVJlYWR5RXZlbnQgPSB0eXBlb2YgU2VydmVyTGlmZWN5Y2xlU3RyZWFtUmVhZHlFdmVudC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyTGlmZWN5Y2xlU3RyZWFtTGVnYWN5VGhyZWFkTWlncmF0aW9uRXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdmVyc2lvbjogU2NoZW1hLkxpdGVyYWwoMSksXG4gIHNlcXVlbmNlOiBOb25OZWdhdGl2ZUludCxcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJsZWdhY3lUaHJlYWRNaWdyYXRpb25cIiksXG4gIHBheWxvYWQ6IFNlcnZlckxpZmVjeWNsZUxlZ2FjeVRocmVhZE1pZ3JhdGlvblBheWxvYWQsXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlckxpZmVjeWNsZVN0cmVhbUxlZ2FjeVRocmVhZE1pZ3JhdGlvbkV2ZW50ID1cbiAgdHlwZW9mIFNlcnZlckxpZmVjeWNsZVN0cmVhbUxlZ2FjeVRocmVhZE1pZ3JhdGlvbkV2ZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJMaWZlY3ljbGVTdHJlYW1FdmVudCA9IFNjaGVtYS5VbmlvbihbXG4gIFNlcnZlckxpZmVjeWNsZVN0cmVhbVdlbGNvbWVFdmVudCxcbiAgU2VydmVyTGlmZWN5Y2xlU3RyZWFtUmVhZHlFdmVudCxcbiAgU2VydmVyTGlmZWN5Y2xlU3RyZWFtTGVnYWN5VGhyZWFkTWlncmF0aW9uRXZlbnQsXG5dKTtcbmV4cG9ydCB0eXBlIFNlcnZlckxpZmVjeWNsZVN0cmVhbUV2ZW50ID0gdHlwZW9mIFNlcnZlckxpZmVjeWNsZVN0cmVhbUV2ZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJQcm92aWRlclVwZGF0ZWRQYXlsb2FkID0gU2NoZW1hLlN0cnVjdCh7XG4gIHByb3ZpZGVyczogU2VydmVyUHJvdmlkZXJzLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm92aWRlclVwZGF0ZWRQYXlsb2FkID0gdHlwZW9mIFNlcnZlclByb3ZpZGVyVXBkYXRlZFBheWxvYWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclByb3ZpZGVyVXBkYXRlSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgcHJvdmlkZXI6IFByb3ZpZGVyRHJpdmVyS2luZCxcbiAgdGFyZ2V0VmVyc2lvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIGluc3RhbmNlSWQ6IFNjaGVtYS5vcHRpb25hbEtleShQcm92aWRlckluc3RhbmNlSWQpLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJQcm92aWRlclVwZGF0ZUlucHV0ID0gdHlwZW9mIFNlcnZlclByb3ZpZGVyVXBkYXRlSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNsYXNzIFNlcnZlclByb3ZpZGVyVXBkYXRlRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8U2VydmVyUHJvdmlkZXJVcGRhdGVFcnJvcj4oKShcbiAgXCJTZXJ2ZXJQcm92aWRlclVwZGF0ZUVycm9yXCIsXG4gIHtcbiAgICBwcm92aWRlcjogUHJvdmlkZXJEcml2ZXJLaW5kLFxuICAgIHJlYXNvbjogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICAgIGNhdXNlOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkRlZmVjdCgpKSxcbiAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgUHJvdmlkZXIgdXBkYXRlIGZhaWxlZCBmb3IgJHt0aGlzLnByb3ZpZGVyfTogJHt0aGlzLnJlYXNvbn1gO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZWxmVXBkYXRlSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLyoqIEV4YWN0IG5wbSB2ZXJzaW9uLCBuZXZlciBhIGRpc3QtdGFnLCBzbyBzZXJ2ZXIgYW5kIGNsaWVudCBhZ3JlZSBvbiB0aGUgcmVxdWVzdC4gKi9cbiAgdGFyZ2V0VmVyc2lvbjogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBjb250aW51ZVJ1bm5pbmdUaHJlYWRzOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJTZWxmVXBkYXRlSW5wdXQgPSB0eXBlb2YgU2VydmVyU2VsZlVwZGF0ZUlucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZWxmVXBkYXRlUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRhcmdldFZlcnNpb246IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgbWV0aG9kOiBTZXJ2ZXJTZWxmVXBkYXRlTWV0aG9kLFxuICB1cGRhdGVJZDogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIGRlc2t0b3BVcGRhdGVUb2tlbjogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWROb25FbXB0eVN0cmluZyksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlclNlbGZVcGRhdGVSZXN1bHQgPSB0eXBlb2YgU2VydmVyU2VsZlVwZGF0ZVJlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgRGVza3RvcFVwZGF0ZUNvbW1pdElucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHJlcXVlc3RJZDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxufSk7XG5leHBvcnQgdHlwZSBEZXNrdG9wVXBkYXRlQ29tbWl0SW5wdXQgPSB0eXBlb2YgRGVza3RvcFVwZGF0ZUNvbW1pdElucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZWxmVXBkYXRlUHJvZ3Jlc3NTdGFnZSA9IFNjaGVtYS5MaXRlcmFscyhbXCJkb3dubG9hZGluZ1wiLCBcImluc3RhbGxpbmdcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmVyU2VsZlVwZGF0ZVByb2dyZXNzU3RhZ2UgPSB0eXBlb2YgU2VydmVyU2VsZlVwZGF0ZVByb2dyZXNzU3RhZ2UuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNlcnZlclNlbGZVcGRhdGVQcm9ncmVzc0V2ZW50ID0gU2NoZW1hLlVuaW9uKFtcbiAgU2NoZW1hLlN0cnVjdCh7XG4gICAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJwcm9ncmVzc1wiKSxcbiAgICBzdGFnZTogU2VydmVyU2VsZlVwZGF0ZVByb2dyZXNzU3RhZ2UsXG4gIH0pLFxuICBTY2hlbWEuU3RydWN0KHtcbiAgICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcImNvbXBsZXRlXCIpLFxuICAgIHJlc3VsdDogU2VydmVyU2VsZlVwZGF0ZVJlc3VsdCxcbiAgfSksXG5dKTtcbmV4cG9ydCB0eXBlIFNlcnZlclNlbGZVcGRhdGVQcm9ncmVzc0V2ZW50ID0gdHlwZW9mIFNlcnZlclNlbGZVcGRhdGVQcm9ncmVzc0V2ZW50LlR5cGU7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZXJTZWxmVXBkYXRlRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8U2VydmVyU2VsZlVwZGF0ZUVycm9yPigpKFxuICBcIlNlcnZlclNlbGZVcGRhdGVFcnJvclwiLFxuICB7XG4gICAgcmVhc29uOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gICAgY2F1c2U6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuRGVmZWN0KCkpLFxuICB9LFxuKSB7XG4gIG92ZXJyaWRlIGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBTZXJ2ZXIgdXBkYXRlIGZhaWxlZDogJHt0aGlzLnJlYXNvbn1gO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9zZXJ2ZXIudHMifQ==

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9zZXJ2ZXIudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvc2VydmVyLnRzIix7InVybHMiOiI2IiwiaWRzIjoiNyJ9LFsiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjIwIl0sW10sWyI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiXSx7fSwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9FZmZlY3QuanMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L1NjaGVtYS5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9hY3BSZWdpc3RyeS50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9lbnZpcm9ubWVudC50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9hdXRoLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2Jhc2VTY2hlbWFzLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2tleWJpbmRpbmdzLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2VkaXRvci50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9tb2RlbC50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9wcm92aWRlclBvbGljeS50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9wcm92aWRlckluc3RhbmNlLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3Byb3ZpZGVyVXNhZ2VMaW1pdHMudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvc2V0dGluZ3MudHMiXQ==