{"version":3,"sources":["webpack:///../../../../src/components/VCalendar/mixins/times.ts","webpack:///../../../../src/components/VCalendar/modes/common.ts","webpack:///../../../../src/components/VCalendar/modes/stack.ts","webpack:///../../../../src/components/VCalendar/modes/column.ts","webpack:///../../../../src/components/VCalendar/modes/index.ts","webpack:///../../../../src/components/VCalendar/util/props.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-base.ts","webpack:///../../../../src/components/VCalendar/util/events.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-with-events.ts","webpack:///../../../src/components/VCalendar/VCalendarWeekly.ts","webpack:///../../../src/components/VCalendar/VCalendarMonthly.ts","webpack:///../../../../src/components/VCalendar/mixins/calendar-with-intervals.ts","webpack:///../../../src/components/VCalendar/VCalendarDaily.ts","webpack:///../../../../src/components/VCalendar/util/parser.ts","webpack:///../../../src/components/VCalendar/VCalendarCategory.ts","webpack:///../../../src/components/VCalendar/VCalendar.ts","webpack:///./src/components/shared/base/BaseCalendar.vue","webpack:///src/components/shared/base/BaseCalendar.vue","webpack:///./src/components/shared/base/BaseCalendar.vue?bb57","webpack:///./src/components/shared/base/BaseCalendar.vue?463f","webpack:///../../../src/mixins/loadable/index.ts","webpack:///../../../src/components/VProgressLinear/index.ts","webpack:///../../../src/components/VTooltip/VTooltip.ts","webpack:///../../src/util/dateTimeUtils.ts","webpack:///../../../src/components/VProgressLinear/VProgressLinear.ts","webpack:///../../../src/components/VCheckbox/VSimpleCheckbox.ts","webpack:///../../../src/components/VDivider/VDivider.ts","webpack:///../../../src/components/VList/VListItem.ts","webpack:///../../../src/mixins/localable/index.ts","webpack:///../../../../src/components/VCalendar/util/timestamp.ts"],"names":["Vue","extend","name","props","now","type","String","validator","validateTimestamp","data","times","parseTimestamp","today","computed","parsedNow","this","watch","created","updateTimes","setPresent","methods","present","past","future","getNow","updateDay","updateTime","parseDate","Date","target","date","year","month","day","weekday","time","hour","minute","MILLIS_IN_DAY","getVisuals","events","minStart","visuals","map","event","columnCount","column","left","width","sort","a","b","Math","max","startTimestampIdentifier","endTimestampIdentifier","hasOverlap","s0","e0","s1","e1","exclude","setColumnCount","groups","forEach","group","groupVisual","length","getRange","getDayRange","startIdentifier","endIdentifier","getNormalizedRange","dayStart","min","getOpenGroup","start","end","timed","i","intersected","k","groupStart","groupEnd","getOverlapGroupHandler","firstWeekday","handler","reset","dayEvents","getTimestampIdentifier","visual","targetGroup","push","FULL_WIDTH","DEFAULT_OFFSET","WIDTH_MULTIPLIER","stack","overlapThreshold","getGroups","nodes","child","getNode","index","getNextIndex","parent","getParent","sibling","addTime","children","getOverlappingRange","grand","grandNext","calculateBounds","node","columns","getMaxChildIndex","spaceLeft","spaceWidth","offset","columnWidthMultiplier","getColumnWidthMultiplier","columnOffset","columnWidth","hasFullWidth","maxColumn","minColumn","reduce","c","getOverlappingIndices","indices","other","indexMin","indexMax","returnFirstColumn","overlapping","first","n","filter","added","childMax","identifier","minutes","removeMinutes","totalMinutes","addHours","floor","addMinutes","CalendarEventOverlapModes","base","Number","validate","default","weekdays","Array","validateWeekdays","hideHeader","Boolean","shortWeekdays","weekdayFormat","Function","dayFormat","intervals","maxDays","shortIntervals","intervalHeight","validateNumber","intervalWidth","intervalMinutes","firstInterval","firstTime","Object","validateTime","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","weeks","localeFirstDayOfYear","minWeeks","shortMonths","showMonthOnFirst","showWeek","monthFormat","calendar","value","category","categories","categoryText","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","x","isFinite","parseInt","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","mode","eventMore","eventMoreText","eventRipple","eventMarginBottom","input","split","isArray","ints","DAYS_IN_WEEK","visited","wrapped","d","mixins","Colorable","Localable","Mouse","Themeable","Times","directives","Resize","parsedWeekdays","weekdaySkips","getWeekdaySkips","weekdaySkipsReverse","reversed","slice","reverse","parsedStart","parsedEnd","days","createDayList","dayFormatter","options","timeZone","createNativeLocaleFormatter","currentLocale","_tms","_short","weekdayFormatter","longOptions","shortOptions","short","getRelativeClasses","timestamp","outside","getStartOfWeek","getEndOfWeek","getFormatter","locale","parseEvent","startProperty","endProperty","startInput","endInput","startParsed","endParsed","isTimedless","updateHasTime","getDayIdentifier","endOffset","hasTime","allDay","isEventOn","dayIdentifier","isEventHiddenOn","isEventStart","isEventOverlapping","WIDTH_FULL","WIDTH_START","MINUTES_IN_DAY","CalendarBase","ripple","noEvents","parsedEvents","parsedEventOverlapThreshold","eventTimedFunction","eventCategoryFunction","eventTextColorFunction","eventNameFunction","timedEvent","eventModeFunction","eventWeekdays","categoryMode","eventColorFunction","e","color","formatTime","withTime","ampm","formatter","undefined","updateEventVisibility","eventsMap","getEventsMap","more","parentBounds","getBoundingClientRect","last","eventsSorted","bottom","hidden","hide","style","display","innerHTML","$vuetify","lang","t","elements","$refs","el","getAttribute","parentElement","genDayEvent","week","weekdayIdentifier","scope","eventParsed","genEvent","staticClass","class","height","attrs","key","ref","refInFor","genTimedEvent","timeDelta","top","timeToY","scopeInput","slot","$scopedSlots","text","background","overlapsNoon","singline","diffMinutes","timeSummary","eventSummary","delimiter","$createElement","setTextColor","setBackgroundColor","on","getDefaultMouseEventHandlers","nativeEvent","_a","genName","genPlaceholder","genMore","getVisibleEvents","isEventForCategory","categoryName","getEventsForDay","getEventsForDayAll","getEventsForDayTimed","getScopedSlots","isNode","getSlotChildren","getter","mapper","mapped","slots","slotDay","slotDayHeader","slotDayBody","concat","classes","themeClasses","parsedMinWeeks","minDays","MAX_SAFE_INTEGER","todayWeek","monthFormatter","isOutside","genHead","role","genHeadDays","header","genHeadDay","unshift","genWeeks","weekDays","genWeek","getWeekNumber","weekNumber","weekNodes","genDay","genWeekNumber","determineDay","genDayLabel","getSlot","genDayLabelButton","hasMonth","VBtn","fab","depressed","small","getMouseEventHandlers","stop","prevent","result","genDayMonth","render","h","dragstart","preventDefault","VCalendarWeekly","getStartOfMonth","getEndOfMonth","parsedFirstInterval","parsedIntervalMinutes","parsedIntervalCount","parsedIntervalHeight","parseFloat","parsedFirstTime","parseTime","firstMinute","bodyHeight","count","createIntervalList","intervalFormatter","shortHourOptions","tms","showIntervalLabelDefault","interval","isFirst","intervalStyleDefault","_interval","getTimestampAtEvent","copyTimestamp","bounds","currentTarget","baseMinutes","touchEvent","mouseEvent","touches","changedTouches","clientY","addIntervals","updateMinutes","getSlotScope","minutesToPixels","scrollToTime","y","pane","scrollArea","scrollTop","clamp","gap","CalendarWithIntervals","scrollPush","mounted","init","$nextTick","onResize","getScrollPush","area","offsetWidth","marginRight","genHeadIntervals","convertToUnit","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","genBody","genScrollArea","genPane","genDayContainer","genBodyIntervals","genDays","genDayIntervals","genDayBody","genDayInterval","styler","genIntervalLabels","genIntervalLabel","shower","show","label","modifiers","quiet","parsedCategoryText","getParsedCategories","VCalendarDaily","parsedCategories","genDayHeaderCategory","getCategoryScope","cat","headerTitle","genDayHeaderCategoryTitle","j","fill","v","categoryIndex","genDayBodyCategory","CalendarWithEvents","lastStart","lastEnd","parsedValue","parsedCategoryDays","renderProps","around","component","VCalendarMonthly","relativeDays","nextDay","updateFormatted","VCalendarCategory","getCategoryList","Error","title","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","checkChange","updated","window","requestAnimationFrame","$emit","move","amount","moved","forward","mover","prevDay","limit","DAYS_IN_MONTH_MAX","DAY_MIN","updateWeekday","updateRelative","timestampToDate","getTime","next","prev","$children","required","categoryMap","categoryLength","ev","hasOwnProperty","$props","$listeners","click:date","scopedSlots","_c","model","callback","$$v","expression","_vm","staticRenderFns","components","BaseContextMenu","menuItemSettingsMixin","content","contextMenuItems","iconLeft","iconChevronLeft","iconRight","iconChevronRight","types","modes","contextMenu","contextMenuX","contextMenuY","rightClickedEvent","_this$content","viewDay","_event$date","_event$day","performClickAction","eventNames","onEventClicked","id","actionLeft","actionRight","getParsedDate","toLocaleString","showContextMenu","onRightClickedEvent","menu","open","performAction","payload","action","calendarContextAction","calendarType","onEventRightClicked","deep","immediate","loading","loaderHeight","genProgress","VProgressLinear","absolute","indeterminate","Delayable","Dependent","Menuable","closeDelay","disabled","openDelay","openOnHover","openOnFocus","tag","transition","calculatedMinWidth","closeDependents","calculatedLeft","activator","dimensions","unknown","right","activatorLeft","attach","offsetLeft","nudgeLeft","nudgeRight","calcXOverflow","calculatedTop","activatorTop","offsetTop","nudgeTop","nudgeBottom","pageYOffset","calcYOverflow","computedTransition","isActive","offsetY","offsetX","styles","maxWidth","minWidth","zIndex","activeZIndex","beforeMount","callActivate","getSlotType","consoleError","activate","updateDimensions","startTransition","deactivate","runDelay","genActivatorListeners","listeners","Activatable","call","focus","getActivator","blur","keydown","keyCode","keyCodes","esc","genActivatorAttributes","genTransition","genContent","contentClass","menuable__content__active","activatorFixed","getScopeIdAttrs","isContentActive","getContentSlot","showLazyContent","genActivator","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","firstDayOfWeek","firstDayOfYear","firstWeekDayInFirstWeek","firstWeekDayOfYear","getUTCDay","dayOfYear","isLeapYear","weeksInYear","weekOffset","weekOffsetNext","daysInYear","ceil","baseMixins","PositionableFactory","Proxyable","intersect","active","backgroundColor","backgroundOpacity","bufferValue","query","rounded","stream","striped","internalLazyValue","isVisible","__cachedBackground","backgroundStyle","__cachedBar","__cachedBarType","__cachedIndeterminate","__cachedDeterminate","__cachedBuffer","normalizedValue","genProgressBar","__cachedStream","normalizedBuffer","opacity","isReversed","fixed","reactive","VFadeTransition","VSlideXTransition","rtl","normalize","change","genListeners","click","onClick","$el","internalValue","onObserve","entries","observer","isIntersecting","functional","Ripple","indeterminateIcon","onIcon","offIcon","icon","VIcon","dark","light","def","center","mergeData","stopPropagation","wrapInArray","f","inset","vertical","orientation","$attrs","Routable","GroupableFactory","ToggleableFactory","inject","isInGroup","isInList","isInMenu","isInNav","inheritAttrs","activeClass","listItemGroup","dense","inactive","link","selectable","threeLine","twoLine","proxyClass","isClickable","removed","detail","to","toggle","genAttrs","tabindex","_uid","inputValue","generateRouteLink","enter","nativeOn","current","PARSE_REGEX","PARSE_TIME","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","DAYS_IN_MONTH_MIN","MONTH_MAX","MONTH_MIN","MINUTES_IN_HOUR","MINUTE_MAX","HOUR_MAX","OFFSET_YEAR","OFFSET_MONTH","OFFSET_HOUR","OFFSET_TIME","findWeekday","daysInMonth","exec","parts","hasDay","getFullYear","getMonth","getDate","getDay","getHours","getMinutes","getTimeIdentifier","getWeekday","_","m","C","Y","padNumber","padded","str","M","D","skips","filled","skip","currentIdentifier","stopped","mins","int","getOptions","emptyFormatter","_t","_s","Intl","DateTimeFormat","intlFormatter","format"],"mappings":"mRASeA,SAAIC,OAAO,CACxBC,KAAM,QAENC,MAAO,CACLC,IAAK,CACHC,KAAMC,OACNC,UAAWC,SAIfC,KAAMA,KAAA,CACJC,MAAO,CACLN,IAAKO,eAAe,oBAAoB,GACxCC,MAAOD,eAAe,cAAc,MAIxCE,SAAU,CACRC,YACE,OAAOC,KAAKX,IAAMO,eAAeI,KAAKX,KAAK,GAAQ,OAIvDY,MAAO,CACLF,UAAW,eAGbG,UACEF,KAAKG,cACLH,KAAKI,cAGPC,QAAS,CACPD,aACEJ,KAAKL,MAAMN,IAAIiB,QAAUN,KAAKL,MAAME,MAAMS,SAAU,EACpDN,KAAKL,MAAMN,IAAIkB,KAAOP,KAAKL,MAAME,MAAMU,MAAO,EAC9CP,KAAKL,MAAMN,IAAImB,OAASR,KAAKL,MAAME,MAAMW,QAAS,GAEpDL,cACE,MAAMd,EAAyBW,KAAKD,WAAaC,KAAKS,SACtDT,KAAKU,UAAUrB,EAAKW,KAAKL,MAAMN,KAC/BW,KAAKW,WAAWtB,EAAKW,KAAKL,MAAMN,KAChCW,KAAKU,UAAUrB,EAAKW,KAAKL,MAAME,QAEjCY,SACE,OAAOG,eAAU,IAAIC,OAEvBH,UAAWrB,EAAwByB,GAC7BzB,EAAI0B,OAASD,EAAOC,OACtBD,EAAOE,KAAO3B,EAAI2B,KAClBF,EAAOG,MAAQ5B,EAAI4B,MACnBH,EAAOI,IAAM7B,EAAI6B,IACjBJ,EAAOK,QAAU9B,EAAI8B,QACrBL,EAAOC,KAAO1B,EAAI0B,OAGtBJ,WAAYtB,EAAwByB,GAC9BzB,EAAI+B,OAASN,EAAOM,OACtBN,EAAOO,KAAOhC,EAAIgC,KAClBP,EAAOQ,OAASjC,EAAIiC,OACpBR,EAAOM,KAAO/B,EAAI+B,U,YClE1B,MAAMG,EAAgB,MAIhB,SAAUC,EAAYC,EAA+BC,EAAW,GACpE,MAAMC,EAAUF,EAAOG,IAAIC,IAAS,CAClCA,QACAC,YAAa,EACbC,OAAQ,EACRC,KAAM,EACNC,MAAO,OAQT,OALAN,EAAQO,KAAK,CAACC,EAAGC,IACPC,KAAKC,IAAIZ,EAAUS,EAAEN,MAAMU,0BAA4BF,KAAKC,IAAIZ,EAAUU,EAAEP,MAAMU,2BAClFH,EAAEP,MAAMW,uBAAyBL,EAAEN,MAAMW,wBAG5Cb,EASH,SAAUc,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,GAAU,GACpF,OAAOA,IAAYJ,GAAMG,GAAMF,GAAMC,KAAQF,EAAKG,GAAMF,EAAKC,GAGzD,SAAUG,EAAgBC,GAC9BA,EAAOC,QAAQC,IACbA,EAAMvB,QAAQsB,QAAQE,IACpBA,EAAYrB,YAAckB,EAAOI,WAKjC,SAAUC,EAAUxB,GACxB,MAAO,CAACA,EAAMU,yBAA0BV,EAAMW,wBAG1C,SAAUc,EAAazB,GAC3B,MAAO,CAACA,EAAM0B,gBAAiB1B,EAAM2B,eAGjC,SAAUC,EAAoB5B,EAA4B6B,GAC9D,MAAO,CAACrB,KAAKC,IAAIoB,EAAU7B,EAAMU,0BAA2BF,KAAKsB,IAAID,EAAWnC,EAAeM,EAAMW,yBAGjG,SAAUoB,EAAcZ,EAAuBa,EAAeC,EAAaC,GAC/E,IAAK,IAAIC,EAAI,EAAGA,EAAIhB,EAAOI,OAAQY,IAAK,CACtC,MAAMd,EAAQF,EAAOgB,GACrB,IAAIC,GAAc,EAElB,GAAIxB,EAAWoB,EAAOC,EAAKZ,EAAMW,MAAOX,EAAMY,IAAKC,GACjD,IAAK,IAAIG,EAAI,EAAGA,EAAIhB,EAAMvB,QAAQyB,OAAQc,IAAK,CAC7C,MAAMf,EAAcD,EAAMvB,QAAQuC,IAC3BC,EAAYC,GAAYL,EAAQV,EAASF,EAAYtB,OAASyB,EAAYH,EAAYtB,OAE7F,GAAIY,EAAWoB,EAAOC,EAAKK,EAAYC,EAAUL,GAAQ,CACvDE,GAAc,EACd,OAKN,IAAKA,EACH,OAAOD,EAIX,OAAQ,EAGJ,SAAUK,EAAwBC,GACtC,MAAMC,EAAU,CACdvB,OAAQ,GACRW,KAAM,EACNrB,KAAM,EACNkC,MAAOA,KACLD,EAAQvB,OAAS,GACjBuB,EAAQZ,IAAMY,EAAQjC,KAAO,GAE/Bd,WAAYA,CAACN,EAAwBuD,EAAkCV,EAAgBS,GAAQ,MACzFtD,EAAIC,UAAYmD,GAAgBE,IAClCD,EAAQC,QAGV,MAAMd,EAAWgB,eAAuBxD,GAClCS,EAAUH,EAAWiD,EAAWf,GAwCtC,OAtCA/B,EAAQsB,QAAQ0B,IACd,MAAOd,EAAOC,GAAOC,EAAQV,EAASsB,EAAO9C,OAASyB,EAAYqB,EAAO9C,OAErE0C,EAAQvB,OAAOI,OAAS,IAAMX,EAAWoB,EAAOC,EAAKS,EAAQZ,IAAKY,EAAQjC,IAAKyB,KACjFhB,EAAewB,EAAQvB,QACvBuB,EAAQC,SAGV,IAAII,EAAchB,EAAaW,EAAQvB,OAAQa,EAAOC,EAAKC,IAEtC,IAAjBa,IACFA,EAAcL,EAAQvB,OAAOI,OAE7BmB,EAAQvB,OAAO6B,KAAK,CAAEhB,QAAOC,MAAKnC,QAAS,MAG7C,MAAMb,EAASyD,EAAQvB,OAAO4B,GAC9B9D,EAAOa,QAAQkD,KAAKF,GACpB7D,EAAO+C,MAAQxB,KAAKsB,IAAI7C,EAAO+C,MAAOA,GACtC/C,EAAOgD,IAAMzB,KAAKC,IAAIxB,EAAOgD,IAAKA,GAElCa,EAAO5C,OAAS6C,GAEK,IAAjBL,EAAQZ,KACVY,EAAQZ,IAAME,EACdU,EAAQjC,IAAMwB,IAEdS,EAAQZ,IAAMtB,KAAKsB,IAAIY,EAAQZ,IAAKE,GACpCU,EAAQjC,IAAMD,KAAKC,IAAIiC,EAAQjC,IAAKwB,MAIxCf,EAAewB,EAAQvB,QAEnBe,GACFQ,EAAQC,QAGH7C,IAIX,OAAO4C,ECtHT,MAAMO,EAAa,IAEbC,EAAiB,EAEjBC,EAAmB,IAgBZC,EAAkCA,CAACxD,EAAQ6C,EAAcY,KACpE,MAAMX,EAAUF,EAAuBC,GAGvC,MAAO,CAACpD,EAAKuD,EAAWV,EAAOS,KAC7B,IAAKT,EACH,OAAOQ,EAAQ/C,WAAWN,EAAKuD,EAAWV,EAAOS,GAGnD,MAAMd,EAAWgB,eAAuBxD,GAClCS,EAAUH,EAAWiD,EAAWf,GAChCV,EAASmC,EAAUxD,EAAS+B,GAElC,IAAK,MAAMR,KAASF,EAAQ,CAC1B,MAAMoC,EAAgB,GAEtB,IAAK,MAAMT,KAAUzB,EAAMvB,QAAS,CAClC,MAAM0D,EAAQC,EAAQX,EAAQjB,GACxB6B,EAAQC,EAAaH,EAAOD,GAElC,IAAc,IAAVG,EAAiB,CACnB,MAAME,EAASC,EAAUL,EAAOD,GAC5BK,IACFJ,EAAMI,OAASA,EACfJ,EAAMM,QAAUlD,EAAW4C,EAAMxB,MAAOwB,EAAMvB,IAAK2B,EAAO5B,MAAO+B,EAAQH,EAAO5B,MAAOqB,IACvFG,EAAME,MAAQE,EAAOF,MAAQ,EAC7BE,EAAOI,SAAShB,KAAKQ,QAElB,CACL,MAAOI,GAAUK,EAAoBT,EAAOD,EAAOG,EAAQ,EAAGA,EAAQ,GAChEM,EAAWC,EAAoBT,EAAOD,EAAOG,EAAQ,EAAGA,EAAQH,EAAMhC,QAAQ,GAEpFiC,EAAMQ,SAAWA,EACjBR,EAAME,MAAQA,EAEVE,IACFJ,EAAMI,OAASA,EACfJ,EAAMM,QAAUlD,EAAW4C,EAAMxB,MAAOwB,EAAMvB,IAAK2B,EAAO5B,MAAO+B,EAAQH,EAAO5B,MAAOqB,IACvFO,EAAOI,SAAShB,KAAKQ,IAGvB,IAAK,MAAMU,KAASF,EAAU,CACxBE,EAAMN,SAAWA,IACnBM,EAAMN,OAASJ,GAGjB,MAAMW,EAAYD,EAAMR,MAAQF,EAAME,OAAS,EAC3CS,GAAaX,EAAMM,SACrBlD,EAAW4C,EAAMxB,MAAO+B,EAAQP,EAAMxB,MAAOqB,GAAmBa,EAAMlC,MAAOkC,EAAMjC,OACnFiC,EAAMJ,SAAU,IAKtBP,EAAMP,KAAKQ,GAGbY,EAAgBb,EAAOF,GAKzB,OAFAvD,EAAQO,KAAK,CAACC,EAAGC,IAAOD,EAAEH,KAAOI,EAAEJ,MAAUG,EAAEN,MAAMU,yBAA2BH,EAAEP,MAAMU,0BAEjFZ,IAIX,SAASsE,EAAiBb,EAAeF,GACvC,IAAK,MAAMgB,KAAQd,EAAO,CACxB,MAAM,OAAET,EAAF,OAAUc,GAAWS,EACrBC,EAAUC,EAAiBF,GAAQ,EACnCG,EAAYZ,EAASA,EAAOd,OAAO3C,KAAO,EAC1CsE,EAAaxB,EAAauB,EAC1BE,EAASlE,KAAKsB,IAAIoB,EAAgBD,EAAaqB,GAC/CK,EAAwBC,EAAyBP,EAAMd,GACvDsB,EAAeJ,GAAcH,EAAUD,EAAKX,MAAQ,GACpDoB,EAAcL,GAAcH,EAAUD,EAAKX,OAASW,EAAKP,QAAU,EAAI,IAAMa,EAE/Ef,IACFd,EAAO3C,KAAOkE,EAAKP,QACfU,EAAYK,EACZL,EAAYE,GAGlB5B,EAAO1C,MAAQ2E,EAAaV,EAAMd,EAAOF,GACrCJ,EAAaH,EAAO3C,KACpBK,KAAKsB,IAAImB,EAAaH,EAAO3C,KAAM2E,EAAc3B,IAIzD,SAASyB,EAA0BP,EAAYd,GAC7C,IAAKc,EAAKL,SAASzC,OACjB,OAAO,EAGT,MAAMyD,EAAYX,EAAKX,MAAQH,EAAMhC,OAC/B0D,EAAYZ,EAAKL,SAASkB,OAAO,CAACpD,EAAKqD,IAAM3E,KAAKsB,IAAIA,EAAKqD,EAAEzB,OAAQsB,GAE3E,OAAOC,EAAYZ,EAAKX,MAG1B,SAAS0B,EAAuBf,EAAYd,GAC1C,MAAM8B,EAAoB,GAC1B,IAAK,MAAMC,KAAS/B,EACd3C,EAAWyD,EAAKrC,MAAOqC,EAAKpC,IAAKqD,EAAMtD,MAAOsD,EAAMrD,MACtDoD,EAAQrC,KAAKsC,EAAM5B,OAGvB,OAAO2B,EAGT,SAAS1B,EAAcU,EAAYd,GACjC,MAAM8B,EAAUD,EAAsBf,EAAMd,GAC5C8B,EAAQhF,OAER,IAAK,IAAI8B,EAAI,EAAGA,EAAIkD,EAAQ9D,OAAQY,IAClC,GAAIA,EAAIkD,EAAQlD,GACd,OAAOA,EAGX,OAAO,EAGT,SAAS8B,EAAqBI,EAAYd,EAAegC,EAAkBC,EAAkBC,GAAoB,GAC/G,MAAMC,EAAsB,GAC5B,IAAK,MAAMJ,KAAS/B,EACd+B,EAAM5B,OAAS6B,GAAYD,EAAM5B,OAAS8B,GAAY5E,EAAWyD,EAAKrC,MAAOqC,EAAKpC,IAAKqD,EAAMtD,MAAOsD,EAAMrD,MAC5GyD,EAAY1C,KAAKsC,GAGrB,GAAIG,GAAqBC,EAAYnE,OAAS,EAAG,CAC/C,MAAMoE,EAAQD,EAAYR,OAAO,CAACpD,EAAK8D,IAAMpF,KAAKsB,IAAIA,EAAK8D,EAAElC,OAAQgC,EAAY,GAAGhC,OACpF,OAAOgC,EAAYG,OAAOD,GAAKA,EAAElC,QAAUiC,GAE7C,OAAOD,EAGT,SAAS7B,EAAWQ,EAAYd,GAC9B,IAAIK,EAAsB,KAC1B,IAAK,MAAM0B,KAAS/B,EACd3C,EAAWyD,EAAKrC,MAAOqC,EAAKpC,IAAKqD,EAAMtD,MAAOsD,EAAMrD,OAAoB,OAAX2B,GAAmB0B,EAAM5B,MAAQE,EAAOF,SACvGE,EAAS0B,GAGb,OAAO1B,EAGT,SAASmB,EAAcV,EAAYd,EAAeF,GAChD,IAAK,MAAMiC,KAAS/B,EAClB,GAAI+B,IAAUjB,GACZiB,EAAM5B,MAAQW,EAAKX,OACnB9C,EAAWyD,EAAKrC,MAAO+B,EAAQM,EAAKrC,MAAOqB,GAAmBiC,EAAMtD,MAAOsD,EAAMrD,KACjF,OAAO,EAIX,OAAO,EAGT,SAASqB,EAAWxD,EAAgC+B,GAClD,MAAMV,EAAkB,GAExB,IAAK,MAAM2B,KAAUhD,EAAS,CAC5B,MAAOkC,EAAOC,GAAOL,EAAmBkB,EAAO9C,MAAO6B,GACtD,IAAIiE,GAAQ,EAEZ,IAAK,MAAMzE,KAASF,EAClB,GAAIP,EAAWoB,EAAOC,EAAKZ,EAAMW,MAAOX,EAAMY,KAAM,CAClDZ,EAAMvB,QAAQkD,KAAKF,GACnBzB,EAAMY,IAAMzB,KAAKC,IAAIY,EAAMY,IAAKA,GAChC6D,GAAQ,EACR,MAICA,GACH3E,EAAO6B,KAAK,CAAEhB,QAAOC,MAAKnC,QAAS,CAACgD,KAIxC,OAAO3B,EAGT,SAASsC,EAASX,EAA6BjB,GAC7C,MAAOG,EAAOC,GAAOL,EAAmBkB,EAAO9C,MAAO6B,GAEtD,MAAO,CACL+B,OAAQ,KACRE,SAAS,EACTJ,MAAO,EACPZ,SACAd,QACAC,MACA+B,SAAU,IAId,SAASO,EAAkBF,GACzB,IAAI5D,EAAM4D,EAAKX,MACf,IAAK,MAAMF,KAASa,EAAKL,SAAU,CACjC,MAAM+B,EAAWxB,EAAiBf,GAC9BuC,EAAWtF,IACbA,EAAMsF,GAGV,OAAOtF,EAGT,SAASsD,EAASiC,EAAoBC,GACpC,MAAMC,EAAgBF,EAAa,IAC7BG,EAAeD,EAAgBD,EAC/BG,EAAW5F,KAAK6F,MAAMF,EAAe,IACrCG,EAAaH,EAAe,GAElC,OAAOH,EAAaE,EAA2B,IAAXE,EAAiBE,EC1PvD,MAAMrD,EAAa,IAEN/C,EAAmCA,CAACN,EAAQ6C,EAAcY,KACrE,MAAMX,EAAUF,EAAuBC,GAEvC,MAAO,CAACpD,EAAKuD,EAAWV,EAAOS,KAC7B,MAAM7C,EAAU4C,EAAQ/C,WAAWN,EAAKuD,EAAWV,EAAOS,GAS1D,OAPIT,GACFpC,EAAQsB,QAAQ0B,IACdA,EAAO3C,KAAO2C,EAAO5C,OAAS+C,EAAaH,EAAO7C,YAClD6C,EAAO1C,MAAQ6C,EAAaH,EAAO7C,cAIhCH,ICdEyG,EAAsE,CACjFnD,QACAlD,UCCa,OACbsG,KAAM,CACJxE,MAAO,CACLvE,KAAM,CAACC,OAAQ+I,OAAQzH,MACvB0H,SAAU9I,OACV+I,QAASA,IAAM5H,eAAU,IAAIC,MAAQE,MAEvC+C,IAAK,CACHxE,KAAM,CAACC,OAAQ+I,OAAQzH,MACvB0H,SAAU9I,QAEZgJ,SAAU,CACRnJ,KAAM,CAACoJ,MAAOnJ,QACdiJ,QAASA,IAAM,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAClCD,SAAUI,GAEZC,WAAY,CACVtJ,KAAMuJ,SAERC,cAAe,CACbxJ,KAAMuJ,QACNL,SAAS,GAEXO,cAAe,CACbzJ,KAAM0J,SACNR,QAAS,MAEXS,UAAW,CACT3J,KAAM0J,SACNR,QAAS,OAGbU,UAAW,CACTC,QAAS,CACP7J,KAAMgJ,OACNE,QAAS,GAEXY,eAAgB,CACd9J,KAAMuJ,QACNL,SAAS,GAEXa,eAAgB,CACd/J,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,GACTD,SAAUe,GAEZC,cAAe,CACbjK,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,GACTD,SAAUe,GAEZE,gBAAiB,CACflK,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,GACTD,SAAUe,GAEZG,cAAe,CACbnK,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,EACTD,SAAUe,GAEZI,UAAW,CACTpK,KAAM,CAACgJ,OAAQ/I,OAAQoK,QACvBpB,SAAUqB,QAEZC,cAAe,CACbvK,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,GACTD,SAAUe,GAEZQ,eAAgB,CACdxK,KAAM0J,SACNR,QAAS,MAEXuB,cAAe,CACbzK,KAAM0J,SACNR,QAAS,MAEXwB,kBAAmB,CACjB1K,KAAM0J,SACNR,QAAS,OAGbyB,MAAO,CACLC,qBAAsB,CACpB5K,KAAM,CAACC,OAAQ+I,QACfE,QAAS,GAEX2B,SAAU,CACR5B,SAAUe,EACVd,QAAS,GAEX4B,YAAa,CACX9K,KAAMuJ,QACNL,SAAS,GAEX6B,iBAAkB,CAChB/K,KAAMuJ,QACNL,SAAS,GAEX8B,SAAUzB,QACV0B,YAAa,CACXjL,KAAM0J,SACNR,QAAS,OAGbgC,SAAU,CACRlL,KAAM,CACJA,KAAMC,OACNiJ,QAAS,SAEXiC,MAAO,CACLnL,KAAM,CAACC,OAAQ+I,OAAQzH,MACvB0H,SAAU9I,SAGdiL,SAAU,CACRC,WAAY,CACVrL,KAAM,CAACoJ,MAAOnJ,QACdiJ,QAAS,IAEXoC,aAAc,CACZtL,KAAM,CAACC,OAAQyJ,WAEjB6B,oBAAqB,CACnBvL,KAAMuJ,SAERiC,gBAAiB,CACfxL,KAAMuJ,SAERkC,mBAAoB,CAClBzL,KAAMC,OACNiJ,QAAS,IAEXwC,aAAc,CACZ1L,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,EACTD,SAAW0C,GAAWC,SAASC,SAASF,KAAOE,SAASF,GAAK,IAGjExJ,OAAQ,CACNA,OAAQ,CACNnC,KAAMoJ,MACNF,QAASA,IAAM,IAEjB4C,WAAY,CACV9L,KAAMC,OACNiJ,QAAS,SAEX6C,SAAU,CACR/L,KAAMC,OACNiJ,QAAS,OAEX8C,WAAY,CACVhM,KAAM,CAACC,OAAQyJ,UACfR,QAAS,SAEX+C,cAAe,CACbjM,KAAM,CAACC,OAAQyJ,UACfR,QAAS,YAEXgD,YAAa,CACXlM,KAAMgJ,OACNE,QAAS,IAEXiD,WAAY,CACVnM,KAAM,CAACC,OAAQyJ,UACfR,QAAS,WAEXkD,eAAgB,CACdpM,KAAM,CAACC,OAAQyJ,UACfR,QAAS,SAEXmD,UAAW,CACTrM,KAAM,CAACC,OAAQyJ,UACfR,QAAS,QAEXoD,sBAAuB,CACrBtM,KAAM,CAACC,OAAQ+I,QACfE,QAAS,IAEXqD,iBAAkB,CAChBvM,KAAM,CAACC,OAAQyJ,UACfR,QAAS,QACTD,SAAWuD,GAAcA,KAAQ1D,GAA6C,oBAAT0D,GAEvEC,UAAW,CACTzM,KAAMuJ,QACNL,SAAS,GAEXwD,cAAe,CACb1M,KAAMC,OACNiJ,QAAS,gCAEXyD,YAAa,CACX3M,KAAM,CAACuJ,QAASc,QAChBnB,QAAS,MAEX0D,kBAAmB,CACjB5M,KAAMgJ,OACNE,QAAS,KAKT,SAAUc,EAAgB6C,GAC9B,OAAOjB,SAASC,SAASgB,IAGrB,SAAUxD,EAAkBwD,GAKhC,GAJqB,kBAAVA,IACTA,EAAQA,EAAMC,MAAM,MAGlB1D,MAAM2D,QAAQF,GAAQ,CACxB,MAAMG,EAAOH,EAAMvK,IAAIqJ,GAAKE,SAASF,IAErC,GAAIqB,EAAKlJ,OAASmJ,QAAgC,IAAhBD,EAAKlJ,OACrC,OAAO,EAGT,MAAMoJ,EAAmC,GACzC,IAAIC,GAAU,EAEd,IAAK,IAAIzI,EAAI,EAAGA,EAAIsI,EAAKlJ,OAAQY,IAAK,CACpC,MAAMiH,EAAIqB,EAAKtI,GAEf,IAAKkH,SAASD,IAAMA,EAAI,GAAKA,GAAKsB,OAChC,OAAO,EAGT,GAAIvI,EAAI,EAAG,CACT,MAAM0I,EAAIzB,EAAIqB,EAAKtI,EAAI,GACvB,GAAI0I,EAAI,EAAG,CACT,GAAID,EACF,OAAO,EAETA,GAAU,OACL,GAAU,IAANC,EACT,OAAO,EAIX,GAAIF,EAAQvB,GACV,OAAO,EAETuB,EAAQvB,IAAK,EAGf,OAAO,EAGT,OAAO,EC1OM0B,qBACbC,OACAC,OACAC,OACAC,OACAC,GAEA9N,OAAO,CACPC,KAAM,gBAEN8N,WAAY,CACVC,eAGF9N,MAAOA,EAAMiJ,KAEbvI,SAAU,CACRqN,iBACE,OAAOzE,MAAM2D,QAAQrM,KAAKyI,UACtBzI,KAAKyI,UACJzI,KAAKyI,UAAY,IAAI2D,MAAM,KAAKxK,IAAIqJ,GAAKE,SAASF,EAAG,MAE5DmC,eACE,OAAOC,eAAgBrN,KAAKmN,iBAE9BG,sBACE,MAAMC,EAAWvN,KAAKoN,aAAaI,QAEnC,OADAD,EAASE,UACFF,GAETG,cACE,OAAO9N,eAAeI,KAAK6D,OAAO,IAEpC8J,YACE,MAAM9J,EAAQ7D,KAAK0N,YACb5J,EAAyB9D,KAAK8D,KAAMlE,eAAeI,KAAK8D,MAAgBD,EAE9E,OAAOa,eAAuBZ,GAAOY,eAAuBb,GAASA,EAAQC,GAE/E8J,OACE,OAAOC,eACL7N,KAAK0N,YACL1N,KAAK2N,UACL3N,KAAKL,MAAME,MACXG,KAAKoN,eAGTU,eACE,GAAI9N,KAAKiJ,UACP,OAAOjJ,KAAKiJ,UAGd,MAAM8E,EAAU,CAAEC,SAAU,MAAO9M,IAAK,WAExC,OAAO+M,eACLjO,KAAKkO,cACL,CAACC,EAAMC,IAAWL,IAGtBM,mBACE,GAAIrO,KAAK+I,cACP,OAAO/I,KAAK+I,cAGd,MAAMuF,EAAc,CAAEN,SAAU,MAAO7M,QAAS,QAC1CoN,EAAe,CAAEP,SAAU,MAAO7M,QAAS,SAEjD,OAAO8M,eACLjO,KAAKkO,cACL,CAACC,EAAMK,IAAUA,EAAQD,EAAeD,KAK9CjO,QAAS,CACPoO,mBAAoBC,EAA8BC,GAAU,GAC1D,MAAO,CACL,YAAaD,EAAUpO,QACvB,SAAUoO,EAAUnO,KACpB,WAAYmO,EAAUlO,OACtB,YAAamO,IAGjBC,eAAgBF,GACd,OAAOE,eAAeF,EAAW1O,KAAKmN,eAAgBnN,KAAKL,MAAME,QAEnEgP,aAAcH,GACZ,OAAOG,eAAaH,EAAW1O,KAAKmN,eAAgBnN,KAAKL,MAAME,QAEjEiP,aAAcf,GACZ,OAAOE,eACLjO,KAAK+O,OACL,CAACZ,EAAMC,IAAWL,OC5GpB,SAAUiB,EACd7C,EACA5G,EACA0J,EACAC,EACAnL,GAAQ,EACR2G,GAA2B,GAE3B,MAAMyE,EAAahD,EAAM8C,GACnBG,EAAWjD,EAAM+C,GACjBG,EAAiCzP,eAAeuP,GAAY,GAC5DG,EAAgCF,EAAWxP,eAAewP,GAAU,GAAQC,EAC5ExL,EAA2B0L,eAAYJ,GACzCK,eAAcH,EAAatL,GAC3BsL,EACEvL,EAAyByL,eAAYH,GACvCI,eAAcF,EAAWvL,GACzBuL,EACE/L,EAA0BkM,eAAiB5L,GAC3CtB,EAAmCmC,eAAuBb,GAC1DL,EAAwBiM,eAAiB3L,GACzC4L,EAAoB7L,EAAM8L,QAAU,EAAI,KACxCnN,EAAiCkC,eAAuBZ,GAAO4L,EAC/DE,GAAU/L,EAAM8L,QAEtB,MAAO,CAAExD,QAAOtI,QAAON,kBAAiBhB,2BAA0BuB,MAAKN,gBAAehB,yBAAwBoN,SAAQrK,QAAOmF,YAGzH,SAAUmF,EAAWhO,EAA4BiO,GACrD,OAAOA,GAAiBjO,EAAM0B,iBAAmBuM,GAAiBjO,EAAM2B,cAGpE,SAAUuM,EAAiBlO,EAA4BX,GAC3D,MAA0B,UAAnBW,EAAMiC,IAAI1C,MAAoBS,EAAMiC,IAAI/C,OAASG,EAAIH,MAAQc,EAAMgC,MAAM9C,OAASG,EAAIH,KAGzF,SAAUiP,EAAcnO,EAA4BX,EAAwB4O,EAAuBxL,GACvG,OAAOwL,IAAkBjO,EAAM0B,iBAAoBe,IAAiBpD,EAAIC,SAAW0O,EAAUhO,EAAOiO,GAGhG,SAAUG,EAAoBpO,EAA4B0B,EAAyBC,GACvF,OAAOD,GAAmB1B,EAAM2B,eAAiBA,GAAiB3B,EAAM0B,gBCmB1E,MAAM2M,EAAa,IACbC,EAAc,GACdC,EAAiB,KAGRC,QAAanR,OAAO,CACjCC,KAAM,uBAEN8N,WAAY,CACVqD,eAGFlR,MAAO,IACFA,EAAMqC,UACNrC,EAAMoL,YACNpL,EAAMsL,UAGX5K,SAAU,CACRyQ,WACE,OAA8B,IAAvBvQ,KAAKyB,OAAO2B,QAErBoN,eACE,OAAOxQ,KAAKyB,OAAOG,IAAI5B,KAAKgP,aAE9ByB,8BACE,OAAOtF,SAASnL,KAAK4L,wBAEvB8E,qBACE,MAAkC,oBAApB1Q,KAAKsL,WACftL,KAAKsL,WACLzJ,KAAWA,EAAM7B,KAAKsL,aAE5BqF,wBACE,MAAqC,oBAAvB3Q,KAAKuL,cACfvL,KAAKuL,cACL1J,GAASA,EAAM7B,KAAKuL,gBAE1BqF,yBACE,MAAsC,oBAAxB5Q,KAAK0L,eACf1L,KAAK0L,eACL,IAAM1L,KAAK0L,gBAEjBmF,oBACE,MAAiC,oBAAnB7Q,KAAK2L,UACf3L,KAAK2L,UACL,CAAC9J,EAAOiP,IAAejP,EAAMsK,MAAMnM,KAAK2L,YAAkC,IAEhFoF,oBACE,MAAwC,oBAA1B/Q,KAAK6L,iBACf7L,KAAK6L,iBACLzD,EAA0BpI,KAAK6L,mBAErCmF,gBACE,OAAOhR,KAAKmN,gBAEd8D,eACE,MAAqB,aAAdjR,KAAKV,OAIhBe,QAAS,CACP6Q,mBAAoBC,GAClB,MAAkC,oBAApBnR,KAAKyL,WACfzL,KAAKyL,WAAW0F,GAChBA,EAAEC,OAASpR,KAAKyL,YAEtBuD,WAAY7C,EAAsB5G,EAAQ,GACxC,OAAOyJ,EACL7C,EACA5G,EACAvF,KAAKoL,WACLpL,KAAKqL,SACLrL,KAAK0Q,mBAAmBvE,KACxBnM,KAAKiR,cAAejR,KAAK2Q,sBAAsBxE,KAGnDkF,WAAYC,EAA6BC,GACvC,MAAMC,EAAYxR,KAAK8O,aAAa,CAClCd,SAAU,MACV3M,KAAM,UACNC,OAAQgQ,EAAShQ,OAAS,EAAI,eAAYmQ,IAG5C,OAAOD,EAAUF,GAAU,IAE7BI,wBACE,GAAI1R,KAAKuQ,WAAavQ,KAAK+L,UACzB,OAGF,MAAMP,EAAcxL,KAAKwL,YACnBmG,EAAY3R,KAAK4R,eAEvB,IAAK,MAAM7Q,KAAQ4Q,EAAW,CAC5B,MAAM,OAAElM,EAAF,OAAUhE,EAAV,KAAkBoQ,GAASF,EAAU5Q,GAC3C,IAAK8Q,EACH,MAGF,MAAMC,EAAerM,EAAOsM,wBACtBC,EAAOvQ,EAAO2B,OAAS,EACvB6O,EAAexQ,EAAOG,IAAIC,IAAS,CACvCA,QACAqQ,OAAQrQ,EAAMkQ,wBAAwBG,UACpChQ,KAAK,CAACC,EAAGC,IAAMD,EAAE+P,OAAS9P,EAAE8P,QAChC,IAAIC,EAAS,EAEb,IAAK,IAAInO,EAAI,EAAGA,GAAKgO,EAAMhO,IAAK,CAC9B,MAAMkO,EAASD,EAAajO,GAAGkO,OACzBE,EAAOpO,IAAMgO,EACdE,EAASJ,EAAaI,OACtBA,EAAS1G,EAAcsG,EAAaI,OAErCE,IACFH,EAAajO,GAAGnC,MAAMwQ,MAAMC,QAAU,OACtCH,KAIAA,GACFN,EAAKQ,MAAMC,QAAU,GACrBT,EAAKU,UAAYvS,KAAKwS,SAASC,KAAKC,EAAE1S,KAAKgM,cAAemG,IAE1DN,EAAKQ,MAAMC,QAAU,SAI3BV,eACE,MAAMD,EAA6B,GAC7BgB,EAAW3S,KAAK4S,MAAMnR,OAE5B,OAAKkR,GAAaA,EAAS1P,SAI3B0P,EAAS1P,QAAQ4P,IACf,MAAM9R,EAAO8R,EAAGC,aAAa,aACzBD,EAAGE,eAAiBhS,IAChBA,KAAQ4Q,IACZA,EAAU5Q,GAAQ,CAChB0E,OAAQoN,EAAGE,cACXlB,KAAM,KACNpQ,OAAQ,KAGRoR,EAAGC,aAAa,aAClBnB,EAAU5Q,GAAM8Q,KAAOgB,GAEvBlB,EAAU5Q,GAAMU,OAAOoD,KAAKgO,GAC5BA,EAAGR,MAAMC,QAAU,OAKlBX,GAtBEA,GAwBXqB,aAAa,MAAEnR,GAA8BX,GAC3C,MAAMsK,EAAcxL,KAAKwL,YACnBU,EAAoBlM,KAAKkM,kBACzB4D,EAAgBL,eAAiBvO,GACjC+R,EAAO/R,EAAI+R,KACXpP,EAAQiM,IAAkBjO,EAAM0B,gBACtC,IAAIO,EAAMgM,IAAkBjO,EAAM2B,cAC9BvB,EAAQkO,EAEZ,IAAKnQ,KAAKiR,aACR,IAAK,IAAIjN,EAAI9C,EAAIqE,MAAQ,EAAGvB,EAAIiP,EAAK7P,OAAQY,IAAK,CAChD,MAAMkP,EAAoBzD,eAAiBwD,EAAKjP,IAChD,KAAInC,EAAM2B,eAAiB0P,GAGpB,CACLpP,GAAM,EACN,MAJA7B,GAASiO,EACTpM,EAAMA,GAAOoP,IAAsBrR,EAAM2B,cAO/C,MAAM2P,EAAQ,CAAEC,YAAavR,EAAOX,MAAK2C,QAAOC,MAAKC,OAAO,GAE5D,OAAO/D,KAAKqT,SAASxR,EAAOsR,GAAO,EAAO,CACxCG,YAAa,UACbC,MAAO,CACL,gBAAiB1P,EACjB,cAAeC,GAEjBuO,MAAO,CACLmB,OAAWhI,EAAH,KACRvJ,MAAUA,EAAH,IACP,gBAAoBiK,EAAH,MAEnBuH,MAAO,CACL,YAAavS,EAAIH,MAEnB2S,IAAK7R,EAAM0D,MACXoO,IAAK,SACLC,UAAU,KAGdC,eAAe,MAAEhS,EAAF,KAASG,EAAT,MAAeC,GAA8Bf,GAC1D,GAAIA,EAAI4S,UAAUjS,EAAMiC,KAAO,GAAK5C,EAAI4S,UAAUjS,EAAMgC,QAAU,GAAKkM,EAAgBlO,EAAOX,GAC5F,OAAO,EAGT,MAAM4O,EAAgBL,eAAiBvO,GACjC2C,EAAQhC,EAAM0B,iBAAmBuM,EACjChM,EAAMjC,EAAM2B,cAAgBsM,EAC5BiE,EAAMlQ,EAAQ3C,EAAI8S,QAAQnS,EAAMgC,OAAS,EACzCqO,EAASpO,EAAM5C,EAAI8S,QAAQ5D,GAAkBlP,EAAI8S,QAAQnS,EAAMiC,KAC/D0P,EAASnR,KAAKC,IAAItC,KAAKwL,YAAa0G,EAAS6B,GAC7CZ,EAAQ,CAAEC,YAAavR,EAAOX,MAAK2C,QAAOC,MAAKC,OAAO,GAE5D,OAAO/D,KAAKqT,SAASxR,EAAOsR,GAAO,EAAM,CACvCG,YAAa,gBACbjB,MAAO,CACL0B,IAAQA,EAAH,KACLP,OAAWA,EAAH,KACRxR,KAASA,EAAH,IACNC,MAAUA,EAAH,QAIboR,SAAUxR,EAA4BoS,EAA8BnD,EAAqBpR,G,MACvF,MAAMwU,EAAOlU,KAAKmU,aAAatS,MACzBuS,EAAOpU,KAAK4Q,uBAAuB/O,EAAMsK,OACzCkI,EAAarU,KAAKkR,mBAAmBrP,EAAMsK,OAC3CmI,EAAezS,EAAMgC,MAAMxC,KAAO,IAAMQ,EAAMiC,IAAIzC,MAAQ,GAC1DkT,EAAWC,eAAY3S,EAAMgC,MAAOhC,EAAMiC,MAAQ9D,KAAKyQ,4BACvDY,EAAarR,KAAKqR,WAClBoD,EAAcA,IAAMpD,EAAWxP,EAAMgC,MAAOyQ,GAAgB,MAAQjD,EAAWxP,EAAMiC,KAAK,GAC1F4Q,EAAeA,KACnB,MAAMvV,EAAOa,KAAK6Q,kBAAkBhP,EAAOiP,GAC3C,GAAIjP,EAAMgC,MAAM8L,QAAS,CACvB,GAAImB,EAAY,CACd,MAAM1P,EAAOqT,IACPE,EAAYJ,EAAW,KAAOvU,KAAK4U,eAAe,MAExD,OAAO5U,KAAK4U,eAAe,OAAQ,CAAEtB,YAAa,mBAAqB,CACrEtT,KAAK4U,eAAe,SAAU,CAACzV,IAC/BwV,EACAvT,IAEG,CACL,MAAMA,EAAOiQ,EAAWxP,EAAMgC,OAAO,GAErC,OAAO7D,KAAK4U,eAAe,OAAQ,CAAEtB,YAAa,mBAAqB,CACrEtT,KAAK4U,eAAe,SAAU,CAACxT,IAC/B,IACAjC,KAKN,OAAOa,KAAK4U,eAAe,OAAQ,CAAEtB,YAAa,mBAAqB,CAACnU,KAGpEgU,EAAQ,IACTc,EACHpS,MAAOA,EAAMsK,MACbwC,QAASsF,EAAW/S,IAAIyN,QACxB4F,WACAD,eACAjD,aACAoD,cACAC,gBAGF,OAAO1U,KAAK4U,eAAe,MACzB5U,KAAK6U,aAAaT,EAChBpU,KAAK8U,mBAAmBT,EAAY,CAClCU,GAAI/U,KAAKgV,6BAA6B,SAAUC,IAAe,IAAM9B,EAAO8B,iBAC5EhI,WAAY,CAAC,CACX9N,KAAM,SACNsL,MAAuB,QAAhByK,EAAAlV,KAAKiM,mBAAW,IAAAiJ,UAEtBxV,KAEJwU,EACCA,EAAKf,GACL,CAACnT,KAAKmV,QAAQT,MAGtBS,QAAST,GACP,OAAO1U,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,QACZ,CAACoB,OAENU,eAAgBlU,GACd,MAAMsS,EAASxT,KAAKwL,YAAcxL,KAAKkM,kBAEvC,OAAOlM,KAAK4U,eAAe,MAAO,CAChCvC,MAAO,CACLmB,OAAWA,EAAH,MAEVC,MAAO,CACL,YAAavS,EAAIH,MAEnB4S,IAAK,SACLC,UAAU,KAGdyB,QAASnU,G,MACP,MAAMsK,EAAcxL,KAAKwL,YACnBU,EAAoBlM,KAAKkM,kBAE/B,OAAOlM,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,oBACbC,MAAO,CACL,YAAarS,EAAIyN,SAEnB8E,MAAO,CACL,YAAavS,EAAIH,KACjB,YAAa,GAEfkM,WAAY,CAAC,CACX9N,KAAM,SACNsL,MAAuB,QAAhByK,EAAAlV,KAAKiM,mBAAW,IAAAiJ,OAEzBH,GAAI/U,KAAKgV,6BAA6B,QAASC,IACtC,CAAEA,iBAAgB/T,KAG3BmR,MAAO,CACLC,QAAS,OACTkB,OAAWhI,EAAH,KACR,gBAAoBU,EAAH,MAEnByH,IAAK,SACLC,UAAU,KAGd0B,mBACE,MAAMzR,EAAQ4L,eAAiBzP,KAAK4N,KAAK,IACnC9J,EAAM2L,eAAiBzP,KAAK4N,KAAK5N,KAAK4N,KAAKxK,OAAS,IAE1D,OAAOpD,KAAKwQ,aAAa9I,OACvB7F,GAASoO,EAAmBpO,EAAOgC,EAAOC,KAG9CyR,mBAAoB1T,EAA4B6I,GAC9C,OAAQ1K,KAAKiR,cACU,kBAAbvG,GAAyBA,EAAS8K,cAC1C9K,EAAS8K,eAAiB3T,EAAM6I,UACL,kBAAnB7I,EAAM6I,UAAyBA,IAAa7I,EAAM6I,UAC/B,kBAAnB7I,EAAM6I,UAAsC,OAAbA,GAE3C+K,gBAAiBvU,GACf,MAAM2G,EAAa4H,eAAiBvO,GAC9BoD,EAAetE,KAAKgR,cAAc,GAExC,OAAOhR,KAAKwQ,aAAa9I,OACvB7F,GAASmO,EAAanO,EAAOX,EAAK2G,EAAYvD,KAGlDoR,mBAAoBxU,GAClB,MAAM2G,EAAa4H,eAAiBvO,GAC9BoD,EAAetE,KAAKgR,cAAc,GAExC,OAAOhR,KAAKwQ,aAAa9I,OACvB7F,GAASA,EAAM+N,SACZ5P,KAAKiR,aAAepB,EAAUhO,EAAOgG,GAAcmI,EAAanO,EAAOX,EAAK2G,EAAYvD,KACzFtE,KAAKuV,mBAAmB1T,EAAOX,EAAIwJ,YAGzCiL,qBAAsBzU,GACpB,MAAM2G,EAAa4H,eAAiBvO,GACpC,OAAOlB,KAAKwQ,aAAa9I,OACvB7F,IAAUA,EAAM+N,QACdC,EAAUhO,EAAOgG,IACjB7H,KAAKuV,mBAAmB1T,EAAOX,EAAIwJ,YAGzCkL,iBACE,GAAI5V,KAAKuQ,SACP,MAAO,IAAKvQ,KAAKmU,cAGnB,MAAMrI,EAAO9L,KAAK+Q,kBAChB/Q,KAAKwQ,aACLxQ,KAAKgR,cAAc,GACnBhR,KAAKyQ,6BAGDoF,EAAU1J,KAA2CA,EACrD2J,EAAkCA,CAAC5U,EAAK6U,EAAQC,EAAQjS,KAC5D,MAAMtC,EAASsU,EAAO7U,GAChBS,EAAUmK,EAAK5K,EAAKO,EAAQsC,EAAO/D,KAAKiR,cAE9C,GAAIlN,EACF,OAAOpC,EAAQC,IAAI+C,GAAUqR,EAAOrR,EAAQzD,IAAMwG,OAAOmO,GAG3D,MAAMhQ,EAAoB,GAa1B,OAXAlE,EAAQsB,QAAQ,CAAC0B,EAAQY,KACvB,MAAOM,EAASzC,OAASuB,EAAO5C,OAC9B8D,EAAShB,KAAK7E,KAAKoV,eAAelU,IAGpC,MAAM+U,EAASD,EAAOrR,EAAQzD,GAC1B+U,GACFpQ,EAAShB,KAAKoR,KAIXpQ,GAGHqQ,EAAQlW,KAAKmU,aACbgC,EAAUD,EAAMhV,IAChBkV,EAAgBF,EAAM,cACtBG,EAAcH,EAAM,YAE1B,MAAO,IACFA,EACHhV,IAAMA,IACJ,IAAI2E,EAAWiQ,EAAgB5U,EAAKlB,KAAKyV,gBAAiBzV,KAAKgT,aAAa,GAI5E,GAHInN,GAAYA,EAASzC,OAAS,GAAKpD,KAAK+L,WAC1ClG,EAAShB,KAAK7E,KAAKqV,QAAQnU,IAEzBiV,EAAS,CACX,MAAMjC,EAAOiC,EAAQjV,GACjBgT,IACFrO,EAAWA,EAAWA,EAASyQ,OAAOpC,GAAQA,GAGlD,OAAOrO,GAET,aAAe3E,IACb,IAAI2E,EAAWiQ,EAAgB5U,EAAKlB,KAAK0V,mBAAoB1V,KAAKgT,aAAa,GAE/E,GAAIoD,EAAe,CACjB,MAAMlC,EAAOkC,EAAclV,GACvBgT,IACFrO,EAAWA,EAAWA,EAASyQ,OAAOpC,GAAQA,GAGlD,OAAOrO,GAET,WAAa3E,IACX,MAAMO,EAASqU,EAAgB5U,EAAKlB,KAAK2V,qBAAsB3V,KAAK6T,eAAe,GACnF,IAAIhO,EAAoB,CACtB7F,KAAK4U,eAAe,MAAO,CACzBtB,YAAa,2BACZ7R,IAGL,GAAI4U,EAAa,CACf,MAAMnC,EAAOmC,EAAYnV,GACrBgT,IACFrO,EAAWA,EAASyQ,OAAOpC,IAG/B,OAAOrO,Q,mDClfFwK,KAAanR,OAAO,CACjCC,KAAM,oBAENC,MAAOA,EAAM6K,MAEbnK,SAAU,CACRwT,cACE,MAAO,qBAETiD,UACE,OAAOvW,KAAKwW,cAEdC,iBACE,OAAOtL,SAASnL,KAAKmK,WAEvByD,OACE,MAAM8I,EAAU1W,KAAKyW,eAAiBzW,KAAKmN,eAAe/J,OACpDS,EAAQ7D,KAAK4O,eAAe5O,KAAK0N,aACjC5J,EAAM9D,KAAK6O,aAAa7O,KAAK2N,WAEnC,OAAOE,eACLhK,EACAC,EACA9D,KAAKL,MAAME,MACXG,KAAKoN,aACL9E,OAAOqO,iBACPD,IAGJE,YACE,MAAM/W,EAAQG,KAAKL,MAAME,MACnBgE,EAAQ7D,KAAK4O,eAAe/O,GAC5BiE,EAAM9D,KAAK6O,aAAahP,GAE9B,OAAOgO,eACLhK,EACAC,EACAjE,EACAG,KAAKoN,aACLpN,KAAKmN,eAAe/J,OACpBpD,KAAKmN,eAAe/J,SAGxByT,iBACE,GAAI7W,KAAKuK,YACP,OAAOvK,KAAKuK,YAGd,MAAM+D,EAAc,CAAEN,SAAU,MAAO/M,MAAO,QACxCsN,EAAe,CAAEP,SAAU,MAAO/M,MAAO,SAE/C,OAAOgN,eACLjO,KAAKkO,cACL,CAACC,EAAMK,IAAUA,EAAQD,EAAeD,KAK9CjO,QAAS,CACPyW,UAAW5V,GACT,MAAM4O,EAAgBL,eAAiBvO,GAEvC,OAAO4O,EAAgBL,eAAiBzP,KAAK0N,cACtCoC,EAAgBL,eAAiBzP,KAAK2N,YAE/CoJ,UACE,OAAO/W,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,0BACbG,MAAO,CACLuD,KAAM,QAEPhX,KAAKiX,gBAEVA,cACE,MAAMC,EAASlX,KAAK4W,UAAUhV,IAAI5B,KAAKmX,YAQvC,OANInX,KAAKsK,UACP4M,EAAOE,QAAQpX,KAAK4U,eAAe,MAAO,CACxCtB,YAAa,wCAIV4D,GAETC,WAAYjW,EAAwBqE,GAClC,MAAMoJ,EAAU3O,KAAK8W,UAAU9W,KAAK4N,KAAKrI,IACnC6L,EAAQlQ,EAAIZ,QAAUN,KAAKoR,WAAQK,EAEzC,OAAOzR,KAAK4U,eAAe,MAAO5U,KAAK6U,aAAazD,EAAO,CACzDsC,IAAKxS,EAAIH,KACTuS,YAAa,kCACbC,MAAOvT,KAAKyO,mBAAmBvN,EAAKyN,GACpC8E,MAAO,CACLuD,KAAM,kBAENhX,KAAKqO,iBAAiBnN,EAAKlB,KAAK8I,iBAEtCuO,WACE,MAAMzJ,EAAO5N,KAAK4N,KACZ0J,EAAWtX,KAAKmN,eAAe/J,OAC/B6G,EAAiB,GAEvB,IAAK,IAAIjG,EAAI,EAAGA,EAAI4J,EAAKxK,OAAQY,GAAKsT,EACpCrN,EAAMpF,KAAK7E,KAAKuX,QAAQ3J,EAAKJ,MAAMxJ,EAAGA,EAAIsT,GAAWtX,KAAKwX,cAAc5J,EAAK5J,MAG/E,OAAOiG,GAETsN,QAAStE,EAA2BwE,GAClC,MAAMC,EAAYzE,EAAKrR,IAAI,CAACV,EAAKqE,IAAUvF,KAAK2X,OAAOzW,EAAKqE,EAAO0N,IAMnE,OAJIjT,KAAKsK,UACPoN,EAAUN,QAAQpX,KAAK4X,cAAcH,IAGhCzX,KAAK4U,eAAe,MAAO,CAChClB,IAAKT,EAAK,GAAGlS,KACbuS,YAAa,0BACbG,MAAO,CACLuD,KAAM,QAEPU,IAELF,cAAeK,GACb,OAAOJ,gBACLI,EAAa7W,KACb6W,EAAa5W,MAAQ,EACrB4W,EAAa3W,IACblB,KAAKmN,eAAe,GACpBhC,SAASnL,KAAKkK,wBAGlB0N,cAAeH,GACb,OAAOzX,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,iCACZ,CACDtT,KAAK4U,eAAe,QAASrV,OAAOkY,OAGxCE,OAAQzW,EAAwBqE,EAAe0N,GAC7C,MAAMtE,EAAU3O,KAAK8W,UAAU5V,GAE/B,OAAOlB,KAAK4U,eAAe,MAAO,CAChClB,IAAKxS,EAAIH,KACTuS,YAAa,yBACbC,MAAOvT,KAAKyO,mBAAmBvN,EAAKyN,GACpC8E,MAAO,CACLuD,KAAM,QAERjC,GAAI/U,KAAKgV,6BAA6B,OAAQC,IACrC,CAAEA,iBAAgB/T,MAE1B,CACDlB,KAAK8X,YAAY5W,MACb6W,gBAAQ/X,KAAM,MAAO,KAAM,CAAG2O,UAASpJ,QAAO0N,UAAS/R,MAAW,MAG1E4W,YAAa5W,GACX,OAAOlB,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,gCACZyE,gBAAQ/X,KAAM,YAAakB,IAAQ,CAAClB,KAAKgY,kBAAkB9W,MAEhE8W,kBAAmB9W,GACjB,MAAMkQ,EAAQlQ,EAAIZ,QAAUN,KAAKoR,MAAQ,cACnC6G,EAAuB,IAAZ/W,EAAIA,KAAalB,KAAKqK,iBAEvC,OAAOrK,KAAK4U,eAAesD,QAAM,CAC/B9Y,MAAO,CACLgS,QACA+G,KAAK,EACLC,WAAW,EACXC,OAAO,GAETtD,GAAI/U,KAAKsY,sBAAsB,CAC7B,aAAc,CAAEzW,MAAO,QAAS0W,MAAM,GACtC,mBAAoB,CAAE1W,MAAO,cAAe0W,MAAM,EAAMC,SAAS,EAAMC,QAAQ,IAC9ExD,IAAe,CAAGA,iBAAgB/T,MACpC+W,EACCjY,KAAK6W,eAAe3V,EAAKlB,KAAKoK,aAAe,IAAMpK,KAAK8N,aAAa5M,GAAK,GAC1ElB,KAAK8N,aAAa5M,GAAK,KAG7BwX,YAAaxX,GACX,MAAMkQ,EAAQlQ,EAAIZ,QAAUN,KAAKoR,WAAQK,EAEzC,OAAOzR,KAAK4U,eAAe,MAAO5U,KAAK6U,aAAazD,EAAO,CACzDkC,YAAa,iCACXyE,gBAAQ/X,KAAM,YAAakB,IAAQlB,KAAK6W,eAAe3V,EAAKlB,KAAKoK,gBAIzEuO,OAAQC,GACN,OAAOA,EAAE,MAAO,CACdtF,YAAatT,KAAKsT,YAClBC,MAAOvT,KAAKuW,QACZxB,GAAI,CACF8D,UAAY1H,IACVA,EAAE2H,oBAGL,CACA9Y,KAAK4I,WAA8B,GAAjB5I,KAAK+W,aACrB/W,KAAKqX,gBCvNC0B,MAAgB7Z,OAAO,CACpCC,KAAM,qBAENW,SAAU,CACRwT,cACE,MAAO,wCAET5F,cACE,OAAOsL,eAAgBpZ,eAAeI,KAAK6D,OAAO,KAEpD8J,YACE,OAAOsL,eAAcrZ,eAAeI,KAAK8D,KAAK,QCHrCuM,I,WAAAA,EAAanR,OAAO,CACjCC,KAAM,0BAENC,MAAOA,EAAM8J,UAEbpJ,SAAU,CACRoZ,sBACE,OAAO/N,SAASnL,KAAKyJ,gBAEvB0P,wBACE,OAAOhO,SAASnL,KAAKwJ,kBAEvB4P,sBACE,OAAOjO,SAASnL,KAAK6J,gBAEvBwP,uBACE,OAAOC,WAAWtZ,KAAKqJ,iBAEzBkQ,kBACE,OAAOC,eAAUxZ,KAAK0J,YAExB+P,cACE,MAAMrY,EAAOpB,KAAKuZ,gBAElB,OAAgB,IAATnY,GAAkBA,GAAQ,GAAKA,GAAQgP,OAC1ChP,EACApB,KAAKkZ,oBAAsBlZ,KAAKmZ,uBAEtCO,aACE,OAAO1Z,KAAKoZ,oBAAsBpZ,KAAKqZ,sBAEzCzL,OACE,OAAOC,eACL7N,KAAK0N,YACL1N,KAAK2N,UACL3N,KAAKL,MAAME,MACXG,KAAKoN,aACLpN,KAAKmJ,UAGTD,YACE,MAAM0E,EAA4B5N,KAAK4N,KACjCpG,EAAgBxH,KAAKyZ,YACrB3R,EAAkB9H,KAAKmZ,sBACvBQ,EAAgB3Z,KAAKoZ,oBACrB/Z,EAAyBW,KAAKL,MAAMN,IAE1C,OAAOuO,EAAKhM,IAAI8K,GAAKkN,eAAmBlN,EAAGlF,EAAOM,EAAS6R,EAAOta,KAEpEwa,oBACE,GAAI7Z,KAAK8J,eACP,OAAO9J,KAAK8J,eAGd,MAAMwE,EAAc,CAAEN,SAAU,MAAO3M,KAAM,UAAWC,OAAQ,WAC1DiN,EAAe,CAAEP,SAAU,MAAO3M,KAAM,UAAWC,OAAQ,WAC3DwY,EAAmB,CAAE9L,SAAU,MAAO3M,KAAM,WAElD,OAAO4M,eACLjO,KAAKkO,cACL,CAAC6L,EAAKvL,IAAUA,EAAwB,IAAfuL,EAAIzY,OAAewY,EAAmBvL,EAAgBD,KAKrFjO,QAAS,CACP2Z,yBAA0BC,GACxB,MAAMzS,EAA2BxH,KAAKkJ,UAAU,GAAG,GAC7CgR,EAAmB1S,EAAMnG,OAAS4Y,EAAS5Y,MAAQmG,EAAMlG,SAAW2Y,EAAS3Y,OACnF,OAAQ4Y,GAEVC,qBAAsBC,KAGtBC,oBAAqBlJ,EAA4BjQ,GAC/C,MAAMwN,EAA+B4L,eAAcpZ,GAC7CqZ,EAAUpJ,EAAEqJ,cAA8BzI,wBAC1C0I,EAAsBza,KAAKyZ,YAC3BiB,EAAyBvJ,EACzBwJ,EAAyBxJ,EACzByJ,EAAqBF,EAAWG,gBAAkBH,EAAWE,QAC7DE,EAAkBF,GAAWA,EAAQ,GAAKA,EAAQ,GAAGE,QAAUH,EAAWG,QAC1EC,GAAwBD,EAAUP,EAAOxG,KAAO/T,KAAKqZ,qBACrDlR,EAAqB9F,KAAK6F,MAAM6S,EAAe/a,KAAKmZ,uBACpDrR,EAAkB2S,EAActS,EAEtC,OAAO6S,eAActM,EAAW5G,EAAS9H,KAAKL,MAAMN,MAEtD4b,aAAcvM,GACZ,MAAMyE,EAAQmH,eAAc5L,GAK5B,OAJAyE,EAAMa,QAAUhU,KAAKgU,QACrBb,EAAMW,UAAY9T,KAAK8T,UACvBX,EAAM+H,gBAAkBlb,KAAKkb,gBAC7B/H,EAAMF,KAAOjT,KAAK4N,KACXuF,GAETgI,aAAc/Z,GACZ,MAAMga,EAAIpb,KAAKgU,QAAQ5S,GACjBia,EAAOrb,KAAK4S,MAAM0I,WAExB,SAAU,IAANF,IAAgBC,KAIpBA,EAAKE,UAAYH,GAEV,IAETF,gBAAiBpT,GACf,OAAOA,EAAU9H,KAAKmZ,sBAAwBnZ,KAAKqZ,sBAErDrF,QAAS5S,EAAaoa,GAAQ,GAC5B,IAAIJ,EAAIpb,KAAK8T,UAAU1S,GAevB,OAbU,IAANga,IACFA,GAAKpb,KAAK0Z,WAEN8B,IACEJ,EAAI,IACNA,EAAI,GAEFA,EAAIpb,KAAK0Z,aACX0B,EAAIpb,KAAK0Z,cAKR0B,GAETtH,UAAW1S,GACT,MAAM0G,EAAU0R,eAAUpY,GAE1B,IAAgB,IAAZ0G,EACF,OAAO,EAGT,MAAMnE,EAAc3D,KAAKyZ,YACnBgC,EAAczb,KAAKoZ,oBAAsBpZ,KAAKmZ,sBAEpD,OAAQrR,EAAUnE,GAAO8X,OC1IhBC,MAAsBxc,OAAO,CAC1CC,KAAM,mBAEN8N,WAAY,CAAEC,eAEdxN,KAAMA,KAAA,CACJic,WAAY,IAGd7b,SAAU,CACRyW,UACE,MAAO,CACL,oBAAoB,KACjBvW,KAAKwW,gBAKdoF,UACE5b,KAAK6b,QAGPxb,QAAS,CACPwb,OACE7b,KAAK8b,UAAU9b,KAAK+b,WAEtBA,WACE/b,KAAK2b,WAAa3b,KAAKgc,iBAEzBA,gBACE,MAAMC,EAAOjc,KAAK4S,MAAM0I,WAClBD,EAAOrb,KAAK4S,MAAMyI,KAExB,OAAOY,GAAQZ,EAAQY,EAAKC,YAAcb,EAAKa,YAAe,GAEhEnF,UACE,OAAO/W,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,yBACbjB,MAAO,CACL8J,YAAanc,KAAK2b,WAAa,OAEhC,CACD3b,KAAKoc,sBACFpc,KAAKiX,iBAGZmF,mBACE,MAAMna,EAA4Boa,gBAAcrc,KAAKuJ,eAErD,OAAOvJ,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,mCACbjB,MAAO,CACLpQ,UAED8V,gBAAQ/X,KAAM,qBAEnBiX,cACE,OAAOjX,KAAK4N,KAAKhM,IAAI5B,KAAKmX,aAE5BA,WAAYjW,EAAwBqE,GAClC,OAAOvF,KAAK4U,eAAe,MAAO,CAChClB,IAAKxS,EAAIH,KACTuS,YAAa,4BACbC,MAAOvT,KAAKyO,mBAAmBvN,GAC/B6T,GAAI/U,KAAKgV,6BAA6B,OAAQC,IACrC,CAAEA,iBAAgBjV,KAAKib,aAAa/Z,OAE5C,CACDlB,KAAKsc,eAAepb,GACpBlB,KAAKuc,gBAAgBrb,MAClBlB,KAAKwc,aAAatb,EAAKqE,MAG9BiX,aAActb,EAAwBqE,GACpC,OAAOwS,gBAAQ/X,KAAM,aAAc,KAAM,CACvCiT,KAAMjT,KAAK4N,QAAS1M,EAAKqE,YACpB,IAET+W,eAAgBpb,GACd,MAAMkQ,EAAQlQ,EAAIZ,QAAUN,KAAKoR,WAAQK,EAEzC,OAAOzR,KAAK4U,eAAe,MAAO5U,KAAK6U,aAAazD,EAAO,CACzDkC,YAAa,kCACXtT,KAAKqO,iBAAiBnN,EAAKlB,KAAK8I,iBAEtCyT,gBAAiBrb,GACf,OAAOlB,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,mCACZyE,gBAAQ/X,KAAM,mBAAoBkB,IAAQ,CAAClB,KAAKyc,iBAAiBvb,MAEtEub,iBAAkBvb,GAChB,MAAMkQ,EAAQlQ,EAAIZ,QAAUN,KAAKoR,MAAQ,cAEzC,OAAOpR,KAAK4U,eAAesD,QAAM,CAC/B9Y,MAAO,CACLgS,QACA+G,KAAK,EACLC,WAAW,GAEbrD,GAAI/U,KAAKsY,sBAAsB,CAC7B,aAAc,CAAEzW,MAAO,QAAS0W,MAAM,GACtC,mBAAoB,CAAE1W,MAAO,cAAe0W,MAAM,EAAMC,SAAS,EAAMC,QAAQ,IAC9ExD,IACM,CAAEA,iBAAgB/T,MAE1BlB,KAAK8N,aAAa5M,GAAK,KAE5Bwb,UACE,OAAO1c,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,0BACZ,CACDtT,KAAK2c,mBAGTA,gBACE,OAAO3c,KAAK4U,eAAe,MAAO,CAChCjB,IAAK,aACLL,YAAa,iCACZ,CACDtT,KAAK4c,aAGTA,UACE,OAAO5c,KAAK4U,eAAe,MAAO,CAChCjB,IAAK,OACLL,YAAa,yBACbjB,MAAO,CACLmB,OAAQ6I,gBAAcrc,KAAK0Z,cAE5B,CACD1Z,KAAK6c,qBAGTA,kBACE,OAAO7c,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,mCACZ,CACDtT,KAAK8c,sBACF9c,KAAK+c,aAGZA,UACE,OAAO/c,KAAK4N,KAAKhM,IAAI5B,KAAK2X,SAE5BA,OAAQzW,EAAwBqE,GAC9B,OAAOvF,KAAK4U,eAAe,MAAO,CAChClB,IAAKxS,EAAIH,KACTuS,YAAa,wBACbC,MAAOvT,KAAKyO,mBAAmBvN,GAC/B6T,GAAI/U,KAAKgV,6BAA6B,QAASC,IACtC,CAAEA,iBAAgBjV,KAAKib,aAAajb,KAAKqa,oBAAoBpF,EAAa/T,QAElF,IACElB,KAAKgd,gBAAgBzX,MACrBvF,KAAKid,WAAW/b,MAGvB+b,WAAY/b,GACV,OAAO6W,gBAAQ/X,KAAM,WAAY,IAAMA,KAAKib,aAAa/Z,KAAS,IAEpE8b,gBAAiBzX,GACf,OAAOvF,KAAKkJ,UAAU3D,GAAO3D,IAAI5B,KAAKkd,iBAExCA,eAAgBjD,GACd,MAAMzG,EAA6B6I,gBAAcrc,KAAKqJ,gBAChD8T,EAASnd,KAAK+J,eAAiB/J,KAAKma,qBAEpCza,EAAO,CACXgU,IAAKuG,EAAS7Y,KACdkS,YAAa,iCACbjB,MAAO,CACLmB,YACG2J,EAAOlD,KAKRpU,EAAWkS,gBAAQ/X,KAAM,WAAY,IAAMA,KAAKib,aAAahB,IAEnE,OAAOja,KAAK4U,eAAe,MAAOlV,EAAMmG,IAE1CiX,mBACE,MAAM7a,EAA4Boa,gBAAcrc,KAAKuJ,eAC/C7J,EAAO,CACX4T,YAAa,mCACbjB,MAAO,CACLpQ,SAEF8S,GAAI/U,KAAKgV,6BAA6B,YAAaC,IAC1C,CAAEA,iBAAgBjV,KAAKqa,oBAAoBpF,EAAajV,KAAK0N,iBAIxE,OAAO1N,KAAK4U,eAAe,MAAOlV,EAAMM,KAAKod,sBAE/CA,oBACE,OAAKpd,KAAKkJ,UAAU9F,OAEbpD,KAAKkJ,UAAU,GAAGtH,IAAI5B,KAAKqd,kBAFC,MAIrCA,iBAAkBpD,GAChB,MAAMzG,EAA6B6I,gBAAcrc,KAAKqJ,gBAChDmF,EAAiBxO,KAAKoJ,eACtBkU,EAAStd,KAAKgK,mBAAqBhK,KAAKga,yBACxCuD,EAAOD,EAAOrD,GACduD,EAAQD,EAAOvd,KAAK6Z,kBAAkBI,EAAUzL,QAASiD,EAE/D,OAAOzR,KAAK4U,eAAe,MAAO,CAChClB,IAAKuG,EAAS7Y,KACdkS,YAAa,6BACbjB,MAAO,CACLmB,WAED,CACDxT,KAAK4U,eAAe,MAAO,CACzBtB,YAAa,mCACZkK,OAKT7E,OAAQC,GACN,OAAOA,EAAE,MAAO,CACdrF,MAAOvT,KAAKuW,QACZxB,GAAI,CACF8D,UAAY1H,IACVA,EAAE2H,mBAGN7L,WAAY,CAAC,CACXwQ,UAAW,CAAEC,OAAO,GACpBve,KAAM,SACNsL,MAAOzK,KAAK+b,YAEb,CACA/b,KAAK4I,WAA8B,GAAjB5I,KAAK+W,UACxB/W,KAAK0c,e,UC9PL,SAAUiB,GACdjT,EACAE,GAEA,MAA+B,kBAAjBA,GAAiD,kBAAbF,GAAyBA,EACvEA,EAASE,GACe,oBAAjBA,EACLA,EAAaF,GACbA,EAGF,SAAUkT,GACdjT,EACAC,GAEA,MAA0B,kBAAfD,EAAgCA,EAAWyB,MAAM,UACxD1D,MAAM2D,QAAQ1B,GACTA,EAAW/I,IAAK8I,IACrB,GAAwB,kBAAbA,EAAuB,OAAOA,EAEzC,MAAM8K,EAAgD,kBAA1B9K,EAAS8K,aACjC9K,EAAS8K,aACTmI,GAAmBjT,EAAUE,GACjC,MAAO,IAAKF,EAAU8K,kBAGnB,GCZMqI,UAAe3e,OAAO,CACnCC,KAAM,sBAENC,MAAOA,EAAMsL,SAEb5K,SAAU,CACRyW,UACE,MAAO,CACL,oBAAoB,EACpB,uBAAuB,KACpBvW,KAAKwW,eAGZsH,mBACE,OAAOF,GAAoB5d,KAAK2K,WAAY3K,KAAK4K,gBAGrDvK,QAAS,CACPmc,aAActb,EAAwBqE,GACpC,MAAM7F,EAAO,CACX4T,YAAa,gCAETH,EAAQ,CACZF,KAAMjT,KAAK4N,QAAS1M,EAAKqE,SAGrBM,EAAW7F,KAAK8d,iBAAiBlc,IAAI8I,GAClC1K,KAAK+d,qBAAqB7c,EAAKlB,KAAKge,iBAAiB7K,EAAOzI,KAGrE,MAAO,CAAC1K,KAAK4U,eAAe,MAAOlV,EAAMmG,KAE3CmY,iBAAkB7K,EAAYzI,GAC5B,MAAMuT,EAA0B,kBAAbvT,GAAyBA,GACxCA,EAAS8K,eAAiBxV,KAAK+K,mBAAqB,KAAOL,EAC/D,MAAO,IACFyI,EACHzI,SAAUuT,IAGdF,qBAAsB7c,EAAwBiS,GAC5C,MAAM+K,EAAwC,kBAAnB/K,EAAMzI,SAAwByI,EAAMzI,SAAS8K,aAAerC,EAAMzI,SAC7F,OAAO1K,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,qCACbyB,GAAI/U,KAAKgV,6BAA6B,gBAAiB7D,GAC9CnR,KAAKge,iBAAiBhe,KAAKib,aAAa/Z,GAAMiS,EAAMzI,YAE5D,CACDqN,gBAAQ/X,KAAM,WAAYmT,IAAUnT,KAAKme,0BAA0BD,GACnEnG,gBAAQ/X,KAAM,aAAcmT,MAGhCgL,0BAA2B3I,GACzB,OAAOxV,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,iCACK,OAAjBkC,EAAwBxV,KAAK+K,mBAAqByK,IAEvDuH,UACE,MAAMnP,EAAgB,GAMtB,OALA5N,KAAK4N,KAAK3K,QAAQ,CAACyJ,EAAG0R,KACpB,MAAMld,EAAM,IAAIwH,MAAM1I,KAAK8d,iBAAiB1a,QAAU,GACtDlC,EAAImd,KAAK3R,GACTkB,EAAK/I,QAAQ3D,EAAIU,IAAI,CAAC0c,EAAGta,IAAMhE,KAAK2X,OAAO2G,EAAGF,EAAGpa,OAE5C4J,GAET+J,OAAQzW,EAAwBqE,EAAegZ,GAC7C,MAAM7T,EAAW1K,KAAK8d,iBAAiBS,GACvC,OAAOve,KAAK4U,eAAe,MAAO,CAChClB,IAAKxS,EAAIH,KAAO,IAAMwd,EACtBjL,YAAa,wBACbC,MAAOvT,KAAKyO,mBAAmBvN,GAC/B6T,GAAI/U,KAAKgV,6BAA6B,QAAS7D,GACtCnR,KAAKib,aAAajb,KAAKqa,oBAAoBlJ,EAAGjQ,MAEtD,IACElB,KAAKgd,gBAAgBzX,EAAOmF,MAC5B1K,KAAKid,WAAW/b,EAAKwJ,MAG5BsS,gBAAiBzX,EAAemF,GAC9B,OAAO1K,KAAKkJ,UAAU3D,GAAO3D,IAAI0c,GAAKte,KAAKkd,eAAeoB,EAAG5T,KAE/DwS,eAAgBjD,EAA6BvP,GAC3C,MAAM8I,EAA6B6I,gBAAcrc,KAAKqJ,gBAChD8T,EAASnd,KAAK+J,eAAiB/J,KAAKma,qBAEpCza,EAAO,CACXgU,IAAKuG,EAAS7Y,KACdkS,YAAa,iCACbjB,MAAO,CACLmB,YACG2J,EAAO,IAAKlD,EAAUvP,eAIvB7E,EAAWkS,gBAAQ/X,KAAM,WAAY,IACzCA,KAAKge,iBAAiBhe,KAAKib,aAAahB,GAAWvP,IAGrD,OAAO1K,KAAK4U,eAAe,MAAOlV,EAAMmG,IAE1CoX,WAAY/b,EAAwBwJ,GAClC,MAAMhL,EAAO,CACX4T,YAAa,gCAGTzN,EAAW,CAAC7F,KAAKwe,mBAAmBtd,EAAKwJ,IAE/C,MAAO,CAAC1K,KAAK4U,eAAe,MAAOlV,EAAMmG,KAE3C2Y,mBAAoBtd,EAAwBwJ,GAC1C,MAAMhL,EAAO,CACX4T,YAAa,8BACbyB,GAAI/U,KAAKgV,6BAA6B,iBAAkB7D,GAC/CnR,KAAKge,iBAAiBhe,KAAKib,aAAajb,KAAKqa,oBAAoBlJ,EAAGjQ,IAAOwJ,KAIhF7E,EAAWkS,gBAAQ/X,KAAM,WAAY,IAAMA,KAAKge,iBAAiBhe,KAAKib,aAAa/Z,GAAMwJ,IAE/F,OAAO1K,KAAK4U,eAAe,MAAOlV,EAAMmG,OCvF/B4Y,KAAmBvf,OAAO,CACvCC,KAAM,aAENC,MAAO,IACFA,EAAMoL,YACNpL,EAAM6K,SACN7K,EAAM8J,aACN9J,EAAMsL,UAGXhL,KAAMA,KAAA,CACJgf,UAAW,KACXC,QAAS,OAGX7e,SAAU,CACR8e,cACE,OAAQnf,eAAkBO,KAAKyK,OAC3B7K,eAAeI,KAAKyK,OAAO,GAC1BzK,KAAK0N,aAAe1N,KAAKL,MAAME,OAEtCgf,qBACE,OAAO1T,SAASnL,KAAKgL,eAAiB,GAExC8T,cACE,MAAMC,EAAS/e,KAAK4e,YACpB,IAAII,EAAiB,KACjB7V,EAAUnJ,KAAKmJ,QACfV,EAAWzI,KAAKmN,eAChBxC,EAAa3K,KAAK8d,iBAClBja,EAAQkb,EACRjb,EAAMib,EACV,OAAQ/e,KAAKV,MACX,IAAK,QACH0f,EAAYC,GACZpb,EAAQmV,eAAgB+F,GACxBjb,EAAMmV,eAAc8F,GACpB,MACF,IAAK,OACHC,EAAYnB,GACZha,EAAQ7D,KAAK4O,eAAemQ,GAC5Bjb,EAAM9D,KAAK6O,aAAakQ,GACxB5V,EAAU,EACV,MACF,IAAK,MACH6V,EAAYnB,GACZ1U,EAAU,EACVV,EAAW,CAAC5E,EAAM1C,SAClB,MACF,IAAK,OACH6d,EAAYnB,GACZ/Z,EAAMob,eAAa5E,eAAcxW,GAAMqb,OAAS,GAChDC,eAAgBtb,GAChBqF,EAAU,EACVV,EAAW,CACT5E,EAAM1C,SACL0C,EAAM1C,QAAU,GAAK,GACrB0C,EAAM1C,QAAU,GAAK,GACrB0C,EAAM1C,QAAU,GAAK,GAExB,MACF,IAAK,gBACH6d,EAAYjG,GACZlV,EAAQ7D,KAAK0N,aAAeqR,EAC5Bjb,EAAM9D,KAAK2N,UACX,MACF,IAAK,eACHqR,EAAYnB,GACZha,EAAQ7D,KAAK0N,aAAeqR,EAC5Bjb,EAAM9D,KAAK2N,UACX,MACF,IAAK,WACH,MAAMC,EAAO5N,KAAK6e,mBAElBG,EAAYK,GACZvb,EAAMob,eAAa5E,eAAcxW,GAAMqb,OAASvR,GAChDwR,eAAgBtb,GAChBqF,EAAUyE,EACVnF,EAAW,GAEX,IAAK,IAAIzE,EAAI,EAAGA,EAAI4J,EAAM5J,IACxByE,EAAS5D,MAAMhB,EAAM1C,QAAU6C,GAAK,GAGtC2G,EAAa3K,KAAKsf,gBAAgB3U,GAClC,MACF,QACE,MAAM,IAAI4U,MAAMvf,KAAKV,KAAO,iCAGhC,MAAO,CAAE0f,YAAWnb,QAAOC,MAAKqF,UAASV,WAAUkC,eAErDqG,gBACE,OAAOhR,KAAK8e,YAAYrW,UAE1BwI,eACE,MAAqB,aAAdjR,KAAKV,MAEdkgB,QACE,MAAM,MAAE3b,EAAF,IAASC,GAAQ9D,KAAK8e,YACtBW,EAAY5b,EAAM7C,OAAS8C,EAAI9C,KAC/B0e,EAAaD,GAAa5b,EAAM5C,QAAU6C,EAAI7C,MAEpD,OAAIwe,EACKzf,KAAK2f,oBAAoB9b,GAAO,GAAQ,IAAMA,EAAM7C,KAAO,MAAQhB,KAAK2f,oBAAoB7b,GAAK,GAAQ,IAAMA,EAAI9C,KAGxH0e,EACK1f,KAAK2f,oBAAoB9b,GAAO,GAAQ,MAAQ7D,KAAK2f,oBAAoB7b,GAAK,GAAQ,IAAMA,EAAI9C,KAEhGhB,KAAK4f,mBAAmB/b,GAAO,GAAS,IAAMA,EAAM7C,MAG/D4e,qBACE,OAAO5f,KAAK8O,aAAa,CACvBd,SAAU,MAAO/M,MAAO,UAG5B0e,sBACE,OAAO3f,KAAK8O,aAAa,CACvBd,SAAU,MAAO/M,MAAO,WAG5B6c,mBACE,OAAOF,GAAoB5d,KAAK2K,WAAY3K,KAAK4K,gBAIrD3K,MAAO,CACL6e,YAAa,eAGflD,UACE5b,KAAK0R,wBACL1R,KAAK6f,eAGPC,UACEC,OAAOC,sBAAsBhgB,KAAK0R,wBAGpCrR,QAAS,CACPwf,cACE,MAAM,UAAEnB,EAAF,QAAaC,GAAY3e,MACzB,MAAE6D,EAAF,IAASC,GAAQ9D,KAAK8e,YACvBJ,GAAcC,GACjB9a,EAAM9C,OAAS2d,EAAU3d,MACzB+C,EAAI/C,OAAS4d,EAAQ5d,OACrBf,KAAK0e,UAAY7a,EACjB7D,KAAK2e,QAAU7a,EACf9D,KAAKigB,MAAM,SAAU,CAAEpc,QAAOC,UAGlCoc,KAAMC,EAAS,GACb,MAAMC,EAAQ9F,eAActa,KAAK4e,aAC3ByB,EAAUF,EAAS,EACnBG,EAAQD,EAAUlB,OAAUoB,OAC5BC,EAAQH,EAAUI,OAAoBC,OAC5C,IAAI/gB,EAAQ0gB,EAAUF,GAAUA,EAEhC,QAASxgB,GAAS,EAChB,OAAQK,KAAKV,MACX,IAAK,QACH8gB,EAAMlf,IAAMsf,EACZF,EAAMF,GACN,MACF,IAAK,OACHlB,eAAakB,EAAOE,EAAO/T,QAC3B,MACF,IAAK,MACH2S,eAAakB,EAAOE,EAAO,GAC3B,MACF,IAAK,OACHpB,eAAakB,EAAOE,EAAO,GAC3B,MACF,IAAK,WACHpB,eAAakB,EAAOE,EAAOtgB,KAAK6e,oBAChC,MAIN8B,eAAcP,GACdhB,eAAgBgB,GAChBQ,eAAeR,EAAOpgB,KAAKL,MAAMN,KAE7BW,KAAKyK,iBAAiB5J,KACxBb,KAAKigB,MAAM,QAASY,eAAgBT,IACL,kBAAfpgB,KAAKyK,MACrBzK,KAAKigB,MAAM,QAASY,eAAgBT,GAAOU,WAE3C9gB,KAAKigB,MAAM,QAASG,EAAMrf,MAG5Bf,KAAKigB,MAAM,QAASG,IAEtBW,KAAMZ,EAAS,GACbngB,KAAKkgB,KAAKC,IAEZa,KAAMb,EAAS,GACbngB,KAAKkgB,MAAMC,IAEbnM,QAAS5S,EAAaoa,GAAQ,GAC5B,MAAMxU,EAAIhH,KAAKihB,UAAU,GAEzB,SAAIja,IAAKA,EAAEgN,UACFhN,EAAEgN,QAAQ5S,EAAMoa,IAK3B1H,UAAW1S,GACT,MAAM4F,EAAIhH,KAAKihB,UAAU,GAEzB,SAAIja,IAAKA,EAAE8M,YACF9M,EAAE8M,UAAU1S,IAKvB8Z,gBAAiBpT,GACf,MAAMd,EAAIhH,KAAKihB,UAAU,GAEzB,OAAIja,GAAKA,EAAEkU,gBACFlU,EAAEkU,gBAAgBpT,IAEjB,GAGZqT,aAAc/Z,GACZ,MAAM4F,EAAIhH,KAAKihB,UAAU,GAEzB,SAAIja,IAAKA,EAAEmU,eACFnU,EAAEmU,aAAa/Z,IAK1BxB,eAAgBuM,EAAwB+U,GACtC,OAAOthB,eAAeuM,EAAO+U,EAAUlhB,KAAKL,MAAMN,MAEpDwhB,gBAAiBnS,GACf,OAAOmS,eAAgBnS,IAEzB4Q,gBAAiB3U,GACf,IAAK3K,KAAKuQ,SAAU,CAClB,MAAM4Q,EAAmBxW,EAAW5D,OAAO,CAACnF,EAAU8I,EAAUnF,KACtC,kBAAbmF,GAAyBA,EAAS8K,aAAc5T,EAAI8I,EAAS8K,cAAgB,CAAEjQ,QAAOoU,MAAO,GAC3E,kBAAbjP,IAAuB9I,EAAI8I,GAAY,CAAEnF,QAAOoU,MAAO,IAChE/X,GACN,IAEH,IAAK5B,KAAK6K,sBAAwB7K,KAAK8K,gBAAiB,CACtD,IAAIsW,EAAiBzW,EAAWvH,OAEhCpD,KAAKwQ,aAAavN,QAAQoe,IACxB,IAAI3W,EAAW2W,EAAG3W,SAEM,kBAAbA,IACTA,EAAW1K,KAAK+K,oBAGbL,IAIDA,KAAYyW,EACdA,EAAYzW,GAAUiP,QACZ3Z,KAAK6K,sBACfsW,EAAYzW,GAAY,CACtBnF,MAAO6b,IACPzH,MAAO,OAMf,IAAK3Z,KAAK8K,gBACR,IAAK,MAAMJ,KAAYyW,EACe,IAAhCA,EAAYzW,GAAUiP,cACjBwH,EAAYzW,GAKzBC,EAAaA,EAAWjD,OAAQgD,GACN,kBAAbA,GAAyBA,EAAS8K,aACpC2L,EAAYG,eAAe5W,EAAS8K,cACd,kBAAb9K,GACTyW,EAAYG,eAAe5W,IAKxC,OAAOC,IAIXgO,OAAQC,GACN,MAAM,MAAE/U,EAAF,IAASC,EAAT,QAAcqF,EAAd,UAAuB6V,EAAvB,SAAkCvW,EAAlC,WAA4CkC,GAAe3K,KAAK8e,YAEtE,OAAOlG,EAAEoG,EAAW,CAClB1L,YAAa,aACbC,MAAO,CACL,qBAAsBvT,KAAKuQ,UAE7BnR,MAAO,IACFY,KAAKuhB,OACR1d,MAAOA,EAAM9C,KACb+C,IAAKA,EAAI/C,KACToI,UACAV,WACAkC,cAEF8I,MAAO,CACLuD,KAAM,QAER/J,WAAY,CAAC,CACXwQ,UAAW,CAAEC,OAAO,GACpBve,KAAM,SACNsL,MAAOzK,KAAK0R,wBAEdqD,GAAI,IACC/U,KAAKwhB,WAER,aAAcC,CAACvgB,EAAwBiQ,KACjCnR,KAAKwhB,WAAWrV,OAClBnM,KAAKigB,MAAM,QAAS/e,EAAIH,MAEtBf,KAAKwhB,WAAW,eAClBxhB,KAAKigB,MAAM,aAAc/e,EAAKiQ,KAIpCuQ,YAAa1hB,KAAK4V,sB,8EC/XqHnC,GAAM,W,IAAC,EAAM,K,EAAM,EAAK,S,OAAG,oBAAE,YAAY,OAAEA,MAAM,CAAC,MAAO,KAAIsB,CAAE,EAAC,S,MAAC,CAAsB,UAAI4M,GAAG,M,CAAoE,SAAO,C,MAAS,CAAI,SAAmBrO,IAAmBG,MAAM,e,CAAmB,UAAU,GAAG,0C,MAAC,CAAW,UAAkB,SAAgBmO,GAAK,QAAC,C,YAAYtiB,O,MAAMuiB,C,MAA6BviB,EAAKwiB,MAAG,SAAC,GAACC,SAAiB,kBAAI,MAAO,Q,MAAgB,CAAY,MAAK,OAAG,qBAAM,EAAC,KAAU,GAAqBtO,WAAM,WAAmB,KAAO,QAAG,C,MAAC,CAAc,UAAkB,SAA8BmO,GAAK,QAAC,C,YAAY9V,O,MAAM+V,C,MAA6B/V,EAAKgW,MAAG,MAAC,GAACC,SAAW,GAAM,kBAAI,MAAO,sB,MAAgB,CAAY,MAAK,OAAG,qBAAM,EAAC,KAAU,GAAqBtO,WAAM,WAAsB,aAAa,C,MAAC,CAAW,UAAkB,SAAoBmO,GAAK,QAAC,C,YAAYzgB,O,MAAS0gB,C,MAA6B1gB,EAAO,SAAI,SAAC,GAAC4gB,SAAoB,kBAAI,MAAO,Y,MAAgB,CAAY,MAAK,UAAG,qBAAM,EAAC,QAAQ,GAAQ,WAAO,cAAM,GAAC,W,MAAC,CAAuB,UAAIJ,GAAG,M,CAA2E,SAAQ,CAAW,OAAIA,KAAG,IAA6BlO,IAAO,QAAWuO,c,CAA4B,UAASA,GAAIvgB,KAAM,0C,MAAC,CAA2B,kBAA2D,OAACsT,IAAG,W,MAAC,CAAqC,SAAY,EAACiN,QAAY,OAAY,KAAa,gBAAwC,yBAACN,qBAAoB,OAAChO,0BAAW,I,GAAeN,C,cAAavR,qBAAM,aAAE,U,aAAY,U,oBAAmB,mB,YAAa,O,IAAC6f,Q,aAAyB,Y,EAAe,M,UAAiB,WAAW,C,MAA0D,CAAG,OAAM,IAAqD,mBAAI,gBAAO,gBAAQM,IAAwCvX,MAAMqX,GAAG,mDAAEC,MAAW,IAAO,0CAA2CtO,MAAM,CAAC,cAAwC,kBAAoB,GAAuB,WAAK,uBAAwC,GAAE,uBACvmE,WACGwO,OAEJ,iBAAiBA,mB,mIC8FF,IACf9iB,KAAA,eACA+iB,WAAA,CACAC,oBAAA,iDAEAxV,OAAA,CAAAyV,SACAhjB,MAAA,CAEAijB,QAAA,CACA/iB,KAAAoJ,MACAwY,UAAA,GAEAnV,UAAA,CACAzM,KAAAuJ,QACAL,SAAA,GAGAgL,OAAA,CACAlU,KAAAgJ,OACAE,QAAA,KAEA8Z,iBAAA,CACAhjB,KAAAoJ,MACAwY,UAAA,IAGAxhB,OACA,OACA6iB,SAAAC,QACAC,UAAAC,QACApjB,KAAA,QACAqjB,MAAA,8BACAxhB,QAAA,gBACAsH,SAAA,CACA,CAAA2L,KAAA,YAAA3J,MAAA,iBACA,CAAA2J,KAAA,YAAA3J,MAAA,iBACA,CAAA2J,KAAA,YAAA3J,MAAA,aACA,CAAA2J,KAAA,gBAAA3J,MAAA,UAEAqB,KAAA,QACA8W,MAAA,mBACAnY,MAAA,GACAoY,aAAA,EACAC,aAAA,EACAC,aAAA,EACAC,kBAAA,OAGAljB,SAAA,CACA2B,SAAA,IAAAwhB,EACA,eAAAA,EAAA,KAAAZ,eAAA,IAAAY,IAAA,KAGA5iB,QAAA,CAKA6iB,QAAArhB,GAAA,IAAAshB,EAAAC,EACA,KAAA3Y,MAAA,QAAA0Y,EAAA,OAAAthB,QAAA,IAAAA,OAAA,EAAAA,EAAAd,YAAA,IAAAoiB,IAAA,OAAAthB,QAAA,IAAAA,GAAA,QAAAuhB,EAAAvhB,EAAAX,WAAA,IAAAkiB,OAAA,EAAAA,EAAAriB,KACA,KAAAzB,KAAA,KAAAqjB,MAAA,IAOAU,mBAAAxhB,GACA,KAAAoe,MAAAqD,QAAAC,eAAA1hB,QAAA2hB,KAMAC,aACA,KAAA7Q,MAAApI,SAAAwW,QAMA0C,cACA,KAAA9Q,MAAApI,SAAAuW,QAQA4C,cAAA9hB,GACA,WAAAhB,KAAAgB,EAAAgC,OAAA+f,eAAA,IACAviB,KAAA,UACAC,OAAA,aAQAuiB,gBAAAhiB,GACA,KAAAmhB,kBAAAnhB,QACA,KAAAiiB,sBACA,KAAAlR,MAAAmR,KAAAC,KAAAniB,EAAAoT,cAOAgP,cAAAC,GACAA,EAAAC,OAAA7kB,OACA,KAAAA,KAAA4kB,EAAAC,OAAA7kB,MAEA,KAAA2gB,MAAAqD,QAAAc,sBAAAF,IAMAJ,sBACA,MAAAI,EAAA,CACAV,GAAA,KAAAR,kBAAAQ,GACAa,aAAA,KAAA/kB,MAEA,KAAA2gB,MAAAqD,QAAAgB,oBAAAJ,KAGAjkB,MAAA,CACAwB,OAAA,CACA8C,QAAA9C,GACAA,EAAA2B,OAAA,IACA,KAAAqH,MAAA,KAAAhJ,OAAA,GAAAoC,QAGA0gB,MAAA,EACAC,WAAA,KC3OmX,M,aCO/W,GAAY,gBACd,GACA,GACAvC,IACA,EACA,KACA,KACA,MAIa,gB,6CClBf,wCAkBehjB,cAAIC,SAAoBA,OAAO,CAC5CC,KAAM,WAENC,MAAO,CACLqlB,QAAS,CACPnlB,KAAM,CAACuJ,QAAStJ,QAChBiJ,SAAS,GAEXkc,aAAc,CACZplB,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,IAIbnI,QAAS,CACPskB,cACE,OAAqB,IAAjB3kB,KAAKykB,QAA0B,KAE5B1M,eAAQ/X,KAAM,aAAeA,KAAK4U,eAAegQ,OAAiB,CACvExlB,MAAO,CACLylB,UAAU,EACVzT,OAAyB,IAAjBpR,KAAKykB,SAAqC,KAAjBzkB,KAAKykB,QACjCzkB,KAAKoR,OAAS,UACfpR,KAAKykB,QACTjR,OAAQxT,KAAK0kB,aACbI,eAAe,U,oCC3CzB,gBAGeF,e,oCCHf,8GAkBejY,sBAAOC,OAAWmY,OAAWC,OAAWC,QAAU/lB,OAAO,CACtEC,KAAM,YAENC,MAAO,CACL8lB,WAAY,CACV5lB,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,GAEX2c,SAAUtc,QACVuc,UAAW,CACT9lB,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,GAEX6c,YAAa,CACX/lB,KAAMuJ,QACNL,SAAS,GAEX8c,YAAa,CACXhmB,KAAMuJ,QACNL,SAAS,GAEX+c,IAAK,CACHjmB,KAAMC,OACNiJ,QAAS,QAEXgd,WAAYjmB,QAGdG,KAAMA,KAAA,CACJ+lB,mBAAoB,EACpBC,iBAAiB,IAGnB5lB,SAAU,CACR6lB,iBACE,MAAM,UAAEC,EAAF,QAAavD,GAAYriB,KAAK6lB,WAC9BC,GAAW9lB,KAAKkS,SAAWlS,KAAKgC,OAAShC,KAAK+T,MAAQ/T,KAAK+lB,MAC3DC,GAAgC,IAAhBhmB,KAAKimB,OAAmBL,EAAUM,WAAaN,EAAU5jB,KAC/E,IAAIA,EAAO,EAmBX,OAjBIhC,KAAK+T,KAAO/T,KAAKkS,QAAU4T,EAC7B9jB,EACEgkB,EACCJ,EAAU3jB,MAAQ,EAClBogB,EAAQpgB,MAAQ,GAEVjC,KAAKgC,MAAQhC,KAAK+lB,SAC3B/jB,EACEgkB,GACChmB,KAAK+lB,MAAQH,EAAU3jB,OAASogB,EAAQpgB,QACxCjC,KAAK+lB,MAAQ,IAAM,KAIpB/lB,KAAKmmB,YAAWnkB,GAAQmJ,SAASnL,KAAKmmB,YACtCnmB,KAAKomB,aAAYpkB,GAAQmJ,SAASnL,KAAKomB,aAEjCpmB,KAAKqmB,cAAcrkB,EAAMhC,KAAK6lB,WAAWxD,QAAQpgB,OAApD,MAETqkB,gBACE,MAAM,UAAEV,EAAF,QAAavD,GAAYriB,KAAK6lB,WAC9BU,GAA+B,IAAhBvmB,KAAKimB,OAAmBL,EAAUY,UAAYZ,EAAU7R,IAC7E,IAAIA,EAAM,EAoBV,OAlBI/T,KAAK+T,KAAO/T,KAAKkS,OACnB6B,EACEwS,GACCvmB,KAAKkS,OAAS0T,EAAUpS,QAAU6O,EAAQ7O,SAC1CxT,KAAKkS,OAAS,IAAM,KAEdlS,KAAKgC,MAAQhC,KAAK+lB,SAC3BhS,EACEwS,EACCX,EAAUpS,OAAS,EACnB6O,EAAQ7O,OAAS,GAIlBxT,KAAKymB,WAAU1S,GAAO5I,SAASnL,KAAKymB,WACpCzmB,KAAK0mB,cAAa3S,GAAO5I,SAASnL,KAAK0mB,eACvB,IAAhB1mB,KAAKimB,SAAkBlS,GAAO/T,KAAK2mB,aAE7B3mB,KAAK4mB,cAAc7S,GAAtB,MAETwC,UACE,MAAO,CACL,iBAAkBvW,KAAK+T,IACvB,mBAAoB/T,KAAK+lB,MACzB,oBAAqB/lB,KAAKkS,OAC1B,kBAAmBlS,KAAKgC,KACxB,sBACkB,KAAhBhC,KAAKimB,SACW,IAAhBjmB,KAAKimB,QACW,WAAhBjmB,KAAKimB,SAGXY,qBACE,OAAI7mB,KAAKwlB,WAAmBxlB,KAAKwlB,WAE1BxlB,KAAK8mB,SAAW,mBAAqB,mBAE9CC,UACE,OAAO/mB,KAAK+T,KAAO/T,KAAKkS,QAE1B8U,UACE,OAAOhnB,KAAKgC,MAAQhC,KAAK+lB,OAE3BkB,SACE,MAAO,CACLjlB,KAAMhC,KAAK2lB,eACXuB,SAAU7K,eAAcrc,KAAKknB,UAC7BC,SAAU9K,eAAcrc,KAAKmnB,UAC7BpT,IAAK/T,KAAKsmB,cACVc,OAAQpnB,KAAKonB,QAAUpnB,KAAKqnB,gBAKlCC,cACEtnB,KAAK8b,UAAU,KACb9b,KAAKyK,OAASzK,KAAKunB,kBAIvB3L,UAC+C,WAAzC4L,eAAYxnB,KAAM,aAAa,IACjCynB,eAAa,uGAAqGznB,OAItHK,QAAS,CACPqnB,WAGE1nB,KAAK2nB,mBAEL3H,sBAAsBhgB,KAAK4nB,kBAE7BC,aACE7nB,KAAK8nB,SAAS,UAEhBC,wBACE,MAAMC,EAAYC,OAAYla,QAAQ1N,QAAQ0nB,sBAAsBG,KAAKloB,MAoBzE,OAlBIA,KAAKslB,cACP0C,EAAUG,MAAShX,IACjBnR,KAAKooB,aAAajX,GAClBnR,KAAK8nB,SAAS,SAEhBE,EAAUK,KAAQlX,IAChBnR,KAAKooB,aAAajX,GAClBnR,KAAK8nB,SAAS,WAIlBE,EAAUM,QAAWnX,IACfA,EAAEoX,UAAYC,OAASC,MACzBzoB,KAAKooB,aAAajX,GAClBnR,KAAK8nB,SAAS,WAIXE,GAETU,yBACE,MAAO,CACL,iBAAiB,EACjB,gBAAiBnpB,OAAOS,KAAK8mB,YAGjC6B,gBACE,MAAMtG,EAAUriB,KAAK4oB,aAErB,OAAK5oB,KAAK6mB,mBAEH7mB,KAAK4U,eAAe,aAAc,CACvCxV,MAAO,CACLD,KAAMa,KAAK6mB,qBAEZ,CAACxE,IANiCA,GAQvCuG,aACE,OAAO5oB,KAAK4U,eACV,MACA5U,KAAK8U,mBAAmB9U,KAAKoR,MAAO,CAClCkC,YAAa,qBACbC,MAAO,CACL,CAACvT,KAAK6oB,eAAe,EACrBC,0BAA2B9oB,KAAK8mB,SAChC,4BAA6B9mB,KAAK+oB,gBAEpC1W,MAAOrS,KAAKinB,OACZxT,MAAOzT,KAAKgpB,kBACZ/b,WAAY,CAAC,CACX9N,KAAM,OACNsL,MAAOzK,KAAKipB,kBAEdtV,IAAK,YAEP3T,KAAKkpB,oBAKXvQ,OAAQC,GACN,OAAOA,EAAE5Y,KAAKulB,IAAK,CACjBjS,YAAa,YACbC,MAAOvT,KAAKuW,SACX,CACDvW,KAAKmpB,gBAAgB,IAAM,CAACnpB,KAAK2oB,kBACjC3oB,KAAKopB,qB,6DCpOX,SAASC,EAAeroB,EAAcC,EAAQ,EAAGC,EAAM,GACrD,IAAIH,EAUJ,OATIC,EAAO,KAAOA,GAAQ,GACxBD,EAAO,IAAIF,KAAKA,KAAKyoB,IAAItoB,EAAMC,EAAOC,IAClCgK,SAASnK,EAAKwoB,mBAChBxoB,EAAKyoB,eAAexoB,IAGtBD,EAAO,IAAIF,KAAKA,KAAKyoB,IAAItoB,EAAMC,EAAOC,IAGjCH,EAGT,SAAS0oB,EAAiBzoB,EAAc0oB,EAAwBC,GAC9D,MAAMC,EAA0B,EAAIF,EAAiBC,EAC/CE,GAAsB,EAAIR,EAAcroB,EAAM,EAAG4oB,GAAyBE,YAAcJ,GAAkB,EAEhH,OAAQG,EAAqBD,EAA0B,EAGzD,SAASG,EAAW/oB,EAAcC,EAAeC,EAAawoB,GAC5D,IAAIK,EAAY,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAK9oB,GAKxE,OAJIA,EAAQ,GAAK+oB,EAAWhpB,IAC1B+oB,IAGKA,EAAY7oB,EAGrB,SAAS+oB,EAAajpB,EAAc0oB,EAAwBC,GAC1D,MAAMO,EAAaT,EAAgBzoB,EAAM0oB,EAAgBC,GACnDQ,EAAiBV,EAAgBzoB,EAAO,EAAG0oB,EAAgBC,GAC3DS,EAAaJ,EAAWhpB,GAAQ,IAAM,IAE5C,OAAQopB,EAAaF,EAAaC,GAAkB,EAGhD,SAAU1S,EAAYzW,EAAcC,EAAeC,EAAawoB,EAAwBxf,GAC5F,MAAMggB,EAAaT,EAAgBzoB,EAAM0oB,EAAgBxf,GACnD+I,EAAO5Q,KAAKgoB,MAAMN,EAAU/oB,EAAMC,EAAOC,EAAKwoB,GAAkBQ,GAAc,GAEpF,OAAIjX,EAAO,EACFA,EAAOgX,EAAYjpB,EAAO,EAAG0oB,EAAgBxf,GAC3C+I,EAAOgX,EAAYjpB,EAAM0oB,EAAgBxf,GAC3C+I,EAAOgX,EAAYjpB,EAAM0oB,EAAgBxf,GAEzC+I,EAIL,SAAU+W,EAAYhpB,GAC1B,OAASA,EAAO,IAAM,GAAOA,EAAO,MAAQ,GAAQA,EAAO,MAAQ,EApDrE,qE,+GCAA,8GAyBA,MAAMspB,EAAa3d,eACjBC,OACA2d,eAAoB,CAAC,WAAY,QAAS,MAAO,WACjDC,OACAzd,QAIaud,SAAWprB,OAAO,CAC/BC,KAAM,oBAEN8N,WAAY,CAAEwd,kBAEdrrB,MAAO,CACLsrB,OAAQ,CACNprB,KAAMuJ,QACNL,SAAS,GAEXmiB,gBAAiB,CACfrrB,KAAMC,OACNiJ,QAAS,MAEXoiB,kBAAmB,CACjBtrB,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,MAEXqiB,YAAa,CACXvrB,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,KAEX4I,MAAO,CACL9R,KAAMC,OACNiJ,QAAS,WAEXgL,OAAQ,CACNlU,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,GAEXsc,cAAejc,QACfiiB,MAAOjiB,QACP4E,QAAS5E,QACTkiB,QAASliB,QACTmiB,OAAQniB,QACRoiB,QAASpiB,QACT4B,MAAO,CACLnL,KAAM,CAACgJ,OAAQ/I,QACfiJ,QAAS,IAIb9I,OACE,MAAO,CACLwrB,kBAAmBlrB,KAAKyK,OAAS,EACjC0gB,WAAW,IAIfrrB,SAAU,CACRsrB,qBACE,OAAOprB,KAAK4U,eAAe,MAAO5U,KAAK8U,mBAAmB9U,KAAK2qB,iBAAmB3qB,KAAKoR,MAAO,CAC5FkC,YAAa,gCACbjB,MAAOrS,KAAKqrB,oBAGhBC,cACE,OAAOtrB,KAAK4U,eAAe5U,KAAK6mB,mBAAoB,CAAC7mB,KAAKurB,mBAE5DA,kBACE,OAAOvrB,KAAK8kB,cAAgB9kB,KAAKwrB,sBAAwBxrB,KAAKyrB,qBAEhEC,iBACE,OAAO1rB,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,4BACbjB,MAAOrS,KAAKinB,UAGhBwE,sBACE,OAAOzrB,KAAK4U,eAAe,MAAO5U,KAAK8U,mBAAmB9U,KAAKoR,MAAO,CACpEkC,YAAa,iCACbjB,MAAO,CACLpQ,MAAOoa,eAAcrc,KAAK2rB,gBAAiB,UAIjDH,wBACE,OAAOxrB,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,mCACbC,MAAO,CACL,2CAA4CvT,KAAK0qB,SAElD,CACD1qB,KAAK4rB,eAAe,QACpB5rB,KAAK4rB,eAAe,YAGxBC,iBACE,OAAK7rB,KAAKgrB,OAEHhrB,KAAK4U,eAAe,MAAO5U,KAAK6U,aAAa7U,KAAKoR,MAAO,CAC9DkC,YAAa,4BACbjB,MAAO,CACLpQ,MAAOoa,eAAc,IAAMrc,KAAK8rB,iBAAkB,SAL7B,MAS3BT,kBACE,MAAMT,EAA8C,MAA1B5qB,KAAK4qB,kBAC1B5qB,KAAK2qB,gBAAkB,EAAI,GAC5BrR,WAAWtZ,KAAK4qB,mBAEpB,MAAO,CACLmB,QAASnB,EACT,CAAC5qB,KAAKgsB,WAAa,QAAU,QAAS3P,eAAcrc,KAAK2rB,gBAAiB,KAC1E1pB,MAAOoa,eAAcha,KAAKC,IAAI,EAAGtC,KAAK8rB,iBAAmB9rB,KAAK2rB,iBAAkB,OAGpFpV,UACE,MAAO,CACL,8BAA+BvW,KAAK6kB,SACpC,2BAA4B7kB,KAAKisB,MACjC,2BAA4BjsB,KAAK8qB,MACjC,8BAA+B9qB,KAAKksB,SACpC,6BAA8BlsB,KAAKgsB,WACnC,6BAA8BhsB,KAAK+qB,QACnC,6BAA8B/qB,KAAKirB,QACnC,6BAA8BjrB,KAAKmrB,aAChCnrB,KAAKwW,eAGZqQ,qBACE,OAAO7mB,KAAK8kB,cAAgBqH,OAAkBC,QAEhDJ,aACE,OAAOhsB,KAAKwS,SAAS6Z,MAAQrsB,KAAKyN,SAEpCqe,mBACE,OAAO9rB,KAAKssB,UAAUtsB,KAAK6qB,cAE7Bc,kBACE,OAAO3rB,KAAKssB,UAAUtsB,KAAKkrB,oBAE7BgB,WACE,OAAOrjB,QAAQ7I,KAAKwhB,WAAW+K,SAEjCtF,SACE,MAAMA,EAA8B,GAUpC,OARKjnB,KAAK0qB,SACRzD,EAAOzT,OAAS,GAGbxT,KAAK8kB,eAAuD,MAAtCxL,WAAWtZ,KAAK8rB,oBACzC7E,EAAOhlB,MAAQoa,eAAcrc,KAAK8rB,iBAAkB,MAG/C7E,IAIX5mB,QAAS,CACPuoB,aACE,MAAM1U,EAAO6D,eAAQ/X,KAAM,UAAW,CAAEyK,MAAOzK,KAAKkrB,oBAEpD,OAAKhX,EAEElU,KAAK4U,eAAe,MAAO,CAChCtB,YAAa,8BACZY,GAJe,MAMpBsY,eACE,MAAMxE,EAAYhoB,KAAKwhB,WAMvB,OAJIxhB,KAAKksB,WACPlE,EAAUyE,MAAQzsB,KAAK0sB,SAGlB1E,GAET4D,eAAgBzsB,GACd,OAAOa,KAAK4U,eAAe,MAAO5U,KAAK8U,mBAAmB9U,KAAKoR,MAAO,CACpEkC,YAAa,mCACbC,MAAO,CACL,CAACpU,IAAO,OAIdutB,QAASvb,GACP,IAAKnR,KAAKksB,SAAU,OAEpB,MAAM,MAAEjqB,GAAUjC,KAAK2sB,IAAI5a,wBAE3B/R,KAAK4sB,cAAgBzb,EAAE6V,QAAU/kB,EAAQ,KAE3C4qB,UAAWC,EAAsCC,EAAgCC,GAC/EhtB,KAAKmrB,UAAY6B,GAEnBV,UAAW7hB,GACT,OAAIA,EAAQ,EAAU,EAClBA,EAAQ,IAAY,IACjB6O,WAAW7O,KAItBkO,OAAQC,GACN,MAAMlZ,EAAO,CACX4T,YAAa,oBACbG,MAAO,CACLuD,KAAM,cACN,gBAAiB,EACjB,gBAAiBhX,KAAK8rB,iBACtB,gBAAiB9rB,KAAK8kB,mBAAgBrT,EAAYzR,KAAK2rB,iBAEzDpY,MAAOvT,KAAKuW,QACZtJ,WAAY,CAAC,CACX9N,KAAM,YACNsL,MAAOzK,KAAK6sB,YAEdxa,MAAO,CACLH,OAAQlS,KAAKkS,OAAS,OAAIT,EAC1B+B,OAAQxT,KAAK0qB,OAASrO,eAAcrc,KAAKwT,QAAU,EACnDO,IAAK/T,KAAK+T,IAAM,OAAItC,GAEtBsD,GAAI/U,KAAKwsB,gBAGX,OAAO5T,EAAE,MAAOlZ,EAAM,CACpBM,KAAK6rB,eACL7rB,KAAKorB,mBACLprB,KAAK0rB,eACL1rB,KAAKsrB,YACLtrB,KAAK4oB,mB,uKChPI3pB,cAAIC,OAAO,CACxBC,KAAM,oBAEN8tB,YAAY,EAEZhgB,WAAY,CACVigB,eAGF9tB,MAAO,IACFwN,OAAUmB,QAAQ3O,SAClB2N,OAAUgB,QAAQ3O,MACrB+lB,SAAUtc,QACVyH,OAAQ,CACNhR,KAAMuJ,QACNL,SAAS,GAEXiC,MAAO5B,QACPic,cAAejc,QACfskB,kBAAmB,CACjB7tB,KAAMC,OACNiJ,QAAS,0BAEX4kB,OAAQ,CACN9tB,KAAMC,OACNiJ,QAAS,eAEX6kB,QAAS,CACP/tB,KAAMC,OACNiJ,QAAS,iBAIbmQ,OAAQC,GAAG,MAAExZ,EAAF,KAASM,EAAT,UAAesoB,IACxB,MAAMniB,EAAW,GACjB,IAAIynB,EAAOluB,EAAMiuB,QAYjB,GAXIjuB,EAAM0lB,cAAewI,EAAOluB,EAAM+tB,kBAC7B/tB,EAAMqL,QAAO6iB,EAAOluB,EAAMguB,QAEnCvnB,EAAShB,KAAK+T,EAAE2U,OAAO3gB,OAAUmB,QAAQ1N,QAAQwU,aAAazV,EAAMqL,OAASrL,EAAMgS,MAAO,CACxFhS,MAAO,CACL+lB,SAAU/lB,EAAM+lB,SAChBqI,KAAMpuB,EAAMouB,KACZC,MAAOruB,EAAMquB,SAEbH,IAEAluB,EAAMkR,SAAWlR,EAAM+lB,SAAU,CACnC,MAAM7U,EAASsI,EAAE,MAAOhM,OAAUmB,QAAQ1N,QAAQwU,aAAazV,EAAMgS,MAAO,CAC1EkC,YAAa,sCACbrG,WAAY,CAAC,CACXygB,IAAKR,OACL/tB,KAAM,SACNsL,MAAO,CAAEkjB,QAAQ,QAIrB9nB,EAAShB,KAAKyL,GAGhB,OAAOsI,EAAE,MACPgV,eAAUluB,EAAM,CACd6T,MAAO,CACL,qBAAqB,EACrB,8BAA+BnU,EAAM+lB,UAEvCpQ,GAAI,CACF0X,MAAQtb,IACNA,EAAE0c,kBAEEnuB,EAAKqV,IAAMrV,EAAKqV,GAAG5I,QAAU/M,EAAM+lB,UACrC2I,eAAYpuB,EAAKqV,GAAG5I,OAAOlJ,QAAQ8qB,GAAKA,GAAG3uB,EAAMqL,YAIrD,CACFmO,EAAE,MAAO,CAAEtF,YAAa,sCAAwCzN,S,yDC3FxE,0BASekH,cAAU7N,OAAO,CAC9BC,KAAM,YAENC,MAAO,CACL4uB,MAAOnlB,QACPolB,SAAUplB,SAGZ8P,OAAQC,GAEN,IAAIsV,EAIJ,OAHKluB,KAAKmuB,OAAOnX,MAA6B,cAArBhX,KAAKmuB,OAAOnX,OACnCkX,EAAcluB,KAAKiuB,SAAW,WAAa,cAEtCrV,EAAE,KAAM,CACbrF,MAAO,CACL,aAAa,EACb,mBAAoBvT,KAAKguB,MACzB,sBAAuBhuB,KAAKiuB,YACzBjuB,KAAKwW,cAEV/C,MAAO,CACLuD,KAAM,YACN,mBAAoBkX,KACjBluB,KAAKmuB,QAEVpZ,GAAI/U,KAAKwhB,iB,gFCnCf,0HAuBA,MAAM8I,EAAa3d,eACjBC,OACAwhB,OACArhB,OACAshB,eAAiB,iBACjBC,eAAkB,eAYLhE,SAAWprB,SAAkBA,OAAO,CACjDC,KAAM,cAEN8N,WAAY,CACVigB,eAGFqB,OAAQ,CACNC,UAAW,CACThmB,SAAS,GAEXimB,SAAU,CACRjmB,SAAS,GAEXkmB,SAAU,CACRlmB,SAAS,GAEXmmB,QAAS,CACPnmB,SAAS,IAIbomB,cAAc,EAEdxvB,MAAO,CACLyvB,YAAa,CACXvvB,KAAMC,OACNiJ,UACE,OAAKxI,KAAK8uB,cAEH9uB,KAAK8uB,cAAcD,YAFM,KAKpCE,MAAOlmB,QACPmmB,SAAUnmB,QACVomB,KAAMpmB,QACNqmB,WAAY,CACV5vB,KAAMuJ,SAER0c,IAAK,CACHjmB,KAAMC,OACNiJ,QAAS,OAEX2mB,UAAWtmB,QACXumB,QAASvmB,QACT4B,MAAO,MAGT/K,KAAMA,KAAA,CACJ2vB,WAAY,wBAGdvvB,SAAU,CACRyW,UACE,MAAO,CACL,eAAe,KACZ6X,OAASrgB,QAAQjO,SAASyW,QAAQ2R,KAAKloB,MAC1C,qBAAsBA,KAAK+uB,MAC3B,wBAAyB/uB,KAAKmlB,SAC9B,oBAAqBnlB,KAAKsvB,cAAgBtvB,KAAKgvB,SAC/C,0BAA2BhvB,KAAKkvB,WAChC,0BAA2BlvB,KAAKmvB,UAChC,wBAAyBnvB,KAAKovB,WAC3BpvB,KAAKwW,eAGZ8Y,cACE,OAAOzmB,QACLulB,OAASrgB,QAAQjO,SAASwvB,YAAYpH,KAAKloB,OAC3CA,KAAK8uB,iBAKX5uB,UAEMF,KAAKmuB,OAAO7M,eAAe,WAC7BiO,eAAQ,SAAUvvB,OAItBK,QAAS,CACPosB,MAAOtb,GACDA,EAAEqe,QAAQxvB,KAAK2sB,IAAItE,OAEvBroB,KAAKigB,MAAM,QAAS9O,GAEpBnR,KAAKyvB,IAAMzvB,KAAK0vB,UAElBC,WACE,MAAMlc,EAA6B,CACjC,kBAAiBzT,KAAKmlB,eAAkB1T,EACxCme,SAAU5vB,KAAKsvB,cAAgBtvB,KAAKmlB,SAAW,GAAK,KACjDnlB,KAAKmuB,QAiBV,OAdInuB,KAAKmuB,OAAO7M,eAAe,SAEpBthB,KAAK2uB,UAEL3uB,KAAKwuB,WACd/a,EAAMuD,KAAO,SACbvD,EAAM,iBAAmBlU,OAAOS,KAAK8mB,WAC5B9mB,KAAK0uB,UACdjb,EAAMuD,KAAOhX,KAAKsvB,YAAc,gBAAa7d,EAC7CgC,EAAM+P,GAAK/P,EAAM+P,IAAM,aAAaxjB,KAAK6vB,MAChC7vB,KAAKyuB,WACdhb,EAAMuD,KAAO,aAGRvD,GAETic,SACM1vB,KAAKyvB,SAA0Bhe,IAApBzR,KAAK8vB,aAClB9vB,KAAK8mB,UAAY9mB,KAAK8mB,UAExB9mB,KAAKigB,MAAM,YAIftH,OAAQC,GACN,IAAI,IAAE2M,EAAF,KAAO7lB,GAASM,KAAK+vB,oBAEzBrwB,EAAK+T,MAAQ,IACR/T,EAAK+T,SACLzT,KAAK2vB,YAEVjwB,EAAKM,KAAKyvB,GAAK,WAAa,MAAQ,IAC/B/vB,EAAKM,KAAKyvB,GAAK,WAAa,MAC/BnH,QAAUnX,IACHnR,KAAKmlB,WAEJhU,EAAEoX,UAAYC,OAASwH,OAAOhwB,KAAKysB,MAAMtb,GAE7CnR,KAAKigB,MAAM,UAAW9O,MAKxBnR,KAAKgvB,WAAUzJ,EAAM,OACrBvlB,KAAKgvB,UAAYhvB,KAAKyvB,KACxB/vB,EAAKqV,GAAKrV,EAAKuwB,gBACRvwB,EAAKuwB,UAGd,MAAMpqB,EAAWkS,eAAQ/X,KAAM,UAAW,CACxC0qB,OAAQ1qB,KAAK8mB,SACb4I,OAAQ1vB,KAAK0vB,SAGf,OAAO9W,EAAE2M,EAAKvlB,KAAK8mB,SAAW9mB,KAAK6U,aAAa7U,KAAKoR,MAAO1R,GAAQA,EAAMmG,O,kCC9L9E,gBAEe5G,cAAIC,OAAO,CACxBC,KAAM,YAENC,MAAO,CACL2P,OAAQxP,QAGVO,SAAU,CACRoO,gBACE,OAAOlO,KAAK+O,QAAU/O,KAAKwS,SAASC,KAAKyd,a,woCCRxC,MAAMC,EAAc,+EACdC,EAAa,gCAEbC,EAA0B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAC1EC,EAA+B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAC/EC,EAAoB,GACpB9P,EAAoB,GACpB+P,EAAY,GACZC,EAAY,EACZ/P,EAAU,EACVnU,EAAe,EACfmkB,EAAkB,GAClBC,EAAa,GACbvgB,EAAiB,KAEjBwgB,EAAW,GAEXC,EAAc,IACdC,EAAe,IACfC,EAAc,IACdC,EAAc,IAWrB,SAAUpiB,EAAgBF,EAA8BjG,EAAoB5I,GAChF,MAAMgE,EAAQyW,EAAc5L,GAO5B,OANAuiB,EAAYptB,EAAO4E,EAAS,GAAI8X,GAChCnB,EAAgBvb,GACZhE,GACF+gB,EAAe/c,EAAOhE,EAAOgE,EAAM8L,SAG9B9L,EAGH,SAAUgL,EAAcH,EAA8BjG,EAAoB5I,GAC9E,MAAMiE,EAAMwW,EAAc5L,GAO1B,OANAuiB,EAAYntB,EAAK2E,EAASA,EAASrF,OAAS,IAC5Cgc,EAAgBtb,GACZjE,GACF+gB,EAAe9c,EAAKjE,EAAOiE,EAAI6L,SAG1B7L,EAGH,SAAUkV,EAAiBtK,GAC/B,MAAM7K,EAAQyW,EAAc5L,GAK5B,OAJA7K,EAAM3C,IAAMwf,EACZC,EAAc9c,GACdub,EAAgBvb,GAETA,EAGH,SAAUoV,EAAevK,GAC7B,MAAM5K,EAAMwW,EAAc5L,GAK1B,OAJA5K,EAAI5C,IAAMgwB,EAAYptB,EAAI9C,KAAM8C,EAAI7C,OACpC0f,EAAc7c,GACdsb,EAAgBtb,GAETA,EAGH,SAAU8F,EAAcuC,GAC5B,MAAyB,kBAAVA,GAAsBjB,SAASiB,MACzCikB,EAAWe,KAAKhlB,IACD,kBAAVA,GAAsBjB,SAASiB,EAAM9K,OAAS6J,SAASiB,EAAM7K,QAGnE,SAAUkY,EAAWrN,GACzB,GAAqB,kBAAVA,EAET,OAAOA,EACF,GAAqB,kBAAVA,EAAoB,CAEpC,MAAMilB,EAAQhB,EAAWe,KAAKhlB,GAC9B,QAAKilB,GAIuB,GAArBjmB,SAASimB,EAAM,IAAWjmB,SAASimB,EAAM,IAAM,GACjD,MAAqB,kBAAVjlB,IAEU,kBAAfA,EAAM9K,MAA6C,kBAAjB8K,EAAM7K,QAI/B,GAAb6K,EAAM9K,KAAY8K,EAAM7K,QAO7B,SAAU7B,EAAmB0M,GACjC,MAAyB,kBAAVA,GAAsBjB,SAASiB,IAC1B,kBAAVA,KAAwBgkB,EAAYgB,KAAKhlB,IAChDA,aAAiBtL,KAKhB,SAAUjB,EAAgBuM,EAAwB+U,GAAW,EAAO7hB,GAKxE,GAJqB,kBAAV8M,GAAsBjB,SAASiB,KACxCA,EAAQ,IAAItL,KAAKsL,IAGfA,aAAiBtL,KAAM,CACzB,MAAME,EAA0BH,EAAUuL,GAM1C,OAJI9M,GACFuhB,EAAe7f,EAAM1B,EAAK0B,EAAK4O,SAG1B5O,EAGT,GAAqB,kBAAVoL,EAAoB,CAC7B,GAAI+U,EACF,MAAM,IAAI3B,MAASpT,EAAH,oMAElB,OAAO,KAIT,MAAMilB,EAAQjB,EAAYgB,KAAKhlB,GAE/B,IAAKilB,EAAO,CACV,GAAIlQ,EACF,MAAM,IAAI3B,MAASpT,EAAH,oMAGlB,OAAO,KAGT,MAAMuC,EAA+B,CACnC3N,KAAMoL,EACN/K,KAAM,GACNJ,KAAMmK,SAASimB,EAAM,IACrBnwB,MAAOkK,SAASimB,EAAM,IACtBlwB,IAAKiK,SAASimB,EAAM,KAAO,EAC3B/vB,KAAM8J,SAASimB,EAAM,KAAO,EAC5B9vB,OAAQ6J,SAASimB,EAAM,KAAO,EAC9BjwB,QAAS,EACTkwB,SAAUD,EAAM,GAChBzhB,WAAYyhB,EAAM,KAAMA,EAAM,IAC9B7wB,MAAM,EACND,SAAS,EACTE,QAAQ,GAUV,OAPAmgB,EAAcjS,GACd0Q,EAAgB1Q,GAEZrP,GACFuhB,EAAelS,EAAWrP,EAAKqP,EAAUiB,SAGpCjB,EAGH,SAAU9N,EAAWG,GACzB,OAAOqe,EAAgB,CACrBre,KAAM,GACNK,KAAM,GACNJ,KAAMD,EAAKuwB,cACXrwB,MAAOF,EAAKwwB,WAAa,EACzBrwB,IAAKH,EAAKywB,UACVrwB,QAASJ,EAAK0wB,SACdpwB,KAAMN,EAAK2wB,WACXpwB,OAAQP,EAAK4wB,aACbN,QAAQ,EACR1hB,SAAS,EACTpP,MAAM,EACND,SAAS,EACTE,QAAQ,IAIN,SAAUiP,EAAkBf,GAChC,OAAOA,EAAU1N,KAAO6vB,EAAcniB,EAAUzN,MAAQ6vB,EAAepiB,EAAUxN,IAG7E,SAAU0wB,EAAmBljB,GACjC,OAAOA,EAAUrN,KAAO0vB,EAAcriB,EAAUpN,OAG5C,SAAUoD,EAAwBgK,GACtC,OAAOe,EAAiBf,GAAasiB,EAAcY,EAAkBljB,GAGjE,SAAUkS,EAAgBlS,EAA8BrP,EAAwB+B,GAAO,GAC3F,IAAIe,EAAIsN,EAAiBpQ,GACrB+C,EAAIqN,EAAiBf,GACrBpO,EAAU6B,IAAMC,EAYpB,OAVIsM,EAAUiB,SAAWvO,GAAQd,IAC/B6B,EAAIyvB,EAAkBvyB,GACtB+C,EAAIwvB,EAAkBljB,GACtBpO,EAAU6B,IAAMC,GAGlBsM,EAAUnO,KAAO6B,EAAID,EACrBuM,EAAUpO,QAAUA,EACpBoO,EAAUlO,OAAS4B,EAAID,EAEhBuM,EAGH,SAAUa,EAAapD,GAC3B,OAAQA,aAAiBtL,MAA2B,kBAAVsL,GAAsBjB,SAASiB,GAGrE,SAAUqD,EAAed,EAA8BiB,EAAkBtQ,GAa7E,OAZIqP,EAAUiB,UAAYA,IACxBjB,EAAUiB,QAAUA,EACfA,IACHjB,EAAUrN,KAAOuvB,EACjBliB,EAAUpN,OAASqvB,EACnBjiB,EAAUtN,KAAO0f,EAAQpS,IAEvBrP,GACFuhB,EAAelS,EAAWrP,EAAKqP,EAAUiB,UAItCjB,EAGH,SAAUsM,EAAetM,EAA8B5G,EAAiBzI,GAS5E,OARAqP,EAAUiB,SAAU,EACpBjB,EAAUrN,KAAOgB,KAAK6F,MAAMJ,EAAU4oB,GACtChiB,EAAUpN,OAASwG,EAAU4oB,EAC7BhiB,EAAUtN,KAAO0f,EAAQpS,GACrBrP,GACFuhB,EAAelS,EAAWrP,GAAK,GAG1BqP,EAGH,SAAUiS,EAAejS,GAG7B,OAFAA,EAAUvN,QAAU0wB,EAAWnjB,GAExBA,EAGH,SAAU0Q,EAAiB1Q,GAI/B,OAHAA,EAAUtN,KAAO0f,EAAQpS,GACzBA,EAAU3N,KAAOywB,EAAQ9iB,GAElBA,EAGH,SAAUmjB,EAAYnjB,GAC1B,GAAIA,EAAU2iB,OAAQ,CACpB,MAAMS,EAAIzvB,KAAK6F,MACThE,EAAIwK,EAAUxN,IACd6wB,GAAMrjB,EAAUzN,MAAQ,GAAKuvB,EAAa,EAC1CwB,EAAIF,EAAEpjB,EAAU1N,KAAO,KACvBixB,EAAKvjB,EAAU1N,KAAO,KAAQ0N,EAAUzN,OAAS,EAAI,EAAI,GAE/D,QAAUiD,EAAI4tB,EAAE,IAAMC,EAAI,IAAO,EAAIC,EAAIC,EAAIH,EAAEG,EAAI,GAAKH,EAAEE,EAAI,IAAM,EAAK,GAAK,EAGhF,OAAOtjB,EAAUvN,QAGb,SAAU+vB,EAAalwB,EAAcC,GACzC,OAAO+oB,eAAWhpB,GAAQsvB,EAAmBrvB,GAASovB,EAAcpvB,GAGhE,SAAUqZ,EAAe5L,GAC7B,MAAM,KAAE3N,EAAF,KAAQK,EAAR,KAAcJ,EAAd,MAAoBC,EAApB,IAA2BC,EAA3B,QAAgCC,EAAhC,KAAyCE,EAAzC,OAA+CC,EAA/C,OAAuD+vB,EAAvD,QAA+D1hB,EAA/D,KAAwEpP,EAAxE,QAA8ED,EAA9E,OAAuFE,GAAWkO,EAExG,MAAO,CAAE3N,OAAMK,OAAMJ,OAAMC,QAAOC,MAAKC,UAASE,OAAMC,SAAQ+vB,SAAQ1hB,UAASpP,OAAMD,UAASE,UAG1F,SAAU0xB,EAAWjnB,EAAW7H,GACpC,IAAI+uB,EAAS5yB,OAAO0L,GACpB,MAAOknB,EAAO/uB,OAASA,EACrB+uB,EAAS,IAAMA,EAGjB,OAAOA,EAGH,SAAUX,EAAS9iB,GACvB,IAAI0jB,EAAM,GAAGF,EAAUxjB,EAAU1N,KAAM,MAAMkxB,EAAUxjB,EAAUzN,MAAO,KAIxE,OAFIyN,EAAU2iB,SAAQe,GAAO,IAAIF,EAAUxjB,EAAUxN,IAAK,IAEnDkxB,EAGH,SAAUtR,EAASpS,GACvB,OAAKA,EAAUiB,QAIR,GAAGuiB,EAAUxjB,EAAUrN,KAAM,MAAM6wB,EAAUxjB,EAAUpN,OAAQ,KAH7D,GAoBL,SAAU6d,EAASzQ,GAYvB,OAXAA,EAAUxN,MACVwN,EAAUvN,SAAWuN,EAAUvN,QAAU,GAAKoL,EAC1CmC,EAAUxN,IAAMqvB,GAAqB7hB,EAAUxN,IAAMgwB,EAAYxiB,EAAU1N,KAAM0N,EAAUzN,SAC7FyN,EAAUxN,IAAMwf,EAChBhS,EAAUzN,QACNyN,EAAUzN,MAAQuvB,IACpB9hB,EAAUzN,MAAQwvB,EAClB/hB,EAAU1N,SAIP0N,EAGH,SAAU6R,EAAS7R,GAYvB,OAXAA,EAAUxN,MACVwN,EAAUvN,SAAWuN,EAAUvN,QAAU,GAAKoL,EAC1CmC,EAAUxN,IAAMwf,IAClBhS,EAAUzN,QACNyN,EAAUzN,MAAQwvB,IACpB/hB,EAAU1N,OACV0N,EAAUzN,MAAQuvB,GAEpB9hB,EAAUxN,IAAMgwB,EAAYxiB,EAAU1N,KAAM0N,EAAUzN,QAGjDyN,EAGH,SAAUwQ,EACdxQ,EACA4R,EAAoCnB,EACpCvR,EAAO,GAEP,QAASA,GAAQ,EAAG0S,EAAM5R,GAE1B,OAAOA,EAGH,SAAU8F,EAAa7Q,EAAwBrB,GACnD,MAAM2vB,EAA4B,QAAvB3vB,EAAItB,KAAO2C,EAAI3C,MACpBqxB,EAA8B,OAAzB/vB,EAAIrB,MAAQ0C,EAAI1C,OACrBqxB,EAA0B,MAArBhwB,EAAIpB,IAAMyC,EAAIzC,KACnB0X,EAA4B,IAAvBtW,EAAIjB,KAAOsC,EAAItC,MACpB0wB,EAAKzvB,EAAIhB,OAASqC,EAAIrC,OAE5B,OAAO2wB,EAAII,EAAIC,EAAI1Z,EAAImZ,EAGnB,SAAUd,EAAaviB,EAA8BvN,EACzDmf,EAAoCnB,EAAShW,EAAU,GACvD,MAAOuF,EAAUvN,UAAYA,KAAagI,GAAW,EAAGmX,EAAM5R,GAE9D,OAAOA,EAGH,SAAUrB,EAAiB5E,GAC/B,MAAM8pB,EAAkB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACrCC,EAAmB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC5C,IAAK,IAAIxuB,EAAI,EAAGA,EAAIyE,EAASrF,OAAQY,IACnCwuB,EAAO/pB,EAASzE,IAAM,EAExB,IAAK,IAAIE,EAAI,EAAGA,EAAIqI,EAAcrI,IAAK,CACrC,IAAIuuB,EAAO,EACX,IAAK,IAAIrU,EAAI,EAAGA,EAAI7R,EAAc6R,IAAK,CACrC,MAAM2C,GAAQ7c,EAAIka,GAAK7R,EACvB,GAAIimB,EAAOzR,GACT,MAEF0R,IAEFF,EAAMruB,GAAKsuB,EAAOtuB,GAAKuuB,EAGzB,OAAOF,EAGH,SAAU1R,EAAiBnS,GAC/B,MAAMtN,EAAO,GAAG8wB,EAAUxjB,EAAUrN,KAAM,MAAM6wB,EAAUxjB,EAAUpN,OAAQ,KACtEP,EAAO2N,EAAU3N,KAEvB,OAAO,IAAIF,KAAK,GAAGE,KAAQK,cAGvB,SAAUyM,EACdhK,EACAC,EACAzE,EACA+N,EACA9K,EAAM,GACNqB,EAAM,GAEN,MAAM4U,EAAO9I,EAAiB3L,GACxB8J,EAA4B,GAClC,IAAIsiB,EAAU5V,EAAczW,GACxB6uB,EAAoB,EACpBC,EAAUD,IAAsBna,EAEpC,GAAIA,EAAO9I,EAAiB5L,GAC1B,MAAM,IAAI0b,MAAM,wCAGlB,QAASoT,GAAW/kB,EAAKxK,OAASO,IAAQiK,EAAKxK,OAASd,EAAK,CAG3D,GAFAowB,EAAoBjjB,EAAiBygB,GACrCyC,EAAUA,GAAWD,IAAsBna,EACL,IAAlCnL,EAAa8iB,EAAQ/uB,SAAgB,CACvC+uB,EAAU/Q,EAAQ+Q,GAClB,SAEF,MAAMhvB,EAAMoZ,EAAc4V,GAC1B9Q,EAAgBle,GAChB0f,EAAe1f,EAAK7B,GACpBuO,EAAK/I,KAAK3D,GACVgvB,EAAUhR,EAAagR,EAAS/Q,EAAS/R,EAAa8iB,EAAQ/uB,UAGhE,IAAKyM,EAAKxK,OAAQ,MAAM,IAAImc,MAAM,sEAElC,OAAO3R,EAGH,SAAUgM,GAAoBlL,EAA8BlH,EAChEM,EAAiB6R,EAAeta,GAChC,MAAM6J,EAAiC,GAEvC,IAAK,IAAIlF,EAAI,EAAGA,EAAI2V,EAAO3V,IAAK,CAC9B,MAAM4uB,EAAOprB,EAASxD,EAAI8D,EACpB+qB,EAAMvY,EAAc5L,GAC1BxF,EAAUrE,KAAKmW,EAAc6X,EAAKD,EAAMvzB,IAG1C,OAAO6J,EAGH,SAAU+E,GAA6Bc,EAAgB+jB,GAC3D,MAAMC,EAAoCA,CAACC,EAAIC,IAAO,GAEtD,MAAoB,qBAATC,MAAuD,qBAAxBA,KAAKC,eACtCJ,EAGF,CAACrkB,EAAWF,KACjB,IACE,MAAM4kB,EAAgB,IAAIF,KAAKC,eAAepkB,QAAU0C,EAAWqhB,EAAWpkB,EAAWF,IAEzF,OAAO4kB,EAAcC,OAAOxS,EAAgBnS,IAC5C,MAAOyC,GACP,MAAO,O","file":"js/chunk-7b7ef6d4.4e35b4df.js","sourcesContent":["import Vue from 'vue'\n\nimport {\n validateTimestamp,\n parseTimestamp,\n parseDate,\n} from '../util/timestamp'\nimport { CalendarTimestamp } from 'vuetify/types'\n\nexport default Vue.extend({\n name: 'times',\n\n props: {\n now: {\n type: String,\n validator: validateTimestamp,\n },\n },\n\n data: () => ({\n times: {\n now: parseTimestamp('0000-00-00 00:00', true),\n today: parseTimestamp('0000-00-00', true),\n },\n }),\n\n computed: {\n parsedNow (): CalendarTimestamp | null {\n return this.now ? parseTimestamp(this.now, true) : null\n },\n },\n\n watch: {\n parsedNow: 'updateTimes',\n },\n\n created () {\n this.updateTimes()\n this.setPresent()\n },\n\n methods: {\n setPresent (): void {\n this.times.now.present = this.times.today.present = true\n this.times.now.past = this.times.today.past = false\n this.times.now.future = this.times.today.future = false\n },\n updateTimes (): void {\n const now: CalendarTimestamp = this.parsedNow || this.getNow()\n this.updateDay(now, this.times.now)\n this.updateTime(now, this.times.now)\n this.updateDay(now, this.times.today)\n },\n getNow (): CalendarTimestamp {\n return parseDate(new Date())\n },\n updateDay (now: CalendarTimestamp, target: CalendarTimestamp): void {\n if (now.date !== target.date) {\n target.year = now.year\n target.month = now.month\n target.day = now.day\n target.weekday = now.weekday\n target.date = now.date\n }\n },\n updateTime (now: CalendarTimestamp, target: CalendarTimestamp): void {\n if (now.time !== target.time) {\n target.hour = now.hour\n target.minute = now.minute\n target.time = now.time\n }\n },\n },\n})\n","import { CalendarEventParsed, CalendarEventVisual, CalendarTimestamp } from 'vuetify/types'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\nconst MILLIS_IN_DAY = 86400000\n\nexport type GetRange = (event: CalendarEventParsed) => [number, number]\n\nexport function getVisuals (events: CalendarEventParsed[], minStart = 0): CalendarEventVisual[] {\n const visuals = events.map(event => ({\n event,\n columnCount: 0,\n column: 0,\n left: 0,\n width: 100,\n }))\n\n visuals.sort((a, b) => {\n return (Math.max(minStart, a.event.startTimestampIdentifier) - Math.max(minStart, b.event.startTimestampIdentifier)) ||\n (b.event.endTimestampIdentifier - a.event.endTimestampIdentifier)\n })\n\n return visuals\n}\n\nexport interface ColumnGroup {\n start: number\n end: number\n visuals: CalendarEventVisual[]\n}\n\nexport function hasOverlap (s0: number, e0: number, s1: number, e1: number, exclude = true): boolean {\n return exclude ? !(s0 >= e1 || e0 <= s1) : !(s0 > e1 || e0 < s1)\n}\n\nexport function setColumnCount (groups: ColumnGroup[]) {\n groups.forEach(group => {\n group.visuals.forEach(groupVisual => {\n groupVisual.columnCount = groups.length\n })\n })\n}\n\nexport function getRange (event: CalendarEventParsed): [number, number] {\n return [event.startTimestampIdentifier, event.endTimestampIdentifier]\n}\n\nexport function getDayRange (event: CalendarEventParsed): [number, number] {\n return [event.startIdentifier, event.endIdentifier]\n}\n\nexport function getNormalizedRange (event: CalendarEventParsed, dayStart: number): [number, number] {\n return [Math.max(dayStart, event.startTimestampIdentifier), Math.min(dayStart + MILLIS_IN_DAY, event.endTimestampIdentifier)]\n}\n\nexport function getOpenGroup (groups: ColumnGroup[], start: number, end: number, timed: boolean) {\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i]\n let intersected = false\n\n if (hasOverlap(start, end, group.start, group.end, timed)) {\n for (let k = 0; k < group.visuals.length; k++) {\n const groupVisual = group.visuals[k]\n const [groupStart, groupEnd] = timed ? getRange(groupVisual.event) : getDayRange(groupVisual.event)\n\n if (hasOverlap(start, end, groupStart, groupEnd, timed)) {\n intersected = true\n break\n }\n }\n }\n\n if (!intersected) {\n return i\n }\n }\n\n return -1\n}\n\nexport function getOverlapGroupHandler (firstWeekday: number) {\n const handler = {\n groups: [] as ColumnGroup[],\n min: -1,\n max: -1,\n reset: () => {\n handler.groups = []\n handler.min = handler.max = -1\n },\n getVisuals: (day: CalendarTimestamp, dayEvents: CalendarEventParsed[], timed: boolean, reset = false) => {\n if (day.weekday === firstWeekday || reset) {\n handler.reset()\n }\n\n const dayStart = getTimestampIdentifier(day)\n const visuals = getVisuals(dayEvents, dayStart)\n\n visuals.forEach(visual => {\n const [start, end] = timed ? getRange(visual.event) : getDayRange(visual.event)\n\n if (handler.groups.length > 0 && !hasOverlap(start, end, handler.min, handler.max, timed)) {\n setColumnCount(handler.groups)\n handler.reset()\n }\n\n let targetGroup = getOpenGroup(handler.groups, start, end, timed)\n\n if (targetGroup === -1) {\n targetGroup = handler.groups.length\n\n handler.groups.push({ start, end, visuals: [] })\n }\n\n const target = handler.groups[targetGroup]\n target.visuals.push(visual)\n target.start = Math.min(target.start, start)\n target.end = Math.max(target.end, end)\n\n visual.column = targetGroup\n\n if (handler.min === -1) {\n handler.min = start\n handler.max = end\n } else {\n handler.min = Math.min(handler.min, start)\n handler.max = Math.max(handler.max, end)\n }\n })\n\n setColumnCount(handler.groups)\n\n if (timed) {\n handler.reset()\n }\n\n return visuals\n },\n }\n\n return handler\n}\n","import { CalendarEventOverlapMode, CalendarEventVisual } from 'vuetify/types'\nimport { getOverlapGroupHandler, getVisuals, hasOverlap, getNormalizedRange } from './common'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\ninterface Group {\n start: number\n end: number\n visuals: CalendarEventVisual[]\n}\n\ninterface Node {\n parent: Node | null\n sibling: boolean\n index: number\n visual: CalendarEventVisual\n start: number\n end: number\n children: Node[]\n}\n\nconst FULL_WIDTH = 100\n\nconst DEFAULT_OFFSET = 5\n\nconst WIDTH_MULTIPLIER = 1.7\n\n/**\n * Variation of column mode where events can be stacked. The priority of this\n * mode is to stack events together taking up the least amount of space while\n * trying to ensure the content of the event is always visible as well as its\n * start and end. A sibling column has intersecting event content and must be\n * placed beside each other. Non-sibling columns are offset by 5% from the\n * previous column. The width is scaled by 1.7 so the events overlap and\n * whitespace is reduced. If there is a hole in columns the event width is\n * scaled up so it intersects with the next column. The columns have equal\n * width in the space they are given. If the event doesn't have any to the\n * right of it that intersect with it's content it's right side is extended\n * to the right side.\n */\n\nexport const stack: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday)\n\n // eslint-disable-next-line max-statements\n return (day, dayEvents, timed, reset) => {\n if (!timed) {\n return handler.getVisuals(day, dayEvents, timed, reset)\n }\n\n const dayStart = getTimestampIdentifier(day)\n const visuals = getVisuals(dayEvents, dayStart)\n const groups = getGroups(visuals, dayStart)\n\n for (const group of groups) {\n const nodes: Node[] = []\n\n for (const visual of group.visuals) {\n const child = getNode(visual, dayStart)\n const index = getNextIndex(child, nodes)\n\n if (index === false) {\n const parent = getParent(child, nodes)\n if (parent) {\n child.parent = parent\n child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n child.index = parent.index + 1\n parent.children.push(child)\n }\n } else {\n const [parent] = getOverlappingRange(child, nodes, index - 1, index - 1)\n const children = getOverlappingRange(child, nodes, index + 1, index + nodes.length, true)\n\n child.children = children\n child.index = index\n\n if (parent) {\n child.parent = parent\n child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n parent.children.push(child)\n }\n\n for (const grand of children) {\n if (grand.parent === parent) {\n grand.parent = child\n }\n\n const grandNext = grand.index - child.index <= 1\n if (grandNext && child.sibling &&\n hasOverlap(child.start, addTime(child.start, overlapThreshold), grand.start, grand.end)) {\n grand.sibling = true\n }\n }\n }\n\n nodes.push(child)\n }\n\n calculateBounds(nodes, overlapThreshold)\n }\n\n visuals.sort((a, b) => (a.left - b.left) || (a.event.startTimestampIdentifier - b.event.startTimestampIdentifier))\n\n return visuals\n }\n}\n\nfunction calculateBounds (nodes: Node[], overlapThreshold: number) {\n for (const node of nodes) {\n const { visual, parent } = node\n const columns = getMaxChildIndex(node) + 1\n const spaceLeft = parent ? parent.visual.left : 0\n const spaceWidth = FULL_WIDTH - spaceLeft\n const offset = Math.min(DEFAULT_OFFSET, FULL_WIDTH / columns)\n const columnWidthMultiplier = getColumnWidthMultiplier(node, nodes)\n const columnOffset = spaceWidth / (columns - node.index + 1)\n const columnWidth = spaceWidth / (columns - node.index + (node.sibling ? 1 : 0)) * columnWidthMultiplier\n\n if (parent) {\n visual.left = node.sibling\n ? spaceLeft + columnOffset\n : spaceLeft + offset\n }\n\n visual.width = hasFullWidth(node, nodes, overlapThreshold)\n ? FULL_WIDTH - visual.left\n : Math.min(FULL_WIDTH - visual.left, columnWidth * WIDTH_MULTIPLIER)\n }\n}\n\nfunction getColumnWidthMultiplier (node: Node, nodes: Node[]): number {\n if (!node.children.length) {\n return 1\n }\n\n const maxColumn = node.index + nodes.length\n const minColumn = node.children.reduce((min, c) => Math.min(min, c.index), maxColumn)\n\n return minColumn - node.index\n}\n\nfunction getOverlappingIndices (node: Node, nodes: Node[]): number[] {\n const indices: number[] = []\n for (const other of nodes) {\n if (hasOverlap(node.start, node.end, other.start, other.end)) {\n indices.push(other.index)\n }\n }\n return indices\n}\n\nfunction getNextIndex (node: Node, nodes: Node[]): number | false {\n const indices = getOverlappingIndices(node, nodes)\n indices.sort()\n\n for (let i = 0; i < indices.length; i++) {\n if (i < indices[i]) {\n return i\n }\n }\n return false\n}\n\nfunction getOverlappingRange (node: Node, nodes: Node[], indexMin: number, indexMax: number, returnFirstColumn = false): Node[] {\n const overlapping: Node[] = []\n for (const other of nodes) {\n if (other.index >= indexMin && other.index <= indexMax && hasOverlap(node.start, node.end, other.start, other.end)) {\n overlapping.push(other)\n }\n }\n if (returnFirstColumn && overlapping.length > 0) {\n const first = overlapping.reduce((min, n) => Math.min(min, n.index), overlapping[0].index)\n return overlapping.filter(n => n.index === first)\n }\n return overlapping\n}\n\nfunction getParent (node: Node, nodes: Node[]): Node | null {\n let parent: Node | null = null\n for (const other of nodes) {\n if (hasOverlap(node.start, node.end, other.start, other.end) && (parent === null || other.index > parent.index)) {\n parent = other\n }\n }\n return parent\n}\n\nfunction hasFullWidth (node: Node, nodes: Node[], overlapThreshold: number): boolean {\n for (const other of nodes) {\n if (other !== node &&\n other.index > node.index &&\n hasOverlap(node.start, addTime(node.start, overlapThreshold), other.start, other.end)) {\n return false\n }\n }\n\n return true\n}\n\nfunction getGroups (visuals: CalendarEventVisual[], dayStart: number): Group[] {\n const groups: Group[] = []\n\n for (const visual of visuals) {\n const [start, end] = getNormalizedRange(visual.event, dayStart)\n let added = false\n\n for (const group of groups) {\n if (hasOverlap(start, end, group.start, group.end)) {\n group.visuals.push(visual)\n group.end = Math.max(group.end, end)\n added = true\n break\n }\n }\n\n if (!added) {\n groups.push({ start, end, visuals: [visual] })\n }\n }\n\n return groups\n}\n\nfunction getNode (visual: CalendarEventVisual, dayStart: number): Node {\n const [start, end] = getNormalizedRange(visual.event, dayStart)\n\n return {\n parent: null,\n sibling: true,\n index: 0,\n visual,\n start,\n end,\n children: [],\n }\n}\n\nfunction getMaxChildIndex (node: Node): number {\n let max = node.index\n for (const child of node.children) {\n const childMax = getMaxChildIndex(child)\n if (childMax > max) {\n max = childMax\n }\n }\n return max\n}\n\nfunction addTime (identifier: number, minutes: number): number {\n const removeMinutes = identifier % 100\n const totalMinutes = removeMinutes + minutes\n const addHours = Math.floor(totalMinutes / 60)\n const addMinutes = totalMinutes % 60\n\n return identifier - removeMinutes + addHours * 100 + addMinutes\n}\n","import { CalendarEventOverlapMode } from 'vuetify/types'\nimport { getOverlapGroupHandler } from './common'\n\nconst FULL_WIDTH = 100\n\nexport const column: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday)\n\n return (day, dayEvents, timed, reset) => {\n const visuals = handler.getVisuals(day, dayEvents, timed, reset)\n\n if (timed) {\n visuals.forEach(visual => {\n visual.left = visual.column * FULL_WIDTH / visual.columnCount\n visual.width = FULL_WIDTH / visual.columnCount\n })\n }\n\n return visuals\n }\n}\n","import { CalendarEventOverlapMode } from 'vuetify/types'\nimport { stack } from './stack'\nimport { column } from './column'\n\nexport const CalendarEventOverlapModes: Record = {\n stack,\n column,\n}\n","\nimport { validateTimestamp, parseDate, DAYS_IN_WEEK, validateTime } from './timestamp'\nimport { PropType } from 'vue'\nimport { CalendarEvent, CalendarFormatter, CalendarTimestamp, CalendarEventOverlapMode, CalendarEventNameFunction, CalendarEventColorFunction, CalendarEventCategoryFunction, CalendarEventTimedFunction, CalendarCategoryTextFunction, CalendarCategory } from 'vuetify/types'\nimport { CalendarEventOverlapModes } from '../modes'\nimport { PropValidator } from 'vue/types/options'\n\nexport default {\n base: {\n start: {\n type: [String, Number, Date],\n validate: validateTimestamp,\n default: () => parseDate(new Date()).date,\n },\n end: {\n type: [String, Number, Date],\n validate: validateTimestamp,\n },\n weekdays: {\n type: [Array, String] as PropType,\n default: () => [0, 1, 2, 3, 4, 5, 6],\n validate: validateWeekdays,\n },\n hideHeader: {\n type: Boolean,\n },\n shortWeekdays: {\n type: Boolean,\n default: true,\n },\n weekdayFormat: {\n type: Function as PropType,\n default: null,\n },\n dayFormat: {\n type: Function as PropType,\n default: null,\n },\n },\n intervals: {\n maxDays: {\n type: Number,\n default: 7,\n },\n shortIntervals: {\n type: Boolean,\n default: true,\n },\n intervalHeight: {\n type: [Number, String],\n default: 48,\n validate: validateNumber,\n },\n intervalWidth: {\n type: [Number, String],\n default: 60,\n validate: validateNumber,\n },\n intervalMinutes: {\n type: [Number, String],\n default: 60,\n validate: validateNumber,\n },\n firstInterval: {\n type: [Number, String],\n default: 0,\n validate: validateNumber,\n },\n firstTime: {\n type: [Number, String, Object],\n validate: validateTime,\n },\n intervalCount: {\n type: [Number, String],\n default: 24,\n validate: validateNumber,\n },\n intervalFormat: {\n type: Function as PropType,\n default: null,\n },\n intervalStyle: {\n type: Function as PropType<(interval: CalendarTimestamp) => object>,\n default: null,\n },\n showIntervalLabel: {\n type: Function as PropType<(interval: CalendarTimestamp) => boolean>,\n default: null,\n },\n },\n weeks: {\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n minWeeks: {\n validate: validateNumber,\n default: 1,\n },\n shortMonths: {\n type: Boolean,\n default: true,\n },\n showMonthOnFirst: {\n type: Boolean,\n default: true,\n },\n showWeek: Boolean,\n monthFormat: {\n type: Function as PropType,\n default: null,\n },\n },\n calendar: {\n type: {\n type: String,\n default: 'month',\n },\n value: {\n type: [String, Number, Date] as PropType,\n validate: validateTimestamp,\n },\n },\n category: {\n categories: {\n type: [Array, String] as PropType,\n default: '',\n },\n categoryText: {\n type: [String, Function] as PropType,\n },\n categoryHideDynamic: {\n type: Boolean,\n },\n categoryShowAll: {\n type: Boolean,\n },\n categoryForInvalid: {\n type: String,\n default: '',\n },\n categoryDays: {\n type: [Number, String],\n default: 1,\n validate: (x: any) => isFinite(parseInt(x)) && parseInt(x) > 0,\n },\n },\n events: {\n events: {\n type: Array,\n default: () => [],\n } as PropValidator,\n eventStart: {\n type: String,\n default: 'start',\n },\n eventEnd: {\n type: String,\n default: 'end',\n },\n eventTimed: {\n type: [String, Function] as PropType,\n default: 'timed',\n },\n eventCategory: {\n type: [String, Function] as PropType,\n default: 'category',\n },\n eventHeight: {\n type: Number,\n default: 20,\n },\n eventColor: {\n type: [String, Function] as PropType,\n default: 'primary',\n },\n eventTextColor: {\n type: [String, Function] as PropType,\n default: 'white',\n },\n eventName: {\n type: [String, Function] as PropType,\n default: 'name',\n },\n eventOverlapThreshold: {\n type: [String, Number],\n default: 60,\n },\n eventOverlapMode: {\n type: [String, Function],\n default: 'stack',\n validate: (mode: any) => mode in CalendarEventOverlapModes || typeof mode === 'function',\n } as PropValidator<'stack' | 'column' | CalendarEventOverlapMode>,\n eventMore: {\n type: Boolean,\n default: true,\n },\n eventMoreText: {\n type: String,\n default: '$vuetify.calendar.moreEvents',\n },\n eventRipple: {\n type: [Boolean, Object],\n default: null,\n },\n eventMarginBottom: {\n type: Number,\n default: 1,\n },\n },\n}\n\nexport function validateNumber (input: any): boolean {\n return isFinite(parseInt(input))\n}\n\nexport function validateWeekdays (input: string | (number | string)[]): boolean {\n if (typeof input === 'string') {\n input = input.split(',')\n }\n\n if (Array.isArray(input)) {\n const ints = input.map(x => parseInt(x))\n\n if (ints.length > DAYS_IN_WEEK || ints.length === 0) {\n return false\n }\n\n const visited: Record = {}\n let wrapped = false\n\n for (let i = 0; i < ints.length; i++) {\n const x = ints[i]\n\n if (!isFinite(x) || x < 0 || x >= DAYS_IN_WEEK) {\n return false\n }\n\n if (i > 0) {\n const d = x - ints[i - 1]\n if (d < 0) {\n if (wrapped) {\n return false\n }\n wrapped = true\n } else if (d === 0) {\n return false\n }\n }\n\n if (visited[x]) {\n return false\n }\n visited[x] = true\n }\n\n return true\n }\n\n return false\n}\n","\n// Mixins\nimport mixins from '../../../util/mixins'\nimport Colorable from '../../../mixins/colorable'\nimport Localable from '../../../mixins/localable'\nimport Mouse from '../../../mixins/mouse'\nimport Themeable from '../../../mixins/themeable'\nimport Times from './times'\n\n// Directives\nimport Resize from '../../../directives/resize'\n\n// Util\nimport props from '../util/props'\nimport {\n parseTimestamp,\n getWeekdaySkips,\n createDayList,\n createNativeLocaleFormatter,\n getStartOfWeek,\n getEndOfWeek,\n getTimestampIdentifier,\n} from '../util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\n\nexport default mixins(\n Colorable,\n Localable,\n Mouse,\n Themeable,\n Times\n/* @vue/component */\n).extend({\n name: 'calendar-base',\n\n directives: {\n Resize,\n },\n\n props: props.base,\n\n computed: {\n parsedWeekdays (): number[] {\n return Array.isArray(this.weekdays)\n ? this.weekdays\n : (this.weekdays || '').split(',').map(x => parseInt(x, 10))\n },\n weekdaySkips (): number[] {\n return getWeekdaySkips(this.parsedWeekdays)\n },\n weekdaySkipsReverse (): number [] {\n const reversed = this.weekdaySkips.slice()\n reversed.reverse()\n return reversed\n },\n parsedStart (): CalendarTimestamp {\n return parseTimestamp(this.start, true)\n },\n parsedEnd (): CalendarTimestamp {\n const start = this.parsedStart\n const end: CalendarTimestamp = this.end ? parseTimestamp(this.end) || start : start\n\n return getTimestampIdentifier(end) < getTimestampIdentifier(start) ? start : end\n },\n days (): CalendarTimestamp[] {\n return createDayList(\n this.parsedStart,\n this.parsedEnd,\n this.times.today,\n this.weekdaySkips\n )\n },\n dayFormatter (): CalendarFormatter {\n if (this.dayFormat) {\n return this.dayFormat as CalendarFormatter\n }\n\n const options = { timeZone: 'UTC', day: 'numeric' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, _short) => options\n )\n },\n weekdayFormatter (): CalendarFormatter {\n if (this.weekdayFormat) {\n return this.weekdayFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', weekday: 'long' }\n const shortOptions = { timeZone: 'UTC', weekday: 'short' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, short) => short ? shortOptions : longOptions\n )\n },\n },\n\n methods: {\n getRelativeClasses (timestamp: CalendarTimestamp, outside = false): object {\n return {\n 'v-present': timestamp.present,\n 'v-past': timestamp.past,\n 'v-future': timestamp.future,\n 'v-outside': outside,\n }\n },\n getStartOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n return getStartOfWeek(timestamp, this.parsedWeekdays, this.times.today)\n },\n getEndOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n return getEndOfWeek(timestamp, this.parsedWeekdays, this.times.today)\n },\n getFormatter (options: object): CalendarFormatter {\n return createNativeLocaleFormatter(\n this.locale,\n (_tms, _short) => options\n )\n },\n },\n})\n","import {\n parseTimestamp,\n getDayIdentifier,\n getTimestampIdentifier,\n isTimedless,\n updateHasTime,\n} from './timestamp'\nimport { CalendarTimestamp, CalendarEvent, CalendarEventParsed } from 'vuetify/types'\n\nexport function parseEvent (\n input: CalendarEvent,\n index: number,\n startProperty: string,\n endProperty: string,\n timed = false,\n category: string | false = false,\n): CalendarEventParsed {\n const startInput = input[startProperty]\n const endInput = input[endProperty]\n const startParsed: CalendarTimestamp = parseTimestamp(startInput, true)\n const endParsed: CalendarTimestamp = (endInput ? parseTimestamp(endInput, true) : startParsed)\n const start: CalendarTimestamp = isTimedless(startInput)\n ? updateHasTime(startParsed, timed)\n : startParsed\n const end: CalendarTimestamp = isTimedless(endInput)\n ? updateHasTime(endParsed, timed)\n : endParsed\n const startIdentifier: number = getDayIdentifier(start)\n const startTimestampIdentifier: number = getTimestampIdentifier(start)\n const endIdentifier: number = getDayIdentifier(end)\n const endOffset: number = start.hasTime ? 0 : 2359\n const endTimestampIdentifier: number = getTimestampIdentifier(end) + endOffset\n const allDay = !start.hasTime\n\n return { input, start, startIdentifier, startTimestampIdentifier, end, endIdentifier, endTimestampIdentifier, allDay, index, category }\n}\n\nexport function isEventOn (event: CalendarEventParsed, dayIdentifier: number): boolean {\n return dayIdentifier >= event.startIdentifier && dayIdentifier <= event.endIdentifier\n}\n\nexport function isEventHiddenOn (event: CalendarEventParsed, day: CalendarTimestamp): boolean {\n return event.end.time === '00:00' && event.end.date === day.date && event.start.date !== day.date\n}\n\nexport function isEventStart (event: CalendarEventParsed, day: CalendarTimestamp, dayIdentifier: number, firstWeekday: number): boolean {\n return dayIdentifier === event.startIdentifier || (firstWeekday === day.weekday && isEventOn(event, dayIdentifier))\n}\n\nexport function isEventOverlapping (event: CalendarEventParsed, startIdentifier: number, endIdentifier: number): boolean {\n return startIdentifier <= event.endIdentifier && endIdentifier >= event.startIdentifier\n}\n","// Styles\nimport './calendar-with-events.sass'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\n\n// Directives\nimport ripple from '../../../directives/ripple'\n\n// Mixins\nimport CalendarBase from './calendar-base'\n\n// Util\nimport props from '../util/props'\nimport {\n CalendarEventOverlapModes,\n} from '../modes'\nimport {\n getDayIdentifier, diffMinutes,\n} from '../util/timestamp'\nimport {\n parseEvent,\n isEventStart,\n isEventOn,\n isEventOverlapping,\n isEventHiddenOn,\n} from '../util/events'\nimport {\n CalendarTimestamp,\n CalendarEventParsed,\n CalendarEventVisual,\n CalendarEventColorFunction,\n CalendarEventNameFunction,\n CalendarEventTimedFunction,\n CalendarDaySlotScope,\n CalendarDayBodySlotScope,\n CalendarEventOverlapMode,\n CalendarEvent,\n CalendarEventCategoryFunction,\n CalendarCategory,\n} from 'vuetify/types'\n\n// Types\ntype VEventGetter = (day: D) => CalendarEventParsed[]\n\ntype VEventVisualToNode = (visual: CalendarEventVisual, day: D) => VNode | false\n\ntype VEventsToNodes = (\n day: D,\n getter: VEventGetter,\n mapper: VEventVisualToNode,\n timed: boolean) => VNode[] | undefined\n\ntype VDailyEventsMap = {\n [date: string]: {\n parent: HTMLElement\n more: HTMLElement | null\n events: HTMLElement[]\n }\n}\n\ninterface VEventScopeInput {\n eventParsed: CalendarEventParsed\n day: CalendarDaySlotScope\n start: boolean\n end: boolean\n timed: boolean\n}\n\nconst WIDTH_FULL = 100\nconst WIDTH_START = 95\nconst MINUTES_IN_DAY = 1440\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'calendar-with-events',\n\n directives: {\n ripple,\n },\n\n props: {\n ...props.events,\n ...props.calendar,\n ...props.category,\n },\n\n computed: {\n noEvents (): boolean {\n return this.events.length === 0\n },\n parsedEvents (): CalendarEventParsed[] {\n return this.events.map(this.parseEvent)\n },\n parsedEventOverlapThreshold (): number {\n return parseInt(this.eventOverlapThreshold)\n },\n eventTimedFunction (): CalendarEventTimedFunction {\n return typeof this.eventTimed === 'function'\n ? this.eventTimed\n : event => !!event[this.eventTimed as string]\n },\n eventCategoryFunction (): CalendarEventCategoryFunction {\n return typeof this.eventCategory === 'function'\n ? this.eventCategory\n : event => event[this.eventCategory as string]\n },\n eventTextColorFunction (): CalendarEventColorFunction {\n return typeof this.eventTextColor === 'function'\n ? this.eventTextColor\n : () => this.eventTextColor as string\n },\n eventNameFunction (): CalendarEventNameFunction {\n return typeof this.eventName === 'function'\n ? this.eventName\n : (event, timedEvent) => event.input[this.eventName as string] as string || ''\n },\n eventModeFunction (): CalendarEventOverlapMode {\n return typeof this.eventOverlapMode === 'function'\n ? this.eventOverlapMode\n : CalendarEventOverlapModes[this.eventOverlapMode]\n },\n eventWeekdays (): number[] {\n return this.parsedWeekdays\n },\n categoryMode (): boolean {\n return this.type === 'category'\n },\n },\n\n methods: {\n eventColorFunction (e: CalendarEvent): string {\n return typeof this.eventColor === 'function'\n ? this.eventColor(e)\n : e.color || this.eventColor\n },\n parseEvent (input: CalendarEvent, index = 0): CalendarEventParsed {\n return parseEvent(\n input,\n index,\n this.eventStart,\n this.eventEnd,\n this.eventTimedFunction(input),\n this.categoryMode ? this.eventCategoryFunction(input) : false,\n )\n },\n formatTime (withTime: CalendarTimestamp, ampm: boolean): string {\n const formatter = this.getFormatter({\n timeZone: 'UTC',\n hour: 'numeric',\n minute: withTime.minute > 0 ? 'numeric' : undefined,\n })\n\n return formatter(withTime, true)\n },\n updateEventVisibility () {\n if (this.noEvents || !this.eventMore) {\n return\n }\n\n const eventHeight = this.eventHeight\n const eventsMap = this.getEventsMap()\n\n for (const date in eventsMap) {\n const { parent, events, more } = eventsMap[date]\n if (!more) {\n break\n }\n\n const parentBounds = parent.getBoundingClientRect()\n const last = events.length - 1\n const eventsSorted = events.map(event => ({\n event,\n bottom: event.getBoundingClientRect().bottom,\n })).sort((a, b) => a.bottom - b.bottom)\n let hidden = 0\n\n for (let i = 0; i <= last; i++) {\n const bottom = eventsSorted[i].bottom\n const hide = i === last\n ? (bottom > parentBounds.bottom)\n : (bottom + eventHeight > parentBounds.bottom)\n\n if (hide) {\n eventsSorted[i].event.style.display = 'none'\n hidden++\n }\n }\n\n if (hidden) {\n more.style.display = ''\n more.innerHTML = this.$vuetify.lang.t(this.eventMoreText, hidden)\n } else {\n more.style.display = 'none'\n }\n }\n },\n getEventsMap (): VDailyEventsMap {\n const eventsMap: VDailyEventsMap = {}\n const elements = this.$refs.events as HTMLElement[]\n\n if (!elements || !elements.forEach) {\n return eventsMap\n }\n\n elements.forEach(el => {\n const date = el.getAttribute('data-date')\n if (el.parentElement && date) {\n if (!(date in eventsMap)) {\n eventsMap[date] = {\n parent: el.parentElement,\n more: null,\n events: [],\n }\n }\n if (el.getAttribute('data-more')) {\n eventsMap[date].more = el\n } else {\n eventsMap[date].events.push(el)\n el.style.display = ''\n }\n }\n })\n\n return eventsMap\n },\n genDayEvent ({ event }: CalendarEventVisual, day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n const dayIdentifier = getDayIdentifier(day)\n const week = day.week\n const start = dayIdentifier === event.startIdentifier\n let end = dayIdentifier === event.endIdentifier\n let width = WIDTH_START\n\n if (!this.categoryMode) {\n for (let i = day.index + 1; i < week.length; i++) {\n const weekdayIdentifier = getDayIdentifier(week[i])\n if (event.endIdentifier >= weekdayIdentifier) {\n width += WIDTH_FULL\n end = end || weekdayIdentifier === event.endIdentifier\n } else {\n end = true\n break\n }\n }\n }\n const scope = { eventParsed: event, day, start, end, timed: false }\n\n return this.genEvent(event, scope, false, {\n staticClass: 'v-event',\n class: {\n 'v-event-start': start,\n 'v-event-end': end,\n },\n style: {\n height: `${eventHeight}px`,\n width: `${width}%`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n key: event.index,\n ref: 'events',\n refInFor: true,\n })\n },\n genTimedEvent ({ event, left, width }: CalendarEventVisual, day: CalendarDayBodySlotScope): VNode | false {\n if (day.timeDelta(event.end) < 0 || day.timeDelta(event.start) >= 1 || isEventHiddenOn(event, day)) {\n return false\n }\n\n const dayIdentifier = getDayIdentifier(day)\n const start = event.startIdentifier >= dayIdentifier\n const end = event.endIdentifier > dayIdentifier\n const top = start ? day.timeToY(event.start) : 0\n const bottom = end ? day.timeToY(MINUTES_IN_DAY) : day.timeToY(event.end)\n const height = Math.max(this.eventHeight, bottom - top)\n const scope = { eventParsed: event, day, start, end, timed: true }\n\n return this.genEvent(event, scope, true, {\n staticClass: 'v-event-timed',\n style: {\n top: `${top}px`,\n height: `${height}px`,\n left: `${left}%`,\n width: `${width}%`,\n },\n })\n },\n genEvent (event: CalendarEventParsed, scopeInput: VEventScopeInput, timedEvent: boolean, data: VNodeData): VNode {\n const slot = this.$scopedSlots.event\n const text = this.eventTextColorFunction(event.input)\n const background = this.eventColorFunction(event.input)\n const overlapsNoon = event.start.hour < 12 && event.end.hour >= 12\n const singline = diffMinutes(event.start, event.end) <= this.parsedEventOverlapThreshold\n const formatTime = this.formatTime\n const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true)\n const eventSummary = () => {\n const name = this.eventNameFunction(event, timedEvent)\n if (event.start.hasTime) {\n if (timedEvent) {\n const time = timeSummary()\n const delimiter = singline ? ', ' : this.$createElement('br')\n\n return this.$createElement('span', { staticClass: 'v-event-summary' }, [\n this.$createElement('strong', [name]),\n delimiter,\n time,\n ])\n } else {\n const time = formatTime(event.start, true)\n\n return this.$createElement('span', { staticClass: 'v-event-summary' }, [\n this.$createElement('strong', [time]),\n ' ',\n name,\n ])\n }\n }\n\n return this.$createElement('span', { staticClass: 'v-event-summary' }, [name])\n }\n\n const scope = {\n ...scopeInput,\n event: event.input,\n outside: scopeInput.day.outside,\n singline,\n overlapsNoon,\n formatTime,\n timeSummary,\n eventSummary,\n }\n\n return this.$createElement('div',\n this.setTextColor(text,\n this.setBackgroundColor(background, {\n on: this.getDefaultMouseEventHandlers(':event', nativeEvent => ({ ...scope, nativeEvent })),\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n ...data,\n })\n ), slot\n ? slot(scope)\n : [this.genName(eventSummary)]\n )\n },\n genName (eventSummary: () => string | VNode): VNode {\n return this.$createElement('div', {\n staticClass: 'pl-1',\n }, [eventSummary()])\n },\n genPlaceholder (day: CalendarTimestamp): VNode {\n const height = this.eventHeight + this.eventMarginBottom\n\n return this.$createElement('div', {\n style: {\n height: `${height}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n genMore (day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n\n return this.$createElement('div', {\n staticClass: 'v-event-more pl-1',\n class: {\n 'v-outside': day.outside,\n },\n attrs: {\n 'data-date': day.date,\n 'data-more': 1,\n },\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n on: this.getDefaultMouseEventHandlers(':more', nativeEvent => {\n return { nativeEvent, ...day }\n }),\n\n style: {\n display: 'none',\n height: `${eventHeight}px`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n getVisibleEvents (): CalendarEventParsed[] {\n const start = getDayIdentifier(this.days[0])\n const end = getDayIdentifier(this.days[this.days.length - 1])\n\n return this.parsedEvents.filter(\n event => isEventOverlapping(event, start, end)\n )\n },\n isEventForCategory (event: CalendarEventParsed, category: CalendarCategory): boolean {\n return !this.categoryMode ||\n (typeof category === 'object' && category.categoryName &&\n category.categoryName === event.category) ||\n (typeof event.category === 'string' && category === event.category) ||\n (typeof event.category !== 'string' && category === null)\n },\n getEventsForDay (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => isEventStart(event, day, identifier, firstWeekday)\n )\n },\n getEventsForDayAll (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => event.allDay &&\n (this.categoryMode ? isEventOn(event, identifier) : isEventStart(event, day, identifier, firstWeekday)) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getEventsForDayTimed (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n return this.parsedEvents.filter(\n event => !event.allDay &&\n isEventOn(event, identifier) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getScopedSlots () {\n if (this.noEvents) {\n return { ...this.$scopedSlots }\n }\n\n const mode = this.eventModeFunction(\n this.parsedEvents,\n this.eventWeekdays[0],\n this.parsedEventOverlapThreshold\n )\n\n const isNode = (input: VNode | false): input is VNode => !!input\n const getSlotChildren: VEventsToNodes = (day, getter, mapper, timed) => {\n const events = getter(day)\n const visuals = mode(day, events, timed, this.categoryMode)\n\n if (timed) {\n return visuals.map(visual => mapper(visual, day)).filter(isNode)\n }\n\n const children: VNode[] = []\n\n visuals.forEach((visual, index) => {\n while (children.length < visual.column) {\n children.push(this.genPlaceholder(day))\n }\n\n const mapped = mapper(visual, day)\n if (mapped) {\n children.push(mapped)\n }\n })\n\n return children\n }\n\n const slots = this.$scopedSlots\n const slotDay = slots.day\n const slotDayHeader = slots['day-header']\n const slotDayBody = slots['day-body']\n\n return {\n ...slots,\n day: (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDay, this.genDayEvent, false)\n if (children && children.length > 0 && this.eventMore) {\n children.push(this.genMore(day))\n }\n if (slotDay) {\n const slot = slotDay(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-header': (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDayAll, this.genDayEvent, false)\n\n if (slotDayHeader) {\n const slot = slotDayHeader(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-body': (day: CalendarDayBodySlotScope) => {\n const events = getSlotChildren(day, this.getEventsForDayTimed, this.genTimedEvent, true)\n let children: VNode[] = [\n this.$createElement('div', {\n staticClass: 'v-event-timed-container',\n }, events),\n ]\n\n if (slotDayBody) {\n const slot = slotDayBody(day)\n if (slot) {\n children = children.concat(slot)\n }\n }\n return children\n },\n }\n },\n },\n})\n","// Styles\nimport './VCalendarWeekly.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Components\nimport VBtn from '../VBtn'\n\n// Mixins\nimport CalendarBase from './mixins/calendar-base'\n\n// Util\nimport { getSlot } from '../../util/helpers'\nimport { weekNumber } from '../../util/dateTimeUtils'\nimport props from './util/props'\nimport {\n createDayList,\n getDayIdentifier,\n createNativeLocaleFormatter,\n} from './util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'v-calendar-weekly',\n\n props: props.weeks,\n\n computed: {\n staticClass (): string {\n return 'v-calendar-weekly'\n },\n classes (): object {\n return this.themeClasses\n },\n parsedMinWeeks (): number {\n return parseInt(this.minWeeks)\n },\n days (): CalendarTimestamp[] {\n const minDays = this.parsedMinWeeks * this.parsedWeekdays.length\n const start = this.getStartOfWeek(this.parsedStart)\n const end = this.getEndOfWeek(this.parsedEnd)\n\n return createDayList(\n start,\n end,\n this.times.today,\n this.weekdaySkips,\n Number.MAX_SAFE_INTEGER,\n minDays\n )\n },\n todayWeek (): CalendarTimestamp[] {\n const today = this.times.today\n const start = this.getStartOfWeek(today)\n const end = this.getEndOfWeek(today)\n\n return createDayList(\n start,\n end,\n today,\n this.weekdaySkips,\n this.parsedWeekdays.length,\n this.parsedWeekdays.length\n )\n },\n monthFormatter (): CalendarFormatter {\n if (this.monthFormat) {\n return this.monthFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', month: 'long' }\n const shortOptions = { timeZone: 'UTC', month: 'short' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, short) => short ? shortOptions : longOptions\n )\n },\n },\n\n methods: {\n isOutside (day: CalendarTimestamp): boolean {\n const dayIdentifier = getDayIdentifier(day)\n\n return dayIdentifier < getDayIdentifier(this.parsedStart) ||\n dayIdentifier > getDayIdentifier(this.parsedEnd)\n },\n genHead (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head',\n attrs: {\n role: 'row',\n },\n }, this.genHeadDays())\n },\n genHeadDays (): VNode[] {\n const header = this.todayWeek.map(this.genHeadDay)\n\n if (this.showWeek) {\n header.unshift(this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head-weeknumber',\n }))\n }\n\n return header\n },\n genHeadDay (day: CalendarTimestamp, index: number): VNode {\n const outside = this.isOutside(this.days[index])\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n key: day.date,\n staticClass: 'v-calendar-weekly__head-weekday',\n class: this.getRelativeClasses(day, outside),\n attrs: {\n role: 'columnheader',\n },\n }), this.weekdayFormatter(day, this.shortWeekdays))\n },\n genWeeks (): VNode[] {\n const days = this.days\n const weekDays = this.parsedWeekdays.length\n const weeks: VNode[] = []\n\n for (let i = 0; i < days.length; i += weekDays) {\n weeks.push(this.genWeek(days.slice(i, i + weekDays), this.getWeekNumber(days[i])))\n }\n\n return weeks\n },\n genWeek (week: CalendarTimestamp[], weekNumber: number): VNode {\n const weekNodes = week.map((day, index) => this.genDay(day, index, week))\n\n if (this.showWeek) {\n weekNodes.unshift(this.genWeekNumber(weekNumber))\n }\n\n return this.$createElement('div', {\n key: week[0].date,\n staticClass: 'v-calendar-weekly__week',\n attrs: {\n role: 'row',\n },\n }, weekNodes)\n },\n getWeekNumber (determineDay: CalendarTimestamp) {\n return weekNumber(\n determineDay.year,\n determineDay.month - 1,\n determineDay.day,\n this.parsedWeekdays[0],\n parseInt(this.localeFirstDayOfYear)\n )\n },\n genWeekNumber (weekNumber: number) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__weeknumber',\n }, [\n this.$createElement('small', String(weekNumber)),\n ])\n },\n genDay (day: CalendarTimestamp, index: number, week: CalendarTimestamp[]): VNode {\n const outside = this.isOutside(day)\n\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-weekly__day',\n class: this.getRelativeClasses(day, outside),\n attrs: {\n role: 'cell',\n },\n on: this.getDefaultMouseEventHandlers(':day', nativeEvent => {\n return { nativeEvent, ...day }\n }),\n }, [\n this.genDayLabel(day),\n ...(getSlot(this, 'day', () => ({ outside, index, week, ...day })) || []),\n ])\n },\n genDayLabel (day: CalendarTimestamp): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__day-label',\n }, getSlot(this, 'day-label', day) || [this.genDayLabelButton(day)])\n },\n genDayLabelButton (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : 'transparent'\n const hasMonth = day.day === 1 && this.showMonthOnFirst\n\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true,\n small: true,\n },\n on: this.getMouseEventHandlers({\n 'click:date': { event: 'click', stop: true },\n 'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false },\n }, nativeEvent => ({ nativeEvent, ...day })),\n }, hasMonth\n ? this.monthFormatter(day, this.shortMonths) + ' ' + this.dayFormatter(day, false)\n : this.dayFormatter(day, false)\n )\n },\n genDayMonth (day: CalendarTimestamp): VNode | string {\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-weekly__day-month',\n }), getSlot(this, 'day-month', day) || this.monthFormatter(day, this.shortMonths))\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: this.staticClass,\n class: this.classes,\n on: {\n dragstart: (e: MouseEvent) => {\n e.preventDefault()\n },\n },\n }, [\n !this.hideHeader ? this.genHead() : '',\n ...this.genWeeks(),\n ])\n },\n})\n","// Styles\nimport './VCalendarWeekly.sass'\n\n// Mixins\nimport VCalendarWeekly from './VCalendarWeekly'\n\n// Util\nimport { parseTimestamp, getStartOfMonth, getEndOfMonth } from './util/timestamp'\nimport { CalendarTimestamp } from 'vuetify/types'\n\n/* @vue/component */\nexport default VCalendarWeekly.extend({\n name: 'v-calendar-monthly',\n\n computed: {\n staticClass (): string {\n return 'v-calendar-monthly v-calendar-weekly'\n },\n parsedStart (): CalendarTimestamp {\n return getStartOfMonth(parseTimestamp(this.start, true))\n },\n parsedEnd (): CalendarTimestamp {\n return getEndOfMonth(parseTimestamp(this.end, true))\n },\n },\n\n})\n","\n// Mixins\nimport CalendarBase from './calendar-base'\n\n// Util\nimport props from '../util/props'\nimport {\n parseTime,\n copyTimestamp,\n updateMinutes,\n createDayList,\n createIntervalList,\n createNativeLocaleFormatter,\n VTime,\n MINUTES_IN_DAY,\n} from '../util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter, CalendarDayBodySlotScope } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'calendar-with-intervals',\n\n props: props.intervals,\n\n computed: {\n parsedFirstInterval (): number {\n return parseInt(this.firstInterval)\n },\n parsedIntervalMinutes (): number {\n return parseInt(this.intervalMinutes)\n },\n parsedIntervalCount (): number {\n return parseInt(this.intervalCount)\n },\n parsedIntervalHeight (): number {\n return parseFloat(this.intervalHeight)\n },\n parsedFirstTime (): number | false {\n return parseTime(this.firstTime)\n },\n firstMinute (): number {\n const time = this.parsedFirstTime\n\n return time !== false && time >= 0 && time <= MINUTES_IN_DAY\n ? time\n : this.parsedFirstInterval * this.parsedIntervalMinutes\n },\n bodyHeight (): number {\n return this.parsedIntervalCount * this.parsedIntervalHeight\n },\n days (): CalendarTimestamp[] {\n return createDayList(\n this.parsedStart,\n this.parsedEnd,\n this.times.today,\n this.weekdaySkips,\n this.maxDays\n )\n },\n intervals (): CalendarTimestamp[][] {\n const days: CalendarTimestamp[] = this.days\n const first: number = this.firstMinute\n const minutes: number = this.parsedIntervalMinutes\n const count: number = this.parsedIntervalCount\n const now: CalendarTimestamp = this.times.now\n\n return days.map(d => createIntervalList(d, first, minutes, count, now))\n },\n intervalFormatter (): CalendarFormatter {\n if (this.intervalFormat) {\n return this.intervalFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', hour: '2-digit', minute: '2-digit' }\n const shortOptions = { timeZone: 'UTC', hour: 'numeric', minute: '2-digit' }\n const shortHourOptions = { timeZone: 'UTC', hour: 'numeric' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (tms, short) => short ? (tms.minute === 0 ? shortHourOptions : shortOptions) : longOptions\n )\n },\n },\n\n methods: {\n showIntervalLabelDefault (interval: CalendarTimestamp): boolean {\n const first: CalendarTimestamp = this.intervals[0][0]\n const isFirst: boolean = first.hour === interval.hour && first.minute === interval.minute\n return !isFirst\n },\n intervalStyleDefault (_interval: CalendarTimestamp): object | undefined {\n return undefined\n },\n getTimestampAtEvent (e: MouseEvent | TouchEvent, day: CalendarTimestamp): CalendarTimestamp {\n const timestamp: CalendarTimestamp = copyTimestamp(day)\n const bounds = (e.currentTarget as HTMLElement).getBoundingClientRect()\n const baseMinutes: number = this.firstMinute\n const touchEvent: TouchEvent = e as TouchEvent\n const mouseEvent: MouseEvent = e as MouseEvent\n const touches: TouchList = touchEvent.changedTouches || touchEvent.touches\n const clientY: number = touches && touches[0] ? touches[0].clientY : mouseEvent.clientY\n const addIntervals: number = (clientY - bounds.top) / this.parsedIntervalHeight\n const addMinutes: number = Math.floor(addIntervals * this.parsedIntervalMinutes)\n const minutes: number = baseMinutes + addMinutes\n\n return updateMinutes(timestamp, minutes, this.times.now)\n },\n getSlotScope (timestamp: CalendarTimestamp): CalendarDayBodySlotScope {\n const scope = copyTimestamp(timestamp) as any\n scope.timeToY = this.timeToY\n scope.timeDelta = this.timeDelta\n scope.minutesToPixels = this.minutesToPixels\n scope.week = this.days\n return scope\n },\n scrollToTime (time: VTime): boolean {\n const y = this.timeToY(time)\n const pane = this.$refs.scrollArea as HTMLElement\n\n if (y === false || !pane) {\n return false\n }\n\n pane.scrollTop = y\n\n return true\n },\n minutesToPixels (minutes: number): number {\n return minutes / this.parsedIntervalMinutes * this.parsedIntervalHeight\n },\n timeToY (time: VTime, clamp = true): number | false {\n let y = this.timeDelta(time)\n\n if (y !== false) {\n y *= this.bodyHeight\n\n if (clamp) {\n if (y < 0) {\n y = 0\n }\n if (y > this.bodyHeight) {\n y = this.bodyHeight\n }\n }\n }\n\n return y\n },\n timeDelta (time: VTime): number | false {\n const minutes = parseTime(time)\n\n if (minutes === false) {\n return false\n }\n\n const min: number = this.firstMinute\n const gap: number = this.parsedIntervalCount * this.parsedIntervalMinutes\n\n return (minutes - min) / gap\n },\n },\n})\n","// Styles\nimport './VCalendarDaily.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Components\nimport VBtn from '../VBtn'\n\n// Mixins\nimport CalendarWithIntervals from './mixins/calendar-with-intervals'\n\n// Util\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { CalendarTimestamp } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarWithIntervals.extend({\n name: 'v-calendar-daily',\n\n directives: { Resize },\n\n data: () => ({\n scrollPush: 0,\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-calendar-daily': true,\n ...this.themeClasses,\n }\n },\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init () {\n this.$nextTick(this.onResize)\n },\n onResize () {\n this.scrollPush = this.getScrollPush()\n },\n getScrollPush (): number {\n const area = this.$refs.scrollArea as HTMLElement\n const pane = this.$refs.pane as HTMLElement\n\n return area && pane ? (area.offsetWidth - pane.offsetWidth) : 0\n },\n genHead (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__head',\n style: {\n marginRight: this.scrollPush + 'px',\n },\n }, [\n this.genHeadIntervals(),\n ...this.genHeadDays(),\n ])\n },\n genHeadIntervals (): VNode {\n const width: string | undefined = convertToUnit(this.intervalWidth)\n\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__intervals-head',\n style: {\n width,\n },\n }, getSlot(this, 'interval-header'))\n },\n genHeadDays (): VNode[] {\n return this.days.map(this.genHeadDay)\n },\n genHeadDay (day: CalendarTimestamp, index: number): VNode {\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-daily_head-day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':day', nativeEvent => {\n return { nativeEvent, ...this.getSlotScope(day) }\n }),\n }, [\n this.genHeadWeekday(day),\n this.genHeadDayLabel(day),\n ...this.genDayHeader(day, index),\n ])\n },\n genDayHeader (day: CalendarTimestamp, index: number): VNode[] {\n return getSlot(this, 'day-header', () => ({\n week: this.days, ...day, index,\n })) || []\n },\n genHeadWeekday (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-daily_head-weekday',\n }), this.weekdayFormatter(day, this.shortWeekdays))\n },\n genHeadDayLabel (day: CalendarTimestamp): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily_head-day-label',\n }, getSlot(this, 'day-label-header', day) || [this.genHeadDayButton(day)])\n },\n genHeadDayButton (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : 'transparent'\n\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true,\n },\n on: this.getMouseEventHandlers({\n 'click:date': { event: 'click', stop: true },\n 'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false },\n }, nativeEvent => {\n return { nativeEvent, ...day }\n }),\n }, this.dayFormatter(day, false))\n },\n genBody (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__body',\n }, [\n this.genScrollArea(),\n ])\n },\n genScrollArea (): VNode {\n return this.$createElement('div', {\n ref: 'scrollArea',\n staticClass: 'v-calendar-daily__scroll-area',\n }, [\n this.genPane(),\n ])\n },\n genPane (): VNode {\n return this.$createElement('div', {\n ref: 'pane',\n staticClass: 'v-calendar-daily__pane',\n style: {\n height: convertToUnit(this.bodyHeight),\n },\n }, [\n this.genDayContainer(),\n ])\n },\n genDayContainer (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__day-container',\n }, [\n this.genBodyIntervals(),\n ...this.genDays(),\n ])\n },\n genDays (): VNode[] {\n return this.days.map(this.genDay)\n },\n genDay (day: CalendarTimestamp, index: number): VNode {\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-daily__day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':time', nativeEvent => {\n return { nativeEvent, ...this.getSlotScope(this.getTimestampAtEvent(nativeEvent, day)) }\n }),\n }, [\n ...this.genDayIntervals(index),\n ...this.genDayBody(day),\n ])\n },\n genDayBody (day: CalendarTimestamp): VNode[] {\n return getSlot(this, 'day-body', () => this.getSlotScope(day)) || []\n },\n genDayIntervals (index: number): VNode[] {\n return this.intervals[index].map(this.genDayInterval)\n },\n genDayInterval (interval: CalendarTimestamp): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const styler = this.intervalStyle || this.intervalStyleDefault\n\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler(interval),\n },\n\n }\n\n const children = getSlot(this, 'interval', () => this.getSlotScope(interval))\n\n return this.$createElement('div', data, children)\n },\n genBodyIntervals (): VNode {\n const width: string | undefined = convertToUnit(this.intervalWidth)\n const data = {\n staticClass: 'v-calendar-daily__intervals-body',\n style: {\n width,\n },\n on: this.getDefaultMouseEventHandlers(':interval', nativeEvent => {\n return { nativeEvent, ...this.getTimestampAtEvent(nativeEvent, this.parsedStart) }\n }),\n }\n\n return this.$createElement('div', data, this.genIntervalLabels())\n },\n genIntervalLabels (): VNode[] | null {\n if (!this.intervals.length) return null\n\n return this.intervals[0].map(this.genIntervalLabel)\n },\n genIntervalLabel (interval: CalendarTimestamp): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const short: boolean = this.shortIntervals\n const shower = this.showIntervalLabel || this.showIntervalLabelDefault\n const show = shower(interval)\n const label = show ? this.intervalFormatter(interval, short) : undefined\n\n return this.$createElement('div', {\n key: interval.time,\n staticClass: 'v-calendar-daily__interval',\n style: {\n height,\n },\n }, [\n this.$createElement('div', {\n staticClass: 'v-calendar-daily__interval-text',\n }, label),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n class: this.classes,\n on: {\n dragstart: (e: MouseEvent) => {\n e.preventDefault()\n },\n },\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.onResize,\n }],\n }, [\n !this.hideHeader ? this.genHead() : '',\n this.genBody(),\n ])\n },\n})\n","import { CalendarCategory, CalendarCategoryTextFunction } from 'types'\n\nexport function parsedCategoryText (\n category: CalendarCategory,\n categoryText: string | CalendarCategoryTextFunction\n): string {\n return typeof categoryText === 'string' && typeof category === 'object' && category\n ? category[categoryText]\n : typeof categoryText === 'function'\n ? categoryText(category)\n : category\n}\n\nexport function getParsedCategories (\n categories: CalendarCategory | CalendarCategory[],\n categoryText: string | CalendarCategoryTextFunction\n): CalendarCategory[] {\n if (typeof categories === 'string') return categories.split(/\\s*,\\s/)\n if (Array.isArray(categories)) {\n return categories.map((category: CalendarCategory) => {\n if (typeof category === 'string') return category\n\n const categoryName = typeof category.categoryName === 'string'\n ? category.categoryName\n : parsedCategoryText(category, categoryText)\n return { ...category, categoryName }\n })\n }\n return []\n}\n","// Styles\nimport './VCalendarCategory.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Mixins\nimport VCalendarDaily from './VCalendarDaily'\n\n// Util\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { CalendarCategory, CalendarTimestamp } from 'types'\nimport props from './util/props'\nimport { getParsedCategories } from './util/parser'\n\n/* @vue/component */\nexport default VCalendarDaily.extend({\n name: 'v-calendar-category',\n\n props: props.category,\n\n computed: {\n classes (): object {\n return {\n 'v-calendar-daily': true,\n 'v-calendar-category': true,\n ...this.themeClasses,\n }\n },\n parsedCategories (): CalendarCategory[] {\n return getParsedCategories(this.categories, this.categoryText)\n },\n },\n methods: {\n genDayHeader (day: CalendarTimestamp, index: number): VNode[] {\n const data = {\n staticClass: 'v-calendar-category__columns',\n }\n const scope = {\n week: this.days, ...day, index,\n }\n\n const children = this.parsedCategories.map(category => {\n return this.genDayHeaderCategory(day, this.getCategoryScope(scope, category))\n })\n\n return [this.$createElement('div', data, children)]\n },\n getCategoryScope (scope: any, category: CalendarCategory) {\n const cat = typeof category === 'object' && category &&\n category.categoryName === this.categoryForInvalid ? null : category\n return {\n ...scope,\n category: cat,\n }\n },\n genDayHeaderCategory (day: CalendarTimestamp, scope: any): VNode {\n const headerTitle = typeof scope.category === 'object' ? scope.category.categoryName : scope.category\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__column-header',\n on: this.getDefaultMouseEventHandlers(':day-category', e => {\n return this.getCategoryScope(this.getSlotScope(day), scope.category)\n }),\n }, [\n getSlot(this, 'category', scope) || this.genDayHeaderCategoryTitle(headerTitle),\n getSlot(this, 'day-header', scope),\n ])\n },\n genDayHeaderCategoryTitle (categoryName: string | null) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__category',\n }, categoryName === null ? this.categoryForInvalid : categoryName)\n },\n genDays (): VNode[] {\n const days: VNode[] = []\n this.days.forEach((d, j) => {\n const day = new Array(this.parsedCategories.length || 1)\n day.fill(d)\n days.push(...day.map((v, i) => this.genDay(v, j, i)))\n })\n return days\n },\n genDay (day: CalendarTimestamp, index: number, categoryIndex: number): VNode {\n const category = this.parsedCategories[categoryIndex]\n return this.$createElement('div', {\n key: day.date + '-' + categoryIndex,\n staticClass: 'v-calendar-daily__day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':time', e => {\n return this.getSlotScope(this.getTimestampAtEvent(e, day))\n }),\n }, [\n ...this.genDayIntervals(index, category),\n ...this.genDayBody(day, category),\n ])\n },\n genDayIntervals (index: number, category: CalendarCategory): VNode[] {\n return this.intervals[index].map(v => this.genDayInterval(v, category))\n },\n genDayInterval (interval: CalendarTimestamp, category: CalendarCategory): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const styler = this.intervalStyle || this.intervalStyleDefault\n\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler({ ...interval, category }),\n },\n }\n\n const children = getSlot(this, 'interval', () =>\n this.getCategoryScope(this.getSlotScope(interval), category)\n )\n\n return this.$createElement('div', data, children)\n },\n genDayBody (day: CalendarTimestamp, category: CalendarCategory): VNode[] {\n const data = {\n staticClass: 'v-calendar-category__columns',\n }\n\n const children = [this.genDayBodyCategory(day, category)]\n\n return [this.$createElement('div', data, children)]\n },\n genDayBodyCategory (day: CalendarTimestamp, category: CalendarCategory): VNode {\n const data = {\n staticClass: 'v-calendar-category__column',\n on: this.getDefaultMouseEventHandlers(':time-category', e => {\n return this.getCategoryScope(this.getSlotScope(this.getTimestampAtEvent(e, day)), category)\n }),\n }\n\n const children = getSlot(this, 'day-body', () => this.getCategoryScope(this.getSlotScope(day), category))\n\n return this.$createElement('div', data, children)\n },\n },\n})\n","// Styles\n// import '../../stylus/components/_calendar-daily.styl'\n\n// Types\nimport { VNode, Component } from 'vue'\n\n// Mixins\nimport CalendarWithEvents from './mixins/calendar-with-events'\n\n// Util\nimport props from './util/props'\nimport {\n DAYS_IN_MONTH_MAX,\n DAY_MIN,\n DAYS_IN_WEEK,\n parseTimestamp,\n validateTimestamp,\n relativeDays,\n nextDay,\n prevDay,\n copyTimestamp,\n updateFormatted,\n updateWeekday,\n updateRelative,\n getStartOfMonth,\n getEndOfMonth,\n VTime,\n VTimestampInput,\n timestampToDate,\n} from './util/timestamp'\n\n// Calendars\nimport VCalendarMonthly from './VCalendarMonthly'\nimport VCalendarDaily from './VCalendarDaily'\nimport VCalendarWeekly from './VCalendarWeekly'\nimport VCalendarCategory from './VCalendarCategory'\nimport { CalendarTimestamp, CalendarFormatter, CalendarCategory } from 'vuetify/types'\nimport { getParsedCategories } from './util/parser'\n\n// Types\ninterface VCalendarRenderProps {\n start: CalendarTimestamp\n end: CalendarTimestamp\n component: string | Component\n maxDays: number\n weekdays: number[]\n categories: CalendarCategory[]\n}\n\n/* @vue/component */\nexport default CalendarWithEvents.extend({\n name: 'v-calendar',\n\n props: {\n ...props.calendar,\n ...props.weeks,\n ...props.intervals,\n ...props.category,\n },\n\n data: () => ({\n lastStart: null as CalendarTimestamp | null,\n lastEnd: null as CalendarTimestamp | null,\n }),\n\n computed: {\n parsedValue (): CalendarTimestamp {\n return (validateTimestamp(this.value)\n ? parseTimestamp(this.value, true)\n : (this.parsedStart || this.times.today))\n },\n parsedCategoryDays (): number {\n return parseInt(this.categoryDays) || 1\n },\n renderProps (): VCalendarRenderProps {\n const around = this.parsedValue\n let component: any = null\n let maxDays = this.maxDays\n let weekdays = this.parsedWeekdays\n let categories = this.parsedCategories\n let start = around\n let end = around\n switch (this.type) {\n case 'month':\n component = VCalendarMonthly\n start = getStartOfMonth(around)\n end = getEndOfMonth(around)\n break\n case 'week':\n component = VCalendarDaily\n start = this.getStartOfWeek(around)\n end = this.getEndOfWeek(around)\n maxDays = 7\n break\n case 'day':\n component = VCalendarDaily\n maxDays = 1\n weekdays = [start.weekday]\n break\n case '4day':\n component = VCalendarDaily\n end = relativeDays(copyTimestamp(end), nextDay, 3)\n updateFormatted(end)\n maxDays = 4\n weekdays = [\n start.weekday,\n (start.weekday + 1) % 7,\n (start.weekday + 2) % 7,\n (start.weekday + 3) % 7,\n ]\n break\n case 'custom-weekly':\n component = VCalendarWeekly\n start = this.parsedStart || around\n end = this.parsedEnd\n break\n case 'custom-daily':\n component = VCalendarDaily\n start = this.parsedStart || around\n end = this.parsedEnd\n break\n case 'category':\n const days = this.parsedCategoryDays\n\n component = VCalendarCategory\n end = relativeDays(copyTimestamp(end), nextDay, days)\n updateFormatted(end)\n maxDays = days\n weekdays = []\n\n for (let i = 0; i < days; i++) {\n weekdays.push((start.weekday + i) % 7)\n }\n\n categories = this.getCategoryList(categories)\n break\n default:\n throw new Error(this.type + ' is not a valid Calendar type')\n }\n\n return { component, start, end, maxDays, weekdays, categories }\n },\n eventWeekdays (): number[] {\n return this.renderProps.weekdays\n },\n categoryMode (): boolean {\n return this.type === 'category'\n },\n title (): string {\n const { start, end } = this.renderProps\n const spanYears = start.year !== end.year\n const spanMonths = spanYears || start.month !== end.month\n\n if (spanYears) {\n return this.monthShortFormatter(start, true) + ' ' + start.year + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year\n }\n\n if (spanMonths) {\n return this.monthShortFormatter(start, true) + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year\n } else {\n return this.monthLongFormatter(start, false) + ' ' + start.year\n }\n },\n monthLongFormatter (): CalendarFormatter {\n return this.getFormatter({\n timeZone: 'UTC', month: 'long',\n })\n },\n monthShortFormatter (): CalendarFormatter {\n return this.getFormatter({\n timeZone: 'UTC', month: 'short',\n })\n },\n parsedCategories (): CalendarCategory[] {\n return getParsedCategories(this.categories, this.categoryText)\n },\n },\n\n watch: {\n renderProps: 'checkChange',\n },\n\n mounted () {\n this.updateEventVisibility()\n this.checkChange()\n },\n\n updated () {\n window.requestAnimationFrame(this.updateEventVisibility)\n },\n\n methods: {\n checkChange (): void {\n const { lastStart, lastEnd } = this\n const { start, end } = this.renderProps\n if (!lastStart || !lastEnd ||\n start.date !== lastStart.date ||\n end.date !== lastEnd.date) {\n this.lastStart = start\n this.lastEnd = end\n this.$emit('change', { start, end })\n }\n },\n move (amount = 1): void {\n const moved = copyTimestamp(this.parsedValue)\n const forward = amount > 0\n const mover = forward ? nextDay : prevDay\n const limit = forward ? DAYS_IN_MONTH_MAX : DAY_MIN\n let times = forward ? amount : -amount\n\n while (--times >= 0) {\n switch (this.type) {\n case 'month':\n moved.day = limit\n mover(moved)\n break\n case 'week':\n relativeDays(moved, mover, DAYS_IN_WEEK)\n break\n case 'day':\n relativeDays(moved, mover, 1)\n break\n case '4day':\n relativeDays(moved, mover, 4)\n break\n case 'category':\n relativeDays(moved, mover, this.parsedCategoryDays)\n break\n }\n }\n\n updateWeekday(moved)\n updateFormatted(moved)\n updateRelative(moved, this.times.now)\n\n if (this.value instanceof Date) {\n this.$emit('input', timestampToDate(moved))\n } else if (typeof this.value === 'number') {\n this.$emit('input', timestampToDate(moved).getTime())\n } else {\n this.$emit('input', moved.date)\n }\n\n this.$emit('moved', moved)\n },\n next (amount = 1): void {\n this.move(amount)\n },\n prev (amount = 1): void {\n this.move(-amount)\n },\n timeToY (time: VTime, clamp = true): number | false {\n const c = this.$children[0] as any\n\n if (c && c.timeToY) {\n return c.timeToY(time, clamp)\n } else {\n return false\n }\n },\n timeDelta (time: VTime): number | false {\n const c = this.$children[0] as any\n\n if (c && c.timeDelta) {\n return c.timeDelta(time)\n } else {\n return false\n }\n },\n minutesToPixels (minutes: number): number {\n const c = this.$children[0] as any\n\n if (c && c.minutesToPixels) {\n return c.minutesToPixels(minutes)\n } else {\n return -1\n }\n },\n scrollToTime (time: VTime): boolean {\n const c = this.$children[0] as any\n\n if (c && c.scrollToTime) {\n return c.scrollToTime(time)\n } else {\n return false\n }\n },\n parseTimestamp (input: VTimestampInput, required?: false): CalendarTimestamp | null {\n return parseTimestamp(input, required, this.times.now)\n },\n timestampToDate (timestamp: CalendarTimestamp): Date {\n return timestampToDate(timestamp)\n },\n getCategoryList (categories: CalendarCategory[]): CalendarCategory[] {\n if (!this.noEvents) {\n const categoryMap: any = categories.reduce((map: any, category, index) => {\n if (typeof category === 'object' && category.categoryName) map[category.categoryName] = { index, count: 0 }\n else if (typeof category === 'string') map[category] = { index, count: 0 }\n return map\n }, {})\n\n if (!this.categoryHideDynamic || !this.categoryShowAll) {\n let categoryLength = categories.length\n\n this.parsedEvents.forEach(ev => {\n let category = ev.category\n\n if (typeof category !== 'string') {\n category = this.categoryForInvalid\n }\n\n if (!category) {\n return\n }\n\n if (category in categoryMap) {\n categoryMap[category].count++\n } else if (!this.categoryHideDynamic) {\n categoryMap[category] = {\n index: categoryLength++,\n count: 1,\n }\n }\n })\n }\n\n if (!this.categoryShowAll) {\n for (const category in categoryMap) {\n if (categoryMap[category].count === 0) {\n delete categoryMap[category]\n }\n }\n }\n\n categories = categories.filter((category: CalendarCategory) => {\n if (typeof category === 'object' && category.categoryName) {\n return categoryMap.hasOwnProperty(category.categoryName)\n } else if (typeof category === 'string') {\n return categoryMap.hasOwnProperty(category)\n }\n return false\n })\n }\n return categories\n },\n },\n\n render (h): VNode {\n const { start, end, maxDays, component, weekdays, categories } = this.renderProps\n\n return h(component, {\n staticClass: 'v-calendar',\n class: {\n 'v-calendar-events': !this.noEvents,\n },\n props: {\n ...this.$props,\n start: start.date,\n end: end.date,\n maxDays,\n weekdays,\n categories,\n },\n attrs: {\n role: 'grid',\n },\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.updateEventVisibility,\n }],\n on: {\n ...this.$listeners,\n\n 'click:date': (day: CalendarTimestamp, e?: MouseEvent) => {\n if (this.$listeners.input) {\n this.$emit('input', day.date)\n }\n if (this.$listeners['click:date']) {\n this.$emit('click:date', day, e)\n }\n },\n },\n scopedSlots: this.getScopedSlots(),\n })\n },\n})\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('v-row',{staticClass:\"mt-4\",attrs:{\"dense\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"1\"}},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.actionLeft}},[_c('v-icon',[_vm._v(_vm._s(_vm.iconLeft))])],1)],1),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"3\"}},[_c('v-select',{staticClass:\"ma-2\",attrs:{\"items\":_vm.types,\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"label\":\"type\"},model:{value:(_vm.type),callback:function ($$v) {_vm.type=$$v},expression:\"type\"}})],1),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"3\"}},[_c('v-select',{staticClass:\"ma-2\",attrs:{\"items\":_vm.modes,\"dense\":\"\",\"outlined\":\"\",\"hide-details\":\"\",\"label\":\"event-overlap-mode\"},model:{value:(_vm.mode),callback:function ($$v) {_vm.mode=$$v},expression:\"mode\"}})],1),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"3\"}},[_c('v-select',{staticClass:\"ma-2\",attrs:{\"items\":_vm.weekdays,\"outlined\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"label\":\"weekdays\"},model:{value:(_vm.weekday),callback:function ($$v) {_vm.weekday=$$v},expression:\"weekday\"}})],1),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"1\"}},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.actionRight}},[_c('v-icon',[_vm._v(_vm._s(_vm.iconRight))])],1)],1)],1),_c('v-sheet',{attrs:{\"height\":_vm.height}},[_c('v-calendar',{ref:\"calendar\",attrs:{\"weekdays\":_vm.weekday,\"type\":_vm.type,\"events\":_vm.events,\"event-more\":_vm.eventMore,\"event-overlap-mode\":_vm.mode,\"event-overlap-threshold\":30},on:{\"click:event\":_vm.performClickAction,\"click:date\":_vm.viewDay,\"click:more\":_vm.viewDay,\"contextmenu:event\":_vm.showContextMenu},scopedSlots:_vm._u([{key:\"event\",fn:function({ eventParsed, event }){return [_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on }){return [_c('div',_vm._g({},on),[_vm._v(\" \"+_vm._s(event.name)+\" \")])]}}],null,true)},[_c('span',[_vm._v(_vm._s(event.tooltip))])])]}}]),model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v},expression:\"value\"}})],1),_c('base-context-menu',{ref:\"menu\",attrs:{\"contextMenuItems\":_vm.contextMenuItems,\"right-clicked-item\":_vm.rightClickedEvent},on:{\"onContextAction\":_vm.performAction}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseCalendar.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseCalendar.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./BaseCalendar.vue?vue&type=template&id=04fb5f92\"\nimport script from \"./BaseCalendar.vue?vue&type=script&lang=js\"\nexport * from \"./BaseCalendar.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue, { VNode } from 'vue'\nimport VProgressLinear from '../../components/VProgressLinear'\nimport { getSlot } from '../../util/helpers'\n\ninterface colorable extends Vue {\n color?: string\n}\n\n/**\n * Loadable\n *\n * @mixin\n *\n * Used to add linear progress bar to components\n * Can use a default bar with a specific color\n * or designate a custom progress linear bar\n */\n/* @vue/component */\nexport default Vue.extend().extend({\n name: 'loadable',\n\n props: {\n loading: {\n type: [Boolean, String],\n default: false,\n },\n loaderHeight: {\n type: [Number, String],\n default: 2,\n },\n },\n\n methods: {\n genProgress (): VNode | VNode[] | null {\n if (this.loading === false) return null\n\n return getSlot(this, 'progress') || this.$createElement(VProgressLinear, {\n props: {\n absolute: true,\n color: (this.loading === true || this.loading === '')\n ? (this.color || 'primary')\n : this.loading,\n height: this.loaderHeight,\n indeterminate: true,\n },\n })\n },\n },\n})\n","import VProgressLinear from './VProgressLinear'\n\nexport { VProgressLinear }\nexport default VProgressLinear\n","import './VTooltip.sass'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Menuable from '../../mixins/menuable'\n\n// Helpers\nimport { convertToUnit, keyCodes, getSlotType } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Colorable, Delayable, Dependent, Menuable).extend({\n name: 'v-tooltip',\n\n props: {\n closeDelay: {\n type: [Number, String],\n default: 0,\n },\n disabled: Boolean,\n openDelay: {\n type: [Number, String],\n default: 0,\n },\n openOnHover: {\n type: Boolean,\n default: true,\n },\n openOnFocus: {\n type: Boolean,\n default: true,\n },\n tag: {\n type: String,\n default: 'span',\n },\n transition: String,\n },\n\n data: () => ({\n calculatedMinWidth: 0,\n closeDependents: false,\n }),\n\n computed: {\n calculatedLeft (): string {\n const { activator, content } = this.dimensions\n const unknown = !this.bottom && !this.left && !this.top && !this.right\n const activatorLeft = this.attach !== false ? activator.offsetLeft : activator.left\n let left = 0\n\n if (this.top || this.bottom || unknown) {\n left = (\n activatorLeft +\n (activator.width / 2) -\n (content.width / 2)\n )\n } else if (this.left || this.right) {\n left = (\n activatorLeft +\n (this.right ? activator.width : -content.width) +\n (this.right ? 10 : -10)\n )\n }\n\n if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n return `${this.calcXOverflow(left, this.dimensions.content.width)}px`\n },\n calculatedTop (): string {\n const { activator, content } = this.dimensions\n const activatorTop = this.attach !== false ? activator.offsetTop : activator.top\n let top = 0\n\n if (this.top || this.bottom) {\n top = (\n activatorTop +\n (this.bottom ? activator.height : -content.height) +\n (this.bottom ? 10 : -10)\n )\n } else if (this.left || this.right) {\n top = (\n activatorTop +\n (activator.height / 2) -\n (content.height / 2)\n )\n }\n\n if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n if (this.attach === false) top += this.pageYOffset\n\n return `${this.calcYOverflow(top)}px`\n },\n classes (): object {\n return {\n 'v-tooltip--top': this.top,\n 'v-tooltip--right': this.right,\n 'v-tooltip--bottom': this.bottom,\n 'v-tooltip--left': this.left,\n 'v-tooltip--attached':\n this.attach === '' ||\n this.attach === true ||\n this.attach === 'attach',\n }\n },\n computedTransition (): string {\n if (this.transition) return this.transition\n\n return this.isActive ? 'scale-transition' : 'fade-transition'\n },\n offsetY (): boolean {\n return this.top || this.bottom\n },\n offsetX (): boolean {\n return this.left || this.right\n },\n styles (): object {\n return {\n left: this.calculatedLeft,\n maxWidth: convertToUnit(this.maxWidth),\n minWidth: convertToUnit(this.minWidth),\n top: this.calculatedTop,\n zIndex: this.zIndex || this.activeZIndex,\n }\n },\n },\n\n beforeMount () {\n this.$nextTick(() => {\n this.value && this.callActivate()\n })\n },\n\n mounted () {\n if (getSlotType(this, 'activator', true) === 'v-slot') {\n consoleError(`v-tooltip's activator slot must be bound, try '