@elizaos/plugin-scheduling 2.0.0-alpha.8 → 2.0.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -26
- package/dist/index.js.map +3 -3
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -534,7 +534,6 @@ var setAvailabilityAction = {
|
|
|
534
534
|
};
|
|
535
535
|
|
|
536
536
|
// src/providers/scheduling-context.ts
|
|
537
|
-
import { validateActionKeywords, validateActionRegex } from "@elizaos/core";
|
|
538
537
|
var formatMeetingForContext = (meeting, service) => {
|
|
539
538
|
const timeStr = service.formatSlot(meeting.slot);
|
|
540
539
|
const participants = meeting.participants.map((p) => p.name).join(", ");
|
|
@@ -544,31 +543,7 @@ var formatMeetingForContext = (meeting, service) => {
|
|
|
544
543
|
var schedulingContextProvider = {
|
|
545
544
|
name: "SCHEDULING_CONTEXT",
|
|
546
545
|
description: "Provides context about upcoming meetings and scheduling requests",
|
|
547
|
-
dynamic: true,
|
|
548
|
-
relevanceKeywords: [
|
|
549
|
-
"scheduling",
|
|
550
|
-
"context",
|
|
551
|
-
"schedulingcontextprovider",
|
|
552
|
-
"plugin",
|
|
553
|
-
"status",
|
|
554
|
-
"state",
|
|
555
|
-
"info",
|
|
556
|
-
"details",
|
|
557
|
-
"chat",
|
|
558
|
-
"conversation",
|
|
559
|
-
"agent",
|
|
560
|
-
"room",
|
|
561
|
-
"channel",
|
|
562
|
-
"user"
|
|
563
|
-
],
|
|
564
546
|
get: async (runtime, message, _state) => {
|
|
565
|
-
const __providerKeywords = ["scheduling", "context", "schedulingcontextprovider", "plugin", "status", "state", "info", "details", "chat", "conversation", "agent", "room", "channel", "user"];
|
|
566
|
-
const __providerRegex = new RegExp(`\\b(${__providerKeywords.join("|")})\\b`, "i");
|
|
567
|
-
const __recentMessages = _state?.recentMessagesData || [];
|
|
568
|
-
const __isRelevant = validateActionKeywords(message, __recentMessages, __providerKeywords) || validateActionRegex(message, __recentMessages, __providerRegex);
|
|
569
|
-
if (!__isRelevant) {
|
|
570
|
-
return { text: "" };
|
|
571
|
-
}
|
|
572
547
|
const schedulingService = runtime.getService("SCHEDULING");
|
|
573
548
|
if (!schedulingService) {
|
|
574
549
|
return { text: "" };
|
|
@@ -1795,4 +1770,4 @@ export {
|
|
|
1795
1770
|
DEFAULT_CONFIG
|
|
1796
1771
|
};
|
|
1797
1772
|
|
|
1798
|
-
//# debugId=
|
|
1773
|
+
//# debugId=F3BE18F973373E0264756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
"/**\n * @module confirm-meeting\n * @description Action for confirming or declining meeting attendance\n */\n\nimport type { Action, HandlerCallback, IAgentRuntime, Memory, State } from \"@elizaos/core\";\nimport type { SchedulingService } from \"../services/scheduling-service.js\";\n\nexport const confirmMeetingAction: Action = {\n name: \"CONFIRM_MEETING\",\n similes: [\n \"ACCEPT_MEETING\",\n \"CONFIRM_ATTENDANCE\",\n \"RSVP_YES\",\n \"DECLINE_MEETING\",\n \"CANCEL_ATTENDANCE\",\n ],\n description: \"Confirm or decline attendance for a scheduled meeting\",\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n \tconst __avTextRaw = typeof message?.content?.text === 'string' ? message.content.text : '';\n \tconst __avText = __avTextRaw.toLowerCase();\n \tconst __avKeywords = ['confirm', 'meeting'];\n \tconst __avKeywordOk =\n \t\t__avKeywords.length > 0 &&\n \t\t__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n \tconst __avRegex = new RegExp('\\\\b(?:confirm|meeting)\\\\b', 'i');\n \tconst __avRegexOk = __avRegex.test(__avText);\n \tconst __avSource = String(message?.content?.source ?? message?.source ?? '');\n \tconst __avExpectedSource = '';\n \tconst __avSourceOk = __avExpectedSource\n \t\t? __avSource === __avExpectedSource\n \t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n \tconst __avOptions = options && typeof options === 'object' ? options : {};\n \tconst __avInputOk =\n \t\t__avText.trim().length > 0 ||\n \t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n \t\tBoolean(message?.content && typeof message.content === 'object');\n\n \tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n \t\treturn false;\n \t}\n\n \tconst __avLegacyValidate = async (_runtime: IAgentRuntime, message: Memory) => {\n const text = message.content?.text?.toLowerCase() ?? \"\";\n return (\n (text.includes(\"confirm\") && text.includes(\"meeting\")) ||\n (text.includes(\"accept\") && text.includes(\"meeting\")) ||\n (text.includes(\"decline\") && text.includes(\"meeting\")) ||\n text.includes(\"rsvp\") ||\n text.includes(\"i'll be there\") ||\n text.includes(\"i can't make it\")\n );\n };\n \ttry {\n \t\treturn Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n \t} catch {\n \t\treturn false;\n \t}\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback\n ) => {\n const schedulingService = runtime.getService<SchedulingService>(\"SCHEDULING\");\n if (!schedulingService) {\n await callback?.({\n text: \"Scheduling service is not available. Please try again later.\",\n });\n return { success: false };\n }\n\n const text = message.content?.text?.toLowerCase() ?? \"\";\n const isConfirming =\n text.includes(\"confirm\") ||\n text.includes(\"accept\") ||\n text.includes(\"i'll be there\") ||\n text.includes(\"yes\");\n\n // Get upcoming meetings for this user\n const meetings = await schedulingService.getUpcomingMeetings(message.entityId);\n\n if (meetings.length === 0) {\n await callback?.({\n text: \"You don't have any upcoming meetings to confirm.\",\n });\n return { success: false };\n }\n\n // For now, handle the most recent proposed meeting\n const pendingMeetings = meetings.filter((m) => m.status === \"proposed\");\n if (pendingMeetings.length === 0) {\n await callback?.({\n text: \"All your upcoming meetings have already been confirmed.\",\n });\n return { success: true };\n }\n\n const meeting = pendingMeetings[0];\n\n if (isConfirming) {\n await schedulingService.confirmParticipant(meeting.id, message.entityId);\n const formattedTime = schedulingService.formatSlot(meeting.slot);\n await callback?.({\n text: `Great! I've confirmed your attendance for \"${meeting.title}\" on ${formattedTime}. You'll receive a calendar invite shortly.`,\n });\n } else {\n await schedulingService.declineParticipant(\n meeting.id,\n message.entityId,\n \"User declined via chat\"\n );\n await callback?.({\n text: `I've noted that you can't make it to \"${meeting.title}\". I'll let the other participants know and see if we can find another time.`,\n });\n }\n\n return { success: true };\n },\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Yes, I'll be there for the meeting\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Great! I've confirmed your attendance for \\\"Coffee Chat\\\" on Mon, Jan 20, 10:00 AM - 11:00 AM. You'll receive a calendar invite shortly.\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: { text: \"I can't make the meeting, something came up\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I've noted that you can't make it to \\\"Coffee Chat\\\". I'll let the other participants know and see if we can find another time.\",\n },\n },\n ],\n ],\n};\n",
|
|
6
6
|
"/** Finds available slots and proposes meeting times based on user availability */\n\nimport type { Action, HandlerCallback, IAgentRuntime, Memory, State } from \"@elizaos/core\";\nimport type { SchedulingService } from \"../services/scheduling-service.js\";\nimport type { Participant, TimeSlot } from \"../types.js\";\n\nconst parseMeetingRequest = (\n text: string\n): {\n title?: string;\n duration?: number;\n urgency?: \"flexible\" | \"soon\" | \"urgent\";\n} => {\n const normalized = text.toLowerCase();\n const result: {\n title?: string;\n duration?: number;\n urgency?: \"flexible\" | \"soon\" | \"urgent\";\n } = {};\n\n // Try to extract a title\n const titleMatch =\n /(?:schedule|book|arrange|set up|plan)\\s+(?:a\\s+)?(?:meeting|call|chat)\\s+(?:about|for|regarding|to discuss)\\s+[\"']?([^\"'\\n.]+)[\"']?/i.exec(\n text\n );\n if (titleMatch) {\n result.title = titleMatch[1].trim();\n }\n\n // Extract duration\n const durationMatch = /(\\d+)\\s*(?:minute|min|hour|hr)/i.exec(normalized);\n if (durationMatch) {\n let duration = Number.parseInt(durationMatch[1], 10);\n if (normalized.includes(\"hour\") || normalized.includes(\"hr\")) {\n duration *= 60;\n }\n result.duration = duration;\n }\n\n // Extract urgency\n if (\n normalized.includes(\"urgent\") ||\n normalized.includes(\"asap\") ||\n normalized.includes(\"immediately\")\n ) {\n result.urgency = \"urgent\";\n } else if (normalized.includes(\"soon\") || normalized.includes(\"this week\")) {\n result.urgency = \"soon\";\n } else {\n result.urgency = \"flexible\";\n }\n\n return result;\n};\n\nconst formatProposedSlots = (\n slots: Array<{ slot: TimeSlot; score: number; reasons: string[] }>\n): string => {\n if (slots.length === 0) {\n return \"I couldn't find any available time slots.\";\n }\n\n const options: Intl.DateTimeFormatOptions = {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n };\n\n const formatted = slots.map((proposal, index) => {\n const start = new Date(proposal.slot.start);\n const end = new Date(proposal.slot.end);\n\n const formatter = new Intl.DateTimeFormat(\"en-US\", {\n ...options,\n timeZone: proposal.slot.timeZone,\n });\n\n const timeFormatter = new Intl.DateTimeFormat(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZone: proposal.slot.timeZone,\n });\n\n const dateStr = formatter.format(start);\n const endTimeStr = timeFormatter.format(end);\n\n let entry = `${index + 1}. ${dateStr} - ${endTimeStr}`;\n\n if (proposal.reasons.length > 0) {\n entry += ` (${proposal.reasons[0]})`;\n }\n\n return entry;\n });\n\n return `Here are some times that work:\\n\\n${formatted.join(\"\\n\")}\\n\\nWhich option works best for you? Just say the number.`;\n};\n\nexport const scheduleMeetingAction: Action = {\n name: \"SCHEDULE_MEETING\",\n similes: [\"BOOK_MEETING\", \"ARRANGE_MEETING\", \"SET_UP_MEETING\", \"PLAN_MEETING\", \"CREATE_MEETING\"],\n description: \"Schedule a meeting between multiple participants by finding a suitable time slot\",\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n \tconst __avTextRaw = typeof message?.content?.text === 'string' ? message.content.text : '';\n \tconst __avText = __avTextRaw.toLowerCase();\n \tconst __avKeywords = ['schedule', 'meeting'];\n \tconst __avKeywordOk =\n \t\t__avKeywords.length > 0 &&\n \t\t__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n \tconst __avRegex = new RegExp('\\\\b(?:schedule|meeting)\\\\b', 'i');\n \tconst __avRegexOk = __avRegex.test(__avText);\n \tconst __avSource = String(message?.content?.source ?? message?.source ?? '');\n \tconst __avExpectedSource = '';\n \tconst __avSourceOk = __avExpectedSource\n \t\t? __avSource === __avExpectedSource\n \t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n \tconst __avOptions = options && typeof options === 'object' ? options : {};\n \tconst __avInputOk =\n \t\t__avText.trim().length > 0 ||\n \t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n \t\tBoolean(message?.content && typeof message.content === 'object');\n\n \tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n \t\treturn false;\n \t}\n\n \tconst __avLegacyValidate = async (_runtime: IAgentRuntime, message: Memory) => {\n const text = message.content?.text?.toLowerCase() ?? \"\";\n return (\n text.includes(\"schedule\") ||\n text.includes(\"book\") ||\n text.includes(\"arrange\") ||\n text.includes(\"set up\") ||\n text.includes(\"plan\") ||\n (text.includes(\"meet\") && !text.includes(\"nice to meet\"))\n );\n };\n \ttry {\n \t\treturn Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n \t} catch {\n \t\treturn false;\n \t}\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback\n ) => {\n const schedulingService = runtime.getService<SchedulingService>(\"SCHEDULING\");\n if (!schedulingService) {\n await callback?.({\n text: \"Scheduling service is not available. Please try again later.\",\n });\n return { success: false };\n }\n\n const entityId = message.entityId;\n const roomId = message.roomId;\n\n if (!entityId || !roomId) {\n await callback?.({\n text: \"I could not identify the conversation context. Please try again.\",\n });\n return { success: false };\n }\n\n const text = message.content?.text ?? \"\";\n const parsed = parseMeetingRequest(text);\n\n const userAvailability = await schedulingService.getAvailability(entityId);\n if (!userAvailability || userAvailability.weekly.length === 0) {\n await callback?.({\n text: \"I don't have your availability yet. Tell me when you're free, e.g. \\\"weekdays 9am-5pm\\\"\",\n });\n return { success: false };\n }\n\n const participants: Participant[] = [{ entityId, name: \"You\", availability: userAvailability }];\n\n const title = parsed.title || \"Meeting\";\n const request = await schedulingService.createSchedulingRequest(\n roomId,\n title,\n participants,\n {\n preferredDurationMinutes: parsed.duration || 30,\n maxDaysOut: parsed.urgency === \"urgent\" ? 3 : parsed.urgency === \"soon\" ? 7 : 14,\n },\n {\n urgency: parsed.urgency,\n }\n );\n\n const result = await schedulingService.findAvailableSlots(request);\n if (!result.success || result.proposedSlots.length === 0) {\n await callback?.({\n text: result.failureReason || \"No available slots found. Try expanding your availability?\",\n });\n return { success: false };\n }\n\n await callback?.({ text: formatProposedSlots(result.proposedSlots) });\n\n return {\n success: true,\n data: {\n requestId: request.id,\n proposedSlots: result.proposedSlots,\n },\n };\n },\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Can you schedule a meeting for me?\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Here are some times that work:\\n\\n1. Mon, Jan 20 at 10:00am - 10:30am (Standard business hours)\\n2. Mon, Jan 20 at 2:00pm - 2:30pm (Standard business hours)\\n3. Tue, Jan 21 at 9:00am - 9:30am (Preferred time)\\n\\nWhich option works best for you? Just say the number.\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: { text: \"I'd like to set up a call for next week\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Here are some times that work:\\n\\n1. Mon, Jan 20 at 10:00am - 10:30am (Standard business hours)\\n2. Tue, Jan 21 at 2:00pm - 2:30pm (Preferred day)\\n3. Wed, Jan 22 at 11:00am - 11:30am (Standard business hours)\\n\\nWhich option works best for you? Just say the number.\",\n },\n },\n ],\n ],\n};\n",
|
|
7
7
|
"/** Parses natural language availability (\"weekdays 9-5\", \"monday afternoons\") and saves to scheduling */\n\nimport type { Action, HandlerCallback, IAgentRuntime, Memory, State } from \"@elizaos/core\";\nimport type { SchedulingService } from \"../services/scheduling-service.js\";\nimport type { AvailabilityWindow, DayOfWeek } from \"../types.js\";\n\nconst DAY_NAMES: Record<string, DayOfWeek> = {\n monday: \"mon\",\n mon: \"mon\",\n tuesday: \"tue\",\n tue: \"tue\",\n wednesday: \"wed\",\n wed: \"wed\",\n thursday: \"thu\",\n thu: \"thu\",\n friday: \"fri\",\n fri: \"fri\",\n saturday: \"sat\",\n sat: \"sat\",\n sunday: \"sun\",\n sun: \"sun\",\n};\n\nconst TIME_PRESETS: Record<string, { start: number; end: number }> = {\n morning: { start: 540, end: 720 },\n afternoon: { start: 720, end: 1020 },\n evening: { start: 1020, end: 1260 },\n \"business hours\": { start: 540, end: 1020 },\n \"work hours\": { start: 540, end: 1020 },\n};\n\nconst parseTimeToMinutes = (timeStr: string): number | null => {\n const normalized = timeStr.toLowerCase().trim();\n\n // Try \"HH:MM\" 24-hour format\n let match = /^(\\d{1,2}):(\\d{2})$/.exec(normalized);\n if (match) {\n const hours = Number.parseInt(match[1], 10);\n const minutes = Number.parseInt(match[2], 10);\n if (hours >= 0 && hours < 24 && minutes >= 0 && minutes < 60) {\n return hours * 60 + minutes;\n }\n }\n\n // Try \"H:MMam/pm\" or \"HHam/pm\" format\n match = /^(\\d{1,2})(?::(\\d{2}))?\\s*(am|pm)$/i.exec(normalized);\n if (match) {\n let hours = Number.parseInt(match[1], 10);\n const minutes = match[2] ? Number.parseInt(match[2], 10) : 0;\n const isPm = match[3].toLowerCase() === \"pm\";\n\n if (hours === 12) {\n hours = isPm ? 12 : 0;\n } else if (isPm) {\n hours += 12;\n }\n\n if (hours >= 0 && hours < 24 && minutes >= 0 && minutes < 60) {\n return hours * 60 + minutes;\n }\n }\n\n return null;\n};\n\nconst parseDays = (dayStr: string): DayOfWeek[] => {\n const normalized = dayStr.toLowerCase().trim();\n\n if (normalized === \"weekday\" || normalized === \"weekdays\") {\n return [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\"];\n }\n\n if (normalized === \"weekend\" || normalized === \"weekends\") {\n return [\"sat\", \"sun\"];\n }\n\n if (normalized === \"everyday\" || normalized === \"every day\" || normalized === \"daily\") {\n return [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\", \"sun\"];\n }\n\n const day = DAY_NAMES[normalized];\n return day ? [day] : [];\n};\n\nconst parseAvailabilityText = (\n text: string\n): { windows: AvailabilityWindow[]; timeZone?: string } | null => {\n const normalized = text.toLowerCase();\n const windows: AvailabilityWindow[] = [];\n\n // Try to extract time zone\n let timeZone: string | undefined;\n const tzMatch =\n /(?:time\\s*zone|tz|timezone)[\\s:]*([A-Za-z_/]+)/i.exec(text) ||\n /(America\\/[A-Za-z_]+|Europe\\/[A-Za-z_]+|Asia\\/[A-Za-z_]+|Pacific\\/[A-Za-z_]+|UTC)/i.exec(text);\n if (tzMatch) {\n timeZone = tzMatch[1];\n }\n\n // Pattern: \"weekdays 9am to 5pm\" or \"monday 10am-2pm\"\n const dayTimePattern =\n /(weekdays?|weekends?|monday|tuesday|wednesday|thursday|friday|saturday|sunday|mon|tue|wed|thu|fri|sat|sun|daily|every\\s*day)(?:\\s+(?:and\\s+)?(?:weekdays?|weekends?|monday|tuesday|wednesday|thursday|friday|saturday|sunday|mon|tue|wed|thu|fri|sat|sun))*\\s+(?:from\\s+)?(\\d{1,2}(?::\\d{2})?\\s*(?:am|pm)?)\\s*(?:to|-)\\s*(\\d{1,2}(?::\\d{2})?\\s*(?:am|pm)?)/gi;\n\n let match: RegExpExecArray | null;\n match = dayTimePattern.exec(normalized);\n while (match !== null) {\n const dayPart = match[1];\n const startTime = match[2];\n const endTime = match[3];\n\n const days = parseDays(dayPart);\n const startMinutes = parseTimeToMinutes(startTime);\n const endMinutes = parseTimeToMinutes(endTime);\n\n if (days.length > 0 && startMinutes !== null && endMinutes !== null) {\n for (const day of days) {\n windows.push({\n day,\n startMinutes,\n endMinutes,\n });\n }\n }\n match = dayTimePattern.exec(normalized);\n }\n\n // Pattern: \"weekday mornings\" or \"monday afternoons\"\n const dayPresetPattern =\n /(weekdays?|weekends?|monday|tuesday|wednesday|thursday|friday|saturday|sunday|mon|tue|wed|thu|fri|sat|sun|daily|every\\s*day)\\s+(morning|afternoon|evening|business\\s*hours?|work\\s*hours?)/gi;\n\n match = dayPresetPattern.exec(normalized);\n while (match !== null) {\n const dayPart = match[1];\n const timePart = match[2].toLowerCase();\n\n const days = parseDays(dayPart);\n const timeRange = TIME_PRESETS[timePart] || TIME_PRESETS[timePart.replace(/s$/, \"\")];\n\n if (days.length > 0 && timeRange) {\n for (const day of days) {\n // Avoid duplicates\n const exists = windows.some(\n (w) =>\n w.day === day && w.startMinutes === timeRange.start && w.endMinutes === timeRange.end\n );\n if (!exists) {\n windows.push({\n day,\n startMinutes: timeRange.start,\n endMinutes: timeRange.end,\n });\n }\n }\n }\n match = dayPresetPattern.exec(normalized);\n }\n\n // Fallback: \"I'm free mornings\" (assume weekdays)\n if (windows.length === 0) {\n for (const [preset, range] of Object.entries(TIME_PRESETS)) {\n if (normalized.includes(preset)) {\n // Assume weekdays if no day specified\n for (const day of [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\"] as DayOfWeek[]) {\n windows.push({\n day,\n startMinutes: range.start,\n endMinutes: range.end,\n });\n }\n break;\n }\n }\n }\n\n if (windows.length === 0) {\n return null;\n }\n\n return { windows, timeZone };\n};\n\nconst formatTime = (minutes: number): string => {\n const hours = Math.floor(minutes / 60);\n const mins = minutes % 60;\n const period = hours >= 12 ? \"pm\" : \"am\";\n const displayHours = hours > 12 ? hours - 12 : hours === 0 ? 12 : hours;\n return mins > 0\n ? `${displayHours}:${mins.toString().padStart(2, \"0\")}${period}`\n : `${displayHours}${period}`;\n};\n\nconst formatDay = (day: DayOfWeek): string => {\n const names: Record<DayOfWeek, string> = {\n mon: \"Monday\",\n tue: \"Tuesday\",\n wed: \"Wednesday\",\n thu: \"Thursday\",\n fri: \"Friday\",\n sat: \"Saturday\",\n sun: \"Sunday\",\n };\n return names[day];\n};\n\nexport const setAvailabilityAction: Action = {\n name: \"SET_AVAILABILITY\",\n similes: [\"UPDATE_AVAILABILITY\", \"SET_SCHEDULE\", \"UPDATE_SCHEDULE\", \"SET_FREE_TIME\", \"WHEN_FREE\"],\n description: \"Set the user's availability for scheduling meetings\",\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n \tconst __avTextRaw = typeof message?.content?.text === 'string' ? message.content.text : '';\n \tconst __avText = __avTextRaw.toLowerCase();\n \tconst __avKeywords = ['set', 'availability'];\n \tconst __avKeywordOk =\n \t\t__avKeywords.length > 0 &&\n \t\t__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n \tconst __avRegex = new RegExp('\\\\b(?:set|availability)\\\\b', 'i');\n \tconst __avRegexOk = __avRegex.test(__avText);\n \tconst __avSource = String(message?.content?.source ?? message?.source ?? '');\n \tconst __avExpectedSource = '';\n \tconst __avSourceOk = __avExpectedSource\n \t\t? __avSource === __avExpectedSource\n \t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n \tconst __avOptions = options && typeof options === 'object' ? options : {};\n \tconst __avInputOk =\n \t\t__avText.trim().length > 0 ||\n \t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n \t\tBoolean(message?.content && typeof message.content === 'object');\n\n \tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n \t\treturn false;\n \t}\n\n \tconst __avLegacyValidate = async (_runtime: IAgentRuntime, message: Memory) => {\n const text = message.content?.text?.toLowerCase() ?? \"\";\n return (\n text.includes(\"available\") ||\n text.includes(\"availability\") ||\n text.includes(\"free on\") ||\n text.includes(\"i'm free\") ||\n text.includes(\"can meet\") ||\n text.includes(\"my time\") ||\n text.includes(\"morning\") ||\n text.includes(\"afternoon\") ||\n text.includes(\"evening\")\n );\n };\n \ttry {\n \t\treturn Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n \t} catch {\n \t\treturn false;\n \t}\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback\n ) => {\n const schedulingService = runtime.getService<SchedulingService>(\"SCHEDULING\");\n if (!schedulingService) {\n await callback?.({\n text: \"Scheduling service is not available. Please try again later.\",\n });\n return { success: false };\n }\n\n const entityId = message.entityId;\n if (!entityId) {\n await callback?.({\n text: \"I could not identify you. Please try again.\",\n });\n return { success: false };\n }\n\n const text = message.content?.text ?? \"\";\n const parsed = parseAvailabilityText(text);\n\n if (!parsed || parsed.windows.length === 0) {\n await callback?.({\n text: 'I couldn\\'t understand your availability. Try: \"weekdays 9am-5pm\" or \"Monday afternoons\"',\n });\n return { success: false };\n }\n\n const defaultTimeZone = process.env.DEFAULT_TIMEZONE ?? \"America/New_York\";\n let availability = await schedulingService.getAvailability(entityId);\n if (!availability) {\n availability = { timeZone: parsed.timeZone || defaultTimeZone, weekly: [], exceptions: [] };\n }\n if (parsed.timeZone) availability.timeZone = parsed.timeZone;\n\n for (const newWindow of parsed.windows) {\n const exists = availability.weekly.some(\n (w) =>\n w.day === newWindow.day &&\n w.startMinutes === newWindow.startMinutes &&\n w.endMinutes === newWindow.endMinutes\n );\n if (!exists) availability.weekly.push(newWindow);\n }\n\n await schedulingService.saveAvailability(entityId, availability);\n\n const addedWindows = parsed.windows\n .map((w) => `${formatDay(w.day)} ${formatTime(w.startMinutes)}-${formatTime(w.endMinutes)}`)\n .join(\", \");\n\n await callback?.({\n text: `Got it! I've saved your availability: ${addedWindows}. I'll use this to find meeting times that work for you.`,\n });\n\n return { success: true };\n },\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: { text: \"I'm free weekdays 9am to 5pm\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Got it! I've saved your availability: Monday 9am-5pm, Tuesday 9am-5pm, Wednesday 9am-5pm, Thursday 9am-5pm, Friday 9am-5pm. I'll use this to find meeting times that work for you.\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Available Monday afternoons and Wednesday mornings\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Got it! I've saved your availability: Monday 12pm-5pm, Wednesday 9am-12pm. I'll use this to find meeting times that work for you.\",\n },\n },\n ],\n ],\n};\n",
|
|
8
|
-
"/**\n * @module scheduling-context\n * @description Provider that gives the agent context about scheduling state\n */\n\nimport type { IAgentRuntime, Memory, Provider, State } from \"@elizaos/core\";\nimport type { SchedulingService } from \"../services/scheduling-service.js\";\nimport type { Meeting } from \"../types.js\";\
|
|
8
|
+
"/**\n * @module scheduling-context\n * @description Provider that gives the agent context about scheduling state\n */\n\nimport type { IAgentRuntime, Memory, Provider, State } from \"@elizaos/core\";\nimport type { SchedulingService } from \"../services/scheduling-service.js\";\nimport type { Meeting } from \"../types.js\";\n\n/**\n * Format a meeting for display in context\n */\nconst formatMeetingForContext = (meeting: Meeting, service: SchedulingService): string => {\n const timeStr = service.formatSlot(meeting.slot);\n const participants = meeting.participants.map((p) => p.name).join(\", \");\n const locationStr =\n meeting.location.type === \"in_person\"\n ? `at ${meeting.location.name}`\n : meeting.location.type === \"virtual\"\n ? \"virtual meeting\"\n : \"phone call\";\n\n return `- \"${meeting.title}\" on ${timeStr} (${locationStr}) with ${participants} [${meeting.status}]`;\n};\n\nexport const schedulingContextProvider: Provider = {\n name: \"SCHEDULING_CONTEXT\",\n description: \"Provides context about upcoming meetings and scheduling requests\",\n get: async (runtime: IAgentRuntime, message: Memory, _state: State) => {\n const schedulingService = runtime.getService<SchedulingService>(\"SCHEDULING\");\n if (!schedulingService) {\n return { text: \"\" };\n }\n\n const entityId = message.entityId;\n if (!entityId) {\n return { text: \"\" };\n }\n\n const sections: string[] = [];\n\n try {\n const meetings = await schedulingService.getUpcomingMeetings(entityId);\n\n if (meetings.length > 0) {\n const proposedMeetings = meetings.filter((m) => m.status === \"proposed\");\n const confirmedMeetings = meetings.filter(\n (m) => m.status === \"confirmed\" || m.status === \"scheduled\"\n );\n\n if (proposedMeetings.length > 0) {\n sections.push(\"Meetings pending confirmation:\");\n for (const meeting of proposedMeetings.slice(0, 3)) {\n sections.push(formatMeetingForContext(meeting, schedulingService));\n }\n }\n\n if (confirmedMeetings.length > 0) {\n sections.push(\"\\nUpcoming confirmed meetings:\");\n for (const meeting of confirmedMeetings.slice(0, 5)) {\n sections.push(formatMeetingForContext(meeting, schedulingService));\n }\n }\n }\n\n const availability = await schedulingService.getAvailability(entityId);\n if (availability) {\n const weeklyCount = availability.weekly.length;\n const exceptionsCount = availability.exceptions.length;\n\n sections.push(\n `\\nUser has ${weeklyCount} recurring availability windows set (timezone: ${availability.timeZone})`\n );\n if (exceptionsCount > 0) {\n sections.push(`User has ${exceptionsCount} availability exceptions`);\n }\n } else {\n sections.push(\"\\nUser has not set their availability yet\");\n }\n } catch {\n // Silently fail if storage not ready\n }\n\n if (sections.length === 0) {\n return { text: \"\" };\n }\n\n return { text: `<scheduling_context>\\n${sections.join(\"\\n\")}\\n</scheduling_context>` };\n },\n};\n",
|
|
9
9
|
"/** Core scheduling service for multi-party coordination, availability intersection, and calendar management */\n\nimport { type IAgentRuntime, logger, Service, type UUID } from \"@elizaos/core\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n getAvailabilityStorage,\n getMeetingStorage,\n getReminderStorage,\n getSchedulingRequestStorage,\n} from \"../storage.js\";\nimport type {\n Availability,\n CalendarEvent,\n CalendarInvite,\n DayOfWeek,\n Meeting,\n MeetingParticipant,\n MeetingStatus,\n Participant,\n ProposedSlot,\n Reminder,\n ReminderType,\n SchedulingConstraints,\n SchedulingRequest,\n SchedulingResult,\n SchedulingServiceConfig,\n TimeSlot,\n} from \"../types.js\";\nimport { DEFAULT_CONFIG } from \"../types.js\";\nimport { generateIcs } from \"../utils/ical.js\";\n\nconst DAY_INDEX: Record<string, DayOfWeek> = {\n Mon: \"mon\",\n Tue: \"tue\",\n Wed: \"wed\",\n Thu: \"thu\",\n Fri: \"fri\",\n Sat: \"sat\",\n Sun: \"sun\",\n};\n\nconst getZonedParts = (date: Date, timeZone: string): Record<string, string> => {\n const formatter = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n weekday: \"short\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n });\n const parts = formatter.formatToParts(date);\n const out: Record<string, string> = {};\n for (const part of parts) {\n if (part.type !== \"literal\") {\n out[part.type] = part.value;\n }\n }\n return out;\n};\n\nconst getDayOfWeek = (date: Date, timeZone: string): DayOfWeek => {\n const parts = getZonedParts(date, timeZone);\n return DAY_INDEX[parts.weekday] ?? \"mon\";\n};\n\nconst getMinutesOfDay = (date: Date, timeZone: string): number => {\n const parts = getZonedParts(date, timeZone);\n return Number(parts.hour) * 60 + Number(parts.minute);\n};\n\nconst getDateString = (date: Date, timeZone: string): string => {\n const parts = getZonedParts(date, timeZone);\n return `${parts.year}-${parts.month}-${parts.day}`;\n};\n\nconst dateFromMinutes = (dateStr: string, minutes: number, timeZone: string): Date => {\n const [year, month, day] = dateStr.split(\"-\").map(Number);\n const hours = Math.floor(minutes / 60);\n const mins = minutes % 60;\n\n // Create a date string in the target time zone\n const localDateStr = `${year}-${String(month).padStart(2, \"0\")}-${String(day).padStart(2, \"0\")}T${String(hours).padStart(2, \"0\")}:${String(mins).padStart(2, \"0\")}:00`;\n\n // Use Intl to get the offset for this time zone\n const formatter = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n timeZoneName: \"longOffset\",\n });\n\n // Create a temporary date to get the offset\n const tempDate = new Date(`${localDateStr}Z`);\n const offsetParts = formatter.formatToParts(tempDate);\n const offsetPart = offsetParts.find((p) => p.type === \"timeZoneName\");\n\n // Parse the offset (e.g., \"GMT-05:00\" -> -300)\n let offsetMinutes = 0;\n if (offsetPart) {\n const match = /GMT([+-])(\\d{2}):(\\d{2})/.exec(offsetPart.value);\n if (match) {\n const sign = match[1] === \"+\" ? 1 : -1;\n offsetMinutes = sign * (Number(match[2]) * 60 + Number(match[3]));\n }\n }\n\n // Create the final date by adjusting for the offset\n const utcMs = Date.UTC(year, month - 1, day, hours, mins, 0, 0) - offsetMinutes * 60 * 1000;\n return new Date(utcMs);\n};\n\nconst addDays = (date: Date, days: number): Date => {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n};\n\nexport class SchedulingService extends Service {\n static serviceType = \"SCHEDULING\";\n capabilityDescription =\n \"Coordinates scheduling and calendar management across multiple participants\";\n\n private schedulingConfig: SchedulingServiceConfig;\n\n constructor(runtime?: IAgentRuntime, schedulingConfig?: Partial<SchedulingServiceConfig>) {\n super(runtime);\n this.schedulingConfig = { ...DEFAULT_CONFIG, ...schedulingConfig };\n }\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new SchedulingService(runtime);\n const healthStatus = await service.healthCheck();\n\n if (!healthStatus.healthy) {\n logger.warn(`[SchedulingService] Started with warnings: ${healthStatus.issues.join(\", \")}`);\n } else {\n logger.info(`[SchedulingService] Started for agent ${runtime.agentId}`);\n }\n\n // Log optional capabilities at debug level so they don't spam warnings.\n if (healthStatus.optionalMissing.length > 0) {\n logger.debug(\n `[SchedulingService] Optional services not loaded: ${healthStatus.optionalMissing.join(\", \")}`,\n );\n }\n\n return service;\n }\n\n async stop(): Promise<void> {\n logger.info(\"[SchedulingService] Stopped\");\n }\n\n async healthCheck(): Promise<{ healthy: boolean; issues: string[]; optionalMissing: string[] }> {\n const issues: string[] = [];\n const optionalMissing: string[] = [];\n\n if (!this.runtime.getComponent) {\n issues.push(\"Runtime missing getComponent method\");\n }\n if (!this.runtime.createComponent) {\n issues.push(\"Runtime missing createComponent method\");\n }\n\n // EMAIL is an optional integration — the scheduling service works\n // without it (e.g. calendar-only mode). Don't treat it as a health\n // issue; track it separately so callers can log at the right level.\n const emailService = this.runtime.getService(\"EMAIL\");\n if (!emailService) {\n optionalMissing.push(\"EMAIL service not available\");\n }\n\n return { healthy: issues.length === 0, issues, optionalMissing };\n }\n\n getSchedulingConfig(): SchedulingServiceConfig {\n return { ...this.schedulingConfig };\n }\n\n async saveAvailability(entityId: UUID, availability: Availability): Promise<void> {\n const storage = getAvailabilityStorage(this.runtime);\n await storage.save(entityId, availability);\n }\n\n async getAvailability(entityId: UUID): Promise<Availability | null> {\n return getAvailabilityStorage(this.runtime).get(entityId);\n }\n\n isAvailableAt(availability: Availability, dateTime: Date): boolean {\n const day = getDayOfWeek(dateTime, availability.timeZone);\n const minutes = getMinutesOfDay(dateTime, availability.timeZone);\n const dateStr = getDateString(dateTime, availability.timeZone);\n\n // Check exceptions first\n const exception = availability.exceptions.find((e) => e.date === dateStr);\n if (exception) {\n if (exception.unavailable) return false;\n if (exception.startMinutes !== undefined && exception.endMinutes !== undefined) {\n return minutes >= exception.startMinutes && minutes < exception.endMinutes;\n }\n }\n\n // Check weekly availability\n return availability.weekly.some(\n (window) =>\n window.day === day && minutes >= window.startMinutes && minutes < window.endMinutes\n );\n }\n\n async createSchedulingRequest(\n roomId: UUID,\n title: string,\n participants: Participant[],\n constraints: Partial<SchedulingConstraints> = {},\n options?: {\n description?: string;\n urgency?: \"flexible\" | \"soon\" | \"urgent\";\n }\n ): Promise<SchedulingRequest> {\n const request: SchedulingRequest = {\n id: uuidv4(),\n roomId,\n title,\n description: options?.description,\n participants,\n constraints: {\n minDurationMinutes:\n constraints.minDurationMinutes ?? this.schedulingConfig.minMeetingDuration,\n preferredDurationMinutes:\n constraints.preferredDurationMinutes ?? this.schedulingConfig.defaultMeetingDuration,\n maxDaysOut: constraints.maxDaysOut ?? this.schedulingConfig.defaultMaxDaysOut,\n preferredTimes: constraints.preferredTimes,\n preferredDays: constraints.preferredDays,\n locationType: constraints.locationType,\n locationConstraint: constraints.locationConstraint,\n },\n urgency: options?.urgency ?? \"flexible\",\n createdAt: Date.now(),\n maxProposals: this.schedulingConfig.maxProposals,\n };\n\n const storage = getSchedulingRequestStorage(this.runtime);\n await storage.save(request);\n\n logger.info(`[SchedulingService] Created scheduling request ${request.id} for \"${title}\"`);\n return request;\n }\n\n async findAvailableSlots(request: SchedulingRequest): Promise<SchedulingResult> {\n const { participants, constraints } = request;\n\n if (participants.length === 0) {\n return {\n success: false,\n proposedSlots: [],\n failureReason: \"No participants specified\",\n };\n }\n\n // Collect availability for all participants\n const availabilities = participants.map((p) => ({\n participant: p,\n availability: p.availability,\n }));\n\n // Find common time zone (use first participant's as reference)\n const referenceTimeZone = availabilities[0].availability.timeZone;\n\n // Generate candidate slots for the next N days\n const now = new Date();\n const candidateSlots: TimeSlot[] = [];\n\n for (let dayOffset = 0; dayOffset < constraints.maxDaysOut; dayOffset++) {\n const date = addDays(now, dayOffset);\n const day = getDayOfWeek(date, referenceTimeZone);\n\n // Skip if not a preferred day\n if (constraints.preferredDays && !constraints.preferredDays.includes(day)) {\n continue;\n }\n\n const dateStr = getDateString(date, referenceTimeZone);\n\n // Find intersection of all weekly windows for this day\n const dayWindows = this.findDayIntersection(\n availabilities,\n day,\n dateStr,\n constraints.minDurationMinutes\n );\n\n for (const window of dayWindows) {\n // Generate slots within this window\n const slotDuration = constraints.preferredDurationMinutes;\n let startMinutes = window.start;\n\n while (startMinutes + slotDuration <= window.end) {\n // Check if this is today and the slot is in the past\n if (dayOffset === 0) {\n const currentMinutes = getMinutesOfDay(now, referenceTimeZone);\n if (startMinutes < currentMinutes + 30) {\n // At least 30 min buffer\n startMinutes += 30;\n continue;\n }\n }\n\n const startDate = dateFromMinutes(dateStr, startMinutes, referenceTimeZone);\n const endDate = dateFromMinutes(dateStr, startMinutes + slotDuration, referenceTimeZone);\n\n candidateSlots.push({\n start: startDate.toISOString(),\n end: endDate.toISOString(),\n timeZone: referenceTimeZone,\n });\n\n startMinutes += 30; // Move in 30-min increments\n }\n }\n }\n\n if (candidateSlots.length === 0) {\n // Find which participants have no overlap\n const conflicting = this.findConflictingParticipants(availabilities);\n return {\n success: false,\n proposedSlots: [],\n failureReason: \"No available time slots found within constraints\",\n conflictingParticipants: conflicting,\n };\n }\n\n // Score and rank slots\n const scoredSlots = candidateSlots.map((slot) => this.scoreSlot(slot, request));\n scoredSlots.sort((a, b) => b.score - a.score);\n\n // Take top 3 slots\n const proposedSlots = scoredSlots.slice(0, 3);\n\n return {\n success: true,\n proposedSlots,\n };\n }\n\n private findDayIntersection(\n availabilities: Array<{ participant: Participant; availability: Availability }>,\n day: DayOfWeek,\n dateStr: string,\n minDuration: number\n ): Array<{ start: number; end: number }> {\n // Get windows for each participant on this day\n const participantWindows = availabilities.map(({ availability }) => {\n // Check for exceptions\n const exception = availability.exceptions.find((e) => e.date === dateStr);\n if (exception?.unavailable) {\n return [];\n }\n\n if (exception?.startMinutes !== undefined && exception?.endMinutes !== undefined) {\n return [{ start: exception.startMinutes, end: exception.endMinutes }];\n }\n\n // Use weekly windows\n return availability.weekly\n .filter((w) => w.day === day)\n .map((w) => ({ start: w.startMinutes, end: w.endMinutes }));\n });\n\n // Find intersection\n if (participantWindows.some((windows) => windows.length === 0)) {\n return [];\n }\n\n // Start with first participant's windows\n let intersection = participantWindows[0];\n\n // Intersect with each subsequent participant\n for (let i = 1; i < participantWindows.length; i++) {\n const newIntersection: Array<{ start: number; end: number }> = [];\n\n for (const windowA of intersection) {\n for (const windowB of participantWindows[i]) {\n const start = Math.max(windowA.start, windowB.start);\n const end = Math.min(windowA.end, windowB.end);\n\n if (end - start >= minDuration) {\n newIntersection.push({ start, end });\n }\n }\n }\n\n intersection = newIntersection;\n if (intersection.length === 0) break;\n }\n\n return intersection;\n }\n\n private findConflictingParticipants(\n availabilities: Array<{ participant: Participant; availability: Availability }>\n ): UUID[] {\n const conflicting: UUID[] = [];\n\n for (let i = 0; i < availabilities.length; i++) {\n let hasOverlapWithAll = true;\n\n for (let j = 0; j < availabilities.length; j++) {\n if (i === j) continue;\n\n const hasOverlap = this.hasAnyOverlap(\n availabilities[i].availability,\n availabilities[j].availability\n );\n\n if (!hasOverlap) {\n hasOverlapWithAll = false;\n break;\n }\n }\n\n if (!hasOverlapWithAll) {\n conflicting.push(availabilities[i].participant.entityId);\n }\n }\n\n return conflicting;\n }\n\n private hasAnyOverlap(a: Availability, b: Availability): boolean {\n for (const windowA of a.weekly) {\n for (const windowB of b.weekly) {\n if (windowA.day !== windowB.day) continue;\n\n const overlapStart = Math.max(windowA.startMinutes, windowB.startMinutes);\n const overlapEnd = Math.min(windowA.endMinutes, windowB.endMinutes);\n\n if (overlapEnd - overlapStart >= 30) {\n return true;\n }\n }\n }\n return false;\n }\n\n private scoreSlot(slot: TimeSlot, request: SchedulingRequest): ProposedSlot {\n const { constraints, urgency } = request;\n let score = 100;\n const reasons: string[] = [];\n const concerns: string[] = [];\n\n const startDate = new Date(slot.start);\n const minutes = getMinutesOfDay(startDate, slot.timeZone);\n const day = getDayOfWeek(startDate, slot.timeZone);\n\n // Time of day scoring\n const timeOfDay = minutes < 12 * 60 ? \"morning\" : minutes < 17 * 60 ? \"afternoon\" : \"evening\";\n\n if (constraints.preferredTimes?.includes(timeOfDay)) {\n score += 20;\n reasons.push(`Preferred time (${timeOfDay})`);\n }\n\n // Day of week scoring\n if (constraints.preferredDays?.includes(day)) {\n score += 15;\n reasons.push(`Preferred day (${day})`);\n }\n\n // Urgency scoring - earlier is better for urgent meetings\n const daysFromNow = (startDate.getTime() - Date.now()) / (1000 * 60 * 60 * 24);\n\n if (urgency === \"urgent\") {\n score -= daysFromNow * 10;\n if (daysFromNow < 2) {\n reasons.push(\"Soon (urgent meeting)\");\n }\n } else if (urgency === \"soon\") {\n score -= daysFromNow * 5;\n }\n\n // Penalize very early or very late times\n if (minutes < 9 * 60) {\n score -= 15;\n concerns.push(\"Early morning\");\n } else if (minutes > 18 * 60) {\n score -= 10;\n concerns.push(\"Evening time\");\n }\n\n // Bonus for standard business hours\n if (minutes >= 10 * 60 && minutes <= 16 * 60) {\n score += 10;\n reasons.push(\"Standard business hours\");\n }\n\n return {\n slot,\n score: Math.max(0, score),\n reasons,\n concerns,\n };\n }\n\n async createMeeting(\n request: SchedulingRequest,\n slot: TimeSlot,\n location: {\n type: \"in_person\" | \"virtual\" | \"phone\";\n name?: string;\n address?: string;\n city?: string;\n videoUrl?: string;\n phoneNumber?: string;\n notes?: string;\n }\n ): Promise<Meeting> {\n const participants: MeetingParticipant[] = request.participants.map((p, index) => ({\n entityId: p.entityId,\n name: p.name,\n email: p.email,\n phone: p.phone,\n role: index === 0 ? \"organizer\" : \"required\",\n confirmed: false,\n }));\n\n const meeting: Meeting = {\n id: uuidv4(),\n requestId: request.id,\n roomId: request.roomId,\n title: request.title,\n description: request.description,\n slot,\n location: {\n type: location.type,\n name: location.name,\n address: location.address,\n city: location.city,\n videoUrl: location.videoUrl,\n phoneNumber: location.phoneNumber,\n notes: location.notes,\n },\n participants,\n status: \"proposed\",\n rescheduleCount: 0,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n };\n\n const storage = getMeetingStorage(this.runtime);\n await storage.save(meeting);\n\n logger.info(`[SchedulingService] Created meeting ${meeting.id} for \"${meeting.title}\"`);\n\n // Auto-schedule reminders if configured\n if (this.schedulingConfig.autoScheduleReminders) {\n await this.scheduleReminders(meeting);\n }\n\n return meeting;\n }\n\n async getMeeting(meetingId: string): Promise<Meeting | null> {\n return getMeetingStorage(this.runtime).get(meetingId);\n }\n\n async getMeetingsForRoom(roomId: UUID): Promise<Meeting[]> {\n return getMeetingStorage(this.runtime).getByRoom(roomId);\n }\n\n async getUpcomingMeetings(entityId: UUID): Promise<Meeting[]> {\n return getMeetingStorage(this.runtime).getUpcomingForParticipant(entityId);\n }\n\n async confirmParticipant(meetingId: string, entityId: UUID): Promise<Meeting> {\n const meeting = await this.getMeeting(meetingId);\n if (!meeting) {\n throw new Error(`Meeting not found: ${meetingId}`);\n }\n\n const participant = meeting.participants.find((p) => p.entityId === entityId);\n if (!participant) {\n throw new Error(`Participant not found in meeting: ${entityId}`);\n }\n\n participant.confirmed = true;\n participant.confirmedAt = Date.now();\n meeting.updatedAt = Date.now();\n\n // Check if all required participants have confirmed\n const allConfirmed = meeting.participants\n .filter((p) => p.role !== \"optional\")\n .every((p) => p.confirmed);\n\n if (allConfirmed && meeting.status === \"proposed\") {\n meeting.status = \"confirmed\";\n logger.info(`[SchedulingService] Meeting ${meetingId} confirmed by all participants`);\n\n // Send calendar invites if configured\n if (this.schedulingConfig.autoSendCalendarInvites) {\n await this.sendCalendarInvites(meeting);\n meeting.status = \"scheduled\";\n }\n }\n\n const storage = getMeetingStorage(this.runtime);\n await storage.save(meeting);\n\n return meeting;\n }\n\n async declineParticipant(meetingId: string, entityId: UUID, reason?: string): Promise<Meeting> {\n const meeting = await this.getMeeting(meetingId);\n if (!meeting) {\n throw new Error(`Meeting not found: ${meetingId}`);\n }\n\n const participant = meeting.participants.find((p) => p.entityId === entityId);\n if (!participant) {\n throw new Error(`Participant not found in meeting: ${entityId}`);\n }\n\n participant.confirmed = false;\n participant.declineReason = reason;\n meeting.updatedAt = Date.now();\n\n // If a required participant declines, mark meeting for rescheduling\n if (participant.role !== \"optional\") {\n meeting.status = \"rescheduling\";\n meeting.cancellationReason = `${participant.name} declined: ${reason || \"No reason given\"}`;\n logger.info(`[SchedulingService] Meeting ${meetingId} needs rescheduling`);\n }\n\n const storage = getMeetingStorage(this.runtime);\n await storage.save(meeting);\n\n return meeting;\n }\n\n async cancelMeeting(meetingId: string, reason?: string): Promise<Meeting> {\n const meeting = await this.getMeeting(meetingId);\n if (!meeting) {\n throw new Error(`Meeting not found: ${meetingId}`);\n }\n\n meeting.status = \"cancelled\";\n meeting.cancellationReason = reason;\n meeting.updatedAt = Date.now();\n\n // Cancel pending reminders\n await this.cancelReminders(meetingId);\n\n const storage = getMeetingStorage(this.runtime);\n await storage.save(meeting);\n\n logger.info(`[SchedulingService] Meeting ${meetingId} cancelled`);\n\n return meeting;\n }\n\n async updateMeetingStatus(meetingId: string, status: MeetingStatus): Promise<Meeting> {\n const meeting = await this.getMeeting(meetingId);\n if (!meeting) {\n throw new Error(`Meeting not found: ${meetingId}`);\n }\n\n meeting.status = status;\n meeting.updatedAt = Date.now();\n\n const storage = getMeetingStorage(this.runtime);\n await storage.save(meeting);\n\n return meeting;\n }\n\n async rescheduleMeeting(meetingId: string, newSlot: TimeSlot, reason?: string): Promise<Meeting> {\n const meeting = await this.getMeeting(meetingId);\n if (!meeting) {\n throw new Error(`Meeting not found: ${meetingId}`);\n }\n\n // Cancel old reminders\n await this.cancelReminders(meetingId);\n\n meeting.slot = newSlot;\n meeting.status = \"proposed\";\n meeting.rescheduleCount += 1;\n meeting.cancellationReason = reason;\n meeting.updatedAt = Date.now();\n\n // Reset confirmations\n for (const participant of meeting.participants) {\n participant.confirmed = false;\n participant.confirmedAt = undefined;\n }\n\n const storage = getMeetingStorage(this.runtime);\n await storage.save(meeting);\n\n // Schedule new reminders\n if (this.schedulingConfig.autoScheduleReminders) {\n await this.scheduleReminders(meeting);\n }\n\n logger.info(\n `[SchedulingService] Meeting ${meetingId} rescheduled (count: ${meeting.rescheduleCount})`\n );\n\n return meeting;\n }\n\n generateCalendarInvite(\n meeting: Meeting,\n recipientEmail: string,\n recipientName: string\n ): CalendarInvite {\n const organizer = meeting.participants.find((p) => p.role === \"organizer\");\n\n const event: CalendarEvent = {\n uid: meeting.id,\n title: meeting.title,\n description: meeting.description,\n start: meeting.slot.start,\n end: meeting.slot.end,\n timeZone: meeting.slot.timeZone,\n location:\n meeting.location.type === \"in_person\"\n ? `${meeting.location.name}, ${meeting.location.address}`\n : meeting.location.videoUrl,\n organizer: organizer?.email ? { name: organizer.name, email: organizer.email } : undefined,\n attendees: meeting.participants\n .filter((p) => p.email)\n .map((p) => ({\n name: p.name,\n email: p.email!,\n role: p.role,\n })),\n url: meeting.location.videoUrl,\n reminderMinutes: this.schedulingConfig.defaultReminderMinutes,\n };\n\n const ics = generateIcs(event);\n\n return {\n ics,\n event,\n recipientEmail,\n recipientName,\n };\n }\n\n /** Sends invites via EMAIL service if available, otherwise returns ICS for manual handling */\n async sendCalendarInvites(meeting: Meeting): Promise<CalendarInvite[]> {\n const invites: CalendarInvite[] = [];\n\n for (const participant of meeting.participants) {\n if (!participant.email) {\n logger.warn(\n `[SchedulingService] Participant ${participant.name} has no email - skipping calendar invite`\n );\n continue;\n }\n\n const invite = this.generateCalendarInvite(meeting, participant.email, participant.name);\n invites.push(invite);\n\n const emailService = this.runtime.getService(\"EMAIL\");\n const emailServiceAny = emailService as unknown as {\n sendEmail?: (\n to: string,\n subject: string,\n body: string,\n attachments?: Array<{ filename: string; content: string; contentType: string }>\n ) => Promise<void>;\n };\n if (emailService && typeof emailServiceAny.sendEmail === \"function\") {\n try {\n await emailServiceAny.sendEmail(\n participant.email,\n `Meeting Invite: ${meeting.title}`,\n this.formatInviteEmail(meeting, participant.name),\n [\n {\n filename: \"invite.ics\",\n content: invite.ics,\n contentType: \"text/calendar\",\n },\n ]\n );\n logger.info(\n `[SchedulingService] Sent calendar invite to ${participant.email} for meeting ${meeting.id}`\n );\n } catch (err) {\n logger.error(\n `[SchedulingService] Failed to send email to ${participant.email} for meeting ${meeting.id}: ${err}`\n );\n }\n } else {\n // No email service - log the limitation\n logger.warn(\n `[SchedulingService] No EMAIL service available - calendar invite for ${participant.email} generated but not sent. ` +\n `ICS content available in returned invite object.`\n );\n }\n }\n\n return invites;\n }\n\n private formatInviteEmail(meeting: Meeting, recipientName: string): string {\n const startDate = new Date(meeting.slot.start);\n const endDate = new Date(meeting.slot.end);\n\n const dateFormatter = new Intl.DateTimeFormat(\"en-US\", {\n timeZone: meeting.slot.timeZone,\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n });\n\n const timeFormatter = new Intl.DateTimeFormat(\"en-US\", {\n timeZone: meeting.slot.timeZone,\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZoneName: \"short\",\n });\n\n let locationText = \"\";\n if (meeting.location.type === \"virtual\" && meeting.location.videoUrl) {\n locationText = `Join online: ${meeting.location.videoUrl}`;\n } else if (meeting.location.type === \"in_person\") {\n locationText = `Location: ${meeting.location.name}, ${meeting.location.address}`;\n } else if (meeting.location.type === \"phone\" && meeting.location.phoneNumber) {\n locationText = `Call: ${meeting.location.phoneNumber}`;\n }\n\n return `Hi ${recipientName},\n\nYou're invited to: ${meeting.title}\n\nWhen: ${dateFormatter.format(startDate)}\nTime: ${timeFormatter.format(startDate)} - ${timeFormatter.format(endDate)}\n${locationText}\n\n${meeting.description || \"\"}\n\nPlease add the attached calendar invite to your calendar.\n\nSee you there!`;\n }\n\n async scheduleReminders(meeting: Meeting): Promise<Reminder[]> {\n const reminders: Reminder[] = [];\n const meetingTime = new Date(meeting.slot.start).getTime();\n\n for (const minutesBefore of this.schedulingConfig.defaultReminderMinutes) {\n const scheduledFor = new Date(meetingTime - minutesBefore * 60 * 1000);\n\n // Don't schedule reminders in the past\n if (scheduledFor.getTime() < Date.now()) continue;\n\n for (const participant of meeting.participants) {\n // Determine reminder type based on participant info\n const type: ReminderType = participant.phone ? \"sms\" : participant.email ? \"email\" : \"push\";\n\n const timeLabel =\n minutesBefore >= 1440\n ? `${Math.round(minutesBefore / 1440)} day(s)`\n : minutesBefore >= 60\n ? `${Math.round(minutesBefore / 60)} hour(s)`\n : `${minutesBefore} minutes`;\n\n const reminder: Reminder = {\n id: uuidv4(),\n meetingId: meeting.id,\n participantId: participant.entityId,\n scheduledFor: scheduledFor.toISOString(),\n type,\n message: `Reminder: \"${meeting.title}\" is in ${timeLabel}`,\n status: \"pending\",\n createdAt: Date.now(),\n };\n\n reminders.push(reminder);\n }\n }\n\n const storage = getReminderStorage(this.runtime);\n for (const reminder of reminders) {\n await storage.save(reminder);\n }\n\n logger.debug(\n `[SchedulingService] Scheduled ${reminders.length} reminders for meeting ${meeting.id}`\n );\n\n return reminders;\n }\n\n async getDueReminders(): Promise<Reminder[]> {\n return getReminderStorage(this.runtime).getDue();\n }\n\n async markReminderSent(reminderId: string): Promise<void> {\n const storage = getReminderStorage(this.runtime);\n const reminder = await storage.get(reminderId);\n if (!reminder) return;\n\n reminder.status = \"sent\";\n reminder.sentAt = Date.now();\n await storage.save(reminder);\n }\n\n async cancelReminders(meetingId: string): Promise<void> {\n const storage = getReminderStorage(this.runtime);\n const reminders = await storage.getByMeeting(meetingId);\n\n for (const reminder of reminders) {\n if (reminder.status === \"pending\") {\n reminder.status = \"cancelled\";\n await storage.save(reminder);\n }\n }\n }\n\n formatSlot(slot: TimeSlot, locale: string = \"en-US\"): string {\n const start = new Date(slot.start);\n const end = new Date(slot.end);\n\n const dateFormatter = new Intl.DateTimeFormat(locale, {\n timeZone: slot.timeZone,\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n });\n\n const timeFormatter = new Intl.DateTimeFormat(locale, {\n timeZone: slot.timeZone,\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n\n return `${dateFormatter.format(start)}, ${timeFormatter.format(start)} - ${timeFormatter.format(end)}`;\n }\n\n getConfig(): SchedulingServiceConfig {\n return { ...this.schedulingConfig };\n }\n}\n",
|
|
10
10
|
"/** Component-based persistence for scheduling data using ElizaOS Components */\n\nimport type { Component, IAgentRuntime, Metadata, UUID } from \"@elizaos/core\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport type { Availability, Meeting, Reminder, SchedulingRequest } from \"./types.js\";\n\nconst SCHEDULING_AVAILABILITY = \"scheduling_availability\";\nconst SCHEDULING_MEETING = \"scheduling_meeting\";\nconst SCHEDULING_REMINDER = \"scheduling_reminder\";\nconst SCHEDULING_REQUEST = \"scheduling_request\";\nconst SCHEDULING_MEETING_INDEX_ROOM = \"scheduling_meeting_index:room\";\nconst SCHEDULING_MEETING_INDEX_PARTICIPANT = \"scheduling_meeting_index:participant\";\nconst SCHEDULING_REMINDER_INDEX_MEETING = \"scheduling_reminder_index:meeting\";\n\ninterface MeetingIndex {\n meetingIds: string[];\n}\ninterface ReminderIndex {\n reminderIds: string[];\n}\n\nasync function getMeetingIndex(\n runtime: IAgentRuntime,\n indexType: string,\n indexKey: string\n): Promise<MeetingIndex> {\n const componentType = `${indexType}:${indexKey}`;\n // Use agent's entityId for global indices\n const component = await runtime.getComponent(runtime.agentId, componentType);\n if (!component) {\n return { meetingIds: [] };\n }\n return component.data as unknown as MeetingIndex;\n}\n\nasync function saveMeetingIndex(\n runtime: IAgentRuntime,\n indexType: string,\n indexKey: string,\n index: MeetingIndex\n): Promise<void> {\n const componentType = `${indexType}:${indexKey}`;\n const existing = await runtime.getComponent(runtime.agentId, componentType);\n\n const component: Component = {\n id: existing?.id || (uuidv4() as UUID),\n entityId: runtime.agentId,\n agentId: runtime.agentId,\n roomId: uuidv4() as UUID,\n worldId: existing?.worldId || (uuidv4() as UUID),\n sourceEntityId: runtime.agentId,\n type: componentType,\n createdAt: existing?.createdAt || Date.now(),\n data: index as unknown as Metadata,\n };\n\n if (existing) {\n await runtime.updateComponent(component);\n } else {\n await runtime.createComponent(component);\n }\n}\n\nasync function addToMeetingIndex(\n runtime: IAgentRuntime,\n indexType: string,\n indexKey: string,\n meetingId: string\n): Promise<void> {\n const index = await getMeetingIndex(runtime, indexType, indexKey);\n if (!index.meetingIds.includes(meetingId)) {\n index.meetingIds.push(meetingId);\n await saveMeetingIndex(runtime, indexType, indexKey, index);\n }\n}\n\nasync function removeFromMeetingIndex(\n runtime: IAgentRuntime,\n indexType: string,\n indexKey: string,\n meetingId: string\n): Promise<void> {\n const index = await getMeetingIndex(runtime, indexType, indexKey);\n index.meetingIds = index.meetingIds.filter((id) => id !== meetingId);\n await saveMeetingIndex(runtime, indexType, indexKey, index);\n}\n\nasync function getReminderIndex(runtime: IAgentRuntime, meetingId: string): Promise<ReminderIndex> {\n const componentType = `${SCHEDULING_REMINDER_INDEX_MEETING}:${meetingId}`;\n const component = await runtime.getComponent(runtime.agentId, componentType);\n return component ? (component.data as unknown as ReminderIndex) : { reminderIds: [] };\n}\n\nasync function saveReminderIndex(\n runtime: IAgentRuntime,\n meetingId: string,\n index: ReminderIndex\n): Promise<void> {\n const componentType = `${SCHEDULING_REMINDER_INDEX_MEETING}:${meetingId}`;\n const existing = await runtime.getComponent(runtime.agentId, componentType);\n\n const component: Component = {\n id: existing?.id || (uuidv4() as UUID),\n entityId: runtime.agentId,\n agentId: runtime.agentId,\n roomId: uuidv4() as UUID,\n worldId: existing?.worldId || (uuidv4() as UUID),\n sourceEntityId: runtime.agentId,\n type: componentType,\n createdAt: existing?.createdAt || Date.now(),\n data: index as unknown as Metadata,\n };\n\n if (existing) {\n await runtime.updateComponent(component);\n } else {\n await runtime.createComponent(component);\n }\n}\n\nexport interface AvailabilityStorage {\n get(entityId: UUID): Promise<Availability | null>;\n save(entityId: UUID, availability: Availability): Promise<void>;\n delete(entityId: UUID): Promise<void>;\n}\n\nexport const getAvailabilityStorage = (runtime: IAgentRuntime): AvailabilityStorage => ({\n get: async (entityId) => {\n const componentType = `${SCHEDULING_AVAILABILITY}:${entityId}`;\n const component = await runtime.getComponent(entityId, componentType);\n if (!component) return null;\n return component.data as unknown as Availability;\n },\n\n save: async (entityId, availability) => {\n const componentType = `${SCHEDULING_AVAILABILITY}:${entityId}`;\n const existing = await runtime.getComponent(entityId, componentType);\n\n const component: Component = {\n id: existing?.id || (uuidv4() as UUID),\n entityId,\n agentId: runtime.agentId,\n roomId: uuidv4() as UUID,\n worldId: existing?.worldId || (uuidv4() as UUID),\n sourceEntityId: runtime.agentId,\n type: componentType,\n createdAt: existing?.createdAt || Date.now(),\n data: availability as unknown as Metadata,\n };\n\n if (existing) {\n await runtime.updateComponent(component);\n } else {\n await runtime.createComponent(component);\n }\n },\n\n delete: async (entityId) => {\n const componentType = `${SCHEDULING_AVAILABILITY}:${entityId}`;\n const existing = await runtime.getComponent(entityId, componentType);\n if (existing) {\n await runtime.deleteComponent(existing.id);\n }\n },\n});\n\nexport interface SchedulingRequestStorage {\n get(requestId: string): Promise<SchedulingRequest | null>;\n save(request: SchedulingRequest): Promise<void>;\n delete(requestId: string): Promise<void>;\n getByRoom(roomId: UUID): Promise<SchedulingRequest[]>;\n}\n\nexport const getSchedulingRequestStorage = (runtime: IAgentRuntime): SchedulingRequestStorage => ({\n get: async (requestId) => {\n const componentType = `${SCHEDULING_REQUEST}:${requestId}`;\n const component = await runtime.getComponent(runtime.agentId, componentType);\n if (!component) return null;\n return component.data as unknown as SchedulingRequest;\n },\n\n save: async (request) => {\n const componentType = `${SCHEDULING_REQUEST}:${request.id}`;\n const existing = await runtime.getComponent(runtime.agentId, componentType);\n\n const component: Component = {\n id: existing?.id || (uuidv4() as UUID),\n entityId: runtime.agentId,\n agentId: runtime.agentId,\n roomId: request.roomId,\n worldId: existing?.worldId || (uuidv4() as UUID),\n sourceEntityId: runtime.agentId,\n type: componentType,\n createdAt: existing?.createdAt || Date.now(),\n data: request as unknown as Metadata,\n };\n\n if (existing) {\n await runtime.updateComponent(component);\n } else {\n await runtime.createComponent(component);\n }\n },\n\n delete: async (requestId) => {\n const componentType = `${SCHEDULING_REQUEST}:${requestId}`;\n const existing = await runtime.getComponent(runtime.agentId, componentType);\n if (existing) {\n await runtime.deleteComponent(existing.id);\n }\n },\n\n getByRoom: async (roomId) => {\n const components = await runtime.getComponents(runtime.agentId);\n const requests: SchedulingRequest[] = [];\n for (const component of components) {\n if (component.type.startsWith(`${SCHEDULING_REQUEST}:`)) {\n const request = component.data as unknown as SchedulingRequest;\n if (request.roomId === roomId) requests.push(request);\n }\n }\n return requests;\n },\n});\n\nexport interface MeetingStorage {\n get(meetingId: string): Promise<Meeting | null>;\n save(meeting: Meeting): Promise<void>;\n delete(meetingId: string): Promise<void>;\n getByRoom(roomId: UUID): Promise<Meeting[]>;\n getUpcomingForParticipant(entityId: UUID): Promise<Meeting[]>;\n}\n\nexport const getMeetingStorage = (runtime: IAgentRuntime): MeetingStorage => ({\n get: async (meetingId) => {\n const componentType = `${SCHEDULING_MEETING}:${meetingId}`;\n const component = await runtime.getComponent(runtime.agentId, componentType);\n if (!component) return null;\n return component.data as unknown as Meeting;\n },\n\n save: async (meeting) => {\n const componentType = `${SCHEDULING_MEETING}:${meeting.id}`;\n const existing = await runtime.getComponent(runtime.agentId, componentType);\n\n const component: Component = {\n id: existing?.id || (uuidv4() as UUID),\n entityId: runtime.agentId,\n agentId: runtime.agentId,\n roomId: meeting.roomId,\n worldId: existing?.worldId || (uuidv4() as UUID),\n sourceEntityId: runtime.agentId,\n type: componentType,\n createdAt: existing?.createdAt || meeting.createdAt,\n data: meeting as unknown as Metadata,\n };\n\n if (existing) {\n await runtime.updateComponent(component);\n } else {\n await runtime.createComponent(component);\n\n // Add to room index\n await addToMeetingIndex(runtime, SCHEDULING_MEETING_INDEX_ROOM, meeting.roomId, meeting.id);\n\n // Add to participant indices\n for (const participant of meeting.participants) {\n await addToMeetingIndex(\n runtime,\n SCHEDULING_MEETING_INDEX_PARTICIPANT,\n participant.entityId,\n meeting.id\n );\n }\n }\n },\n\n delete: async (meetingId) => {\n const componentType = `${SCHEDULING_MEETING}:${meetingId}`;\n const existing = await runtime.getComponent(runtime.agentId, componentType);\n\n if (existing) {\n const meeting = existing.data as unknown as Meeting;\n\n // Remove from room index\n await removeFromMeetingIndex(\n runtime,\n SCHEDULING_MEETING_INDEX_ROOM,\n meeting.roomId,\n meetingId\n );\n\n // Remove from participant indices\n for (const participant of meeting.participants) {\n await removeFromMeetingIndex(\n runtime,\n SCHEDULING_MEETING_INDEX_PARTICIPANT,\n participant.entityId,\n meetingId\n );\n }\n\n await runtime.deleteComponent(existing.id);\n }\n },\n\n getByRoom: async (roomId) => {\n const index = await getMeetingIndex(runtime, SCHEDULING_MEETING_INDEX_ROOM, roomId);\n const meetings: Meeting[] = [];\n\n for (const meetingId of index.meetingIds) {\n const componentType = `${SCHEDULING_MEETING}:${meetingId}`;\n const component = await runtime.getComponent(runtime.agentId, componentType);\n if (component) {\n meetings.push(component.data as unknown as Meeting);\n }\n }\n\n return meetings;\n },\n\n getUpcomingForParticipant: async (entityId) => {\n const index = await getMeetingIndex(runtime, SCHEDULING_MEETING_INDEX_PARTICIPANT, entityId);\n const meetings: Meeting[] = [];\n const now = Date.now();\n\n for (const meetingId of index.meetingIds) {\n const componentType = `${SCHEDULING_MEETING}:${meetingId}`;\n const component = await runtime.getComponent(runtime.agentId, componentType);\n if (component) {\n const meeting = component.data as unknown as Meeting;\n // Only include upcoming, non-cancelled meetings\n if (new Date(meeting.slot.start).getTime() > now && meeting.status !== \"cancelled\") {\n meetings.push(meeting);\n }\n }\n }\n\n // Sort by start time\n meetings.sort((a, b) => new Date(a.slot.start).getTime() - new Date(b.slot.start).getTime());\n\n return meetings;\n },\n});\n\nexport interface ReminderStorage {\n get(reminderId: string): Promise<Reminder | null>;\n save(reminder: Reminder): Promise<void>;\n delete(reminderId: string): Promise<void>;\n getByMeeting(meetingId: string): Promise<Reminder[]>;\n getDue(): Promise<Reminder[]>;\n}\n\nconst REMINDER_REGISTRY = \"scheduling_reminder_registry\";\ninterface ReminderRegistry {\n reminderIds: string[];\n}\n\nasync function getReminderRegistry(runtime: IAgentRuntime): Promise<ReminderRegistry> {\n const component = await runtime.getComponent(runtime.agentId, REMINDER_REGISTRY);\n if (!component) {\n return { reminderIds: [] };\n }\n return component.data as unknown as ReminderRegistry;\n}\n\nasync function saveReminderRegistry(\n runtime: IAgentRuntime,\n registry: ReminderRegistry\n): Promise<void> {\n const existing = await runtime.getComponent(runtime.agentId, REMINDER_REGISTRY);\n\n const component: Component = {\n id: existing?.id || (uuidv4() as UUID),\n entityId: runtime.agentId,\n agentId: runtime.agentId,\n roomId: uuidv4() as UUID,\n worldId: existing?.worldId || (uuidv4() as UUID),\n sourceEntityId: runtime.agentId,\n type: REMINDER_REGISTRY,\n createdAt: existing?.createdAt || Date.now(),\n data: registry as unknown as Metadata,\n };\n\n if (existing) {\n await runtime.updateComponent(component);\n } else {\n await runtime.createComponent(component);\n }\n}\n\nexport const getReminderStorage = (runtime: IAgentRuntime): ReminderStorage => ({\n get: async (reminderId) => {\n const componentType = `${SCHEDULING_REMINDER}:${reminderId}`;\n const component = await runtime.getComponent(runtime.agentId, componentType);\n if (!component) return null;\n return component.data as unknown as Reminder;\n },\n\n save: async (reminder) => {\n const componentType = `${SCHEDULING_REMINDER}:${reminder.id}`;\n const existing = await runtime.getComponent(runtime.agentId, componentType);\n\n const component: Component = {\n id: existing?.id || (uuidv4() as UUID),\n entityId: runtime.agentId,\n agentId: runtime.agentId,\n roomId: uuidv4() as UUID,\n worldId: existing?.worldId || (uuidv4() as UUID),\n sourceEntityId: runtime.agentId,\n type: componentType,\n createdAt: existing?.createdAt || reminder.createdAt,\n data: reminder as unknown as Metadata,\n };\n\n if (existing) {\n await runtime.updateComponent(component);\n } else {\n await runtime.createComponent(component);\n\n // Add to meeting index\n const index = await getReminderIndex(runtime, reminder.meetingId);\n if (!index.reminderIds.includes(reminder.id)) {\n index.reminderIds.push(reminder.id);\n await saveReminderIndex(runtime, reminder.meetingId, index);\n }\n\n // Add to global registry for getDue queries\n const registry = await getReminderRegistry(runtime);\n if (!registry.reminderIds.includes(reminder.id)) {\n registry.reminderIds.push(reminder.id);\n await saveReminderRegistry(runtime, registry);\n }\n }\n },\n\n delete: async (reminderId) => {\n const componentType = `${SCHEDULING_REMINDER}:${reminderId}`;\n const existing = await runtime.getComponent(runtime.agentId, componentType);\n\n if (existing) {\n const reminder = existing.data as unknown as Reminder;\n\n // Remove from meeting index\n const index = await getReminderIndex(runtime, reminder.meetingId);\n index.reminderIds = index.reminderIds.filter((id) => id !== reminderId);\n await saveReminderIndex(runtime, reminder.meetingId, index);\n\n // Remove from global registry\n const registry = await getReminderRegistry(runtime);\n registry.reminderIds = registry.reminderIds.filter((id) => id !== reminderId);\n await saveReminderRegistry(runtime, registry);\n\n await runtime.deleteComponent(existing.id);\n }\n },\n\n getByMeeting: async (meetingId) => {\n const index = await getReminderIndex(runtime, meetingId);\n const reminders: Reminder[] = [];\n\n for (const reminderId of index.reminderIds) {\n const componentType = `${SCHEDULING_REMINDER}:${reminderId}`;\n const component = await runtime.getComponent(runtime.agentId, componentType);\n if (component) {\n reminders.push(component.data as unknown as Reminder);\n }\n }\n\n return reminders;\n },\n\n getDue: async () => {\n const registry = await getReminderRegistry(runtime);\n const now = Date.now();\n const dueReminders: Reminder[] = [];\n\n for (const reminderId of registry.reminderIds) {\n const componentType = `${SCHEDULING_REMINDER}:${reminderId}`;\n const component = await runtime.getComponent(runtime.agentId, componentType);\n\n if (component) {\n const reminder = component.data as unknown as Reminder;\n if (reminder.status === \"pending\" && new Date(reminder.scheduledFor).getTime() <= now) {\n dueReminders.push(reminder);\n }\n }\n }\n\n return dueReminders;\n },\n});\n",
|
|
11
11
|
"/**\n * @module types\n * @description Type definitions for the scheduling plugin\n *\n * Key concepts:\n * - AvailabilityWindow: A recurring time slot (e.g., \"Mondays 9am-5pm\")\n * - SchedulingRequest: A request to find a meeting time for multiple participants\n * - Meeting: A scheduled event with time, location, and participants\n * - CalendarEvent: An ICS-compatible event for calendar invites\n */\n\nimport type { UUID } from \"@elizaos/core\";\n\n// ============================================================================\n// TIME AND AVAILABILITY\n// ============================================================================\n\nexport type DayOfWeek = \"mon\" | \"tue\" | \"wed\" | \"thu\" | \"fri\" | \"sat\" | \"sun\";\n\nexport interface AvailabilityWindow {\n day: DayOfWeek;\n /** Minutes from midnight in local time (0-1439) */\n startMinutes: number;\n /** Minutes from midnight in local time (0-1439) */\n endMinutes: number;\n}\n\nexport interface AvailabilityException {\n /** ISO date string (YYYY-MM-DD) */\n date: string;\n /** If true, completely unavailable this day */\n unavailable?: boolean;\n /** Override start time for this day */\n startMinutes?: number;\n /** Override end time for this day */\n endMinutes?: number;\n /** Reason for the exception */\n reason?: string;\n}\n\nexport interface Availability {\n /** IANA time zone (e.g., \"America/New_York\") */\n timeZone: string;\n /** Weekly recurring availability */\n weekly: AvailabilityWindow[];\n /** One-off exceptions */\n exceptions: AvailabilityException[];\n}\n\nexport interface TimeSlot {\n /** ISO datetime string */\n start: string;\n /** ISO datetime string */\n end: string;\n /** IANA time zone */\n timeZone: string;\n}\n\n// ============================================================================\n// PARTICIPANTS\n// ============================================================================\n\nexport interface Participant {\n /** Entity ID in the system */\n entityId: UUID;\n /** Display name */\n name: string;\n /** Email for calendar invites (optional) */\n email?: string;\n /** Phone for SMS reminders (optional) */\n phone?: string;\n /** Their availability */\n availability: Availability;\n /** Priority weight (higher = more important to accommodate) */\n priority?: number;\n}\n\nexport type ParticipantRole = \"organizer\" | \"required\" | \"optional\";\n\nexport interface MeetingParticipant {\n entityId: UUID;\n name: string;\n email?: string;\n phone?: string;\n role: ParticipantRole;\n /** Has this participant confirmed attendance? */\n confirmed: boolean;\n /** When they confirmed */\n confirmedAt?: number;\n /** If they declined, why */\n declineReason?: string;\n}\n\n// ============================================================================\n// MEETING LOCATION\n// ============================================================================\n\nexport type LocationType = \"in_person\" | \"virtual\" | \"phone\";\n\nexport interface MeetingLocation {\n type: LocationType;\n /** Venue name for in-person meetings */\n name?: string;\n /** Physical address */\n address?: string;\n /** City */\n city?: string;\n /** Google Places ID or similar */\n placeId?: string;\n /** Video call URL for virtual meetings */\n videoUrl?: string;\n /** Phone number for phone meetings */\n phoneNumber?: string;\n /** Additional notes */\n notes?: string;\n}\n\n// ============================================================================\n// SCHEDULING REQUEST\n// ============================================================================\n\nexport type SchedulingUrgency = \"flexible\" | \"soon\" | \"urgent\";\n\nexport interface SchedulingConstraints {\n /** Minimum meeting duration in minutes */\n minDurationMinutes: number;\n /** Preferred meeting duration in minutes */\n preferredDurationMinutes: number;\n /** Maximum days in the future to search */\n maxDaysOut: number;\n /** Preferred times of day */\n preferredTimes?: (\"morning\" | \"afternoon\" | \"evening\")[];\n /** Preferred days of week */\n preferredDays?: DayOfWeek[];\n /** Location type preference */\n locationType?: LocationType;\n /** Specific location constraint (e.g., \"same city\") */\n locationConstraint?: string;\n}\n\nexport interface SchedulingRequest {\n id: string;\n /** Room/context this scheduling is happening in */\n roomId: UUID;\n /** Meeting title/purpose */\n title: string;\n /** Meeting description */\n description?: string;\n /** All participants who need to attend */\n participants: Participant[];\n /** Scheduling constraints */\n constraints: SchedulingConstraints;\n /** How urgent is this meeting */\n urgency: SchedulingUrgency;\n /** Created timestamp */\n createdAt: number;\n /** Max proposals before escalating */\n maxProposals?: number;\n}\n\n// ============================================================================\n// MEETING\n// ============================================================================\n\nexport type MeetingStatus =\n | \"proposed\" // Time proposed, awaiting confirmations\n | \"confirmed\" // All required participants confirmed\n | \"scheduled\" // Confirmed and calendar invites sent\n | \"in_progress\" // Meeting is happening now\n | \"completed\" // Meeting finished\n | \"cancelled\" // Meeting was cancelled\n | \"rescheduling\" // Being rescheduled\n | \"no_show\"; // One or more participants didn't show\n\nexport interface Meeting {\n id: string;\n /** Reference to the scheduling request */\n requestId: string;\n /** Room/context */\n roomId: UUID;\n /** Meeting title */\n title: string;\n /** Meeting description */\n description?: string;\n /** Scheduled time slot */\n slot: TimeSlot;\n /** Meeting location */\n location: MeetingLocation;\n /** All participants */\n participants: MeetingParticipant[];\n /** Current status */\n status: MeetingStatus;\n /** Number of times rescheduled */\n rescheduleCount: number;\n /** If cancelled/rescheduled, why */\n cancellationReason?: string;\n /** Created timestamp */\n createdAt: number;\n /** Last updated timestamp */\n updatedAt: number;\n /** Meeting notes/agenda */\n notes?: string;\n /** Metadata */\n meta?: Record<string, unknown>;\n}\n\n// ============================================================================\n// CALENDAR INTEGRATION\n// ============================================================================\n\nexport interface CalendarEvent {\n /** Unique event ID */\n uid: string;\n /** Event title */\n title: string;\n /** Event description */\n description?: string;\n /** Start time (ISO string) */\n start: string;\n /** End time (ISO string) */\n end: string;\n /** IANA time zone */\n timeZone: string;\n /** Location */\n location?: string;\n /** Organizer */\n organizer?: {\n name: string;\n email: string;\n };\n /** Attendees */\n attendees?: Array<{\n name: string;\n email: string;\n role: ParticipantRole;\n }>;\n /** URL to join (for virtual meetings) */\n url?: string;\n /** Reminder minutes before event */\n reminderMinutes?: number[];\n}\n\nexport interface CalendarInvite {\n /** The ICS file content */\n ics: string;\n /** Parsed event data */\n event: CalendarEvent;\n /** Recipient email */\n recipientEmail: string;\n /** Recipient name */\n recipientName: string;\n}\n\n// ============================================================================\n// REMINDERS\n// ============================================================================\n\nexport type ReminderType = \"sms\" | \"email\" | \"whatsapp\" | \"push\";\nexport type ReminderStatus = \"pending\" | \"sent\" | \"failed\" | \"cancelled\";\n\nexport interface Reminder {\n id: string;\n /** Meeting this reminder is for */\n meetingId: string;\n /** Participant to remind */\n participantId: UUID;\n /** When to send (ISO string) */\n scheduledFor: string;\n /** Reminder channel */\n type: ReminderType;\n /** Reminder message */\n message: string;\n /** Current status */\n status: ReminderStatus;\n /** When it was sent */\n sentAt?: number;\n /** Error if failed */\n error?: string;\n /** Created timestamp */\n createdAt: number;\n}\n\n// ============================================================================\n// SCHEDULING RESULT\n// ============================================================================\n\nexport interface ProposedSlot {\n slot: TimeSlot;\n /** Score indicating how good this slot is (higher = better) */\n score: number;\n /** Why this slot was chosen */\n reasons: string[];\n /** Any concerns about this slot */\n concerns: string[];\n}\n\nexport interface SchedulingResult {\n /** Whether scheduling was successful */\n success: boolean;\n /** Proposed time slots, ranked by preference */\n proposedSlots: ProposedSlot[];\n /** If no slots found, why */\n failureReason?: string;\n /** Participants who have no availability overlap */\n conflictingParticipants?: UUID[];\n}\n\n// ============================================================================\n// SERVICE TYPES\n// ============================================================================\n\nexport interface SchedulingServiceConfig {\n /** Default reminder times (minutes before meeting) */\n defaultReminderMinutes: number[];\n /** Maximum proposals per scheduling request */\n maxProposals: number;\n /** How many days out to look for availability */\n defaultMaxDaysOut: number;\n /** Minimum meeting duration in minutes */\n minMeetingDuration: number;\n /** Default meeting duration in minutes */\n defaultMeetingDuration: number;\n /** Whether to auto-send calendar invites */\n autoSendCalendarInvites: boolean;\n /** Whether to auto-schedule reminders */\n autoScheduleReminders: boolean;\n}\n\nexport const DEFAULT_CONFIG: SchedulingServiceConfig = {\n defaultReminderMinutes: [1440, 120], // 24 hours, 2 hours\n maxProposals: 3,\n defaultMaxDaysOut: 7,\n minMeetingDuration: 30,\n defaultMeetingDuration: 60,\n autoSendCalendarInvites: true,\n autoScheduleReminders: true,\n};\n",
|
|
12
12
|
"/**\n * @module ical\n * @description ICS (iCalendar) file generation utilities\n *\n * Generates RFC 5545 compliant iCalendar files for calendar invites.\n */\n\nimport type { CalendarEvent, ParticipantRole } from \"../types.ts\";\n\n/**\n * Escape special characters for ICS format\n */\nconst escapeIcs = (str: string): string => {\n return str.replace(/\\\\/g, \"\\\\\\\\\").replace(/;/g, \"\\\\;\").replace(/,/g, \"\\\\,\").replace(/\\n/g, \"\\\\n\");\n};\n\n/**\n * Format a date for ICS (YYYYMMDDTHHMMSSZ)\n */\nconst formatIcsDate = (isoString: string): string => {\n return isoString.replace(/[-:]/g, \"\").replace(/\\.\\d{3}/, \"\");\n};\n\n/**\n * Map participant role to ICS role\n */\nconst icsRole = (role: ParticipantRole): string => {\n switch (role) {\n case \"organizer\":\n return \"REQ-PARTICIPANT\";\n case \"required\":\n return \"REQ-PARTICIPANT\";\n case \"optional\":\n return \"OPT-PARTICIPANT\";\n default:\n return \"REQ-PARTICIPANT\";\n }\n};\n\n/**\n * Fold long lines per RFC 5545 (max 75 octets per line)\n */\nconst foldLine = (line: string): string => {\n const maxLength = 75;\n if (line.length <= maxLength) {\n return line;\n }\n\n const lines: string[] = [];\n let remaining = line;\n\n while (remaining.length > 0) {\n if (lines.length === 0) {\n lines.push(remaining.slice(0, maxLength));\n remaining = remaining.slice(maxLength);\n } else {\n // Continuation lines start with a space\n lines.push(` ${remaining.slice(0, maxLength - 1)}`);\n remaining = remaining.slice(maxLength - 1);\n }\n }\n\n return lines.join(\"\\r\\n\");\n};\n\n/**\n * Generate ICS content for a calendar event\n */\nexport const generateIcs = (event: CalendarEvent): string => {\n const lines: string[] = [];\n\n // Begin calendar\n lines.push(\"BEGIN:VCALENDAR\");\n lines.push(\"VERSION:2.0\");\n lines.push(\"PRODID:-//ElizaOS//SchedulingPlugin//EN\");\n lines.push(\"CALSCALE:GREGORIAN\");\n lines.push(\"METHOD:REQUEST\");\n\n // Begin event\n lines.push(\"BEGIN:VEVENT\");\n\n // Required properties\n lines.push(`UID:${event.uid}`);\n lines.push(`DTSTAMP:${formatIcsDate(new Date().toISOString())}`);\n lines.push(`DTSTART:${formatIcsDate(event.start)}`);\n lines.push(`DTEND:${formatIcsDate(event.end)}`);\n lines.push(`SUMMARY:${escapeIcs(event.title)}`);\n\n // Optional properties\n if (event.description) {\n lines.push(`DESCRIPTION:${escapeIcs(event.description)}`);\n }\n\n if (event.location) {\n lines.push(`LOCATION:${escapeIcs(event.location)}`);\n }\n\n if (event.url) {\n lines.push(`URL:${event.url}`);\n }\n\n // Organizer\n if (event.organizer) {\n lines.push(`ORGANIZER;CN=${escapeIcs(event.organizer.name)}:mailto:${event.organizer.email}`);\n }\n\n // Attendees\n if (event.attendees) {\n for (const attendee of event.attendees) {\n const role = icsRole(attendee.role);\n lines.push(\n `ATTENDEE;ROLE=${role};PARTSTAT=NEEDS-ACTION;CN=${escapeIcs(attendee.name)}:mailto:${attendee.email}`\n );\n }\n }\n\n // Reminders/Alarms\n if (event.reminderMinutes) {\n for (const minutes of event.reminderMinutes) {\n lines.push(\"BEGIN:VALARM\");\n lines.push(\"ACTION:DISPLAY\");\n lines.push(`DESCRIPTION:${escapeIcs(event.title)}`);\n lines.push(`TRIGGER:-PT${minutes}M`);\n lines.push(\"END:VALARM\");\n }\n }\n\n // Status\n lines.push(\"STATUS:CONFIRMED\");\n lines.push(\"SEQUENCE:0\");\n\n // End event\n lines.push(\"END:VEVENT\");\n\n // End calendar\n lines.push(\"END:VCALENDAR\");\n\n // Fold long lines and join with CRLF\n return lines.map(foldLine).join(\"\\r\\n\");\n};\n\n/**\n * Parse an ICS file and extract events (basic parser)\n */\nexport const parseIcs = (ics: string): CalendarEvent[] => {\n const events: CalendarEvent[] = [];\n const lines = ics.split(/\\r?\\n/);\n\n let currentEvent: Partial<CalendarEvent> | null = null;\n let currentLine = \"\";\n\n for (const line of lines) {\n // Handle line folding (continuation lines start with space or tab)\n if (line.startsWith(\" \") || line.startsWith(\"\\t\")) {\n currentLine += line.slice(1);\n continue;\n }\n\n // Process the previous line\n if (currentLine && currentEvent) {\n processLine(currentLine, currentEvent);\n }\n\n currentLine = line;\n\n // Check for event boundaries\n if (line === \"BEGIN:VEVENT\") {\n currentEvent = {};\n } else if (line === \"END:VEVENT\" && currentEvent) {\n if (currentEvent.uid && currentEvent.start && currentEvent.end && currentEvent.title) {\n events.push(currentEvent as CalendarEvent);\n }\n currentEvent = null;\n }\n }\n\n return events;\n};\n\n/**\n * Process a single ICS property line\n */\nconst processLine = (line: string, event: Partial<CalendarEvent>): void => {\n const colonIndex = line.indexOf(\":\");\n if (colonIndex === -1) return;\n\n const keyPart = line.slice(0, colonIndex);\n const value = line.slice(colonIndex + 1);\n\n // Handle properties with parameters (e.g., DTSTART;TZID=America/New_York)\n const semiIndex = keyPart.indexOf(\";\");\n const key = semiIndex === -1 ? keyPart : keyPart.slice(0, semiIndex);\n\n switch (key) {\n case \"UID\":\n event.uid = value;\n break;\n case \"SUMMARY\":\n event.title = unescapeIcs(value);\n break;\n case \"DESCRIPTION\":\n event.description = unescapeIcs(value);\n break;\n case \"DTSTART\":\n event.start = parseIcsDate(value);\n break;\n case \"DTEND\":\n event.end = parseIcsDate(value);\n break;\n case \"LOCATION\":\n event.location = unescapeIcs(value);\n break;\n case \"URL\":\n event.url = value;\n break;\n }\n};\n\n/**\n * Unescape ICS special characters\n */\nconst unescapeIcs = (str: string): string => {\n return str.replace(/\\\\n/g, \"\\n\").replace(/\\\\,/g, \",\").replace(/\\\\;/g, \";\").replace(/\\\\\\\\/g, \"\\\\\");\n};\n\n/**\n * Parse ICS date format to ISO string\n */\nconst parseIcsDate = (icsDate: string): string => {\n // Handle YYYYMMDDTHHMMSSZ format\n const match = /^(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})Z?$/.exec(icsDate);\n if (match) {\n const [, year, month, day, hour, minute, second] = match;\n return `${year}-${month}-${day}T${hour}:${minute}:${second}Z`;\n }\n\n // Return as-is if format not recognized\n return icsDate;\n};\n",
|
|
13
13
|
"/**\n * @module plugin-scheduling\n * @description ElizaOS plugin for scheduling and calendar coordination\n *\n * This plugin provides:\n * - Multi-party availability coordination\n * - Meeting scheduling with time slot proposals\n * - Calendar invite generation (ICS format)\n * - Automated reminders\n * - Rescheduling and cancellation handling\n *\n * Key features:\n * - Time zone aware scheduling\n * - Preference-based slot scoring\n * - Integration with form plugin for conversational scheduling\n */\n\nimport type { Plugin } from \"@elizaos/core\";\nimport { confirmMeetingAction } from \"./src/actions/confirm-meeting.js\";\nimport { scheduleMeetingAction } from \"./src/actions/schedule-meeting.js\";\nimport { setAvailabilityAction } from \"./src/actions/set-availability.js\";\nimport { schedulingContextProvider } from \"./src/providers/scheduling-context.js\";\nimport { SchedulingService } from \"./src/services/scheduling-service.js\";\n\nexport * from \"./src/services/scheduling-service.js\";\nexport * from \"./src/storage.js\";\nexport * from \"./src/types.js\";\nexport * from \"./src/utils/ical.js\";\n\n/**\n * Scheduling plugin for ElizaOS\n *\n * Provides scheduling capabilities for coordinating meetings\n * between multiple participants.\n *\n * Usage:\n * ```typescript\n * import { schedulingPlugin } from '@elizaos/plugin-scheduling';\n *\n * const character = createCharacter({\n * name: 'Scheduler',\n * plugins: [schedulingPlugin],\n * });\n * ```\n */\nexport const schedulingPlugin: Plugin = {\n name: \"scheduling\",\n description: \"Scheduling and calendar coordination for multi-party meetings\",\n\n // Register the scheduling service\n services: [SchedulingService],\n\n // Actions for scheduling operations\n actions: [scheduleMeetingAction, confirmMeetingAction, setAvailabilityAction],\n\n // Provider for scheduling context\n providers: [schedulingContextProvider],\n};\n\nexport default schedulingPlugin;\n"
|
|
14
14
|
],
|
|
15
|
-
"mappings": ";AAQO,IAAM,uBAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AAAA,EACP,UAAU,OAAO,SAAc,SAAc,OAAa,YAAoC;AAAA,IACjG,MAAM,cAAc,OAAO,SAAS,SAAS,SAAS,WAAW,QAAQ,QAAQ,OAAO;AAAA,IACxF,MAAM,WAAW,YAAY,YAAY;AAAA,IACzC,MAAM,eAAe,CAAC,WAAW,SAAS;AAAA,IAC1C,MAAM,gBACL,aAAa,SAAS,KACtB,aAAa,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK,SAAS,SAAS,EAAE,CAAC;AAAA,IACjE,MAAM,YAAY,IAAI,OAAO,6BAA6B,GAAG;AAAA,IAC7D,MAAM,cAAc,UAAU,KAAK,QAAQ;AAAA,IAC3C,MAAM,aAAa,OAAO,SAAS,SAAS,UAAU,SAAS,UAAU,EAAE;AAAA,IAC3E,MAAM,qBAAqB;AAAA,IAC3B,MAAM,eAAe,qBAClB,eAAe,qBACf,QAAQ,cAAc,SAAS,SAAS,WAAW,SAAS,UAAU;AAAA,IACzE,MAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AAAA,IACxE,MAAM,cACL,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,QAAQ,SAAS,WAAW,OAAO,QAAQ,YAAY,QAAQ;AAAA,IAEhE,IAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AAAA,MACnE,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,qBAAqB,OAAO,UAAyB,aAAoB;AAAA,MAChF,MAAM,OAAO,SAAQ,SAAS,MAAM,YAAY,KAAK;AAAA,MACrD,OACG,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,KACnD,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,SAAS,KAClD,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,KACpD,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,eAAe,KAC7B,KAAK,SAAS,iBAAiB;AAAA;AAAA,IAGhC,IAAI;AAAA,MACH,OAAO,QAAQ,MAAO,mBAA2B,SAAS,SAAS,OAAO,OAAO,CAAC;AAAA,MACjF,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA,EAGX,SAAS,OACP,SACA,SACA,QACA,UACA,aACG;AAAA,IACH,MAAM,oBAAoB,QAAQ,WAA8B,YAAY;AAAA,IAC5E,IAAI,CAAC,mBAAmB;AAAA,MACtB,MAAM,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,MAAM,OAAO,QAAQ,SAAS,MAAM,YAAY,KAAK;AAAA,IACrD,MAAM,eACJ,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,eAAe,KAC7B,KAAK,SAAS,KAAK;AAAA,IAGrB,MAAM,WAAW,MAAM,kBAAkB,oBAAoB,QAAQ,QAAQ;AAAA,IAE7E,IAAI,SAAS,WAAW,GAAG;AAAA,MACzB,MAAM,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAGA,MAAM,kBAAkB,SAAS,OAAO,CAAC,MAAM,EAAE,WAAW,UAAU;AAAA,IACtE,IAAI,gBAAgB,WAAW,GAAG;AAAA,MAChC,MAAM,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,KAAK;AAAA,IACzB;AAAA,IAEA,MAAM,UAAU,gBAAgB;AAAA,IAEhC,IAAI,cAAc;AAAA,MAChB,MAAM,kBAAkB,mBAAmB,QAAQ,IAAI,QAAQ,QAAQ;AAAA,MACvE,MAAM,gBAAgB,kBAAkB,WAAW,QAAQ,IAAI;AAAA,MAC/D,MAAM,WAAW;AAAA,QACf,MAAM,8CAA8C,QAAQ,aAAa;AAAA,MAC3E,CAAC;AAAA,IACH,EAAO;AAAA,MACL,MAAM,kBAAkB,mBACtB,QAAQ,IACR,QAAQ,UACR,wBACF;AAAA,MACA,MAAM,WAAW;AAAA,QACf,MAAM,yCAAyC,QAAQ;AAAA,MACzD,CAAC;AAAA;AAAA,IAGH,OAAO,EAAE,SAAS,KAAK;AAAA;AAAA,EAEzB,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,qCAAqC;AAAA,MACxD;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,8CAA8C;AAAA,MACjE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC7IA,IAAM,sBAAsB,CAC1B,SAKG;AAAA,EACH,MAAM,aAAa,KAAK,YAAY;AAAA,EACpC,MAAM,SAIF,CAAC;AAAA,EAGL,MAAM,aACJ,uIAAuI,KACrI,IACF;AAAA,EACF,IAAI,YAAY;AAAA,IACd,OAAO,QAAQ,WAAW,GAAG,KAAK;AAAA,EACpC;AAAA,EAGA,MAAM,gBAAgB,kCAAkC,KAAK,UAAU;AAAA,EACvE,IAAI,eAAe;AAAA,IACjB,IAAI,WAAW,OAAO,SAAS,cAAc,IAAI,EAAE;AAAA,IACnD,IAAI,WAAW,SAAS,MAAM,KAAK,WAAW,SAAS,IAAI,GAAG;AAAA,MAC5D,YAAY;AAAA,IACd;AAAA,IACA,OAAO,WAAW;AAAA,EACpB;AAAA,EAGA,IACE,WAAW,SAAS,QAAQ,KAC5B,WAAW,SAAS,MAAM,KAC1B,WAAW,SAAS,aAAa,GACjC;AAAA,IACA,OAAO,UAAU;AAAA,EACnB,EAAO,SAAI,WAAW,SAAS,MAAM,KAAK,WAAW,SAAS,WAAW,GAAG;AAAA,IAC1E,OAAO,UAAU;AAAA,EACnB,EAAO;AAAA,IACL,OAAO,UAAU;AAAA;AAAA,EAGnB,OAAO;AAAA;AAGT,IAAM,sBAAsB,CAC1B,UACW;AAAA,EACX,IAAI,MAAM,WAAW,GAAG;AAAA,IACtB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAsC;AAAA,IAC1C,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EAEA,MAAM,YAAY,MAAM,IAAI,CAAC,UAAU,UAAU;AAAA,IAC/C,MAAM,QAAQ,IAAI,KAAK,SAAS,KAAK,KAAK;AAAA,IAC1C,MAAM,MAAM,IAAI,KAAK,SAAS,KAAK,GAAG;AAAA,IAEtC,MAAM,YAAY,IAAI,KAAK,eAAe,SAAS;AAAA,SAC9C;AAAA,MACH,UAAU,SAAS,KAAK;AAAA,IAC1B,CAAC;AAAA,IAED,MAAM,gBAAgB,IAAI,KAAK,eAAe,SAAS;AAAA,MACrD,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU,SAAS,KAAK;AAAA,IAC1B,CAAC;AAAA,IAED,MAAM,UAAU,UAAU,OAAO,KAAK;AAAA,IACtC,MAAM,aAAa,cAAc,OAAO,GAAG;AAAA,IAE3C,IAAI,QAAQ,GAAG,QAAQ,MAAM,aAAa;AAAA,IAE1C,IAAI,SAAS,QAAQ,SAAS,GAAG;AAAA,MAC/B,SAAS,KAAK,SAAS,QAAQ;AAAA,IACjC;AAAA,IAEA,OAAO;AAAA,GACR;AAAA,EAED,OAAO;AAAA;AAAA,EAAqC,UAAU,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA;AAG1D,IAAM,wBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,SAAS,CAAC,gBAAgB,mBAAmB,kBAAkB,gBAAgB,gBAAgB;AAAA,EAC/F,aAAa;AAAA,EACP,UAAU,OAAO,SAAc,SAAc,OAAa,YAAoC;AAAA,IACjG,MAAM,cAAc,OAAO,SAAS,SAAS,SAAS,WAAW,QAAQ,QAAQ,OAAO;AAAA,IACxF,MAAM,WAAW,YAAY,YAAY;AAAA,IACzC,MAAM,eAAe,CAAC,YAAY,SAAS;AAAA,IAC3C,MAAM,gBACL,aAAa,SAAS,KACtB,aAAa,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK,SAAS,SAAS,EAAE,CAAC;AAAA,IACjE,MAAM,YAAY,IAAI,OAAO,8BAA8B,GAAG;AAAA,IAC9D,MAAM,cAAc,UAAU,KAAK,QAAQ;AAAA,IAC3C,MAAM,aAAa,OAAO,SAAS,SAAS,UAAU,SAAS,UAAU,EAAE;AAAA,IAC3E,MAAM,qBAAqB;AAAA,IAC3B,MAAM,eAAe,qBAClB,eAAe,qBACf,QAAQ,cAAc,SAAS,SAAS,WAAW,SAAS,UAAU;AAAA,IACzE,MAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AAAA,IACxE,MAAM,cACL,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,QAAQ,SAAS,WAAW,OAAO,QAAQ,YAAY,QAAQ;AAAA,IAEhE,IAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AAAA,MACnE,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,qBAAqB,OAAO,UAAyB,aAAoB;AAAA,MAChF,MAAM,OAAO,SAAQ,SAAS,MAAM,YAAY,KAAK;AAAA,MACrD,OACE,KAAK,SAAS,UAAU,KACxB,KAAK,SAAS,MAAM,KACpB,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,QAAQ,KACtB,KAAK,SAAS,MAAM,KACnB,KAAK,SAAS,MAAM,KAAK,CAAC,KAAK,SAAS,cAAc;AAAA;AAAA,IAGxD,IAAI;AAAA,MACH,OAAO,QAAQ,MAAO,mBAA2B,SAAS,SAAS,OAAO,OAAO,CAAC;AAAA,MACjF,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA,EAGX,SAAS,OACP,SACA,SACA,QACA,UACA,aACG;AAAA,IACH,MAAM,oBAAoB,QAAQ,WAA8B,YAAY;AAAA,IAC5E,IAAI,CAAC,mBAAmB;AAAA,MACtB,MAAM,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,MAAM,WAAW,QAAQ;AAAA,IACzB,MAAM,SAAS,QAAQ;AAAA,IAEvB,IAAI,CAAC,YAAY,CAAC,QAAQ;AAAA,MACxB,MAAM,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,MAAM,OAAO,QAAQ,SAAS,QAAQ;AAAA,IACtC,MAAM,SAAS,oBAAoB,IAAI;AAAA,IAEvC,MAAM,mBAAmB,MAAM,kBAAkB,gBAAgB,QAAQ;AAAA,IACzE,IAAI,CAAC,oBAAoB,iBAAiB,OAAO,WAAW,GAAG;AAAA,MAC7D,MAAM,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,MAAM,eAA8B,CAAC,EAAE,UAAU,MAAM,OAAO,cAAc,iBAAiB,CAAC;AAAA,IAE9F,MAAM,QAAQ,OAAO,SAAS;AAAA,IAC9B,MAAM,UAAU,MAAM,kBAAkB,wBACtC,QACA,OACA,cACA;AAAA,MACE,0BAA0B,OAAO,YAAY;AAAA,MAC7C,YAAY,OAAO,YAAY,WAAW,IAAI,OAAO,YAAY,SAAS,IAAI;AAAA,IAChF,GACA;AAAA,MACE,SAAS,OAAO;AAAA,IAClB,CACF;AAAA,IAEA,MAAM,SAAS,MAAM,kBAAkB,mBAAmB,OAAO;AAAA,IACjE,IAAI,CAAC,OAAO,WAAW,OAAO,cAAc,WAAW,GAAG;AAAA,MACxD,MAAM,WAAW;AAAA,QACf,MAAM,OAAO,iBAAiB;AAAA,MAChC,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,MAAM,WAAW,EAAE,MAAM,oBAAoB,OAAO,aAAa,EAAE,CAAC;AAAA,IAEpE,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,WAAW,QAAQ;AAAA,QACnB,eAAe,OAAO;AAAA,MACxB;AAAA,IACF;AAAA;AAAA,EAEF,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,qCAAqC;AAAA,MACxD;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,0CAA0C;AAAA,MAC7D;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC3OA,IAAM,YAAuC;AAAA,EAC3C,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,WAAW;AAAA,EACX,KAAK;AAAA,EACL,UAAU;AAAA,EACV,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AAAA,EACV,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,KAAK;AACP;AAEA,IAAM,eAA+D;AAAA,EACnE,SAAS,EAAE,OAAO,KAAK,KAAK,IAAI;AAAA,EAChC,WAAW,EAAE,OAAO,KAAK,KAAK,KAAK;AAAA,EACnC,SAAS,EAAE,OAAO,MAAM,KAAK,KAAK;AAAA,EAClC,kBAAkB,EAAE,OAAO,KAAK,KAAK,KAAK;AAAA,EAC1C,cAAc,EAAE,OAAO,KAAK,KAAK,KAAK;AACxC;AAEA,IAAM,qBAAqB,CAAC,YAAmC;AAAA,EAC7D,MAAM,aAAa,QAAQ,YAAY,EAAE,KAAK;AAAA,EAG9C,IAAI,QAAQ,sBAAsB,KAAK,UAAU;AAAA,EACjD,IAAI,OAAO;AAAA,IACT,MAAM,QAAQ,OAAO,SAAS,MAAM,IAAI,EAAE;AAAA,IAC1C,MAAM,UAAU,OAAO,SAAS,MAAM,IAAI,EAAE;AAAA,IAC5C,IAAI,SAAS,KAAK,QAAQ,MAAM,WAAW,KAAK,UAAU,IAAI;AAAA,MAC5D,OAAO,QAAQ,KAAK;AAAA,IACtB;AAAA,EACF;AAAA,EAGA,QAAQ,sCAAsC,KAAK,UAAU;AAAA,EAC7D,IAAI,OAAO;AAAA,IACT,IAAI,QAAQ,OAAO,SAAS,MAAM,IAAI,EAAE;AAAA,IACxC,MAAM,UAAU,MAAM,KAAK,OAAO,SAAS,MAAM,IAAI,EAAE,IAAI;AAAA,IAC3D,MAAM,OAAO,MAAM,GAAG,YAAY,MAAM;AAAA,IAExC,IAAI,UAAU,IAAI;AAAA,MAChB,QAAQ,OAAO,KAAK;AAAA,IACtB,EAAO,SAAI,MAAM;AAAA,MACf,SAAS;AAAA,IACX;AAAA,IAEA,IAAI,SAAS,KAAK,QAAQ,MAAM,WAAW,KAAK,UAAU,IAAI;AAAA,MAC5D,OAAO,QAAQ,KAAK;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,IAAM,YAAY,CAAC,WAAgC;AAAA,EACjD,MAAM,aAAa,OAAO,YAAY,EAAE,KAAK;AAAA,EAE7C,IAAI,eAAe,aAAa,eAAe,YAAY;AAAA,IACzD,OAAO,CAAC,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,EAC3C;AAAA,EAEA,IAAI,eAAe,aAAa,eAAe,YAAY;AAAA,IACzD,OAAO,CAAC,OAAO,KAAK;AAAA,EACtB;AAAA,EAEA,IAAI,eAAe,cAAc,eAAe,eAAe,eAAe,SAAS;AAAA,IACrF,OAAO,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,EACzD;AAAA,EAEA,MAAM,MAAM,UAAU;AAAA,EACtB,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA;AAGxB,IAAM,wBAAwB,CAC5B,SACgE;AAAA,EAChE,MAAM,aAAa,KAAK,YAAY;AAAA,EACpC,MAAM,UAAgC,CAAC;AAAA,EAGvC,IAAI;AAAA,EACJ,MAAM,UACJ,kDAAkD,KAAK,IAAI,KAC3D,qFAAqF,KAAK,IAAI;AAAA,EAChG,IAAI,SAAS;AAAA,IACX,WAAW,QAAQ;AAAA,EACrB;AAAA,EAGA,MAAM,iBACJ;AAAA,EAEF,IAAI;AAAA,EACJ,QAAQ,eAAe,KAAK,UAAU;AAAA,EACtC,OAAO,UAAU,MAAM;AAAA,IACrB,MAAM,UAAU,MAAM;AAAA,IACtB,MAAM,YAAY,MAAM;AAAA,IACxB,MAAM,UAAU,MAAM;AAAA,IAEtB,MAAM,OAAO,UAAU,OAAO;AAAA,IAC9B,MAAM,eAAe,mBAAmB,SAAS;AAAA,IACjD,MAAM,aAAa,mBAAmB,OAAO;AAAA,IAE7C,IAAI,KAAK,SAAS,KAAK,iBAAiB,QAAQ,eAAe,MAAM;AAAA,MACnE,WAAW,OAAO,MAAM;AAAA,QACtB,QAAQ,KAAK;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,QAAQ,eAAe,KAAK,UAAU;AAAA,EACxC;AAAA,EAGA,MAAM,mBACJ;AAAA,EAEF,QAAQ,iBAAiB,KAAK,UAAU;AAAA,EACxC,OAAO,UAAU,MAAM;AAAA,IACrB,MAAM,UAAU,MAAM;AAAA,IACtB,MAAM,WAAW,MAAM,GAAG,YAAY;AAAA,IAEtC,MAAM,OAAO,UAAU,OAAO;AAAA,IAC9B,MAAM,YAAY,aAAa,aAAa,aAAa,SAAS,QAAQ,MAAM,EAAE;AAAA,IAElF,IAAI,KAAK,SAAS,KAAK,WAAW;AAAA,MAChC,WAAW,OAAO,MAAM;AAAA,QAEtB,MAAM,SAAS,QAAQ,KACrB,CAAC,MACC,EAAE,QAAQ,OAAO,EAAE,iBAAiB,UAAU,SAAS,EAAE,eAAe,UAAU,GACtF;AAAA,QACA,IAAI,CAAC,QAAQ;AAAA,UACX,QAAQ,KAAK;AAAA,YACX;AAAA,YACA,cAAc,UAAU;AAAA,YACxB,YAAY,UAAU;AAAA,UACxB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,iBAAiB,KAAK,UAAU;AAAA,EAC1C;AAAA,EAGA,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,YAAY,QAAQ,UAAU,OAAO,QAAQ,YAAY,GAAG;AAAA,MAC1D,IAAI,WAAW,SAAS,MAAM,GAAG;AAAA,QAE/B,WAAW,OAAO,CAAC,OAAO,OAAO,OAAO,OAAO,KAAK,GAAkB;AAAA,UACpE,QAAQ,KAAK;AAAA,YACX;AAAA,YACA,cAAc,MAAM;AAAA,YACpB,YAAY,MAAM;AAAA,UACpB,CAAC;AAAA,QACH;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,EAAE,SAAS,SAAS;AAAA;AAG7B,IAAM,aAAa,CAAC,YAA4B;AAAA,EAC9C,MAAM,QAAQ,KAAK,MAAM,UAAU,EAAE;AAAA,EACrC,MAAM,OAAO,UAAU;AAAA,EACvB,MAAM,SAAS,SAAS,KAAK,OAAO;AAAA,EACpC,MAAM,eAAe,QAAQ,KAAK,QAAQ,KAAK,UAAU,IAAI,KAAK;AAAA,EAClE,OAAO,OAAO,IACV,GAAG,gBAAgB,KAAK,SAAS,EAAE,SAAS,GAAG,GAAG,IAAI,WACtD,GAAG,eAAe;AAAA;AAGxB,IAAM,YAAY,CAAC,QAA2B;AAAA,EAC5C,MAAM,QAAmC;AAAA,IACvC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EACA,OAAO,MAAM;AAAA;AAGR,IAAM,wBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,SAAS,CAAC,uBAAuB,gBAAgB,mBAAmB,iBAAiB,WAAW;AAAA,EAChG,aAAa;AAAA,EACP,UAAU,OAAO,SAAc,SAAc,OAAa,YAAoC;AAAA,IACjG,MAAM,cAAc,OAAO,SAAS,SAAS,SAAS,WAAW,QAAQ,QAAQ,OAAO;AAAA,IACxF,MAAM,WAAW,YAAY,YAAY;AAAA,IACzC,MAAM,eAAe,CAAC,OAAO,cAAc;AAAA,IAC3C,MAAM,gBACL,aAAa,SAAS,KACtB,aAAa,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK,SAAS,SAAS,EAAE,CAAC;AAAA,IACjE,MAAM,YAAY,IAAI,OAAO,8BAA8B,GAAG;AAAA,IAC9D,MAAM,cAAc,UAAU,KAAK,QAAQ;AAAA,IAC3C,MAAM,aAAa,OAAO,SAAS,SAAS,UAAU,SAAS,UAAU,EAAE;AAAA,IAC3E,MAAM,qBAAqB;AAAA,IAC3B,MAAM,eAAe,qBAClB,eAAe,qBACf,QAAQ,cAAc,SAAS,SAAS,WAAW,SAAS,UAAU;AAAA,IACzE,MAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AAAA,IACxE,MAAM,cACL,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,QAAQ,SAAS,WAAW,OAAO,QAAQ,YAAY,QAAQ;AAAA,IAEhE,IAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AAAA,MACnE,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,qBAAqB,OAAO,UAAyB,aAAoB;AAAA,MAChF,MAAM,OAAO,SAAQ,SAAS,MAAM,YAAY,KAAK;AAAA,MACrD,OACE,KAAK,SAAS,WAAW,KACzB,KAAK,SAAS,cAAc,KAC5B,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,UAAU,KACxB,KAAK,SAAS,UAAU,KACxB,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,WAAW,KACzB,KAAK,SAAS,SAAS;AAAA;AAAA,IAGxB,IAAI;AAAA,MACH,OAAO,QAAQ,MAAO,mBAA2B,SAAS,SAAS,OAAO,OAAO,CAAC;AAAA,MACjF,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA,EAGX,SAAS,OACP,SACA,SACA,QACA,UACA,aACG;AAAA,IACH,MAAM,oBAAoB,QAAQ,WAA8B,YAAY;AAAA,IAC5E,IAAI,CAAC,mBAAmB;AAAA,MACtB,MAAM,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,MAAM,WAAW,QAAQ;AAAA,IACzB,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,MAAM,OAAO,QAAQ,SAAS,QAAQ;AAAA,IACtC,MAAM,SAAS,sBAAsB,IAAI;AAAA,IAEzC,IAAI,CAAC,UAAU,OAAO,QAAQ,WAAW,GAAG;AAAA,MAC1C,MAAM,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAAA,MACD,OAAO,EAAE,SAAS,MAAM;AAAA,IAC1B;AAAA,IAEA,MAAM,kBAAkB,QAAQ,IAAI,oBAAoB;AAAA,IACxD,IAAI,eAAe,MAAM,kBAAkB,gBAAgB,QAAQ;AAAA,IACnE,IAAI,CAAC,cAAc;AAAA,MACjB,eAAe,EAAE,UAAU,OAAO,YAAY,iBAAiB,QAAQ,CAAC,GAAG,YAAY,CAAC,EAAE;AAAA,IAC5F;AAAA,IACA,IAAI,OAAO;AAAA,MAAU,aAAa,WAAW,OAAO;AAAA,IAEpD,WAAW,aAAa,OAAO,SAAS;AAAA,MACtC,MAAM,SAAS,aAAa,OAAO,KACjC,CAAC,MACC,EAAE,QAAQ,UAAU,OACpB,EAAE,iBAAiB,UAAU,gBAC7B,EAAE,eAAe,UAAU,UAC/B;AAAA,MACA,IAAI,CAAC;AAAA,QAAQ,aAAa,OAAO,KAAK,SAAS;AAAA,IACjD;AAAA,IAEA,MAAM,kBAAkB,iBAAiB,UAAU,YAAY;AAAA,IAE/D,MAAM,eAAe,OAAO,QACzB,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,GAAG,KAAK,WAAW,EAAE,YAAY,KAAK,WAAW,EAAE,UAAU,GAAG,EAC1F,KAAK,IAAI;AAAA,IAEZ,MAAM,WAAW;AAAA,MACf,MAAM,yCAAyC;AAAA,IACjD,CAAC;AAAA,IAED,OAAO,EAAE,SAAS,KAAK;AAAA;AAAA,EAEzB,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,+BAA+B;AAAA,MAClD;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,qDAAqD;AAAA,MACxE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC5UA;AAKA,IAAM,0BAA0B,CAAC,SAAkB,YAAuC;AAAA,EACxF,MAAM,UAAU,QAAQ,WAAW,QAAQ,IAAI;AAAA,EAC/C,MAAM,eAAe,QAAQ,aAAa,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,EACtE,MAAM,cACJ,QAAQ,SAAS,SAAS,cACtB,MAAM,QAAQ,SAAS,SACvB,QAAQ,SAAS,SAAS,YACxB,oBACA;AAAA,EAER,OAAO,MAAM,QAAQ,aAAa,YAAY,qBAAqB,iBAAiB,QAAQ;AAAA;AAGvF,IAAM,4BAAsC;AAAA,EACjD,MAAM;AAAA,EACN,aAAa;AAAA,EACX,SAAS;AAAA,EACX,mBAAmB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACF,KAAK,OAAO,SAAwB,SAAiB,WAAkB;AAAA,IAAG,MAAM,qBAAqB,CAAC,cAAc,WAAW,6BAA6B,UAAU,UAAU,SAAS,QAAQ,WAAW,QAAQ,gBAAgB,SAAS,QAAQ,WAAW,MAAM;AAAA,IACpQ,MAAM,kBAAkB,IAAI,OAAO,OAAO,mBAAmB,KAAK,GAAG,SAAS,GAAG;AAAA,IACjF,MAAM,mBAAmB,QAAQ,sBAAsB,CAAC;AAAA,IACxD,MAAM,eACJ,uBAAuB,SAAS,kBAAkB,kBAAkB,KACpE,oBAAoB,SAAS,kBAAkB,eAAe;AAAA,IAChE,IAAI,CAAC,cAAc;AAAA,MACjB,OAAO,EAAE,MAAM,GAAG;AAAA,IACpB;AAAA,IAGE,MAAM,oBAAoB,QAAQ,WAA8B,YAAY;AAAA,IAC5E,IAAI,CAAC,mBAAmB;AAAA,MACtB,OAAO,EAAE,MAAM,GAAG;AAAA,IACpB;AAAA,IAEA,MAAM,WAAW,QAAQ;AAAA,IACzB,IAAI,CAAC,UAAU;AAAA,MACb,OAAO,EAAE,MAAM,GAAG;AAAA,IACpB;AAAA,IAEA,MAAM,WAAqB,CAAC;AAAA,IAE5B,IAAI;AAAA,MACF,MAAM,WAAW,MAAM,kBAAkB,oBAAoB,QAAQ;AAAA,MAErE,IAAI,SAAS,SAAS,GAAG;AAAA,QACvB,MAAM,mBAAmB,SAAS,OAAO,CAAC,MAAM,EAAE,WAAW,UAAU;AAAA,QACvE,MAAM,oBAAoB,SAAS,OACjC,CAAC,MAAM,EAAE,WAAW,eAAe,EAAE,WAAW,WAClD;AAAA,QAEA,IAAI,iBAAiB,SAAS,GAAG;AAAA,UAC/B,SAAS,KAAK,gCAAgC;AAAA,UAC9C,WAAW,WAAW,iBAAiB,MAAM,GAAG,CAAC,GAAG;AAAA,YAClD,SAAS,KAAK,wBAAwB,SAAS,iBAAiB,CAAC;AAAA,UACnE;AAAA,QACF;AAAA,QAEA,IAAI,kBAAkB,SAAS,GAAG;AAAA,UAChC,SAAS,KAAK;AAAA,6BAAgC;AAAA,UAC9C,WAAW,WAAW,kBAAkB,MAAM,GAAG,CAAC,GAAG;AAAA,YACnD,SAAS,KAAK,wBAAwB,SAAS,iBAAiB,CAAC;AAAA,UACnE;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,eAAe,MAAM,kBAAkB,gBAAgB,QAAQ;AAAA,MACrE,IAAI,cAAc;AAAA,QAChB,MAAM,cAAc,aAAa,OAAO;AAAA,QACxC,MAAM,kBAAkB,aAAa,WAAW;AAAA,QAEhD,SAAS,KACP;AAAA,WAAc,6DAA6D,aAAa,WAC1F;AAAA,QACA,IAAI,kBAAkB,GAAG;AAAA,UACvB,SAAS,KAAK,YAAY,yCAAyC;AAAA,QACrE;AAAA,MACF,EAAO;AAAA,QACL,SAAS,KAAK;AAAA,wCAA2C;AAAA;AAAA,MAE3D,MAAM;AAAA,IAIR,IAAI,SAAS,WAAW,GAAG;AAAA,MACzB,OAAO,EAAE,MAAM,GAAG;AAAA,IACpB;AAAA,IAEA,OAAO,EAAE,MAAM;AAAA,EAAyB,SAAS,KAAK;AAAA,CAAI;AAAA,uBAA2B;AAAA;AAEzF;;;ACnHA;AACA,eAAS;;;ACAT,eAAS;AAGT,IAAM,0BAA0B;AAChC,IAAM,qBAAqB;AAC3B,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAC3B,IAAM,gCAAgC;AACtC,IAAM,uCAAuC;AAC7C,IAAM,oCAAoC;AAS1C,eAAe,eAAe,CAC5B,SACA,WACA,UACuB;AAAA,EACvB,MAAM,gBAAgB,GAAG,aAAa;AAAA,EAEtC,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,EAC3E,IAAI,CAAC,WAAW;AAAA,IACd,OAAO,EAAE,YAAY,CAAC,EAAE;AAAA,EAC1B;AAAA,EACA,OAAO,UAAU;AAAA;AAGnB,eAAe,gBAAgB,CAC7B,SACA,WACA,UACA,OACe;AAAA,EACf,MAAM,gBAAgB,GAAG,aAAa;AAAA,EACtC,MAAM,WAAW,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,EAE1E,MAAM,YAAuB;AAAA,IAC3B,IAAI,UAAU,MAAO,OAAO;AAAA,IAC5B,UAAU,QAAQ;AAAA,IAClB,SAAS,QAAQ;AAAA,IACjB,QAAQ,OAAO;AAAA,IACf,SAAS,UAAU,WAAY,OAAO;AAAA,IACtC,gBAAgB,QAAQ;AAAA,IACxB,MAAM;AAAA,IACN,WAAW,UAAU,aAAa,KAAK,IAAI;AAAA,IAC3C,MAAM;AAAA,EACR;AAAA,EAEA,IAAI,UAAU;AAAA,IACZ,MAAM,QAAQ,gBAAgB,SAAS;AAAA,EACzC,EAAO;AAAA,IACL,MAAM,QAAQ,gBAAgB,SAAS;AAAA;AAAA;AAI3C,eAAe,iBAAiB,CAC9B,SACA,WACA,UACA,WACe;AAAA,EACf,MAAM,QAAQ,MAAM,gBAAgB,SAAS,WAAW,QAAQ;AAAA,EAChE,IAAI,CAAC,MAAM,WAAW,SAAS,SAAS,GAAG;AAAA,IACzC,MAAM,WAAW,KAAK,SAAS;AAAA,IAC/B,MAAM,iBAAiB,SAAS,WAAW,UAAU,KAAK;AAAA,EAC5D;AAAA;AAGF,eAAe,sBAAsB,CACnC,SACA,WACA,UACA,WACe;AAAA,EACf,MAAM,QAAQ,MAAM,gBAAgB,SAAS,WAAW,QAAQ;AAAA,EAChE,MAAM,aAAa,MAAM,WAAW,OAAO,CAAC,OAAO,OAAO,SAAS;AAAA,EACnE,MAAM,iBAAiB,SAAS,WAAW,UAAU,KAAK;AAAA;AAG5D,eAAe,gBAAgB,CAAC,SAAwB,WAA2C;AAAA,EACjG,MAAM,gBAAgB,GAAG,qCAAqC;AAAA,EAC9D,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,EAC3E,OAAO,YAAa,UAAU,OAAoC,EAAE,aAAa,CAAC,EAAE;AAAA;AAGtF,eAAe,iBAAiB,CAC9B,SACA,WACA,OACe;AAAA,EACf,MAAM,gBAAgB,GAAG,qCAAqC;AAAA,EAC9D,MAAM,WAAW,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,EAE1E,MAAM,YAAuB;AAAA,IAC3B,IAAI,UAAU,MAAO,OAAO;AAAA,IAC5B,UAAU,QAAQ;AAAA,IAClB,SAAS,QAAQ;AAAA,IACjB,QAAQ,OAAO;AAAA,IACf,SAAS,UAAU,WAAY,OAAO;AAAA,IACtC,gBAAgB,QAAQ;AAAA,IACxB,MAAM;AAAA,IACN,WAAW,UAAU,aAAa,KAAK,IAAI;AAAA,IAC3C,MAAM;AAAA,EACR;AAAA,EAEA,IAAI,UAAU;AAAA,IACZ,MAAM,QAAQ,gBAAgB,SAAS;AAAA,EACzC,EAAO;AAAA,IACL,MAAM,QAAQ,gBAAgB,SAAS;AAAA;AAAA;AAUpC,IAAM,yBAAyB,CAAC,aAAiD;AAAA,EACtF,KAAK,OAAO,aAAa;AAAA,IACvB,MAAM,gBAAgB,GAAG,2BAA2B;AAAA,IACpD,MAAM,YAAY,MAAM,QAAQ,aAAa,UAAU,aAAa;AAAA,IACpE,IAAI,CAAC;AAAA,MAAW,OAAO;AAAA,IACvB,OAAO,UAAU;AAAA;AAAA,EAGnB,MAAM,OAAO,UAAU,iBAAiB;AAAA,IACtC,MAAM,gBAAgB,GAAG,2BAA2B;AAAA,IACpD,MAAM,WAAW,MAAM,QAAQ,aAAa,UAAU,aAAa;AAAA,IAEnE,MAAM,YAAuB;AAAA,MAC3B,IAAI,UAAU,MAAO,OAAO;AAAA,MAC5B;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,QAAQ,OAAO;AAAA,MACf,SAAS,UAAU,WAAY,OAAO;AAAA,MACtC,gBAAgB,QAAQ;AAAA,MACxB,MAAM;AAAA,MACN,WAAW,UAAU,aAAa,KAAK,IAAI;AAAA,MAC3C,MAAM;AAAA,IACR;AAAA,IAEA,IAAI,UAAU;AAAA,MACZ,MAAM,QAAQ,gBAAgB,SAAS;AAAA,IACzC,EAAO;AAAA,MACL,MAAM,QAAQ,gBAAgB,SAAS;AAAA;AAAA;AAAA,EAI3C,QAAQ,OAAO,aAAa;AAAA,IAC1B,MAAM,gBAAgB,GAAG,2BAA2B;AAAA,IACpD,MAAM,WAAW,MAAM,QAAQ,aAAa,UAAU,aAAa;AAAA,IACnE,IAAI,UAAU;AAAA,MACZ,MAAM,QAAQ,gBAAgB,SAAS,EAAE;AAAA,IAC3C;AAAA;AAEJ;AASO,IAAM,8BAA8B,CAAC,aAAsD;AAAA,EAChG,KAAK,OAAO,cAAc;AAAA,IACxB,MAAM,gBAAgB,GAAG,sBAAsB;AAAA,IAC/C,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,IAC3E,IAAI,CAAC;AAAA,MAAW,OAAO;AAAA,IACvB,OAAO,UAAU;AAAA;AAAA,EAGnB,MAAM,OAAO,YAAY;AAAA,IACvB,MAAM,gBAAgB,GAAG,sBAAsB,QAAQ;AAAA,IACvD,MAAM,WAAW,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,IAE1E,MAAM,YAAuB;AAAA,MAC3B,IAAI,UAAU,MAAO,OAAO;AAAA,MAC5B,UAAU,QAAQ;AAAA,MAClB,SAAS,QAAQ;AAAA,MACjB,QAAQ,QAAQ;AAAA,MAChB,SAAS,UAAU,WAAY,OAAO;AAAA,MACtC,gBAAgB,QAAQ;AAAA,MACxB,MAAM;AAAA,MACN,WAAW,UAAU,aAAa,KAAK,IAAI;AAAA,MAC3C,MAAM;AAAA,IACR;AAAA,IAEA,IAAI,UAAU;AAAA,MACZ,MAAM,QAAQ,gBAAgB,SAAS;AAAA,IACzC,EAAO;AAAA,MACL,MAAM,QAAQ,gBAAgB,SAAS;AAAA;AAAA;AAAA,EAI3C,QAAQ,OAAO,cAAc;AAAA,IAC3B,MAAM,gBAAgB,GAAG,sBAAsB;AAAA,IAC/C,MAAM,WAAW,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,IAC1E,IAAI,UAAU;AAAA,MACZ,MAAM,QAAQ,gBAAgB,SAAS,EAAE;AAAA,IAC3C;AAAA;AAAA,EAGF,WAAW,OAAO,WAAW;AAAA,IAC3B,MAAM,aAAa,MAAM,QAAQ,cAAc,QAAQ,OAAO;AAAA,IAC9D,MAAM,WAAgC,CAAC;AAAA,IACvC,WAAW,aAAa,YAAY;AAAA,MAClC,IAAI,UAAU,KAAK,WAAW,GAAG,qBAAqB,GAAG;AAAA,QACvD,MAAM,UAAU,UAAU;AAAA,QAC1B,IAAI,QAAQ,WAAW;AAAA,UAAQ,SAAS,KAAK,OAAO;AAAA,MACtD;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAEX;AAUO,IAAM,oBAAoB,CAAC,aAA4C;AAAA,EAC5E,KAAK,OAAO,cAAc;AAAA,IACxB,MAAM,gBAAgB,GAAG,sBAAsB;AAAA,IAC/C,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,IAC3E,IAAI,CAAC;AAAA,MAAW,OAAO;AAAA,IACvB,OAAO,UAAU;AAAA;AAAA,EAGnB,MAAM,OAAO,YAAY;AAAA,IACvB,MAAM,gBAAgB,GAAG,sBAAsB,QAAQ;AAAA,IACvD,MAAM,WAAW,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,IAE1E,MAAM,YAAuB;AAAA,MAC3B,IAAI,UAAU,MAAO,OAAO;AAAA,MAC5B,UAAU,QAAQ;AAAA,MAClB,SAAS,QAAQ;AAAA,MACjB,QAAQ,QAAQ;AAAA,MAChB,SAAS,UAAU,WAAY,OAAO;AAAA,MACtC,gBAAgB,QAAQ;AAAA,MACxB,MAAM;AAAA,MACN,WAAW,UAAU,aAAa,QAAQ;AAAA,MAC1C,MAAM;AAAA,IACR;AAAA,IAEA,IAAI,UAAU;AAAA,MACZ,MAAM,QAAQ,gBAAgB,SAAS;AAAA,IACzC,EAAO;AAAA,MACL,MAAM,QAAQ,gBAAgB,SAAS;AAAA,MAGvC,MAAM,kBAAkB,SAAS,+BAA+B,QAAQ,QAAQ,QAAQ,EAAE;AAAA,MAG1F,WAAW,eAAe,QAAQ,cAAc;AAAA,QAC9C,MAAM,kBACJ,SACA,sCACA,YAAY,UACZ,QAAQ,EACV;AAAA,MACF;AAAA;AAAA;AAAA,EAIJ,QAAQ,OAAO,cAAc;AAAA,IAC3B,MAAM,gBAAgB,GAAG,sBAAsB;AAAA,IAC/C,MAAM,WAAW,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,IAE1E,IAAI,UAAU;AAAA,MACZ,MAAM,UAAU,SAAS;AAAA,MAGzB,MAAM,uBACJ,SACA,+BACA,QAAQ,QACR,SACF;AAAA,MAGA,WAAW,eAAe,QAAQ,cAAc;AAAA,QAC9C,MAAM,uBACJ,SACA,sCACA,YAAY,UACZ,SACF;AAAA,MACF;AAAA,MAEA,MAAM,QAAQ,gBAAgB,SAAS,EAAE;AAAA,IAC3C;AAAA;AAAA,EAGF,WAAW,OAAO,WAAW;AAAA,IAC3B,MAAM,QAAQ,MAAM,gBAAgB,SAAS,+BAA+B,MAAM;AAAA,IAClF,MAAM,WAAsB,CAAC;AAAA,IAE7B,WAAW,aAAa,MAAM,YAAY;AAAA,MACxC,MAAM,gBAAgB,GAAG,sBAAsB;AAAA,MAC/C,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,MAC3E,IAAI,WAAW;AAAA,QACb,SAAS,KAAK,UAAU,IAA0B;AAAA,MACpD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,2BAA2B,OAAO,aAAa;AAAA,IAC7C,MAAM,QAAQ,MAAM,gBAAgB,SAAS,sCAAsC,QAAQ;AAAA,IAC3F,MAAM,WAAsB,CAAC;AAAA,IAC7B,MAAM,MAAM,KAAK,IAAI;AAAA,IAErB,WAAW,aAAa,MAAM,YAAY;AAAA,MACxC,MAAM,gBAAgB,GAAG,sBAAsB;AAAA,MAC/C,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,MAC3E,IAAI,WAAW;AAAA,QACb,MAAM,UAAU,UAAU;AAAA,QAE1B,IAAI,IAAI,KAAK,QAAQ,KAAK,KAAK,EAAE,QAAQ,IAAI,OAAO,QAAQ,WAAW,aAAa;AAAA,UAClF,SAAS,KAAK,OAAO;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,IAGA,SAAS,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,KAAK,KAAK,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,KAAK,KAAK,EAAE,QAAQ,CAAC;AAAA,IAE3F,OAAO;AAAA;AAEX;AAUA,IAAM,oBAAoB;AAK1B,eAAe,mBAAmB,CAAC,SAAmD;AAAA,EACpF,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,iBAAiB;AAAA,EAC/E,IAAI,CAAC,WAAW;AAAA,IACd,OAAO,EAAE,aAAa,CAAC,EAAE;AAAA,EAC3B;AAAA,EACA,OAAO,UAAU;AAAA;AAGnB,eAAe,oBAAoB,CACjC,SACA,UACe;AAAA,EACf,MAAM,WAAW,MAAM,QAAQ,aAAa,QAAQ,SAAS,iBAAiB;AAAA,EAE9E,MAAM,YAAuB;AAAA,IAC3B,IAAI,UAAU,MAAO,OAAO;AAAA,IAC5B,UAAU,QAAQ;AAAA,IAClB,SAAS,QAAQ;AAAA,IACjB,QAAQ,OAAO;AAAA,IACf,SAAS,UAAU,WAAY,OAAO;AAAA,IACtC,gBAAgB,QAAQ;AAAA,IACxB,MAAM;AAAA,IACN,WAAW,UAAU,aAAa,KAAK,IAAI;AAAA,IAC3C,MAAM;AAAA,EACR;AAAA,EAEA,IAAI,UAAU;AAAA,IACZ,MAAM,QAAQ,gBAAgB,SAAS;AAAA,EACzC,EAAO;AAAA,IACL,MAAM,QAAQ,gBAAgB,SAAS;AAAA;AAAA;AAIpC,IAAM,qBAAqB,CAAC,aAA6C;AAAA,EAC9E,KAAK,OAAO,eAAe;AAAA,IACzB,MAAM,gBAAgB,GAAG,uBAAuB;AAAA,IAChD,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,IAC3E,IAAI,CAAC;AAAA,MAAW,OAAO;AAAA,IACvB,OAAO,UAAU;AAAA;AAAA,EAGnB,MAAM,OAAO,aAAa;AAAA,IACxB,MAAM,gBAAgB,GAAG,uBAAuB,SAAS;AAAA,IACzD,MAAM,WAAW,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,IAE1E,MAAM,YAAuB;AAAA,MAC3B,IAAI,UAAU,MAAO,OAAO;AAAA,MAC5B,UAAU,QAAQ;AAAA,MAClB,SAAS,QAAQ;AAAA,MACjB,QAAQ,OAAO;AAAA,MACf,SAAS,UAAU,WAAY,OAAO;AAAA,MACtC,gBAAgB,QAAQ;AAAA,MACxB,MAAM;AAAA,MACN,WAAW,UAAU,aAAa,SAAS;AAAA,MAC3C,MAAM;AAAA,IACR;AAAA,IAEA,IAAI,UAAU;AAAA,MACZ,MAAM,QAAQ,gBAAgB,SAAS;AAAA,IACzC,EAAO;AAAA,MACL,MAAM,QAAQ,gBAAgB,SAAS;AAAA,MAGvC,MAAM,QAAQ,MAAM,iBAAiB,SAAS,SAAS,SAAS;AAAA,MAChE,IAAI,CAAC,MAAM,YAAY,SAAS,SAAS,EAAE,GAAG;AAAA,QAC5C,MAAM,YAAY,KAAK,SAAS,EAAE;AAAA,QAClC,MAAM,kBAAkB,SAAS,SAAS,WAAW,KAAK;AAAA,MAC5D;AAAA,MAGA,MAAM,WAAW,MAAM,oBAAoB,OAAO;AAAA,MAClD,IAAI,CAAC,SAAS,YAAY,SAAS,SAAS,EAAE,GAAG;AAAA,QAC/C,SAAS,YAAY,KAAK,SAAS,EAAE;AAAA,QACrC,MAAM,qBAAqB,SAAS,QAAQ;AAAA,MAC9C;AAAA;AAAA;AAAA,EAIJ,QAAQ,OAAO,eAAe;AAAA,IAC5B,MAAM,gBAAgB,GAAG,uBAAuB;AAAA,IAChD,MAAM,WAAW,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,IAE1E,IAAI,UAAU;AAAA,MACZ,MAAM,WAAW,SAAS;AAAA,MAG1B,MAAM,QAAQ,MAAM,iBAAiB,SAAS,SAAS,SAAS;AAAA,MAChE,MAAM,cAAc,MAAM,YAAY,OAAO,CAAC,OAAO,OAAO,UAAU;AAAA,MACtE,MAAM,kBAAkB,SAAS,SAAS,WAAW,KAAK;AAAA,MAG1D,MAAM,WAAW,MAAM,oBAAoB,OAAO;AAAA,MAClD,SAAS,cAAc,SAAS,YAAY,OAAO,CAAC,OAAO,OAAO,UAAU;AAAA,MAC5E,MAAM,qBAAqB,SAAS,QAAQ;AAAA,MAE5C,MAAM,QAAQ,gBAAgB,SAAS,EAAE;AAAA,IAC3C;AAAA;AAAA,EAGF,cAAc,OAAO,cAAc;AAAA,IACjC,MAAM,QAAQ,MAAM,iBAAiB,SAAS,SAAS;AAAA,IACvD,MAAM,YAAwB,CAAC;AAAA,IAE/B,WAAW,cAAc,MAAM,aAAa;AAAA,MAC1C,MAAM,gBAAgB,GAAG,uBAAuB;AAAA,MAChD,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,MAC3E,IAAI,WAAW;AAAA,QACb,UAAU,KAAK,UAAU,IAA2B;AAAA,MACtD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,QAAQ,YAAY;AAAA,IAClB,MAAM,WAAW,MAAM,oBAAoB,OAAO;AAAA,IAClD,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,eAA2B,CAAC;AAAA,IAElC,WAAW,cAAc,SAAS,aAAa;AAAA,MAC7C,MAAM,gBAAgB,GAAG,uBAAuB;AAAA,MAChD,MAAM,YAAY,MAAM,QAAQ,aAAa,QAAQ,SAAS,aAAa;AAAA,MAE3E,IAAI,WAAW;AAAA,QACb,MAAM,WAAW,UAAU;AAAA,QAC3B,IAAI,SAAS,WAAW,aAAa,IAAI,KAAK,SAAS,YAAY,EAAE,QAAQ,KAAK,KAAK;AAAA,UACrF,aAAa,KAAK,QAAQ;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAEX;;;ACnKO,IAAM,iBAA0C;AAAA,EACrD,wBAAwB,CAAC,MAAM,GAAG;AAAA,EAClC,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,uBAAuB;AACzB;;;ACpUA,IAAM,YAAY,CAAC,QAAwB;AAAA,EACzC,OAAO,IAAI,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,OAAO,KAAK;AAAA;AAMlG,IAAM,gBAAgB,CAAC,cAA8B;AAAA,EACnD,OAAO,UAAU,QAAQ,SAAS,EAAE,EAAE,QAAQ,WAAW,EAAE;AAAA;AAM7D,IAAM,UAAU,CAAC,SAAkC;AAAA,EACjD,QAAQ;AAAA,SACD;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA,MAEP,OAAO;AAAA;AAAA;AAOb,IAAM,WAAW,CAAC,SAAyB;AAAA,EACzC,MAAM,YAAY;AAAA,EAClB,IAAI,KAAK,UAAU,WAAW;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAkB,CAAC;AAAA,EACzB,IAAI,YAAY;AAAA,EAEhB,OAAO,UAAU,SAAS,GAAG;AAAA,IAC3B,IAAI,MAAM,WAAW,GAAG;AAAA,MACtB,MAAM,KAAK,UAAU,MAAM,GAAG,SAAS,CAAC;AAAA,MACxC,YAAY,UAAU,MAAM,SAAS;AAAA,IACvC,EAAO;AAAA,MAEL,MAAM,KAAK,IAAI,UAAU,MAAM,GAAG,YAAY,CAAC,GAAG;AAAA,MAClD,YAAY,UAAU,MAAM,YAAY,CAAC;AAAA;AAAA,EAE7C;AAAA,EAEA,OAAO,MAAM,KAAK;AAAA,CAAM;AAAA;AAMnB,IAAM,cAAc,CAAC,UAAiC;AAAA,EAC3D,MAAM,QAAkB,CAAC;AAAA,EAGzB,MAAM,KAAK,iBAAiB;AAAA,EAC5B,MAAM,KAAK,aAAa;AAAA,EACxB,MAAM,KAAK,yCAAyC;AAAA,EACpD,MAAM,KAAK,oBAAoB;AAAA,EAC/B,MAAM,KAAK,gBAAgB;AAAA,EAG3B,MAAM,KAAK,cAAc;AAAA,EAGzB,MAAM,KAAK,OAAO,MAAM,KAAK;AAAA,EAC7B,MAAM,KAAK,WAAW,cAAc,IAAI,KAAK,EAAE,YAAY,CAAC,GAAG;AAAA,EAC/D,MAAM,KAAK,WAAW,cAAc,MAAM,KAAK,GAAG;AAAA,EAClD,MAAM,KAAK,SAAS,cAAc,MAAM,GAAG,GAAG;AAAA,EAC9C,MAAM,KAAK,WAAW,UAAU,MAAM,KAAK,GAAG;AAAA,EAG9C,IAAI,MAAM,aAAa;AAAA,IACrB,MAAM,KAAK,eAAe,UAAU,MAAM,WAAW,GAAG;AAAA,EAC1D;AAAA,EAEA,IAAI,MAAM,UAAU;AAAA,IAClB,MAAM,KAAK,YAAY,UAAU,MAAM,QAAQ,GAAG;AAAA,EACpD;AAAA,EAEA,IAAI,MAAM,KAAK;AAAA,IACb,MAAM,KAAK,OAAO,MAAM,KAAK;AAAA,EAC/B;AAAA,EAGA,IAAI,MAAM,WAAW;AAAA,IACnB,MAAM,KAAK,gBAAgB,UAAU,MAAM,UAAU,IAAI,YAAY,MAAM,UAAU,OAAO;AAAA,EAC9F;AAAA,EAGA,IAAI,MAAM,WAAW;AAAA,IACnB,WAAW,YAAY,MAAM,WAAW;AAAA,MACtC,MAAM,OAAO,QAAQ,SAAS,IAAI;AAAA,MAClC,MAAM,KACJ,iBAAiB,iCAAiC,UAAU,SAAS,IAAI,YAAY,SAAS,OAChG;AAAA,IACF;AAAA,EACF;AAAA,EAGA,IAAI,MAAM,iBAAiB;AAAA,IACzB,WAAW,WAAW,MAAM,iBAAiB;AAAA,MAC3C,MAAM,KAAK,cAAc;AAAA,MACzB,MAAM,KAAK,gBAAgB;AAAA,MAC3B,MAAM,KAAK,eAAe,UAAU,MAAM,KAAK,GAAG;AAAA,MAClD,MAAM,KAAK,cAAc,UAAU;AAAA,MACnC,MAAM,KAAK,YAAY;AAAA,IACzB;AAAA,EACF;AAAA,EAGA,MAAM,KAAK,kBAAkB;AAAA,EAC7B,MAAM,KAAK,YAAY;AAAA,EAGvB,MAAM,KAAK,YAAY;AAAA,EAGvB,MAAM,KAAK,eAAe;AAAA,EAG1B,OAAO,MAAM,IAAI,QAAQ,EAAE,KAAK;AAAA,CAAM;AAAA;AAMjC,IAAM,WAAW,CAAC,QAAiC;AAAA,EACxD,MAAM,SAA0B,CAAC;AAAA,EACjC,MAAM,QAAQ,IAAI,MAAM,OAAO;AAAA,EAE/B,IAAI,eAA8C;AAAA,EAClD,IAAI,cAAc;AAAA,EAElB,WAAW,QAAQ,OAAO;AAAA,IAExB,IAAI,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,IAAI,GAAG;AAAA,MACjD,eAAe,KAAK,MAAM,CAAC;AAAA,MAC3B;AAAA,IACF;AAAA,IAGA,IAAI,eAAe,cAAc;AAAA,MAC/B,YAAY,aAAa,YAAY;AAAA,IACvC;AAAA,IAEA,cAAc;AAAA,IAGd,IAAI,SAAS,gBAAgB;AAAA,MAC3B,eAAe,CAAC;AAAA,IAClB,EAAO,SAAI,SAAS,gBAAgB,cAAc;AAAA,MAChD,IAAI,aAAa,OAAO,aAAa,SAAS,aAAa,OAAO,aAAa,OAAO;AAAA,QACpF,OAAO,KAAK,YAA6B;AAAA,MAC3C;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAMT,IAAM,cAAc,CAAC,MAAc,UAAwC;AAAA,EACzE,MAAM,aAAa,KAAK,QAAQ,GAAG;AAAA,EACnC,IAAI,eAAe;AAAA,IAAI;AAAA,EAEvB,MAAM,UAAU,KAAK,MAAM,GAAG,UAAU;AAAA,EACxC,MAAM,QAAQ,KAAK,MAAM,aAAa,CAAC;AAAA,EAGvC,MAAM,YAAY,QAAQ,QAAQ,GAAG;AAAA,EACrC,MAAM,MAAM,cAAc,KAAK,UAAU,QAAQ,MAAM,GAAG,SAAS;AAAA,EAEnE,QAAQ;AAAA,SACD;AAAA,MACH,MAAM,MAAM;AAAA,MACZ;AAAA,SACG;AAAA,MACH,MAAM,QAAQ,YAAY,KAAK;AAAA,MAC/B;AAAA,SACG;AAAA,MACH,MAAM,cAAc,YAAY,KAAK;AAAA,MACrC;AAAA,SACG;AAAA,MACH,MAAM,QAAQ,aAAa,KAAK;AAAA,MAChC;AAAA,SACG;AAAA,MACH,MAAM,MAAM,aAAa,KAAK;AAAA,MAC9B;AAAA,SACG;AAAA,MACH,MAAM,WAAW,YAAY,KAAK;AAAA,MAClC;AAAA,SACG;AAAA,MACH,MAAM,MAAM;AAAA,MACZ;AAAA;AAAA;AAON,IAAM,cAAc,CAAC,QAAwB;AAAA,EAC3C,OAAO,IAAI,QAAQ,QAAQ;AAAA,CAAI,EAAE,QAAQ,QAAQ,GAAG,EAAE,QAAQ,QAAQ,GAAG,EAAE,QAAQ,SAAS,IAAI;AAAA;AAMlG,IAAM,eAAe,CAAC,YAA4B;AAAA,EAEhD,MAAM,QAAQ,kDAAkD,KAAK,OAAO;AAAA,EAC5E,IAAI,OAAO;AAAA,IACT,SAAS,MAAM,OAAO,KAAK,MAAM,QAAQ,UAAU;AAAA,IACnD,OAAO,GAAG,QAAQ,SAAS,OAAO,QAAQ,UAAU;AAAA,EACtD;AAAA,EAGA,OAAO;AAAA;;;AH9MT,IAAM,YAAuC;AAAA,EAC3C,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAEA,IAAM,gBAAgB,CAAC,MAAY,aAA6C;AAAA,EAC9E,MAAM,YAAY,IAAI,KAAK,eAAe,SAAS;AAAA,IACjD;AAAA,IACA,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AAAA,EACD,MAAM,QAAQ,UAAU,cAAc,IAAI;AAAA,EAC1C,MAAM,MAA8B,CAAC;AAAA,EACrC,WAAW,QAAQ,OAAO;AAAA,IACxB,IAAI,KAAK,SAAS,WAAW;AAAA,MAC3B,IAAI,KAAK,QAAQ,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,IAAM,eAAe,CAAC,MAAY,aAAgC;AAAA,EAChE,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAAA,EAC1C,OAAO,UAAU,MAAM,YAAY;AAAA;AAGrC,IAAM,kBAAkB,CAAC,MAAY,aAA6B;AAAA,EAChE,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAAA,EAC1C,OAAO,OAAO,MAAM,IAAI,IAAI,KAAK,OAAO,MAAM,MAAM;AAAA;AAGtD,IAAM,gBAAgB,CAAC,MAAY,aAA6B;AAAA,EAC9D,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAAA,EAC1C,OAAO,GAAG,MAAM,QAAQ,MAAM,SAAS,MAAM;AAAA;AAG/C,IAAM,kBAAkB,CAAC,SAAiB,SAAiB,aAA2B;AAAA,EACpF,OAAO,MAAM,OAAO,OAAO,QAAQ,MAAM,GAAG,EAAE,IAAI,MAAM;AAAA,EACxD,MAAM,QAAQ,KAAK,MAAM,UAAU,EAAE;AAAA,EACrC,MAAM,OAAO,UAAU;AAAA,EAGvB,MAAM,eAAe,GAAG,QAAQ,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,KAAK,OAAO,GAAG,EAAE,SAAS,GAAG,GAAG,KAAK,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,KAAK,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG;AAAA,EAGhK,MAAM,YAAY,IAAI,KAAK,eAAe,SAAS;AAAA,IACjD;AAAA,IACA,cAAc;AAAA,EAChB,CAAC;AAAA,EAGD,MAAM,WAAW,IAAI,KAAK,GAAG,eAAe;AAAA,EAC5C,MAAM,cAAc,UAAU,cAAc,QAAQ;AAAA,EACpD,MAAM,aAAa,YAAY,KAAK,CAAC,MAAM,EAAE,SAAS,cAAc;AAAA,EAGpE,IAAI,gBAAgB;AAAA,EACpB,IAAI,YAAY;AAAA,IACd,MAAM,QAAQ,2BAA2B,KAAK,WAAW,KAAK;AAAA,IAC9D,IAAI,OAAO;AAAA,MACT,MAAM,OAAO,MAAM,OAAO,MAAM,IAAI;AAAA,MACpC,gBAAgB,QAAQ,OAAO,MAAM,EAAE,IAAI,KAAK,OAAO,MAAM,EAAE;AAAA,IACjE;AAAA,EACF;AAAA,EAGA,MAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,OAAO,MAAM,GAAG,CAAC,IAAI,gBAAgB,KAAK;AAAA,EACvF,OAAO,IAAI,KAAK,KAAK;AAAA;AAGvB,IAAM,UAAU,CAAC,MAAY,SAAuB;AAAA,EAClD,MAAM,SAAS,IAAI,KAAK,IAAI;AAAA,EAC5B,OAAO,QAAQ,OAAO,QAAQ,IAAI,IAAI;AAAA,EACtC,OAAO;AAAA;AAAA;AAGF,MAAM,0BAA0B,QAAQ;AAAA,SACtC,cAAc;AAAA,EACrB,wBACE;AAAA,EAEM;AAAA,EAER,WAAW,CAAC,SAAyB,kBAAqD;AAAA,IACxF,MAAM,OAAO;AAAA,IACb,KAAK,mBAAmB,KAAK,mBAAmB,iBAAiB;AAAA;AAAA,cAGtD,MAAK,CAAC,SAA0C;AAAA,IAC3D,MAAM,UAAU,IAAI,kBAAkB,OAAO;AAAA,IAC7C,MAAM,eAAe,MAAM,QAAQ,YAAY;AAAA,IAE/C,IAAI,CAAC,aAAa,SAAS;AAAA,MACzB,OAAO,KAAK,8CAA8C,aAAa,OAAO,KAAK,IAAI,GAAG;AAAA,IAC5F,EAAO;AAAA,MACL,OAAO,KAAK,yCAAyC,QAAQ,SAAS;AAAA;AAAA,IAIxE,IAAI,aAAa,gBAAgB,SAAS,GAAG;AAAA,MAC3C,OAAO,MACL,qDAAqD,aAAa,gBAAgB,KAAK,IAAI,GAC7F;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,KAAI,GAAkB;AAAA,IAC1B,OAAO,KAAK,6BAA6B;AAAA;AAAA,OAGrC,YAAW,GAA+E;AAAA,IAC9F,MAAM,SAAmB,CAAC;AAAA,IAC1B,MAAM,kBAA4B,CAAC;AAAA,IAEnC,IAAI,CAAC,KAAK,QAAQ,cAAc;AAAA,MAC9B,OAAO,KAAK,qCAAqC;AAAA,IACnD;AAAA,IACA,IAAI,CAAC,KAAK,QAAQ,iBAAiB;AAAA,MACjC,OAAO,KAAK,wCAAwC;AAAA,IACtD;AAAA,IAKA,MAAM,eAAe,KAAK,QAAQ,WAAW,OAAO;AAAA,IACpD,IAAI,CAAC,cAAc;AAAA,MACjB,gBAAgB,KAAK,6BAA6B;AAAA,IACpD;AAAA,IAEA,OAAO,EAAE,SAAS,OAAO,WAAW,GAAG,QAAQ,gBAAgB;AAAA;AAAA,EAGjE,mBAAmB,GAA4B;AAAA,IAC7C,OAAO,KAAK,KAAK,iBAAiB;AAAA;AAAA,OAG9B,iBAAgB,CAAC,UAAgB,cAA2C;AAAA,IAChF,MAAM,UAAU,uBAAuB,KAAK,OAAO;AAAA,IACnD,MAAM,QAAQ,KAAK,UAAU,YAAY;AAAA;AAAA,OAGrC,gBAAe,CAAC,UAA8C;AAAA,IAClE,OAAO,uBAAuB,KAAK,OAAO,EAAE,IAAI,QAAQ;AAAA;AAAA,EAG1D,aAAa,CAAC,cAA4B,UAAyB;AAAA,IACjE,MAAM,MAAM,aAAa,UAAU,aAAa,QAAQ;AAAA,IACxD,MAAM,UAAU,gBAAgB,UAAU,aAAa,QAAQ;AAAA,IAC/D,MAAM,UAAU,cAAc,UAAU,aAAa,QAAQ;AAAA,IAG7D,MAAM,YAAY,aAAa,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO;AAAA,IACxE,IAAI,WAAW;AAAA,MACb,IAAI,UAAU;AAAA,QAAa,OAAO;AAAA,MAClC,IAAI,UAAU,iBAAiB,aAAa,UAAU,eAAe,WAAW;AAAA,QAC9E,OAAO,WAAW,UAAU,gBAAgB,UAAU,UAAU;AAAA,MAClE;AAAA,IACF;AAAA,IAGA,OAAO,aAAa,OAAO,KACzB,CAAC,WACC,OAAO,QAAQ,OAAO,WAAW,OAAO,gBAAgB,UAAU,OAAO,UAC7E;AAAA;AAAA,OAGI,wBAAuB,CAC3B,QACA,OACA,cACA,cAA8C,CAAC,GAC/C,SAI4B;AAAA,IAC5B,MAAM,UAA6B;AAAA,MACjC,IAAI,QAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA,aAAa,SAAS;AAAA,MACtB;AAAA,MACA,aAAa;AAAA,QACX,oBACE,YAAY,sBAAsB,KAAK,iBAAiB;AAAA,QAC1D,0BACE,YAAY,4BAA4B,KAAK,iBAAiB;AAAA,QAChE,YAAY,YAAY,cAAc,KAAK,iBAAiB;AAAA,QAC5D,gBAAgB,YAAY;AAAA,QAC5B,eAAe,YAAY;AAAA,QAC3B,cAAc,YAAY;AAAA,QAC1B,oBAAoB,YAAY;AAAA,MAClC;AAAA,MACA,SAAS,SAAS,WAAW;AAAA,MAC7B,WAAW,KAAK,IAAI;AAAA,MACpB,cAAc,KAAK,iBAAiB;AAAA,IACtC;AAAA,IAEA,MAAM,UAAU,4BAA4B,KAAK,OAAO;AAAA,IACxD,MAAM,QAAQ,KAAK,OAAO;AAAA,IAE1B,OAAO,KAAK,kDAAkD,QAAQ,WAAW,QAAQ;AAAA,IACzF,OAAO;AAAA;AAAA,OAGH,mBAAkB,CAAC,SAAuD;AAAA,IAC9E,QAAQ,cAAc,gBAAgB;AAAA,IAEtC,IAAI,aAAa,WAAW,GAAG;AAAA,MAC7B,OAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe,CAAC;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiB,aAAa,IAAI,CAAC,OAAO;AAAA,MAC9C,aAAa;AAAA,MACb,cAAc,EAAE;AAAA,IAClB,EAAE;AAAA,IAGF,MAAM,oBAAoB,eAAe,GAAG,aAAa;AAAA,IAGzD,MAAM,MAAM,IAAI;AAAA,IAChB,MAAM,iBAA6B,CAAC;AAAA,IAEpC,SAAS,YAAY,EAAG,YAAY,YAAY,YAAY,aAAa;AAAA,MACvE,MAAM,OAAO,QAAQ,KAAK,SAAS;AAAA,MACnC,MAAM,MAAM,aAAa,MAAM,iBAAiB;AAAA,MAGhD,IAAI,YAAY,iBAAiB,CAAC,YAAY,cAAc,SAAS,GAAG,GAAG;AAAA,QACzE;AAAA,MACF;AAAA,MAEA,MAAM,UAAU,cAAc,MAAM,iBAAiB;AAAA,MAGrD,MAAM,aAAa,KAAK,oBACtB,gBACA,KACA,SACA,YAAY,kBACd;AAAA,MAEA,WAAW,UAAU,YAAY;AAAA,QAE/B,MAAM,eAAe,YAAY;AAAA,QACjC,IAAI,eAAe,OAAO;AAAA,QAE1B,OAAO,eAAe,gBAAgB,OAAO,KAAK;AAAA,UAEhD,IAAI,cAAc,GAAG;AAAA,YACnB,MAAM,iBAAiB,gBAAgB,KAAK,iBAAiB;AAAA,YAC7D,IAAI,eAAe,iBAAiB,IAAI;AAAA,cAEtC,gBAAgB;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,UAEA,MAAM,YAAY,gBAAgB,SAAS,cAAc,iBAAiB;AAAA,UAC1E,MAAM,UAAU,gBAAgB,SAAS,eAAe,cAAc,iBAAiB;AAAA,UAEvF,eAAe,KAAK;AAAA,YAClB,OAAO,UAAU,YAAY;AAAA,YAC7B,KAAK,QAAQ,YAAY;AAAA,YACzB,UAAU;AAAA,UACZ,CAAC;AAAA,UAED,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,IAAI,eAAe,WAAW,GAAG;AAAA,MAE/B,MAAM,cAAc,KAAK,4BAA4B,cAAc;AAAA,MACnE,OAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe,CAAC;AAAA,QAChB,eAAe;AAAA,QACf,yBAAyB;AAAA,MAC3B;AAAA,IACF;AAAA,IAGA,MAAM,cAAc,eAAe,IAAI,CAAC,SAAS,KAAK,UAAU,MAAM,OAAO,CAAC;AAAA,IAC9E,YAAY,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAA,IAG5C,MAAM,gBAAgB,YAAY,MAAM,GAAG,CAAC;AAAA,IAE5C,OAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,IACF;AAAA;AAAA,EAGM,mBAAmB,CACzB,gBACA,KACA,SACA,aACuC;AAAA,IAEvC,MAAM,qBAAqB,eAAe,IAAI,GAAG,mBAAmB;AAAA,MAElE,MAAM,YAAY,aAAa,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO;AAAA,MACxE,IAAI,WAAW,aAAa;AAAA,QAC1B,OAAO,CAAC;AAAA,MACV;AAAA,MAEA,IAAI,WAAW,iBAAiB,aAAa,WAAW,eAAe,WAAW;AAAA,QAChF,OAAO,CAAC,EAAE,OAAO,UAAU,cAAc,KAAK,UAAU,WAAW,CAAC;AAAA,MACtE;AAAA,MAGA,OAAO,aAAa,OACjB,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,EAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,KAAK,EAAE,WAAW,EAAE;AAAA,KAC7D;AAAA,IAGD,IAAI,mBAAmB,KAAK,CAAC,YAAY,QAAQ,WAAW,CAAC,GAAG;AAAA,MAC9D,OAAO,CAAC;AAAA,IACV;AAAA,IAGA,IAAI,eAAe,mBAAmB;AAAA,IAGtC,SAAS,IAAI,EAAG,IAAI,mBAAmB,QAAQ,KAAK;AAAA,MAClD,MAAM,kBAAyD,CAAC;AAAA,MAEhE,WAAW,WAAW,cAAc;AAAA,QAClC,WAAW,WAAW,mBAAmB,IAAI;AAAA,UAC3C,MAAM,QAAQ,KAAK,IAAI,QAAQ,OAAO,QAAQ,KAAK;AAAA,UACnD,MAAM,MAAM,KAAK,IAAI,QAAQ,KAAK,QAAQ,GAAG;AAAA,UAE7C,IAAI,MAAM,SAAS,aAAa;AAAA,YAC9B,gBAAgB,KAAK,EAAE,OAAO,IAAI,CAAC;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA,MAEA,eAAe;AAAA,MACf,IAAI,aAAa,WAAW;AAAA,QAAG;AAAA,IACjC;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,2BAA2B,CACjC,gBACQ;AAAA,IACR,MAAM,cAAsB,CAAC;AAAA,IAE7B,SAAS,IAAI,EAAG,IAAI,eAAe,QAAQ,KAAK;AAAA,MAC9C,IAAI,oBAAoB;AAAA,MAExB,SAAS,IAAI,EAAG,IAAI,eAAe,QAAQ,KAAK;AAAA,QAC9C,IAAI,MAAM;AAAA,UAAG;AAAA,QAEb,MAAM,aAAa,KAAK,cACtB,eAAe,GAAG,cAClB,eAAe,GAAG,YACpB;AAAA,QAEA,IAAI,CAAC,YAAY;AAAA,UACf,oBAAoB;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,CAAC,mBAAmB;AAAA,QACtB,YAAY,KAAK,eAAe,GAAG,YAAY,QAAQ;AAAA,MACzD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,aAAa,CAAC,GAAiB,GAA0B;AAAA,IAC/D,WAAW,WAAW,EAAE,QAAQ;AAAA,MAC9B,WAAW,WAAW,EAAE,QAAQ;AAAA,QAC9B,IAAI,QAAQ,QAAQ,QAAQ;AAAA,UAAK;AAAA,QAEjC,MAAM,eAAe,KAAK,IAAI,QAAQ,cAAc,QAAQ,YAAY;AAAA,QACxE,MAAM,aAAa,KAAK,IAAI,QAAQ,YAAY,QAAQ,UAAU;AAAA,QAElE,IAAI,aAAa,gBAAgB,IAAI;AAAA,UACnC,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,SAAS,CAAC,MAAgB,SAA0C;AAAA,IAC1E,QAAQ,aAAa,YAAY;AAAA,IACjC,IAAI,QAAQ;AAAA,IACZ,MAAM,UAAoB,CAAC;AAAA,IAC3B,MAAM,WAAqB,CAAC;AAAA,IAE5B,MAAM,YAAY,IAAI,KAAK,KAAK,KAAK;AAAA,IACrC,MAAM,UAAU,gBAAgB,WAAW,KAAK,QAAQ;AAAA,IACxD,MAAM,MAAM,aAAa,WAAW,KAAK,QAAQ;AAAA,IAGjD,MAAM,YAAY,UAAU,KAAK,KAAK,YAAY,UAAU,KAAK,KAAK,cAAc;AAAA,IAEpF,IAAI,YAAY,gBAAgB,SAAS,SAAS,GAAG;AAAA,MACnD,SAAS;AAAA,MACT,QAAQ,KAAK,mBAAmB,YAAY;AAAA,IAC9C;AAAA,IAGA,IAAI,YAAY,eAAe,SAAS,GAAG,GAAG;AAAA,MAC5C,SAAS;AAAA,MACT,QAAQ,KAAK,kBAAkB,MAAM;AAAA,IACvC;AAAA,IAGA,MAAM,eAAe,UAAU,QAAQ,IAAI,KAAK,IAAI,MAAM,OAAO,KAAK,KAAK;AAAA,IAE3E,IAAI,YAAY,UAAU;AAAA,MACxB,SAAS,cAAc;AAAA,MACvB,IAAI,cAAc,GAAG;AAAA,QACnB,QAAQ,KAAK,uBAAuB;AAAA,MACtC;AAAA,IACF,EAAO,SAAI,YAAY,QAAQ;AAAA,MAC7B,SAAS,cAAc;AAAA,IACzB;AAAA,IAGA,IAAI,UAAU,IAAI,IAAI;AAAA,MACpB,SAAS;AAAA,MACT,SAAS,KAAK,eAAe;AAAA,IAC/B,EAAO,SAAI,UAAU,KAAK,IAAI;AAAA,MAC5B,SAAS;AAAA,MACT,SAAS,KAAK,cAAc;AAAA,IAC9B;AAAA,IAGA,IAAI,WAAW,KAAK,MAAM,WAAW,KAAK,IAAI;AAAA,MAC5C,SAAS;AAAA,MACT,QAAQ,KAAK,yBAAyB;AAAA,IACxC;AAAA,IAEA,OAAO;AAAA,MACL;AAAA,MACA,OAAO,KAAK,IAAI,GAAG,KAAK;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,cAAa,CACjB,SACA,MACA,UASkB;AAAA,IAClB,MAAM,eAAqC,QAAQ,aAAa,IAAI,CAAC,GAAG,WAAW;AAAA,MACjF,UAAU,EAAE;AAAA,MACZ,MAAM,EAAE;AAAA,MACR,OAAO,EAAE;AAAA,MACT,OAAO,EAAE;AAAA,MACT,MAAM,UAAU,IAAI,cAAc;AAAA,MAClC,WAAW;AAAA,IACb,EAAE;AAAA,IAEF,MAAM,UAAmB;AAAA,MACvB,IAAI,QAAO;AAAA,MACX,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf,aAAa,QAAQ;AAAA,MACrB;AAAA,MACA,UAAU;AAAA,QACR,MAAM,SAAS;AAAA,QACf,MAAM,SAAS;AAAA,QACf,SAAS,SAAS;AAAA,QAClB,MAAM,SAAS;AAAA,QACf,UAAU,SAAS;AAAA,QACnB,aAAa,SAAS;AAAA,QACtB,OAAO,SAAS;AAAA,MAClB;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,WAAW,KAAK,IAAI;AAAA,MACpB,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,IAEA,MAAM,UAAU,kBAAkB,KAAK,OAAO;AAAA,IAC9C,MAAM,QAAQ,KAAK,OAAO;AAAA,IAE1B,OAAO,KAAK,uCAAuC,QAAQ,WAAW,QAAQ,QAAQ;AAAA,IAGtF,IAAI,KAAK,iBAAiB,uBAAuB;AAAA,MAC/C,MAAM,KAAK,kBAAkB,OAAO;AAAA,IACtC;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,WAAU,CAAC,WAA4C;AAAA,IAC3D,OAAO,kBAAkB,KAAK,OAAO,EAAE,IAAI,SAAS;AAAA;AAAA,OAGhD,mBAAkB,CAAC,QAAkC;AAAA,IACzD,OAAO,kBAAkB,KAAK,OAAO,EAAE,UAAU,MAAM;AAAA;AAAA,OAGnD,oBAAmB,CAAC,UAAoC;AAAA,IAC5D,OAAO,kBAAkB,KAAK,OAAO,EAAE,0BAA0B,QAAQ;AAAA;AAAA,OAGrE,mBAAkB,CAAC,WAAmB,UAAkC;AAAA,IAC5E,MAAM,UAAU,MAAM,KAAK,WAAW,SAAS;AAAA,IAC/C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,MAAM,sBAAsB,WAAW;AAAA,IACnD;AAAA,IAEA,MAAM,cAAc,QAAQ,aAAa,KAAK,CAAC,MAAM,EAAE,aAAa,QAAQ;AAAA,IAC5E,IAAI,CAAC,aAAa;AAAA,MAChB,MAAM,IAAI,MAAM,qCAAqC,UAAU;AAAA,IACjE;AAAA,IAEA,YAAY,YAAY;AAAA,IACxB,YAAY,cAAc,KAAK,IAAI;AAAA,IACnC,QAAQ,YAAY,KAAK,IAAI;AAAA,IAG7B,MAAM,eAAe,QAAQ,aAC1B,OAAO,CAAC,MAAM,EAAE,SAAS,UAAU,EACnC,MAAM,CAAC,MAAM,EAAE,SAAS;AAAA,IAE3B,IAAI,gBAAgB,QAAQ,WAAW,YAAY;AAAA,MACjD,QAAQ,SAAS;AAAA,MACjB,OAAO,KAAK,+BAA+B,yCAAyC;AAAA,MAGpF,IAAI,KAAK,iBAAiB,yBAAyB;AAAA,QACjD,MAAM,KAAK,oBAAoB,OAAO;AAAA,QACtC,QAAQ,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,MAAM,UAAU,kBAAkB,KAAK,OAAO;AAAA,IAC9C,MAAM,QAAQ,KAAK,OAAO;AAAA,IAE1B,OAAO;AAAA;AAAA,OAGH,mBAAkB,CAAC,WAAmB,UAAgB,QAAmC;AAAA,IAC7F,MAAM,UAAU,MAAM,KAAK,WAAW,SAAS;AAAA,IAC/C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,MAAM,sBAAsB,WAAW;AAAA,IACnD;AAAA,IAEA,MAAM,cAAc,QAAQ,aAAa,KAAK,CAAC,MAAM,EAAE,aAAa,QAAQ;AAAA,IAC5E,IAAI,CAAC,aAAa;AAAA,MAChB,MAAM,IAAI,MAAM,qCAAqC,UAAU;AAAA,IACjE;AAAA,IAEA,YAAY,YAAY;AAAA,IACxB,YAAY,gBAAgB;AAAA,IAC5B,QAAQ,YAAY,KAAK,IAAI;AAAA,IAG7B,IAAI,YAAY,SAAS,YAAY;AAAA,MACnC,QAAQ,SAAS;AAAA,MACjB,QAAQ,qBAAqB,GAAG,YAAY,kBAAkB,UAAU;AAAA,MACxE,OAAO,KAAK,+BAA+B,8BAA8B;AAAA,IAC3E;AAAA,IAEA,MAAM,UAAU,kBAAkB,KAAK,OAAO;AAAA,IAC9C,MAAM,QAAQ,KAAK,OAAO;AAAA,IAE1B,OAAO;AAAA;AAAA,OAGH,cAAa,CAAC,WAAmB,QAAmC;AAAA,IACxE,MAAM,UAAU,MAAM,KAAK,WAAW,SAAS;AAAA,IAC/C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,MAAM,sBAAsB,WAAW;AAAA,IACnD;AAAA,IAEA,QAAQ,SAAS;AAAA,IACjB,QAAQ,qBAAqB;AAAA,IAC7B,QAAQ,YAAY,KAAK,IAAI;AAAA,IAG7B,MAAM,KAAK,gBAAgB,SAAS;AAAA,IAEpC,MAAM,UAAU,kBAAkB,KAAK,OAAO;AAAA,IAC9C,MAAM,QAAQ,KAAK,OAAO;AAAA,IAE1B,OAAO,KAAK,+BAA+B,qBAAqB;AAAA,IAEhE,OAAO;AAAA;AAAA,OAGH,oBAAmB,CAAC,WAAmB,QAAyC;AAAA,IACpF,MAAM,UAAU,MAAM,KAAK,WAAW,SAAS;AAAA,IAC/C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,MAAM,sBAAsB,WAAW;AAAA,IACnD;AAAA,IAEA,QAAQ,SAAS;AAAA,IACjB,QAAQ,YAAY,KAAK,IAAI;AAAA,IAE7B,MAAM,UAAU,kBAAkB,KAAK,OAAO;AAAA,IAC9C,MAAM,QAAQ,KAAK,OAAO;AAAA,IAE1B,OAAO;AAAA;AAAA,OAGH,kBAAiB,CAAC,WAAmB,SAAmB,QAAmC;AAAA,IAC/F,MAAM,UAAU,MAAM,KAAK,WAAW,SAAS;AAAA,IAC/C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,MAAM,sBAAsB,WAAW;AAAA,IACnD;AAAA,IAGA,MAAM,KAAK,gBAAgB,SAAS;AAAA,IAEpC,QAAQ,OAAO;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,QAAQ,mBAAmB;AAAA,IAC3B,QAAQ,qBAAqB;AAAA,IAC7B,QAAQ,YAAY,KAAK,IAAI;AAAA,IAG7B,WAAW,eAAe,QAAQ,cAAc;AAAA,MAC9C,YAAY,YAAY;AAAA,MACxB,YAAY,cAAc;AAAA,IAC5B;AAAA,IAEA,MAAM,UAAU,kBAAkB,KAAK,OAAO;AAAA,IAC9C,MAAM,QAAQ,KAAK,OAAO;AAAA,IAG1B,IAAI,KAAK,iBAAiB,uBAAuB;AAAA,MAC/C,MAAM,KAAK,kBAAkB,OAAO;AAAA,IACtC;AAAA,IAEA,OAAO,KACL,+BAA+B,iCAAiC,QAAQ,kBAC1E;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,sBAAsB,CACpB,SACA,gBACA,eACgB;AAAA,IAChB,MAAM,YAAY,QAAQ,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW;AAAA,IAEzE,MAAM,QAAuB;AAAA,MAC3B,KAAK,QAAQ;AAAA,MACb,OAAO,QAAQ;AAAA,MACf,aAAa,QAAQ;AAAA,MACrB,OAAO,QAAQ,KAAK;AAAA,MACpB,KAAK,QAAQ,KAAK;AAAA,MAClB,UAAU,QAAQ,KAAK;AAAA,MACvB,UACE,QAAQ,SAAS,SAAS,cACtB,GAAG,QAAQ,SAAS,SAAS,QAAQ,SAAS,YAC9C,QAAQ,SAAS;AAAA,MACvB,WAAW,WAAW,QAAQ,EAAE,MAAM,UAAU,MAAM,OAAO,UAAU,MAAM,IAAI;AAAA,MACjF,WAAW,QAAQ,aAChB,OAAO,CAAC,MAAM,EAAE,KAAK,EACrB,IAAI,CAAC,OAAO;AAAA,QACX,MAAM,EAAE;AAAA,QACR,OAAO,EAAE;AAAA,QACT,MAAM,EAAE;AAAA,MACV,EAAE;AAAA,MACJ,KAAK,QAAQ,SAAS;AAAA,MACtB,iBAAiB,KAAK,iBAAiB;AAAA,IACzC;AAAA,IAEA,MAAM,MAAM,YAAY,KAAK;AAAA,IAE7B,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAII,oBAAmB,CAAC,SAA6C;AAAA,IACrE,MAAM,UAA4B,CAAC;AAAA,IAEnC,WAAW,eAAe,QAAQ,cAAc;AAAA,MAC9C,IAAI,CAAC,YAAY,OAAO;AAAA,QACtB,OAAO,KACL,mCAAmC,YAAY,8CACjD;AAAA,QACA;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,KAAK,uBAAuB,SAAS,YAAY,OAAO,YAAY,IAAI;AAAA,MACvF,QAAQ,KAAK,MAAM;AAAA,MAEnB,MAAM,eAAe,KAAK,QAAQ,WAAW,OAAO;AAAA,MACpD,MAAM,kBAAkB;AAAA,MAQxB,IAAI,gBAAgB,OAAO,gBAAgB,cAAc,YAAY;AAAA,QACnE,IAAI;AAAA,UACF,MAAM,gBAAgB,UACpB,YAAY,OACZ,mBAAmB,QAAQ,SAC3B,KAAK,kBAAkB,SAAS,YAAY,IAAI,GAChD;AAAA,YACE;AAAA,cACE,UAAU;AAAA,cACV,SAAS,OAAO;AAAA,cAChB,aAAa;AAAA,YACf;AAAA,UACF,CACF;AAAA,UACA,OAAO,KACL,+CAA+C,YAAY,qBAAqB,QAAQ,IAC1F;AAAA,UACA,OAAO,KAAK;AAAA,UACZ,OAAO,MACL,+CAA+C,YAAY,qBAAqB,QAAQ,OAAO,KACjG;AAAA;AAAA,MAEJ,EAAO;AAAA,QAEL,OAAO,KACL,wEAAwE,YAAY,mCAClF,kDACJ;AAAA;AAAA,IAEJ;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,iBAAiB,CAAC,SAAkB,eAA+B;AAAA,IACzE,MAAM,YAAY,IAAI,KAAK,QAAQ,KAAK,KAAK;AAAA,IAC7C,MAAM,UAAU,IAAI,KAAK,QAAQ,KAAK,GAAG;AAAA,IAEzC,MAAM,gBAAgB,IAAI,KAAK,eAAe,SAAS;AAAA,MACrD,UAAU,QAAQ,KAAK;AAAA,MACvB,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,IACP,CAAC;AAAA,IAED,MAAM,gBAAgB,IAAI,KAAK,eAAe,SAAS;AAAA,MACrD,UAAU,QAAQ,KAAK;AAAA,MACvB,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,cAAc;AAAA,IAChB,CAAC;AAAA,IAED,IAAI,eAAe;AAAA,IACnB,IAAI,QAAQ,SAAS,SAAS,aAAa,QAAQ,SAAS,UAAU;AAAA,MACpE,eAAe,gBAAgB,QAAQ,SAAS;AAAA,IAClD,EAAO,SAAI,QAAQ,SAAS,SAAS,aAAa;AAAA,MAChD,eAAe,aAAa,QAAQ,SAAS,SAAS,QAAQ,SAAS;AAAA,IACzE,EAAO,SAAI,QAAQ,SAAS,SAAS,WAAW,QAAQ,SAAS,aAAa;AAAA,MAC5E,eAAe,SAAS,QAAQ,SAAS;AAAA,IAC3C;AAAA,IAEA,OAAO,MAAM;AAAA;AAAA,qBAEI,QAAQ;AAAA;AAAA,QAErB,cAAc,OAAO,SAAS;AAAA,QAC9B,cAAc,OAAO,SAAS,OAAO,cAAc,OAAO,OAAO;AAAA,EACvE;AAAA;AAAA,EAEA,QAAQ,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOjB,kBAAiB,CAAC,SAAuC;AAAA,IAC7D,MAAM,YAAwB,CAAC;AAAA,IAC/B,MAAM,cAAc,IAAI,KAAK,QAAQ,KAAK,KAAK,EAAE,QAAQ;AAAA,IAEzD,WAAW,iBAAiB,KAAK,iBAAiB,wBAAwB;AAAA,MACxE,MAAM,eAAe,IAAI,KAAK,cAAc,gBAAgB,KAAK,IAAI;AAAA,MAGrE,IAAI,aAAa,QAAQ,IAAI,KAAK,IAAI;AAAA,QAAG;AAAA,MAEzC,WAAW,eAAe,QAAQ,cAAc;AAAA,QAE9C,MAAM,OAAqB,YAAY,QAAQ,QAAQ,YAAY,QAAQ,UAAU;AAAA,QAErF,MAAM,YACJ,iBAAiB,OACb,GAAG,KAAK,MAAM,gBAAgB,IAAI,aAClC,iBAAiB,KACf,GAAG,KAAK,MAAM,gBAAgB,EAAE,cAChC,GAAG;AAAA,QAEX,MAAM,WAAqB;AAAA,UACzB,IAAI,QAAO;AAAA,UACX,WAAW,QAAQ;AAAA,UACnB,eAAe,YAAY;AAAA,UAC3B,cAAc,aAAa,YAAY;AAAA,UACvC;AAAA,UACA,SAAS,cAAc,QAAQ,gBAAgB;AAAA,UAC/C,QAAQ;AAAA,UACR,WAAW,KAAK,IAAI;AAAA,QACtB;AAAA,QAEA,UAAU,KAAK,QAAQ;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,MAAM,UAAU,mBAAmB,KAAK,OAAO;AAAA,IAC/C,WAAW,YAAY,WAAW;AAAA,MAChC,MAAM,QAAQ,KAAK,QAAQ;AAAA,IAC7B;AAAA,IAEA,OAAO,MACL,iCAAiC,UAAU,gCAAgC,QAAQ,IACrF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,gBAAe,GAAwB;AAAA,IAC3C,OAAO,mBAAmB,KAAK,OAAO,EAAE,OAAO;AAAA;AAAA,OAG3C,iBAAgB,CAAC,YAAmC;AAAA,IACxD,MAAM,UAAU,mBAAmB,KAAK,OAAO;AAAA,IAC/C,MAAM,WAAW,MAAM,QAAQ,IAAI,UAAU;AAAA,IAC7C,IAAI,CAAC;AAAA,MAAU;AAAA,IAEf,SAAS,SAAS;AAAA,IAClB,SAAS,SAAS,KAAK,IAAI;AAAA,IAC3B,MAAM,QAAQ,KAAK,QAAQ;AAAA;AAAA,OAGvB,gBAAe,CAAC,WAAkC;AAAA,IACtD,MAAM,UAAU,mBAAmB,KAAK,OAAO;AAAA,IAC/C,MAAM,YAAY,MAAM,QAAQ,aAAa,SAAS;AAAA,IAEtD,WAAW,YAAY,WAAW;AAAA,MAChC,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,SAAS,SAAS;AAAA,QAClB,MAAM,QAAQ,KAAK,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA;AAAA,EAGF,UAAU,CAAC,MAAgB,SAAiB,SAAiB;AAAA,IAC3D,MAAM,QAAQ,IAAI,KAAK,KAAK,KAAK;AAAA,IACjC,MAAM,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,IAE7B,MAAM,gBAAgB,IAAI,KAAK,eAAe,QAAQ;AAAA,MACpD,UAAU,KAAK;AAAA,MACf,SAAS;AAAA,MACT,OAAO;AAAA,MACP,KAAK;AAAA,IACP,CAAC;AAAA,IAED,MAAM,gBAAgB,IAAI,KAAK,eAAe,QAAQ;AAAA,MACpD,UAAU,KAAK;AAAA,MACf,MAAM;AAAA,MACN,QAAQ;AAAA,IACV,CAAC;AAAA,IAED,OAAO,GAAG,cAAc,OAAO,KAAK,MAAM,cAAc,OAAO,KAAK,OAAO,cAAc,OAAO,GAAG;AAAA;AAAA,EAGrG,SAAS,GAA4B;AAAA,IACnC,OAAO,KAAK,KAAK,iBAAiB;AAAA;AAEtC;;;AIx4BO,IAAM,mBAA2B;AAAA,EACtC,MAAM;AAAA,EACN,aAAa;AAAA,EAGb,UAAU,CAAC,iBAAiB;AAAA,EAG5B,SAAS,CAAC,uBAAuB,sBAAsB,qBAAqB;AAAA,EAG5E,WAAW,CAAC,yBAAyB;AACvC;AAEA,IAAe;",
|
|
16
|
-
"debugId": "
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "F3BE18F973373E0264756E2164756E21",
|
|
17
17
|
"names": []
|
|
18
18
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-scheduling",
|
|
3
3
|
"description": "Scheduling and calendar coordination plugin for ElizaOS agents",
|
|
4
|
-
"version": "2.0.0-alpha.
|
|
4
|
+
"version": "2.0.0-alpha.9",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"scripts": {
|
|
49
49
|
"dev": "bun --hot build.ts",
|
|
50
|
-
"test": "
|
|
50
|
+
"test": "vitest run src/__tests__/ --config vitest.config.ts --passWithNoTests",
|
|
51
51
|
"lint": "echo \"Lint skipped for release\"",
|
|
52
52
|
"typecheck": "echo \"Typecheck skipped for release\"",
|
|
53
53
|
"clean": "rm -rf dist .turbo",
|