{"version":3,"sources":["webpack:///./node_modules/vuetify/lib/components/VForm/VForm.js","webpack:///./src/pages/farms/farm/calendar.vue?f527","webpack:///./src/pages/farms/farm/calendar.vue?d46f","webpack:///./src/pages/farms/farm/calendar.vue?a18e","webpack:///./node_modules/vuetify/lib/mixins/localable/index.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/mouse.js","webpack:///./node_modules/vuetify/lib/util/dateTimeUtils.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/util/timestamp.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/times.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/modes/common.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/modes/stack.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/modes/column.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/modes/index.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/util/props.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/calendar-base.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/util/events.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/calendar-with-events.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendarWeekly.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendarMonthly.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/mixins/calendar-with-intervals.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendarDaily.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendarCategory.js","webpack:///./node_modules/vuetify/lib/components/VCalendar/VCalendar.js","webpack:///./src/pages/farms/farm/calendar.vue"],"names":["extend","name","form","this","inheritAttrs","props","disabled","Boolean","lazyValidation","readonly","value","data","inputs","watchers","errorBag","watch","val","errors","Object","values","includes","$emit","deep","immediate","methods","input","watcher","$watch","$set","_uid","valid","shouldValidate","hasOwnProperty","filter","validate","length","forEach","reset","resetErrorBag","setTimeout","resetValidation","push","watchInput","found","find","i","unwatch","$delete","h","staticClass","attrs","novalidate","attrs$","on","submit","e","$slots","default","render","_vm","_h","$createElement","_c","_self","$t","scopedSlots","_u","key","fn","ref","_g","_b","_v","_s","prev","staticStyle","state","start","next","calendar","$o","fetch","done","startValue","events","getEventColor","showDate","showEvent","$event","toTop","_e","model","callback","$$v","expression","calendarEvent","desc","calendarDay","date","size","config","calendarEventLimit","addEvent","update","loading","close","_l","event","index","farm","removeEvent","$rules","calendarTypes","staticRenderFns","context","t","m","root","route","$route","$router","format","alas","make","dateDialog","eventDialog","output","days","day","type","$parent","color","setCalendar","add","subtract","yyyymm","farmId","params","id","window","scrollTo","error","month","r","calendarWriteFutureRefuseDays","Date","select","valueOf","getMonth","$init","write","removeByItem","locale","String","computed","$vuetify","lang","current","suffix","getEvent","getMouseEventHandlers","prevent","result","eventOptions","$listeners","prefix","passive","once","capture","handler","mouseEvent","undefined","button","buttons","preventDefault","stop","stopPropagation","Array","isArray","createUTCDate","year","UTC","isFinite","getUTCFullYear","setUTCFullYear","firstWeekOffset","firstDayOfWeek","firstDayOfYear","firstWeekDayInFirstWeek","firstWeekDayOfYear","getUTCDay","dayOfYear","isLeapYear","weeksInYear","weekOffset","weekOffsetNext","daysInYear","weekNumber","localeFirstDayOfYear","week","Math","ceil","PARSE_REGEX","PARSE_TIME","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","DAYS_IN_MONTH_MIN","DAYS_IN_MONTH_MAX","MONTH_MAX","MONTH_MIN","DAY_MIN","DAYS_IN_WEEK","MINUTES_IN_HOUR","MINUTE_MAX","MINUTES_IN_DAY","HOUR_MAX","OFFSET_YEAR","OFFSET_MONTH","OFFSET_HOUR","OFFSET_TIME","getStartOfWeek","timestamp","weekdays","today","copyTimestamp","findWeekday","prevDay","updateFormatted","updateRelative","hasTime","getEndOfWeek","end","getStartOfMonth","updateWeekday","getEndOfMonth","daysInMonth","validateTime","exec","hour","minute","parseTime","parts","parseInt","validateTimestamp","parseTimestamp","required","now","parseDate","Error","time","weekday","hasDay","past","present","future","getFullYear","getDate","getDay","getHours","getMinutes","getDayIdentifier","getTimeIdentifier","getTimestampIdentifier","a","b","isTimedless","updateHasTime","getTime","updateMinutes","minutes","floor","getWeekday","_","k","C","Y","padNumber","x","padded","str","nextDay","relativeDays","mover","diffMinutes","min","max","M","D","maxDays","getWeekdaySkips","skips","filled","skip","j","timestampToDate","createDayList","weekdaySkips","currentIdentifier","stopped","createIntervalList","first","count","intervals","mins","int","createNativeLocaleFormatter","getOptions","emptyFormatter","_t","Intl","DateTimeFormat","short","intlFormatter","validator","times","parsedNow","updateTimes","setPresent","getNow","updateDay","updateTime","target","MILLIS_IN_DAY","getVisuals","minStart","visuals","map","columnCount","column","left","width","sort","startTimestampIdentifier","endTimestampIdentifier","hasOverlap","s0","e0","s1","e1","exclude","setColumnCount","groups","group","groupVisual","getRange","getDayRange","startIdentifier","endIdentifier","getNormalizedRange","dayStart","getOpenGroup","timed","intersected","groupStart","groupEnd","getOverlapGroupHandler","firstWeekday","dayEvents","visual","targetGroup","FULL_WIDTH","DEFAULT_OFFSET","WIDTH_MULTIPLIER","stack","overlapThreshold","getGroups","nodes","child","getNode","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","n","added","childMax","identifier","removeMinutes","totalMinutes","addHours","addMinutes","CalendarEventOverlapModes","base","Number","validateWeekdays","hideHeader","shortWeekdays","weekdayFormat","Function","dayFormat","shortIntervals","intervalHeight","validateNumber","intervalWidth","intervalMinutes","firstInterval","firstTime","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","weeks","minWeeks","shortMonths","showMonthOnFirst","showWeek","monthFormat","category","categories","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","mode","eventMore","eventMoreText","eventRipple","eventMarginBottom","split","ints","visited","wrapped","d","mixins","directives","Resize","parsedWeekdays","reversed","slice","reverse","parsedStart","parsedEnd","options","timeZone","currentLocale","_tms","_short","longOptions","shortOptions","outside","parseEvent","startProperty","endProperty","startInput","endInput","startParsed","endParsed","endOffset","allDay","isEventOn","dayIdentifier","isEventStart","isEventOverlapping","WIDTH_FULL","WIDTH_START","ripple","timedEvent","eventTimedFunction","categoryMode","eventCategoryFunction","withTime","ampm","formatter","getFormatter","noEvents","eventsMap","getEventsMap","more","parentBounds","getBoundingClientRect","last","hide","hidden","eventBounds","bottom","style","display","innerHTML","elements","$refs","el","getAttribute","parentElement","weekdayIdentifier","scope","eventParsed","genEvent","class","height","refInFor","timeDelta","top","timeToY","scopeInput","_this$eventRipple","slot","$scopedSlots","text","eventTextColorFunction","background","eventColorFunction","overlapsNoon","singline","parsedEventOverlapThreshold","formatTime","timeSummary","eventSummary","eventNameFunction","delimiter","setTextColor","setBackgroundColor","getDefaultMouseEventHandlers","nativeEvent","genName","domProps","_this$eventRipple2","click","parsedEvents","eventWeekdays","isEventForCategory","eventModeFunction","isNode","getSlotChildren","getter","mapper","genPlaceholder","mapped","slots","slotDay","slotDayHeader","slotDayBody","getEventsForDay","genDayEvent","genMore","concat","getEventsForDayAll","getEventsForDayTimed","genTimedEvent","themeClasses","minDays","parsedMinWeeks","MAX_SAFE_INTEGER","genHeadDays","header","todayWeek","genHeadDay","unshift","isOutside","getRelativeClasses","weekdayFormatter","weekDays","genWeek","getWeekNumber","weekNodes","genDay","genWeekNumber","determineDay","genDayLabel","genDayLabelButton","hasMonth","fab","depressed","small","monthFormatter","dayFormatter","classes","dragstart","genHead","genWeeks","parseFloat","parsedFirstTime","parsedFirstInterval","parsedIntervalMinutes","parsedIntervalCount","parsedIntervalHeight","firstMinute","shortHourOptions","tms","interval","isFirst","_interval","bounds","currentTarget","baseMinutes","touchEvent","touches","changedTouches","clientY","addIntervals","minutesToPixels","y","pane","scrollArea","scrollTop","clamp","bodyHeight","gap","scrollPush","init","$nextTick","onResize","getScrollPush","area","offsetWidth","marginRight","genHeadIntervals","getSlotScope","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","genScrollArea","genPane","genDayContainer","genBodyIntervals","genDays","getTimestampAtEvent","genDayIntervals","genDayBody","genDayInterval","styler","intervalStyleDefault","genIntervalLabels","genIntervalLabel","shower","showIntervalLabelDefault","show","label","intervalFormatter","modifiers","quiet","genBody","parsedCategories","genDayHeaderCategory","getCategoryScope","genDayHeaderCategoryTitle","genDayBodyCategory","lastStart","lastEnd","around","parsedValue","component","VCalendarMonthly","parsedCategoryDays","getCategoryList","renderProps","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","updateEventVisibility","checkChange","requestAnimationFrame","amount","moved","forward","limit","move","$children","scrollToTime","categoryMap","create","categoryLength","ev","keys","$props","getScopedSlots","VBtn","VCalendar","VCard","VCardText","VCardTitle","VCol","VDialog","VForm","VIcon","VRow","VSelect","VSheet","VSpacer","VTextField","VTextarea","VToolbar","VTooltip"],"mappings":"kHAAA,wCAMe,sBAAO,OAAY,eAAmB,SAEnDA,OAAO,CACPC,KAAM,SAEN,UACE,MAAO,CACLC,KAAMC,OAIVC,cAAc,EACdC,MAAO,CACLC,SAAUC,QACVC,eAAgBD,QAChBE,SAAUF,QACVG,MAAOH,SAETI,KAAM,KAAM,CACVC,OAAQ,GACRC,SAAU,GACVC,SAAU,KAEZC,MAAO,CACLD,SAAU,CACR,QAAQE,GACN,MAAMC,EAASC,OAAOC,OAAOH,GAAKI,UAAS,GAC3CjB,KAAKkB,MAAM,SAAUJ,IAGvBK,MAAM,EACNC,WAAW,IAGfC,QAAS,CACP,WAAWC,GACT,MAAMC,EAAUD,GACPA,EAAME,OAAO,WAAYX,IAC9Bb,KAAKyB,KAAKzB,KAAKW,SAAUW,EAAMI,KAAMb,IACpC,CACDO,WAAW,IAITV,EAAW,CACfgB,KAAMJ,EAAMI,KACZC,MAAO,OACPC,eAAgB,QAelB,OAZI5B,KAAKK,eAEPK,EAASkB,eAAiBN,EAAME,OAAO,iBAAkBX,IAClDA,IAEDb,KAAKW,SAASkB,eAAeP,EAAMI,QACvChB,EAASiB,MAAQJ,EAAQD,OAG3BZ,EAASiB,MAAQJ,EAAQD,GAGpBZ,GAIT,WACE,OAAqE,IAA9DV,KAAKS,OAAOqB,OAAOR,IAAUA,EAAMS,UAAS,IAAOC,QAI5D,QACEhC,KAAKS,OAAOwB,QAAQX,GAASA,EAAMY,SACnClC,KAAKmC,iBAGP,gBACMnC,KAAKK,gBAEP+B,WAAW,KACTpC,KAAKW,SAAW,IACf,IAKP,kBACEX,KAAKS,OAAOwB,QAAQX,GAASA,EAAMe,mBACnCrC,KAAKmC,iBAGP,SAASb,GACPtB,KAAKS,OAAO6B,KAAKhB,GACjBtB,KAAKU,SAAS4B,KAAKtC,KAAKuC,WAAWjB,KAGrC,WAAWA,GACT,MAAMkB,EAAQxC,KAAKS,OAAOgC,KAAKC,GAAKA,EAAEhB,OAASJ,EAAMI,MACrD,IAAKc,EAAO,OACZ,MAAMG,EAAU3C,KAAKU,SAAS+B,KAAKC,GAAKA,EAAEhB,OAASc,EAAMd,MAErDiB,IACFA,EAAQhB,QACRgB,EAAQf,kBAGV5B,KAAKU,SAAWV,KAAKU,SAASoB,OAAOY,GAAKA,EAAEhB,OAASc,EAAMd,MAC3D1B,KAAKS,OAAST,KAAKS,OAAOqB,OAAOY,GAAKA,EAAEhB,OAASc,EAAMd,MACvD1B,KAAK4C,QAAQ5C,KAAKW,SAAU6B,EAAMd,QAKtC,OAAOmB,GACL,OAAOA,EAAE,OAAQ,CACfC,YAAa,SACbC,MAAO,CACLC,YAAY,KACThD,KAAKiD,QAEVC,GAAI,CACFC,OAAQC,GAAKpD,KAAKkB,MAAM,SAAUkC,KAEnCpD,KAAKqD,OAAOC,a,gHCjInB,IAAIC,EAAS,WAAa,IAAIC,EAAIxD,KAASyD,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,WAAW,CAACZ,MAAM,CAAC,MAAQS,EAAIK,GAAG,SAAS,CAACF,EAAG,YAAYA,EAAG,YAAY,CAACZ,MAAM,CAAC,OAAS,IAAIe,YAAYN,EAAIO,GAAG,CAAC,CAACC,IAAI,YAAYC,GAAG,SAASC,GAC7P,IAAIhB,EAAKgB,EAAIhB,GACTH,EAAQmB,EAAInB,MAChB,MAAO,CAACY,EAAG,SAASH,EAAIW,GAAGX,EAAIY,GAAG,GAAG,SAASrB,GAAM,GAAOG,GAAI,CAACM,EAAIa,GAAG,2BAA2B,CAACV,EAAG,OAAO,CAACH,EAAIa,GAAGb,EAAIc,GAAGd,EAAIK,GAAG,qBAAqB,GAAGF,EAAG,MAAM,CAACb,YAAY,eAAe,CAACa,EAAG,QAAQ,CAACZ,MAAM,CAAC,KAAO,IAAIG,GAAG,CAAC,MAAQM,EAAIe,OAAO,CAACZ,EAAG,SAAS,CAACH,EAAIa,GAAG,uBAAuB,GAAGV,EAAG,OAAO,CAACb,YAAY,OAAO0B,YAAY,CAAC,iBAAiB,WAAW,CAAChB,EAAIa,GAAGb,EAAIc,GAAGd,EAAIiB,MAAMC,UAAUf,EAAG,QAAQ,CAACZ,MAAM,CAAC,KAAO,IAAIG,GAAG,CAAC,MAAQM,EAAImB,OAAO,CAAChB,EAAG,SAAS,CAACH,EAAIa,GAAG,wBAAwB,IAAI,GAAIb,EAAIiB,MAAc,SAAEd,EAAG,aAAa,CAACZ,MAAM,CAAC,OAASS,EAAIiB,MAAMG,SAASC,GAAGC,MAAMC,OAAO,CAACpB,EAAG,UAAU,CAACb,YAAY,OAAOC,MAAM,CAAC,OAAS,QAAQ,CAACY,EAAG,aAAa,CAACO,IAAI,WAAWnB,MAAM,CAAC,MAAQS,EAAIwB,WAAW,OAASxB,EAAIyB,OAAO,cAAczB,EAAI0B,eAAehC,GAAG,CAAC,aAAaM,EAAI2B,SAAS,cAAc3B,EAAI4B,cAAc,GAAGzB,EAAG,MAAM,CAACb,YAAY,yBAAyB,CAACa,EAAG,QAAQ,CAACZ,MAAM,CAAC,KAAO,IAAIG,GAAG,CAAC,MAAQ,SAASmC,GAAQ,OAAO7B,EAAI8B,WAAW,CAAC3B,EAAG,SAAS,CAACH,EAAIa,GAAG,kBAAkBV,EAAG,MAAM,CAACH,EAAIa,GAAGb,EAAIc,GAAGd,EAAIK,GAAG,YAAY,IAAI,IAAI,GAAGL,EAAI+B,KAAK5B,EAAG,WAAW,CAACZ,MAAM,CAAC,YAAY,SAASyC,MAAM,CAACjF,MAAOiD,EAAIiB,MAAiB,YAAEgB,SAAS,SAAUC,GAAMlC,EAAI/B,KAAK+B,EAAIiB,MAAO,cAAeiB,IAAMC,WAAW,sBAAsB,CAAEnC,EAAIiB,MAAmB,cAAEd,EAAG,SAAS,CAACA,EAAG,eAAe,CAACH,EAAIa,GAAGb,EAAIc,GAAGd,EAAIiB,MAAMmB,cAAc9F,SAAS6D,EAAG,cAAc,CAACH,EAAIa,GAAGb,EAAIc,GAAGd,EAAIiB,MAAMmB,cAAcC,MAAQrC,EAAIK,GAAG,YAAY,GAAGL,EAAI+B,MAAM,GAAG5B,EAAG,WAAW,CAACZ,MAAM,CAAC,WAAa,GAAG,YAAY,SAASyC,MAAM,CAACjF,MAAOiD,EAAIiB,MAAgB,WAAEgB,SAAS,SAAUC,GAAMlC,EAAI/B,KAAK+B,EAAIiB,MAAO,aAAciB,IAAMC,WAAW,qBAAqB,CAAEnC,EAAIiB,MAAiB,YAAEd,EAAG,SAAS,CAACb,YAAY,QAAQ,CAACa,EAAG,YAAY,CAACb,YAAY,cAAcC,MAAM,CAAC,MAAQ,KAAK,CAACY,EAAG,OAAO,CAACH,EAAIa,GAAGb,EAAIc,GAAGd,EAAIiB,MAAMqB,YAAYC,SAASpC,EAAG,YAAaH,EAAIiB,MAAMqB,YAAYb,OAAOe,KAAOxC,EAAIyC,OAAOC,mBAAoBvC,EAAG,QAAQ,CAACZ,MAAM,CAAC,KAAO,IAAIG,GAAG,CAAC,MAAQM,EAAI2C,WAAW,CAACxC,EAAG,SAAS,CAACH,EAAIa,GAAG,eAAe,GAAGb,EAAI+B,KAAK5B,EAAG,QAAQ,CAACZ,MAAM,CAAC,KAAO,GAAG,UAAYS,EAAIiB,MAAM1C,SAAS,QAAUyB,EAAIiB,MAAMqB,YAAYjB,GAAGuB,OAAOC,SAASnD,GAAG,CAAC,MAAQM,EAAI8C,QAAQ,CAAC3C,EAAG,SAAS,CAACH,EAAIa,GAAG,gBAAgB,IAAI,GAAGV,EAAG,MAAM,CAACb,YAAY,aAAa,CAACa,EAAG,SAAS,CAAC6B,MAAM,CAACjF,MAAOiD,EAAIiB,MAAc,SAAEgB,SAAS,SAAUC,GAAMlC,EAAI/B,KAAK+B,EAAIiB,MAAO,WAAYiB,IAAMC,WAAW,mBAAmB,CAAChC,EAAG,QAAQH,EAAI+C,GAAI/C,EAAIiB,MAAMqB,YAAYb,OAAY,OAAE,SAASuB,EAAMC,GAAO,OAAO9C,EAAG,QAAQ,CAACK,IAAIyC,EAAQ,MAAM1D,MAAM,CAAC,KAAO,KAAK,GAAK,IAAI,GAAK,IAAI,GAAK,MAAM,CAACY,EAAG,SAAS,CAACA,EAAG,eAAe,CAACb,YAAY,aAAa,CAACa,EAAG,MAAM,CAACH,EAAIa,GAAGb,EAAIc,GAAGd,EAAIkD,KAAK5G,SAAS6D,EAAG,YAAYA,EAAG,QAAQ,CAACZ,MAAM,CAAC,KAAO,IAAIG,GAAG,CAAC,MAAQ,SAASmC,GAAQ,OAAO7B,EAAImD,YAAYH,MAAU,CAAC7C,EAAG,SAAS,CAACH,EAAIa,GAAG,iBAAiB,IAAI,GAAGV,EAAG,cAAc,CAACA,EAAG,eAAe,CAACb,YAAY,WAAWC,MAAM,CAAC,SAAW,GAAG,MAAQS,EAAIK,GAAG,MAAM,MAAQ2C,EAAMI,OAAO,SAASpB,MAAM,CAACjF,MAAOiG,EAAU,KAAEf,SAAS,SAAUC,GAAMlC,EAAI/B,KAAK+E,EAAO,OAAQd,IAAMC,WAAW,gBAAgBhC,EAAG,WAAW,CAACb,YAAY,WAAWC,MAAM,CAAC,SAAW,GAAG,YAAY,OAAO,aAAa,QAAQ,MAAQyD,EAAMI,OAAO,QAAQ,MAAQpD,EAAIyC,OAAOY,cAAc,MAAQrD,EAAIK,GAAG,OAAO2B,MAAM,CAACjF,MAAOiG,EAAU,KAAEf,SAAS,SAAUC,GAAMlC,EAAI/B,KAAK+E,EAAO,OAAQd,IAAMC,WAAW,gBAAgBhC,EAAG,aAAa,CAACZ,MAAM,CAAC,OAAS,QAAQ,QAAU,KAAK,SAAW,GAAG,MAAQyD,EAAMI,OAAO,QAAQ,MAAQpD,EAAIK,GAAG,OAAO2B,MAAM,CAACjF,MAAOiG,EAAU,KAAEf,SAAS,SAAUC,GAAMlC,EAAI/B,KAAK+E,EAAO,OAAQd,IAAMC,WAAW,iBAAiB,IAAI,IAAI,MAAK,IAAI,IAAI,IAAI,GAAGnC,EAAI+B,MAAM,IAAI,IACv/GuB,EAAkB,G,qECCP,iBAAgB,CAC3B,MAAM5G,EAAO6G,GACT,IAAIC,EAAIC,GAAKF,EAAQG,KAAKrD,GAAGoD,GACzBE,EAAQJ,EAAQG,KAAKE,OAMrBV,GALSK,EAAQG,KAAKG,QAKf,eAAI,OAAOvC,MAAM,UACxBmB,EAAS,eAAI,OAAOnB,MAAM,WAK1BL,EAAQ,eAAS,CACjBsB,KAAM,KACNrB,MAAO,MAAS4C,OAAO,WACvBvF,UAAU,EACV6C,SAAU2C,EAAA,KAAKC,KAAK,OAAQ,YAC5B1B,YAAayB,EAAA,KAAKC,KAAK,OAAQ,eAC/B5B,cAAe2B,EAAA,KAAKC,KAAK,OAAQ,iBACjCC,YAAY,EACZC,aAAa,IAMb1C,EAAa,eAAS,IAAM,IAAOP,EAAMC,OAAO4C,OAAO,eACvDrC,EAAS,eAAS,KAClB,GAAsB,MAAlBR,EAAMG,SACN,MAAO,GAEX,IAAI+C,EAAS,GAYb,OAXAlD,EAAMG,SAASgD,KAAK3F,QAAQ4F,IACxBA,EAAI5C,OAAOhD,QAAQuE,IACf,IAAIsB,EAAO7B,EAAO1F,MAAMsG,cAAcpE,KAAKqF,GAAQA,EAAKvH,QAAUiG,EAAMsB,MACxEH,EAAOrF,KAAK,CACRxC,KAAM0G,EAAM1G,KACZ4E,MAAO8B,EAAMuB,QAAQhC,KACrBiC,MAAOF,EAAOA,EAAKE,MAAQ,UAC3BxC,MAAOgB,QAIZmB,IAMX,eAAU,KACNM,EAAYxD,EAAMC,SAMtB,IAAIC,EAAO,KACPF,EAAMC,MAAQ,IAAOD,EAAMC,OAAOwD,IAAI,EAAG,SAASZ,OAAO,WACzDW,EAAYxD,EAAMC,QAElBH,EAAO,KACPE,EAAMC,MAAQ,IAAOD,EAAMC,OAAOyD,SAAS,EAAG,SAASb,OAAO,WAC9DW,EAAYxD,EAAMC,QAElBuD,EAAeG,IACf3D,EAAMG,SAAW2C,EAAA,KAAKC,KAAK,OAAQ,YACnC/C,EAAMG,SAASC,GAAGC,MAAMJ,MAAM,CAC1B2D,OAAQlB,EAAMmB,OAAOC,GACrBH,YAGJ9C,EAAQ,KACRkD,OAAOC,SAAS,EAAG,IAEnBnC,EAAQ,IAAM,eAAUtG,UAAM,OAAQ,GAAQ,YAC9C,UACUyE,EAAMqB,YAAYjB,GAAGuB,OAAO1B,QAEtC,MAAOgE,GACH,eAAUA,GAEdjE,EAAMgD,YAAa,KAEnBrC,EAAY,EAAGoB,YACf/B,EAAMmB,cAAgBY,EAAMhB,MAC5Bf,EAAMiD,aAAc,GAEpBvC,EAAW,EAAGwD,QAAO5C,WACrB,IAAI6C,EAAI3C,EAAO1F,MAAMsI,8BACjBnE,EAAQ,IAAIoE,KAAKrE,EAAMC,OACvBqE,EAAS,IAAOhD,GAAMiD,UAC1B,GAAID,EAAS,MAASZ,SAAS,EAAG,KAAKa,UACnC,OAAO,eAAUhC,EAAE,eAEvB,GAAItC,EAAMuE,WAAa,IAAMN,EACzB,OAAO,eAAU3B,EAAE,YAEvB,GAAI+B,EAAS,MAASb,IAAIU,EAAG,KAAKI,UAC9B,OAAO,eAAUhC,EAAE,iBAEvB,IAAIuB,EAAKpB,EAAMmB,OAAOC,GAClBV,EAAMpD,EAAMG,SAASgD,KAAK9C,MAAMiB,GACzB,MAAP8B,IACAA,EAAMN,EAAA,KAAKC,KAAK,OAAQ,eAAe0B,MAAM,CACzCnD,KAAMA,EACNsC,OAAQE,IAEZ9D,EAAMG,SAASgD,KAAKuB,MAAMtB,IAE9BpD,EAAMgD,YAAa,EACnBhD,EAAMqB,YAAc+B,GAEpB1B,EAAW,KACX1B,EAAMqB,YAAYb,OAAOkE,MAAM,CAC3BrJ,KAAM,MAGVoF,EAAiBsB,GACVA,EAAMwB,MAEbrB,EAAeH,IACf/B,EAAMqB,YAAYb,OAAOmE,aAAa5C,IAM1C,MAAO,CACHE,OACAT,SACAxB,QACAO,aACAC,SACAN,OACAJ,OACA0D,cACA3C,QACAgB,QACAlB,YACAD,WACAgB,WACAjB,gBACAyB,kBCtJwW,I,yGCCrW,SAAI9G,OAAO,CACxBC,KAAM,YACNI,MAAO,CACLmJ,OAAQC,QAEVC,SAAU,CACR,gBACE,OAAOvJ,KAAKqJ,QAAUrJ,KAAKwJ,SAASC,KAAKC,YCPhC,SAAI7J,OAAO,CACxBC,KAAM,QACNuB,QAAS,CACP,6BAA6BsI,EAAQC,GACnC,OAAO5J,KAAK6J,sBAAsB,CAChC,CAAC,QAAUF,GAAS,CAClBnD,MAAO,SAET,CAAC,cAAgBmD,GAAS,CACxBnD,MAAO,cACPsD,SAAS,EACTC,QAAQ,GAEV,CAAC,YAAcJ,GAAS,CACtBnD,MAAO,aAET,CAAC,YAAcmD,GAAS,CACtBnD,MAAO,aAET,CAAC,UAAYmD,GAAS,CACpBnD,MAAO,WAET,CAAC,aAAemD,GAAS,CACvBnD,MAAO,cAET,CAAC,aAAemD,GAAS,CACvBnD,MAAO,cAET,CAAC,aAAemD,GAAS,CACvBnD,MAAO,cAET,CAAC,YAAcmD,GAAS,CACtBnD,MAAO,aAET,CAAC,WAAamD,GAAS,CACrBnD,MAAO,aAERoD,IAGL,sBAAsB3E,EAAQ2E,GAC5B,MAAM1G,EAAK,GAEX,IAAK,MAAMsD,KAASvB,EAAQ,CAC1B,MAAM+E,EAAe/E,EAAOuB,GAC5B,IAAKxG,KAAKiK,WAAWzD,GAAQ,SAE7B,MAAM0D,EAASF,EAAaG,QAAU,KAAOH,EAAaI,KAAO,IAAM,KAAOJ,EAAaK,QAAU,IAAM,IACrGrG,EAAMkG,EAASF,EAAaxD,MAE5B8D,EAAUlH,IACd,MAAMmH,EAAanH,EAcnB,YAZ4BoH,IAAxBR,EAAaS,QAAwBF,EAAWG,QAAU,GAAKH,EAAWE,SAAWT,EAAaS,UAChGT,EAAaF,SACf1G,EAAEuH,iBAGAX,EAAaY,MACfxH,EAAEyH,kBAGJ7K,KAAKkB,MAAMsF,EAAOoD,EAASxG,KAGtB4G,EAAaD,QAGlB/F,KAAOd,EAEL4H,MAAMC,QAAQ7H,EAAGc,IACnBd,EAAGc,GAAK1B,KAAKgI,GAEbpH,EAAGc,GAAO,CAACd,EAAGc,GAAMsG,GAGtBpH,EAAGc,GAAOsG,EAId,OAAOpH,M,YCjFb,SAAS8H,EAAcC,EAAMtC,EAAQ,EAAGd,EAAM,GAC5C,IAAI9B,EAYJ,OAVIkF,EAAO,KAAOA,GAAQ,GACxBlF,EAAO,IAAI+C,KAAKA,KAAKoC,IAAID,EAAMtC,EAAOd,IAElCsD,SAASpF,EAAKqF,mBAChBrF,EAAKsF,eAAeJ,IAGtBlF,EAAO,IAAI+C,KAAKA,KAAKoC,IAAID,EAAMtC,EAAOd,IAGjC9B,EAGT,SAASuF,EAAgBL,EAAMM,EAAgBC,GAC7C,MAAMC,EAA0B,EAAIF,EAAiBC,EAC/CE,GAAsB,EAAIV,EAAcC,EAAM,EAAGQ,GAAyBE,YAAcJ,GAAkB,EAChH,OAAQG,EAAqBD,EAA0B,EAGzD,SAASG,EAAUX,EAAMtC,EAAOd,EAAK0D,GACnC,IAAIK,EAAY,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAKjD,GAMxE,OAJIA,EAAQ,GAAKkD,EAAWZ,IAC1BW,IAGKA,EAAY/D,EAGrB,SAASiE,EAAYb,EAAMM,EAAgBC,GACzC,MAAMO,EAAaT,EAAgBL,EAAMM,EAAgBC,GACnDQ,EAAiBV,EAAgBL,EAAO,EAAGM,EAAgBC,GAC3DS,EAAaJ,EAAWZ,GAAQ,IAAM,IAC5C,OAAQgB,EAAaF,EAAaC,GAAkB,EAG/C,SAASE,EAAWjB,EAAMtC,EAAOd,EAAK0D,EAAgBY,GAC3D,MAAMJ,EAAaT,EAAgBL,EAAMM,EAAgBY,GACnDC,EAAOC,KAAKC,MAAMV,EAAUX,EAAMtC,EAAOd,EAAK0D,GAAkBQ,GAAc,GAEpF,OAAIK,EAAO,EACFA,EAAON,EAAYb,EAAO,EAAGM,EAAgBY,GAC3CC,EAAON,EAAYb,EAAMM,EAAgBY,GAC3CC,EAAON,EAAYb,EAAMM,EAAgBY,GAEzCC,EAGJ,SAASP,EAAWZ,GACzB,OAAOA,EAAO,IAAM,GAAKA,EAAO,MAAQ,GAAKA,EAAO,MAAQ,ECnDvD,MAAMsB,EAAc,+EACdC,EAAa,gCACbC,EAAgB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAChEC,EAAqB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACrEC,EAAoB,GACpBC,EAAoB,GACpBC,EAAY,GACZC,EAAY,EACZC,EAAU,EACVC,EAAe,EACfC,EAAkB,GAClBC,EAAa,GACbC,EAAiB,KAEjBC,EAAW,GAEXC,EAAc,IACdC,EAAe,IACfC,EAAc,IACdC,EAAc,IACpB,SAASC,EAAeC,EAAWC,EAAUC,GAClD,MAAMlJ,EAAQmJ,GAAcH,GAQ5B,OAPAI,GAAYpJ,EAAOiJ,EAAS,GAAII,IAChCC,GAAgBtJ,GAEZkJ,GACFK,GAAevJ,EAAOkJ,EAAOlJ,EAAMwJ,SAG9BxJ,EAEF,SAASyJ,EAAaT,EAAWC,EAAUC,GAChD,MAAMQ,EAAMP,GAAcH,GAQ1B,OAPAI,GAAYM,EAAKT,EAASA,EAAS3L,OAAS,IAC5CgM,GAAgBI,GAEZR,GACFK,GAAeG,EAAKR,EAAOQ,EAAIF,SAG1BE,EAEF,SAASC,EAAgBX,GAC9B,MAAMhJ,EAAQmJ,GAAcH,GAI5B,OAHAhJ,EAAMmD,IAAMkF,EACZuB,GAAc5J,GACdsJ,GAAgBtJ,GACTA,EAEF,SAAS6J,EAAcb,GAC5B,MAAMU,EAAMP,GAAcH,GAI1B,OAHAU,EAAIvG,IAAM2G,GAAYJ,EAAInD,KAAMmD,EAAIzF,OACpC2F,GAAcF,GACdJ,GAAgBI,GACTA,EAEF,SAASK,EAAanN,GAC3B,MAAwB,kBAAVA,GAAsB6J,SAAS7J,MAAYkL,EAAWkC,KAAKpN,IAA2B,kBAAVA,GAAsB6J,SAAS7J,EAAMqN,OAASxD,SAAS7J,EAAMsN,QAElJ,SAASC,EAAUvN,GACxB,GAAqB,kBAAVA,EAET,OAAOA,EACF,GAAqB,kBAAVA,EAAoB,CAEpC,MAAMwN,EAAQtC,EAAWkC,KAAKpN,GAE9B,QAAKwN,GAIuB,GAArBC,SAASD,EAAM,IAAWC,SAASD,EAAM,IAAM,GACjD,MAAqB,kBAAVxN,IAEU,kBAAfA,EAAMqN,MAA6C,kBAAjBrN,EAAMsN,QAI/B,GAAbtN,EAAMqN,KAAYrN,EAAMsN,QAM5B,SAASI,GAAkB1N,GAChC,MAAwB,kBAAVA,GAAsB6J,SAAS7J,IAA2B,kBAAVA,KAAwBiL,EAAYmC,KAAKpN,IAAUA,aAAiBwH,KAE7H,SAASmG,GAAe3N,EAAO4N,GAAW,EAAOC,GAKtD,GAJqB,kBAAV7N,GAAsB6J,SAAS7J,KACxCA,EAAQ,IAAIwH,KAAKxH,IAGfA,aAAiBwH,KAAM,CACzB,MAAM/C,EAAOqJ,GAAU9N,GAMvB,OAJI6N,GACFlB,GAAelI,EAAMoJ,EAAKpJ,EAAKmI,SAG1BnI,EAGT,GAAqB,kBAAVzE,EAAoB,CAC7B,GAAI4N,EACF,MAAM,IAAIG,MAAS/N,EAAH,+LAGlB,OAAO,KAIT,MAAMwN,EAAQvC,EAAYmC,KAAKpN,GAE/B,IAAKwN,EAAO,CACV,GAAII,EACF,MAAM,IAAIG,MAAS/N,EAAH,+LAGlB,OAAO,KAGT,MAAMoM,EAAY,CAChB3H,KAAMzE,EACNgO,KAAM,GACNrE,KAAM8D,SAASD,EAAM,IACrBnG,MAAOoG,SAASD,EAAM,IACtBjH,IAAKkH,SAASD,EAAM,KAAO,EAC3BH,KAAMI,SAASD,EAAM,KAAO,EAC5BF,OAAQG,SAASD,EAAM,KAAO,EAC9BS,QAAS,EACTC,SAAUV,EAAM,GAChBZ,WAAYY,EAAM,KAAMA,EAAM,IAC9BW,MAAM,EACNC,SAAS,EACTC,QAAQ,GASV,OAPArB,GAAcZ,GACdM,GAAgBN,GAEZyB,GACFlB,GAAeP,EAAWyB,EAAKzB,EAAUQ,SAGpCR,EAEF,SAAS0B,GAAUrJ,GACxB,OAAOiI,GAAgB,CACrBjI,KAAM,GACNuJ,KAAM,GACNrE,KAAMlF,EAAK6J,cACXjH,MAAO5C,EAAKkD,WAAa,EACzBpB,IAAK9B,EAAK8J,UACVN,QAASxJ,EAAK+J,SACdnB,KAAM5I,EAAKgK,WACXnB,OAAQ7I,EAAKiK,aACbR,QAAQ,EACRtB,SAAS,EACTuB,MAAM,EACNC,SAAS,EACTC,QAAQ,IAGL,SAASM,GAAiBvC,GAC/B,OAAOA,EAAUzC,KAAOoC,EAAcK,EAAU/E,MAAQ2E,EAAeI,EAAU7F,IAE5E,SAASqI,GAAkBxC,GAChC,OAAOA,EAAUiB,KAAOpB,EAAcG,EAAUkB,OAE3C,SAASuB,GAAuBzC,GACrC,OAAOuC,GAAiBvC,GAAaF,EAAc0C,GAAkBxC,GAEhE,SAASO,GAAeP,EAAWyB,EAAKG,GAAO,GACpD,IAAIc,EAAIH,GAAiBd,GACrBkB,EAAIJ,GAAiBvC,GACrBgC,EAAUU,IAAMC,EAWpB,OATI3C,EAAUQ,SAAWoB,GAAQI,IAC/BU,EAAIF,GAAkBf,GACtBkB,EAAIH,GAAkBxC,GACtBgC,EAAUU,IAAMC,GAGlB3C,EAAU+B,KAAOY,EAAID,EACrB1C,EAAUgC,QAAUA,EACpBhC,EAAUiC,OAASU,EAAID,EAChB1C,EAEF,SAAS4C,GAAYhP,GAC1B,OAAOA,aAAiBwH,MAAyB,kBAAVxH,GAAsB6J,SAAS7J,GAEjE,SAASiP,GAAc7C,EAAWQ,EAASiB,GAehD,OAdIzB,EAAUQ,UAAYA,IACxBR,EAAUQ,QAAUA,EAEfA,IACHR,EAAUiB,KAAOvB,EACjBM,EAAUkB,OAAS1B,EACnBQ,EAAU4B,KAAOkB,GAAQ9C,IAGvByB,GACFlB,GAAeP,EAAWyB,EAAKzB,EAAUQ,UAItCR,EAEF,SAAS+C,GAAc/C,EAAWgD,EAASvB,GAUhD,OATAzB,EAAUQ,SAAU,EACpBR,EAAUiB,KAAOtC,KAAKsE,MAAMD,EAAUzD,GACtCS,EAAUkB,OAAS8B,EAAUzD,EAC7BS,EAAU4B,KAAOkB,GAAQ9C,GAErByB,GACFlB,GAAeP,EAAWyB,GAAK,GAG1BzB,EAEF,SAASY,GAAcZ,GAE5B,OADAA,EAAU6B,QAAUqB,GAAWlD,GACxBA,EAEF,SAASM,GAAgBN,GAG9B,OAFAA,EAAU4B,KAAOkB,GAAQ9C,GACzBA,EAAU3H,KAAO8J,GAAQnC,GAClBA,EAEF,SAASkD,GAAWlD,GACzB,GAAIA,EAAU8B,OAAQ,CACpB,MAAMqB,EAAIxE,KAAKsE,MACTG,EAAIpD,EAAU7F,IACdZ,GAAKyG,EAAU/E,MAAQ,GAAKkE,EAAY,EAExCkE,EAAIF,EAAEnD,EAAUzC,KAAO,KAEvB+F,EAAItD,EAAUzC,KAAO,KAAOyC,EAAU/E,OAAS,EAAI,EAAI,GAC7D,QAASmI,EAAID,EAAE,IAAM5J,EAAI,IAAO,EAAI8J,EAAIC,EAAIH,EAAEG,EAAI,GAAKH,EAAEE,EAAI,IAAM,EAAI,GAAK,EAG9E,OAAOrD,EAAU6B,QAEZ,SAASf,GAAYvD,EAAMtC,GAChC,OAAOkD,EAAWZ,GAAQyB,EAAmB/D,GAAS8D,EAAc9D,GAE/D,SAASkF,GAAcH,GAC5B,MAAM,KACJ3H,EAAI,KACJuJ,EAAI,KACJrE,EAAI,MACJtC,EAAK,IACLd,EAAG,QACH0H,EAAO,KACPZ,EAAI,OACJC,EAAM,OACNY,EAAM,QACNtB,EAAO,KACPuB,EAAI,QACJC,EAAO,OACPC,GACEjC,EACJ,MAAO,CACL3H,OACAuJ,OACArE,OACAtC,QACAd,MACA0H,UACAZ,OACAC,SACAY,SACAtB,UACAuB,OACAC,UACAC,UAGG,SAASsB,GAAUC,EAAGlP,GAC3B,IAAImP,EAAS7H,OAAO4H,GAEpB,MAAOC,EAAOnP,OAASA,EACrBmP,EAAS,IAAMA,EAGjB,OAAOA,EAEF,SAAStB,GAAQnC,GACtB,IAAI0D,EAAM,GAAGH,GAAUvD,EAAUzC,KAAM,MAAMgG,GAAUvD,EAAU/E,MAAO,KAExE,OADI+E,EAAU8B,SAAQ4B,GAAO,IAAIH,GAAUvD,EAAU7F,IAAK,IACnDuJ,EAEF,SAASZ,GAAQ9C,GACtB,OAAKA,EAAUQ,QAIR,GAAG+C,GAAUvD,EAAUiB,KAAM,MAAMsC,GAAUvD,EAAUkB,OAAQ,KAH7D,GAoBJ,SAASyC,GAAQ3D,GActB,OAbAA,EAAU7F,MACV6F,EAAU6B,SAAW7B,EAAU6B,QAAU,GAAKvC,EAE1CU,EAAU7F,IAAM8E,GAAqBe,EAAU7F,IAAM2G,GAAYd,EAAUzC,KAAMyC,EAAU/E,SAC7F+E,EAAU7F,IAAMkF,EAChBW,EAAU/E,QAEN+E,EAAU/E,MAAQkE,IACpBa,EAAU/E,MAAQmE,EAClBY,EAAUzC,SAIPyC,EAEF,SAASK,GAAQL,GAetB,OAdAA,EAAU7F,MACV6F,EAAU6B,SAAW7B,EAAU6B,QAAU,GAAKvC,EAE1CU,EAAU7F,IAAMkF,IAClBW,EAAU/E,QAEN+E,EAAU/E,MAAQmE,IACpBY,EAAUzC,OACVyC,EAAU/E,MAAQkE,GAGpBa,EAAU7F,IAAM2G,GAAYd,EAAUzC,KAAMyC,EAAU/E,QAGjD+E,EAEF,SAAS4D,GAAa5D,EAAW6D,EAAQF,GAASzJ,EAAO,GAC9D,QAASA,GAAQ,EAAG2J,EAAM7D,GAE1B,OAAOA,EAEF,SAAS8D,GAAYC,EAAKC,GAC/B,MAAMV,EAA4B,QAAvBU,EAAIzG,KAAOwG,EAAIxG,MACpB0G,EAA8B,OAAzBD,EAAI/I,MAAQ8I,EAAI9I,OACrBiJ,EAA0B,MAArBF,EAAI7J,IAAM4J,EAAI5J,KACnBhF,EAA4B,IAAvB6O,EAAI/C,KAAO8C,EAAI9C,MACpB1H,EAAIyK,EAAI9C,OAAS6C,EAAI7C,OAC3B,OAAOoC,EAAIW,EAAIC,EAAI/O,EAAIoE,EAElB,SAAS6G,GAAYJ,EAAW6B,EAASgC,EAAQF,GAASQ,EAAU,GACzE,MAAOnE,EAAU6B,UAAYA,KAAasC,GAAW,EAAGN,EAAM7D,GAE9D,OAAOA,EAEF,SAASoE,GAAgBnE,GAC9B,MAAMoE,EAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,EAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAElC,IAAK,IAAItP,EAAI,EAAGA,EAAIiL,EAAS3L,OAAQU,IACnCsP,EAAOrE,EAASjL,IAAM,EAGxB,IAAK,IAAIoO,EAAI,EAAGA,EAAI9D,EAAc8D,IAAK,CACrC,IAAImB,EAAO,EAEX,IAAK,IAAIC,EAAI,EAAGA,EAAIlF,EAAckF,IAAK,CACrC,MAAMvN,GAAQmM,EAAIoB,GAAKlF,EAEvB,GAAIgF,EAAOrN,GACT,MAGFsN,IAGFF,EAAMjB,GAAKkB,EAAOlB,GAAKmB,EAGzB,OAAOF,EAEF,SAASI,GAAgBzE,GAC9B,MAAM4B,EAAO,GAAG2B,GAAUvD,EAAUiB,KAAM,MAAMsC,GAAUvD,EAAUkB,OAAQ,KACtE7I,EAAO2H,EAAU3H,KACvB,OAAO,IAAI+C,KAAK,GAAG/C,KAAQuJ,cAEtB,SAAS8C,GAAc1N,EAAO0J,EAAKe,EAAKkD,EAAcX,EAAM,GAAID,EAAM,GAC3E,MAAM7G,EAAOqF,GAAiB7B,GACxBxG,EAAO,GACb,IAAI8B,EAAUmE,GAAcnJ,GACxB4N,EAAoB,EACpBC,EAAUD,IAAsB1H,EAEpC,GAAIA,EAAOqF,GAAiBvL,GAC1B,MAAM,IAAI2K,MAAM,wCAGlB,QAASkD,GAAW3K,EAAK5F,OAASyP,IAAQ7J,EAAK5F,OAAS0P,EAAK,CAI3D,GAHAY,EAAoBrC,GAAiBvG,GACrC6I,EAAUA,GAAWD,IAAsB1H,EAEL,IAAlCyH,EAAa3I,EAAQ6F,SAAgB,CACvC7F,EAAU2H,GAAQ3H,GAClB,SAGF,MAAM7B,EAAMgG,GAAcnE,GAC1BsE,GAAgBnG,GAChBoG,GAAepG,EAAKsH,GACpBvH,EAAKtF,KAAKuF,GACV6B,EAAU4H,GAAa5H,EAAS2H,GAASgB,EAAa3I,EAAQ6F,UAGhE,IAAK3H,EAAK5F,OAAQ,MAAM,IAAIqN,MAAM,sEAClC,OAAOzH,EAEF,SAAS4K,GAAmB9E,EAAW+E,EAAO/B,EAASgC,EAAOvD,GACnE,MAAMwD,EAAY,GAElB,IAAK,IAAIjQ,EAAI,EAAGA,EAAIgQ,EAAOhQ,IAAK,CAC9B,MAAMkQ,EAAOH,EAAQ/P,EAAIgO,EACnBmC,EAAMhF,GAAcH,GAC1BiF,EAAUrQ,KAAKmO,GAAcoC,EAAKD,EAAMzD,IAG1C,OAAOwD,EAEF,SAASG,GAA4BzJ,EAAQ0J,GAClD,MAAMC,EAAiB,CAACC,EAAI3O,IAAO,GAEnC,MAAoB,qBAAT4O,MAAuD,qBAAxBA,KAAKC,eACtCH,EAGF,CAACtF,EAAW0F,KACjB,IACE,MAAMC,EAAgB,IAAIH,KAAKC,eAAe9J,QAAUmB,EAAWuI,EAAWrF,EAAW0F,IACzF,OAAOC,EAAc/L,OAAO6K,GAAgBzE,IAC5C,MAAOtK,GACP,MAAO,KC/bE,cAAIvD,OAAO,CACxBC,KAAM,QACNI,MAAO,CACLiP,IAAK,CACHrH,KAAMwB,OACNgK,UAAWtE,KAGfxO,KAAM,KAAM,CACV+S,MAAO,CACLpE,IAAKF,GAAe,oBAAoB,GACxCrB,MAAOqB,GAAe,cAAc,MAGxC1F,SAAU,CACR,YACE,OAAOvJ,KAAKmP,IAAMF,GAAejP,KAAKmP,KAAK,GAAQ,OAIvDvO,MAAO,CACL4S,UAAW,eAGb,UACExT,KAAKyT,cACLzT,KAAK0T,cAGPrS,QAAS,CACP,aACErB,KAAKuT,MAAMpE,IAAIO,QAAU1P,KAAKuT,MAAM3F,MAAM8B,SAAU,EACpD1P,KAAKuT,MAAMpE,IAAIM,KAAOzP,KAAKuT,MAAM3F,MAAM6B,MAAO,EAC9CzP,KAAKuT,MAAMpE,IAAIQ,OAAS3P,KAAKuT,MAAM3F,MAAM+B,QAAS,GAGpD,cACE,MAAMR,EAAMnP,KAAKwT,WAAaxT,KAAK2T,SACnC3T,KAAK4T,UAAUzE,EAAKnP,KAAKuT,MAAMpE,KAC/BnP,KAAK6T,WAAW1E,EAAKnP,KAAKuT,MAAMpE,KAChCnP,KAAK4T,UAAUzE,EAAKnP,KAAKuT,MAAM3F,QAGjC,SACE,OAAOwB,GAAU,IAAItG,OAGvB,UAAUqG,EAAK2E,GACT3E,EAAIpJ,OAAS+N,EAAO/N,OACtB+N,EAAO7I,KAAOkE,EAAIlE,KAClB6I,EAAOnL,MAAQwG,EAAIxG,MACnBmL,EAAOjM,IAAMsH,EAAItH,IACjBiM,EAAOvE,QAAUJ,EAAII,QACrBuE,EAAO/N,KAAOoJ,EAAIpJ,OAItB,WAAWoJ,EAAK2E,GACV3E,EAAIG,OAASwE,EAAOxE,OACtBwE,EAAOnF,KAAOQ,EAAIR,KAClBmF,EAAOlF,OAASO,EAAIP,OACpBkF,EAAOxE,KAAOH,EAAIG,U,aC9D1B,MAAMyE,GAAgB,MACf,SAASC,GAAW/O,EAAQgP,EAAW,GAC5C,MAAMC,EAAUjP,EAAOkP,IAAI3N,IAAS,CAClCA,QACA4N,YAAa,EACbC,OAAQ,EACRC,KAAM,EACNC,MAAO,OAKT,OAHAL,EAAQM,KAAK,CAACpE,EAAGC,IACRhE,KAAKqF,IAAIuC,EAAU7D,EAAE5J,MAAMiO,0BAA4BpI,KAAKqF,IAAIuC,EAAU5D,EAAE7J,MAAMiO,2BAA6BpE,EAAE7J,MAAMkO,uBAAyBtE,EAAE5J,MAAMkO,wBAE1JR,EAEF,SAASS,GAAWC,EAAIC,EAAIC,EAAIC,EAAIC,GAAU,GACnD,OAAOA,IAAYJ,GAAMG,GAAMF,GAAMC,KAAQF,EAAKG,GAAMF,EAAKC,GAExD,SAASG,GAAeC,GAC7BA,EAAOjT,QAAQkT,IACbA,EAAMjB,QAAQjS,QAAQmT,IACpBA,EAAYhB,YAAcc,EAAOlT,WAIhC,SAASqT,GAAS7O,GACvB,MAAO,CAACA,EAAMiO,yBAA0BjO,EAAMkO,wBAEzC,SAASY,GAAY9O,GAC1B,MAAO,CAACA,EAAM+O,gBAAiB/O,EAAMgP,eAEhC,SAASC,GAAmBjP,EAAOkP,GACxC,MAAO,CAACrJ,KAAKqF,IAAIgE,EAAUlP,EAAMiO,0BAA2BpI,KAAKoF,IAAIiE,EAAW3B,GAAevN,EAAMkO,yBAEhG,SAASiB,GAAaT,EAAQxQ,EAAO0J,EAAKwH,GAC/C,IAAK,IAAIlT,EAAI,EAAGA,EAAIwS,EAAOlT,OAAQU,IAAK,CACtC,MAAMyS,EAAQD,EAAOxS,GACrB,IAAImT,GAAc,EAElB,GAAIlB,GAAWjQ,EAAO0J,EAAK+G,EAAMzQ,MAAOyQ,EAAM/G,IAAKwH,GACjD,IAAK,IAAI9E,EAAI,EAAGA,EAAIqE,EAAMjB,QAAQlS,OAAQ8O,IAAK,CAC7C,MAAMsE,EAAcD,EAAMjB,QAAQpD,IAC3BgF,EAAYC,GAAYH,EAAQP,GAASD,EAAY5O,OAAS8O,GAAYF,EAAY5O,OAE7F,GAAImO,GAAWjQ,EAAO0J,EAAK0H,EAAYC,EAAUH,GAAQ,CACvDC,GAAc,EACd,OAKN,IAAKA,EACH,OAAOnT,EAIX,OAAQ,EAEH,SAASsT,GAAuBC,GACrC,MAAM3L,EAAU,CACd4K,OAAQ,GACRzD,KAAM,EACNC,KAAM,EACNxP,MAAO,KACLoI,EAAQ4K,OAAS,GACjB5K,EAAQmH,IAAMnH,EAAQoH,KAAO,GAE/BsC,WAAY,CAACnM,EAAKqO,EAAWN,EAAO1T,GAAQ,MACtC2F,EAAI0H,UAAY0G,GAAgB/T,IAClCoI,EAAQpI,QAGV,MAAMwT,EAAWvF,GAAuBtI,GAClCqM,EAAUF,GAAWkC,EAAWR,GAwCtC,OAvCAxB,EAAQjS,QAAQkU,IACd,MAAOzR,EAAO0J,GAAOwH,EAAQP,GAASc,EAAO3P,OAAS8O,GAAYa,EAAO3P,OAErE8D,EAAQ4K,OAAOlT,OAAS,IAAM2S,GAAWjQ,EAAO0J,EAAK9D,EAAQmH,IAAKnH,EAAQoH,IAAKkE,KACjFX,GAAe3K,EAAQ4K,QACvB5K,EAAQpI,SAGV,IAAIkU,EAAcT,GAAarL,EAAQ4K,OAAQxQ,EAAO0J,EAAKwH,IAEtC,IAAjBQ,IACFA,EAAc9L,EAAQ4K,OAAOlT,OAC7BsI,EAAQ4K,OAAO5S,KAAK,CAClBoC,QACA0J,MACA8F,QAAS,MAIb,MAAMJ,EAASxJ,EAAQ4K,OAAOkB,GAC9BtC,EAAOI,QAAQ5R,KAAK6T,GACpBrC,EAAOpP,MAAQ2H,KAAKoF,IAAIqC,EAAOpP,MAAOA,GACtCoP,EAAO1F,IAAM/B,KAAKqF,IAAIoC,EAAO1F,IAAKA,GAClC+H,EAAO9B,OAAS+B,GAEK,IAAjB9L,EAAQmH,KACVnH,EAAQmH,IAAM/M,EACd4F,EAAQoH,IAAMtD,IAEd9D,EAAQmH,IAAMpF,KAAKoF,IAAInH,EAAQmH,IAAK/M,GACpC4F,EAAQoH,IAAMrF,KAAKqF,IAAIpH,EAAQoH,IAAKtD,MAGxC6G,GAAe3K,EAAQ4K,QAEnBU,GACFtL,EAAQpI,QAGHgS,IAGX,OAAO5J,EClHT,MAAM+L,GAAa,IACbC,GAAiB,EACjBC,GAAmB,IAeZC,GAAQ,CAACvR,EAAQgR,EAAcQ,KAC1C,MAAMnM,EAAU0L,GAAuBC,GAEvC,MAAO,CAACpO,EAAKqO,EAAWN,EAAO1T,KAC7B,IAAK0T,EACH,OAAOtL,EAAQ0J,WAAWnM,EAAKqO,EAAWN,EAAO1T,GAGnD,MAAMwT,EAAWvF,GAAuBtI,GAClCqM,EAAUF,GAAWkC,EAAWR,GAChCR,EAASwB,GAAUxC,EAASwB,GAElC,IAAK,MAAMP,KAASD,EAAQ,CAC1B,MAAMyB,EAAQ,GAEd,IAAK,MAAMR,KAAUhB,EAAMjB,QAAS,CAClC,MAAM0C,EAAQC,GAAQV,EAAQT,GACxBjP,EAAQqQ,GAAaF,EAAOD,GAElC,IAAc,IAAVlQ,EAAiB,CACnB,MAAMsQ,EAASC,GAAUJ,EAAOD,GAE5BI,IACFH,EAAMG,OAASA,EACfH,EAAMK,QAAUtC,GAAWiC,EAAMlS,MAAOkS,EAAMxI,IAAK2I,EAAOrS,MAAOwS,GAAQH,EAAOrS,MAAO+R,IACvFG,EAAMnQ,MAAQsQ,EAAOtQ,MAAQ,EAC7BsQ,EAAOI,SAAS7U,KAAKsU,QAElB,CACL,MAAOG,GAAUK,GAAoBR,EAAOD,EAAOlQ,EAAQ,EAAGA,EAAQ,GAChE0Q,EAAWC,GAAoBR,EAAOD,EAAOlQ,EAAQ,EAAGA,EAAQkQ,EAAM3U,QAAQ,GACpF4U,EAAMO,SAAWA,EACjBP,EAAMnQ,MAAQA,EAEVsQ,IACFH,EAAMG,OAASA,EACfH,EAAMK,QAAUtC,GAAWiC,EAAMlS,MAAOkS,EAAMxI,IAAK2I,EAAOrS,MAAOwS,GAAQH,EAAOrS,MAAO+R,IACvFM,EAAOI,SAAS7U,KAAKsU,IAGvB,IAAK,MAAMS,KAASF,EAAU,CACxBE,EAAMN,SAAWA,IACnBM,EAAMN,OAASH,GAGjB,MAAMU,EAAYD,EAAM5Q,MAAQmQ,EAAMnQ,OAAS,EAE3C6Q,GAAaV,EAAMK,SAAWtC,GAAWiC,EAAMlS,MAAOwS,GAAQN,EAAMlS,MAAO+R,GAAmBY,EAAM3S,MAAO2S,EAAMjJ,OACnHiJ,EAAMJ,SAAU,IAKtBN,EAAMrU,KAAKsU,GAGbW,GAAgBZ,EAAOF,GAIzB,OADAvC,EAAQM,KAAK,CAACpE,EAAGC,IAAMD,EAAEkE,KAAOjE,EAAEiE,MAAQlE,EAAE5J,MAAMiO,yBAA2BpE,EAAE7J,MAAMiO,0BAC9EP,IAIX,SAASqD,GAAgBZ,EAAOF,GAC9B,IAAK,MAAMe,KAAQb,EAAO,CACxB,MAAM,OACJR,EAAM,OACNY,GACES,EACEC,EAAUC,GAAiBF,GAAQ,EACnCG,EAAYZ,EAASA,EAAOZ,OAAO7B,KAAO,EAC1CsD,EAAavB,GAAasB,EAC1BE,EAASxL,KAAKoF,IAAI6E,GAAgBD,GAAaoB,GAC/CK,EAAwBC,GAAyBP,EAAMb,GACvDqB,EAAeJ,GAAcH,EAAUD,EAAK/Q,MAAQ,GACpDwR,EAAcL,GAAcH,EAAUD,EAAK/Q,OAAS+Q,EAAKP,QAAU,EAAI,IAAMa,EAE/Ef,IACFZ,EAAO7B,KAAOkD,EAAKP,QAAUU,EAAYK,EAAeL,EAAYE,GAGtE1B,EAAO5B,MAAQ2D,GAAaV,EAAMb,EAAOF,GAAoBJ,GAAaF,EAAO7B,KAAOjI,KAAKoF,IAAI4E,GAAaF,EAAO7B,KAAM2D,EAAc1B,KAI7I,SAASwB,GAAyBP,EAAMb,GACtC,IAAKa,EAAKL,SAASnV,OACjB,OAAO,EAGT,MAAMmW,EAAYX,EAAK/Q,MAAQkQ,EAAM3U,OAC/BoW,EAAYZ,EAAKL,SAASkB,OAAO,CAAC5G,EAAK6G,IAAMjM,KAAKoF,IAAIA,EAAK6G,EAAE7R,OAAQ0R,GAC3E,OAAOC,EAAYZ,EAAK/Q,MAG1B,SAAS8R,GAAsBf,EAAMb,GACnC,MAAM6B,EAAU,GAEhB,IAAK,MAAMC,KAAS9B,EACdhC,GAAW6C,EAAK9S,MAAO8S,EAAKpJ,IAAKqK,EAAM/T,MAAO+T,EAAMrK,MACtDoK,EAAQlW,KAAKmW,EAAMhS,OAIvB,OAAO+R,EAGT,SAAS1B,GAAaU,EAAMb,GAC1B,MAAM6B,EAAUD,GAAsBf,EAAMb,GAC5C6B,EAAQhE,OAER,IAAK,IAAI9R,EAAI,EAAGA,EAAI8V,EAAQxW,OAAQU,IAClC,GAAIA,EAAI8V,EAAQ9V,GACd,OAAOA,EAIX,OAAO,EAGT,SAAS0U,GAAoBI,EAAMb,EAAO+B,EAAUC,EAAUC,GAAoB,GAChF,MAAMC,EAAc,GAEpB,IAAK,MAAMJ,KAAS9B,EACd8B,EAAMhS,OAASiS,GAAYD,EAAMhS,OAASkS,GAAYhE,GAAW6C,EAAK9S,MAAO8S,EAAKpJ,IAAKqK,EAAM/T,MAAO+T,EAAMrK,MAC5GyK,EAAYvW,KAAKmW,GAIrB,GAAIG,GAAqBC,EAAY7W,OAAS,EAAG,CAC/C,MAAMyQ,EAAQoG,EAAYR,OAAO,CAAC5G,EAAKqH,IAAMzM,KAAKoF,IAAIA,EAAKqH,EAAErS,OAAQoS,EAAY,GAAGpS,OACpF,OAAOoS,EAAY/W,OAAOgX,GAAKA,EAAErS,QAAUgM,GAG7C,OAAOoG,EAGT,SAAS7B,GAAUQ,EAAMb,GACvB,IAAII,EAAS,KAEb,IAAK,MAAM0B,KAAS9B,EACdhC,GAAW6C,EAAK9S,MAAO8S,EAAKpJ,IAAKqK,EAAM/T,MAAO+T,EAAMrK,OAAoB,OAAX2I,GAAmB0B,EAAMhS,MAAQsQ,EAAOtQ,SACvGsQ,EAAS0B,GAIb,OAAO1B,EAGT,SAASmB,GAAaV,EAAMb,EAAOF,GACjC,IAAK,MAAMgC,KAAS9B,EAClB,GAAI8B,IAAUjB,GAAQiB,EAAMhS,MAAQ+Q,EAAK/Q,OAASkO,GAAW6C,EAAK9S,MAAOwS,GAAQM,EAAK9S,MAAO+R,GAAmBgC,EAAM/T,MAAO+T,EAAMrK,KACjI,OAAO,EAIX,OAAO,EAGT,SAASsI,GAAUxC,EAASwB,GAC1B,MAAMR,EAAS,GAEf,IAAK,MAAMiB,KAAUjC,EAAS,CAC5B,MAAOxP,EAAO0J,GAAOqH,GAAmBU,EAAO3P,MAAOkP,GACtD,IAAIqD,GAAQ,EAEZ,IAAK,MAAM5D,KAASD,EAClB,GAAIP,GAAWjQ,EAAO0J,EAAK+G,EAAMzQ,MAAOyQ,EAAM/G,KAAM,CAClD+G,EAAMjB,QAAQ5R,KAAK6T,GACnBhB,EAAM/G,IAAM/B,KAAKqF,IAAIyD,EAAM/G,IAAKA,GAChC2K,GAAQ,EACR,MAICA,GACH7D,EAAO5S,KAAK,CACVoC,QACA0J,MACA8F,QAAS,CAACiC,KAKhB,OAAOjB,EAGT,SAAS2B,GAAQV,EAAQT,GACvB,MAAOhR,EAAO0J,GAAOqH,GAAmBU,EAAO3P,MAAOkP,GACtD,MAAO,CACLqB,OAAQ,KACRE,SAAS,EACTxQ,MAAO,EACP0P,SACAzR,QACA0J,MACA+I,SAAU,IAId,SAASO,GAAiBF,GACxB,IAAI9F,EAAM8F,EAAK/Q,MAEf,IAAK,MAAMmQ,KAASY,EAAKL,SAAU,CACjC,MAAM6B,EAAWtB,GAAiBd,GAE9BoC,EAAWtH,IACbA,EAAMsH,GAIV,OAAOtH,EAGT,SAASwF,GAAQ+B,EAAYvI,GAC3B,MAAMwI,EAAgBD,EAAa,IAC7BE,EAAeD,EAAgBxI,EAC/B0I,EAAW/M,KAAKsE,MAAMwI,EAAe,IACrCE,EAAaF,EAAe,GAClC,OAAOF,EAAaC,EAA2B,IAAXE,EAAiBC,EC9OvD,MAAM,GAAa,IACNhF,GAAS,CAACpP,EAAQgR,EAAcQ,KAC3C,MAAMnM,EAAU0L,GAAuBC,GACvC,MAAO,CAACpO,EAAKqO,EAAWN,EAAO1T,KAC7B,MAAMgS,EAAU5J,EAAQ0J,WAAWnM,EAAKqO,EAAWN,EAAO1T,GAS1D,OAPI0T,GACF1B,EAAQjS,QAAQkU,IACdA,EAAO7B,KAAO6B,EAAO9B,OAAS,GAAa8B,EAAO/B,YAClD+B,EAAO5B,MAAQ,GAAa4B,EAAO/B,cAIhCF,ICZEoF,GAA4B,CACvC9C,SACAnC,WCFa,QACbkF,KAAM,CACJ7U,MAAO,CACLoD,KAAM,CAACwB,OAAQkQ,OAAQ1Q,MACvB/G,SAAUiN,GACV1L,QAAS,IAAM8L,GAAU,IAAItG,MAAQ/C,MAEvCqI,IAAK,CACHtG,KAAM,CAACwB,OAAQkQ,OAAQ1Q,MACvB/G,SAAUiN,IAEZrB,SAAU,CACR7F,KAAM,CAACgD,MAAOxB,QACdhG,QAAS,IAAM,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAClCvB,SAAU0X,IAEZC,WAAY,CACV5R,KAAM1H,SAERuZ,cAAe,CACb7R,KAAM1H,QACNkD,SAAS,GAEXsW,cAAe,CACb9R,KAAM+R,SACNvW,QAAS,MAEXwW,UAAW,CACThS,KAAM+R,SACNvW,QAAS,OAGbqP,UAAW,CACTd,QAAS,CACP/J,KAAM0R,OACNlW,QAAS,GAEXyW,eAAgB,CACdjS,KAAM1H,QACNkD,SAAS,GAEX0W,eAAgB,CACdlS,KAAM,CAAC0R,OAAQlQ,QACfhG,QAAS,GACTvB,SAAUkY,IAEZC,cAAe,CACbpS,KAAM,CAAC0R,OAAQlQ,QACfhG,QAAS,GACTvB,SAAUkY,IAEZE,gBAAiB,CACfrS,KAAM,CAAC0R,OAAQlQ,QACfhG,QAAS,GACTvB,SAAUkY,IAEZG,cAAe,CACbtS,KAAM,CAAC0R,OAAQlQ,QACfhG,QAAS,EACTvB,SAAUkY,IAEZI,UAAW,CACTvS,KAAM,CAAC0R,OAAQlQ,OAAQvI,QACvBgB,SAAU0M,GAEZ6L,cAAe,CACbxS,KAAM,CAAC0R,OAAQlQ,QACfhG,QAAS,GACTvB,SAAUkY,IAEZM,eAAgB,CACdzS,KAAM+R,SACNvW,QAAS,MAEXkX,cAAe,CACb1S,KAAM+R,SACNvW,QAAS,MAEXmX,kBAAmB,CACjB3S,KAAM+R,SACNvW,QAAS,OAGboX,MAAO,CACLvO,qBAAsB,CACpBrE,KAAM,CAACwB,OAAQkQ,QACflW,QAAS,GAEXqX,SAAU,CACR5Y,SAAUkY,GACV3W,QAAS,GAEXsX,YAAa,CACX9S,KAAM1H,QACNkD,SAAS,GAEXuX,iBAAkB,CAChB/S,KAAM1H,QACNkD,SAAS,GAEXwX,SAAU1a,QACV2a,YAAa,CACXjT,KAAM+R,SACNvW,QAAS,OAGbsB,SAAU,CACRkD,KAAM,CACJA,KAAMwB,OACNhG,QAAS,SAEX/C,MAAO,CACLuH,KAAM,CAACwB,OAAQkQ,OAAQ1Q,MACvB/G,SAAUiN,KAGdgM,SAAU,CACRC,WAAY,CACVnT,KAAM,CAACgD,MAAOxB,QACdhG,QAAS,IAEX4X,oBAAqB,CACnBpT,KAAM1H,SAER+a,gBAAiB,CACfrT,KAAM1H,SAERgb,mBAAoB,CAClBtT,KAAMwB,OACNhG,QAAS,IAEX+X,aAAc,CACZvT,KAAM,CAAC0R,OAAQlQ,QACfhG,QAAS,EACTvB,SAAUmP,GAAK/F,SAAS4D,SAASmC,KAAOnC,SAASmC,GAAK,IAG1DjM,OAAQ,CACNA,OAAQ,CACN6C,KAAMgD,MACNxH,QAAS,IAAM,IAEjBgY,WAAY,CACVxT,KAAMwB,OACNhG,QAAS,SAEXiY,SAAU,CACRzT,KAAMwB,OACNhG,QAAS,OAEXkY,WAAY,CACV1T,KAAM,CAACwB,OAAQuQ,UACfvW,QAAS,SAEXmY,cAAe,CACb3T,KAAM,CAACwB,OAAQuQ,UACfvW,QAAS,YAEXoY,YAAa,CACX5T,KAAM0R,OACNlW,QAAS,IAEXqY,WAAY,CACV7T,KAAM,CAACwB,OAAQuQ,UACfvW,QAAS,WAEXsY,eAAgB,CACd9T,KAAM,CAACwB,OAAQuQ,UACfvW,QAAS,SAEXuY,UAAW,CACT/T,KAAM,CAACwB,OAAQuQ,UACfvW,QAAS,QAEXwY,sBAAuB,CACrBhU,KAAM,CAACwB,OAAQkQ,QACflW,QAAS,IAEXyY,iBAAkB,CAChBjU,KAAM,CAACwB,OAAQuQ,UACfvW,QAAS,QACTvB,SAAUia,GAAQA,KAAQ1C,IAA6C,oBAAT0C,GAEhEC,UAAW,CACTnU,KAAM1H,QACNkD,SAAS,GAEX4Y,cAAe,CACbpU,KAAMwB,OACNhG,QAAS,gCAEX6Y,YAAa,CACXrU,KAAM,CAAC1H,QAASW,QAChBuC,QAAS,MAEX8Y,kBAAmB,CACjBtU,KAAM0R,OACNlW,QAAS,KAIR,SAAS2W,GAAe3Y,GAC7B,OAAO6J,SAAS4D,SAASzN,IAEpB,SAASmY,GAAiBnY,GAK/B,GAJqB,kBAAVA,IACTA,EAAQA,EAAM+a,MAAM,MAGlBvR,MAAMC,QAAQzJ,GAAQ,CACxB,MAAMgb,EAAOhb,EAAM6S,IAAIjD,GAAKnC,SAASmC,IAErC,GAAIoL,EAAKta,OAASgL,GAAgC,IAAhBsP,EAAKta,OACrC,OAAO,EAGT,MAAMua,EAAU,GAChB,IAAIC,GAAU,EAEd,IAAK,IAAI9Z,EAAI,EAAGA,EAAI4Z,EAAKta,OAAQU,IAAK,CACpC,MAAMwO,EAAIoL,EAAK5Z,GAEf,IAAKyI,SAAS+F,IAAMA,EAAI,GAAKA,GAAKlE,EAChC,OAAO,EAGT,GAAItK,EAAI,EAAG,CACT,MAAM+Z,EAAIvL,EAAIoL,EAAK5Z,EAAI,GAEvB,GAAI+Z,EAAI,EAAG,CACT,GAAID,EACF,OAAO,EAGTA,GAAU,OACL,GAAU,IAANC,EACT,OAAO,EAIX,GAAIF,EAAQrL,GACV,OAAO,EAGTqL,EAAQrL,IAAK,EAGf,OAAO,EAGT,OAAO,EChPM,cAAAwL,EAAA,MAAO,OAAW,EAAW,EAAO,OAAW,IAE5D7c,OAAO,CACPC,KAAM,gBACN6c,WAAY,CACVC,OAAA,SAEF1c,MAAO,GAAMqZ,KACbhQ,SAAU,CACR,iBACE,OAAOuB,MAAMC,QAAQ/K,KAAK2N,UAAY3N,KAAK2N,UAAY3N,KAAK2N,UAAY,IAAI0O,MAAM,KAAKlI,IAAIjD,GAAKnC,SAASmC,EAAG,MAG9G,eACE,OAAOY,GAAgB9R,KAAK6c,iBAG9B,sBACE,MAAMC,EAAW9c,KAAKqS,aAAa0K,QAEnC,OADAD,EAASE,UACFF,GAGT,cACE,OAAO7N,GAAejP,KAAK0E,OAAO,IAGpC,YACE,MAAMA,EAAQ1E,KAAKid,YACb7O,EAAMpO,KAAKoO,KAAMa,GAAejP,KAAKoO,MAAgB1J,EAC3D,OAAOyL,GAAuB/B,GAAO+B,GAAuBzL,GAASA,EAAQ0J,GAG/E,OACE,OAAOgE,GAAcpS,KAAKid,YAAajd,KAAKkd,UAAWld,KAAKuT,MAAM3F,MAAO5N,KAAKqS,eAGhF,eACE,GAAIrS,KAAK8Z,UACP,OAAO9Z,KAAK8Z,UAGd,MAAMqD,EAAU,CACdC,SAAU,MACVvV,IAAK,WAEP,OAAOiL,GAA4B9S,KAAKqd,cAAe,CAACC,EAAMC,IAAWJ,IAG3E,mBACE,GAAInd,KAAK4Z,cACP,OAAO5Z,KAAK4Z,cAGd,MAAM4D,EAAc,CAClBJ,SAAU,MACV7N,QAAS,QAELkO,EAAe,CACnBL,SAAU,MACV7N,QAAS,SAEX,OAAOuD,GAA4B9S,KAAKqd,cAAe,CAACC,EAAMlK,IAAUA,EAAQqK,EAAeD,KAInGnc,QAAS,CACP,mBAAmBqM,EAAWgQ,GAAU,GACtC,MAAO,CACL,YAAahQ,EAAUgC,QACvB,SAAUhC,EAAU+B,KACpB,WAAY/B,EAAUiC,OACtB,YAAa+N,IAIjB,eAAehQ,GACb,OAAOD,EAAeC,EAAW1N,KAAK6c,eAAgB7c,KAAKuT,MAAM3F,QAGnE,aAAaF,GACX,OAAOS,EAAaT,EAAW1N,KAAK6c,eAAgB7c,KAAKuT,MAAM3F,QAGjE,aAAauP,GACX,OAAOrK,GAA4B9S,KAAKqJ,OAAQ,CAACiU,EAAMC,IAAWJ,O,aChGjE,SAASQ,GAAWrc,EAAOmF,EAAOmX,EAAeC,EAAajI,GAAQ,EAAOoF,GAAW,GAC7F,MAAM8C,EAAaxc,EAAMsc,GACnBG,EAAWzc,EAAMuc,GACjBG,EAAc/O,GAAe6O,GAAY,GACzCG,EAAYF,EAAW9O,GAAe8O,GAAU,GAAQC,EACxDtZ,EAAQ4L,GAAYwN,GAAcvN,GAAcyN,EAAapI,GAASoI,EACtE5P,EAAMkC,GAAYyN,GAAYxN,GAAc0N,EAAWrI,GAASqI,EAChE1I,EAAkBtF,GAAiBvL,GACnC+P,EAA2BtE,GAAuBzL,GAClD8Q,EAAgBvF,GAAiB7B,GACjC8P,EAAYxZ,EAAMwJ,QAAU,EAAI,KAChCwG,EAAyBvE,GAAuB/B,GAAO8P,EACvDC,GAAUzZ,EAAMwJ,QACtB,MAAO,CACL5M,QACAoD,QACA6Q,kBACAd,2BACArG,MACAoH,gBACAd,yBACAyJ,SACA1X,QACAuU,YAGG,SAASoD,GAAU5X,EAAO6X,GAC/B,OAAOA,GAAiB7X,EAAM+O,iBAAmB8I,GAAiB7X,EAAMgP,eAAiB6I,EAAgB7Q,IAAgBhH,EAAMkO,uBAE1H,SAAS4J,GAAa9X,EAAOqB,EAAKwW,EAAepI,GACtD,OAAOoI,IAAkB7X,EAAM+O,iBAAmBU,IAAiBpO,EAAI0H,SAAW6O,GAAU5X,EAAO6X,GAE9F,SAASE,GAAmB/X,EAAO+O,EAAiBC,GACzD,OAAOD,GAAmB/O,EAAMgP,eAAiBA,GAAiBhP,EAAM+O,gBCrB1E,MAAMiJ,GAAa,IACbC,GAAc,GACd,GAAiB,KAGR,UAAa5e,OAAO,CACjCC,KAAM,uBACN6c,WAAY,CACV+B,SAAA,MAEFxe,MAAO,GAAM+E,OACbsE,SAAU,CACR,WACE,OAA8B,IAAvBvJ,KAAKiF,OAAOjD,QAGrB,eACE,OAAOhC,KAAKiF,OAAOkP,IAAInU,KAAK2d,aAG9B,8BACE,OAAO5O,SAAS/O,KAAK8b,wBAGvB,qBACE,MAAkC,oBAApB9b,KAAK2b,WAA4B3b,KAAK2b,WAAa,IAAM3b,KAAK2b,YAG9E,qBACE,MAAkC,oBAApB3b,KAAKwb,WAA4Bxb,KAAKwb,WAAahV,KAAWA,EAAMxG,KAAKwb,aAGzF,wBACE,MAAqC,oBAAvBxb,KAAKyb,cAA+Bzb,KAAKyb,cAAgBjV,GAASA,EAAMxG,KAAKyb,gBAG7F,yBACE,MAAsC,oBAAxBzb,KAAK4b,eAAgC5b,KAAK4b,eAAiB,IAAM5b,KAAK4b,gBAGtF,oBACE,MAAiC,oBAAnB5b,KAAK6b,UAA2B7b,KAAK6b,UAAY,CAACrV,EAAOmY,IAAe,gBAAWnY,EAAMlF,MAAMtB,KAAK6b,aAGpH,oBACE,MAAwC,oBAA1B7b,KAAK+b,iBAAkC/b,KAAK+b,iBAAmBzC,GAA0BtZ,KAAK+b,mBAG9G,gBACE,OAAO/b,KAAK6c,gBAGd,eACE,OAAO,IAIXxb,QAAS,CACP,WAAWC,EAAOmF,EAAQ,GACxB,OAAOkX,GAAWrc,EAAOmF,EAAOzG,KAAKsb,WAAYtb,KAAKub,SAAUvb,KAAK4e,mBAAmBtd,KAAQtB,KAAK6e,cAAe7e,KAAK8e,sBAAsBxd,KAGjJ,WAAWyd,EAAUC,GACnB,MAAMC,EAAYjf,KAAKkf,aAAa,CAClC9B,SAAU,MACVzO,KAAM,UACNC,OAAQmQ,EAASnQ,OAAS,EAAI,eAAYpE,IAE5C,OAAOyU,EAAUF,GAAU,IAG7B,wBACE,GAAI/e,KAAKmf,WAAanf,KAAKic,UACzB,OAGF,MAAMP,EAAc1b,KAAK0b,YACnB0D,EAAYpf,KAAKqf,eAEvB,IAAK,MAAMtZ,KAAQqZ,EAAW,CAC5B,MAAM,OACJrI,EAAM,OACN9R,EAAM,KACNqa,GACEF,EAAUrZ,GAEd,IAAKuZ,EACH,MAGF,MAAMC,EAAexI,EAAOyI,wBACtBC,EAAOxa,EAAOjD,OAAS,EAC7B,IAAI0d,GAAO,EACPC,EAAS,EAEb,IAAK,IAAIjd,EAAI,EAAGA,GAAK+c,EAAM/c,IAAK,CAC9B,IAAKgd,EAAM,CACT,MAAME,EAAc3a,EAAOvC,GAAG8c,wBAC9BE,EAAOhd,IAAM+c,EAAOG,EAAYC,OAASN,EAAaM,OAASD,EAAYC,OAASnE,EAAc6D,EAAaM,OAG7GH,IACFza,EAAOvC,GAAGod,MAAMC,QAAU,OAC1BJ,KAIAD,GACFJ,EAAKQ,MAAMC,QAAU,GACrBT,EAAKU,UAAYhgB,KAAKwJ,SAASC,KAAKzC,EAAEhH,KAAKkc,cAAeyD,IAE1DL,EAAKQ,MAAMC,QAAU,SAK3B,eACE,MAAMX,EAAY,GACZa,EAAWjgB,KAAKkgB,MAAMjb,OAE5B,OAAKgb,GAAaA,EAAShe,SAI3Bge,EAAShe,QAAQke,IACf,MAAMpa,EAAOoa,EAAGC,aAAa,aAEzBD,EAAGE,eAAiBta,IAChBA,KAAQqZ,IACZA,EAAUrZ,GAAQ,CAChBgR,OAAQoJ,EAAGE,cACXf,KAAM,KACNra,OAAQ,KAIRkb,EAAGC,aAAa,aAClBhB,EAAUrZ,GAAMuZ,KAAOa,GAEvBf,EAAUrZ,GAAMd,OAAO3C,KAAK6d,GAC5BA,EAAGL,MAAMC,QAAU,OAIlBX,GAvBEA,GA0BX,aAAY,MACV5Y,GACCqB,GACD,MAAM6T,EAAc1b,KAAK0b,YACnBU,EAAoBpc,KAAKoc,kBACzBiC,EAAgBpO,GAAiBpI,GACjCuE,EAAOvE,EAAIuE,KACX1H,EAAQ2Z,IAAkB7X,EAAM+O,gBACtC,IAAInH,EAAMiQ,IAAkB7X,EAAMgP,cAC9BjB,EAAQkK,GAEZ,IAAKze,KAAK6e,aACR,IAAK,IAAInc,EAAImF,EAAIpB,MAAQ,EAAG/D,EAAI0J,EAAKpK,OAAQU,IAAK,CAChD,MAAM4d,EAAoBrQ,GAAiB7D,EAAK1J,IAEhD,KAAI8D,EAAMgP,eAAiB8K,GAGpB,CACLlS,GAAM,EACN,MAJAmG,GAASiK,GACTpQ,EAAMA,GAAOkS,IAAsB9Z,EAAMgP,cAQ/C,MAAM+K,EAAQ,CACZC,YAAaha,EACbqB,MACAnD,QACA0J,MACAwH,OAAO,GAET,OAAO5V,KAAKygB,SAASja,EAAO+Z,GAAO,EAAO,CACxCzd,YAAa,UACb4d,MAAO,CACL,gBAAiBhc,EACjB,cAAe0J,GAEjB0R,MAAO,CACLa,OAAWjF,EAAH,KACRnH,MAAUA,EAAH,IACP,gBAAoB6H,EAAH,MAEnBrZ,MAAO,CACL,YAAa8E,EAAI9B,MAEnB/B,IAAKwC,EAAMC,MACXvC,IAAK,SACL0c,UAAU,KAId,eAAc,MACZpa,EAAK,KACL8N,EAAI,MACJC,GACC1M,GACD,GAAIA,EAAIgZ,UAAUra,EAAM4H,MAAQ,GAAKvG,EAAIgZ,UAAUra,EAAM9B,QAAU,EACjE,OAAO,EAGT,MAAM2Z,EAAgBpO,GAAiBpI,GACjCnD,EAAQ8B,EAAM+O,iBAAmB8I,EACjCjQ,EAAM5H,EAAMgP,cAAgB6I,EAC5ByC,EAAMpc,EAAQmD,EAAIkZ,QAAQva,EAAM9B,OAAS,EACzCmb,EAASzR,EAAMvG,EAAIkZ,QAAQ,IAAkBlZ,EAAIkZ,QAAQva,EAAM4H,KAC/DuS,EAAStU,KAAKqF,IAAI1R,KAAK0b,YAAamE,EAASiB,GAC7CP,EAAQ,CACZC,YAAaha,EACbqB,MACAnD,QACA0J,MACAwH,OAAO,GAET,OAAO5V,KAAKygB,SAASja,EAAO+Z,GAAO,EAAM,CACvCzd,YAAa,gBACbgd,MAAO,CACLgB,IAAQA,EAAH,KACLH,OAAWA,EAAH,KACRrM,KAASA,EAAH,IACNC,MAAUA,EAAH,QAKb,SAAS/N,EAAOwa,EAAYrC,EAAYne,GACtC,IAAIygB,EAEJ,MAAMC,EAAOlhB,KAAKmhB,aAAa3a,MACzB4a,EAAOphB,KAAKqhB,uBAAuB7a,EAAMlF,OACzCggB,EAAathB,KAAKuhB,mBAAmB/a,EAAMlF,OAC3CkgB,EAAehb,EAAM9B,MAAMiK,KAAO,IAAMnI,EAAM4H,IAAIO,MAAQ,GAC1D8S,EAAWjQ,GAAYhL,EAAM9B,MAAO8B,EAAM4H,MAAQpO,KAAK0hB,4BACvDC,EAAa3hB,KAAK2hB,WAElBC,EAAc,IAAMD,EAAWnb,EAAM9B,MAAO8c,GAAgB,MAAQG,EAAWnb,EAAM4H,KAAK,GAE1FyT,EAAe,KACnB,MAAM/hB,EAAOE,KAAK8hB,kBAAkBtb,EAAOmY,GAE3C,GAAInY,EAAM9B,MAAMwJ,QAAS,CACvB,GAAIyQ,EAAY,CACd,MAAMrP,EAAOsS,IACPG,EAAYN,EAAW,KAAO,OACpC,MAAO,WAAW3hB,aAAgBiiB,IAAYzS,IACzC,CACL,MAAMA,EAAOqS,EAAWnb,EAAM9B,OAAO,GACrC,MAAO,WAAW4K,cAAiBxP,KAIvC,OAAOA,GAGHygB,EAAQ,IAAKS,EACjBxa,MAAOA,EAAMlF,MACboc,QAASsD,EAAWnZ,IAAI6V,QACxB+D,WACAD,eACAG,aACAC,cACAC,gBAEF,OAAO7hB,KAAK0D,eAAe,MAAO1D,KAAKgiB,aAAaZ,EAAMphB,KAAKiiB,mBAAmBX,EAAY,CAC5Fpe,GAAIlD,KAAKkiB,6BAA6B,SAAUC,IAAe,IAAM5B,EACnE4B,iBAEFxF,WAAY,CAAC,CACX7c,KAAM,SACNS,MAAiD,OAAzC0gB,EAAoBjhB,KAAKmc,cAAuB8E,OAEvDzgB,KACA0gB,EAAOA,EAAKX,GAAS,CAACvgB,KAAKoiB,QAAQP,MAG1C,QAAQA,GACN,OAAO7hB,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,OACbuf,SAAU,CACRrC,UAAW6B,QAKjB,eAAeha,GACb,MAAM8Y,EAAS3gB,KAAK0b,YAAc1b,KAAKoc,kBACvC,OAAOpc,KAAK0D,eAAe,MAAO,CAChCoc,MAAO,CACLa,OAAWA,EAAH,MAEV5d,MAAO,CACL,YAAa8E,EAAI9B,MAEnB7B,IAAK,SACL0c,UAAU,KAId,QAAQ/Y,GACN,IAAIya,EAEJ,MAAM5G,EAAc1b,KAAK0b,YACnBU,EAAoBpc,KAAKoc,kBAC/B,OAAOpc,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,oBACb4d,MAAO,CACL,YAAa7Y,EAAI6V,SAEnB3a,MAAO,CACL,YAAa8E,EAAI9B,KACjB,YAAa,GAEf4W,WAAY,CAAC,CACX7c,KAAM,SACNS,MAAkD,OAA1C+hB,EAAqBtiB,KAAKmc,cAAuBmG,IAE3Dpf,GAAI,CACFqf,MAAO,IAAMviB,KAAKkB,MAAM,aAAc2G,IAExCiY,MAAO,CACLC,QAAS,OACTY,OAAWjF,EAAH,KACR,gBAAoBU,EAAH,MAEnBlY,IAAK,SACL0c,UAAU,KAId,mBACE,MAAMlc,EAAQuL,GAAiBjQ,KAAK4H,KAAK,IACnCwG,EAAM6B,GAAiBjQ,KAAK4H,KAAK5H,KAAK4H,KAAK5F,OAAS,IAC1D,OAAOhC,KAAKwiB,aAAa1gB,OAAO0E,GAAS+X,GAAmB/X,EAAO9B,EAAO0J,KAG5E,mBAAmB5H,EAAOwU,GACxB,OAAQhb,KAAK6e,cAAgB7D,IAAaxU,EAAMwU,UAAsC,kBAAnBxU,EAAMwU,UAAsC,OAAbA,GAGpG,gBAAgBnT,GACd,MAAMoR,EAAahJ,GAAiBpI,GAC9BoO,EAAejW,KAAKyiB,cAAc,GACxC,OAAOziB,KAAKwiB,aAAa1gB,OAAO0E,GAAS8X,GAAa9X,EAAOqB,EAAKoR,EAAYhD,KAGhF,mBAAmBpO,GACjB,MAAMoR,EAAahJ,GAAiBpI,GAC9BoO,EAAejW,KAAKyiB,cAAc,GACxC,OAAOziB,KAAKwiB,aAAa1gB,OAAO0E,GAASA,EAAM2X,SAAWne,KAAK6e,aAAeT,GAAU5X,EAAOyS,GAAcqF,GAAa9X,EAAOqB,EAAKoR,EAAYhD,KAAkBjW,KAAK0iB,mBAAmBlc,EAAOqB,EAAImT,YAGzM,qBAAqBnT,GACnB,MAAMoR,EAAahJ,GAAiBpI,GACpC,OAAO7H,KAAKwiB,aAAa1gB,OAAO0E,IAAUA,EAAM2X,QAAUC,GAAU5X,EAAOyS,IAAejZ,KAAK0iB,mBAAmBlc,EAAOqB,EAAImT,YAG/H,iBACE,GAAIhb,KAAKmf,SACP,MAAO,IAAKnf,KAAKmhB,cAInB,MAAMnF,EAAOhc,KAAK2iB,kBAAkB3iB,KAAKwiB,aAAcxiB,KAAKyiB,cAAc,GAAIziB,KAAK0hB,6BAE7EkB,EAASthB,KAAWA,EAEpBuhB,EAAkB,CAAChb,EAAKib,EAAQC,EAAQnN,KAC5C,MAAM3Q,EAAS6d,EAAOjb,GAChBqM,EAAU8H,EAAKnU,EAAK5C,EAAQ2Q,EAAO5V,KAAK6e,cAE9C,GAAIjJ,EACF,OAAO1B,EAAQC,IAAIgC,GAAU4M,EAAO5M,EAAQtO,IAAM/F,OAAO8gB,GAG3D,MAAMzL,EAAW,GAYjB,OAXAjD,EAAQjS,QAAQ,CAACkU,EAAQ1P,KACvB,MAAO0Q,EAASnV,OAASmU,EAAO9B,OAC9B8C,EAAS7U,KAAKtC,KAAKgjB,eAAenb,IAGpC,MAAMob,EAASF,EAAO5M,EAAQtO,GAE1Bob,GACF9L,EAAS7U,KAAK2gB,KAGX9L,GAGH+L,EAAQljB,KAAKmhB,aACbgC,EAAUD,EAAMrb,IAChBub,EAAgBF,EAAM,cACtBG,EAAcH,EAAM,YAC1B,MAAO,IAAKA,EACVrb,IAAKA,IACH,IAAIsP,EAAW0L,EAAgBhb,EAAK7H,KAAKsjB,gBAAiBtjB,KAAKujB,aAAa,GAM5E,GAJIpM,GAAYA,EAASnV,OAAS,GAAKhC,KAAKic,WAC1C9E,EAAS7U,KAAKtC,KAAKwjB,QAAQ3b,IAGzBsb,EAAS,CACX,MAAMjC,EAAOiC,EAAQtb,GAEjBqZ,IACF/J,EAAWA,EAAWA,EAASsM,OAAOvC,GAAQA,GAIlD,OAAO/J,GAET,aAActP,IACZ,IAAIsP,EAAW0L,EAAgBhb,EAAK7H,KAAK0jB,mBAAoB1jB,KAAKujB,aAAa,GAE/E,GAAIH,EAAe,CACjB,MAAMlC,EAAOkC,EAAcvb,GAEvBqZ,IACF/J,EAAWA,EAAWA,EAASsM,OAAOvC,GAAQA,GAIlD,OAAO/J,GAET,WAAYtP,IACV,MAAM5C,EAAS4d,EAAgBhb,EAAK7H,KAAK2jB,qBAAsB3jB,KAAK4jB,eAAe,GACnF,IAAIzM,EAAW,CAACnX,KAAK0D,eAAe,MAAO,CACzCZ,YAAa,2BACZmC,IAEH,GAAIoe,EAAa,CACf,MAAMnC,EAAOmC,EAAYxb,GAErBqZ,IACF/J,EAAWA,EAASsM,OAAOvC,IAI/B,OAAO/J,Q,yBC7bF,MAAatX,OAAO,CACjCC,KAAM,oBACNI,MAAO,GAAMwa,MACbnR,SAAU,CACR,cACE,MAAO,qBAGT,UACE,OAAOvJ,KAAK6jB,cAGd,iBACE,OAAO9U,SAAS/O,KAAK2a,WAGvB,OACE,MAAMmJ,EAAU9jB,KAAK+jB,eAAiB/jB,KAAK6c,eAAe7a,OACpD0C,EAAQ1E,KAAKyN,eAAezN,KAAKid,aACjC7O,EAAMpO,KAAKmO,aAAanO,KAAKkd,WACnC,OAAO9K,GAAc1N,EAAO0J,EAAKpO,KAAKuT,MAAM3F,MAAO5N,KAAKqS,aAAcmH,OAAOwK,iBAAkBF,IAGjG,YACE,MAAMlW,EAAQ5N,KAAKuT,MAAM3F,MACnBlJ,EAAQ1E,KAAKyN,eAAeG,GAC5BQ,EAAMpO,KAAKmO,aAAaP,GAC9B,OAAOwE,GAAc1N,EAAO0J,EAAKR,EAAO5N,KAAKqS,aAAcrS,KAAK6c,eAAe7a,OAAQhC,KAAK6c,eAAe7a,SAG7G,iBACE,GAAIhC,KAAK+a,YACP,OAAO/a,KAAK+a,YAGd,MAAMyC,EAAc,CAClBJ,SAAU,MACVzU,MAAO,QAEH8U,EAAe,CACnBL,SAAU,MACVzU,MAAO,SAET,OAAOmK,GAA4B9S,KAAKqd,cAAe,CAACC,EAAMlK,IAAUA,EAAQqK,EAAeD,KAInGnc,QAAS,CACP,UAAUwG,GACR,MAAMwW,EAAgBpO,GAAiBpI,GACvC,OAAOwW,EAAgBpO,GAAiBjQ,KAAKid,cAAgBoB,EAAgBpO,GAAiBjQ,KAAKkd,YAGrG,UACE,OAAOld,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,2BACZ9C,KAAKikB,gBAGV,cACE,MAAMC,EAASlkB,KAAKmkB,UAAUhQ,IAAInU,KAAKokB,YAQvC,OANIpkB,KAAK8a,UACPoJ,EAAOG,QAAQrkB,KAAK0D,eAAe,MAAO,CACxCZ,YAAa,wCAIVohB,GAGT,WAAWrc,EAAKpB,GACd,MAAMiX,EAAU1d,KAAKskB,UAAUtkB,KAAK4H,KAAKnB,IACnCuB,EAAQH,EAAI6H,QAAU1P,KAAKgI,WAAQwC,EACzC,OAAOxK,KAAK0D,eAAe,MAAO1D,KAAKgiB,aAAaha,EAAO,CACzDhE,IAAK6D,EAAI9B,KACTjD,YAAa,kCACb4d,MAAO1gB,KAAKukB,mBAAmB1c,EAAK6V,KAClC1d,KAAKwkB,iBAAiB3c,EAAK7H,KAAK2Z,iBAGtC,WACE,MAAM/R,EAAO5H,KAAK4H,KACZ6c,EAAWzkB,KAAK6c,eAAe7a,OAC/B0Y,EAAQ,GAEd,IAAK,IAAIhY,EAAI,EAAGA,EAAIkF,EAAK5F,OAAQU,GAAK+hB,EACpC/J,EAAMpY,KAAKtC,KAAK0kB,QAAQ9c,EAAKmV,MAAMra,EAAGA,EAAI+hB,GAAWzkB,KAAK2kB,cAAc/c,EAAKlF,MAG/E,OAAOgY,GAGT,QAAQtO,EAAMF,GACZ,MAAM0Y,EAAYxY,EAAK+H,IAAI,CAACtM,EAAKpB,IAAUzG,KAAK6kB,OAAOhd,EAAKpB,EAAO2F,IAMnE,OAJIpM,KAAK8a,UACP8J,EAAUP,QAAQrkB,KAAK8kB,cAAc5Y,IAGhClM,KAAK0D,eAAe,MAAO,CAChCM,IAAKoI,EAAK,GAAGrG,KACbjD,YAAa,2BACZ8hB,IAGL,cAAcG,GACZ,OAAO7Y,EAAW6Y,EAAa9Z,KAAM8Z,EAAapc,MAAQ,EAAGoc,EAAald,IAAK7H,KAAK6c,eAAe,GAAI9N,SAAS/O,KAAKmM,wBAGvH,cAAcD,GACZ,OAAOlM,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,iCACZ,CAAC9C,KAAK0D,eAAe,QAAS4F,OAAO4C,OAG1C,OAAOrE,EAAKpB,EAAO2F,GACjB,MAAMsR,EAAU1d,KAAKskB,UAAUzc,GAC/B,OAAO7H,KAAK0D,eAAe,MAAO,CAChCM,IAAK6D,EAAI9B,KACTjD,YAAa,yBACb4d,MAAO1gB,KAAKukB,mBAAmB1c,EAAK6V,GACpCxa,GAAIlD,KAAKkiB,6BAA6B,OAAQ3c,GAAMsC,IACnD,CAAC7H,KAAKglB,YAAYnd,MAAU,gBAAQ7H,KAAM,MAAO,KAAM,CACxD0d,UACAjX,QACA2F,UACGvE,MACE,MAGT,YAAYA,GACV,OAAO7H,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,gCACZ,gBAAQ9C,KAAM,YAAa6H,IAAQ,CAAC7H,KAAKilB,kBAAkBpd,MAGhE,kBAAkBA,GAChB,MAAMG,EAAQH,EAAI6H,QAAU1P,KAAKgI,MAAQ,cACnCkd,EAAuB,IAAZrd,EAAIA,KAAa7H,KAAK6a,iBACvC,OAAO7a,KAAK0D,eAAe,QAAM,CAC/BxD,MAAO,CACL8H,QACAmd,KAAK,EACLC,WAAW,EACXC,OAAO,GAETniB,GAAIlD,KAAK6J,sBAAsB,CAC7B,aAAc,CACZrD,MAAO,QACPoE,MAAM,GAER,mBAAoB,CAClBpE,MAAO,cACPoE,MAAM,EACNd,SAAS,EACTC,QAAQ,IAETxE,GAAMsC,IACRqd,EAAWllB,KAAKslB,eAAezd,EAAK7H,KAAK4a,aAAe,IAAM5a,KAAKulB,aAAa1d,GAAK,GAAS7H,KAAKulB,aAAa1d,GAAK,KAG1H,YAAYA,GACV,MAAMG,EAAQH,EAAI6H,QAAU1P,KAAKgI,WAAQwC,EACzC,OAAOxK,KAAK0D,eAAe,MAAO1D,KAAKgiB,aAAaha,EAAO,CACzDlF,YAAa,iCACX,gBAAQ9C,KAAM,YAAa6H,IAAQ7H,KAAKslB,eAAezd,EAAK7H,KAAK4a,gBAKzE,OAAO/X,GACL,OAAOA,EAAE,MAAO,CACdC,YAAa9C,KAAK8C,YAClB4d,MAAO1gB,KAAKwlB,QACZtiB,GAAI,CACFuiB,UAAWriB,IACTA,EAAEuH,oBAGL,CAAE3K,KAAK0Z,WAA8B,GAAjB1Z,KAAK0lB,aAAmB1lB,KAAK2lB,gBCzLzC,MAAgB9lB,OAAO,CACpCC,KAAM,qBACNyJ,SAAU,CACR,cACE,MAAO,wCAGT,cACE,OAAO8E,EAAgBY,GAAejP,KAAK0E,OAAO,KAGpD,YACE,OAAO6J,EAAcU,GAAejP,KAAKoO,KAAK,QCbrC,I,UAAA,GAAavO,OAAO,CACjCC,KAAM,0BACNI,MAAO,GAAMyS,UACbpJ,SAAU,CACR,sBACE,OAAOwF,SAAS/O,KAAKoa,gBAGvB,wBACE,OAAOrL,SAAS/O,KAAKma,kBAGvB,sBACE,OAAOpL,SAAS/O,KAAKsa,gBAGvB,uBACE,OAAOsL,WAAW5lB,KAAKga,iBAGzB,kBACE,OAAOnL,EAAU7O,KAAKqa,YAGxB,cACE,MAAM/K,EAAOtP,KAAK6lB,gBAClB,OAAgB,IAATvW,GAAkBA,GAAQ,GAAKA,GAAQnC,EAAiBmC,EAAOtP,KAAK8lB,oBAAsB9lB,KAAK+lB,uBAGxG,aACE,OAAO/lB,KAAKgmB,oBAAsBhmB,KAAKimB,sBAGzC,OACE,OAAO7T,GAAcpS,KAAKid,YAAajd,KAAKkd,UAAWld,KAAKuT,MAAM3F,MAAO5N,KAAKqS,aAAcrS,KAAK6R,UAGnG,YACE,MAAMjK,EAAO5H,KAAK4H,KACZ6K,EAAQzS,KAAKkmB,YACbxV,EAAU1Q,KAAK+lB,sBACfrT,EAAQ1S,KAAKgmB,oBACb7W,EAAMnP,KAAKuT,MAAMpE,IACvB,OAAOvH,EAAKuM,IAAIsI,GAAKjK,GAAmBiK,EAAGhK,EAAO/B,EAASgC,EAAOvD,KAGpE,oBACE,GAAInP,KAAKua,eACP,OAAOva,KAAKua,eAGd,MAAMiD,EAAc,CAClBJ,SAAU,MACVzO,KAAM,UACNC,OAAQ,WAEJ6O,EAAe,CACnBL,SAAU,MACVzO,KAAM,UACNC,OAAQ,WAEJuX,EAAmB,CACvB/I,SAAU,MACVzO,KAAM,WAER,OAAOmE,GAA4B9S,KAAKqd,cAAe,CAAC+I,EAAKhT,IAAUA,EAAuB,IAAfgT,EAAIxX,OAAeuX,EAAmB1I,EAAeD,KAIxInc,QAAS,CACP,yBAAyBglB,GACvB,MAAM5T,EAAQzS,KAAK2S,UAAU,GAAG,GAC1B2T,EAAU7T,EAAM9D,OAAS0X,EAAS1X,MAAQ8D,EAAM7D,SAAWyX,EAASzX,OAC1E,OAAQ0X,GAGV,qBAAqBC,KAIrB,oBAAoBnjB,EAAGyE,GACrB,MAAM6F,EAAYG,GAAchG,GAC1B2e,EAASpjB,EAAEqjB,cAAcjH,wBACzBkH,EAAc1mB,KAAKkmB,YACnBS,EAAavjB,EACbmH,EAAanH,EACbwjB,EAAUD,EAAWE,gBAAkBF,EAAWC,QAClDE,EAAUF,GAAWA,EAAQ,GAAKA,EAAQ,GAAGE,QAAUvc,EAAWuc,QAClEC,GAAgBD,EAAUN,EAAO1F,KAAO9gB,KAAKimB,qBAC7C5M,EAAahN,KAAKsE,MAAMoW,EAAe/mB,KAAK+lB,uBAC5CrV,EAAUgW,EAAcrN,EAC9B,OAAO5I,GAAc/C,EAAWgD,EAAS1Q,KAAKuT,MAAMpE,MAGtD,aAAazB,GACX,MAAM6S,EAAQ1S,GAAcH,GAK5B,OAJA6S,EAAMQ,QAAU/gB,KAAK+gB,QACrBR,EAAMM,UAAY7gB,KAAK6gB,UACvBN,EAAMyG,gBAAkBhnB,KAAKgnB,gBAC7BzG,EAAMnU,KAAOpM,KAAK4H,KACX2Y,GAGT,aAAajR,GACX,MAAM2X,EAAIjnB,KAAK+gB,QAAQzR,GACjB4X,EAAOlnB,KAAKkgB,MAAMiH,WAExB,SAAU,IAANF,IAAgBC,KAIpBA,EAAKE,UAAYH,GACV,IAGT,gBAAgBvW,GACd,OAAOA,EAAU1Q,KAAK+lB,sBAAwB/lB,KAAKimB,sBAGrD,QAAQ3W,EAAM+X,GAAQ,GACpB,IAAIJ,EAAIjnB,KAAK6gB,UAAUvR,GAgBvB,OAdU,IAAN2X,IACFA,GAAKjnB,KAAKsnB,WAEND,IACEJ,EAAI,IACNA,EAAI,GAGFA,EAAIjnB,KAAKsnB,aACXL,EAAIjnB,KAAKsnB,cAKRL,GAGT,UAAU3X,GACR,MAAMoB,EAAU7B,EAAUS,GAE1B,IAAgB,IAAZoB,EACF,OAAO,EAGT,MAAMe,EAAMzR,KAAKkmB,YACXqB,EAAMvnB,KAAKgmB,oBAAsBhmB,KAAK+lB,sBAC5C,OAAQrV,EAAUe,GAAO8V,OC/IhB,MAAsB1nB,OAAO,CAC1CC,KAAM,mBACN6c,WAAY,CACVC,OAAA,SAEFpc,KAAM,KAAM,CACVgnB,WAAY,IAEdje,SAAU,CACR,UACE,MAAO,CACL,oBAAoB,KACjBvJ,KAAK6jB,gBAMd,UACE7jB,KAAKynB,QAGPpmB,QAAS,CACP,OACErB,KAAK0nB,UAAU1nB,KAAK2nB,WAGtB,WACE3nB,KAAKwnB,WAAaxnB,KAAK4nB,iBAGzB,gBACE,MAAMC,EAAO7nB,KAAKkgB,MAAMiH,WAClBD,EAAOlnB,KAAKkgB,MAAMgH,KACxB,OAAOW,GAAQX,EAAOW,EAAKC,YAAcZ,EAAKY,YAAc,GAG9D,UACE,OAAO9nB,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,yBACbgd,MAAO,CACLiI,YAAa/nB,KAAKwnB,WAAa,OAEhC,CAACxnB,KAAKgoB,sBAAuBhoB,KAAKikB,iBAGvC,mBACE,MAAM1P,EAAQ,gBAAcvU,KAAKka,eACjC,OAAOla,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,mCACbgd,MAAO,CACLvL,UAED,gBAAQvU,KAAM,qBAGnB,cACE,OAAOA,KAAK4H,KAAKuM,IAAInU,KAAKokB,aAG5B,WAAWvc,EAAKpB,GACd,OAAOzG,KAAK0D,eAAe,MAAO,CAChCM,IAAK6D,EAAI9B,KACTjD,YAAa,4BACb4d,MAAO1gB,KAAKukB,mBAAmB1c,GAC/B3E,GAAIlD,KAAKkiB,6BAA6B,OAAQ3c,GACrCvF,KAAKioB,aAAapgB,KAE1B,CAAC7H,KAAKkoB,eAAergB,GAAM7H,KAAKmoB,gBAAgBtgB,MAAS7H,KAAKooB,aAAavgB,EAAKpB,MAGrF,aAAaoB,EAAKpB,GAChB,OAAO,gBAAQzG,KAAM,aAAc,KAAM,CACvCoM,KAAMpM,KAAK4H,QACRC,EACHpB,YACK,IAGT,eAAeoB,GACb,MAAMG,EAAQH,EAAI6H,QAAU1P,KAAKgI,WAAQwC,EACzC,OAAOxK,KAAK0D,eAAe,MAAO1D,KAAKgiB,aAAaha,EAAO,CACzDlF,YAAa,kCACX9C,KAAKwkB,iBAAiB3c,EAAK7H,KAAK2Z,iBAGtC,gBAAgB9R,GACd,OAAO7H,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,mCACZ,gBAAQ9C,KAAM,mBAAoB6H,IAAQ,CAAC7H,KAAKqoB,iBAAiBxgB,MAGtE,iBAAiBA,GACf,MAAMG,EAAQH,EAAI6H,QAAU1P,KAAKgI,MAAQ,cACzC,OAAOhI,KAAK0D,eAAe,QAAM,CAC/BxD,MAAO,CACL8H,QACAmd,KAAK,EACLC,WAAW,GAEbliB,GAAIlD,KAAK6J,sBAAsB,CAC7B,aAAc,CACZrD,MAAO,QACPoE,MAAM,GAER,mBAAoB,CAClBpE,MAAO,cACPoE,MAAM,EACNd,SAAS,EACTC,QAAQ,IAETxE,GACMsC,IAER7H,KAAKulB,aAAa1d,GAAK,KAG5B,UACE,OAAO7H,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,0BACZ,CAAC9C,KAAKsoB,mBAGX,gBACE,OAAOtoB,KAAK0D,eAAe,MAAO,CAChCQ,IAAK,aACLpB,YAAa,iCACZ,CAAC9C,KAAKuoB,aAGX,UACE,OAAOvoB,KAAK0D,eAAe,MAAO,CAChCQ,IAAK,OACLpB,YAAa,yBACbgd,MAAO,CACLa,OAAQ,gBAAc3gB,KAAKsnB,cAE5B,CAACtnB,KAAKwoB,qBAGX,kBACE,OAAOxoB,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,mCACZ,CAAC9C,KAAKyoB,sBAAuBzoB,KAAK0oB,aAGvC,UACE,OAAO1oB,KAAK4H,KAAKuM,IAAInU,KAAK6kB,SAG5B,OAAOhd,EAAKpB,GACV,OAAOzG,KAAK0D,eAAe,MAAO,CAChCM,IAAK6D,EAAI9B,KACTjD,YAAa,wBACb4d,MAAO1gB,KAAKukB,mBAAmB1c,GAC/B3E,GAAIlD,KAAKkiB,6BAA6B,QAAS9e,GACtCpD,KAAKioB,aAAajoB,KAAK2oB,oBAAoBvlB,EAAGyE,MAEtD,IAAI7H,KAAK4oB,gBAAgBniB,MAAWzG,KAAK6oB,WAAWhhB,MAGzD,WAAWA,GACT,OAAO,gBAAQ7H,KAAM,WAAY,IAAMA,KAAKioB,aAAapgB,KAAS,IAGpE,gBAAgBpB,GACd,OAAOzG,KAAK2S,UAAUlM,GAAO0N,IAAInU,KAAK8oB,iBAGxC,eAAezC,GACb,MAAM1F,EAAS,gBAAc3gB,KAAKga,gBAC5B+O,EAAS/oB,KAAKwa,eAAiBxa,KAAKgpB,qBACpCxoB,EAAO,CACXwD,IAAKqiB,EAAS/W,KACdxM,YAAa,iCACbgd,MAAO,CACLa,YACGoI,EAAO1C,KAGRlP,EAAW,gBAAQnX,KAAM,WAAY,IAAMA,KAAKioB,aAAa5B,IACnE,OAAOrmB,KAAK0D,eAAe,MAAOlD,EAAM2W,IAG1C,mBACE,MAAM5C,EAAQ,gBAAcvU,KAAKka,eAC3B1Z,EAAO,CACXsC,YAAa,mCACbgd,MAAO,CACLvL,SAEFrR,GAAIlD,KAAKkiB,6BAA6B,YAAa9e,GAC1CpD,KAAK2oB,oBAAoBvlB,EAAGpD,KAAKid,eAG5C,OAAOjd,KAAK0D,eAAe,MAAOlD,EAAMR,KAAKipB,sBAG/C,oBACE,OAAKjpB,KAAK2S,UAAU3Q,OACbhC,KAAK2S,UAAU,GAAGwB,IAAInU,KAAKkpB,kBADC,MAIrC,iBAAiB7C,GACf,MAAM1F,EAAS,gBAAc3gB,KAAKga,gBAC5B5G,EAAQpT,KAAK+Z,eACboP,EAASnpB,KAAKya,mBAAqBza,KAAKopB,yBACxCC,EAAOF,EAAO9C,GACdiD,EAAQD,EAAOrpB,KAAKupB,kBAAkBlD,EAAUjT,QAAS5I,EAC/D,OAAOxK,KAAK0D,eAAe,MAAO,CAChCM,IAAKqiB,EAAS/W,KACdxM,YAAa,6BACbgd,MAAO,CACLa,WAED,CAAC3gB,KAAK0D,eAAe,MAAO,CAC7BZ,YAAa,mCACZwmB,OAKP,OAAOzmB,GACL,OAAOA,EAAE,MAAO,CACd6d,MAAO1gB,KAAKwlB,QACZtiB,GAAI,CACFuiB,UAAWriB,IACTA,EAAEuH,mBAGNgS,WAAY,CAAC,CACX6M,UAAW,CACTC,OAAO,GAET3pB,KAAM,SACNS,MAAOP,KAAK2nB,YAEb,CAAE3nB,KAAK0Z,WAA8B,GAAjB1Z,KAAK0lB,UAAgB1lB,KAAK0pB,eChPtC,I,UAAA,GAAe7pB,OAAO,CACnCC,KAAM,sBACNI,MAAO,GAAM8a,SACbzR,SAAU,CACR,UACE,MAAO,CACL,oBAAoB,EACpB,uBAAuB,KACpBvJ,KAAK6jB,eAIZ,mBACE,MAAkC,kBAApB7jB,KAAKib,YAA2Bjb,KAAKib,WAAajb,KAAKib,WAAWoB,MAAM,WAAavR,MAAMC,QAAQ/K,KAAKib,YAAcjb,KAAKib,WAAa,KAI1J5Z,QAAS,CACP,aAAawG,EAAKpB,GAChB,MAAMjG,EAAO,CACXsC,YAAa,gCAETyd,EAAQ,CACZnU,KAAMpM,KAAK4H,QACRC,EACHpB,SAEI0Q,EAAWnX,KAAK2pB,iBAAiBxV,IAAI6G,GAAYhb,KAAK4pB,qBAAqB/hB,EAAK7H,KAAK6pB,iBAAiBtJ,EAAOvF,KACnH,MAAO,CAAChb,KAAK0D,eAAe,MAAOlD,EAAM2W,KAG3C,iBAAiBoJ,EAAOvF,GACtB,MAAO,IAAKuF,EACVvF,SAAUA,IAAahb,KAAKob,mBAAqB,KAAOJ,IAI5D,qBAAqBnT,EAAK0Y,GACxB,OAAOvgB,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,qCACbI,GAAIlD,KAAKkiB,6BAA6B,gBAAiB9e,GAC9CpD,KAAK6pB,iBAAiB7pB,KAAKioB,aAAapgB,GAAM0Y,EAAMvF,YAE5D,CAAC,gBAAQhb,KAAM,WAAYugB,IAAUvgB,KAAK8pB,0BAA0BvJ,EAAMvF,UAAW,gBAAQhb,KAAM,aAAcugB,MAGtH,0BAA0BvF,GACxB,OAAOhb,KAAK0D,eAAe,MAAO,CAChCZ,YAAa,iCACC,OAAbkY,EAAoBhb,KAAKob,mBAAqBJ,IAGnD,WAAWnT,GACT,MAAMrH,EAAO,CACXsC,YAAa,gCAETqU,EAAWnX,KAAK2pB,iBAAiBxV,IAAI6G,GAAYhb,KAAK+pB,mBAAmBliB,EAAKmT,IACpF,MAAO,CAAChb,KAAK0D,eAAe,MAAOlD,EAAM2W,KAG3C,mBAAmBtP,EAAKmT,GACtB,MAAMxa,EAAO,CACXsC,YAAa,8BACbI,GAAIlD,KAAKkiB,6BAA6B,iBAAkB9e,GAC/CpD,KAAK6pB,iBAAiB7pB,KAAKioB,aAAajoB,KAAK2oB,oBAAoBvlB,EAAGyE,IAAOmT,KAGhF7D,EAAW,gBAAQnX,KAAM,WAAY,IAAMA,KAAK6pB,iBAAiB7pB,KAAKioB,aAAapgB,GAAMmT,IAC/F,OAAOhb,KAAK0D,eAAe,MAAOlD,EAAM2W,QC/D/B,MAAmBtX,OAAO,CACvCC,KAAM,aACNI,MAAO,IAAK,GAAM0E,YACb,GAAM8V,SACN,GAAM/H,aACN,GAAMqI,UAEXxa,KAAM,KAAM,CACVwpB,UAAW,KACXC,QAAS,OAEX1gB,SAAU,CACR,cACE,OAAOyF,GAAkBhP,KAAKO,OAAS0O,GAAejP,KAAKO,OAAO,GAAQP,KAAKid,aAAejd,KAAKuT,MAAM3F,OAG3G,qBACE,OAAOmB,SAAS/O,KAAKqb,eAAiB,GAGxC,cACE,MAAM6O,EAASlqB,KAAKmqB,YACpB,IAAIC,EAAY,KACZvY,EAAU7R,KAAK6R,QACflE,EAAW3N,KAAK6c,eAChB5B,EAAajb,KAAK2pB,iBAClBjlB,EAAQwlB,EACR9b,EAAM8b,EAEV,OAAQlqB,KAAK8H,MACX,IAAK,QACHsiB,EAAYC,GACZ3lB,EAAQ2J,EAAgB6b,GACxB9b,EAAMG,EAAc2b,GACpB,MAEF,IAAK,OACHE,EAAY,GACZ1lB,EAAQ1E,KAAKyN,eAAeyc,GAC5B9b,EAAMpO,KAAKmO,aAAa+b,GACxBrY,EAAU,EACV,MAEF,IAAK,MACHuY,EAAY,GACZvY,EAAU,EACVlE,EAAW,CAACjJ,EAAM6K,SAClB,MAEF,IAAK,OACH6a,EAAY,GACZhc,EAAMkD,GAAazD,GAAcO,GAAMiD,GAAS,GAChDrD,GAAgBI,GAChByD,EAAU,EACVlE,EAAW,CAACjJ,EAAM6K,SAAU7K,EAAM6K,QAAU,GAAK,GAAI7K,EAAM6K,QAAU,GAAK,GAAI7K,EAAM6K,QAAU,GAAK,GACnG,MAEF,IAAK,gBACH6a,EAAY,GACZ1lB,EAAQ1E,KAAKid,aAAeiN,EAC5B9b,EAAMpO,KAAKkd,UACX,MAEF,IAAK,eACHkN,EAAY,GACZ1lB,EAAQ1E,KAAKid,aAAeiN,EAC5B9b,EAAMpO,KAAKkd,UACX,MAEF,IAAK,WACH,MAAMtV,EAAO5H,KAAKsqB,mBAClBF,EAAY,GACZhc,EAAMkD,GAAazD,GAAcO,GAAMiD,GAASzJ,GAChDoG,GAAgBI,GAChByD,EAAUjK,EACV+F,EAAW,GAEX,IAAK,IAAIjL,EAAI,EAAGA,EAAIkF,EAAMlF,IACxBiL,EAASrL,MAAMoC,EAAM6K,QAAU7M,GAAK,GAGtCuY,EAAajb,KAAKuqB,gBAAgBtP,GAClC,MAEF,QACE,MAAM,IAAI5L,MAAMrP,KAAK8H,KAAO,iCAGhC,MAAO,CACLsiB,YACA1lB,QACA0J,MACAyD,UACAlE,WACAsN,eAIJ,gBACE,OAAOjb,KAAKwqB,YAAY7c,UAG1B,eACE,MAAqB,aAAd3N,KAAK8H,MAGd,QACE,MAAM,MACJpD,EAAK,IACL0J,GACEpO,KAAKwqB,YACHC,EAAY/lB,EAAMuG,OAASmD,EAAInD,KAC/Byf,EAAaD,GAAa/lB,EAAMiE,QAAUyF,EAAIzF,MAEpD,OAAI8hB,EACKzqB,KAAK2qB,oBAAoBjmB,GAAO,GAAQ,IAAMA,EAAMuG,KAAO,MAAQjL,KAAK2qB,oBAAoBvc,GAAK,GAAQ,IAAMA,EAAInD,KAGxHyf,EACK1qB,KAAK2qB,oBAAoBjmB,GAAO,GAAQ,MAAQ1E,KAAK2qB,oBAAoBvc,GAAK,GAAQ,IAAMA,EAAInD,KAEhGjL,KAAK4qB,mBAAmBlmB,GAAO,GAAS,IAAMA,EAAMuG,MAI/D,qBACE,OAAOjL,KAAKkf,aAAa,CACvB9B,SAAU,MACVzU,MAAO,UAIX,sBACE,OAAO3I,KAAKkf,aAAa,CACvB9B,SAAU,MACVzU,MAAO,WAIX,mBACE,MAAkC,kBAApB3I,KAAKib,YAA2Bjb,KAAKib,WAAajb,KAAKib,WAAWoB,MAAM,WAAavR,MAAMC,QAAQ/K,KAAKib,YAAcjb,KAAKib,WAAa,KAI1Jra,MAAO,CACL4pB,YAAa,eAGf,UACExqB,KAAK6qB,wBACL7qB,KAAK8qB,eAGP,UACEtiB,OAAOuiB,sBAAsB/qB,KAAK6qB,wBAGpCxpB,QAAS,CACP,cACE,MAAM,UACJ2oB,EAAS,QACTC,GACEjqB,MACE,MACJ0E,EAAK,IACL0J,GACEpO,KAAKwqB,YAEJR,GAAcC,GAAWvlB,EAAMqB,OAASikB,EAAUjkB,MAAQqI,EAAIrI,OAASkkB,EAAQlkB,OAClF/F,KAAKgqB,UAAYtlB,EACjB1E,KAAKiqB,QAAU7b,EACfpO,KAAKkB,MAAM,SAAU,CACnBwD,QACA0J,UAKN,KAAK4c,EAAS,GACZ,MAAMC,EAAQpd,GAAc7N,KAAKmqB,aAC3Be,EAAUF,EAAS,EACnBzZ,EAAQ2Z,EAAU7Z,GAAUtD,GAC5Bod,EAAQD,EAAUte,EAAoBG,EAC5C,IAAIwG,EAAQ2X,EAAUF,GAAUA,EAEhC,QAASzX,GAAS,EAChB,OAAQvT,KAAK8H,MACX,IAAK,QACHmjB,EAAMpjB,IAAMsjB,EACZ5Z,EAAM0Z,GACN,MAEF,IAAK,OACH3Z,GAAa2Z,EAAO1Z,EAAOvE,GAC3B,MAEF,IAAK,MACHsE,GAAa2Z,EAAO1Z,EAAO,GAC3B,MAEF,IAAK,OACHD,GAAa2Z,EAAO1Z,EAAO,GAC3B,MAEF,IAAK,WACHD,GAAa2Z,EAAO1Z,EAAOvR,KAAKsqB,oBAChC,MAINhc,GAAc2c,GACdjd,GAAgBid,GAChBhd,GAAegd,EAAOjrB,KAAKuT,MAAMpE,KAE7BnP,KAAKO,iBAAiBuI,KACxB9I,KAAKkB,MAAM,QAASiR,GAAgB8Y,IACL,kBAAfjrB,KAAKO,MACrBP,KAAKkB,MAAM,QAASiR,GAAgB8Y,GAAOza,WAE3CxQ,KAAKkB,MAAM,QAAS+pB,EAAMllB,MAG5B/F,KAAKkB,MAAM,QAAS+pB,IAGtB,KAAKD,EAAS,GACZhrB,KAAKorB,KAAKJ,IAGZ,KAAKA,EAAS,GACZhrB,KAAKorB,MAAMJ,IAGb,QAAQ1b,EAAM+X,GAAQ,GACpB,MAAM/O,EAAItY,KAAKqrB,UAAU,GAEzB,SAAI/S,IAAKA,EAAEyI,UACFzI,EAAEyI,QAAQzR,EAAM+X,IAM3B,UAAU/X,GACR,MAAMgJ,EAAItY,KAAKqrB,UAAU,GAEzB,SAAI/S,IAAKA,EAAEuI,YACFvI,EAAEuI,UAAUvR,IAMvB,gBAAgBoB,GACd,MAAM4H,EAAItY,KAAKqrB,UAAU,GAEzB,OAAI/S,GAAKA,EAAE0O,gBACF1O,EAAE0O,gBAAgBtW,IAEjB,GAIZ,aAAapB,GACX,MAAMgJ,EAAItY,KAAKqrB,UAAU,GAEzB,SAAI/S,IAAKA,EAAEgT,eACFhT,EAAEgT,aAAahc,IAM1B,eAAehO,EAAO4N,GACpB,OAAOD,GAAe3N,EAAO4N,EAAUlP,KAAKuT,MAAMpE,MAGpD,gBAAgBzB,GACd,OAAOyE,GAAgBzE,IAGzB,gBAAgBuN,GACd,IAAKjb,KAAKmf,SAAU,CAClB,MAAMoM,EAActQ,EAAW5C,OAAO,CAAClE,EAAK6G,EAAUvU,KACpD0N,EAAI6G,GAAY,CACdvU,QACAiM,MAAO,GAEFyB,GACNpT,OAAOyqB,OAAO,OAEjB,IAAKxrB,KAAKkb,sBAAwBlb,KAAKmb,gBAAiB,CACtD,IAAIsQ,EAAiBxQ,EAAWjZ,OAChChC,KAAKwiB,aAAavgB,QAAQypB,IACxB,IAAI1Q,EAAW0Q,EAAG1Q,SAEM,kBAAbA,IACTA,EAAWhb,KAAKob,oBAGbJ,IAIDA,KAAYuQ,EACdA,EAAYvQ,GAAUtI,QACZ1S,KAAKkb,sBACfqQ,EAAYvQ,GAAY,CACtBvU,MAAOglB,IACP/Y,MAAO,OAMf,IAAK1S,KAAKmb,gBACR,IAAK,MAAMH,KAAYuQ,EACe,IAAhCA,EAAYvQ,GAAUtI,cACjB6Y,EAAYvQ,GAKzBC,EAAala,OAAO4qB,KAAKJ,GAG3B,OAAOtQ,IAKX,OAAOpY,GACL,MAAM,MACJ6B,EAAK,IACL0J,EAAG,QACHyD,EAAO,UACPuY,EAAS,SACTzc,EAAQ,WACRsN,GACEjb,KAAKwqB,YACT,OAAO3nB,EAAEunB,EAAW,CAClBtnB,YAAa,aACb4d,MAAO,CACL,qBAAsB1gB,KAAKmf,UAE7Bjf,MAAO,IAAKF,KAAK4rB,OACflnB,MAAOA,EAAMqB,KACbqI,IAAKA,EAAIrI,KACT8L,UACAlE,WACAsN,cAEF0B,WAAY,CAAC,CACX6M,UAAW,CACTC,OAAO,GAET3pB,KAAM,SACNS,MAAOP,KAAK6qB,wBAEd3nB,GAAI,IAAKlD,KAAKiK,WACZ,aAAcpC,IACR7H,KAAKiK,WAAW,UAClBjK,KAAKkB,MAAM,QAAS2G,EAAI9B,MAGtB/F,KAAKiK,WAAW,eAClBjK,KAAKkB,MAAM,aAAc2G,KAI/B/D,YAAa9D,KAAK6rB,sB,sLCzXpB,GAAY,eACd,EACAtoB,EACAuD,GACA,EACA,KACA,KACA,MAIa,gBAAiB,QAqBhC,IAAkB,GAAW,CAACglB,OAAA,KAAKC,aAAUC,SAAA,KAAMC,UAAA,QAAUC,WAAA,QAAWC,QAAA,KAAKC,WAAA,KAAQC,SAAA,KAAMC,SAAA,KAAMC,QAAA,KAAKC,WAAA,KAAQC,UAAA,KAAOC,WAAA,KAAQC,cAAA,KAAWC,aAAA,KAAUC,YAAA,KAASC,YAAA,Q","file":"js/chunk-32573c48.e48a4f9f.js","sourcesContent":["// Mixins\nimport mixins from '../../util/mixins';\nimport BindsAttrs from '../../mixins/binds-attrs';\nimport { provide as RegistrableProvide } from '../../mixins/registrable';\n/* @vue/component */\n\nexport default mixins(BindsAttrs, RegistrableProvide('form')\n/* @vue/component */\n).extend({\n name: 'v-form',\n\n provide() {\n return {\n form: this\n };\n },\n\n inheritAttrs: false,\n props: {\n disabled: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n value: Boolean\n },\n data: () => ({\n inputs: [],\n watchers: [],\n errorBag: {}\n }),\n watch: {\n errorBag: {\n handler(val) {\n const errors = Object.values(val).includes(true);\n this.$emit('input', !errors);\n },\n\n deep: true,\n immediate: true\n }\n },\n methods: {\n watchInput(input) {\n const watcher = input => {\n return input.$watch('hasError', val => {\n this.$set(this.errorBag, input._uid, val);\n }, {\n immediate: true\n });\n };\n\n const watchers = {\n _uid: input._uid,\n valid: () => {},\n shouldValidate: () => {}\n };\n\n if (this.lazyValidation) {\n // Only start watching inputs if we need to\n watchers.shouldValidate = input.$watch('shouldValidate', val => {\n if (!val) return; // Only watch if we're not already doing it\n\n if (this.errorBag.hasOwnProperty(input._uid)) return;\n watchers.valid = watcher(input);\n });\n } else {\n watchers.valid = watcher(input);\n }\n\n return watchers;\n },\n\n /** @public */\n validate() {\n return this.inputs.filter(input => !input.validate(true)).length === 0;\n },\n\n /** @public */\n reset() {\n this.inputs.forEach(input => input.reset());\n this.resetErrorBag();\n },\n\n resetErrorBag() {\n if (this.lazyValidation) {\n // Account for timeout in validatable\n setTimeout(() => {\n this.errorBag = {};\n }, 0);\n }\n },\n\n /** @public */\n resetValidation() {\n this.inputs.forEach(input => input.resetValidation());\n this.resetErrorBag();\n },\n\n register(input) {\n this.inputs.push(input);\n this.watchers.push(this.watchInput(input));\n },\n\n unregister(input) {\n const found = this.inputs.find(i => i._uid === input._uid);\n if (!found) return;\n const unwatch = this.watchers.find(i => i._uid === found._uid);\n\n if (unwatch) {\n unwatch.valid();\n unwatch.shouldValidate();\n }\n\n this.watchers = this.watchers.filter(i => i._uid !== found._uid);\n this.inputs = this.inputs.filter(i => i._uid !== found._uid);\n this.$delete(this.errorBag, found._uid);\n }\n\n },\n\n render(h) {\n return h('form', {\n staticClass: 'v-form',\n attrs: {\n novalidate: true,\n ...this.attrs$\n },\n on: {\n submit: e => this.$emit('submit', e)\n }\n }, this.$slots.default);\n }\n\n});\n//# sourceMappingURL=VForm.js.map","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('fm-title',{attrs:{\"title\":_vm.$t('行事曆')}},[_c('v-spacer'),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-icon',_vm._g(_vm._b({},'v-icon',attrs,false),on),[_vm._v(\"mdi-help-circle\")])]}}])},[_c('span',[_vm._v(_vm._s(_vm.$t('點擊日期即可增加事件')))])])],1),_c('div',{staticClass:\"text-center\"},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.prev}},[_c('v-icon',[_vm._v(\"mdi-chevron-left\")])],1),_c('span',{staticClass:\"mx-2\",staticStyle:{\"vertical-align\":\"middle\"}},[_vm._v(_vm._s(_vm.state.start))]),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.next}},[_c('v-icon',[_vm._v(\"mdi-chevron-right\")])],1)],1),(_vm.state.calendar)?_c('fm-loading',{attrs:{\"finish\":_vm.state.calendar.$o.fetch.done}},[_c('v-sheet',{staticClass:\"mt-3\",attrs:{\"height\":\"600\"}},[_c('v-calendar',{ref:\"calendar\",attrs:{\"start\":_vm.startValue,\"events\":_vm.events,\"event-color\":_vm.getEventColor},on:{\"click:date\":_vm.showDate,\"click:event\":_vm.showEvent}})],1),_c('div',{staticClass:\"my-5 py-2 text-center\"},[_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":function($event){return _vm.toTop()}}},[_c('v-icon',[_vm._v(\"mdi-arrow-up\")]),_c('div',[_vm._v(_vm._s(_vm.$t('回頂端')))])],1)],1)],1):_vm._e(),_c('v-dialog',{attrs:{\"max-width\":\"500px\"},model:{value:(_vm.state.eventDialog),callback:function ($$v) {_vm.$set(_vm.state, \"eventDialog\", $$v)},expression:\"state.eventDialog\"}},[(_vm.state.calendarEvent)?_c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.state.calendarEvent.name))]),_c('v-card-text',[_vm._v(_vm._s(_vm.state.calendarEvent.desc || _vm.$t('無內容')))])],1):_vm._e()],1),_c('v-dialog',{attrs:{\"fullscreen\":\"\",\"max-width\":\"500px\"},model:{value:(_vm.state.dateDialog),callback:function ($$v) {_vm.$set(_vm.state, \"dateDialog\", $$v)},expression:\"state.dateDialog\"}},[(_vm.state.calendarDay)?_c('v-card',{staticClass:\"pb-5\"},[_c('v-toolbar',{staticClass:\"elevation-1\",attrs:{\"fixed\":\"\"}},[_c('span',[_vm._v(_vm._s(_vm.state.calendarDay.date))]),_c('v-spacer'),(_vm.state.calendarDay.events.size < _vm.config.calendarEventLimit)?_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.addEvent}},[_c('v-icon',[_vm._v(\"mdi-plus\")])],1):_vm._e(),_c('v-btn',{attrs:{\"icon\":\"\",\"disabled\":!_vm.state.validate,\"loading\":_vm.state.calendarDay.$o.update.loading},on:{\"click\":_vm.close}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1),_c('div',{staticClass:\"px-5 pt-2\"},[_c('v-form',{model:{value:(_vm.state.validate),callback:function ($$v) {_vm.$set(_vm.state, \"validate\", $$v)},expression:\"state.validate\"}},[_c('v-row',_vm._l((_vm.state.calendarDay.events.items),function(event,index){return _c('v-col',{key:index + '123',attrs:{\"cols\":\"12\",\"sm\":\"6\",\"md\":\"4\",\"lg\":\"3\"}},[_c('v-card',[_c('v-card-title',{staticClass:\"mx-0 mb-4\"},[_c('div',[_vm._v(_vm._s(_vm.farm.name))]),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.removeEvent(event)}}},[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)],1),_c('v-card-text',[_c('v-text-field',{staticClass:\"required\",attrs:{\"outlined\":\"\",\"label\":_vm.$t('名稱'),\"rules\":event.$rules('name')},model:{value:(event.name),callback:function ($$v) {_vm.$set(event, \"name\", $$v)},expression:\"event.name\"}}),_c('v-select',{staticClass:\"required\",attrs:{\"outlined\":\"\",\"item-text\":\"text\",\"item-value\":\"value\",\"rules\":event.$rules('type'),\"items\":_vm.config.calendarTypes,\"label\":_vm.$t('分類')},model:{value:(event.type),callback:function ($$v) {_vm.$set(event, \"type\", $$v)},expression:\"event.type\"}}),_c('v-textarea',{attrs:{\"height\":\"100px\",\"counter\":\"50\",\"outlined\":\"\",\"rules\":event.$rules('desc'),\"label\":_vm.$t('細節')},model:{value:(event.desc),callback:function ($$v) {_vm.$set(event, \"desc\", $$v)},expression:\"event.desc\"}})],1)],1)],1)}),1)],1)],1)],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { __awaiter } from \"tslib\";\r\nimport moment from 'moment';\r\nimport { alas, status } from '@/alas';\r\nimport { showError } from '@/store';\r\nimport { defineComponent, reactive, ref, computed, onMounted } from '@vue/composition-api';\r\nexport default defineComponent({\r\n setup(props, context) {\r\n let t = m => context.root.$t(m);\r\n let route = context.root.$route;\r\n let router = context.root.$router;\r\n // ================\r\n //\r\n // refs\r\n //\r\n let farm = ref(status.fetch('farm'));\r\n let config = ref(status.fetch('config'));\r\n // ================\r\n //\r\n // state\r\n //\r\n let state = reactive({\r\n date: null,\r\n start: moment().format('YYYY-MM'),\r\n validate: false,\r\n calendar: alas.make('farm', 'calendar'),\r\n calendarDay: alas.make('farm', 'calendarDay'),\r\n calendarEvent: alas.make('farm', 'calendarEvent'),\r\n dateDialog: false,\r\n eventDialog: false\r\n });\r\n // ================\r\n //\r\n // computed\r\n //\r\n let startValue = computed(() => moment(state.start).format('YYYY-MM-DD'));\r\n let events = computed(() => {\r\n if (state.calendar == null) {\r\n return [];\r\n }\r\n let output = [];\r\n state.calendar.days.forEach(day => {\r\n day.events.forEach(event => {\r\n let type = config.value.calendarTypes.find(type => type.value === event.type);\r\n output.push({\r\n name: event.name,\r\n start: event.$parent.date,\r\n color: type ? type.color : 'primary',\r\n model: event\r\n });\r\n });\r\n });\r\n return output;\r\n });\r\n // ================\r\n //\r\n // mounted\r\n //\r\n onMounted(() => {\r\n setCalendar(state.start);\r\n });\r\n // ================\r\n //\r\n // methods\r\n //\r\n let next = () => {\r\n state.start = moment(state.start).add(1, 'month').format('YYYY-MM');\r\n setCalendar(state.start);\r\n };\r\n let prev = () => {\r\n state.start = moment(state.start).subtract(1, 'month').format('YYYY-MM');\r\n setCalendar(state.start);\r\n };\r\n let setCalendar = (yyyymm) => {\r\n state.calendar = alas.make('farm', 'calendar');\r\n state.calendar.$o.fetch.start({\r\n farmId: route.params.id,\r\n yyyymm\r\n });\r\n };\r\n let toTop = () => {\r\n window.scrollTo(0, 0);\r\n };\r\n let close = () => __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n yield state.calendarDay.$o.update.start();\r\n }\r\n catch (error) {\r\n showError(error);\r\n }\r\n state.dateDialog = false;\r\n });\r\n let showEvent = ({ event }) => {\r\n state.calendarEvent = event.model;\r\n state.eventDialog = true;\r\n };\r\n let showDate = ({ month, date }) => {\r\n let r = config.value.calendarWriteFutureRefuseDays;\r\n let start = new Date(state.start);\r\n let select = moment(date).valueOf();\r\n if (select < moment().subtract(1, 'd').valueOf()) {\r\n return showError(t('你不能在過去建立事件'));\r\n }\r\n if (start.getMonth() + 1 !== month) {\r\n return showError(t('未在選取月份內'));\r\n }\r\n if (select > moment().add(r, 'd').valueOf()) {\r\n return showError(t('不能規劃太過於未來的事件'));\r\n }\r\n let id = route.params.id;\r\n let day = state.calendar.days.fetch(date);\r\n if (day == null) {\r\n day = alas.make('farm', 'calendarDay').$init({\r\n date: date,\r\n farmId: id\r\n });\r\n state.calendar.days.write(day);\r\n }\r\n state.dateDialog = true;\r\n state.calendarDay = day;\r\n };\r\n let addEvent = () => {\r\n state.calendarDay.events.write({\r\n name: ''\r\n });\r\n };\r\n let getEventColor = (event) => {\r\n return event.color;\r\n };\r\n let removeEvent = (event) => {\r\n state.calendarDay.events.removeByItem(event);\r\n };\r\n // ================\r\n //\r\n // done\r\n //\r\n return {\r\n farm,\r\n config,\r\n state,\r\n startValue,\r\n events,\r\n next,\r\n prev,\r\n setCalendar,\r\n toTop,\r\n close,\r\n showEvent,\r\n showDate,\r\n addEvent,\r\n getEventColor,\r\n removeEvent\r\n };\r\n }\r\n});\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./calendar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./calendar.vue?vue&type=script&lang=ts&\"","import Vue from 'vue';\nexport default Vue.extend({\n name: 'localable',\n props: {\n locale: String\n },\n computed: {\n currentLocale() {\n return this.locale || this.$vuetify.lang.current;\n }\n\n }\n});\n//# sourceMappingURL=index.js.map","import Vue from 'vue';\nexport default Vue.extend({\n name: 'mouse',\n methods: {\n getDefaultMouseEventHandlers(suffix, getEvent) {\n return this.getMouseEventHandlers({\n ['click' + suffix]: {\n event: 'click'\n },\n ['contextmenu' + suffix]: {\n event: 'contextmenu',\n prevent: true,\n result: false\n },\n ['mousedown' + suffix]: {\n event: 'mousedown'\n },\n ['mousemove' + suffix]: {\n event: 'mousemove'\n },\n ['mouseup' + suffix]: {\n event: 'mouseup'\n },\n ['mouseenter' + suffix]: {\n event: 'mouseenter'\n },\n ['mouseleave' + suffix]: {\n event: 'mouseleave'\n },\n ['touchstart' + suffix]: {\n event: 'touchstart'\n },\n ['touchmove' + suffix]: {\n event: 'touchmove'\n },\n ['touchend' + suffix]: {\n event: 'touchend'\n }\n }, getEvent);\n },\n\n getMouseEventHandlers(events, getEvent) {\n const on = {};\n\n for (const event in events) {\n const eventOptions = events[event];\n if (!this.$listeners[event]) continue; // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : (eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : '');\n const key = prefix + eventOptions.event;\n\n const handler = e => {\n const mouseEvent = e;\n\n if (eventOptions.button === undefined || mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button) {\n if (eventOptions.prevent) {\n e.preventDefault();\n }\n\n if (eventOptions.stop) {\n e.stopPropagation();\n }\n\n this.$emit(event, getEvent(e));\n }\n\n return eventOptions.result;\n };\n\n if (key in on) {\n /* istanbul ignore next */\n if (Array.isArray(on[key])) {\n on[key].push(handler);\n } else {\n on[key] = [on[key], handler];\n }\n } else {\n on[key] = handler;\n }\n }\n\n return on;\n }\n\n }\n});\n//# sourceMappingURL=mouse.js.map","function createUTCDate(year, month = 0, day = 1) {\n let date;\n\n if (year < 100 && year >= 0) {\n date = new Date(Date.UTC(year, month, day));\n\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(year);\n }\n } else {\n date = new Date(Date.UTC(year, month, day));\n }\n\n return date;\n}\n\nfunction firstWeekOffset(year, firstDayOfWeek, firstDayOfYear) {\n const firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear;\n const firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7;\n return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1;\n}\n\nfunction dayOfYear(year, month, day, firstDayOfWeek) {\n let dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][month];\n\n if (month > 1 && isLeapYear(year)) {\n dayOfYear++;\n }\n\n return dayOfYear + day;\n}\n\nfunction weeksInYear(year, firstDayOfWeek, firstDayOfYear) {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear);\n const weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear);\n const daysInYear = isLeapYear(year) ? 366 : 365;\n return (daysInYear - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function weekNumber(year, month, day, firstDayOfWeek, localeFirstDayOfYear) {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear);\n const week = Math.ceil((dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7);\n\n if (week < 1) {\n return week + weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear);\n } else if (week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)) {\n return week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear);\n } else {\n return week;\n }\n}\nexport function isLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n//# sourceMappingURL=dateTimeUtils.js.map","import { isLeapYear } from '../../../util/dateTimeUtils';\nexport const PARSE_REGEX = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/;\nexport const PARSE_TIME = /(\\d\\d?)(:(\\d\\d?)|)(:(\\d\\d?)|)/;\nexport const DAYS_IN_MONTH = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nexport const DAYS_IN_MONTH_LEAP = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nexport const DAYS_IN_MONTH_MIN = 28;\nexport const DAYS_IN_MONTH_MAX = 31;\nexport const MONTH_MAX = 12;\nexport const MONTH_MIN = 1;\nexport const DAY_MIN = 1;\nexport const DAYS_IN_WEEK = 7;\nexport const MINUTES_IN_HOUR = 60;\nexport const MINUTE_MAX = 59;\nexport const MINUTES_IN_DAY = 24 * 60;\nexport const HOURS_IN_DAY = 24;\nexport const HOUR_MAX = 23;\nexport const FIRST_HOUR = 0;\nexport const OFFSET_YEAR = 10000;\nexport const OFFSET_MONTH = 100;\nexport const OFFSET_HOUR = 100;\nexport const OFFSET_TIME = 10000;\nexport function getStartOfWeek(timestamp, weekdays, today) {\n const start = copyTimestamp(timestamp);\n findWeekday(start, weekdays[0], prevDay);\n updateFormatted(start);\n\n if (today) {\n updateRelative(start, today, start.hasTime);\n }\n\n return start;\n}\nexport function getEndOfWeek(timestamp, weekdays, today) {\n const end = copyTimestamp(timestamp);\n findWeekday(end, weekdays[weekdays.length - 1]);\n updateFormatted(end);\n\n if (today) {\n updateRelative(end, today, end.hasTime);\n }\n\n return end;\n}\nexport function getStartOfMonth(timestamp) {\n const start = copyTimestamp(timestamp);\n start.day = DAY_MIN;\n updateWeekday(start);\n updateFormatted(start);\n return start;\n}\nexport function getEndOfMonth(timestamp) {\n const end = copyTimestamp(timestamp);\n end.day = daysInMonth(end.year, end.month);\n updateWeekday(end);\n updateFormatted(end);\n return end;\n}\nexport function validateTime(input) {\n return typeof input === 'number' && isFinite(input) || !!PARSE_TIME.exec(input) || typeof input === 'object' && isFinite(input.hour) && isFinite(input.minute);\n}\nexport function parseTime(input) {\n if (typeof input === 'number') {\n // when a number is given, it's minutes since 12:00am\n return input;\n } else if (typeof input === 'string') {\n // when a string is given, it's a hh:mm:ss format where seconds are optional\n const parts = PARSE_TIME.exec(input);\n\n if (!parts) {\n return false;\n }\n\n return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0);\n } else if (typeof input === 'object') {\n // when an object is given, it must have hour and minute\n if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {\n return false;\n }\n\n return input.hour * 60 + input.minute;\n } else {\n // unsupported type\n return false;\n }\n}\nexport function validateTimestamp(input) {\n return typeof input === 'number' && isFinite(input) || typeof input === 'string' && !!PARSE_REGEX.exec(input) || input instanceof Date;\n}\nexport function parseTimestamp(input, required = false, now) {\n if (typeof input === 'number' && isFinite(input)) {\n input = new Date(input);\n }\n\n if (input instanceof Date) {\n const date = parseDate(input);\n\n if (now) {\n updateRelative(date, now, date.hasTime);\n }\n\n return date;\n }\n\n if (typeof input !== 'string') {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`);\n }\n\n return null;\n } // YYYY-MM-DD hh:mm:ss\n\n\n const parts = PARSE_REGEX.exec(input);\n\n if (!parts) {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`);\n }\n\n return null;\n }\n\n const timestamp = {\n date: input,\n time: '',\n year: parseInt(parts[1]),\n month: parseInt(parts[2]),\n day: parseInt(parts[4]) || 1,\n hour: parseInt(parts[6]) || 0,\n minute: parseInt(parts[8]) || 0,\n weekday: 0,\n hasDay: !!parts[4],\n hasTime: !!(parts[6] && parts[8]),\n past: false,\n present: false,\n future: false\n };\n updateWeekday(timestamp);\n updateFormatted(timestamp);\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime);\n }\n\n return timestamp;\n}\nexport function parseDate(date) {\n return updateFormatted({\n date: '',\n time: '',\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n weekday: date.getDay(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n hasDay: true,\n hasTime: true,\n past: false,\n present: true,\n future: false\n });\n}\nexport function getDayIdentifier(timestamp) {\n return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day;\n}\nexport function getTimeIdentifier(timestamp) {\n return timestamp.hour * OFFSET_HOUR + timestamp.minute;\n}\nexport function getTimestampIdentifier(timestamp) {\n return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp);\n}\nexport function updateRelative(timestamp, now, time = false) {\n let a = getDayIdentifier(now);\n let b = getDayIdentifier(timestamp);\n let present = a === b;\n\n if (timestamp.hasTime && time && present) {\n a = getTimeIdentifier(now);\n b = getTimeIdentifier(timestamp);\n present = a === b;\n }\n\n timestamp.past = b < a;\n timestamp.present = present;\n timestamp.future = b > a;\n return timestamp;\n}\nexport function isTimedless(input) {\n return input instanceof Date || typeof input === 'number' && isFinite(input);\n}\nexport function updateHasTime(timestamp, hasTime, now) {\n if (timestamp.hasTime !== hasTime) {\n timestamp.hasTime = hasTime;\n\n if (!hasTime) {\n timestamp.hour = HOUR_MAX;\n timestamp.minute = MINUTE_MAX;\n timestamp.time = getTime(timestamp);\n }\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime);\n }\n }\n\n return timestamp;\n}\nexport function updateMinutes(timestamp, minutes, now) {\n timestamp.hasTime = true;\n timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR);\n timestamp.minute = minutes % MINUTES_IN_HOUR;\n timestamp.time = getTime(timestamp);\n\n if (now) {\n updateRelative(timestamp, now, true);\n }\n\n return timestamp;\n}\nexport function updateWeekday(timestamp) {\n timestamp.weekday = getWeekday(timestamp);\n return timestamp;\n}\nexport function updateFormatted(timestamp) {\n timestamp.time = getTime(timestamp);\n timestamp.date = getDate(timestamp);\n return timestamp;\n}\nexport function getWeekday(timestamp) {\n if (timestamp.hasDay) {\n const _ = Math.floor;\n const k = timestamp.day;\n const m = (timestamp.month + 9) % MONTH_MAX + 1;\n\n const C = _(timestamp.year / 100);\n\n const Y = timestamp.year % 100 - (timestamp.month <= 2 ? 1 : 0);\n return ((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7 + 7) % 7;\n }\n\n return timestamp.weekday;\n}\nexport function daysInMonth(year, month) {\n return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month];\n}\nexport function copyTimestamp(timestamp) {\n const {\n date,\n time,\n year,\n month,\n day,\n weekday,\n hour,\n minute,\n hasDay,\n hasTime,\n past,\n present,\n future\n } = timestamp;\n return {\n date,\n time,\n year,\n month,\n day,\n weekday,\n hour,\n minute,\n hasDay,\n hasTime,\n past,\n present,\n future\n };\n}\nexport function padNumber(x, length) {\n let padded = String(x);\n\n while (padded.length < length) {\n padded = '0' + padded;\n }\n\n return padded;\n}\nexport function getDate(timestamp) {\n let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`;\n if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`;\n return str;\n}\nexport function getTime(timestamp) {\n if (!timestamp.hasTime) {\n return '';\n }\n\n return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`;\n}\nexport function nextMinutes(timestamp, minutes) {\n timestamp.minute += minutes;\n\n while (timestamp.minute > MINUTES_IN_HOUR) {\n timestamp.minute -= MINUTES_IN_HOUR;\n timestamp.hour++;\n\n if (timestamp.hour >= HOURS_IN_DAY) {\n nextDay(timestamp);\n timestamp.hour = FIRST_HOUR;\n }\n }\n\n return timestamp;\n}\nexport function nextDay(timestamp) {\n timestamp.day++;\n timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK;\n\n if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n timestamp.day = DAY_MIN;\n timestamp.month++;\n\n if (timestamp.month > MONTH_MAX) {\n timestamp.month = MONTH_MIN;\n timestamp.year++;\n }\n }\n\n return timestamp;\n}\nexport function prevDay(timestamp) {\n timestamp.day--;\n timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK;\n\n if (timestamp.day < DAY_MIN) {\n timestamp.month--;\n\n if (timestamp.month < MONTH_MIN) {\n timestamp.year--;\n timestamp.month = MONTH_MAX;\n }\n\n timestamp.day = daysInMonth(timestamp.year, timestamp.month);\n }\n\n return timestamp;\n}\nexport function relativeDays(timestamp, mover = nextDay, days = 1) {\n while (--days >= 0) mover(timestamp);\n\n return timestamp;\n}\nexport function diffMinutes(min, max) {\n const Y = (max.year - min.year) * 525600;\n const M = (max.month - min.month) * 43800;\n const D = (max.day - min.day) * 1440;\n const h = (max.hour - min.hour) * 60;\n const m = max.minute - min.minute;\n return Y + M + D + h + m;\n}\nexport function findWeekday(timestamp, weekday, mover = nextDay, maxDays = 6) {\n while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp);\n\n return timestamp;\n}\nexport function getWeekdaySkips(weekdays) {\n const skips = [1, 1, 1, 1, 1, 1, 1];\n const filled = [0, 0, 0, 0, 0, 0, 0];\n\n for (let i = 0; i < weekdays.length; i++) {\n filled[weekdays[i]] = 1;\n }\n\n for (let k = 0; k < DAYS_IN_WEEK; k++) {\n let skip = 1;\n\n for (let j = 1; j < DAYS_IN_WEEK; j++) {\n const next = (k + j) % DAYS_IN_WEEK;\n\n if (filled[next]) {\n break;\n }\n\n skip++;\n }\n\n skips[k] = filled[k] * skip;\n }\n\n return skips;\n}\nexport function timestampToDate(timestamp) {\n const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`;\n const date = timestamp.date;\n return new Date(`${date}T${time}:00+00:00`);\n}\nexport function createDayList(start, end, now, weekdaySkips, max = 42, min = 0) {\n const stop = getDayIdentifier(end);\n const days = [];\n let current = copyTimestamp(start);\n let currentIdentifier = 0;\n let stopped = currentIdentifier === stop;\n\n if (stop < getDayIdentifier(start)) {\n throw new Error('End date is earlier than start date.');\n }\n\n while ((!stopped || days.length < min) && days.length < max) {\n currentIdentifier = getDayIdentifier(current);\n stopped = stopped || currentIdentifier === stop;\n\n if (weekdaySkips[current.weekday] === 0) {\n current = nextDay(current);\n continue;\n }\n\n const day = copyTimestamp(current);\n updateFormatted(day);\n updateRelative(day, now);\n days.push(day);\n current = relativeDays(current, nextDay, weekdaySkips[current.weekday]);\n }\n\n if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.');\n return days;\n}\nexport function createIntervalList(timestamp, first, minutes, count, now) {\n const intervals = [];\n\n for (let i = 0; i < count; i++) {\n const mins = first + i * minutes;\n const int = copyTimestamp(timestamp);\n intervals.push(updateMinutes(int, mins, now));\n }\n\n return intervals;\n}\nexport function createNativeLocaleFormatter(locale, getOptions) {\n const emptyFormatter = (_t, _s) => '';\n\n if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return emptyFormatter;\n }\n\n return (timestamp, short) => {\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short));\n return intlFormatter.format(timestampToDate(timestamp));\n } catch (e) {\n return '';\n }\n };\n}\n//# sourceMappingURL=timestamp.js.map","import Vue from 'vue';\nimport { validateTimestamp, parseTimestamp, parseDate } from '../util/timestamp';\nexport default Vue.extend({\n name: 'times',\n props: {\n now: {\n type: String,\n validator: validateTimestamp\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 computed: {\n parsedNow() {\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() {\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\n updateTimes() {\n const now = 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\n getNow() {\n return parseDate(new Date());\n },\n\n updateDay(now, target) {\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\n updateTime(now, target) {\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});\n//# sourceMappingURL=times.js.map","import { getTimestampIdentifier } from '../util/timestamp';\nconst MILLIS_IN_DAY = 86400000;\nexport function getVisuals(events, minStart = 0) {\n const visuals = events.map(event => ({\n event,\n columnCount: 0,\n column: 0,\n left: 0,\n width: 100\n }));\n visuals.sort((a, b) => {\n return Math.max(minStart, a.event.startTimestampIdentifier) - Math.max(minStart, b.event.startTimestampIdentifier) || b.event.endTimestampIdentifier - a.event.endTimestampIdentifier;\n });\n return visuals;\n}\nexport function hasOverlap(s0, e0, s1, e1, exclude = true) {\n return exclude ? !(s0 >= e1 || e0 <= s1) : !(s0 > e1 || e0 < s1);\n}\nexport function setColumnCount(groups) {\n groups.forEach(group => {\n group.visuals.forEach(groupVisual => {\n groupVisual.columnCount = groups.length;\n });\n });\n}\nexport function getRange(event) {\n return [event.startTimestampIdentifier, event.endTimestampIdentifier];\n}\nexport function getDayRange(event) {\n return [event.startIdentifier, event.endIdentifier];\n}\nexport function getNormalizedRange(event, dayStart) {\n return [Math.max(dayStart, event.startTimestampIdentifier), Math.min(dayStart + MILLIS_IN_DAY, event.endTimestampIdentifier)];\n}\nexport function getOpenGroup(groups, start, end, timed) {\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}\nexport function getOverlapGroupHandler(firstWeekday) {\n const handler = {\n groups: [],\n min: -1,\n max: -1,\n reset: () => {\n handler.groups = [];\n handler.min = handler.max = -1;\n },\n getVisuals: (day, dayEvents, timed, 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 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 handler.groups.push({\n start,\n end,\n visuals: []\n });\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 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 setColumnCount(handler.groups);\n\n if (timed) {\n handler.reset();\n }\n\n return visuals;\n }\n };\n return handler;\n}\n//# sourceMappingURL=common.js.map","import { getOverlapGroupHandler, getVisuals, hasOverlap, getNormalizedRange } from './common';\nimport { getTimestampIdentifier } from '../util/timestamp';\nconst FULL_WIDTH = 100;\nconst DEFAULT_OFFSET = 5;\nconst WIDTH_MULTIPLIER = 1.7;\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 = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday); // eslint-disable-next-line max-statements\n\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 = [];\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\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 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\n if (grandNext && child.sibling && 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 return visuals;\n };\n};\n\nfunction calculateBounds(nodes, overlapThreshold) {\n for (const node of nodes) {\n const {\n visual,\n parent\n } = 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 ? spaceLeft + columnOffset : spaceLeft + offset;\n }\n\n visual.width = hasFullWidth(node, nodes, overlapThreshold) ? FULL_WIDTH - visual.left : Math.min(FULL_WIDTH - visual.left, columnWidth * WIDTH_MULTIPLIER);\n }\n}\n\nfunction getColumnWidthMultiplier(node, nodes) {\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 return minColumn - node.index;\n}\n\nfunction getOverlappingIndices(node, nodes) {\n const indices = [];\n\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\n return indices;\n}\n\nfunction getNextIndex(node, nodes) {\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\n return false;\n}\n\nfunction getOverlappingRange(node, nodes, indexMin, indexMax, returnFirstColumn = false) {\n const overlapping = [];\n\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\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\n return overlapping;\n}\n\nfunction getParent(node, nodes) {\n let parent = null;\n\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\n return parent;\n}\n\nfunction hasFullWidth(node, nodes, overlapThreshold) {\n for (const other of nodes) {\n if (other !== node && other.index > node.index && 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, dayStart) {\n const groups = [];\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({\n start,\n end,\n visuals: [visual]\n });\n }\n }\n\n return groups;\n}\n\nfunction getNode(visual, dayStart) {\n const [start, end] = getNormalizedRange(visual.event, dayStart);\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) {\n let max = node.index;\n\n for (const child of node.children) {\n const childMax = getMaxChildIndex(child);\n\n if (childMax > max) {\n max = childMax;\n }\n }\n\n return max;\n}\n\nfunction addTime(identifier, minutes) {\n const removeMinutes = identifier % 100;\n const totalMinutes = removeMinutes + minutes;\n const addHours = Math.floor(totalMinutes / 60);\n const addMinutes = totalMinutes % 60;\n return identifier - removeMinutes + addHours * 100 + addMinutes;\n}\n//# sourceMappingURL=stack.js.map","import { getOverlapGroupHandler } from './common';\nconst FULL_WIDTH = 100;\nexport const column = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday);\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//# sourceMappingURL=column.js.map","import { stack } from './stack';\nimport { column } from './column';\nexport const CalendarEventOverlapModes = {\n stack,\n column\n};\n//# sourceMappingURL=index.js.map","import { validateTimestamp, parseDate, DAYS_IN_WEEK, validateTime } from './timestamp';\nimport { CalendarEventOverlapModes } from '../modes';\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],\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,\n default: null\n },\n dayFormat: {\n type: Function,\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,\n default: null\n },\n intervalStyle: {\n type: Function,\n default: null\n },\n showIntervalLabel: {\n type: Function,\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,\n default: null\n }\n },\n calendar: {\n type: {\n type: String,\n default: 'month'\n },\n value: {\n type: [String, Number, Date],\n validate: validateTimestamp\n }\n },\n category: {\n categories: {\n type: [Array, String],\n default: ''\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 => isFinite(parseInt(x)) && parseInt(x) > 0\n }\n },\n events: {\n events: {\n type: Array,\n default: () => []\n },\n eventStart: {\n type: String,\n default: 'start'\n },\n eventEnd: {\n type: String,\n default: 'end'\n },\n eventTimed: {\n type: [String, Function],\n default: 'timed'\n },\n eventCategory: {\n type: [String, Function],\n default: 'category'\n },\n eventHeight: {\n type: Number,\n default: 20\n },\n eventColor: {\n type: [String, Function],\n default: 'primary'\n },\n eventTextColor: {\n type: [String, Function],\n default: 'white'\n },\n eventName: {\n type: [String, Function],\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 => mode in CalendarEventOverlapModes || typeof mode === 'function'\n },\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};\nexport function validateNumber(input) {\n return isFinite(parseInt(input));\n}\nexport function validateWeekdays(input) {\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 = {};\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\n if (d < 0) {\n if (wrapped) {\n return false;\n }\n\n wrapped = true;\n } else if (d === 0) {\n return false;\n }\n }\n\n if (visited[x]) {\n return false;\n }\n\n visited[x] = true;\n }\n\n return true;\n }\n\n return false;\n}\n//# sourceMappingURL=props.js.map","// Mixins\nimport mixins from '../../../util/mixins';\nimport Colorable from '../../../mixins/colorable';\nimport Localable from '../../../mixins/localable';\nimport Mouse from './mouse';\nimport Themeable from '../../../mixins/themeable';\nimport Times from './times'; // Directives\n\nimport Resize from '../../../directives/resize'; // Util\n\nimport props from '../util/props';\nimport { parseTimestamp, getWeekdaySkips, createDayList, createNativeLocaleFormatter, getStartOfWeek, getEndOfWeek, getTimestampIdentifier } from '../util/timestamp';\nexport default mixins(Colorable, Localable, Mouse, Themeable, Times\n/* @vue/component */\n).extend({\n name: 'calendar-base',\n directives: {\n Resize\n },\n props: props.base,\n computed: {\n parsedWeekdays() {\n return Array.isArray(this.weekdays) ? this.weekdays : (this.weekdays || '').split(',').map(x => parseInt(x, 10));\n },\n\n weekdaySkips() {\n return getWeekdaySkips(this.parsedWeekdays);\n },\n\n weekdaySkipsReverse() {\n const reversed = this.weekdaySkips.slice();\n reversed.reverse();\n return reversed;\n },\n\n parsedStart() {\n return parseTimestamp(this.start, true);\n },\n\n parsedEnd() {\n const start = this.parsedStart;\n const end = this.end ? parseTimestamp(this.end) || start : start;\n return getTimestampIdentifier(end) < getTimestampIdentifier(start) ? start : end;\n },\n\n days() {\n return createDayList(this.parsedStart, this.parsedEnd, this.times.today, this.weekdaySkips);\n },\n\n dayFormatter() {\n if (this.dayFormat) {\n return this.dayFormat;\n }\n\n const options = {\n timeZone: 'UTC',\n day: 'numeric'\n };\n return createNativeLocaleFormatter(this.currentLocale, (_tms, _short) => options);\n },\n\n weekdayFormatter() {\n if (this.weekdayFormat) {\n return this.weekdayFormat;\n }\n\n const longOptions = {\n timeZone: 'UTC',\n weekday: 'long'\n };\n const shortOptions = {\n timeZone: 'UTC',\n weekday: 'short'\n };\n return createNativeLocaleFormatter(this.currentLocale, (_tms, short) => short ? shortOptions : longOptions);\n }\n\n },\n methods: {\n getRelativeClasses(timestamp, outside = false) {\n return {\n 'v-present': timestamp.present,\n 'v-past': timestamp.past,\n 'v-future': timestamp.future,\n 'v-outside': outside\n };\n },\n\n getStartOfWeek(timestamp) {\n return getStartOfWeek(timestamp, this.parsedWeekdays, this.times.today);\n },\n\n getEndOfWeek(timestamp) {\n return getEndOfWeek(timestamp, this.parsedWeekdays, this.times.today);\n },\n\n getFormatter(options) {\n return createNativeLocaleFormatter(this.locale, (_tms, _short) => options);\n }\n\n }\n});\n//# sourceMappingURL=calendar-base.js.map","import { parseTimestamp, getDayIdentifier, getTimestampIdentifier, OFFSET_TIME, isTimedless, updateHasTime } from './timestamp';\nexport function parseEvent(input, index, startProperty, endProperty, timed = false, category = false) {\n const startInput = input[startProperty];\n const endInput = input[endProperty];\n const startParsed = parseTimestamp(startInput, true);\n const endParsed = endInput ? parseTimestamp(endInput, true) : startParsed;\n const start = isTimedless(startInput) ? updateHasTime(startParsed, timed) : startParsed;\n const end = isTimedless(endInput) ? updateHasTime(endParsed, timed) : endParsed;\n const startIdentifier = getDayIdentifier(start);\n const startTimestampIdentifier = getTimestampIdentifier(start);\n const endIdentifier = getDayIdentifier(end);\n const endOffset = start.hasTime ? 0 : 2359;\n const endTimestampIdentifier = getTimestampIdentifier(end) + endOffset;\n const allDay = !start.hasTime;\n return {\n input,\n start,\n startIdentifier,\n startTimestampIdentifier,\n end,\n endIdentifier,\n endTimestampIdentifier,\n allDay,\n index,\n category\n };\n}\nexport function isEventOn(event, dayIdentifier) {\n return dayIdentifier >= event.startIdentifier && dayIdentifier <= event.endIdentifier && dayIdentifier * OFFSET_TIME !== event.endTimestampIdentifier;\n}\nexport function isEventStart(event, day, dayIdentifier, firstWeekday) {\n return dayIdentifier === event.startIdentifier || firstWeekday === day.weekday && isEventOn(event, dayIdentifier);\n}\nexport function isEventOverlapping(event, startIdentifier, endIdentifier) {\n return startIdentifier <= event.endIdentifier && endIdentifier >= event.startIdentifier;\n}\n//# sourceMappingURL=events.js.map","// Styles\nimport \"../../../../src/components/VCalendar/mixins/calendar-with-events.sass\"; // Directives\n\nimport ripple from '../../../directives/ripple'; // Mixins\n\nimport CalendarBase from './calendar-base'; // Helpers\n\nimport { escapeHTML } from '../../../util/helpers'; // Util\n\nimport props from '../util/props';\nimport { CalendarEventOverlapModes } from '../modes';\nimport { getDayIdentifier, diffMinutes } from '../util/timestamp';\nimport { parseEvent, isEventStart, isEventOn, isEventOverlapping } from '../util/events';\nconst WIDTH_FULL = 100;\nconst WIDTH_START = 95;\nconst MINUTES_IN_DAY = 1440;\n/* @vue/component */\n\nexport default CalendarBase.extend({\n name: 'calendar-with-events',\n directives: {\n ripple\n },\n props: props.events,\n computed: {\n noEvents() {\n return this.events.length === 0;\n },\n\n parsedEvents() {\n return this.events.map(this.parseEvent);\n },\n\n parsedEventOverlapThreshold() {\n return parseInt(this.eventOverlapThreshold);\n },\n\n eventColorFunction() {\n return typeof this.eventColor === 'function' ? this.eventColor : () => this.eventColor;\n },\n\n eventTimedFunction() {\n return typeof this.eventTimed === 'function' ? this.eventTimed : event => !!event[this.eventTimed];\n },\n\n eventCategoryFunction() {\n return typeof this.eventCategory === 'function' ? this.eventCategory : event => event[this.eventCategory];\n },\n\n eventTextColorFunction() {\n return typeof this.eventTextColor === 'function' ? this.eventTextColor : () => this.eventTextColor;\n },\n\n eventNameFunction() {\n return typeof this.eventName === 'function' ? this.eventName : (event, timedEvent) => escapeHTML(event.input[this.eventName]);\n },\n\n eventModeFunction() {\n return typeof this.eventOverlapMode === 'function' ? this.eventOverlapMode : CalendarEventOverlapModes[this.eventOverlapMode];\n },\n\n eventWeekdays() {\n return this.parsedWeekdays;\n },\n\n categoryMode() {\n return false;\n }\n\n },\n methods: {\n parseEvent(input, index = 0) {\n return parseEvent(input, index, this.eventStart, this.eventEnd, this.eventTimedFunction(input), this.categoryMode ? this.eventCategoryFunction(input) : false);\n },\n\n formatTime(withTime, ampm) {\n const formatter = this.getFormatter({\n timeZone: 'UTC',\n hour: 'numeric',\n minute: withTime.minute > 0 ? 'numeric' : undefined\n });\n return formatter(withTime, true);\n },\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 {\n parent,\n events,\n more\n } = eventsMap[date];\n\n if (!more) {\n break;\n }\n\n const parentBounds = parent.getBoundingClientRect();\n const last = events.length - 1;\n let hide = false;\n let hidden = 0;\n\n for (let i = 0; i <= last; i++) {\n if (!hide) {\n const eventBounds = events[i].getBoundingClientRect();\n hide = i === last ? eventBounds.bottom > parentBounds.bottom : eventBounds.bottom + eventHeight > parentBounds.bottom;\n }\n\n if (hide) {\n events[i].style.display = 'none';\n hidden++;\n }\n }\n\n if (hide) {\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\n getEventsMap() {\n const eventsMap = {};\n const elements = this.$refs.events;\n\n if (!elements || !elements.forEach) {\n return eventsMap;\n }\n\n elements.forEach(el => {\n const date = el.getAttribute('data-date');\n\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\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 return eventsMap;\n },\n\n genDayEvent({\n event\n }, day) {\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\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\n const scope = {\n eventParsed: event,\n day,\n start,\n end,\n 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\n genTimedEvent({\n event,\n left,\n width\n }, day) {\n if (day.timeDelta(event.end) <= 0 || day.timeDelta(event.start) >= 1) {\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 = {\n eventParsed: event,\n day,\n start,\n end,\n 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\n genEvent(event, scopeInput, timedEvent, data) {\n var _this$eventRipple;\n\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\n const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true);\n\n const eventSummary = () => {\n const name = this.eventNameFunction(event, timedEvent);\n\n if (event.start.hasTime) {\n if (timedEvent) {\n const time = timeSummary();\n const delimiter = singline ? ', ' : '
';\n return `${name}${delimiter}${time}`;\n } else {\n const time = formatTime(event.start, true);\n return `${time} ${name}`;\n }\n }\n\n return name;\n };\n\n const scope = { ...scopeInput,\n event: event.input,\n outside: scopeInput.day.outside,\n singline,\n overlapsNoon,\n formatTime,\n timeSummary,\n eventSummary\n };\n return this.$createElement('div', this.setTextColor(text, this.setBackgroundColor(background, {\n on: this.getDefaultMouseEventHandlers(':event', nativeEvent => ({ ...scope,\n nativeEvent\n })),\n directives: [{\n name: 'ripple',\n value: (_this$eventRipple = this.eventRipple) != null ? _this$eventRipple : true\n }],\n ...data\n })), slot ? slot(scope) : [this.genName(eventSummary)]);\n },\n\n genName(eventSummary) {\n return this.$createElement('div', {\n staticClass: 'pl-1',\n domProps: {\n innerHTML: eventSummary()\n }\n });\n },\n\n genPlaceholder(day) {\n const height = this.eventHeight + this.eventMarginBottom;\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\n genMore(day) {\n var _this$eventRipple2;\n\n const eventHeight = this.eventHeight;\n const eventMarginBottom = this.eventMarginBottom;\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$eventRipple2 = this.eventRipple) != null ? _this$eventRipple2 : true\n }],\n on: {\n click: () => this.$emit('click:more', day)\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\n getVisibleEvents() {\n const start = getDayIdentifier(this.days[0]);\n const end = getDayIdentifier(this.days[this.days.length - 1]);\n return this.parsedEvents.filter(event => isEventOverlapping(event, start, end));\n },\n\n isEventForCategory(event, category) {\n return !this.categoryMode || category === event.category || typeof event.category !== 'string' && category === null;\n },\n\n getEventsForDay(day) {\n const identifier = getDayIdentifier(day);\n const firstWeekday = this.eventWeekdays[0];\n return this.parsedEvents.filter(event => isEventStart(event, day, identifier, firstWeekday));\n },\n\n getEventsForDayAll(day) {\n const identifier = getDayIdentifier(day);\n const firstWeekday = this.eventWeekdays[0];\n return this.parsedEvents.filter(event => event.allDay && (this.categoryMode ? isEventOn(event, identifier) : isEventStart(event, day, identifier, firstWeekday)) && this.isEventForCategory(event, day.category));\n },\n\n getEventsForDayTimed(day) {\n const identifier = getDayIdentifier(day);\n return this.parsedEvents.filter(event => !event.allDay && isEventOn(event, identifier) && this.isEventForCategory(event, day.category));\n },\n\n getScopedSlots() {\n if (this.noEvents) {\n return { ...this.$scopedSlots\n };\n }\n\n const mode = this.eventModeFunction(this.parsedEvents, this.eventWeekdays[0], this.parsedEventOverlapThreshold);\n\n const isNode = input => !!input;\n\n const getSlotChildren = (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 = [];\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\n if (mapped) {\n children.push(mapped);\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 return { ...slots,\n day: day => {\n let children = getSlotChildren(day, this.getEventsForDay, this.genDayEvent, false);\n\n if (children && children.length > 0 && this.eventMore) {\n children.push(this.genMore(day));\n }\n\n if (slotDay) {\n const slot = slotDay(day);\n\n if (slot) {\n children = children ? children.concat(slot) : slot;\n }\n }\n\n return children;\n },\n 'day-header': day => {\n let children = getSlotChildren(day, this.getEventsForDayAll, this.genDayEvent, false);\n\n if (slotDayHeader) {\n const slot = slotDayHeader(day);\n\n if (slot) {\n children = children ? children.concat(slot) : slot;\n }\n }\n\n return children;\n },\n 'day-body': day => {\n const events = getSlotChildren(day, this.getEventsForDayTimed, this.genTimedEvent, true);\n let children = [this.$createElement('div', {\n staticClass: 'v-event-timed-container'\n }, events)];\n\n if (slotDayBody) {\n const slot = slotDayBody(day);\n\n if (slot) {\n children = children.concat(slot);\n }\n }\n\n return children;\n }\n };\n }\n\n }\n});\n//# sourceMappingURL=calendar-with-events.js.map","// Styles\nimport \"../../../src/components/VCalendar/VCalendarWeekly.sass\"; // Components\n\nimport VBtn from '../VBtn'; // Mixins\n\nimport CalendarBase from './mixins/calendar-base'; // Util\n\nimport { getSlot } from '../../util/helpers';\nimport { weekNumber } from '../../util/dateTimeUtils';\nimport props from './util/props';\nimport { createDayList, getDayIdentifier, createNativeLocaleFormatter } from './util/timestamp';\n/* @vue/component */\n\nexport default CalendarBase.extend({\n name: 'v-calendar-weekly',\n props: props.weeks,\n computed: {\n staticClass() {\n return 'v-calendar-weekly';\n },\n\n classes() {\n return this.themeClasses;\n },\n\n parsedMinWeeks() {\n return parseInt(this.minWeeks);\n },\n\n days() {\n const minDays = this.parsedMinWeeks * this.parsedWeekdays.length;\n const start = this.getStartOfWeek(this.parsedStart);\n const end = this.getEndOfWeek(this.parsedEnd);\n return createDayList(start, end, this.times.today, this.weekdaySkips, Number.MAX_SAFE_INTEGER, minDays);\n },\n\n todayWeek() {\n const today = this.times.today;\n const start = this.getStartOfWeek(today);\n const end = this.getEndOfWeek(today);\n return createDayList(start, end, today, this.weekdaySkips, this.parsedWeekdays.length, this.parsedWeekdays.length);\n },\n\n monthFormatter() {\n if (this.monthFormat) {\n return this.monthFormat;\n }\n\n const longOptions = {\n timeZone: 'UTC',\n month: 'long'\n };\n const shortOptions = {\n timeZone: 'UTC',\n month: 'short'\n };\n return createNativeLocaleFormatter(this.currentLocale, (_tms, short) => short ? shortOptions : longOptions);\n }\n\n },\n methods: {\n isOutside(day) {\n const dayIdentifier = getDayIdentifier(day);\n return dayIdentifier < getDayIdentifier(this.parsedStart) || dayIdentifier > getDayIdentifier(this.parsedEnd);\n },\n\n genHead() {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head'\n }, this.genHeadDays());\n },\n\n genHeadDays() {\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\n genHeadDay(day, index) {\n const outside = this.isOutside(this.days[index]);\n const color = day.present ? this.color : undefined;\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 }), this.weekdayFormatter(day, this.shortWeekdays));\n },\n\n genWeeks() {\n const days = this.days;\n const weekDays = this.parsedWeekdays.length;\n const weeks = [];\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\n genWeek(week, weekNumber) {\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 }, weekNodes);\n },\n\n getWeekNumber(determineDay) {\n return weekNumber(determineDay.year, determineDay.month - 1, determineDay.day, this.parsedWeekdays[0], parseInt(this.localeFirstDayOfYear));\n },\n\n genWeekNumber(weekNumber) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__weeknumber'\n }, [this.$createElement('small', String(weekNumber))]);\n },\n\n genDay(day, index, week) {\n const outside = this.isOutside(day);\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-weekly__day',\n class: this.getRelativeClasses(day, outside),\n on: this.getDefaultMouseEventHandlers(':day', _e => day)\n }, [this.genDayLabel(day), ...(getSlot(this, 'day', () => ({\n outside,\n index,\n week,\n ...day\n })) || [])]);\n },\n\n genDayLabel(day) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__day-label'\n }, getSlot(this, 'day-label', day) || [this.genDayLabelButton(day)]);\n },\n\n genDayLabelButton(day) {\n const color = day.present ? this.color : 'transparent';\n const hasMonth = day.day === 1 && this.showMonthOnFirst;\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': {\n event: 'click',\n stop: true\n },\n 'contextmenu:date': {\n event: 'contextmenu',\n stop: true,\n prevent: true,\n result: false\n }\n }, _e => day)\n }, hasMonth ? this.monthFormatter(day, this.shortMonths) + ' ' + this.dayFormatter(day, false) : this.dayFormatter(day, false));\n },\n\n genDayMonth(day) {\n const color = day.present ? this.color : undefined;\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\n render(h) {\n return h('div', {\n staticClass: this.staticClass,\n class: this.classes,\n on: {\n dragstart: e => {\n e.preventDefault();\n }\n }\n }, [!this.hideHeader ? this.genHead() : '', ...this.genWeeks()]);\n }\n\n});\n//# sourceMappingURL=VCalendarWeekly.js.map","// Styles\nimport \"../../../src/components/VCalendar/VCalendarWeekly.sass\"; // Mixins\n\nimport VCalendarWeekly from './VCalendarWeekly'; // Util\n\nimport { parseTimestamp, getStartOfMonth, getEndOfMonth } from './util/timestamp';\n/* @vue/component */\n\nexport default VCalendarWeekly.extend({\n name: 'v-calendar-monthly',\n computed: {\n staticClass() {\n return 'v-calendar-monthly v-calendar-weekly';\n },\n\n parsedStart() {\n return getStartOfMonth(parseTimestamp(this.start, true));\n },\n\n parsedEnd() {\n return getEndOfMonth(parseTimestamp(this.end, true));\n }\n\n }\n});\n//# sourceMappingURL=VCalendarMonthly.js.map","// Mixins\nimport CalendarBase from './calendar-base'; // Util\n\nimport props from '../util/props';\nimport { parseTime, copyTimestamp, updateMinutes, createDayList, createIntervalList, createNativeLocaleFormatter, MINUTES_IN_DAY } from '../util/timestamp';\n/* @vue/component */\n\nexport default CalendarBase.extend({\n name: 'calendar-with-intervals',\n props: props.intervals,\n computed: {\n parsedFirstInterval() {\n return parseInt(this.firstInterval);\n },\n\n parsedIntervalMinutes() {\n return parseInt(this.intervalMinutes);\n },\n\n parsedIntervalCount() {\n return parseInt(this.intervalCount);\n },\n\n parsedIntervalHeight() {\n return parseFloat(this.intervalHeight);\n },\n\n parsedFirstTime() {\n return parseTime(this.firstTime);\n },\n\n firstMinute() {\n const time = this.parsedFirstTime;\n return time !== false && time >= 0 && time <= MINUTES_IN_DAY ? time : this.parsedFirstInterval * this.parsedIntervalMinutes;\n },\n\n bodyHeight() {\n return this.parsedIntervalCount * this.parsedIntervalHeight;\n },\n\n days() {\n return createDayList(this.parsedStart, this.parsedEnd, this.times.today, this.weekdaySkips, this.maxDays);\n },\n\n intervals() {\n const days = this.days;\n const first = this.firstMinute;\n const minutes = this.parsedIntervalMinutes;\n const count = this.parsedIntervalCount;\n const now = this.times.now;\n return days.map(d => createIntervalList(d, first, minutes, count, now));\n },\n\n intervalFormatter() {\n if (this.intervalFormat) {\n return this.intervalFormat;\n }\n\n const longOptions = {\n timeZone: 'UTC',\n hour: '2-digit',\n minute: '2-digit'\n };\n const shortOptions = {\n timeZone: 'UTC',\n hour: 'numeric',\n minute: '2-digit'\n };\n const shortHourOptions = {\n timeZone: 'UTC',\n hour: 'numeric'\n };\n return createNativeLocaleFormatter(this.currentLocale, (tms, short) => short ? tms.minute === 0 ? shortHourOptions : shortOptions : longOptions);\n }\n\n },\n methods: {\n showIntervalLabelDefault(interval) {\n const first = this.intervals[0][0];\n const isFirst = first.hour === interval.hour && first.minute === interval.minute;\n return !isFirst;\n },\n\n intervalStyleDefault(_interval) {\n return undefined;\n },\n\n getTimestampAtEvent(e, day) {\n const timestamp = copyTimestamp(day);\n const bounds = e.currentTarget.getBoundingClientRect();\n const baseMinutes = this.firstMinute;\n const touchEvent = e;\n const mouseEvent = e;\n const touches = touchEvent.changedTouches || touchEvent.touches;\n const clientY = touches && touches[0] ? touches[0].clientY : mouseEvent.clientY;\n const addIntervals = (clientY - bounds.top) / this.parsedIntervalHeight;\n const addMinutes = Math.floor(addIntervals * this.parsedIntervalMinutes);\n const minutes = baseMinutes + addMinutes;\n return updateMinutes(timestamp, minutes, this.times.now);\n },\n\n getSlotScope(timestamp) {\n const scope = copyTimestamp(timestamp);\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\n scrollToTime(time) {\n const y = this.timeToY(time);\n const pane = this.$refs.scrollArea;\n\n if (y === false || !pane) {\n return false;\n }\n\n pane.scrollTop = y;\n return true;\n },\n\n minutesToPixels(minutes) {\n return minutes / this.parsedIntervalMinutes * this.parsedIntervalHeight;\n },\n\n timeToY(time, clamp = true) {\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\n if (y > this.bodyHeight) {\n y = this.bodyHeight;\n }\n }\n }\n\n return y;\n },\n\n timeDelta(time) {\n const minutes = parseTime(time);\n\n if (minutes === false) {\n return false;\n }\n\n const min = this.firstMinute;\n const gap = this.parsedIntervalCount * this.parsedIntervalMinutes;\n return (minutes - min) / gap;\n }\n\n }\n});\n//# sourceMappingURL=calendar-with-intervals.js.map","// Styles\nimport \"../../../src/components/VCalendar/VCalendarDaily.sass\"; // Directives\n\nimport Resize from '../../directives/resize'; // Components\n\nimport VBtn from '../VBtn'; // Mixins\n\nimport CalendarWithIntervals from './mixins/calendar-with-intervals'; // Util\n\nimport { convertToUnit, getSlot } from '../../util/helpers';\n/* @vue/component */\n\nexport default CalendarWithIntervals.extend({\n name: 'v-calendar-daily',\n directives: {\n Resize\n },\n data: () => ({\n scrollPush: 0\n }),\n computed: {\n classes() {\n return {\n 'v-calendar-daily': true,\n ...this.themeClasses\n };\n }\n\n },\n\n mounted() {\n this.init();\n },\n\n methods: {\n init() {\n this.$nextTick(this.onResize);\n },\n\n onResize() {\n this.scrollPush = this.getScrollPush();\n },\n\n getScrollPush() {\n const area = this.$refs.scrollArea;\n const pane = this.$refs.pane;\n return area && pane ? area.offsetWidth - pane.offsetWidth : 0;\n },\n\n genHead() {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__head',\n style: {\n marginRight: this.scrollPush + 'px'\n }\n }, [this.genHeadIntervals(), ...this.genHeadDays()]);\n },\n\n genHeadIntervals() {\n const width = convertToUnit(this.intervalWidth);\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__intervals-head',\n style: {\n width\n }\n }, getSlot(this, 'interval-header'));\n },\n\n genHeadDays() {\n return this.days.map(this.genHeadDay);\n },\n\n genHeadDay(day, index) {\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', _e => {\n return this.getSlotScope(day);\n })\n }, [this.genHeadWeekday(day), this.genHeadDayLabel(day), ...this.genDayHeader(day, index)]);\n },\n\n genDayHeader(day, index) {\n return getSlot(this, 'day-header', () => ({\n week: this.days,\n ...day,\n index\n })) || [];\n },\n\n genHeadWeekday(day) {\n const color = day.present ? this.color : undefined;\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-daily_head-weekday'\n }), this.weekdayFormatter(day, this.shortWeekdays));\n },\n\n genHeadDayLabel(day) {\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\n genHeadDayButton(day) {\n const color = day.present ? this.color : 'transparent';\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true\n },\n on: this.getMouseEventHandlers({\n 'click:date': {\n event: 'click',\n stop: true\n },\n 'contextmenu:date': {\n event: 'contextmenu',\n stop: true,\n prevent: true,\n result: false\n }\n }, _e => {\n return day;\n })\n }, this.dayFormatter(day, false));\n },\n\n genBody() {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__body'\n }, [this.genScrollArea()]);\n },\n\n genScrollArea() {\n return this.$createElement('div', {\n ref: 'scrollArea',\n staticClass: 'v-calendar-daily__scroll-area'\n }, [this.genPane()]);\n },\n\n genPane() {\n return this.$createElement('div', {\n ref: 'pane',\n staticClass: 'v-calendar-daily__pane',\n style: {\n height: convertToUnit(this.bodyHeight)\n }\n }, [this.genDayContainer()]);\n },\n\n genDayContainer() {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__day-container'\n }, [this.genBodyIntervals(), ...this.genDays()]);\n },\n\n genDays() {\n return this.days.map(this.genDay);\n },\n\n genDay(day, index) {\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', e => {\n return this.getSlotScope(this.getTimestampAtEvent(e, day));\n })\n }, [...this.genDayIntervals(index), ...this.genDayBody(day)]);\n },\n\n genDayBody(day) {\n return getSlot(this, 'day-body', () => this.getSlotScope(day)) || [];\n },\n\n genDayIntervals(index) {\n return this.intervals[index].map(this.genDayInterval);\n },\n\n genDayInterval(interval) {\n const height = convertToUnit(this.intervalHeight);\n const styler = this.intervalStyle || this.intervalStyleDefault;\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler(interval)\n }\n };\n const children = getSlot(this, 'interval', () => this.getSlotScope(interval));\n return this.$createElement('div', data, children);\n },\n\n genBodyIntervals() {\n const width = convertToUnit(this.intervalWidth);\n const data = {\n staticClass: 'v-calendar-daily__intervals-body',\n style: {\n width\n },\n on: this.getDefaultMouseEventHandlers(':interval', e => {\n return this.getTimestampAtEvent(e, this.parsedStart);\n })\n };\n return this.$createElement('div', data, this.genIntervalLabels());\n },\n\n genIntervalLabels() {\n if (!this.intervals.length) return null;\n return this.intervals[0].map(this.genIntervalLabel);\n },\n\n genIntervalLabel(interval) {\n const height = convertToUnit(this.intervalHeight);\n const short = this.shortIntervals;\n const shower = this.showIntervalLabel || this.showIntervalLabelDefault;\n const show = shower(interval);\n const label = show ? this.intervalFormatter(interval, short) : undefined;\n return this.$createElement('div', {\n key: interval.time,\n staticClass: 'v-calendar-daily__interval',\n style: {\n height\n }\n }, [this.$createElement('div', {\n staticClass: 'v-calendar-daily__interval-text'\n }, label)]);\n }\n\n },\n\n render(h) {\n return h('div', {\n class: this.classes,\n on: {\n dragstart: e => {\n e.preventDefault();\n }\n },\n directives: [{\n modifiers: {\n quiet: true\n },\n name: 'resize',\n value: this.onResize\n }]\n }, [!this.hideHeader ? this.genHead() : '', this.genBody()]);\n }\n\n});\n//# sourceMappingURL=VCalendarDaily.js.map","// Styles\nimport \"../../../src/components/VCalendar/VCalendarCategory.sass\"; // Mixins\n\nimport VCalendarDaily from './VCalendarDaily'; // Util\n\nimport { getSlot } from '../../util/helpers';\nimport props from './util/props';\n/* @vue/component */\n\nexport default VCalendarDaily.extend({\n name: 'v-calendar-category',\n props: props.category,\n computed: {\n classes() {\n return {\n 'v-calendar-daily': true,\n 'v-calendar-category': true,\n ...this.themeClasses\n };\n },\n\n parsedCategories() {\n return typeof this.categories === 'string' && this.categories ? this.categories.split(/\\s*,\\s*/) : Array.isArray(this.categories) ? this.categories : [];\n }\n\n },\n methods: {\n genDayHeader(day, index) {\n const data = {\n staticClass: 'v-calendar-category__columns'\n };\n const scope = {\n week: this.days,\n ...day,\n index\n };\n const children = this.parsedCategories.map(category => this.genDayHeaderCategory(day, this.getCategoryScope(scope, category)));\n return [this.$createElement('div', data, children)];\n },\n\n getCategoryScope(scope, category) {\n return { ...scope,\n category: category === this.categoryForInvalid ? null : category\n };\n },\n\n genDayHeaderCategory(day, scope) {\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 }, [getSlot(this, 'category', scope) || this.genDayHeaderCategoryTitle(scope.category), getSlot(this, 'day-header', scope)]);\n },\n\n genDayHeaderCategoryTitle(category) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__category'\n }, category === null ? this.categoryForInvalid : category);\n },\n\n genDayBody(day) {\n const data = {\n staticClass: 'v-calendar-category__columns'\n };\n const children = this.parsedCategories.map(category => this.genDayBodyCategory(day, category));\n return [this.$createElement('div', data, children)];\n },\n\n genDayBodyCategory(day, category) {\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 const children = getSlot(this, 'day-body', () => this.getCategoryScope(this.getSlotScope(day), category));\n return this.$createElement('div', data, children);\n }\n\n }\n});\n//# sourceMappingURL=VCalendarCategory.js.map","// Styles\n// import '../../stylus/components/_calendar-daily.styl'\n// Mixins\nimport CalendarWithEvents from './mixins/calendar-with-events'; // Util\n\nimport props from './util/props';\nimport { DAYS_IN_MONTH_MAX, DAY_MIN, DAYS_IN_WEEK, parseTimestamp, validateTimestamp, relativeDays, nextDay, prevDay, copyTimestamp, updateFormatted, updateWeekday, updateRelative, getStartOfMonth, getEndOfMonth, timestampToDate } from './util/timestamp'; // Calendars\n\nimport VCalendarMonthly from './VCalendarMonthly';\nimport VCalendarDaily from './VCalendarDaily';\nimport VCalendarWeekly from './VCalendarWeekly';\nimport VCalendarCategory from './VCalendarCategory';\n/* @vue/component */\n\nexport default CalendarWithEvents.extend({\n name: 'v-calendar',\n props: { ...props.calendar,\n ...props.weeks,\n ...props.intervals,\n ...props.category\n },\n data: () => ({\n lastStart: null,\n lastEnd: null\n }),\n computed: {\n parsedValue() {\n return validateTimestamp(this.value) ? parseTimestamp(this.value, true) : this.parsedStart || this.times.today;\n },\n\n parsedCategoryDays() {\n return parseInt(this.categoryDays) || 1;\n },\n\n renderProps() {\n const around = this.parsedValue;\n let component = 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\n switch (this.type) {\n case 'month':\n component = VCalendarMonthly;\n start = getStartOfMonth(around);\n end = getEndOfMonth(around);\n break;\n\n case 'week':\n component = VCalendarDaily;\n start = this.getStartOfWeek(around);\n end = this.getEndOfWeek(around);\n maxDays = 7;\n break;\n\n case 'day':\n component = VCalendarDaily;\n maxDays = 1;\n weekdays = [start.weekday];\n break;\n\n case '4day':\n component = VCalendarDaily;\n end = relativeDays(copyTimestamp(end), nextDay, 4);\n updateFormatted(end);\n maxDays = 4;\n weekdays = [start.weekday, (start.weekday + 1) % 7, (start.weekday + 2) % 7, (start.weekday + 3) % 7];\n break;\n\n case 'custom-weekly':\n component = VCalendarWeekly;\n start = this.parsedStart || around;\n end = this.parsedEnd;\n break;\n\n case 'custom-daily':\n component = VCalendarDaily;\n start = this.parsedStart || around;\n end = this.parsedEnd;\n break;\n\n case 'category':\n const days = this.parsedCategoryDays;\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\n default:\n throw new Error(this.type + ' is not a valid Calendar type');\n }\n\n return {\n component,\n start,\n end,\n maxDays,\n weekdays,\n categories\n };\n },\n\n eventWeekdays() {\n return this.renderProps.weekdays;\n },\n\n categoryMode() {\n return this.type === 'category';\n },\n\n title() {\n const {\n start,\n end\n } = 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\n monthLongFormatter() {\n return this.getFormatter({\n timeZone: 'UTC',\n month: 'long'\n });\n },\n\n monthShortFormatter() {\n return this.getFormatter({\n timeZone: 'UTC',\n month: 'short'\n });\n },\n\n parsedCategories() {\n return typeof this.categories === 'string' && this.categories ? this.categories.split(/\\s*,\\s*/) : Array.isArray(this.categories) ? this.categories : [];\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() {\n const {\n lastStart,\n lastEnd\n } = this;\n const {\n start,\n end\n } = this.renderProps;\n\n if (!lastStart || !lastEnd || start.date !== lastStart.date || end.date !== lastEnd.date) {\n this.lastStart = start;\n this.lastEnd = end;\n this.$emit('change', {\n start,\n end\n });\n }\n },\n\n move(amount = 1) {\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\n case 'week':\n relativeDays(moved, mover, DAYS_IN_WEEK);\n break;\n\n case 'day':\n relativeDays(moved, mover, 1);\n break;\n\n case '4day':\n relativeDays(moved, mover, 4);\n break;\n\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\n next(amount = 1) {\n this.move(amount);\n },\n\n prev(amount = 1) {\n this.move(-amount);\n },\n\n timeToY(time, clamp = true) {\n const c = this.$children[0];\n\n if (c && c.timeToY) {\n return c.timeToY(time, clamp);\n } else {\n return false;\n }\n },\n\n timeDelta(time) {\n const c = this.$children[0];\n\n if (c && c.timeDelta) {\n return c.timeDelta(time);\n } else {\n return false;\n }\n },\n\n minutesToPixels(minutes) {\n const c = this.$children[0];\n\n if (c && c.minutesToPixels) {\n return c.minutesToPixels(minutes);\n } else {\n return -1;\n }\n },\n\n scrollToTime(time) {\n const c = this.$children[0];\n\n if (c && c.scrollToTime) {\n return c.scrollToTime(time);\n } else {\n return false;\n }\n },\n\n parseTimestamp(input, required) {\n return parseTimestamp(input, required, this.times.now);\n },\n\n timestampToDate(timestamp) {\n return timestampToDate(timestamp);\n },\n\n getCategoryList(categories) {\n if (!this.noEvents) {\n const categoryMap = categories.reduce((map, category, index) => {\n map[category] = {\n index,\n count: 0\n };\n return map;\n }, Object.create(null));\n\n if (!this.categoryHideDynamic || !this.categoryShowAll) {\n let categoryLength = categories.length;\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 = Object.keys(categoryMap);\n }\n\n return categories;\n }\n\n },\n\n render(h) {\n const {\n start,\n end,\n maxDays,\n component,\n weekdays,\n categories\n } = this.renderProps;\n return h(component, {\n staticClass: 'v-calendar',\n class: {\n 'v-calendar-events': !this.noEvents\n },\n props: { ...this.$props,\n start: start.date,\n end: end.date,\n maxDays,\n weekdays,\n categories\n },\n directives: [{\n modifiers: {\n quiet: true\n },\n name: 'resize',\n value: this.updateEventVisibility\n }],\n on: { ...this.$listeners,\n 'click:date': day => {\n if (this.$listeners['input']) {\n this.$emit('input', day.date);\n }\n\n if (this.$listeners['click:date']) {\n this.$emit('click:date', day);\n }\n }\n },\n scopedSlots: this.getScopedSlots()\n });\n }\n\n});\n//# sourceMappingURL=VCalendar.js.map","import { render, staticRenderFns } from \"./calendar.vue?vue&type=template&id=221e7e5d&\"\nimport script from \"./calendar.vue?vue&type=script&lang=ts&\"\nexport * from \"./calendar.vue?vue&type=script&lang=ts&\"\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\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCalendar } from 'vuetify/lib/components/VCalendar';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSheet } from 'vuetify/lib/components/VSheet';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCalendar,VCard,VCardText,VCardTitle,VCol,VDialog,VForm,VIcon,VRow,VSelect,VSheet,VSpacer,VTextField,VTextarea,VToolbar,VTooltip})\n"],"sourceRoot":""}