__vite_ssr_exportName__("COMPOSER_CONTEXT_KINDS", () => { try { return COMPOSER_CONTEXT_KINDS } catch {} });
__vite_ssr_exportName__("COMPOSER_CONTEXT_LABEL_MAX_CHARS", () => { try { return COMPOSER_CONTEXT_LABEL_MAX_CHARS } catch {} });
__vite_ssr_exportName__("COMPOSER_CONTEXT_TERMINAL_TEXT_MAX_CHARS", () => { try { return COMPOSER_CONTEXT_TERMINAL_TEXT_MAX_CHARS } catch {} });
__vite_ssr_exportName__("COMPOSER_CONTEXT_REVIEW_TEXT_MAX_CHARS", () => { try { return COMPOSER_CONTEXT_REVIEW_TEXT_MAX_CHARS } catch {} });
__vite_ssr_exportName__("COMPOSER_CONTEXT_REVIEW_DIFF_MAX_CHARS", () => { try { return COMPOSER_CONTEXT_REVIEW_DIFF_MAX_CHARS } catch {} });
__vite_ssr_exportName__("ComposerContextId", () => { try { return ComposerContextId } catch {} });
__vite_ssr_exportName__("ComposerContextReferenceId", () => { try { return ComposerContextReferenceId } catch {} });
__vite_ssr_exportName__("ComposerContextKind", () => { try { return ComposerContextKind } catch {} });
__vite_ssr_exportName__("PullRequestContextMetadata", () => { try { return PullRequestContextMetadata } catch {} });
__vite_ssr_exportName__("ImageContextRecord", () => { try { return ImageContextRecord } catch {} });
__vite_ssr_exportName__("FileContextRecord", () => { try { return FileContextRecord } catch {} });
__vite_ssr_exportName__("TerminalContextRecord", () => { try { return TerminalContextRecord } catch {} });
__vite_ssr_exportName__("ElementContextSource", () => { try { return ElementContextSource } catch {} });
__vite_ssr_exportName__("ElementContextDetails", () => { try { return ElementContextDetails } catch {} });
__vite_ssr_exportName__("ElementContextRecord", () => { try { return ElementContextRecord } catch {} });
__vite_ssr_exportName__("PreviewAnnotationContextRecord", () => { try { return PreviewAnnotationContextRecord } catch {} });
__vite_ssr_exportName__("ReviewCommentContextRecord", () => { try { return ReviewCommentContextRecord } catch {} });
__vite_ssr_exportName__("MentionContextRecord", () => { try { return MentionContextRecord } catch {} });
__vite_ssr_exportName__("SkillContextRecord", () => { try { return SkillContextRecord } catch {} });
__vite_ssr_exportName__("ThreadContextRecord", () => { try { return ThreadContextRecord } catch {} });
__vite_ssr_exportName__("UnknownContextRecord", () => { try { return UnknownContextRecord } catch {} });
__vite_ssr_exportName__("KnownComposerContextRecord", () => { try { return KnownComposerContextRecord } catch {} });
__vite_ssr_exportName__("ComposerContextRecord", () => { try { return ComposerContextRecord } catch {} });
__vite_ssr_exportName__("COMPOSER_CONTEXT_MAX_RECORDS", () => { try { return COMPOSER_CONTEXT_MAX_RECORDS } catch {} });
__vite_ssr_exportName__("GuestMessageAttribution", () => { try { return GuestMessageAttribution } catch {} });
__vite_ssr_exportName__("OrchestrationMessageContext", () => { try { return OrchestrationMessageContext } catch {} });
const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Schema.js");
const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["EnvironmentId","ForwardCompatibleArray","GuestMessageId","GuestShareId","NonNegativeInt","PositiveInt","ThreadId","TrimmedNonEmptyString"]});
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/guestShare.ts", {"importedNames":["GUEST_MESSAGE_MAX_LENGTH","GUEST_NAME_MAX_LENGTH"]});



/** Image and file records reference `ChatAttachment` ids, never bytes. */
const COMPOSER_CONTEXT_KINDS = [
	"image",
	"file",
	"terminal",
	"element",
	"preview-annotation",
	"review-comment",
	"mention",
	"skill",
	"thread"
];
const CONTEXT_ID_MAX_CHARS = 128;
const CONTEXT_ID_PATTERN = /^[a-z0-9_-]+$/i;
const CONTEXT_KIND_PATTERN = /^[a-z][a-z0-9-]{0,39}$/;
const KNOWN_KIND_PATTERN = new RegExp(`^(?!(?:${COMPOSER_CONTEXT_KINDS.join("|")})$)`);
const COMPOSER_CONTEXT_LABEL_MAX_CHARS = 200;
const COMPOSER_CONTEXT_TERMINAL_TEXT_MAX_CHARS = 64e3;
const COMPOSER_CONTEXT_ELEMENT_HTML_MAX_CHARS = 8e3;
const COMPOSER_CONTEXT_ELEMENT_STYLES_MAX_CHARS = 8e3;
const COMPOSER_CONTEXT_REVIEW_TEXT_MAX_CHARS = 16e3;
const COMPOSER_CONTEXT_REVIEW_DIFF_MAX_CHARS = 32e3;
const COMPOSER_CONTEXT_PREVIEW_COMMENT_MAX_CHARS = 8e3;
const ComposerContextId = __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(CONTEXT_ID_MAX_CHARS), __vite_ssr_import_0__.isPattern(CONTEXT_ID_PATTERN)).pipe(__vite_ssr_import_0__.brand("ComposerContextId"));
const ComposerContextReferenceId = __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(CONTEXT_ID_MAX_CHARS), __vite_ssr_import_0__.isPattern(CONTEXT_ID_PATTERN)).pipe(__vite_ssr_import_0__.brand("ComposerContextReferenceId"));
const ComposerContextKind = __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isPattern(CONTEXT_KIND_PATTERN));
// Duplicates the private ChatAttachmentId rules to avoid an orchestration.ts import cycle.
const ContextAttachmentId = __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(CONTEXT_ID_MAX_CHARS), __vite_ssr_import_0__.isPattern(CONTEXT_ID_PATTERN));
const ContextLabel = __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isMaxLength(COMPOSER_CONTEXT_LABEL_MAX_CHARS));
const BoundedString = (max) => __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isMaxLength(max));
const ShortString = BoundedString(2048);
const NullableShortString = __vite_ssr_import_0__.NullOr(ShortString);
const PullRequestContextMetadata = __vite_ssr_import_0__.Struct({
	number: __vite_ssr_import_1__.PositiveInt,
	title: ShortString,
	url: ShortString,
	headBranch: ShortString,
	baseBranch: ShortString,
	state: __vite_ssr_import_0__.Literals([
		"open",
		"closed",
		"merged"
	]),
	isDraft: __vite_ssr_import_0__.Boolean
});
const recordBase = {
	version: __vite_ssr_import_0__.Literal(1),
	contextId: ComposerContextId,
	label: ContextLabel
};
const attachmentBinding = {
	attachmentId: ContextAttachmentId,
	name: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	mimeType: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(100)),
	sizeBytes: __vite_ssr_import_1__.NonNegativeInt
};
const ImageContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: __vite_ssr_import_0__.Literal("image"),
	...attachmentBinding
});
const FileContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: __vite_ssr_import_0__.Literal("file"),
	...attachmentBinding
});
const TerminalContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: __vite_ssr_import_0__.Literal("terminal"),
	terminalId: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	terminalLabel: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	lineStart: __vite_ssr_import_1__.NonNegativeInt,
	lineEnd: __vite_ssr_import_1__.NonNegativeInt,
	text: BoundedString(COMPOSER_CONTEXT_TERMINAL_TEXT_MAX_CHARS)
}).check(__vite_ssr_import_0__.makeFilter((record) => record.lineEnd >= record.lineStart));
const ElementContextSource = __vite_ssr_import_0__.Struct({
	functionName: NullableShortString,
	fileName: NullableShortString,
	lineNumber: __vite_ssr_import_0__.NullOr((0,__vite_ssr_import_1__.NonNegativeInt)),
	columnNumber: __vite_ssr_import_0__.NullOr((0,__vite_ssr_import_1__.NonNegativeInt))
});
const ElementContextDetails = __vite_ssr_import_0__.Struct({
	pageUrl: ShortString,
	pageTitle: NullableShortString,
	tagName: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	selector: NullableShortString,
	htmlPreview: BoundedString(COMPOSER_CONTEXT_ELEMENT_HTML_MAX_CHARS),
	componentName: NullableShortString,
	source: __vite_ssr_import_0__.NullOr(ElementContextSource),
	styles: BoundedString(COMPOSER_CONTEXT_ELEMENT_STYLES_MAX_CHARS)
});
const ElementContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: __vite_ssr_import_0__.Literal("element"),
	...ElementContextDetails.fields
});
// `optionalKey` rejects explicit undefined within one record, so only that record is dropped.
const PreviewAnnotationContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: __vite_ssr_import_0__.Literal("preview-annotation"),
	annotationId: ShortString,
	pageUrl: ShortString,
	pageTitle: NullableShortString,
	comment: BoundedString(COMPOSER_CONTEXT_PREVIEW_COMMENT_MAX_CHARS),
	targetSummary: ShortString,
	styleChanges: __vite_ssr_import_0__.Array(ShortString).check(__vite_ssr_import_0__.isMaxLength(200)),
	elements: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.Array(ElementContextDetails).check(__vite_ssr_import_0__.isMaxLength(50))),
	elementIds: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.Array(ShortString).check(__vite_ssr_import_0__.isMaxLength(50))),
	regionCount: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_1__.NonNegativeInt)),
	strokeCount: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_1__.NonNegativeInt)),
	styleChangeDetails: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.Array(__vite_ssr_import_0__.Struct({
		targetId: ShortString,
		selector: NullableShortString,
		property: ShortString,
		previousValue: BoundedString(COMPOSER_CONTEXT_ELEMENT_STYLES_MAX_CHARS),
		value: BoundedString(COMPOSER_CONTEXT_ELEMENT_STYLES_MAX_CHARS)
	})).check(__vite_ssr_import_0__.isMaxLength(200))),
	screenshotContextId: __vite_ssr_import_0__.optionalKey(ComposerContextId)
});
const ReviewCommentContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: __vite_ssr_import_0__.Literal("review-comment"),
	sectionId: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	sectionTitle: ShortString,
	filePath: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(2048)),
	startIndex: __vite_ssr_import_1__.NonNegativeInt,
	endIndex: __vite_ssr_import_1__.NonNegativeInt,
	rangeLabel: ShortString,
	text: BoundedString(COMPOSER_CONTEXT_REVIEW_TEXT_MAX_CHARS),
	diff: BoundedString(COMPOSER_CONTEXT_REVIEW_DIFF_MAX_CHARS),
	fenceLanguage: __vite_ssr_import_0__.optionalKey(BoundedString(64)),
	pullRequest: __vite_ssr_import_0__.optionalKey(PullRequestContextMetadata)
}).check(__vite_ssr_import_0__.makeFilter((record) => record.endIndex >= record.startIndex));
const MentionContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: __vite_ssr_import_0__.Literal("mention"),
	path: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(2048))
});
const SkillContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: __vite_ssr_import_0__.Literal("skill"),
	name: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255))
});
const ThreadContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: __vite_ssr_import_0__.Literal("thread"),
	environmentId: __vite_ssr_import_1__.EnvironmentId,
	threadId: __vite_ssr_import_1__.ThreadId,
	title: ContextLabel
});
const isJson = __vite_ssr_import_0__.is(__vite_ssr_import_0__.Json);
/** Excludes known discriminators so malformed known records fail their own schema. */
const UnknownContextRecord = __vite_ssr_import_0__.Struct({
	...recordBase,
	kind: ComposerContextKind.check(__vite_ssr_import_0__.isPattern(KNOWN_KIND_PATTERN)),
	payload: __vite_ssr_import_0__.Unknown.check(__vite_ssr_import_0__.makeFilter((payload) => {
		let encoded;
		try {
			encoded = JSON.stringify(payload);
		} catch {
			return false;
		};
		return encoded !== undefined && encoded.length <= 64e3 && isJson(payload);
	}))
});
const KnownComposerContextRecord = __vite_ssr_import_0__.Union([
	ImageContextRecord,
	FileContextRecord,
	TerminalContextRecord,
	ElementContextRecord,
	PreviewAnnotationContextRecord,
	ReviewCommentContextRecord,
	MentionContextRecord,
	SkillContextRecord,
	ThreadContextRecord
]);
const ComposerContextRecord = __vite_ssr_import_0__.Union([...KnownComposerContextRecord.members, UnknownContextRecord]);
const COMPOSER_CONTEXT_MAX_RECORDS = 200;
const COMPOSER_CONTEXT_MAX_SERIALIZED_CHARS = 16e6;
/**
* Marks a user message as a guest's, sent by the owner. The message `text` keeps the attributed
* form the agent reads; clients show `text` here with `name` beside it. Only the server sets it.
*/
const GuestMessageAttribution = __vite_ssr_import_0__.Struct({
	guestMessageId: __vite_ssr_import_1__.GuestMessageId,
	name: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength((0,__vite_ssr_import_2__.GUEST_NAME_MAX_LENGTH))),
	text: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isMaxLength((0,__vite_ssr_import_2__.GUEST_MESSAGE_MAX_LENGTH))),
	/** The link the guest used. Only that link's guest may load the message's files. */
	shareId: __vite_ssr_import_0__.optional((0,__vite_ssr_import_1__.GuestShareId))
});
/** Structured context riding on a user message. Undecodable records are dropped, not fatal. */
const OrchestrationMessageContext = __vite_ssr_import_0__.Struct({
	version: __vite_ssr_import_0__.Literal(1),
	guest: __vite_ssr_import_0__.optional(GuestMessageAttribution),
	records: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.Unknown).check(__vite_ssr_import_0__.isMaxLength(COMPOSER_CONTEXT_MAX_RECORDS), __vite_ssr_import_0__.makeFilter((records) => {
		try {
			return JSON.stringify(records).length <= COMPOSER_CONTEXT_MAX_SERIALIZED_CHARS;
		} catch {
			return false;
		}
	})).pipe(__vite_ssr_import_0__.decodeTo((0,__vite_ssr_import_1__.ForwardCompatibleArray)(ComposerContextRecord))).check(__vite_ssr_import_0__.makeFilter((records) => new Set(records.map((record) => record.contextId)).size === records.length))
});
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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QUFJLElBQUksUUFBUSxLQUFLLFdBQVcsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsUUFBUSxNQUNuRixDQUNGO0FBQ0osQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiY29tcG9zZXJDb250ZXh0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFNjaGVtYSBmcm9tIFwiZWZmZWN0L1NjaGVtYVwiO1xuXG5pbXBvcnQge1xuICBFbnZpcm9ubWVudElkLFxuICBGb3J3YXJkQ29tcGF0aWJsZUFycmF5LFxuICBHdWVzdE1lc3NhZ2VJZCxcbiAgR3Vlc3RTaGFyZUlkLFxuICBOb25OZWdhdGl2ZUludCxcbiAgUG9zaXRpdmVJbnQsXG4gIFRocmVhZElkLFxuICBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG59IGZyb20gXCIuL2Jhc2VTY2hlbWFzLnRzXCI7XG5pbXBvcnQgeyBHVUVTVF9NRVNTQUdFX01BWF9MRU5HVEgsIEdVRVNUX05BTUVfTUFYX0xFTkdUSCB9IGZyb20gXCIuL2d1ZXN0U2hhcmUudHNcIjtcblxuLyoqIEltYWdlIGFuZCBmaWxlIHJlY29yZHMgcmVmZXJlbmNlIGBDaGF0QXR0YWNobWVudGAgaWRzLCBuZXZlciBieXRlcy4gKi9cblxuZXhwb3J0IGNvbnN0IENPTVBPU0VSX0NPTlRFWFRfS0lORFMgPSBbXG4gIFwiaW1hZ2VcIixcbiAgXCJmaWxlXCIsXG4gIFwidGVybWluYWxcIixcbiAgXCJlbGVtZW50XCIsXG4gIFwicHJldmlldy1hbm5vdGF0aW9uXCIsXG4gIFwicmV2aWV3LWNvbW1lbnRcIixcbiAgXCJtZW50aW9uXCIsXG4gIFwic2tpbGxcIixcbiAgXCJ0aHJlYWRcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBLbm93bkNvbXBvc2VyQ29udGV4dEtpbmQgPSAodHlwZW9mIENPTVBPU0VSX0NPTlRFWFRfS0lORFMpW251bWJlcl07XG5cbmNvbnN0IENPTlRFWFRfSURfTUFYX0NIQVJTID0gMTI4O1xuY29uc3QgQ09OVEVYVF9JRF9QQVRURVJOID0gL15bYS16MC05Xy1dKyQvaTtcbmNvbnN0IENPTlRFWFRfS0lORF9QQVRURVJOID0gL15bYS16XVthLXowLTktXXswLDM5fSQvO1xuY29uc3QgS05PV05fS0lORF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXig/ISg/OiR7Q09NUE9TRVJfQ09OVEVYVF9LSU5EUy5qb2luKFwifFwiKX0pJClgKTtcblxuZXhwb3J0IGNvbnN0IENPTVBPU0VSX0NPTlRFWFRfTEFCRUxfTUFYX0NIQVJTID0gMjAwO1xuZXhwb3J0IGNvbnN0IENPTVBPU0VSX0NPTlRFWFRfVEVSTUlOQUxfVEVYVF9NQVhfQ0hBUlMgPSA2NF8wMDA7XG5jb25zdCBDT01QT1NFUl9DT05URVhUX0VMRU1FTlRfSFRNTF9NQVhfQ0hBUlMgPSA4XzAwMDtcbmNvbnN0IENPTVBPU0VSX0NPTlRFWFRfRUxFTUVOVF9TVFlMRVNfTUFYX0NIQVJTID0gOF8wMDA7XG5leHBvcnQgY29uc3QgQ09NUE9TRVJfQ09OVEVYVF9SRVZJRVdfVEVYVF9NQVhfQ0hBUlMgPSAxNl8wMDA7XG5leHBvcnQgY29uc3QgQ09NUE9TRVJfQ09OVEVYVF9SRVZJRVdfRElGRl9NQVhfQ0hBUlMgPSAzMl8wMDA7XG5jb25zdCBDT01QT1NFUl9DT05URVhUX1BSRVZJRVdfQ09NTUVOVF9NQVhfQ0hBUlMgPSA4XzAwMDtcblxuZXhwb3J0IGNvbnN0IENvbXBvc2VyQ29udGV4dElkID0gVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNNYXhMZW5ndGgoQ09OVEVYVF9JRF9NQVhfQ0hBUlMpLFxuICBTY2hlbWEuaXNQYXR0ZXJuKENPTlRFWFRfSURfUEFUVEVSTiksXG4pLnBpcGUoU2NoZW1hLmJyYW5kKFwiQ29tcG9zZXJDb250ZXh0SWRcIikpO1xuZXhwb3J0IHR5cGUgQ29tcG9zZXJDb250ZXh0SWQgPSB0eXBlb2YgQ29tcG9zZXJDb250ZXh0SWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IENvbXBvc2VyQ29udGV4dFJlZmVyZW5jZUlkID0gVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNNYXhMZW5ndGgoQ09OVEVYVF9JRF9NQVhfQ0hBUlMpLFxuICBTY2hlbWEuaXNQYXR0ZXJuKENPTlRFWFRfSURfUEFUVEVSTiksXG4pLnBpcGUoU2NoZW1hLmJyYW5kKFwiQ29tcG9zZXJDb250ZXh0UmVmZXJlbmNlSWRcIikpO1xuZXhwb3J0IHR5cGUgQ29tcG9zZXJDb250ZXh0UmVmZXJlbmNlSWQgPSB0eXBlb2YgQ29tcG9zZXJDb250ZXh0UmVmZXJlbmNlSWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IENvbXBvc2VyQ29udGV4dEtpbmQgPSBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soXG4gIFNjaGVtYS5pc1BhdHRlcm4oQ09OVEVYVF9LSU5EX1BBVFRFUk4pLFxuKTtcbmV4cG9ydCB0eXBlIENvbXBvc2VyQ29udGV4dEtpbmQgPSB0eXBlb2YgQ29tcG9zZXJDb250ZXh0S2luZC5UeXBlO1xuXG4vLyBEdXBsaWNhdGVzIHRoZSBwcml2YXRlIENoYXRBdHRhY2htZW50SWQgcnVsZXMgdG8gYXZvaWQgYW4gb3JjaGVzdHJhdGlvbi50cyBpbXBvcnQgY3ljbGUuXG5jb25zdCBDb250ZXh0QXR0YWNobWVudElkID0gVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNNYXhMZW5ndGgoQ09OVEVYVF9JRF9NQVhfQ0hBUlMpLFxuICBTY2hlbWEuaXNQYXR0ZXJuKENPTlRFWFRfSURfUEFUVEVSTiksXG4pO1xuY29uc3QgQ29udGV4dExhYmVsID0gU2NoZW1hLlN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoQ09NUE9TRVJfQ09OVEVYVF9MQUJFTF9NQVhfQ0hBUlMpKTtcbmNvbnN0IEJvdW5kZWRTdHJpbmcgPSAobWF4OiBudW1iZXIpID0+IFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKG1heCkpO1xuY29uc3QgU2hvcnRTdHJpbmcgPSBCb3VuZGVkU3RyaW5nKDJfMDQ4KTtcbmNvbnN0IE51bGxhYmxlU2hvcnRTdHJpbmcgPSBTY2hlbWEuTnVsbE9yKFNob3J0U3RyaW5nKTtcblxuZXhwb3J0IGNvbnN0IFB1bGxSZXF1ZXN0Q29udGV4dE1ldGFkYXRhID0gU2NoZW1hLlN0cnVjdCh7XG4gIG51bWJlcjogUG9zaXRpdmVJbnQsXG4gIHRpdGxlOiBTaG9ydFN0cmluZyxcbiAgdXJsOiBTaG9ydFN0cmluZyxcbiAgaGVhZEJyYW5jaDogU2hvcnRTdHJpbmcsXG4gIGJhc2VCcmFuY2g6IFNob3J0U3RyaW5nLFxuICBzdGF0ZTogU2NoZW1hLkxpdGVyYWxzKFtcIm9wZW5cIiwgXCJjbG9zZWRcIiwgXCJtZXJnZWRcIl0pLFxuICBpc0RyYWZ0OiBTY2hlbWEuQm9vbGVhbixcbn0pO1xuZXhwb3J0IHR5cGUgUHVsbFJlcXVlc3RDb250ZXh0TWV0YWRhdGEgPSB0eXBlb2YgUHVsbFJlcXVlc3RDb250ZXh0TWV0YWRhdGEuVHlwZTtcblxuY29uc3QgcmVjb3JkQmFzZSA9IHtcbiAgdmVyc2lvbjogU2NoZW1hLkxpdGVyYWwoMSksXG4gIGNvbnRleHRJZDogQ29tcG9zZXJDb250ZXh0SWQsXG4gIGxhYmVsOiBDb250ZXh0TGFiZWwsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBhdHRhY2htZW50QmluZGluZyA9IHtcbiAgYXR0YWNobWVudElkOiBDb250ZXh0QXR0YWNobWVudElkLFxuICBuYW1lOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDI1NSkpLFxuICBtaW1lVHlwZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgxMDApKSxcbiAgc2l6ZUJ5dGVzOiBOb25OZWdhdGl2ZUludCxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBJbWFnZUNvbnRleHRSZWNvcmQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4ucmVjb3JkQmFzZSxcbiAga2luZDogU2NoZW1hLkxpdGVyYWwoXCJpbWFnZVwiKSxcbiAgLi4uYXR0YWNobWVudEJpbmRpbmcsXG59KTtcbmV4cG9ydCB0eXBlIEltYWdlQ29udGV4dFJlY29yZCA9IHR5cGVvZiBJbWFnZUNvbnRleHRSZWNvcmQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEZpbGVDb250ZXh0UmVjb3JkID0gU2NoZW1hLlN0cnVjdCh7XG4gIC4uLnJlY29yZEJhc2UsXG4gIGtpbmQ6IFNjaGVtYS5MaXRlcmFsKFwiZmlsZVwiKSxcbiAgLi4uYXR0YWNobWVudEJpbmRpbmcsXG59KTtcbmV4cG9ydCB0eXBlIEZpbGVDb250ZXh0UmVjb3JkID0gdHlwZW9mIEZpbGVDb250ZXh0UmVjb3JkLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBUZXJtaW5hbENvbnRleHRSZWNvcmQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4ucmVjb3JkQmFzZSxcbiAga2luZDogU2NoZW1hLkxpdGVyYWwoXCJ0ZXJtaW5hbFwiKSxcbiAgdGVybWluYWxJZDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgyNTUpKSxcbiAgdGVybWluYWxMYWJlbDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgyNTUpKSxcbiAgbGluZVN0YXJ0OiBOb25OZWdhdGl2ZUludCxcbiAgbGluZUVuZDogTm9uTmVnYXRpdmVJbnQsXG4gIHRleHQ6IEJvdW5kZWRTdHJpbmcoQ09NUE9TRVJfQ09OVEVYVF9URVJNSU5BTF9URVhUX01BWF9DSEFSUyksXG59KS5jaGVjayhTY2hlbWEubWFrZUZpbHRlcigocmVjb3JkKSA9PiByZWNvcmQubGluZUVuZCA+PSByZWNvcmQubGluZVN0YXJ0KSk7XG5leHBvcnQgdHlwZSBUZXJtaW5hbENvbnRleHRSZWNvcmQgPSB0eXBlb2YgVGVybWluYWxDb250ZXh0UmVjb3JkLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBFbGVtZW50Q29udGV4dFNvdXJjZSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBmdW5jdGlvbk5hbWU6IE51bGxhYmxlU2hvcnRTdHJpbmcsXG4gIGZpbGVOYW1lOiBOdWxsYWJsZVNob3J0U3RyaW5nLFxuICBsaW5lTnVtYmVyOiBTY2hlbWEuTnVsbE9yKE5vbk5lZ2F0aXZlSW50KSxcbiAgY29sdW1uTnVtYmVyOiBTY2hlbWEuTnVsbE9yKE5vbk5lZ2F0aXZlSW50KSxcbn0pO1xuZXhwb3J0IHR5cGUgRWxlbWVudENvbnRleHRTb3VyY2UgPSB0eXBlb2YgRWxlbWVudENvbnRleHRTb3VyY2UuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEVsZW1lbnRDb250ZXh0RGV0YWlscyA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBwYWdlVXJsOiBTaG9ydFN0cmluZyxcbiAgcGFnZVRpdGxlOiBOdWxsYWJsZVNob3J0U3RyaW5nLFxuICB0YWdOYW1lOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDI1NSkpLFxuICBzZWxlY3RvcjogTnVsbGFibGVTaG9ydFN0cmluZyxcbiAgaHRtbFByZXZpZXc6IEJvdW5kZWRTdHJpbmcoQ09NUE9TRVJfQ09OVEVYVF9FTEVNRU5UX0hUTUxfTUFYX0NIQVJTKSxcbiAgY29tcG9uZW50TmFtZTogTnVsbGFibGVTaG9ydFN0cmluZyxcbiAgc291cmNlOiBTY2hlbWEuTnVsbE9yKEVsZW1lbnRDb250ZXh0U291cmNlKSxcbiAgc3R5bGVzOiBCb3VuZGVkU3RyaW5nKENPTVBPU0VSX0NPTlRFWFRfRUxFTUVOVF9TVFlMRVNfTUFYX0NIQVJTKSxcbn0pO1xuZXhwb3J0IHR5cGUgRWxlbWVudENvbnRleHREZXRhaWxzID0gdHlwZW9mIEVsZW1lbnRDb250ZXh0RGV0YWlscy5UeXBlO1xuXG5leHBvcnQgY29uc3QgRWxlbWVudENvbnRleHRSZWNvcmQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4ucmVjb3JkQmFzZSxcbiAga2luZDogU2NoZW1hLkxpdGVyYWwoXCJlbGVtZW50XCIpLFxuICAuLi5FbGVtZW50Q29udGV4dERldGFpbHMuZmllbGRzLFxufSk7XG5leHBvcnQgdHlwZSBFbGVtZW50Q29udGV4dFJlY29yZCA9IHR5cGVvZiBFbGVtZW50Q29udGV4dFJlY29yZC5UeXBlO1xuXG4vLyBgb3B0aW9uYWxLZXlgIHJlamVjdHMgZXhwbGljaXQgdW5kZWZpbmVkIHdpdGhpbiBvbmUgcmVjb3JkLCBzbyBvbmx5IHRoYXQgcmVjb3JkIGlzIGRyb3BwZWQuXG5leHBvcnQgY29uc3QgUHJldmlld0Fubm90YXRpb25Db250ZXh0UmVjb3JkID0gU2NoZW1hLlN0cnVjdCh7XG4gIC4uLnJlY29yZEJhc2UsXG4gIGtpbmQ6IFNjaGVtYS5MaXRlcmFsKFwicHJldmlldy1hbm5vdGF0aW9uXCIpLFxuICBhbm5vdGF0aW9uSWQ6IFNob3J0U3RyaW5nLFxuICBwYWdlVXJsOiBTaG9ydFN0cmluZyxcbiAgcGFnZVRpdGxlOiBOdWxsYWJsZVNob3J0U3RyaW5nLFxuICBjb21tZW50OiBCb3VuZGVkU3RyaW5nKENPTVBPU0VSX0NPTlRFWFRfUFJFVklFV19DT01NRU5UX01BWF9DSEFSUyksXG4gIHRhcmdldFN1bW1hcnk6IFNob3J0U3RyaW5nLFxuICBzdHlsZUNoYW5nZXM6IFNjaGVtYS5BcnJheShTaG9ydFN0cmluZykuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDIwMCkpLFxuICBlbGVtZW50czogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5BcnJheShFbGVtZW50Q29udGV4dERldGFpbHMpLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCg1MCkpKSxcbiAgZWxlbWVudElkczogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5BcnJheShTaG9ydFN0cmluZykuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDUwKSkpLFxuICByZWdpb25Db3VudDogU2NoZW1hLm9wdGlvbmFsS2V5KE5vbk5lZ2F0aXZlSW50KSxcbiAgc3Ryb2tlQ291bnQ6IFNjaGVtYS5vcHRpb25hbEtleShOb25OZWdhdGl2ZUludCksXG4gIHN0eWxlQ2hhbmdlRGV0YWlsczogU2NoZW1hLm9wdGlvbmFsS2V5KFxuICAgIFNjaGVtYS5BcnJheShcbiAgICAgIFNjaGVtYS5TdHJ1Y3Qoe1xuICAgICAgICB0YXJnZXRJZDogU2hvcnRTdHJpbmcsXG4gICAgICAgIHNlbGVjdG9yOiBOdWxsYWJsZVNob3J0U3RyaW5nLFxuICAgICAgICBwcm9wZXJ0eTogU2hvcnRTdHJpbmcsXG4gICAgICAgIHByZXZpb3VzVmFsdWU6IEJvdW5kZWRTdHJpbmcoQ09NUE9TRVJfQ09OVEVYVF9FTEVNRU5UX1NUWUxFU19NQVhfQ0hBUlMpLFxuICAgICAgICB2YWx1ZTogQm91bmRlZFN0cmluZyhDT01QT1NFUl9DT05URVhUX0VMRU1FTlRfU1RZTEVTX01BWF9DSEFSUyksXG4gICAgICB9KSxcbiAgICApLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgyMDApKSxcbiAgKSxcbiAgc2NyZWVuc2hvdENvbnRleHRJZDogU2NoZW1hLm9wdGlvbmFsS2V5KENvbXBvc2VyQ29udGV4dElkKSxcbn0pO1xuZXhwb3J0IHR5cGUgUHJldmlld0Fubm90YXRpb25Db250ZXh0UmVjb3JkID0gdHlwZW9mIFByZXZpZXdBbm5vdGF0aW9uQ29udGV4dFJlY29yZC5UeXBlO1xuXG5leHBvcnQgY29uc3QgUmV2aWV3Q29tbWVudENvbnRleHRSZWNvcmQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4ucmVjb3JkQmFzZSxcbiAga2luZDogU2NoZW1hLkxpdGVyYWwoXCJyZXZpZXctY29tbWVudFwiKSxcbiAgc2VjdGlvbklkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDI1NSkpLFxuICBzZWN0aW9uVGl0bGU6IFNob3J0U3RyaW5nLFxuICBmaWxlUGF0aDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgyXzA0OCkpLFxuICBzdGFydEluZGV4OiBOb25OZWdhdGl2ZUludCxcbiAgZW5kSW5kZXg6IE5vbk5lZ2F0aXZlSW50LFxuICByYW5nZUxhYmVsOiBTaG9ydFN0cmluZyxcbiAgdGV4dDogQm91bmRlZFN0cmluZyhDT01QT1NFUl9DT05URVhUX1JFVklFV19URVhUX01BWF9DSEFSUyksXG4gIGRpZmY6IEJvdW5kZWRTdHJpbmcoQ09NUE9TRVJfQ09OVEVYVF9SRVZJRVdfRElGRl9NQVhfQ0hBUlMpLFxuICBmZW5jZUxhbmd1YWdlOiBTY2hlbWEub3B0aW9uYWxLZXkoQm91bmRlZFN0cmluZyg2NCkpLFxuICBwdWxsUmVxdWVzdDogU2NoZW1hLm9wdGlvbmFsS2V5KFB1bGxSZXF1ZXN0Q29udGV4dE1ldGFkYXRhKSxcbn0pLmNoZWNrKFNjaGVtYS5tYWtlRmlsdGVyKChyZWNvcmQpID0+IHJlY29yZC5lbmRJbmRleCA+PSByZWNvcmQuc3RhcnRJbmRleCkpO1xuZXhwb3J0IHR5cGUgUmV2aWV3Q29tbWVudENvbnRleHRSZWNvcmQgPSB0eXBlb2YgUmV2aWV3Q29tbWVudENvbnRleHRSZWNvcmQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE1lbnRpb25Db250ZXh0UmVjb3JkID0gU2NoZW1hLlN0cnVjdCh7XG4gIC4uLnJlY29yZEJhc2UsXG4gIGtpbmQ6IFNjaGVtYS5MaXRlcmFsKFwibWVudGlvblwiKSxcbiAgcGF0aDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgyXzA0OCkpLFxufSk7XG5leHBvcnQgdHlwZSBNZW50aW9uQ29udGV4dFJlY29yZCA9IHR5cGVvZiBNZW50aW9uQ29udGV4dFJlY29yZC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2tpbGxDb250ZXh0UmVjb3JkID0gU2NoZW1hLlN0cnVjdCh7XG4gIC4uLnJlY29yZEJhc2UsXG4gIGtpbmQ6IFNjaGVtYS5MaXRlcmFsKFwic2tpbGxcIiksXG4gIG5hbWU6IFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoMjU1KSksXG59KTtcbmV4cG9ydCB0eXBlIFNraWxsQ29udGV4dFJlY29yZCA9IHR5cGVvZiBTa2lsbENvbnRleHRSZWNvcmQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFRocmVhZENvbnRleHRSZWNvcmQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4ucmVjb3JkQmFzZSxcbiAga2luZDogU2NoZW1hLkxpdGVyYWwoXCJ0aHJlYWRcIiksXG4gIGVudmlyb25tZW50SWQ6IEVudmlyb25tZW50SWQsXG4gIHRocmVhZElkOiBUaHJlYWRJZCxcbiAgdGl0bGU6IENvbnRleHRMYWJlbCxcbn0pO1xuZXhwb3J0IHR5cGUgVGhyZWFkQ29udGV4dFJlY29yZCA9IHR5cGVvZiBUaHJlYWRDb250ZXh0UmVjb3JkLlR5cGU7XG5cbmNvbnN0IGlzSnNvbiA9IFNjaGVtYS5pcyhTY2hlbWEuSnNvbik7XG5cbi8qKiBFeGNsdWRlcyBrbm93biBkaXNjcmltaW5hdG9ycyBzbyBtYWxmb3JtZWQga25vd24gcmVjb3JkcyBmYWlsIHRoZWlyIG93biBzY2hlbWEuICovXG5leHBvcnQgY29uc3QgVW5rbm93bkNvbnRleHRSZWNvcmQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4ucmVjb3JkQmFzZSxcbiAga2luZDogQ29tcG9zZXJDb250ZXh0S2luZC5jaGVjayhTY2hlbWEuaXNQYXR0ZXJuKEtOT1dOX0tJTkRfUEFUVEVSTikpLFxuICBwYXlsb2FkOiBTY2hlbWEuVW5rbm93bi5jaGVjayhcbiAgICBTY2hlbWEubWFrZUZpbHRlcigocGF5bG9hZCkgPT4ge1xuICAgICAgbGV0IGVuY29kZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVuY29kZWQgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW5jb2RlZCAhPT0gdW5kZWZpbmVkICYmIGVuY29kZWQubGVuZ3RoIDw9IDY0XzAwMCAmJiBpc0pzb24ocGF5bG9hZCk7XG4gICAgfSksXG4gICksXG59KTtcbmV4cG9ydCB0eXBlIFVua25vd25Db250ZXh0UmVjb3JkID0gdHlwZW9mIFVua25vd25Db250ZXh0UmVjb3JkLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBLbm93bkNvbXBvc2VyQ29udGV4dFJlY29yZCA9IFNjaGVtYS5VbmlvbihbXG4gIEltYWdlQ29udGV4dFJlY29yZCxcbiAgRmlsZUNvbnRleHRSZWNvcmQsXG4gIFRlcm1pbmFsQ29udGV4dFJlY29yZCxcbiAgRWxlbWVudENvbnRleHRSZWNvcmQsXG4gIFByZXZpZXdBbm5vdGF0aW9uQ29udGV4dFJlY29yZCxcbiAgUmV2aWV3Q29tbWVudENvbnRleHRSZWNvcmQsXG4gIE1lbnRpb25Db250ZXh0UmVjb3JkLFxuICBTa2lsbENvbnRleHRSZWNvcmQsXG4gIFRocmVhZENvbnRleHRSZWNvcmQsXG5dKTtcbmV4cG9ydCB0eXBlIEtub3duQ29tcG9zZXJDb250ZXh0UmVjb3JkID0gdHlwZW9mIEtub3duQ29tcG9zZXJDb250ZXh0UmVjb3JkLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBDb21wb3NlckNvbnRleHRSZWNvcmQgPSBTY2hlbWEuVW5pb24oW1xuICAuLi5Lbm93bkNvbXBvc2VyQ29udGV4dFJlY29yZC5tZW1iZXJzLFxuICBVbmtub3duQ29udGV4dFJlY29yZCxcbl0pO1xuZXhwb3J0IHR5cGUgQ29tcG9zZXJDb250ZXh0UmVjb3JkID0gdHlwZW9mIENvbXBvc2VyQ29udGV4dFJlY29yZC5UeXBlO1xuXG5leHBvcnQgY29uc3QgQ09NUE9TRVJfQ09OVEVYVF9NQVhfUkVDT1JEUyA9IDIwMDtcbmNvbnN0IENPTVBPU0VSX0NPTlRFWFRfTUFYX1NFUklBTElaRURfQ0hBUlMgPSAxNl8wMDBfMDAwO1xuXG4vKipcbiAqIE1hcmtzIGEgdXNlciBtZXNzYWdlIGFzIGEgZ3Vlc3Qncywgc2VudCBieSB0aGUgb3duZXIuIFRoZSBtZXNzYWdlIGB0ZXh0YCBrZWVwcyB0aGUgYXR0cmlidXRlZFxuICogZm9ybSB0aGUgYWdlbnQgcmVhZHM7IGNsaWVudHMgc2hvdyBgdGV4dGAgaGVyZSB3aXRoIGBuYW1lYCBiZXNpZGUgaXQuIE9ubHkgdGhlIHNlcnZlciBzZXRzIGl0LlxuICovXG5leHBvcnQgY29uc3QgR3Vlc3RNZXNzYWdlQXR0cmlidXRpb24gPSBTY2hlbWEuU3RydWN0KHtcbiAgZ3Vlc3RNZXNzYWdlSWQ6IEd1ZXN0TWVzc2FnZUlkLFxuICBuYW1lOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKEdVRVNUX05BTUVfTUFYX0xFTkdUSCkpLFxuICB0ZXh0OiBTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aChHVUVTVF9NRVNTQUdFX01BWF9MRU5HVEgpKSxcbiAgLyoqIFRoZSBsaW5rIHRoZSBndWVzdCB1c2VkLiBPbmx5IHRoYXQgbGluaydzIGd1ZXN0IG1heSBsb2FkIHRoZSBtZXNzYWdlJ3MgZmlsZXMuICovXG4gIHNoYXJlSWQ6IFNjaGVtYS5vcHRpb25hbChHdWVzdFNoYXJlSWQpLFxufSk7XG5leHBvcnQgdHlwZSBHdWVzdE1lc3NhZ2VBdHRyaWJ1dGlvbiA9IHR5cGVvZiBHdWVzdE1lc3NhZ2VBdHRyaWJ1dGlvbi5UeXBlO1xuXG4vKiogU3RydWN0dXJlZCBjb250ZXh0IHJpZGluZyBvbiBhIHVzZXIgbWVzc2FnZS4gVW5kZWNvZGFibGUgcmVjb3JkcyBhcmUgZHJvcHBlZCwgbm90IGZhdGFsLiAqL1xuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRpb25NZXNzYWdlQ29udGV4dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiBTY2hlbWEuTGl0ZXJhbCgxKSxcbiAgZ3Vlc3Q6IFNjaGVtYS5vcHRpb25hbChHdWVzdE1lc3NhZ2VBdHRyaWJ1dGlvbiksXG4gIHJlY29yZHM6IFNjaGVtYS5BcnJheShTY2hlbWEuVW5rbm93bilcbiAgICAuY2hlY2soXG4gICAgICBTY2hlbWEuaXNNYXhMZW5ndGgoQ09NUE9TRVJfQ09OVEVYVF9NQVhfUkVDT1JEUyksXG4gICAgICBTY2hlbWEubWFrZUZpbHRlcigocmVjb3JkcykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZWNvcmRzKS5sZW5ndGggPD0gQ09NUE9TRVJfQ09OVEVYVF9NQVhfU0VSSUFMSVpFRF9DSEFSUztcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApXG4gICAgLnBpcGUoU2NoZW1hLmRlY29kZVRvKEZvcndhcmRDb21wYXRpYmxlQXJyYXkoQ29tcG9zZXJDb250ZXh0UmVjb3JkKSkpXG4gICAgLmNoZWNrKFxuICAgICAgU2NoZW1hLm1ha2VGaWx0ZXIoXG4gICAgICAgIChyZWNvcmRzKSA9PiBuZXcgU2V0KHJlY29yZHMubWFwKChyZWNvcmQpID0+IHJlY29yZC5jb250ZXh0SWQpKS5zaXplID09PSByZWNvcmRzLmxlbmd0aCxcbiAgICAgICksXG4gICAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdGlvbk1lc3NhZ2VDb250ZXh0ID0gdHlwZW9mIE9yY2hlc3RyYXRpb25NZXNzYWdlQ29udGV4dC5UeXBlO1xuIl0sImZpbGUiOiIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvY29tcG9zZXJDb250ZXh0LnRzIn0=

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9jb21wb3NlckNvbnRleHQudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvY29tcG9zZXJDb250ZXh0LnRzIix7InVybHMiOiI2IiwiaWRzIjoiNyJ9LFsiOCIsIjkiLCIxMCJdLFtdLFsiOCIsIjkiLCIxMCJdLHt9LCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L1NjaGVtYS5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9iYXNlU2NoZW1hcy50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9ndWVzdFNoYXJlLnRzIl0=