{"version":3,"sources":["webpack:///./src/service/EventService.js","webpack:///./node_modules/@fullcalendar/daygrid/main.js","webpack:///./node_modules/@fullcalendar/timegrid/main.js","webpack:///./node_modules/@fullcalendar/interaction/main.js","webpack:///./src/service/CarService.js"],"names":["EventService","axios","get","then","res","data","global","factory","exports","this","core","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","DayGridDateProfileGenerator","_super","buildRenderRange","currentRange","currentRangeUnit","isRangeAllDay","endOfWeek","dateEnv","renderRange","start","end","test","startOfWeek","valueOf","addWeeks","options","monthMode","fixedWeekCount","rowCnt","Math","ceil","diffWeeks","DateProfileGenerator","Popover","_this","isHidden","margin","documentMousedown","ev","el","contains","target","hide","show","render","style","display","position","trigger","createElement","className","top","left","content","parentEl","appendChild","listenBySelector","autoHide","document","addEventListener","destroy","removeElement","removeEventListener","elDims","getBoundingClientRect","origin","computeRect","offsetParent","clippingRect","computeClippingRect","undefined","right","width","min","bottom","height","max","applyStyle","name","slice","SimpleDayGridEventRenderer","renderSegHtml","seg","mirrorInfo","timeText","titleHtml","context","eventRange","eventDef","def","eventUi","ui","allDay","isDraggable","startEditable","isResizableFromStart","isStart","durationEditable","eventResizableFromStart","isResizableFromEnd","isEnd","classes","getSegClasses","skinCss","cssToStr","getSkinCss","timeHtml","unshift","getTimeText","htmlEscape","title","join","url","dir","computeEventTimeFormat","hour","minute","omitZeroMinute","meridiem","computeDisplayEventEnd","FgEventRenderer","DayGridEventRenderer","dayGrid","attachSegs","segs","rowStructs","renderSegRows","rowEls","forEach","rowNode","querySelector","tbodyEl","removeSegPopover","detachSegs","rowStruct","pop","segRows","row","groupSegRows","push","renderSegRow","rowSegs","levelSegs","col","tr","j","td","colCnt","isRtl","segLevels","buildSegLevels","levelCnt","tbody","segMatrix","cellMatrix","loneCellMatrix","emptyCellsUntil","endCol","rowSpan","leftCol","lastCol","firstCol","rightCol","colSpan","introHtml","renderProps","renderIntroHtml","appendToElement","prependToElement","_a","levels","sortEventSegs","isDaySegCollision","level","sort","compareDaySegCols","otherSegs","otherSeg","a","DayGridMirrorRenderer","sourceSeg","skeletonTopEl","skeletonTop","skeletonEl","htmlToElement","DayGridFillRenderer","fillSegTag","renderSegs","type","filter","els","renderFillRow","trEl","startCol","toLowerCase","getElementsByTagName","FillRenderer","DayTile","eventRenderer","DayTileEventRenderer","renderFrame","memoizeRendering","_renderFrame","renderFgEvents","bind","unrender","renderEventSelection","selectByInstanceId","unselectByInstanceId","renderEventDrag","hideByHash","showByHash","renderEventResize","calendar","registerInteractiveComponent","useEventCenter","props","date","fgSegs","eventSelection","eventDragInstances","eventResizeInstances","unregisterInteractiveComponent","theme","format","createFormatter","opt","innerHTML","getClass","getIconClass","segContainerEl","queryHit","positionLeft","positionTop","elWidth","elHeight","component","dateSpan","range","addDays","dayEl","rect","layer","DateComponent","dayTile","_i","segs_1","segs_2","DayBgRow","renderHtml","parts","cells","cell","renderCellHtml","dateProfile","htmlAttrs","reverse","otherAttrs","isDateValid","rangeContainsMarker","activeRange","getDayClasses","formatIso","omitTime","DAY_NUM_FORMAT","day","WEEK_NUM_FORMAT","week","DayGrid","bottomCoordPadding","isCellSizesDirty","fillRenderer","mirrorRenderer","renderCells","_renderCells","_unrenderCells","renderBusinessHours","renderDateSelection","renderBgEvents","_renderEventDrag","_unrenderEventDrag","_renderEventResize","_unrenderEventResize","isRigid","businessHourSegs","dateSelectionSegs","bgEventSegs","fgEventSegs","eventDrag","eventResize","segPopoverTile","updateSegPopoverTile","getCellRange","ownProps","receiveProps","affectedInstances","view","_b","html","renderDayRowHtml","findElements","cellEls","rowPositions","PositionCache","colPositions","publiclyTrigger","toDate","getCellEl","bgRow","renderBgIntroHtml","getIsNumbersVisible","renderNumberTrHtml","getIsDayNumbersVisible","cellWeekNumbersVisible","colWeekNumbersVisible","intro","renderNumberIntroHtml","renderNumberCellsHtml","htmls","renderNumberCellHtml","weekCalcFirstDow","isDayNumberVisible","weekDow","getUTCDay","buildGotoAnchorHtml","updateSize","isResize","buildColPositions","buildRowPositions","computeSizes","assignSizes","build","bottoms","positionToHit","leftPosition","topPosition","leftToIndex","topToIndex","relativeRect","lefts","rights","tops","state","isResizing","segPopover","limitRows","levelLimit","rowLevelLimit","unlimitRow","computeRowLevelLimit","limitRow","rowEl","rowBottom","trEls","findChildren","classList","remove","limitedNodes","segsBelow","totalSegsBelow","colSegsBelow","segMoreNodes","moreTd","moreWrap","moreLink","moreNodes","getCellSegs","renderMoreLink","node","add","concat","insertAfterElement","moreEls","limitedEls","limitedEl","hiddenSegs","innerText","getMoreLinkText","clickOption","_col","moreEl","currentTarget","allSegs","reslicedAllSegs","resliceDaySegs","reslicedHiddenSegs","jsEvent","showSegPopover","zoomTo","topEl","parentNode","releaseAfterSizingTriggers","dayDate","dayStart","dayEnd","dayRange","newSegs","origRange","slicedRange","intersectRanges","instance","num","startLevel","WEEK_NUM_FORMAT$1","DayGridView","viewSpec","dateProfileGenerator","renderHeadIntroHtml","weekNumberStyleAttr","renderDayGridNumberIntroHtml","weekStart","forceOff","renderDayGridBgIntroHtml","renderDayGridIntroHtml","renderSkeletonHtml","scroller","ScrollComponent","dayGridContainerEl","dayGridEl","weekNumberWidth","hasRigidRows","eventLimit","viewHeight","isAuto","updateBaseSize","scrollerHeight","scrollbarWidths","headRowEl","header","matchCellWidths","clear","uncompensateScroll","computeScrollerHeight","setGridHeight","setHeight","getScrollbarWidths","compensateScroll","lockOverflow","subtractInnerElHeight","distributeHeight","undistributeHeight","computeInitialDateScroll","queryDateScroll","getScrollTop","applyDateScroll","scroll","setScrollTop","View","dateProfileGeneratorClass","SimpleDayGrid","slicer","DayGridSlicer","dayTable","sliceProps","nextDayThreshold","rawHit","sliceRange","dateRange","Slicer","DayGridView$1","_context","buildDayTable","memoize","DayHeader","simpleDayGrid","dates","headerDates","datesRepDistinctDays","businessHours","dateSelection","eventStore","eventUiBases","daySeries","DaySeries","DayTable","main","createPlugin","defaultView","views","dayGridDay","duration","days","dayGridWeek","weeks","dayGridMonth","months","default","AbstractDayGridView","buildBasicDayTable","defineProperty","value","daygrid","TimeGridEventRenderer","timeGrid","fullTimeFormat","separator","defaultRangeSeparator","segsByCol","groupSegsByCol","attachSegsByCol","fgContainerEls","computeSegSizes","computeSegVerticals","computeSegHorizontals","assignSegSizes","assignSegVerticals","assignSegCss","fullTimeText","startTimeText","isMultiDayRange","unzonedStart","unzonedEnd","_getTimeText","level0","buildSlotSegLevels","computeForwardSlotSegs","computeSlotSegPressures","computeSegForwardBack","seriesBackwardPressure","seriesBackwardCoord","forwardSegs","forwardCoord","sortForwardSegs","backwardCoord","objs","map","buildTimeGridSegCompareObj","specs","field","order","eventOrderSpecs","obj0","obj1","compareByFieldSpecs","c","_seg","generateSegCss","shouldOverlap","slotEventOverlap","generateSegVerticalCss","zIndex","forwardPressure","computeSlotSegCollisions","k","forwardSeg","results","isSlotSegCollision","seg1","seg2","obj","buildSegCompareObj","TimeGridMirrorRenderer","mirrorContainerEls","sourceSegProps","marginLeft","marginRight","TimeGridFillRenderer","containerEls","bgContainerEls","businessContainerEls","highlightContainerEls","AGENDA_STOCK_SUB_DURATIONS","hours","minutes","seconds","TimeGrid","isSlatSizesDirty","isColSizesDirty","renderSlats","_renderSlats","renderColumns","_renderColumns","_unrenderColumns","_renderDateSelection","_unrenderDateSelection","processOptions","rootBgContainerEl","slatContainerEl","bottomRuleEl","snapsPerSlot","input","slotDuration","snapDuration","createDuration","wholeDivideDurations","isArray","labelFormat","labelInterval","computeLabelInterval","slotsPerLabel","buildSlatPositions","renderSlatRowHtml","slatEls","slatPositions","slotDate","isLabeled","axisHtml","startOfDay","slotTime","minTime","slotIterator","asRoughMs","maxTime","formatIsoTimeString","addDurations","colEls","renderContentSkeleton","unrenderContentSkeleton","contentSkeletonEl","colContainerEls","getNowIndicatorUnit","renderNowIndicator","computeDateTop","nodes","lineEl","arrowEl","nowIndicatorEls","unrenderNowIndicator","getTotalSlatHeight","offsetHeight","when","startOfDayDate","computeTimeTop","timeMs","slatIndex","slatRemainder","len","slatCoverage","floor","getHeight","eventMinHeight","colIndex","slatTop","slatHeight","partial","localSnapIndex","snapIndex","time","multiplyDuration","isEvent","isDragging","isSelecting","AllDaySplitter","getKeyInfo","timed","getKeysForDateSpan","getKeysForEventDef","hasBgRendering","Splitter","TIMEGRID_ALL_DAY_EVENT_LIMIT","WEEK_HEADER_FORMAT","TimeGridView","splitter","weekText","dayCnt","diffDays","axisStyleAttr","renderTimeGridBgIntroHtml","renderTimeGridIntroHtml","getAllDayHtml","timeGridWrapEl","timeGridEl","axisWidth","noScrollRowEls","scrollTime","milliseconds","usesMinMaxTime","SimpleTimeGrid","buildDayRanges","TimeGridSlicer","dayRanges","sliceNowDate","ranges","segRange","TimeGridView$1","simpleTimeGrid","splitProps","class","allDaySlot","timeGridDay","timeGridWeek","AbstractTimeGridView","config","touchMouseIgnoreWait","ignoreMouseDepth","listenerCnt","isWindowTouchMoveCancelled","PointerDragging","containerEl","subjectEl","downEl","selector","handleSelector","shouldIgnoreMove","shouldWatchScroll","isTouchDragging","wasTouchScroll","handleMouseDown","shouldIgnoreMouse","isPrimaryMouseButton","tryStart","pev","createEventFromMouse","emitter","initScrollWatch","handleMouseMove","handleMouseUp","recordCoords","cleanup","handleTouchStart","createEventFromTouch","handleTouchMove","handleTouchEnd","window","handleTouchScroll","startIgnoringMouse","handleScroll","pageX","pageXOffset","prevScrollX","prevPageX","pageY","pageYOffset","prevScrollY","prevPageY","origEvent","isTouch","deltaX","origPageX","deltaY","origPageY","EmitterMixin","passive","listenerCreated","listenerDestroyed","querySubjectEl","elementClosest","destroyScrollWatch","cancelTouchScroll","isFirst","touches","button","ctrlKey","setTimeout","onWindowTouchMove","preventDefault","ElementMirror","isVisible","sourceEl","mirrorEl","sourceElRect","body","revertDuration","origScreenX","origScreenY","updateElPosition","handleMove","setIsVisible","bool","stop","needsRevertAnimation","callback","done","doRevertAnimation","finalSourceElRect","transition","whenTransitionDone","getMirrorEl","cloneNode","visibility","boxSizing","ScrollGeomCache","scrollController","doesListening","scrollTop","scrollLeft","getScrollLeft","handleScrollChange","origScrollTop","origScrollLeft","scrollWidth","getScrollWidth","scrollHeight","getScrollHeight","clientWidth","getClientWidth","clientHeight","getClientHeight","clientRect","computeClientRect","getEventTarget","getMaxScrollTop","setScrollLeft","getMaxScrollLeft","ScrollController","ElementScrollGeomCache","ElementScrollController","computeInnerRect","WindowScrollGeomCache","WindowScrollController","getTime","performance","now","Date","AutoScroller","isEnabled","scrollQuery","edgeThreshold","maxVelocity","pointerScreenX","pointerScreenY","isAnimating","scrollCaches","everMovedUp","everMovedDown","everMovedLeft","everMovedRight","animate","edge","computeBestEdge","handleSide","msSinceRequest","requestAnimation","buildCaches","yDelta","xDelta","scrollCache","requestAnimationFrame","invDistance","distance","velocity","sign","bestSide","leftDist","rightDist","topDist","bottomDist","canScrollUp","canScrollDown","canScrollLeft","canScrollRight","queryScrollEls","query","querySelectorAll","FeaturefulElementDragging","delay","minDistance","touchScrollAllowed","mirrorNeedsRevert","isInteracting","isDelayEnded","isDistanceSurpassed","delayTimeoutId","onPointerDown","preventSelection","preventContextMenu","pointer","mirror","startDelay","handleDistanceSurpassed","onPointerMove","distanceSq","autoScroller","onPointerUp","allowSelection","allowContextMenu","tryStopDrag","clearTimeout","on","handleDelayEnd","tryStartDrag","stopDrag","setIgnoreMove","setMirrorIsVisible","setMirrorNeedsRevert","setAutoScrollEnabled","ElementDragging","OffsetTracker","origRect","getClippingParents","computeLeft","computeTop","isWithinClipping","point","isIgnoredClipping","pointInsideRect","tagName","HitDragging","dragging","droppableStore","useSubjectCenter","requireInitial","initialHit","movingHit","finalHit","handlePointerDown","prepareHits","processFirstCoord","handleDragStart","handleDragMove","handlePointerUp","releaseHits","handleDragEnd","subjectRect","origPoint","adjustedPoint","constrainPoint","queryHitForOffset","slicedSubjectRect","intersectRects","getRectCenter","coordAdjust","diffPoints","forceHandle","hit","isHitsEqual","offsetTrackers","mapHash","interactionSettings","id","offsetLeft","offsetTop","bestHit","offsetTracker","originLeft","originTop","rangeContainsRange","hit0","hit1","Boolean","isDateSpansEqual","DateClicking","settings","isValidDateDownEl","hitDragging","triggerDateClick","interactionSettingsToStore","Interaction","DateSelecting","dragSelection","canSelect","getComponentTouchDelay","unselect","handleHitUpdate","isFinal","isInvalid","joinHitsIntoSelection","pluginSystem","hooks","dateSelectionTransformers","isDateSelectionValid","dispatch","selection","disableCursor","enableCursor","triggerDateSelect","dateSpan0","dateSpan1","ms","compareNumbers","dateSelectionTransformers_1","transformer","EventDragging","subjectSeg","relevantEvents","receivingCalendar","validMutation","mutatedRelevantEvents","origTarget","initialCalendar","getElSeg","eventInstanceId","instanceId","getRelevantEvents","getComponentTouchDelay$1","isValid","isValidSegDownEl","event","EventApi","mutation","interaction","affectedEvents","mutatedEvents","createEmptyEventStore","origSeg","receivingComponent","computeEventMutation","eventDragMutationMassagers","applyMutationToEventStore","isInteractionValid","displayDrag","initialCalendar_1","initialView","eventInstance","eventApi","relevantEvents_1","clearDrag","eventDropArg","eventDropTransformers","delta","startDelta","oldEvent","defs","defId","instances","revert","draggedEl","dropArg","buildDatePointApi","SELECTOR","interactionSettingsStore","nextCalendar","prevCalendar","massagers","date0","date1","standardProps","hasEnd","diffDates","largeUnit","endDelta","massagers_1","massager","EventDragging$1","draggingSeg","querySeg","computeMutation","eventResizeJoinTransforms","prevEvent","fgSegSelector","isFromStart","instanceRange","transforms","transforms_1","transform","UnselectAuto","isRecentPointerDateSelect","onSelect","selectInfo","onDocumentPointerUp","documentPointer","unselectAuto","viewOpt","unselectCancel","off","ExternalElementDragging","suppliedDragMeta","droppableEvent","dragMeta","buildDragMeta","canDropElOnCalendar","computeEventForDateSpan","eventTupleToStore","finalView","arg","parseDragMeta","getDragMetaFromEl","dropAccept","elementMatches","defProps","leftoverProps","externalDefTransforms","parseEventDef","sourceId","startTime","getDefaultEventEnd","createEventInstance","str","getEmbeddedElData","JSON","parse","prefix","dataAttrPrefix","prefixedName","getAttribute","ExternalDraggable","longPressDelay","globalDefaults","eventDragMinDistance","itemSelector","appendTo","eventData","InferredElementDragging","mirrorSelector","currentMirrorEl","handlePointerMove","ThirdPartyDraggable","containerOrSettings","Element","componentInteractions","calendarInteractions","elementDraggingImpl","Draggable","CarService"],"mappings":"qMAEqBA,EAAY,+CAI/B,OAJ+B,yCAEhC,WACC,OAAOC,IAAMC,IAAI,kCAAkCC,MAAK,SAAAC,GAAG,OAAIA,EAAIC,KAAKA,YACxE,EAJ+B,I;;;;;;CCGhC,SAAUC,EAAQC,GACgDA,EAAQC,EAAS,EAAQ,UAD5F,CAIEC,GAAM,SAAUD,EAASE,GAAQ;;;;;;;;;;;;;;oFAkB/B,IAAIC,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,KAClEP,EAAcC,EAAGC,IAG5B,SAASO,EAAUR,EAAGC,GAElB,SAASQ,IAAOZ,KAAKa,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMQ,EAAGE,UAAYV,EAAEU,UAAW,IAAIF,GAGnF,IAAII,EAAW,WAQX,OAPAA,EAAWX,OAAOY,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAIX,KADTU,EAAIG,UAAUF,GACAD,EAAOd,OAAOS,UAAUJ,eAAec,KAAKL,EAAGV,KAAIS,EAAET,GAAKU,EAAEV,IAE9E,OAAOS,GAEJF,EAASS,MAAMzB,KAAMsB,YAG5BI,EAA6C,SAAUC,GAEvD,SAASD,IACL,OAAkB,OAAXC,GAAmBA,EAAOF,MAAMzB,KAAMsB,YAActB,KA2B/D,OA7BAW,EAAUe,EAA6BC,GAKvCD,EAA4BZ,UAAUc,iBAAmB,SAAUC,EAAcC,EAAkBC,GAC/F,IAIIC,EAJAC,EAAUjC,KAAKiC,QACfC,EAAcP,EAAOb,UAAUc,iBAAiBJ,KAAKxB,KAAM6B,EAAcC,EAAkBC,GAC3FI,EAAQD,EAAYC,MACpBC,EAAMF,EAAYE,IAYtB,GATI,iBAAiBC,KAAKP,KACtBK,EAAQF,EAAQK,YAAYH,GAE5BH,EAAYC,EAAQK,YAAYF,GAC5BJ,EAAUO,YAAcH,EAAIG,YAC5BH,EAAMnC,EAAKuC,SAASR,EAAW,KAInChC,KAAKyC,QAAQC,WACb1C,KAAKyC,QAAQE,eAAgB,CAC7B,IAAIC,EAASC,KAAKC,KAClB7C,EAAK8C,UAAUZ,EAAOC,IACtBA,EAAMnC,EAAKuC,SAASJ,EAAK,EAAIQ,GAEjC,MAAO,CAAET,MAAOA,EAAOC,IAAKA,IAEzBV,EA9BqC,CA+B9CzB,EAAK+C,sBAeHC,EAAyB,WACzB,SAASA,EAAQR,GACb,IAAIS,EAAQlD,KACZA,KAAKmD,UAAW,EAChBnD,KAAKoD,OAAS,GAEdpD,KAAKqD,kBAAoB,SAAUC,GAE3BJ,EAAMK,KAAOL,EAAMK,GAAGC,SAASF,EAAGG,SAClCP,EAAMQ,QAGd1D,KAAKyC,QAAUA,EA6FnB,OA1FAQ,EAAQnC,UAAU6C,KAAO,WACjB3D,KAAKmD,WACAnD,KAAKuD,IACNvD,KAAK4D,SAET5D,KAAKuD,GAAGM,MAAMC,QAAU,GACxB9D,KAAK+D,WACL/D,KAAKmD,UAAW,EAChBnD,KAAKgE,QAAQ,UAIrBf,EAAQnC,UAAU4C,KAAO,WAChB1D,KAAKmD,WACNnD,KAAKuD,GAAGM,MAAMC,QAAU,OACxB9D,KAAKmD,UAAW,EAChBnD,KAAKgE,QAAQ,UAIrBf,EAAQnC,UAAU8C,OAAS,WACvB,IAAIV,EAAQlD,KACRyC,EAAUzC,KAAKyC,QACfc,EAAKvD,KAAKuD,GAAKtD,EAAKgE,cAAc,MAAO,CACzCC,UAAW,eAAiBzB,EAAQyB,WAAa,IACjDL,MAAO,CACHM,IAAK,IACLC,KAAM,OAGiB,oBAApB3B,EAAQ4B,SACf5B,EAAQ4B,QAAQd,GAEpBd,EAAQ6B,SAASC,YAAYhB,GAE7BtD,EAAKuE,iBAAiBjB,EAAI,QAAS,aAAa,SAAUD,GACtDJ,EAAMQ,UAENjB,EAAQgC,UACRC,SAASC,iBAAiB,YAAa3E,KAAKqD,oBAIpDJ,EAAQnC,UAAU8D,QAAU,WACxB5E,KAAK0D,OACD1D,KAAKuD,KACLtD,EAAK4E,cAAc7E,KAAKuD,IACxBvD,KAAKuD,GAAK,MAEdmB,SAASI,oBAAoB,YAAa9E,KAAKqD,oBAGnDJ,EAAQnC,UAAUiD,SAAW,WACzB,IAKII,EACAC,EANA3B,EAAUzC,KAAKyC,QACfc,EAAKvD,KAAKuD,GACVwB,EAASxB,EAAGyB,wBACZC,EAAShF,EAAKiF,YAAY3B,EAAG4B,cAC7BC,EAAenF,EAAKoF,oBAAoB5C,EAAQ6B,UAIpDH,EAAM1B,EAAQ0B,KAAO,EAEjBC,OADiBkB,IAAjB7C,EAAQ2B,KACD3B,EAAQ2B,UAEQkB,IAAlB7C,EAAQ8C,MACN9C,EAAQ8C,MAAQR,EAAOS,MAGvB,EAGXrB,EAAMtB,KAAK4C,IAAItB,EAAKiB,EAAaM,OAASX,EAAOY,OAAS3F,KAAKoD,QAC/De,EAAMtB,KAAK+C,IAAIzB,EAAKiB,EAAajB,IAAMnE,KAAKoD,QAC5CgB,EAAOvB,KAAK4C,IAAIrB,EAAMgB,EAAaG,MAAQR,EAAOS,MAAQxF,KAAKoD,QAC/DgB,EAAOvB,KAAK+C,IAAIxB,EAAMgB,EAAahB,KAAOpE,KAAKoD,QAC/CnD,EAAK4F,WAAWtC,EAAI,CAChBY,IAAKA,EAAMc,EAAOd,IAClBC,KAAMA,EAAOa,EAAOb,QAO5BnB,EAAQnC,UAAUkD,QAAU,SAAU8B,GAC9B9F,KAAKyC,QAAQqD,IACb9F,KAAKyC,QAAQqD,GAAMrE,MAAMzB,KAAMQ,MAAMM,UAAUiF,MAAMvE,KAAKF,UAAW,KAGtE2B,EAzGiB,GA+GxB+C,EAA4C,SAAUrE,GAEtD,SAASqE,IACL,OAAkB,OAAXrE,GAAmBA,EAAOF,MAAMzB,KAAMsB,YAActB,KA+D/D,OAjEAW,EAAUqF,EAA4BrE,GAKtCqE,EAA2BlF,UAAUmF,cAAgB,SAAUC,EAAKC,GAChE,IAWIC,EACAC,EAZA5D,EAAUzC,KAAKsG,QAAQ7D,QACvB8D,EAAaL,EAAIK,WACjBC,EAAWD,EAAWE,IACtBC,EAAUH,EAAWI,GACrBC,EAASJ,EAASI,OAClBC,EAAcH,EAAQI,cACtBC,EAAuBH,GAAUV,EAAIc,SAAWN,EAAQO,kBAAoBxE,EAAQyE,wBACpFC,EAAqBP,GAAUV,EAAIkB,OAASV,EAAQO,iBACpDI,EAAUrH,KAAKsH,cAAcpB,EAAKW,EAAaE,GAAwBI,EAAoBhB,GAC3FoB,EAAUtH,EAAKuH,SAASxH,KAAKyH,WAAWf,IACxCgB,EAAW,GAef,OAZAL,EAAQM,QAAQ,oBAAqB,cAEjCzB,EAAIc,UACJZ,EAAWpG,KAAK4H,YAAYrB,GACxBH,IACAsB,EAAW,yBAA2BzH,EAAK4H,WAAWzB,GAAY,YAG1EC,EACI,2BACKpG,EAAK4H,WAAWrB,EAASsB,OAAS,KAAO,UAC1C,UACD,aAAeT,EAAQU,KAAK,KAAO,KACrCvB,EAASwB,IACN,UAAY/H,EAAK4H,WAAWrB,EAASwB,KAAO,IAC5C,KACHT,EACG,WAAaA,EAAU,IACvB,IAND,6BASc,QAAhB9E,EAAQwF,IACL5B,EAAY,IAAMqB,EAClBA,EAAW,IAAMrB,GAErB,UACCU,EACG,kDACA,KACHI,EACG,gDACA,IACJ,QAGRnB,EAA2BlF,UAAUoH,uBAAyB,WAC1D,MAAO,CACHC,KAAM,UACNC,OAAQ,UACRC,gBAAgB,EAChBC,SAAU,WAGlBtC,EAA2BlF,UAAUyH,uBAAyB,WAC1D,OAAO,GAEJvC,EAlEoC,CAmE7C/F,EAAKuI,iBAIHC,EAAsC,SAAU9G,GAEhD,SAAS8G,EAAqBC,GAC1B,IAAIxF,EAAQvB,EAAOH,KAAKxB,KAAM0I,EAAQpC,UAAYtG,KAElD,OADAkD,EAAMwF,QAAUA,EACTxF,EA6KX,OAjLAvC,EAAU8H,EAAsB9G,GAOhC8G,EAAqB3H,UAAU6H,WAAa,SAAUC,EAAMzC,GACxD,IAAI0C,EAAa7I,KAAK6I,WAAa7I,KAAK8I,cAAcF,GAEtD5I,KAAK0I,QAAQK,OAAOC,SAAQ,SAAUC,EAAS7H,GAC3C6H,EAAQC,cAAc,gCAAgC3E,YAAYsE,EAAWzH,GAAG+H,YAG/EhD,GACDnG,KAAK0I,QAAQU,oBAIrBX,EAAqB3H,UAAUuI,WAAa,WACxC,IACIC,EADAT,EAAa7I,KAAK6I,YAAc,GAEpC,MAAQS,EAAYT,EAAWU,MAC3BtJ,EAAK4E,cAAcyE,EAAUH,SAEjCnJ,KAAK6I,WAAa,MAKtBJ,EAAqB3H,UAAUgI,cAAgB,SAAUF,GACrD,IACIY,EACAC,EAFAZ,EAAa,GAKjB,IAFAW,EAAUxJ,KAAK0J,aAAad,GAEvBa,EAAM,EAAGA,EAAMD,EAAQjI,OAAQkI,IAChCZ,EAAWc,KAAK3J,KAAK4J,aAAaH,EAAKD,EAAQC,KAEnD,OAAOZ,GAKXJ,EAAqB3H,UAAU8I,aAAe,SAAUH,EAAKI,GACzD,IAQIzI,EACA0I,EACAC,EACAC,EACAC,EACA/D,EACAgE,EAdAxB,EAAU1I,KAAK0I,QACfyB,EAASzB,EAAQyB,OAAQC,EAAQ1B,EAAQ0B,MACzCC,EAAYrK,KAAKsK,eAAeT,GAChCU,EAAW1H,KAAK+C,IAAI,EAAGyE,EAAU9I,QACjCiJ,EAAQ9F,SAAST,cAAc,SAC/BwG,EAAY,GACZC,EAAa,GACbC,EAAiB,GASrB,SAASC,EAAgBC,GACrB,MAAOd,EAAMc,EAETX,GAAMS,EAAevJ,EAAI,IAAM,IAAI2I,GAC/BG,EACAA,EAAGY,SAAWZ,EAAGY,SAAW,GAAK,GAGjCZ,EAAKxF,SAAST,cAAc,MAC5B+F,EAAGzF,YAAY2F,IAEnBQ,EAAWtJ,GAAG2I,GAAOG,EACrBS,EAAevJ,GAAG2I,GAAOG,EACzBH,IAGR,IAAK3I,EAAI,EAAGA,EAAImJ,EAAUnJ,IAAK,CAS3B,GARA0I,EAAYO,EAAUjJ,GACtB2I,EAAM,EACNC,EAAKtF,SAAST,cAAc,MAC5BwG,EAAUd,KAAK,IACfe,EAAWf,KAAK,IAChBgB,EAAehB,KAAK,IAGhBG,EACA,IAAKG,EAAI,EAAGA,EAAIH,EAAUvI,OAAQ0I,IAAK,CACnC/D,EAAM4D,EAAUG,GAChB,IAAIc,EAAUX,EAASD,EAAS,EAAIjE,EAAI8E,QAAW9E,EAAI+E,SACnDC,EAAWd,EAASD,EAAS,EAAIjE,EAAI+E,SAAY/E,EAAI8E,QACzDJ,EAAgBG,GAEhBb,EAAKjK,EAAKgE,cAAc,KAAM,CAAEC,UAAW,sBAAwBgC,EAAI3C,IACnEwH,IAAYG,EACZhB,EAAGiB,QAAUD,EAAWH,EAAU,EAGlCJ,EAAevJ,GAAG2I,GAAOG,EAE7B,MAAOH,GAAOmB,EACVR,EAAWtJ,GAAG2I,GAAOG,EACrBO,EAAUrJ,GAAG2I,GAAO7D,EACpB6D,IAEJC,EAAGzF,YAAY2F,GAGvBU,EAAgBT,GAChB,IAAIiB,EAAY1C,EAAQ2C,YAAYC,kBAChCF,IACI1C,EAAQ0B,MACRnK,EAAKsL,gBAAgBvB,EAAIoB,GAGzBnL,EAAKuL,iBAAiBxB,EAAIoB,IAGlCZ,EAAMjG,YAAYyF,GAEtB,MAAO,CACHP,IAAKA,EACLN,QAASqB,EACTE,WAAYA,EACZD,UAAWA,EACXJ,UAAWA,EACXzB,KAAMiB,IAKdpB,EAAqB3H,UAAUwJ,eAAiB,SAAU1B,GACtD,IAEIxH,EACA8E,EACA+D,EAJAwB,EAAKzL,KAAK0I,QAAS0B,EAAQqB,EAAGrB,MAAOD,EAASsB,EAAGtB,OACjDuB,EAAS,GAOb,IADA9C,EAAO5I,KAAK2L,cAAc/C,GACrBxH,EAAI,EAAGA,EAAIwH,EAAKrH,OAAQH,IAAK,CAG9B,IAFA8E,EAAM0C,EAAKxH,GAEN6I,EAAI,EAAGA,EAAIyB,EAAOnK,OAAQ0I,IAC3B,IAAK2B,EAAkB1F,EAAKwF,EAAOzB,IAC/B,MAIR/D,EAAI2F,MAAQ5B,EACZ/D,EAAI6E,QAAUX,EAASD,EAAS,EAAIjE,EAAI8E,QAAW9E,EAAI+E,SACvD/E,EAAIgF,SAAWd,EAASD,EAAS,EAAIjE,EAAI+E,SAAY/E,EAAI8E,SAExDU,EAAOzB,KAAOyB,EAAOzB,GAAK,KAAKN,KAAKzD,GAGzC,IAAK+D,EAAI,EAAGA,EAAIyB,EAAOnK,OAAQ0I,IAC3ByB,EAAOzB,GAAG6B,KAAKC,GAEnB,OAAOL,GAGXjD,EAAqB3H,UAAU4I,aAAe,SAAUd,GACpD,IACIxH,EADAoI,EAAU,GAEd,IAAKpI,EAAI,EAAGA,EAAIpB,KAAK0I,QAAQ9F,OAAQxB,IACjCoI,EAAQG,KAAK,IAEjB,IAAKvI,EAAI,EAAGA,EAAIwH,EAAKrH,OAAQH,IACzBoI,EAAQZ,EAAKxH,GAAGqI,KAAKE,KAAKf,EAAKxH,IAEnC,OAAOoI,GAGXf,EAAqB3H,UAAUyH,uBAAyB,WACpD,OAA+B,IAAxBvI,KAAK0I,QAAQyB,QAEjB1B,EAlL8B,CAmLvCzC,GAEF,SAAS4F,EAAkB1F,EAAK8F,GAC5B,IAAI5K,EACA6K,EACJ,IAAK7K,EAAI,EAAGA,EAAI4K,EAAUzK,OAAQH,IAE9B,GADA6K,EAAWD,EAAU5K,GACjB6K,EAAShB,UAAY/E,EAAI8E,SACzBiB,EAASjB,SAAW9E,EAAI+E,SACxB,OAAO,EAGf,OAAO,EAGX,SAASc,EAAkBG,EAAG9L,GAC1B,OAAO8L,EAAEnB,QAAU3K,EAAE2K,QAGzB,IAAIoB,EAAuC,SAAUxK,GAEjD,SAASwK,IACL,OAAkB,OAAXxK,GAAmBA,EAAOF,MAAMzB,KAAMsB,YAActB,KA2B/D,OA7BAW,EAAUwL,EAAuBxK,GAIjCwK,EAAsBrL,UAAU6H,WAAa,SAAUC,EAAMzC,GACzD,IAAIiG,EAAYjG,EAAWiG,UACvBvD,EAAa7I,KAAK6I,WAAa7I,KAAK8I,cAAcF,GAEtD5I,KAAK0I,QAAQK,OAAOC,SAAQ,SAAUC,EAASQ,GAC3C,IACI4C,EACAC,EAFAC,EAAatM,EAAKuM,cAAc,yDAIhCJ,GAAaA,EAAU3C,MAAQA,EAC/B4C,EAAgBD,EAAU7I,IAG1B8I,EAAgBpD,EAAQC,cAAc,8BACjCmD,IACDA,EAAgBpD,EAAQC,cAAc,gCAG9CoD,EAAcD,EAAcrH,wBAAwBb,IAChD8E,EAAQjE,wBAAwBb,IACpCoI,EAAW1I,MAAMM,IAAMmI,EAAc,KACrCC,EAAWrD,cAAc,SAAS3E,YAAYsE,EAAWY,GAAKN,SAC9DF,EAAQ1E,YAAYgI,OAGrBJ,EA9B+B,CA+BxC1D,GAEEgE,EAAqC,SAAU9K,GAE/C,SAAS8K,EAAoB/D,GACzB,IAAIxF,EAAQvB,EAAOH,KAAKxB,KAAM0I,EAAQpC,UAAYtG,KAGlD,OAFAkD,EAAMwJ,WAAa,KACnBxJ,EAAMwF,QAAUA,EACTxF,EAoEX,OAzEAvC,EAAU8L,EAAqB9K,GAO/B8K,EAAoB3L,UAAU6L,WAAa,SAAUC,EAAMhE,GAE1C,YAATgE,IACAhE,EAAOA,EAAKiE,QAAO,SAAU3G,GACzB,OAAOA,EAAIK,WAAWE,IAAIG,WAGlCjF,EAAOb,UAAU6L,WAAWnL,KAAKxB,KAAM4M,EAAMhE,IAEjD6D,EAAoB3L,UAAU6H,WAAa,SAAUiE,EAAMhE,GACvD,IACIxH,EACA8E,EACAqG,EAHAO,EAAM,GAIV,IAAK1L,EAAI,EAAGA,EAAIwH,EAAKrH,OAAQH,IACzB8E,EAAM0C,EAAKxH,GACXmL,EAAavM,KAAK+M,cAAcH,EAAM1G,GACtClG,KAAK0I,QAAQK,OAAO7C,EAAIuD,KAAKlF,YAAYgI,GACzCO,EAAInD,KAAK4C,GAEb,OAAOO,GAGXL,EAAoB3L,UAAUiM,cAAgB,SAAUH,EAAM1G,GAC1D,IAMIhC,EACAqI,EACAS,EARAtE,EAAU1I,KAAK0I,QACfyB,EAASzB,EAAQyB,OAAQC,EAAQ1B,EAAQ0B,MACzCW,EAAUX,EAASD,EAAS,EAAIjE,EAAI8E,QAAW9E,EAAI+E,SACnDC,EAAWd,EAASD,EAAS,EAAIjE,EAAI+E,SAAY/E,EAAI8E,QACrDiC,EAAWlC,EACXF,EAASK,EAAW,EAKpBhH,EADS,kBAAT0I,EACY,UAGAA,EAAKM,cAErBX,EAAatM,EAAKuM,cAAc,kBAAoBtI,EAApB,6CAGhC8I,EAAOT,EAAWY,qBAAqB,MAAM,GACzCF,EAAW,GACXhN,EAAKsL,gBAAgByB,EAErB,IAAIxM,MAAMyM,EAAW,GAAGlF,KAAK,cAEjC7B,EAAI3C,GAAG4H,QAAUN,EAASoC,EAC1BD,EAAKzI,YAAY2B,EAAI3C,IACjBsH,EAASV,GACTlK,EAAKsL,gBAAgByB,EAErB,IAAIxM,MAAM2J,EAASU,EAAS,GAAG9C,KAAK,cAExC,IAAIqD,EAAY1C,EAAQ2C,YAAYC,kBASpC,OARIF,IACI1C,EAAQ0B,MACRnK,EAAKsL,gBAAgByB,EAAM5B,GAG3BnL,EAAKuL,iBAAiBwB,EAAM5B,IAG7BmB,GAEJE,EA1E6B,CA2EtCxM,EAAKmN,cAEHC,EAAyB,SAAU1L,GAEnC,SAAS0L,EAAQ/G,EAAS/C,GACtB,IAAIL,EAAQvB,EAAOH,KAAKxB,KAAMsG,EAAS/C,IAAOvD,KAC1CsN,EAAgBpK,EAAMoK,cAAgB,IAAIC,EAAqBrK,GAC/DsK,EAActK,EAAMsK,YAAcvN,EAAKwN,iBAAiBvK,EAAMwK,cASlE,OARAxK,EAAMyK,eAAiB1N,EAAKwN,iBAAiBH,EAAcX,WAAWiB,KAAKN,GAAgBA,EAAcO,SAASD,KAAKN,GAAgB,CAACE,IACxItK,EAAM4K,qBAAuB7N,EAAKwN,iBAAiBH,EAAcS,mBAAmBH,KAAKN,GAAgBA,EAAcU,qBAAqBJ,KAAKN,GAAgB,CAACpK,EAAMyK,iBACxKzK,EAAM+K,gBAAkBhO,EAAKwN,iBAAiBH,EAAcY,WAAWN,KAAKN,GAAgBA,EAAca,WAAWP,KAAKN,GAAgB,CAACE,IAC3ItK,EAAMkL,kBAAoBnO,EAAKwN,iBAAiBH,EAAcY,WAAWN,KAAKN,GAAgBA,EAAca,WAAWP,KAAKN,GAAgB,CAACE,IAC7IlH,EAAQ+H,SAASC,6BAA6BpL,EAAO,CACjDK,GAAIL,EAAMK,GACVgL,gBAAgB,IAEbrL,EAkDX,OA/DAvC,EAAU0M,EAAS1L,GAenB0L,EAAQvM,UAAU8C,OAAS,SAAU4K,GACjCxO,KAAKwN,YAAYgB,EAAMC,MACvBzO,KAAK2N,eAAea,EAAME,QAC1B1O,KAAK8N,qBAAqBU,EAAMG,gBAChC3O,KAAKiO,gBAAgBO,EAAMI,oBAC3B5O,KAAKoO,kBAAkBI,EAAMK,uBAEjCxB,EAAQvM,UAAU8D,QAAU,WACxBjD,EAAOb,UAAU8D,QAAQpD,KAAKxB,MAC9BA,KAAKwN,YAAYK,WACjB7N,KAAKqO,SAASS,+BAA+B9O,OAEjDqN,EAAQvM,UAAU4M,aAAe,SAAUe,GACvC,IAAIhD,EAAKzL,KAAM+O,EAAQtD,EAAGsD,MAAO9M,EAAUwJ,EAAGxJ,QAC1C6F,EAAQ7F,EAAQ+M,OAAOP,EAAMxO,EAAKgP,gBAAgBjP,KAAKkP,IAAI,sBAE/DlP,KAAKuD,GAAG4L,UACJ,yBAA2BJ,EAAMK,SAAS,iBAA1C,4BAEInP,EAAK4H,WAAWC,GAFpB,gCAI+BiH,EAAMM,aAAa,SAJlD,sCAM6BN,EAAMK,SAAS,kBAN5C,iDASJpP,KAAKsP,eAAiBtP,KAAKuD,GAAG2F,cAAc,wBAEhDmE,EAAQvM,UAAUyO,SAAW,SAAUC,EAAcC,EAAaC,EAASC,GACvE,IAAIlB,EAAOzO,KAAKwO,MAAMC,KACtB,GAAIe,EAAeE,GAAWD,EAAcE,EACxC,MAAO,CACHC,UAAW5P,KACX6P,SAAU,CACNjJ,QAAQ,EACRkJ,MAAO,CAAE3N,MAAOsM,EAAMrM,IAAKnC,EAAK8P,QAAQtB,EAAM,KAElDuB,MAAOhQ,KAAKuD,GACZ0M,KAAM,CACF7L,KAAM,EACND,IAAK,EACLoB,MAAOmK,EACPhK,OAAQiK,GAEZO,MAAO,IAIZ7C,EAhEiB,CAiE1BpN,EAAKkQ,eACH5C,EAAsC,SAAU5L,GAEhD,SAAS4L,EAAqB6C,GAC1B,IAAIlN,EAAQvB,EAAOH,KAAKxB,KAAMoQ,EAAQ9J,UAAYtG,KAElD,OADAkD,EAAMkN,QAAUA,EACTlN,EAcX,OAlBAvC,EAAU4M,EAAsB5L,GAMhC4L,EAAqBzM,UAAU6H,WAAa,SAAUC,GAClD,IAAK,IAAIyH,EAAK,EAAGC,EAAS1H,EAAMyH,EAAKC,EAAO/O,OAAQ8O,IAAM,CACtD,IAAInK,EAAMoK,EAAOD,GACjBrQ,KAAKoQ,QAAQd,eAAe/K,YAAY2B,EAAI3C,MAGpDgK,EAAqBzM,UAAUuI,WAAa,SAAUT,GAClD,IAAK,IAAIyH,EAAK,EAAGE,EAAS3H,EAAMyH,EAAKE,EAAOhP,OAAQ8O,IAAM,CACtD,IAAInK,EAAMqK,EAAOF,GACjBpQ,EAAK4E,cAAcqB,EAAI3C,MAGxBgK,EAnB8B,CAoBvCvH,GAEEwK,EAA0B,WAC1B,SAASA,EAASlK,GACdtG,KAAKsG,QAAUA,EAmBnB,OAjBAkK,EAAS1P,UAAU2P,WAAa,SAAUjC,GACtC,IAAIkC,EAAQ,GACRlC,EAAMlD,iBACNoF,EAAM/G,KAAK6E,EAAMlD,mBAErB,IAAK,IAAI+E,EAAK,EAAG5E,EAAK+C,EAAMmC,MAAON,EAAK5E,EAAGlK,OAAQ8O,IAAM,CACrD,IAAIO,EAAOnF,EAAG4E,GACdK,EAAM/G,KAAKkH,EAAeD,EAAKnC,KAAMD,EAAMsC,YAAa9Q,KAAKsG,QAASsK,EAAKG,YAQ/E,OANKvC,EAAMmC,MAAMpP,QACbmP,EAAM/G,KAAK,qBAAuB3J,KAAKsG,QAAQyI,MAAMK,SAAS,iBAAmB,WAEpD,QAA7BpP,KAAKsG,QAAQ7D,QAAQwF,KACrByI,EAAMM,UAEH,OAASN,EAAM3I,KAAK,IAAM,SAE9ByI,EArBkB,GAuB7B,SAASK,EAAepC,EAAMqC,EAAaxK,EAAS2K,GAChD,IAAIhP,EAAUqE,EAAQrE,QAAS8M,EAAQzI,EAAQyI,MAC3CmC,EAAcjR,EAAKkR,oBAAoBL,EAAYM,YAAa3C,GAChEpH,EAAUpH,EAAKoR,cAAc5C,EAAMqC,EAAaxK,GAEpD,OADAe,EAAQM,QAAQ,SAAUoH,EAAMK,SAAS,kBAClC,cAAgB/H,EAAQU,KAAK,KAAO,KACtCmJ,EACG,eAAiBjP,EAAQqP,UAAU7C,EAAM,CAAE8C,UAAU,IAAU,IAC/D,KACHN,EACG,IAAMA,EACN,IACJ,SAGR,IAAIO,EAAiBvR,EAAKgP,gBAAgB,CAAEwC,IAAK,YAC7CC,EAAkBzR,EAAKgP,gBAAgB,CAAE0C,KAAM,YAC/CC,EAAyB,SAAUjQ,GAEnC,SAASiQ,EAAQtL,EAAS/C,EAAI8H,GAC1B,IAAInI,EAAQvB,EAAOH,KAAKxB,KAAMsG,EAAS/C,IAAOvD,KAC9CkD,EAAM2O,mBAAqB,EAC3B3O,EAAM4O,kBAAmB,EACzB,IAAIxE,EAAgBpK,EAAMoK,cAAgB,IAAI7E,EAAqBvF,GAC/D6O,EAAe7O,EAAM6O,aAAe,IAAItF,EAAoBvJ,GAChEA,EAAM8O,eAAiB,IAAI7F,EAAsBjJ,GACjD,IAAI+O,EAAc/O,EAAM+O,YAAchS,EAAKwN,iBAAiBvK,EAAMgP,aAAchP,EAAMiP,gBAStF,OARAjP,EAAMkP,oBAAsBnS,EAAKwN,iBAAiBsE,EAAapF,WAAWiB,KAAKmE,EAAc,iBAAkBA,EAAalE,SAASD,KAAKmE,EAAc,iBAAkB,CAACE,IAC3K/O,EAAMmP,oBAAsBpS,EAAKwN,iBAAiBsE,EAAapF,WAAWiB,KAAKmE,EAAc,aAAcA,EAAalE,SAASD,KAAKmE,EAAc,aAAc,CAACE,IACnK/O,EAAMoP,eAAiBrS,EAAKwN,iBAAiBsE,EAAapF,WAAWiB,KAAKmE,EAAc,WAAYA,EAAalE,SAASD,KAAKmE,EAAc,WAAY,CAACE,IAC1J/O,EAAMyK,eAAiB1N,EAAKwN,iBAAiBH,EAAcX,WAAWiB,KAAKN,GAAgBA,EAAcO,SAASD,KAAKN,GAAgB,CAAC2E,IACxI/O,EAAM4K,qBAAuB7N,EAAKwN,iBAAiBH,EAAcS,mBAAmBH,KAAKN,GAAgBA,EAAcU,qBAAqBJ,KAAKN,GAAgB,CAACpK,EAAMyK,iBACxKzK,EAAM+K,gBAAkBhO,EAAKwN,iBAAiBvK,EAAMqP,iBAAkBrP,EAAMsP,mBAAoB,CAACP,IACjG/O,EAAMkL,kBAAoBnO,EAAKwN,iBAAiBvK,EAAMuP,mBAAoBvP,EAAMwP,qBAAsB,CAACT,IACvG/O,EAAMmI,YAAcA,EACbnI,EAuhBX,OAxiBAvC,EAAUiR,EAASjQ,GAmBnBiQ,EAAQ9Q,UAAU8C,OAAS,SAAU4K,GACjC,IAAImC,EAAQnC,EAAMmC,MAClB3Q,KAAK4C,OAAS+N,EAAMpP,OACpBvB,KAAKmK,OAASwG,EAAM,GAAGpP,OACvBvB,KAAKiS,YAAYtB,EAAOnC,EAAMmE,SAC9B3S,KAAKoS,oBAAoB5D,EAAMoE,kBAC/B5S,KAAKqS,oBAAoB7D,EAAMqE,mBAC/B7S,KAAKsS,eAAe9D,EAAMsE,aAC1B9S,KAAK2N,eAAea,EAAMuE,aAC1B/S,KAAK8N,qBAAqBU,EAAMG,gBAChC3O,KAAKiO,gBAAgBO,EAAMwE,WAC3BhT,KAAKoO,kBAAkBI,EAAMyE,aACzBjT,KAAKkT,gBACLlT,KAAKmT,wBAGbvB,EAAQ9Q,UAAU8D,QAAU,WACxBjD,EAAOb,UAAU8D,QAAQpD,KAAKxB,MAC9BA,KAAKiS,YAAYpE,YAErB+D,EAAQ9Q,UAAUsS,aAAe,SAAU3J,EAAKM,GAC5C,IAAI5H,EAAQnC,KAAKwO,MAAMmC,MAAMlH,GAAKM,GAAK0E,KACnCrM,EAAMnC,EAAK8P,QAAQ5N,EAAO,GAC9B,MAAO,CAAEA,MAAOA,EAAOC,IAAKA,IAEhCwP,EAAQ9Q,UAAUqS,qBAAuB,SAAU1E,EAAM7F,GACrD,IAAIyK,EAAWrT,KAAKwO,MACpBxO,KAAKkT,eAAeI,aAAa,CAC7B7E,KAAMA,GAAQzO,KAAKkT,eAAe1E,MAAMC,KACxCC,OAAQ9F,GAAQ5I,KAAKkT,eAAe1E,MAAME,OAC1CC,eAAgB0E,EAAS1E,eACzBC,mBAAoByE,EAASL,UAAYK,EAASL,UAAUO,kBAAoB,KAChF1E,qBAAsBwE,EAASJ,YAAcI,EAASJ,YAAYM,kBAAoB,QAK9F3B,EAAQ9Q,UAAUoR,aAAe,SAAUvB,EAAOgC,GAC9C,IAGIlJ,EACAM,EAJA0B,EAAKzL,KAAMwT,EAAO/H,EAAG+H,KAAMvR,EAAUwJ,EAAGxJ,QACxCwR,EAAKzT,KAAM4C,EAAS6Q,EAAG7Q,OAAQuH,EAASsJ,EAAGtJ,OAC3CuJ,EAAO,GAGX,IAAKjK,EAAM,EAAGA,EAAM7G,EAAQ6G,IACxBiK,GAAQ1T,KAAK2T,iBAAiBlK,EAAKkJ,GAcvC,IAZA3S,KAAKuD,GAAG4L,UAAYuE,EACpB1T,KAAK+I,OAAS9I,EAAK2T,aAAa5T,KAAKuD,GAAI,WACzCvD,KAAK6T,QAAU5T,EAAK2T,aAAa5T,KAAKuD,GAAI,6BACtCvD,KAAKoK,OACLpK,KAAK6T,QAAQ7C,UAEjBhR,KAAK8T,aAAe,IAAI7T,EAAK8T,cAAc/T,KAAKuD,GAAIvD,KAAK+I,QAAQ,GAAO,GAExE/I,KAAKgU,aAAe,IAAI/T,EAAK8T,cAAc/T,KAAKuD,GAAIvD,KAAK6T,QAAQ9N,MAAM,EAAGoE,IAC1E,GAAM,GAGDV,EAAM,EAAGA,EAAM7G,EAAQ6G,IACxB,IAAKM,EAAM,EAAGA,EAAMI,EAAQJ,IACxB/J,KAAKiU,gBAAgB,YAAa,CAC9B,CACIxF,KAAMxM,EAAQiS,OAAOvD,EAAMlH,GAAKM,GAAK0E,MACrClL,GAAIvD,KAAKmU,UAAU1K,EAAKM,GACxByJ,KAAMA,KAKtBxT,KAAK8R,kBAAmB,GAE5BF,EAAQ9Q,UAAUqR,eAAiB,WAC/BnS,KAAKoJ,oBAITwI,EAAQ9Q,UAAU6S,iBAAmB,SAAUlK,EAAKkJ,GAChD,IAAI5D,EAAQ/O,KAAK+O,MACb1H,EAAU,CAAC,SAAU,UAAW0H,EAAMK,SAAS,WAC/CuD,GACAtL,EAAQsC,KAAK,YAEjB,IAAIyK,EAAQ,IAAI5D,EAASxQ,KAAKsG,SAC9B,MACI,eAAiBe,EAAQU,KAAK,KAD3B,sCAGgBgH,EAAMK,SAAS,aAAe,KACjDgF,EAAM3D,WAAW,CACbE,MAAO3Q,KAAKwO,MAAMmC,MAAMlH,GACxBqH,YAAa9Q,KAAKwO,MAAMsC,YACxBxF,gBAAiBtL,KAAKqL,YAAYgJ,oBAPnC,0DAaFrU,KAAKsU,sBACF,UACItU,KAAKuU,mBAAmB9K,GACxB,WACJ,IAjBD,wBAsBXmI,EAAQ9Q,UAAUwT,oBAAsB,WACpC,OAAOtU,KAAKwU,0BACRxU,KAAKqL,YAAYoJ,wBACjBzU,KAAKqL,YAAYqJ,uBAEzB9C,EAAQ9Q,UAAU0T,uBAAyB,WACvC,OAAOxU,KAAK4C,OAAS,GAIzBgP,EAAQ9Q,UAAUyT,mBAAqB,SAAU9K,GAC7C,IAAIkL,EAAQ3U,KAAKqL,YAAYuJ,sBAAsBnL,EAAKzJ,MACxD,MACI,QACCA,KAAKoK,MAAQ,GAAKuK,GACnB3U,KAAK6U,sBAAsBpL,IAC1BzJ,KAAKoK,MAAQuK,EAAQ,IACtB,SAER/C,EAAQ9Q,UAAU+T,sBAAwB,SAAUpL,GAChD,IACIM,EACA0E,EAFAqG,EAAQ,GAGZ,IAAK/K,EAAM,EAAGA,EAAM/J,KAAKmK,OAAQJ,IAC7B0E,EAAOzO,KAAKwO,MAAMmC,MAAMlH,GAAKM,GAAK0E,KAClCqG,EAAMnL,KAAK3J,KAAK+U,qBAAqBtG,IAKzC,OAHIzO,KAAKoK,OACL0K,EAAM9D,UAEH8D,EAAM/M,KAAK,KAItB6J,EAAQ9Q,UAAUiU,qBAAuB,SAAUtG,GAC/C,IAIIpH,EACA2N,EALAvJ,EAAKzL,KAAMwT,EAAO/H,EAAG+H,KAAMvR,EAAUwJ,EAAGxJ,QACxCyR,EAAO,GACPxC,EAAcjR,EAAKkR,oBAAoBnR,KAAKwO,MAAMsC,YAAYM,YAAa3C,GAC3EwG,EAAqBjV,KAAKwU,0BAA4BtD,EAG1D,OAAK+D,GAAuBjV,KAAKqL,YAAYoJ,wBAI7CpN,EAAUpH,EAAKoR,cAAc5C,EAAMzO,KAAKwO,MAAMsC,YAAa9Q,KAAKsG,SAChEe,EAAQM,QAAQ,cACZ3H,KAAKqL,YAAYoJ,yBACjBO,EAAmB/S,EAAQiT,SAE/BxB,GAAQ,cAAgBrM,EAAQU,KAAK,KAAO,KACvCmJ,EACG,eAAiBjP,EAAQqP,UAAU7C,EAAM,CAAE8C,UAAU,IAAU,IAC/D,IACJ,IACAvR,KAAKqL,YAAYoJ,wBAA2BhG,EAAK0G,cAAgBH,IACjEtB,GAAQzT,EAAKmV,oBAAoB5B,EAAM,CAAE/E,KAAMA,EAAM7B,KAAM,QAAU,CAAE,MAAS,kBAAoB3K,EAAQ+M,OAAOP,EAAMiD,KAGzHuD,IACAvB,GAAQzT,EAAKmV,oBAAoB5B,EAAM/E,EAAM,CAAE,MAAS,iBAAmBxM,EAAQ+M,OAAOP,EAAM+C,KAGpGkC,GAAQ,QACDA,GArBI,aAyBf9B,EAAQ9Q,UAAUuU,WAAa,SAAUC,GACrC,IAAI7J,EAAKzL,KAAM+R,EAAetG,EAAGsG,aAAczE,EAAgB7B,EAAG6B,cAAe0E,EAAiBvG,EAAGuG,gBACjGsD,GAAYtV,KAAK8R,oBACjB9R,KAAKuV,oBACLvV,KAAKwV,oBACLxV,KAAK8R,kBAAmB,GAE5BC,EAAa0D,aAAaH,GAC1BhI,EAAcmI,aAAaH,GAC3BtD,EAAeyD,aAAaH,GAC5BvD,EAAa2D,YAAYJ,GACzBhI,EAAcoI,YAAYJ,GAC1BtD,EAAe0D,YAAYJ,IAE/B1D,EAAQ9Q,UAAUyU,kBAAoB,WAClCvV,KAAKgU,aAAa2B,SAEtB/D,EAAQ9Q,UAAU0U,kBAAoB,WAClCxV,KAAK8T,aAAa6B,QAClB3V,KAAK8T,aAAa8B,QAAQ5V,KAAK4C,OAAS,IAAM5C,KAAK6R,oBAIvDD,EAAQ9Q,UAAU+U,cAAgB,SAAUC,EAAcC,GACtD,IAAItK,EAAKzL,KAAMgU,EAAevI,EAAGuI,aAAcF,EAAerI,EAAGqI,aAC7D/J,EAAMiK,EAAagC,YAAYF,GAC/BrM,EAAMqK,EAAamC,WAAWF,GAClC,GAAW,MAAPtM,GAAsB,MAAPM,EACf,MAAO,CACHN,IAAKA,EACLM,IAAKA,EACL8F,SAAU,CACNC,MAAO9P,KAAKoT,aAAa3J,EAAKM,GAC9BnD,QAAQ,GAEZoJ,MAAOhQ,KAAKmU,UAAU1K,EAAKM,GAC3BmM,aAAc,CACV9R,KAAM4P,EAAamC,MAAMpM,GACzBxE,MAAOyO,EAAaoC,OAAOrM,GAC3B5F,IAAK2P,EAAauC,KAAK5M,GACvB/D,OAAQoO,EAAa8B,QAAQnM,MAQ7CmI,EAAQ9Q,UAAUqT,UAAY,SAAU1K,EAAKM,GACzC,OAAO/J,KAAK6T,QAAQpK,EAAMzJ,KAAKmK,OAASJ,IAI5C6H,EAAQ9Q,UAAUyR,iBAAmB,SAAU+D,GACvCA,IACAtW,KAAKsN,cAAcY,WAAWoI,EAAM/C,mBACpCvT,KAAK+R,aAAapF,WAAW,YAAa2J,EAAM1N,QAGxDgJ,EAAQ9Q,UAAU0R,mBAAqB,SAAU8D,GACzCA,IACAtW,KAAKsN,cAAca,WAAWmI,EAAM/C,mBACpCvT,KAAK+R,aAAalE,SAAS,eAKnC+D,EAAQ9Q,UAAU2R,mBAAqB,SAAU6D,GACzCA,IACAtW,KAAKsN,cAAcY,WAAWoI,EAAM/C,mBACpCvT,KAAK+R,aAAapF,WAAW,YAAa2J,EAAM1N,MAChD5I,KAAKgS,eAAerF,WAAW2J,EAAM1N,KAAM,CAAE2N,YAAY,EAAMnK,UAAWkK,EAAMlK,cAGxFwF,EAAQ9Q,UAAU4R,qBAAuB,SAAU4D,GAC3CA,IACAtW,KAAKsN,cAAca,WAAWmI,EAAM/C,mBACpCvT,KAAK+R,aAAalE,SAAS,aAC3B7N,KAAKgS,eAAenE,SAASyI,EAAM1N,KAAM,CAAE2N,YAAY,EAAMnK,UAAWkK,EAAMlK,cAKtFwF,EAAQ9Q,UAAUsI,iBAAmB,WAC7BpJ,KAAKwW,YACLxW,KAAKwW,WAAW9S,QAKxBkO,EAAQ9Q,UAAU2V,UAAY,SAAUC,GACpC,IACIjN,EACAkN,EAFA9N,EAAa7I,KAAKsN,cAAczE,YAAc,GAGlD,IAAKY,EAAM,EAAGA,EAAMZ,EAAWtH,OAAQkI,IACnCzJ,KAAK4W,WAAWnN,GAKZkN,IAJCD,IAG0B,kBAAfA,EACIA,EAGA1W,KAAK6W,qBAAqBpN,KAExB,IAAlBkN,GACA3W,KAAK8W,SAASrN,EAAKkN,IAO/B/E,EAAQ9Q,UAAU+V,qBAAuB,SAAUpN,GAC/C,IAGIrI,EACA4L,EAJA+J,EAAQ/W,KAAK+I,OAAOU,GACpBuN,EAAYD,EAAM/R,wBAAwBU,OAC1CuR,EAAQhX,EAAKiX,aAAalX,KAAKsN,cAAczE,WAAWY,GAAKN,SAIjE,IAAK/H,EAAI,EAAGA,EAAI6V,EAAM1V,OAAQH,IAG1B,GAFA4L,EAAOiK,EAAM7V,GACb4L,EAAKmK,UAAUC,OAAO,cAClBpK,EAAKhI,wBAAwBU,OAASsR,EACtC,OAAO5V,EAGf,OAAO,GAKXwQ,EAAQ9Q,UAAUgW,SAAW,SAAUrN,EAAKiN,GACxC,IAKI5M,EACAY,EACA2M,EACAjW,EACA8E,EACAoR,EACAC,EACAC,EACAtN,EACAY,EACA2M,EACAxN,EACAyN,EACAC,EACAC,EAnBA1U,EAAQlD,KACRyL,EAAKzL,KAAMmK,EAASsB,EAAGtB,OAAQC,EAAQqB,EAAGrB,MAC1Cd,EAAYtJ,KAAKsN,cAAczE,WAAWY,GAC1CoO,EAAY,GACZ9N,EAAM,EAiBNa,EAAkB,SAAUC,GAC5B,MAAOd,EAAMc,EACTyM,EAAYpU,EAAM4U,YAAYrO,EAAKM,EAAK2M,GACpCY,EAAU/V,SACV2I,EAAKQ,EAAWgM,EAAa,GAAG3M,GAChC6N,EAAW1U,EAAM6U,eAAetO,EAAKM,EAAKuN,GAC1CK,EAAW1X,EAAKgE,cAAc,MAAO,KAAM2T,GAC3C1N,EAAG3F,YAAYoT,GACfE,EAAUlO,KAAKgO,EAAS,KAE5B5N,KAGR,GAAI2M,GAAcA,EAAapN,EAAUe,UAAU9I,OAAQ,CAQvD,IAPAuI,EAAYR,EAAUe,UAAUqM,EAAa,GAC7ChM,EAAapB,EAAUoB,WACvB2M,EAAepX,EAAKiX,aAAa5N,EAAUH,SAASpD,MAAM2Q,GAC1DW,EAAarO,SAAQ,SAAUgP,GAC3BA,EAAKb,UAAUc,IAAI,iBAGlB7W,EAAI,EAAGA,EAAI0I,EAAUvI,OAAQH,IAAK,CACnC8E,EAAM4D,EAAU1I,GAChB,IAAI2J,EAAUX,EAASD,EAAS,EAAIjE,EAAI8E,QAAW9E,EAAI+E,SACnDC,EAAWd,EAASD,EAAS,EAAIjE,EAAI+E,SAAY/E,EAAI8E,QACzDJ,EAAgBG,GAEhByM,EAAe,GACfD,EAAiB,EACjB,MAAOxN,GAAOmB,EACVoM,EAAYtX,KAAK8X,YAAYrO,EAAKM,EAAK2M,GACvCc,EAAa7N,KAAK2N,GAClBC,GAAkBD,EAAU/V,OAC5BwI,IAEJ,GAAIwN,EAAgB,CAKhB,IAJArN,EAAKQ,EAAWgM,EAAa,GAAG3L,GAChCD,EAAUZ,EAAGY,SAAW,EACxB2M,EAAe,GAEVxN,EAAI,EAAGA,EAAIuN,EAAajW,OAAQ0I,IACjCyN,EAASzX,EAAKgE,cAAc,KAAM,CAAEC,UAAW,eAAgB4G,QAASA,IACxEwM,EAAYE,EAAavN,GACzB2N,EAAW5X,KAAK+X,eAAetO,EAAKsB,EAAUd,EAAG,CAAC/D,GAAKgS,OAAOZ,IAE9DK,EAAW1X,EAAKgE,cAAc,MAAO,KAAM2T,GAC3CF,EAAOnT,YAAYoT,GACnBF,EAAa9N,KAAK+N,GAClBG,EAAUlO,KAAK+N,GAEnBxN,EAAGiN,UAAUc,IAAI,cACjBhY,EAAKkY,mBAAmBjO,EAAIuN,GAC5BJ,EAAa1N,KAAKO,IAG1BU,EAAgB5K,KAAKmK,QACrBb,EAAU8O,QAAUP,EACpBvO,EAAU+O,WAAahB,IAK/BzF,EAAQ9Q,UAAU8V,WAAa,SAAUnN,GACrC,IAAIH,EAAYtJ,KAAKsN,cAAczE,WAAWY,GAC1CH,EAAU8O,UACV9O,EAAU8O,QAAQpP,QAAQ/I,EAAK4E,eAC/ByE,EAAU8O,QAAU,MAEpB9O,EAAU+O,aACV/O,EAAU+O,WAAWrP,SAAQ,SAAUsP,GACnCA,EAAUnB,UAAUC,OAAO,iBAE/B9N,EAAU+O,WAAa,OAK/BzG,EAAQ9Q,UAAUiX,eAAiB,SAAUtO,EAAKM,EAAKwO,GACnD,IAAIrV,EAAQlD,KACRyL,EAAKzL,KAAMwT,EAAO/H,EAAG+H,KAAMvR,EAAUwJ,EAAGxJ,QACxCiK,EAAIjM,EAAKgE,cAAc,IAAK,CAAEC,UAAW,YAkC7C,OAjCAgI,EAAEsM,UAAYxY,KAAKyY,gBAAgBF,EAAWhX,QAC9C2K,EAAEvH,iBAAiB,SAAS,SAAUrB,GAClC,IAAIoV,EAAcxV,EAAMgM,IAAI,mBACxByJ,EAAOzV,EAAMkH,MAAQlH,EAAMiH,OAASJ,EAAM,EAAIA,EAC9C0E,EAAOvL,EAAMsL,MAAMmC,MAAMlH,GAAKkP,GAAMlK,KACpCmK,EAAStV,EAAGuV,cACZ7I,EAAQ9M,EAAMiR,UAAU1K,EAAKM,GAC7B+O,EAAU5V,EAAM4U,YAAYrO,EAAKM,GAEjCgP,EAAkB7V,EAAM8V,eAAeF,EAASrK,GAChDwK,EAAqB/V,EAAM8V,eAAeT,EAAY9J,GAC/B,oBAAhBiK,IAEPA,EAAcxV,EAAM+Q,gBAAgB,kBAAmB,CACnD,CACIxF,KAAMxM,EAAQiS,OAAOzF,GACrB7H,QAAQ,EACRoJ,MAAOA,EACP4I,OAAQA,EACRhQ,KAAMmQ,EACNR,WAAYU,EACZC,QAAS5V,EACTkQ,KAAMA,MAIE,YAAhBkF,EACAxV,EAAMiW,eAAe1P,EAAKM,EAAK6O,EAAQG,GAEX,kBAAhBL,GACZlF,EAAKnF,SAAS+K,OAAO3K,EAAMiK,MAG5BxM,GAGX0F,EAAQ9Q,UAAUqY,eAAiB,SAAU1P,EAAKM,EAAK6N,EAAUhP,GAC7D,IAIIyQ,EACA5W,EALAS,EAAQlD,KACRyL,EAAKzL,KAAMqO,EAAW5C,EAAG4C,SAAUmF,EAAO/H,EAAG+H,KAAMzE,EAAQtD,EAAGsD,MAC9D4J,EAAO3Y,KAAKoK,MAAQpK,KAAKmK,OAASJ,EAAM,EAAIA,EAC5C4N,EAAWC,EAAS0B,WAIpBD,EADgB,IAAhBrZ,KAAK4C,OACG4Q,EAAKjQ,GAGLvD,KAAK+I,OAAOU,GAExBhH,EAAU,CACNyB,UAAW,mBAAqB6K,EAAMK,SAAS,WAC/C9K,SAAUkP,EAAKjQ,GACfY,IAAKlE,EAAKiF,YAAYmU,GAAOlV,IAC7BM,UAAU,EACVJ,QAAS,SAAUd,GACfL,EAAMgQ,eAAiB,IAAI7F,EAAQnK,EAAMoD,QAAS/C,GAClDL,EAAMiQ,qBAAqBjQ,EAAMsL,MAAMmC,MAAMlH,GAAKkP,GAAMlK,KAAM7F,IAElElF,KAAM,WACFR,EAAMgQ,eAAetO,UACrB1B,EAAMgQ,eAAiB,KACvBhQ,EAAMsT,WAAW5R,UACjB1B,EAAMsT,WAAa,OAKvBxW,KAAKoK,MACL3H,EAAQ8C,MAAQtF,EAAKiF,YAAYyS,GAAUpS,MAAQ,EAGnD9C,EAAQ2B,KAAOnE,EAAKiF,YAAYyS,GAAUvT,KAAO,EAErDpE,KAAKwW,WAAa,IAAIvT,EAAQR,GAC9BzC,KAAKwW,WAAW7S,OAChB0K,EAASkL,8BAGb3H,EAAQ9Q,UAAUkY,eAAiB,SAAUpQ,EAAM4Q,GAK/C,IAJA,IAAIC,EAAWD,EACXE,EAASzZ,EAAK8P,QAAQ0J,EAAU,GAChCE,EAAW,CAAExX,MAAOsX,EAAUrX,IAAKsX,GACnCE,EAAU,GACLvJ,EAAK,EAAGC,EAAS1H,EAAMyH,EAAKC,EAAO/O,OAAQ8O,IAAM,CACtD,IAAInK,EAAMoK,EAAOD,GACb9J,EAAaL,EAAIK,WACjBsT,EAAYtT,EAAWuJ,MACvBgK,EAAc7Z,EAAK8Z,gBAAgBF,EAAWF,GAC9CG,GACAF,EAAQjQ,KAAK3I,EAAS,GAAIkF,EAAK,CAAEK,WAAY,CACrCE,IAAKF,EAAWE,IAChBE,GAAI3F,EAAS,GAAIuF,EAAWI,GAAI,CAAEM,kBAAkB,IACpD+S,SAAUzT,EAAWyT,SACrBlK,MAAOgK,GACR9S,QAASd,EAAIc,SAAW8S,EAAY3X,MAAMI,YAAcsX,EAAU1X,MAAMI,UAAW6E,MAAOlB,EAAIkB,OAAS0S,EAAY1X,IAAIG,YAAcsX,EAAUzX,IAAIG,aAGlK,OAAOqX,GAGXhI,EAAQ9Q,UAAU2X,gBAAkB,SAAUwB,GAC1C,IAAI/K,EAAMlP,KAAKkP,IAAI,kBACnB,MAAmB,oBAARA,EACAA,EAAI+K,GAGJ,IAAMA,EAAM,IAAM/K,GAKjC0C,EAAQ9Q,UAAUgX,YAAc,SAAUrO,EAAKM,EAAKmQ,GAChD,IAGIhU,EAHAuE,EAAYzK,KAAKsN,cAAczE,WAAWY,GAAKgB,UAC/CoB,EAAQqO,GAAc,EACtBtR,EAAO,GAEX,MAAOiD,EAAQpB,EAAUlJ,OACrB2E,EAAMuE,EAAUoB,GAAO9B,GACnB7D,GACA0C,EAAKe,KAAKzD,GAEd2F,IAEJ,OAAOjD,GAEJgJ,EAziBiB,CA0iB1B3R,EAAKkQ,eAEHgK,EAAoBla,EAAKgP,gBAAgB,CAAE0C,KAAM,YAKjDyI,EAA6B,SAAUzY,GAEvC,SAASyY,EAAY9T,EAAS+T,EAAUC,EAAsBhW,GAC1D,IAAIpB,EAAQvB,EAAOH,KAAKxB,KAAMsG,EAAS+T,EAAUC,EAAsBhW,IAAatE,KAIpFkD,EAAMqX,oBAAsB,WACxB,IAAIxL,EAAQ7L,EAAM6L,MAClB,OAAI7L,EAAMwR,sBAEF,6BAA+B3F,EAAMK,SAAS,gBAAkB,KAAOlM,EAAMsX,sBAD1E,UAGHva,EAAK4H,WAAW3E,EAAMgM,IAAI,cAHvB,eAOJ,IAKXhM,EAAMuX,6BAA+B,SAAUhR,EAAKf,GAChD,IAAIzG,EAAUiB,EAAMjB,QAChByY,EAAYhS,EAAQ8F,MAAMmC,MAAMlH,GAAK,GAAGgF,KAC5C,OAAIvL,EAAMwR,sBAEF,8BAAgCxR,EAAMsX,sBAAwB,IAC9Dva,EAAKmV,oBACLlS,EAAO,CAAEuL,KAAMiM,EAAW9N,KAAM,OAAQ+N,SAA6B,IAAnBjS,EAAQyB,QAAgBlI,EAAQ+M,OAAO0L,EAAWP,IAEpG,QAED,IAGXjX,EAAM0X,yBAA2B,WAC7B,IAAI7L,EAAQ7L,EAAM6L,MAClB,OAAI7L,EAAMwR,sBACC,6BAA+B3F,EAAMK,SAAS,iBAAmB,KAAOlM,EAAMsX,sBAAwB,SAE1G,IAIXtX,EAAM2X,uBAAyB,WAC3B,OAAI3X,EAAMwR,sBACC,8BAAgCxR,EAAMsX,sBAAwB,SAElE,IAEXtX,EAAMK,GAAG4T,UAAUc,IAAI,mBACvB/U,EAAMK,GAAG4L,UAAYjM,EAAM4X,qBAC3B5X,EAAM6X,SAAW,IAAI9a,EAAK+a,gBAAgB,SAC1C,QAEA,IAAIC,EAAqB/X,EAAM6X,SAASxX,GACxCL,EAAMK,GAAG2F,cAAc,sBAAsB3E,YAAY0W,GACzDA,EAAmB9D,UAAUc,IAAI,yBACjC,IAEIxD,EAFAyG,EAAYjb,EAAKgE,cAAc,MAAO,CAAEC,UAAW,gBAwBvD,OAvBA+W,EAAmB1W,YAAY2W,GAE3BhY,EAAMgM,IAAI,eACNhM,EAAMgM,IAAI,0BACVuF,GAAyB,EACzBvR,EAAMwR,uBAAwB,IAG9BD,GAAyB,EACzBvR,EAAMwR,uBAAwB,IAIlCxR,EAAMwR,uBAAwB,EAC9BD,GAAyB,GAE7BvR,EAAMwF,QAAU,IAAIkJ,EAAQ1O,EAAMoD,QAAS4U,EAAW,CAClDtG,sBAAuB1R,EAAMuX,6BAC7BpG,kBAAmBnR,EAAM0X,yBACzBtP,gBAAiBpI,EAAM2X,uBACvBnG,sBAAuBxR,EAAMwR,sBAC7BD,uBAAwBA,IAErBvR,EAsIX,OAxNAvC,EAAUyZ,EAAazY,GAoFvByY,EAAYtZ,UAAU8D,QAAU,WAC5BjD,EAAOb,UAAU8D,QAAQpD,KAAKxB,MAC9BA,KAAK0I,QAAQ9D,UACb5E,KAAK+a,SAASnW,WAIlBwV,EAAYtZ,UAAUga,mBAAqB,WACvC,IAAI/L,EAAQ/O,KAAK+O,MACjB,MACI,iBAAmBA,EAAMK,SAAS,aAAe,MAChDpP,KAAKkP,IAAI,gBACN,2DAEsCH,EAAMK,SAAS,gBAFrD,6BAKA,IARD,yCAWaL,EAAMK,SAAS,iBAX5B,gCAiBXgL,EAAYtZ,UAAU0Z,oBAAsB,WACxC,OAA4B,MAAxBxa,KAAKmb,gBACE,gBAAkBnb,KAAKmb,gBAAkB,MAE7C,IAGXf,EAAYtZ,UAAUsa,aAAe,WACjC,IAAIC,EAAarb,KAAKkP,IAAI,cAC1B,OAAOmM,GAAoC,kBAAfA,GAIhCjB,EAAYtZ,UAAUuU,WAAa,SAAUC,EAAUgG,EAAYC,GAC/D5Z,EAAOb,UAAUuU,WAAW7T,KAAKxB,KAAMsV,EAAUgG,EAAYC,GAC7Dvb,KAAK0I,QAAQ2M,WAAWC,IAG5B8E,EAAYtZ,UAAU0a,eAAiB,SAAUlG,EAAUgG,EAAYC,GACnE,IAGIE,EACAC,EAJAhT,EAAU1I,KAAK0I,QACf2S,EAAarb,KAAKkP,IAAI,cACtByM,EAAY3b,KAAK4b,OAAS5b,KAAK4b,OAAOrY,GAAK,KAK1CmF,EAAQK,QAOT/I,KAAK0U,wBAEL1U,KAAKmb,gBAAkBlb,EAAK4b,gBAAgB5b,EAAK2T,aAAa5T,KAAKuD,GAAI,qBAG3EvD,KAAK+a,SAASe,QACVH,GACA1b,EAAK8b,mBAAmBJ,GAE5BjT,EAAQU,mBAEJiS,GAAoC,kBAAfA,GACrB3S,EAAQ+N,UAAU4E,GAItBI,EAAiBzb,KAAKgc,sBAAsBV,GAC5Ctb,KAAKic,cAAcR,EAAgBF,GAE/BF,GAAoC,kBAAfA,GACrB3S,EAAQ+N,UAAU4E,GAEjBE,IACDvb,KAAK+a,SAASmB,UAAUT,GACxBC,EAAkB1b,KAAK+a,SAASoB,sBAC5BT,EAAgBtX,MAAQsX,EAAgBnW,SACpCoW,GACA1b,EAAKmc,iBAAiBT,EAAWD,GAGrCD,EAAiBzb,KAAKgc,sBAAsBV,GAC5Ctb,KAAK+a,SAASmB,UAAUT,IAG5Bzb,KAAK+a,SAASsB,aAAaX,KAxCtBH,IACDE,EAAiBzb,KAAKgc,sBAAsBV,GAC5Ctb,KAAK+a,SAASmB,UAAUT,KA0CpCrB,EAAYtZ,UAAUkb,sBAAwB,SAAUV,GACpD,OAAOA,EACHrb,EAAKqc,sBAAsBtc,KAAKuD,GAAIvD,KAAK+a,SAASxX,KAG1D6W,EAAYtZ,UAAUmb,cAAgB,SAAUtW,EAAQ4V,GAChDvb,KAAKkP,IAAI,cAELqM,IACA5V,GAAU3F,KAAK0I,QAAQ9F,OAAS,GAEpC3C,EAAKsc,iBAAiBvc,KAAK0I,QAAQK,OAAQpD,GAAS4V,IAGhDA,EACAtb,EAAKuc,mBAAmBxc,KAAK0I,QAAQK,QAGrC9I,EAAKsc,iBAAiBvc,KAAK0I,QAAQK,OAAQpD,GAAQ,IAM/DyU,EAAYtZ,UAAU2b,yBAA2B,WAC7C,MAAO,CAAEtY,IAAK,IAElBiW,EAAYtZ,UAAU4b,gBAAkB,WACpC,MAAO,CAAEvY,IAAKnE,KAAK+a,SAAS4B,iBAEhCvC,EAAYtZ,UAAU8b,gBAAkB,SAAUC,QAC3BvX,IAAfuX,EAAO1Y,KACPnE,KAAK+a,SAAS+B,aAAaD,EAAO1Y,MAGnCiW,EAzNqB,CA0N9Bna,EAAK8c,MACP3C,EAAYtZ,UAAUkc,0BAA4Btb,EAElD,IAAIub,EAA+B,SAAUtb,GAEzC,SAASsb,EAAc3W,EAASoC,GAC5B,IAAIxF,EAAQvB,EAAOH,KAAKxB,KAAMsG,EAASoC,EAAQnF,KAAOvD,KAItD,OAHAkD,EAAMga,OAAS,IAAIC,EACnBja,EAAMwF,QAAUA,EAChBpC,EAAQ+H,SAASC,6BAA6BpL,EAAO,CAAEK,GAAIL,EAAMwF,QAAQnF,KAClEL,EA4BX,OAlCAvC,EAAUsc,EAAetb,GAQzBsb,EAAcnc,UAAU8D,QAAU,WAC9BjD,EAAOb,UAAU8D,QAAQpD,KAAKxB,MAC9BA,KAAKqO,SAASS,+BAA+B9O,OAEjDid,EAAcnc,UAAU8C,OAAS,SAAU4K,GACvC,IAAI9F,EAAU1I,KAAK0I,QACfoI,EAActC,EAAMsC,YAAasM,EAAW5O,EAAM4O,SACtD1U,EAAQ4K,aAAatS,EAAS,GAAIhB,KAAKkd,OAAOG,WAAW7O,EAAOsC,EAAatC,EAAM8O,iBAAkB5U,EAAS0U,GAAW,CAAEtM,YAAaA,EAAaH,MAAOyM,EAASzM,MAAOgC,QAASnE,EAAMmE,YAE/LsK,EAAcnc,UAAUyO,SAAW,SAAUC,EAAcC,GACvD,IAAI8N,EAASvd,KAAK0I,QAAQmN,cAAcrG,EAAcC,GACtD,GAAI8N,EACA,MAAO,CACH3N,UAAW5P,KAAK0I,QAChBmH,SAAU0N,EAAO1N,SACjBG,MAAOuN,EAAOvN,MACdC,KAAM,CACF7L,KAAMmZ,EAAOrH,aAAa9R,KAC1BmB,MAAOgY,EAAOrH,aAAa3Q,MAC3BpB,IAAKoZ,EAAOrH,aAAa/R,IACzBuB,OAAQ6X,EAAOrH,aAAaxQ,QAEhCwK,MAAO,IAIZ+M,EAnCuB,CAoChChd,EAAKkQ,eACHgN,EAA+B,SAAUxb,GAEzC,SAASwb,IACL,OAAkB,OAAXxb,GAAmBA,EAAOF,MAAMzB,KAAMsB,YAActB,KAK/D,OAPAW,EAAUwc,EAAexb,GAIzBwb,EAAcrc,UAAU0c,WAAa,SAAUC,EAAWL,GACtD,OAAOA,EAASI,WAAWC,IAExBN,EARuB,CAShCld,EAAKyd,QAEHC,EAA+B,SAAUhc,GAEzC,SAASyY,EAAYwD,EAAUvD,EAAUC,EAAsBhW,GAC3D,IAAIpB,EAAQvB,EAAOH,KAAKxB,KAAM4d,EAAUvD,EAAUC,EAAsBhW,IAAatE,KAMrF,OALAkD,EAAM2a,cAAgB5d,EAAK6d,QAAQD,GAC/B3a,EAAMgM,IAAI,kBACVhM,EAAM0Y,OAAS,IAAI3b,EAAK8d,UAAU7a,EAAMoD,QAASpD,EAAMK,GAAG2F,cAAc,wBAE5EhG,EAAM8a,cAAgB,IAAIf,EAAc/Z,EAAMoD,QAASpD,EAAMwF,SACtDxF,EAoCX,OA5CAvC,EAAUyZ,EAAazY,GAUvByY,EAAYtZ,UAAU8D,QAAU,WAC5BjD,EAAOb,UAAU8D,QAAQpD,KAAKxB,MAC1BA,KAAK4b,QACL5b,KAAK4b,OAAOhX,UAEhB5E,KAAKge,cAAcpZ,WAEvBwV,EAAYtZ,UAAU8C,OAAS,SAAU4K,GACrC7M,EAAOb,UAAU8C,OAAOpC,KAAKxB,KAAMwO,GACnC,IAAIsC,EAAc9Q,KAAKwO,MAAMsC,YACzBsM,EAAWpd,KAAKod,SAChBpd,KAAK6d,cAAc/M,EAAa9Q,KAAKsa,sBACrCta,KAAK4b,QACL5b,KAAK4b,OAAOtI,aAAa,CACrBxC,YAAaA,EACbmN,MAAOb,EAASc,YAChBC,qBAA0C,IAApBf,EAASxa,OAC/B0I,gBAAiBtL,KAAKua,sBAG9Bva,KAAKge,cAAc1K,aAAa,CAC5BxC,YAAaA,EACbsM,SAAUA,EACVgB,cAAe5P,EAAM4P,cACrBC,cAAe7P,EAAM6P,cACrBC,WAAY9P,EAAM8P,WAClBC,aAAc/P,EAAM+P,aACpB5P,eAAgBH,EAAMG,eACtBqE,UAAWxE,EAAMwE,UACjBC,YAAazE,EAAMyE,YACnBN,QAAS3S,KAAKob,eACdkC,iBAAkBtd,KAAKsd,oBAGxBlD,EA7CuB,CA8ChCA,GACF,SAASyD,EAAc/M,EAAawJ,GAChC,IAAIkE,EAAY,IAAIve,EAAKwe,UAAU3N,EAAY5O,YAAaoY,GAC5D,OAAO,IAAIra,EAAKye,SAASF,EAAW,kBAAkBnc,KAAKyO,EAAYhP,mBAG3E,IAAI6c,EAAO1e,EAAK2e,aAAa,CACzBC,YAAa,eACbC,MAAO,CACHpW,QAASiV,EACToB,WAAY,CACRnS,KAAM,UACNoS,SAAU,CAAEC,KAAM,IAEtBC,YAAa,CACTtS,KAAM,UACNoS,SAAU,CAAEG,MAAO,IAEvBC,aAAc,CACVxS,KAAM,UACNoS,SAAU,CAAEK,OAAQ,GACpB3c,WAAW,EACXC,gBAAgB,MAK5B5C,EAAQuf,QAAUX,EAClB5e,EAAQkd,cAAgBA,EACxBld,EAAQod,cAAgBA,EACxBpd,EAAQ6R,QAAUA,EAClB7R,EAAQwf,oBAAsBnF,EAC9Bra,EAAQqa,YAAcuD,EACtB5d,EAAQyf,mBAAqB3B,EAC7B9d,EAAQyQ,SAAWA,EAEnBnQ,OAAOof,eAAe1f,EAAS,aAAc,CAAE2f,OAAO,Q;;;;;;CCtlDzD,SAAU7f,EAAQC,GACgDA,EAAQC,EAAS,EAAQ,QAAuB,EAAQ,UAD3H,CAIEC,GAAM,SAAUD,EAASE,EAAM0f,GAAW;;;;;;;;;;;;;;oFAkBxC,IAAIzf,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,KAClEP,EAAcC,EAAGC,IAG5B,SAASO,EAAUR,EAAGC,GAElB,SAASQ,IAAOZ,KAAKa,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMQ,EAAGE,UAAYV,EAAEU,UAAW,IAAIF,GAGnF,IAAII,EAAW,WAQX,OAPAA,EAAWX,OAAOY,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAIX,KADTU,EAAIG,UAAUF,GACAD,EAAOd,OAAOS,UAAUJ,eAAec,KAAKL,EAAGV,KAAIS,EAAET,GAAKU,EAAEV,IAE9E,OAAOS,GAEJF,EAASS,MAAMzB,KAAMsB,YAO5Bse,EAAuC,SAAUje,GAEjD,SAASie,EAAsBC,GAC3B,IAAI3c,EAAQvB,EAAOH,KAAKxB,KAAM6f,EAASvZ,UAAYtG,KAOnD,OANAkD,EAAM2c,SAAWA,EACjB3c,EAAM4c,eAAiB7f,EAAKgP,gBAAgB,CACxC9G,KAAM,UACNC,OAAQ,UACR2X,UAAW7c,EAAMoD,QAAQ7D,QAAQud,wBAE9B9c,EA2OX,OApPAvC,EAAUif,EAAuBje,GAajCie,EAAsB9e,UAAU6H,WAAa,SAAUC,EAAMzC,GAIzD,IAHA,IAAI8Z,EAAYjgB,KAAK6f,SAASK,eAAetX,GAGpCmB,EAAM,EAAGA,EAAMkW,EAAU1e,OAAQwI,IACtCkW,EAAUlW,GAAO/J,KAAK2L,cAAcsU,EAAUlW,IAElD/J,KAAKigB,UAAYA,EACjBjgB,KAAK6f,SAASM,gBAAgBF,EAAWjgB,KAAK6f,SAASO,iBAE3DR,EAAsB9e,UAAUuI,WAAa,SAAUT,GACnDA,EAAKI,SAAQ,SAAU9C,GACnBjG,EAAK4E,cAAcqB,EAAI3C,OAE3BvD,KAAKigB,UAAY,MAErBL,EAAsB9e,UAAUuf,gBAAkB,SAAUvH,GACxD,IAAIrN,EAAKzL,KAAM6f,EAAWpU,EAAGoU,SAAUI,EAAYxU,EAAGwU,UAClD9V,EAAS0V,EAAS1V,OAEtB,GADA0V,EAASS,oBAAoBxH,GACzBmH,EACA,IAAK,IAAIlW,EAAM,EAAGA,EAAMI,EAAQJ,IAC5B/J,KAAKugB,sBAAsBN,EAAUlW,KAIjD6V,EAAsB9e,UAAU0f,eAAiB,SAAU1H,GACvD,IAAIrN,EAAKzL,KAAM6f,EAAWpU,EAAGoU,SAAUI,EAAYxU,EAAGwU,UAClD9V,EAAS0V,EAAS1V,OAEtB,GADA0V,EAASY,mBAAmB3H,GACxBmH,EACA,IAAK,IAAIlW,EAAM,EAAGA,EAAMI,EAAQJ,IAC5B/J,KAAK0gB,aAAaT,EAAUlW,KAKxC6V,EAAsB9e,UAAUoH,uBAAyB,WACrD,MAAO,CACHC,KAAM,UACNC,OAAQ,UACRE,UAAU,IAIlBsX,EAAsB9e,UAAUyH,uBAAyB,WACrD,OAAO,GAGXqX,EAAsB9e,UAAUmF,cAAgB,SAAUC,EAAKC,GAC3D,IASIC,EACAua,EACAC,EAXAra,EAAaL,EAAIK,WACjBC,EAAWD,EAAWE,IACtBC,EAAUH,EAAWI,GACrBC,EAASJ,EAASI,OAClBC,EAAcH,EAAQI,cACtBC,EAAuBb,EAAIc,SAAWN,EAAQO,kBAAoBjH,KAAKsG,QAAQ7D,QAAQyE,wBACvFC,EAAqBjB,EAAIkB,OAASV,EAAQO,iBAC1CI,EAAUrH,KAAKsH,cAAcpB,EAAKW,EAAaE,GAAwBI,EAAoBhB,GAC3FoB,EAAUtH,EAAKuH,SAASxH,KAAKyH,WAAWf,IAM5C,GAFAW,EAAQM,QAAQ,sBAEZ1H,EAAK4gB,gBAAgBta,EAAWuJ,QAIhC,GAAI5J,EAAIc,SAAWd,EAAIkB,MAAO,CAC1B,IAAI0Z,EAAe5a,EAAI/D,MACnB4e,EAAa7a,EAAI9D,IACrBgE,EAAWpG,KAAKghB,aAAaF,EAAcC,EAAYna,GACvD+Z,EAAe3gB,KAAKghB,aAAaF,EAAcC,EAAYna,EAAQ5G,KAAK8f,gBACxEc,EAAgB5gB,KAAKghB,aAAaF,EAAcC,EAAYna,EAAQ,MAAM,SAK9ER,EAAWpG,KAAK4H,YAAYrB,GAC5Boa,EAAe3gB,KAAK4H,YAAYrB,EAAYvG,KAAK8f,gBACjDc,EAAgB5gB,KAAK4H,YAAYrB,EAAY,MAAM,GAEvD,MAAO,aAAec,EAAQU,KAAK,KAAO,KACrCvB,EAASwB,IACN,UAAY/H,EAAK4H,WAAWrB,EAASwB,KAAO,IAC5C,KACHT,EACG,WAAaA,EAAU,IACvB,IAND,6BASFnB,EACG,oCACsBnG,EAAK4H,WAAW+Y,GADtC,gBAEqB3gB,EAAK4H,WAAW8Y,GAFrC,WAIe1gB,EAAK4H,WAAWzB,GAJ/B,gBAMA,KACHI,EAASsB,MACN,yBACI7H,EAAK4H,WAAWrB,EAASsB,OACzB,SACJ,IACJ,UAOCX,EACG,gDACA,IACJ,QAKRyY,EAAsB9e,UAAUyf,sBAAwB,SAAU3X,GAC9D,IAAI8C,EACAuV,EACA7f,EAGJ,GAFAsK,EAASwV,EAAmBtY,GAC5BuY,EAAuBzV,GAClBuV,EAASvV,EAAO,GAAK,CACtB,IAAKtK,EAAI,EAAGA,EAAI6f,EAAO1f,OAAQH,IAC3BggB,EAAwBH,EAAO7f,IAEnC,IAAKA,EAAI,EAAGA,EAAI6f,EAAO1f,OAAQH,IAC3BpB,KAAKqhB,sBAAsBJ,EAAO7f,GAAI,EAAG,KAYrDwe,EAAsB9e,UAAUugB,sBAAwB,SAAUnb,EAAKob,EAAwBC,GAC3F,IACIngB,EADAogB,EAActb,EAAIsb,YAEtB,QAAyBlc,IAArBY,EAAIub,aAmBJ,IAlBKD,EAAYjgB,QAMbvB,KAAK0hB,gBAAgBF,GAGrBxhB,KAAKqhB,sBAAsBG,EAAY,GAAIF,EAAyB,EAAGC,GACvErb,EAAIub,aAAeD,EAAY,GAAGG,eARlCzb,EAAIub,aAAe,EAWvBvb,EAAIyb,cAAgBzb,EAAIub,cACnBvb,EAAIub,aAAeF,IACfD,EAAyB,GAG7BlgB,EAAI,EAAGA,EAAIogB,EAAYjgB,OAAQH,IAChCpB,KAAKqhB,sBAAsBG,EAAYpgB,GAAI,EAAG8E,EAAIub,eAI9D7B,EAAsB9e,UAAU4gB,gBAAkB,SAAUF,GACxD,IAAII,EAAOJ,EAAYK,IAAIC,GACvBC,EAAQ,CAER,CAAEC,MAAO,kBAAmBC,OAAQ,GAEpC,CAAED,MAAO,gBAAiBC,MAAO,IACnC/J,OAAOlY,KAAKsG,QAAQkN,KAAK0O,iBAI3B,OAHAN,EAAK9V,MAAK,SAAUqW,EAAMC,GACtB,OAAOniB,EAAKoiB,oBAAoBF,EAAMC,EAAML,MAEzCH,EAAKC,KAAI,SAAUS,GACtB,OAAOA,EAAEC,SAKjB3C,EAAsB9e,UAAU4f,aAAe,SAAU9X,GACrD,IAAK,IAAIyH,EAAK,EAAGC,EAAS1H,EAAMyH,EAAKC,EAAO/O,OAAQ8O,IAAM,CACtD,IAAInK,EAAMoK,EAAOD,GACjBpQ,EAAK4F,WAAWK,EAAI3C,GAAIvD,KAAKwiB,eAAetc,IACxCA,EAAI2F,MAAQ,GACZ3F,EAAI3C,GAAG4T,UAAUc,IAAI,4BAIrB/R,EAAIK,WAAWE,IAAIqB,OAAS5B,EAAIR,OAASQ,EAAI/B,IAAM,IACnD+B,EAAI3C,GAAG4T,UAAUc,IAAI,cAMjC2H,EAAsB9e,UAAU0hB,eAAiB,SAAUtc,GACvD,IAKI9B,EACAmB,EANAkd,EAAgBziB,KAAKsG,QAAQ7D,QAAQigB,iBACrCf,EAAgBzb,EAAIyb,cACpBF,EAAevb,EAAIub,aACnBjT,EAAQxO,KAAK6f,SAAS8C,uBAAuBzc,GAC7CkE,EAAQpK,KAAK6f,SAASzV,MAsB1B,OAnBIqY,IAEAhB,EAAe5e,KAAK4C,IAAI,EAAGkc,EAAiD,GAAhCF,EAAeE,KAE3DvX,GACAhG,EAAO,EAAIqd,EACXlc,EAAQoc,IAGRvd,EAAOud,EACPpc,EAAQ,EAAIkc,GAEhBjT,EAAMoU,OAAS1c,EAAI2F,MAAQ,EAC3B2C,EAAMpK,KAAc,IAAPA,EAAa,IAC1BoK,EAAMjJ,MAAgB,IAARA,EAAc,IACxBkd,GAAiBvc,EAAI2c,kBAErBrU,EAAMpE,EAAQ,aAAe,eAAiB,IAE3CoE,GAEJoR,EArP+B,CAsPxC3f,EAAKuI,iBAGP,SAAS0Y,EAAmBtY,GACxB,IACIxH,EACA8E,EACA+D,EAHAyB,EAAS,GAIb,IAAKtK,EAAI,EAAGA,EAAIwH,EAAKrH,OAAQH,IAAK,CAG9B,IAFA8E,EAAM0C,EAAKxH,GAEN6I,EAAI,EAAGA,EAAIyB,EAAOnK,OAAQ0I,IAC3B,IAAK6Y,EAAyB5c,EAAKwF,EAAOzB,IAAI1I,OAC1C,MAGR2E,EAAI2F,MAAQ5B,GACXyB,EAAOzB,KAAOyB,EAAOzB,GAAK,KAAKN,KAAKzD,GAEzC,OAAOwF,EAIX,SAASyV,EAAuBzV,GAC5B,IAAItK,EACAyK,EACA5B,EACA/D,EACA6c,EACJ,IAAK3hB,EAAI,EAAGA,EAAIsK,EAAOnK,OAAQH,IAE3B,IADAyK,EAAQH,EAAOtK,GACV6I,EAAI,EAAGA,EAAI4B,EAAMtK,OAAQ0I,IAG1B,IAFA/D,EAAM2F,EAAM5B,GACZ/D,EAAIsb,YAAc,GACbuB,EAAI3hB,EAAI,EAAG2hB,EAAIrX,EAAOnK,OAAQwhB,IAC/BD,EAAyB5c,EAAKwF,EAAOqX,GAAI7c,EAAIsb,aAO7D,SAASJ,EAAwBlb,GAC7B,IAEI9E,EACA4hB,EAHAxB,EAActb,EAAIsb,YAClBqB,EAAkB,EAGtB,QAA4Bvd,IAAxBY,EAAI2c,gBAA+B,CACnC,IAAKzhB,EAAI,EAAGA,EAAIogB,EAAYjgB,OAAQH,IAChC4hB,EAAaxB,EAAYpgB,GAEzBggB,EAAwB4B,GAGxBH,EAAkBhgB,KAAK+C,IAAIid,EAAiB,EAAIG,EAAWH,iBAE/D3c,EAAI2c,gBAAkBA,GAK9B,SAASC,EAAyB5c,EAAK8F,EAAWiX,QAC9B,IAAZA,IAAsBA,EAAU,IACpC,IAAK,IAAI7hB,EAAI,EAAGA,EAAI4K,EAAUzK,OAAQH,IAC9B8hB,EAAmBhd,EAAK8F,EAAU5K,KAClC6hB,EAAQtZ,KAAKqC,EAAU5K,IAG/B,OAAO6hB,EAGX,SAASC,EAAmBC,EAAMC,GAC9B,OAAOD,EAAKzd,OAAS0d,EAAKjf,KAAOgf,EAAKhf,IAAMif,EAAK1d,OAErD,SAASoc,EAA2B5b,GAChC,IAAImd,EAAMpjB,EAAKqjB,mBAAmBpd,GAGlC,OAFAmd,EAAIR,gBAAkB3c,EAAI2c,gBAC1BQ,EAAI1B,cAAgBzb,EAAIyb,cACjB0B,EAGX,IAAIE,EAAwC,SAAU5hB,GAElD,SAAS4hB,IACL,OAAkB,OAAX5hB,GAAmBA,EAAOF,MAAMzB,KAAMsB,YAActB,KAmB/D,OArBAW,EAAU4iB,EAAwB5hB,GAIlC4hB,EAAuBziB,UAAU6H,WAAa,SAAUC,EAAMzC,GAC1DnG,KAAKigB,UAAYjgB,KAAK6f,SAASK,eAAetX,GAC9C5I,KAAK6f,SAASM,gBAAgBngB,KAAKigB,UAAWjgB,KAAK6f,SAAS2D,oBAC5DxjB,KAAKoM,UAAYjG,EAAWiG,WAEhCmX,EAAuBziB,UAAU0hB,eAAiB,SAAUtc,GACxD,IAAIsI,EAAQ7M,EAAOb,UAAU0hB,eAAehhB,KAAKxB,KAAMkG,GACnDkG,EAAYpM,KAAKoM,UACrB,GAAIA,GAAaA,EAAUrC,MAAQ7D,EAAI6D,IAAK,CACxC,IAAI0Z,EAAiB9hB,EAAOb,UAAU0hB,eAAehhB,KAAKxB,KAAMoM,GAChEoC,EAAMpK,KAAOqf,EAAerf,KAC5BoK,EAAMjJ,MAAQke,EAAele,MAC7BiJ,EAAMkV,WAAaD,EAAeC,WAClClV,EAAMmV,YAAcF,EAAeE,YAEvC,OAAOnV,GAEJ+U,EAtBgC,CAuBzC3D,GAEEgE,EAAsC,SAAUjiB,GAEhD,SAASiiB,EAAqB/D,GAC1B,IAAI3c,EAAQvB,EAAOH,KAAKxB,KAAM6f,EAASvZ,UAAYtG,KAEnD,OADAkD,EAAM2c,SAAWA,EACV3c,EA0BX,OA9BAvC,EAAUijB,EAAsBjiB,GAMhCiiB,EAAqB9iB,UAAU6H,WAAa,SAAUiE,EAAMhE,GACxD,IACIib,EADAhE,EAAW7f,KAAK6f,SAapB,MAVa,YAATjT,EACAiX,EAAehE,EAASiE,eAEV,kBAATlX,EACLiX,EAAehE,EAASkE,qBAEV,cAATnX,IACLiX,EAAehE,EAASmE,uBAE5BnE,EAASM,gBAAgBN,EAASK,eAAetX,GAAOib,GACjDjb,EAAKiZ,KAAI,SAAU3b,GACtB,OAAOA,EAAI3C,OAGnBqgB,EAAqB9iB,UAAUuf,gBAAkB,SAAUzX,GACvD5I,KAAK6f,SAASS,oBAAoB1X,IAEtCgb,EAAqB9iB,UAAU0f,eAAiB,SAAU5X,GACtD5I,KAAK6f,SAASY,mBAAmB7X,IAE9Bgb,EA/B8B,CAgCvC3jB,EAAKmN,cAMH6W,EAA6B,CAC7B,CAAEC,MAAO,GACT,CAAEC,QAAS,IACX,CAAEA,QAAS,IACX,CAAEC,QAAS,IACX,CAAEA,QAAS,KAEXC,EAA0B,SAAU1iB,GAEpC,SAAS0iB,EAAS/d,EAAS/C,EAAI8H,GAC3B,IAAInI,EAAQvB,EAAOH,KAAKxB,KAAMsG,EAAS/C,IAAOvD,KAC9CkD,EAAMohB,kBAAmB,EACzBphB,EAAMqhB,iBAAkB,EACxBrhB,EAAMshB,YAAcvkB,EAAKwN,iBAAiBvK,EAAMuhB,cAChD,IAAInX,EAAgBpK,EAAMoK,cAAgB,IAAIsS,EAAsB1c,GAChE6O,EAAe7O,EAAM6O,aAAe,IAAI6R,EAAqB1gB,GACjEA,EAAM8O,eAAiB,IAAIuR,EAAuBrgB,GAClD,IAAIwhB,EAAgBxhB,EAAMwhB,cAAgBzkB,EAAKwN,iBAAiBvK,EAAMyhB,eAAgBzhB,EAAM0hB,kBAiB5F,OAhBA1hB,EAAMkP,oBAAsBnS,EAAKwN,iBAAiBsE,EAAapF,WAAWiB,KAAKmE,EAAc,iBAAkBA,EAAalE,SAASD,KAAKmE,EAAc,iBAAkB,CAAC2S,IAC3KxhB,EAAMmP,oBAAsBpS,EAAKwN,iBAAiBvK,EAAM2hB,qBAAsB3hB,EAAM4hB,uBAAwB,CAACJ,IAC7GxhB,EAAMyK,eAAiB1N,EAAKwN,iBAAiBH,EAAcX,WAAWiB,KAAKN,GAAgBA,EAAcO,SAASD,KAAKN,GAAgB,CAACoX,IACxIxhB,EAAMoP,eAAiBrS,EAAKwN,iBAAiBsE,EAAapF,WAAWiB,KAAKmE,EAAc,WAAYA,EAAalE,SAASD,KAAKmE,EAAc,WAAY,CAAC2S,IAC1JxhB,EAAM4K,qBAAuB7N,EAAKwN,iBAAiBH,EAAcS,mBAAmBH,KAAKN,GAAgBA,EAAcU,qBAAqBJ,KAAKN,GAAgB,CAACpK,EAAMyK,iBACxKzK,EAAM+K,gBAAkBhO,EAAKwN,iBAAiBvK,EAAMqP,iBAAkBrP,EAAMsP,mBAAoB,CAACkS,IACjGxhB,EAAMkL,kBAAoBnO,EAAKwN,iBAAiBvK,EAAMuP,mBAAoBvP,EAAMwP,qBAAsB,CAACgS,IACvGxhB,EAAM6hB,iBACNxhB,EAAG4L,UACC,8EAE+BjM,EAAM6L,MAAMK,SAAS,gBAAkB,4BAC1ElM,EAAM8hB,kBAAoBzhB,EAAG2F,cAAc,UAC3ChG,EAAM+hB,gBAAkB1hB,EAAG2F,cAAc,aACzChG,EAAMgiB,aAAe3hB,EAAG2F,cAAc,eACtChG,EAAMmI,YAAcA,EACbnI,EAqaX,OA/bAvC,EAAU0jB,EAAU1iB,GA+BpB0iB,EAASvjB,UAAUikB,eAAiB,WAChC,IAEII,EACAC,EAHAC,EAAerlB,KAAKkP,IAAI,gBACxBoW,EAAetlB,KAAKkP,IAAI,gBAG5BmW,EAAeplB,EAAKslB,eAAeF,GACnCC,EAAeA,EAAerlB,EAAKslB,eAAeD,GAAgBD,EAClEF,EAAellB,EAAKulB,qBAAqBH,EAAcC,GAClC,OAAjBH,IACAG,EAAeD,EACfF,EAAe,GAGnBnlB,KAAKqlB,aAAeA,EACpBrlB,KAAKslB,aAAeA,EACpBtlB,KAAKmlB,aAAeA,EAGpBC,EAAQplB,KAAKkP,IAAI,mBACb1O,MAAMilB,QAAQL,KACdA,EAAQA,EAAMA,EAAM7jB,OAAS,IAEjCvB,KAAK0lB,YAAczlB,EAAKgP,gBAAgBmW,GAAS,CAC7Cjd,KAAM,UACNC,OAAQ,UACRC,gBAAgB,EAChBC,SAAU,UAEd8c,EAAQplB,KAAKkP,IAAI,qBACjBlP,KAAK2lB,cAAgBP,EACjBnlB,EAAKslB,eAAeH,GACpBplB,KAAK4lB,qBAAqBP,IAGlChB,EAASvjB,UAAU8kB,qBAAuB,SAAUP,GAChD,IAAIjkB,EACAukB,EACAE,EAEJ,IAAKzkB,EAAI6iB,EAA2B1iB,OAAS,EAAGH,GAAK,EAAGA,IAGpD,GAFAukB,EAAgB1lB,EAAKslB,eAAetB,EAA2B7iB,IAC/DykB,EAAgB5lB,EAAKulB,qBAAqBG,EAAeN,GACnC,OAAlBQ,GAA0BA,EAAgB,EAC1C,OAAOF,EAGf,OAAON,GAIXhB,EAASvjB,UAAU8C,OAAS,SAAU4K,GAClC,IAAImC,EAAQnC,EAAMmC,MAClB3Q,KAAKmK,OAASwG,EAAMpP,OACpBvB,KAAKwkB,YAAYhW,EAAMsC,aACvB9Q,KAAK0kB,cAAclW,EAAMmC,MAAOnC,EAAMsC,aACtC9Q,KAAKoS,oBAAoB5D,EAAMoE,kBAC/B5S,KAAKqS,oBAAoB7D,EAAMqE,mBAC/B7S,KAAK2N,eAAea,EAAMuE,aAC1B/S,KAAKsS,eAAe9D,EAAMsE,aAC1B9S,KAAK8N,qBAAqBU,EAAMG,gBAChC3O,KAAKiO,gBAAgBO,EAAMwE,WAC3BhT,KAAKoO,kBAAkBI,EAAMyE,cAEjCoR,EAASvjB,UAAU8D,QAAU,WACzBjD,EAAOb,UAAU8D,QAAQpD,KAAKxB,MAE9BA,KAAKwkB,YAAY3W,WACjB7N,KAAK0kB,cAAc7W,YAEvBwW,EAASvjB,UAAUuU,WAAa,SAAUC,GACtC,IAAI7J,EAAKzL,KAAM+R,EAAetG,EAAGsG,aAAczE,EAAgB7B,EAAG6B,cAAe0E,EAAiBvG,EAAGuG,gBACjGsD,GAAYtV,KAAKskB,oBACjBtkB,KAAK8lB,qBACL9lB,KAAKskB,kBAAmB,IAExBhP,GAAYtV,KAAKukB,mBACjBvkB,KAAKuV,oBACLvV,KAAKukB,iBAAkB,GAE3BxS,EAAa0D,aAAaH,GAC1BhI,EAAcmI,aAAaH,GAC3BtD,EAAeyD,aAAaH,GAC5BvD,EAAa2D,YAAYJ,GACzBhI,EAAcoI,YAAYJ,GAC1BtD,EAAe0D,YAAYJ,IAE/B+O,EAASvjB,UAAU2jB,aAAe,SAAU3T,GACxC,IAAI/B,EAAQ/O,KAAK+O,MACjB/O,KAAKilB,gBAAgB9V,UACjB,iBAAmBJ,EAAMK,SAAS,aAAe,KAC7CpP,KAAK+lB,kBAAkBjV,GACvB,WACR9Q,KAAKgmB,QAAU/lB,EAAK2T,aAAa5T,KAAKilB,gBAAiB,MACvDjlB,KAAKimB,cAAgB,IAAIhmB,EAAK8T,cAAc/T,KAAKuD,GAAIvD,KAAKgmB,SAAS,GAAO,GAE1EhmB,KAAKskB,kBAAmB,GAG5BD,EAASvjB,UAAUilB,kBAAoB,SAAUjV,GAC7C,IAKIoV,EACAC,EACAC,EAPA3a,EAAKzL,KAAMiC,EAAUwJ,EAAGxJ,QAAS8M,EAAQtD,EAAGsD,MAAO3E,EAAQqB,EAAGrB,MAC9DsJ,EAAO,GACP+F,EAAWxZ,EAAKomB,WAAWvV,EAAY5O,YAAYC,OACnDmkB,EAAWxV,EAAYyV,QACvBC,EAAevmB,EAAKslB,eAAe,GAKvC,MAAOtlB,EAAKwmB,UAAUH,GAAYrmB,EAAKwmB,UAAU3V,EAAY4V,SACzDR,EAAWjkB,EAAQgW,IAAIwB,EAAU6M,GACjCH,EAA4E,OAAhElmB,EAAKulB,qBAAqBgB,EAAcxmB,KAAK2lB,eACzDS,EACI,8BAAgCrX,EAAMK,SAAS,iBAAmB,MAC7D+W,EACG,SACIlmB,EAAK4H,WAAW5F,EAAQ+M,OAAOkX,EAAUlmB,KAAK0lB,cAC9C,UACJ,IACJ,QACRhS,GACI,kBAAoBzT,EAAK0mB,oBAAoBT,GAAY,KACpDC,EAAY,GAAK,qBAClB,KACE/b,EAAmB,GAAXgc,GACV,cAAgBrX,EAAMK,SAAS,iBAAmB,WACjDhF,EAAQgc,EAAW,IACpB,QACRE,EAAWrmB,EAAK2mB,aAAaN,EAAUtmB,KAAKqlB,cAC5CmB,EAAevmB,EAAK2mB,aAAaJ,EAAcxmB,KAAKqlB,cAExD,OAAO3R,GAEX2Q,EAASvjB,UAAU6jB,eAAiB,SAAUhU,EAAOG,GACjD,IAAI/B,EAAQ/O,KAAK+O,MACbqF,EAAQ,IAAIuL,EAAQnP,SAASxQ,KAAKsG,SACtCtG,KAAKglB,kBAAkB7V,UACnB,iBAAmBJ,EAAMK,SAAS,aAAe,KAC7CgF,EAAM3D,WAAW,CACbE,MAAOA,EACPG,YAAaA,EACbxF,gBAAiBtL,KAAKqL,YAAYgJ,oBAEtC,WACRrU,KAAK6mB,OAAS5mB,EAAK2T,aAAa5T,KAAKuD,GAAI,6BACrCvD,KAAKoK,OACLpK,KAAK6mB,OAAO7V,UAEhBhR,KAAKgU,aAAe,IAAI/T,EAAK8T,cAAc/T,KAAKuD,GAAIvD,KAAK6mB,QAAQ,GACjE,GACA7mB,KAAK8mB,wBACL9mB,KAAKukB,iBAAkB,GAE3BF,EAASvjB,UAAU8jB,iBAAmB,WAClC5kB,KAAK+mB,2BAKT1C,EAASvjB,UAAUgmB,sBAAwB,WACvC,IACIva,EADAmE,EAAQ,GAEZA,EAAM/G,KAAK3J,KAAKqL,YAAYC,mBAC5B,IAAK,IAAIlK,EAAI,EAAGA,EAAIpB,KAAKmK,OAAQ/I,IAC7BsP,EAAM/G,KAAK,0QAUX3J,KAAKoK,OACLsG,EAAMM,UAEVzE,EAAavM,KAAKgnB,kBAAoB/mB,EAAKuM,cAAc,+CAE5CkE,EAAM3I,KAAK,IAFiC,uBAKzD/H,KAAKinB,gBAAkBhnB,EAAK2T,aAAarH,EAAY,mBACrDvM,KAAKwjB,mBAAqBvjB,EAAK2T,aAAarH,EAAY,wBACxDvM,KAAKogB,eAAiBngB,EAAK2T,aAAarH,EAAY,iDACpDvM,KAAK8jB,eAAiB7jB,EAAK2T,aAAarH,EAAY,yBACpDvM,KAAKgkB,sBAAwB/jB,EAAK2T,aAAarH,EAAY,2BAC3DvM,KAAK+jB,qBAAuB9jB,EAAK2T,aAAarH,EAAY,0BACtDvM,KAAKoK,QACLpK,KAAKinB,gBAAgBjW,UACrBhR,KAAKwjB,mBAAmBxS,UACxBhR,KAAKogB,eAAepP,UACpBhR,KAAK8jB,eAAe9S,UACpBhR,KAAKgkB,sBAAsBhT,UAC3BhR,KAAK+jB,qBAAqB/S,WAE9BhR,KAAKuD,GAAGgB,YAAYgI,IAExB8X,EAASvjB,UAAUimB,wBAA0B,WACzC9mB,EAAK4E,cAAc7E,KAAKgnB,oBAG5B3C,EAASvjB,UAAUof,eAAiB,SAAUtX,GAC1C,IACIxH,EADA6e,EAAY,GAEhB,IAAK7e,EAAI,EAAGA,EAAIpB,KAAKmK,OAAQ/I,IACzB6e,EAAUtW,KAAK,IAEnB,IAAKvI,EAAI,EAAGA,EAAIwH,EAAKrH,OAAQH,IACzB6e,EAAUrX,EAAKxH,GAAG2I,KAAKJ,KAAKf,EAAKxH,IAErC,OAAO6e,GAIXoE,EAASvjB,UAAUqf,gBAAkB,SAAUF,EAAW4D,GACtD,IAAI9Z,EACAnB,EACAxH,EACJ,IAAK2I,EAAM,EAAGA,EAAM/J,KAAKmK,OAAQJ,IAE7B,IADAnB,EAAOqX,EAAUlW,GACZ3I,EAAI,EAAGA,EAAIwH,EAAKrH,OAAQH,IACzByiB,EAAa9Z,GAAKxF,YAAYqE,EAAKxH,GAAGmC,KAMlD8gB,EAASvjB,UAAUomB,oBAAsB,WACrC,MAAO,UAEX7C,EAASvjB,UAAUqmB,mBAAqB,SAAUve,EAAM6F,GAEpD,GAAKzO,KAAKinB,gBAAV,CAGA,IAEI7lB,EAFA+C,EAAMnE,KAAKonB,eAAe3Y,GAC1B4Y,EAAQ,GAGZ,IAAKjmB,EAAI,EAAGA,EAAIwH,EAAKrH,OAAQH,IAAK,CAC9B,IAAIkmB,EAASrnB,EAAKgE,cAAc,MAAO,CAAEC,UAAW,2CACpDojB,EAAOzjB,MAAMM,IAAMA,EAAM,KACzBnE,KAAKinB,gBAAgBre,EAAKxH,GAAG2I,KAAKxF,YAAY+iB,GAC9CD,EAAM1d,KAAK2d,GAGf,GAAI1e,EAAKrH,OAAS,EAAG,CACjB,IAAIgmB,EAAUtnB,EAAKgE,cAAc,MAAO,CAAEC,UAAW,4CACrDqjB,EAAQ1jB,MAAMM,IAAMA,EAAM,KAC1BnE,KAAKgnB,kBAAkBziB,YAAYgjB,GACnCF,EAAM1d,KAAK4d,GAEfvnB,KAAKwnB,gBAAkBH,IAE3BhD,EAASvjB,UAAU2mB,qBAAuB,WAClCznB,KAAKwnB,kBACLxnB,KAAKwnB,gBAAgBxe,QAAQ/I,EAAK4E,eAClC7E,KAAKwnB,gBAAkB,OAK/BnD,EAASvjB,UAAU4mB,mBAAqB,WACpC,OAAO1nB,KAAKilB,gBAAgB0C,cAIhCtD,EAASvjB,UAAUsmB,eAAiB,SAAUQ,EAAMC,GAIhD,OAHKA,IACDA,EAAiB5nB,EAAKomB,WAAWuB,IAE9B5nB,KAAK8nB,eAAeF,EAAKrlB,UAAYslB,EAAetlB,YAG/D8hB,EAASvjB,UAAUgnB,eAAiB,SAAUC,GAC1C,IAGIC,EACAC,EAJAC,EAAMloB,KAAKgmB,QAAQzkB,OACnBuP,EAAc9Q,KAAKwO,MAAMsC,YACzBqX,GAAgBJ,EAAS9nB,EAAKwmB,UAAU3V,EAAYyV,UAAYtmB,EAAKwmB,UAAUzmB,KAAKqlB,cAexF,OATA8C,EAAetlB,KAAK+C,IAAI,EAAGuiB,GAC3BA,EAAetlB,KAAK4C,IAAIyiB,EAAKC,GAG7BH,EAAYnlB,KAAKulB,MAAMD,GACvBH,EAAYnlB,KAAK4C,IAAIuiB,EAAWE,EAAM,GAGtCD,EAAgBE,EAAeH,EACxBhoB,KAAKimB,cAAc5P,KAAK2R,GAC3BhoB,KAAKimB,cAAcoC,UAAUL,GAAaC,GAGlD5D,EAASvjB,UAAUwf,oBAAsB,SAAU1X,GAC/C,IACIxH,EACA8E,EACAsT,EAHA8O,EAAiBtoB,KAAKkP,IAAI,0BAI9B,IAAK9N,EAAI,EAAGA,EAAIwH,EAAKrH,OAAQH,IACzB8E,EAAM0C,EAAKxH,GACXoY,EAAUxZ,KAAKwO,MAAMmC,MAAMzK,EAAI6D,KAAK0E,KACpCvI,EAAI/B,IAAMnE,KAAKonB,eAAelhB,EAAI/D,MAAOqX,GACzCtT,EAAIR,OAAS7C,KAAK+C,IAAIM,EAAI/B,IAAMmkB,EAAgBtoB,KAAKonB,eAAelhB,EAAI9D,IAAKoX,KAKrF6K,EAASvjB,UAAU2f,mBAAqB,SAAU7X,GAC9C,IAAIxH,EACA8E,EACJ,IAAK9E,EAAI,EAAGA,EAAIwH,EAAKrH,OAAQH,IACzB8E,EAAM0C,EAAKxH,GACXnB,EAAK4F,WAAWK,EAAI3C,GAAIvD,KAAK2iB,uBAAuBzc,KAI5Dme,EAASvjB,UAAU6hB,uBAAyB,SAAUzc,GAClD,MAAO,CACH/B,IAAK+B,EAAI/B,IACTuB,QAASQ,EAAIR,SAKrB2e,EAASvjB,UAAUyU,kBAAoB,WACnCvV,KAAKgU,aAAa2B,SAEtB0O,EAASvjB,UAAUglB,mBAAqB,WACpC9lB,KAAKimB,cAActQ,SAIvB0O,EAASvjB,UAAU+U,cAAgB,SAAUrG,EAAcC,GACvD,IAAIhE,EAAKzL,KAAMiC,EAAUwJ,EAAGxJ,QAASkjB,EAAe1Z,EAAG0Z,aAAcc,EAAgBxa,EAAGwa,cAAejS,EAAevI,EAAGuI,aACrHuU,EAAWvU,EAAagC,YAAYxG,GACpCwY,EAAY/B,EAAchQ,WAAWxG,GACzC,GAAgB,MAAZ8Y,GAAiC,MAAbP,EAAmB,CACvC,IAAIQ,EAAUvC,EAAc5P,KAAK2R,GAC7BS,EAAaxC,EAAcoC,UAAUL,GACrCU,GAAWjZ,EAAc+Y,GAAWC,EACpCE,EAAiB9lB,KAAKulB,MAAMM,EAAUvD,GACtCyD,EAAYZ,EAAY7C,EAAewD,EACvCnP,EAAUxZ,KAAKwO,MAAMmC,MAAM4X,GAAU9Z,KACrCoa,EAAO5oB,EAAK2mB,aAAa5mB,KAAKwO,MAAMsC,YAAYyV,QAAStmB,EAAK6oB,iBAAiB9oB,KAAKslB,aAAcsD,IAClGzmB,EAAQF,EAAQgW,IAAIuB,EAASqP,GAC7BzmB,EAAMH,EAAQgW,IAAI9V,EAAOnC,KAAKslB,cAClC,MAAO,CACHvb,IAAKwe,EACL1Y,SAAU,CACNC,MAAO,CAAE3N,MAAOA,EAAOC,IAAKA,GAC5BwE,QAAQ,GAEZoJ,MAAOhQ,KAAK6mB,OAAO0B,GACnBrS,aAAc,CACV9R,KAAM4P,EAAamC,MAAMoS,GACzBhjB,MAAOyO,EAAaoC,OAAOmS,GAC3BpkB,IAAKqkB,EACL9iB,OAAQ8iB,EAAUC,MAOlCpE,EAASvjB,UAAUyR,iBAAmB,SAAU+D,GACxCA,IACAtW,KAAKsN,cAAcY,WAAWoI,EAAM/C,mBAChC+C,EAAMyS,QACN/oB,KAAKgS,eAAerF,WAAW2J,EAAM1N,KAAM,CAAEogB,YAAY,EAAM5c,UAAWkK,EAAMlK,YAGhFpM,KAAK+R,aAAapF,WAAW,YAAa2J,EAAM1N,QAI5Dyb,EAASvjB,UAAU0R,mBAAqB,SAAU8D,GAC1CA,IACAtW,KAAKsN,cAAca,WAAWmI,EAAM/C,mBACpCvT,KAAKgS,eAAenE,SAASyI,EAAM1N,KAAM,CAAEogB,YAAY,EAAM5c,UAAWkK,EAAMlK,YAC9EpM,KAAK+R,aAAalE,SAAS,eAKnCwW,EAASvjB,UAAU2R,mBAAqB,SAAU6D,GAC1CA,IACAtW,KAAKsN,cAAcY,WAAWoI,EAAM/C,mBACpCvT,KAAKgS,eAAerF,WAAW2J,EAAM1N,KAAM,CAAE2N,YAAY,EAAMnK,UAAWkK,EAAMlK,cAGxFiY,EAASvjB,UAAU4R,qBAAuB,SAAU4D,GAC5CA,IACAtW,KAAKsN,cAAca,WAAWmI,EAAM/C,mBACpCvT,KAAKgS,eAAenE,SAASyI,EAAM1N,KAAM,CAAE2N,YAAY,EAAMnK,UAAWkK,EAAMlK,cAMtFiY,EAASvjB,UAAU+jB,qBAAuB,SAAUjc,GAC5CA,IACI5I,KAAKkP,IAAI,gBACTlP,KAAKgS,eAAerF,WAAW/D,EAAM,CAAEqgB,aAAa,IAGpDjpB,KAAK+R,aAAapF,WAAW,YAAa/D,KAItDyb,EAASvjB,UAAUgkB,uBAAyB,SAAUlc,GAClD5I,KAAKgS,eAAenE,SAASjF,EAAM,CAAEqgB,aAAa,IAClDjpB,KAAK+R,aAAalE,SAAS,cAExBwW,EAhckB,CAic3BpkB,EAAKkQ,eAEH+Y,EAAgC,SAAUvnB,GAE1C,SAASunB,IACL,OAAkB,OAAXvnB,GAAmBA,EAAOF,MAAMzB,KAAMsB,YAActB,KA2B/D,OA7BAW,EAAUuoB,EAAgBvnB,GAI1BunB,EAAepoB,UAAUqoB,WAAa,WAClC,MAAO,CACHviB,OAAQ,GACRwiB,MAAO,KAGfF,EAAepoB,UAAUuoB,mBAAqB,SAAUxZ,GACpD,OAAIA,EAASjJ,OACF,CAAC,UAGD,CAAC,UAGhBsiB,EAAepoB,UAAUwoB,mBAAqB,SAAU9iB,GACpD,OAAKA,EAASI,OAGL3G,EAAKspB,eAAe/iB,GAClB,CAAC,QAAS,UAGV,CAAC,UAND,CAAC,UAST0iB,EA9BwB,CA+BjCjpB,EAAKupB,UAEHC,EAA+B,EAC/BC,EAAqBzpB,EAAKgP,gBAAgB,CAAE0C,KAAM,UAKlDgY,EAA8B,SAAUhoB,GAExC,SAASgoB,EAAarjB,EAAS+T,EAAUC,EAAsBhW,GAC3D,IAAIpB,EAAQvB,EAAOH,KAAKxB,KAAMsG,EAAS+T,EAAUC,EAAsBhW,IAAatE,KACpFkD,EAAM0mB,SAAW,IAAIV,EAIrBhmB,EAAMqX,oBAAsB,WACxB,IAGIsP,EAHApe,EAAKvI,EAAO6L,EAAQtD,EAAGsD,MAAO9M,EAAUwJ,EAAGxJ,QAC3C6N,EAAQ5M,EAAMsL,MAAMsC,YAAY5O,YAChC4nB,EAAS7pB,EAAK8pB,SAASja,EAAM3N,MAAO2N,EAAM1N,KAE9C,OAAIc,EAAMgM,IAAI,gBACV2a,EAAW5nB,EAAQ+M,OAAOc,EAAM3N,MAAOunB,GAEnC,qCAAuC3a,EAAMK,SAAS,gBAAkB,KAAOlM,EAAM8mB,gBAAkB,IACvG/pB,EAAKmV,oBACLlS,EAAO,CAAEuL,KAAMqB,EAAM3N,MAAOyK,KAAM,OAAQ+N,SAAUmP,EAAS,GAAK7pB,EAAK4H,WAAWgiB,IAElF,SAGG,sBAAwB9a,EAAMK,SAAS,gBAAkB,KAAOlM,EAAM8mB,gBAAkB,UAMvG9mB,EAAM+mB,0BAA4B,WAC9B,IAAIlb,EAAQ7L,EAAM6L,MAClB,MAAO,sBAAwBA,EAAMK,SAAS,iBAAmB,KAAOlM,EAAM8mB,gBAAkB,UAIpG9mB,EAAMgnB,wBAA0B,WAC5B,MAAO,uBAAyBhnB,EAAM8mB,gBAAkB,UAK5D9mB,EAAM0X,yBAA2B,WAC7B,IAAI7L,EAAQ7L,EAAM6L,MAClB,MACI,sBAAwBA,EAAMK,SAAS,iBAAmB,KAAOlM,EAAM8mB,gBADpE,UAGH/pB,EAAKkqB,cAAcjnB,GAHhB,gBASXA,EAAM2X,uBAAyB,WAC3B,MAAO,uBAAyB3X,EAAM8mB,gBAAkB,UAE5D9mB,EAAMK,GAAG4T,UAAUc,IAAI,oBACvB/U,EAAMK,GAAG4L,UAAYjM,EAAM4X,qBAC3B5X,EAAM6X,SAAW,IAAI9a,EAAK+a,gBAAgB,SAC1C,QAEA,IAAIoP,EAAiBlnB,EAAM6X,SAASxX,GACpCL,EAAMK,GAAG2F,cAAc,sBAAsB3E,YAAY6lB,GACzDA,EAAejT,UAAUc,IAAI,0BAC7B,IAAIoS,EAAapqB,EAAKgE,cAAc,MAAO,CAAEC,UAAW,iBAkBxD,OAjBAkmB,EAAe7lB,YAAY8lB,GAC3BnnB,EAAM2c,SAAW,IAAIwE,EAASnhB,EAAMoD,QAAS+jB,EAAY,CACrDhW,kBAAmBnR,EAAM+mB,0BACzB3e,gBAAiBpI,EAAMgnB,0BAEvBhnB,EAAMgM,IAAI,gBACVhM,EAAMwF,QAAU,IAAIiX,EAAQ/N,QAC5B1O,EAAMoD,QAASpD,EAAMK,GAAG2F,cAAc,gBAAiB,CACnD0L,sBAAuB1R,EAAM2X,uBAC7BxG,kBAAmBnR,EAAM0X,yBACzBtP,gBAAiBpI,EAAM2X,uBACvBnG,uBAAuB,EACvBD,wBAAwB,IAG5BvR,EAAMwF,QAAQmJ,mBAAqB3O,EAAMK,GAAG2F,cAAc,eAAeye,cAEtEzkB,EAqJX,OArOAvC,EAAUgpB,EAAchoB,GAkFxBgoB,EAAa7oB,UAAU8D,QAAU,WAC7BjD,EAAOb,UAAU8D,QAAQpD,KAAKxB,MAC9BA,KAAK6f,SAASjb,UACV5E,KAAK0I,SACL1I,KAAK0I,QAAQ9D,UAEjB5E,KAAK+a,SAASnW,WAMlB+kB,EAAa7oB,UAAUga,mBAAqB,WACxC,IAAI/L,EAAQ/O,KAAK+O,MACjB,MACI,iBAAmBA,EAAMK,SAAS,aAAe,MAChDpP,KAAKkP,IAAI,gBACN,2DAEsCH,EAAMK,SAAS,gBAFrD,6BAKA,IARD,yCAWaL,EAAMK,SAAS,iBAAmB,MACjDpP,KAAKkP,IAAI,cACN,wDAC+BH,EAAMK,SAAS,gBAAkB,OAChE,IAfD,8BAuBXua,EAAa7oB,UAAUomB,oBAAsB,WACzC,OAAOlnB,KAAK6f,SAASqH,uBAKzByC,EAAa7oB,UAAU2mB,qBAAuB,WAC1CznB,KAAK6f,SAAS4H,wBAIlBkC,EAAa7oB,UAAUuU,WAAa,SAAUC,EAAUgG,EAAYC,GAChE5Z,EAAOb,UAAUuU,WAAW7T,KAAKxB,KAAMsV,EAAUgG,EAAYC,GAC7Dvb,KAAK6f,SAASxK,WAAWC,GACrBtV,KAAK0I,SACL1I,KAAK0I,QAAQ2M,WAAWC,IAIhCqU,EAAa7oB,UAAU0a,eAAiB,SAAUlG,EAAUgG,EAAYC,GACpE,IACIF,EACAI,EACAC,EAHAxY,EAAQlD,KAQZ,GAHAA,KAAKsqB,UAAYrqB,EAAK4b,gBAAgB5b,EAAK2T,aAAa5T,KAAKuD,GAAI,aAG5DvD,KAAK6f,SAASgH,OAAnB,CAQA,IAAI0D,EAAiBtqB,EAAK2T,aAAa5T,KAAKuD,GAAI,WAAWsJ,QAAO,SAAUmL,GACxE,OAAQ9U,EAAM6X,SAASxX,GAAGC,SAASwU,MAGvChY,KAAK6f,SAASqF,aAAarhB,MAAMC,QAAU,OAC3C9D,KAAK+a,SAASe,QACdyO,EAAevhB,QAAQ/I,EAAK8b,oBAExB/b,KAAK0I,UACL1I,KAAK0I,QAAQU,mBACbiS,EAAarb,KAAKkP,IAAI,cAClBmM,GAAoC,kBAAfA,IACrBA,EAAaoO,GAEbpO,GACArb,KAAK0I,QAAQ+N,UAAU4E,IAG1BE,IACDE,EAAiBzb,KAAKgc,sBAAsBV,GAC5Ctb,KAAK+a,SAASmB,UAAUT,GACxBC,EAAkB1b,KAAK+a,SAASoB,sBAC5BT,EAAgBtX,MAAQsX,EAAgBnW,SAExCglB,EAAevhB,SAAQ,SAAU+N,GAC7B9W,EAAKmc,iBAAiBrF,EAAO2E,MAIjCD,EAAiBzb,KAAKgc,sBAAsBV,GAC5Ctb,KAAK+a,SAASmB,UAAUT,IAG5Bzb,KAAK+a,SAASsB,aAAaX,GAGvB1b,KAAK6f,SAAS6H,qBAAuBjM,IACrCzb,KAAK6f,SAASqF,aAAarhB,MAAMC,QAAU,UA5C1CyX,IACDE,EAAiBzb,KAAKgc,sBAAsBV,GAC5Ctb,KAAK+a,SAASmB,UAAUT,KA+CpCkO,EAAa7oB,UAAUkb,sBAAwB,SAAUV,GACrD,OAAOA,EACHrb,EAAKqc,sBAAsBtc,KAAKuD,GAAIvD,KAAK+a,SAASxX,KAK1DomB,EAAa7oB,UAAU2b,yBAA2B,WAC9C,IAAI+N,EAAavqB,EAAKslB,eAAevlB,KAAKkP,IAAI,eAC1C/K,EAAMnE,KAAK6f,SAASiI,eAAe0C,EAAWC,cAMlD,OAJAtmB,EAAMtB,KAAKC,KAAKqB,GACZA,GACAA,IAEG,CAAEA,IAAKA,IAElBwlB,EAAa7oB,UAAU4b,gBAAkB,WACrC,MAAO,CAAEvY,IAAKnE,KAAK+a,SAAS4B,iBAEhCgN,EAAa7oB,UAAU8b,gBAAkB,SAAUC,QAC5BvX,IAAfuX,EAAO1Y,KACPnE,KAAK+a,SAAS+B,aAAaD,EAAO1Y,MAI1CwlB,EAAa7oB,UAAUkpB,cAAgB,WACnC,OAAsB,MAAlBhqB,KAAKsqB,UACE,gBAAkBtqB,KAAKsqB,UAAY,MAEvC,IAEJX,EAtOsB,CAuO/B1pB,EAAK8c,MACP4M,EAAa7oB,UAAU4pB,gBAAiB,EAExC,IAAIC,EAAgC,SAAUhpB,GAE1C,SAASgpB,EAAerkB,EAASuZ,GAC7B,IAAI3c,EAAQvB,EAAOH,KAAKxB,KAAMsG,EAASuZ,EAAStc,KAAOvD,KAOvD,OANAkD,EAAM0nB,eAAiB3qB,EAAK6d,QAAQ8M,GACpC1nB,EAAMga,OAAS,IAAI2N,EACnB3nB,EAAM2c,SAAWA,EACjBvZ,EAAQ+H,SAASC,6BAA6BpL,EAAO,CACjDK,GAAIL,EAAM2c,SAAStc,KAEhBL,EA+BX,OAxCAvC,EAAUgqB,EAAgBhpB,GAW1BgpB,EAAe7pB,UAAU8D,QAAU,WAC/BjD,EAAOb,UAAU8D,QAAQpD,KAAKxB,MAC9BA,KAAKqO,SAASS,+BAA+B9O,OAEjD2qB,EAAe7pB,UAAU8C,OAAS,SAAU4K,GACxC,IAAIsC,EAActC,EAAMsC,YAAasM,EAAW5O,EAAM4O,SAClD0N,EAAY9qB,KAAK8qB,UAAY9qB,KAAK4qB,eAAexN,EAAUtM,EAAa9Q,KAAKiC,SACjFjC,KAAK6f,SAASvM,aAAatS,EAAS,GAAIhB,KAAKkd,OAAOG,WAAW7O,EAAOsC,EAAa,KAAM9Q,KAAK6f,SAAUiL,GAAY,CAAEha,YAAaA,EAAaH,MAAOyM,EAASzM,MAAM,OAE1Kga,EAAe7pB,UAAUqmB,mBAAqB,SAAU1Y,GACpDzO,KAAK6f,SAASsH,mBAAmBnnB,KAAKkd,OAAO6N,aAAatc,EAAMzO,KAAK6f,SAAU7f,KAAK8qB,WAAYrc,IAEpGkc,EAAe7pB,UAAUyO,SAAW,SAAUC,EAAcC,GACxD,IAAI8N,EAASvd,KAAK6f,SAAShK,cAAcrG,EAAcC,GACvD,GAAI8N,EACA,MAAO,CACH3N,UAAW5P,KAAK6f,SAChBhQ,SAAU0N,EAAO1N,SACjBG,MAAOuN,EAAOvN,MACdC,KAAM,CACF7L,KAAMmZ,EAAOrH,aAAa9R,KAC1BmB,MAAOgY,EAAOrH,aAAa3Q,MAC3BpB,IAAKoZ,EAAOrH,aAAa/R,IACzBuB,OAAQ6X,EAAOrH,aAAaxQ,QAEhCwK,MAAO,IAIZya,EAzCwB,CA0CjC1qB,EAAKkQ,eACP,SAASya,EAAexN,EAAUtM,EAAa7O,GAE3C,IADA,IAAI+oB,EAAS,GACJ3a,EAAK,EAAG5E,EAAK2R,EAASc,YAAa7N,EAAK5E,EAAGlK,OAAQ8O,IAAM,CAC9D,IAAI5B,EAAOhD,EAAG4E,GACd2a,EAAOrhB,KAAK,CACRxH,MAAOF,EAAQgW,IAAIxJ,EAAMqC,EAAYyV,SACrCnkB,IAAKH,EAAQgW,IAAIxJ,EAAMqC,EAAY4V,WAG3C,OAAOsE,EAEX,IAAIH,EAAgC,SAAUlpB,GAE1C,SAASkpB,IACL,OAAkB,OAAXlpB,GAAmBA,EAAOF,MAAMzB,KAAMsB,YAActB,KAkB/D,OApBAW,EAAUkqB,EAAgBlpB,GAI1BkpB,EAAe/pB,UAAU0c,WAAa,SAAU1N,EAAOgb,GAEnD,IADA,IAAIliB,EAAO,GACFmB,EAAM,EAAGA,EAAM+gB,EAAUvpB,OAAQwI,IAAO,CAC7C,IAAIkhB,EAAWhrB,EAAK8Z,gBAAgBjK,EAAOgb,EAAU/gB,IACjDkhB,GACAriB,EAAKe,KAAK,CACNxH,MAAO8oB,EAAS9oB,MAChBC,IAAK6oB,EAAS7oB,IACd4E,QAASikB,EAAS9oB,MAAMI,YAAcuN,EAAM3N,MAAMI,UAClD6E,MAAO6jB,EAAS7oB,IAAIG,YAAcuN,EAAM1N,IAAIG,UAC5CwH,IAAKA,IAIjB,OAAOnB,GAEJiiB,EArBwB,CAsBjC5qB,EAAKyd,QAEHwN,EAAgC,SAAUvpB,GAE1C,SAASgoB,EAAa/L,EAAUvD,EAAUC,EAAsBhW,GAC5D,IAAIpB,EAAQvB,EAAOH,KAAKxB,KAAM4d,EAAUvD,EAAUC,EAAsBhW,IAAatE,KASrF,OARAkD,EAAM2a,cAAgB5d,EAAK6d,QAAQD,GAC/B3a,EAAMgM,IAAI,kBACVhM,EAAM0Y,OAAS,IAAI3b,EAAK8d,UAAU7a,EAAMoD,QAASpD,EAAMK,GAAG2F,cAAc,wBAE5EhG,EAAMioB,eAAiB,IAAIR,EAAeznB,EAAMoD,QAASpD,EAAM2c,UAC3D3c,EAAMwF,UACNxF,EAAM8a,cAAgB,IAAI2B,EAAQ1C,cAAc/Z,EAAMoD,QAASpD,EAAMwF,UAElExF,EAmCX,OA9CAvC,EAAUgpB,EAAchoB,GAaxBgoB,EAAa7oB,UAAU8D,QAAU,WAC7BjD,EAAOb,UAAU8D,QAAQpD,KAAKxB,MAC1BA,KAAK4b,QACL5b,KAAK4b,OAAOhX,UAEhB5E,KAAKmrB,eAAevmB,UAChB5E,KAAKge,eACLhe,KAAKge,cAAcpZ,WAG3B+kB,EAAa7oB,UAAU8C,OAAS,SAAU4K,GACtC7M,EAAOb,UAAU8C,OAAOpC,KAAKxB,KAAMwO,GACnC,IAAIsC,EAAc9Q,KAAKwO,MAAMsC,YACzBsM,EAAWpd,KAAK6d,cAAc/M,EAAa9Q,KAAKsa,sBAChD8Q,EAAaprB,KAAK4pB,SAASwB,WAAW5c,GACtCxO,KAAK4b,QACL5b,KAAK4b,OAAOtI,aAAa,CACrBxC,YAAaA,EACbmN,MAAOb,EAASc,YAChBC,sBAAsB,EACtB7S,gBAAiBtL,KAAKua,sBAG9Bva,KAAKmrB,eAAe7X,aAAatS,EAAS,GAAIoqB,EAAW,SAAU,CAAEta,YAAaA,EAC9EsM,SAAUA,KACVpd,KAAKge,eACLhe,KAAKge,cAAc1K,aAAatS,EAAS,GAAIoqB,EAAW,UAAW,CAAEta,YAAaA,EAC9EsM,SAAUA,EAAUE,iBAAkBtd,KAAKsd,iBAAkB3K,SAAS,MAGlFgX,EAAa7oB,UAAUqmB,mBAAqB,SAAU1Y,GAClDzO,KAAKmrB,eAAehE,mBAAmB1Y,IAEpCkb,EA/CwB,CAgDjCA,GACF,SAAS9L,EAAc/M,EAAawJ,GAChC,IAAIkE,EAAY,IAAIve,EAAKwe,UAAU3N,EAAY5O,YAAaoY,GAC5D,OAAO,IAAIra,EAAKye,SAASF,GAAW,GAGxC,IAAIG,EAAO1e,EAAK2e,aAAa,CACzBC,YAAa,eACbC,MAAO,CACHe,SAAU,CACNwL,MAAOH,EACPI,YAAY,EACZjG,aAAc,WACd3C,kBAAkB,GAEtB6I,YAAa,CACT3e,KAAM,WACNoS,SAAU,CAAEC,KAAM,IAEtBuM,aAAc,CACV5e,KAAM,WACNoS,SAAU,CAAEG,MAAO,OAK/Bpf,EAAQ4pB,aAAeuB,EACvBnrB,EAAQ0rB,qBAAuB9B,EAC/B5pB,EAAQ8d,cAAgBA,EACxB9d,EAAQ6qB,eAAiBA,EACzB7qB,EAAQ8qB,eAAiBA,EACzB9qB,EAAQuf,QAAUX,EAClB5e,EAAQskB,SAAWA,EAEnBhkB,OAAOof,eAAe1f,EAAS,aAAc,CAAE2f,OAAO,Q;;;;;;CCnzCzD,SAAU7f,EAAQC,GACgDA,EAAQC,EAAS,EAAQ,UAD5F,CAIEC,GAAM,SAAUD,EAASE,GAAQ;;;;;;;;;;;;;;oFAkB/B,IAAIC,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,KAClEP,EAAcC,EAAGC,IAG5B,SAASO,EAAUR,EAAGC,GAElB,SAASQ,IAAOZ,KAAKa,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMQ,EAAGE,UAAYV,EAAEU,UAAW,IAAIF,GAGnF,IAAII,EAAW,WAQX,OAPAA,EAAWX,OAAOY,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAIX,KADTU,EAAIG,UAAUF,GACAD,EAAOd,OAAOS,UAAUJ,eAAec,KAAKL,EAAGV,KAAIS,EAAET,GAAKU,EAAEV,IAE9E,OAAOS,GAEJF,EAASS,MAAMzB,KAAMsB,YAGhCrB,EAAKyrB,OAAOC,qBAAuB,IACnC,IAAIC,EAAmB,EACnBC,EAAc,EACdC,GAA6B,EAc7BC,EAAiC,WACjC,SAASA,EAAgBC,GACrB,IAAI9oB,EAAQlD,KACZA,KAAKisB,UAAY,KACjBjsB,KAAKksB,OAAS,KAEdlsB,KAAKmsB,SAAW,GAChBnsB,KAAKosB,eAAiB,GACtBpsB,KAAKqsB,kBAAmB,EACxBrsB,KAAKssB,mBAAoB,EAEzBtsB,KAAKgpB,YAAa,EAClBhpB,KAAKusB,iBAAkB,EACvBvsB,KAAKwsB,gBAAiB,EAGtBxsB,KAAKysB,gBAAkB,SAAUnpB,GAC7B,IAAKJ,EAAMwpB,qBACPC,EAAqBrpB,IACrBJ,EAAM0pB,SAAStpB,GAAK,CACpB,IAAIupB,EAAM3pB,EAAM4pB,qBAAqBxpB,GAAI,GACzCJ,EAAM6pB,QAAQ/oB,QAAQ,cAAe6oB,GACrC3pB,EAAM8pB,gBAAgBH,GACjB3pB,EAAMmpB,kBACP3nB,SAASC,iBAAiB,YAAazB,EAAM+pB,iBAEjDvoB,SAASC,iBAAiB,UAAWzB,EAAMgqB,iBAGnDltB,KAAKitB,gBAAkB,SAAU3pB,GAC7B,IAAIupB,EAAM3pB,EAAM4pB,qBAAqBxpB,GACrCJ,EAAMiqB,aAAaN,GACnB3pB,EAAM6pB,QAAQ/oB,QAAQ,cAAe6oB,IAEzC7sB,KAAKktB,cAAgB,SAAU5pB,GAC3BoB,SAASI,oBAAoB,YAAa5B,EAAM+pB,iBAChDvoB,SAASI,oBAAoB,UAAW5B,EAAMgqB,eAC9ChqB,EAAM6pB,QAAQ/oB,QAAQ,YAAad,EAAM4pB,qBAAqBxpB,IAC9DJ,EAAMkqB,WAIVptB,KAAKqtB,iBAAmB,SAAU/pB,GAC9B,GAAIJ,EAAM0pB,SAAStpB,GAAK,CACpBJ,EAAMqpB,iBAAkB,EACxB,IAAIM,EAAM3pB,EAAMoqB,qBAAqBhqB,GAAI,GACzCJ,EAAM6pB,QAAQ/oB,QAAQ,cAAe6oB,GACrC3pB,EAAM8pB,gBAAgBH,GAGtB,IAAIppB,EAASH,EAAGG,OACXP,EAAMmpB,kBACP5oB,EAAOkB,iBAAiB,YAAazB,EAAMqqB,iBAE/C9pB,EAAOkB,iBAAiB,WAAYzB,EAAMsqB,gBAC1C/pB,EAAOkB,iBAAiB,cAAezB,EAAMsqB,gBAI7CC,OAAO9oB,iBAAiB,SAAUzB,EAAMwqB,mBAAmB,KAInE1tB,KAAKutB,gBAAkB,SAAUjqB,GAC7B,IAAIupB,EAAM3pB,EAAMoqB,qBAAqBhqB,GACrCJ,EAAMiqB,aAAaN,GACnB3pB,EAAM6pB,QAAQ/oB,QAAQ,cAAe6oB,IAEzC7sB,KAAKwtB,eAAiB,SAAUlqB,GAC5B,GAAIJ,EAAM8lB,WAAY,CAClB,IAAIvlB,EAASH,EAAGG,OAChBA,EAAOqB,oBAAoB,YAAa5B,EAAMqqB,iBAC9C9pB,EAAOqB,oBAAoB,WAAY5B,EAAMsqB,gBAC7C/pB,EAAOqB,oBAAoB,cAAe5B,EAAMsqB,gBAChDC,OAAO3oB,oBAAoB,SAAU5B,EAAMwqB,mBAAmB,GAC9DxqB,EAAM6pB,QAAQ/oB,QAAQ,YAAad,EAAMoqB,qBAAqBhqB,IAC9DJ,EAAMkqB,UACNlqB,EAAMqpB,iBAAkB,EACxBoB,MAGR3tB,KAAK0tB,kBAAoB,WACrBxqB,EAAMspB,gBAAiB,GAE3BxsB,KAAK4tB,aAAe,SAAUtqB,GAC1B,IAAKJ,EAAMmpB,iBAAkB,CACzB,IAAIwB,EAASJ,OAAOK,YAAc5qB,EAAM6qB,YAAe7qB,EAAM8qB,UACzDC,EAASR,OAAOS,YAAchrB,EAAMirB,YAAejrB,EAAMkrB,UAC7DlrB,EAAM6pB,QAAQ/oB,QAAQ,cAAe,CACjCqqB,UAAW/qB,EACXgrB,QAASprB,EAAMqpB,gBACfN,UAAW/oB,EAAM+oB,UACjB4B,MAAOA,EACPI,MAAOA,EACPM,OAAQV,EAAQ3qB,EAAMsrB,UACtBC,OAAQR,EAAQ/qB,EAAMwrB,cAIlC1uB,KAAKgsB,YAAcA,EACnBhsB,KAAK+sB,QAAU,IAAI9sB,EAAK0uB,aACxB3C,EAAYrnB,iBAAiB,YAAa3E,KAAKysB,iBAC/CT,EAAYrnB,iBAAiB,aAAc3E,KAAKqtB,iBAAkB,CAAEuB,SAAS,IAC7EC,IA6HJ,OA3HA9C,EAAgBjrB,UAAU8D,QAAU,WAChC5E,KAAKgsB,YAAYlnB,oBAAoB,YAAa9E,KAAKysB,iBACvDzsB,KAAKgsB,YAAYlnB,oBAAoB,aAAc9E,KAAKqtB,iBAAkB,CAAEuB,SAAS,IACrFE,KAEJ/C,EAAgBjrB,UAAU8rB,SAAW,SAAUtpB,GAC3C,IAAI2oB,EAAYjsB,KAAK+uB,eAAezrB,GAChC4oB,EAAS5oB,EAAGG,OAChB,SAAIwoB,GACEjsB,KAAKosB,iBAAkBnsB,EAAK+uB,eAAe9C,EAAQlsB,KAAKosB,mBAC1DpsB,KAAKisB,UAAYA,EACjBjsB,KAAKksB,OAASA,EACdlsB,KAAKgpB,YAAa,EAClBhpB,KAAKwsB,gBAAiB,GACf,IAIfT,EAAgBjrB,UAAUssB,QAAU,WAChCtB,GAA6B,EAC7B9rB,KAAKgpB,YAAa,EAClBhpB,KAAKisB,UAAY,KACjBjsB,KAAKksB,OAAS,KAEdlsB,KAAKivB,sBAETlD,EAAgBjrB,UAAUiuB,eAAiB,SAAUzrB,GACjD,OAAItD,KAAKmsB,SACElsB,EAAK+uB,eAAe1rB,EAAGG,OAAQzD,KAAKmsB,UAGpCnsB,KAAKgsB,aAGpBD,EAAgBjrB,UAAU4rB,kBAAoB,WAC1C,OAAOd,GAAoB5rB,KAAKusB,iBAGpCR,EAAgBjrB,UAAUouB,kBAAoB,WACtClvB,KAAKgpB,aACL8C,GAA6B,IAKrCC,EAAgBjrB,UAAUksB,gBAAkB,SAAU1pB,GAC9CtD,KAAKssB,oBACLtsB,KAAKmtB,aAAa7pB,GAClBmqB,OAAO9oB,iBAAiB,SAAU3E,KAAK4tB,cAAc,KAG7D7B,EAAgBjrB,UAAUqsB,aAAe,SAAU7pB,GAC3CtD,KAAKssB,oBACLtsB,KAAKguB,UAAY1qB,EAAGuqB,MACpB7tB,KAAKouB,UAAY9qB,EAAG2qB,MACpBjuB,KAAK+tB,YAAcN,OAAOK,YAC1B9tB,KAAKmuB,YAAcV,OAAOS,cAGlCnC,EAAgBjrB,UAAUmuB,mBAAqB,WACvCjvB,KAAKssB,mBACLmB,OAAO3oB,oBAAoB,SAAU9E,KAAK4tB,cAAc,IAKhE7B,EAAgBjrB,UAAUgsB,qBAAuB,SAAUxpB,EAAI6rB,GAC3D,IAAIZ,EAAS,EACTE,EAAS,EAUb,OARIU,GACAnvB,KAAKwuB,UAAYlrB,EAAGuqB,MACpB7tB,KAAK0uB,UAAYprB,EAAG2qB,QAGpBM,EAASjrB,EAAGuqB,MAAQ7tB,KAAKwuB,UACzBC,EAASnrB,EAAG2qB,MAAQjuB,KAAK0uB,WAEtB,CACHL,UAAW/qB,EACXgrB,SAAS,EACTrC,UAAWjsB,KAAKisB,UAChB4B,MAAOvqB,EAAGuqB,MACVI,MAAO3qB,EAAG2qB,MACVM,OAAQA,EACRE,OAAQA,IAGhB1C,EAAgBjrB,UAAUwsB,qBAAuB,SAAUhqB,EAAI6rB,GAC3D,IACItB,EACAI,EAFAmB,EAAU9rB,EAAG8rB,QAGbb,EAAS,EACTE,EAAS,EAoBb,OAjBIW,GAAWA,EAAQ7tB,QACnBssB,EAAQuB,EAAQ,GAAGvB,MACnBI,EAAQmB,EAAQ,GAAGnB,QAGnBJ,EAAQvqB,EAAGuqB,MACXI,EAAQ3qB,EAAG2qB,OAGXkB,GACAnvB,KAAKwuB,UAAYX,EACjB7tB,KAAK0uB,UAAYT,IAGjBM,EAASV,EAAQ7tB,KAAKwuB,UACtBC,EAASR,EAAQjuB,KAAK0uB,WAEnB,CACHL,UAAW/qB,EACXgrB,SAAS,EACTrC,UAAWjsB,KAAKisB,UAChB4B,MAAOA,EACPI,MAAOA,EACPM,OAAQA,EACRE,OAAQA,IAGT1C,EApOyB,GAuOpC,SAASY,EAAqBrpB,GAC1B,OAAqB,IAAdA,EAAG+rB,SAAiB/rB,EAAGgsB,QAIlC,SAAS3B,IACL/B,IACA2D,YAAW,WACP3D,MACD3rB,EAAKyrB,OAAOC,sBAInB,SAASkD,IACChD,KACF4B,OAAO9oB,iBAAiB,YAAa6qB,EAAmB,CAAEZ,SAAS,IAG3E,SAASE,MACGjD,GACJ4B,OAAO3oB,oBAAoB,YAAa0qB,EAAmB,CAAEZ,SAAS,IAG9E,SAASY,EAAkBlsB,GACnBwoB,GACAxoB,EAAGmsB,iBASX,IAAIC,EAA+B,WAC/B,SAASA,IACL1vB,KAAK2vB,WAAY,EACjB3vB,KAAK4vB,SAAW,KAChB5vB,KAAK6vB,SAAW,KAChB7vB,KAAK8vB,aAAe,KAEpB9vB,KAAKsZ,WAAa5U,SAASqrB,KAC3B/vB,KAAK4iB,OAAS,KACd5iB,KAAKgwB,eAAiB,EA6G1B,OA3GAN,EAAc5uB,UAAUqB,MAAQ,SAAUytB,EAAU/B,EAAOI,GACvDjuB,KAAK4vB,SAAWA,EAChB5vB,KAAK8vB,aAAe9vB,KAAK4vB,SAAS5qB,wBAClChF,KAAKiwB,YAAcpC,EAAQJ,OAAOK,YAClC9tB,KAAKkwB,YAAcjC,EAAQR,OAAOS,YAClCluB,KAAKuuB,OAAS,EACdvuB,KAAKyuB,OAAS,EACdzuB,KAAKmwB,oBAETT,EAAc5uB,UAAUsvB,WAAa,SAAUvC,EAAOI,GAClDjuB,KAAKuuB,OAAUV,EAAQJ,OAAOK,YAAe9tB,KAAKiwB,YAClDjwB,KAAKyuB,OAAUR,EAAQR,OAAOS,YAAeluB,KAAKkwB,YAClDlwB,KAAKmwB,oBAGTT,EAAc5uB,UAAUuvB,aAAe,SAAUC,GACzCA,EACKtwB,KAAK2vB,YACF3vB,KAAK6vB,WACL7vB,KAAK6vB,SAAShsB,MAAMC,QAAU,IAElC9D,KAAK2vB,UAAYW,EACjBtwB,KAAKmwB,oBAILnwB,KAAK2vB,YACD3vB,KAAK6vB,WACL7vB,KAAK6vB,SAAShsB,MAAMC,QAAU,QAElC9D,KAAK2vB,UAAYW,IAK7BZ,EAAc5uB,UAAUyvB,KAAO,SAAUC,EAAsBC,GAC3D,IAAIvtB,EAAQlD,KACR0wB,EAAO,WACPxtB,EAAMkqB,UACNqD,KAEAD,GACAxwB,KAAK6vB,UACL7vB,KAAK2vB,WACL3vB,KAAKgwB,iBACJhwB,KAAKuuB,QAAUvuB,KAAKyuB,QAErBzuB,KAAK2wB,kBAAkBD,EAAM1wB,KAAKgwB,gBAGlCT,WAAWmB,EAAM,IAGzBhB,EAAc5uB,UAAU6vB,kBAAoB,SAAUF,EAAUT,GAC5D,IAAIH,EAAW7vB,KAAK6vB,SAChBe,EAAoB5wB,KAAK4vB,SAAS5qB,wBACtC6qB,EAAShsB,MAAMgtB,WACX,OAASb,EAAT,WACcA,EAAiB,KACnC/vB,EAAK4F,WAAWgqB,EAAU,CACtBzrB,KAAMwsB,EAAkBxsB,KACxBD,IAAKysB,EAAkBzsB,MAE3BlE,EAAK6wB,mBAAmBjB,GAAU,WAC9BA,EAAShsB,MAAMgtB,WAAa,GAC5BJ,QAGRf,EAAc5uB,UAAUssB,QAAU,WAC1BptB,KAAK6vB,WACL5vB,EAAK4E,cAAc7E,KAAK6vB,UACxB7vB,KAAK6vB,SAAW,MAEpB7vB,KAAK4vB,SAAW,MAEpBF,EAAc5uB,UAAUqvB,iBAAmB,WACnCnwB,KAAK4vB,UAAY5vB,KAAK2vB,WACtB1vB,EAAK4F,WAAW7F,KAAK+wB,cAAe,CAChC3sB,KAAMpE,KAAK8vB,aAAa1rB,KAAOpE,KAAKuuB,OACpCpqB,IAAKnE,KAAK8vB,aAAa3rB,IAAMnE,KAAKyuB,UAI9CiB,EAAc5uB,UAAUiwB,YAAc,WAClC,IAAIjB,EAAe9vB,KAAK8vB,aACpBD,EAAW7vB,KAAK6vB,SAoBpB,OAnBKA,IACDA,EAAW7vB,KAAK6vB,SAAW7vB,KAAK4vB,SAASoB,WAAU,GAGnDnB,EAAS1Y,UAAUc,IAAI,mBACvB4X,EAAS1Y,UAAUc,IAAI,eACvBhY,EAAK4F,WAAWgqB,EAAU,CACtB9rB,SAAU,QACV6e,OAAQ5iB,KAAK4iB,OACbqO,WAAY,GACZC,UAAW,aACX1rB,MAAOsqB,EAAavqB,MAAQuqB,EAAa1rB,KACzCuB,OAAQmqB,EAAapqB,OAASoqB,EAAa3rB,IAC3CoB,MAAO,OACPG,OAAQ,OACRtC,OAAQ,IAEZpD,KAAKsZ,WAAW/U,YAAYsrB,IAEzBA,GAEJH,EAtHuB,GAiI9ByB,EAAiC,SAAUxvB,GAE3C,SAASwvB,EAAgBC,EAAkBC,GACvC,IAAInuB,EAAQvB,EAAOH,KAAKxB,OAASA,KAkBjC,OAjBAkD,EAAM0qB,aAAe,WACjB1qB,EAAMouB,UAAYpuB,EAAMkuB,iBAAiBzU,eACzCzZ,EAAMquB,WAAaruB,EAAMkuB,iBAAiBI,gBAC1CtuB,EAAMuuB,sBAEVvuB,EAAMkuB,iBAAmBA,EACzBluB,EAAMmuB,cAAgBA,EACtBnuB,EAAMouB,UAAYpuB,EAAMwuB,cAAgBN,EAAiBzU,eACzDzZ,EAAMquB,WAAaruB,EAAMyuB,eAAiBP,EAAiBI,gBAC3DtuB,EAAM0uB,YAAcR,EAAiBS,iBACrC3uB,EAAM4uB,aAAeV,EAAiBW,kBACtC7uB,EAAM8uB,YAAcZ,EAAiBa,iBACrC/uB,EAAMgvB,aAAed,EAAiBe,kBACtCjvB,EAAMkvB,WAAalvB,EAAMmvB,oBACrBnvB,EAAMmuB,eACNnuB,EAAMovB,iBAAiB3tB,iBAAiB,SAAUzB,EAAM0qB,cAErD1qB,EA6CX,OAjEAvC,EAAUwwB,EAAiBxvB,GAsB3BwvB,EAAgBrwB,UAAU8D,QAAU,WAC5B5E,KAAKqxB,eACLrxB,KAAKsyB,iBAAiBxtB,oBAAoB,SAAU9E,KAAK4tB,eAGjEuD,EAAgBrwB,UAAU6b,aAAe,WACrC,OAAO3c,KAAKsxB,WAEhBH,EAAgBrwB,UAAU0wB,cAAgB,WACtC,OAAOxxB,KAAKuxB,YAEhBJ,EAAgBrwB,UAAUgc,aAAe,SAAU3Y,GAC/CnE,KAAKoxB,iBAAiBtU,aAAa3Y,GAC9BnE,KAAKqxB,gBAGNrxB,KAAKsxB,UAAYzuB,KAAK+C,IAAI/C,KAAK4C,IAAItB,EAAKnE,KAAKuyB,mBAAoB,GACjEvyB,KAAKyxB,uBAGbN,EAAgBrwB,UAAU0xB,cAAgB,SAAUruB,GAChDnE,KAAKoxB,iBAAiBoB,cAAcruB,GAC/BnE,KAAKqxB,gBAGNrxB,KAAKuxB,WAAa1uB,KAAK+C,IAAI/C,KAAK4C,IAAItB,EAAKnE,KAAKyyB,oBAAqB,GACnEzyB,KAAKyxB,uBAGbN,EAAgBrwB,UAAUmxB,eAAiB,WACvC,OAAOjyB,KAAKgyB,aAEhBb,EAAgBrwB,UAAUqxB,gBAAkB,WACxC,OAAOnyB,KAAKkyB,cAEhBf,EAAgBrwB,UAAU+wB,eAAiB,WACvC,OAAO7xB,KAAK4xB,aAEhBT,EAAgBrwB,UAAUixB,gBAAkB,WACxC,OAAO/xB,KAAK8xB,cAEhBX,EAAgBrwB,UAAU2wB,mBAAqB,aAExCN,EAlEyB,CAmElClxB,EAAKyyB,kBACHC,EAAwC,SAAUhxB,GAElD,SAASgxB,EAAuBpvB,EAAI8tB,GAChC,OAAO1vB,EAAOH,KAAKxB,KAAM,IAAIC,EAAK2yB,wBAAwBrvB,GAAK8tB,IAAkBrxB,KAQrF,OAVAW,EAAUgyB,EAAwBhxB,GAIlCgxB,EAAuB7xB,UAAUwxB,eAAiB,WAC9C,OAAOtyB,KAAKoxB,iBAAiB7tB,IAEjCovB,EAAuB7xB,UAAUuxB,kBAAoB,WACjD,OAAOpyB,EAAK4yB,iBAAiB7yB,KAAKoxB,iBAAiB7tB,KAEhDovB,EAXgC,CAYzCxB,GACE2B,EAAuC,SAAUnxB,GAEjD,SAASmxB,EAAsBzB,GAC3B,OAAO1vB,EAAOH,KAAKxB,KAAM,IAAIC,EAAK8yB,uBAA0B1B,IAAkBrxB,KAkBlF,OApBAW,EAAUmyB,EAAuBnxB,GAIjCmxB,EAAsBhyB,UAAUwxB,eAAiB,WAC7C,OAAO7E,QAEXqF,EAAsBhyB,UAAUuxB,kBAAoB,WAChD,MAAO,CACHjuB,KAAMpE,KAAKuxB,WACXhsB,MAAOvF,KAAKuxB,WAAavxB,KAAKgyB,YAC9B7tB,IAAKnE,KAAKsxB,UACV5rB,OAAQ1F,KAAKsxB,UAAYtxB,KAAKkyB,eAKtCY,EAAsBhyB,UAAU2wB,mBAAqB,WACjDzxB,KAAKoyB,WAAapyB,KAAKqyB,qBAEpBS,EArB+B,CAsBxC3B,GAKE6B,EAAiC,oBAAhBC,YAA6BA,YAAYC,IAAMC,KAAKD,IAOrEE,EAA8B,WAC9B,SAASA,IACL,IAAIlwB,EAAQlD,KAEZA,KAAKqzB,WAAY,EACjBrzB,KAAKszB,YAAc,CAAC7F,OAAQ,gBAC5BztB,KAAKuzB,cAAgB,GACrBvzB,KAAKwzB,YAAc,IAEnBxzB,KAAKyzB,eAAiB,KACtBzzB,KAAK0zB,eAAiB,KACtB1zB,KAAK2zB,aAAc,EACnB3zB,KAAK4zB,aAAe,KAEpB5zB,KAAK6zB,aAAc,EACnB7zB,KAAK8zB,eAAgB,EACrB9zB,KAAK+zB,eAAgB,EACrB/zB,KAAKg0B,gBAAiB,EACtBh0B,KAAKi0B,QAAU,WACX,GAAI/wB,EAAMywB,YAAa,CACnB,IAAIO,EAAOhxB,EAAMixB,gBAAgBjxB,EAAMuwB,eAAiBhG,OAAOK,YAAa5qB,EAAMwwB,eAAiBjG,OAAOS,aAC1G,GAAIgG,EAAM,CACN,IAAIhB,EAAMF,IACV9vB,EAAMkxB,WAAWF,GAAOhB,EAAMhwB,EAAMmxB,gBAAkB,KACtDnxB,EAAMoxB,iBAAiBpB,QAGvBhwB,EAAMywB,aAAc,IAwIpC,OAnIAP,EAAatyB,UAAUqB,MAAQ,SAAU0rB,EAAOI,GACxCjuB,KAAKqzB,YACLrzB,KAAK4zB,aAAe5zB,KAAKu0B,cACzBv0B,KAAKyzB,eAAiB,KACtBzzB,KAAK0zB,eAAiB,KACtB1zB,KAAK6zB,aAAc,EACnB7zB,KAAK8zB,eAAgB,EACrB9zB,KAAK+zB,eAAgB,EACrB/zB,KAAKg0B,gBAAiB,EACtBh0B,KAAKowB,WAAWvC,EAAOI,KAG/BmF,EAAatyB,UAAUsvB,WAAa,SAAUvC,EAAOI,GACjD,GAAIjuB,KAAKqzB,UAAW,CAChB,IAAII,EAAiB5F,EAAQJ,OAAOK,YAChC4F,EAAiBzF,EAAQR,OAAOS,YAChCsG,EAAiC,OAAxBx0B,KAAK0zB,eAA0B,EAAIA,EAAiB1zB,KAAK0zB,eAClEe,EAAiC,OAAxBz0B,KAAKyzB,eAA0B,EAAIA,EAAiBzzB,KAAKyzB,eAClEe,EAAS,EACTx0B,KAAK6zB,aAAc,EAEdW,EAAS,IACdx0B,KAAK8zB,eAAgB,GAErBW,EAAS,EACTz0B,KAAK+zB,eAAgB,EAEhBU,EAAS,IACdz0B,KAAKg0B,gBAAiB,GAE1Bh0B,KAAKyzB,eAAiBA,EACtBzzB,KAAK0zB,eAAiBA,EACjB1zB,KAAK2zB,cACN3zB,KAAK2zB,aAAc,EACnB3zB,KAAKs0B,iBAAiBtB,QAIlCI,EAAatyB,UAAUyvB,KAAO,WAC1B,GAAIvwB,KAAKqzB,UAAW,CAChBrzB,KAAK2zB,aAAc,EACnB,IAAK,IAAItjB,EAAK,EAAG5E,EAAKzL,KAAK4zB,aAAcvjB,EAAK5E,EAAGlK,OAAQ8O,IAAM,CAC3D,IAAIqkB,EAAcjpB,EAAG4E,GACrBqkB,EAAY9vB,UAEhB5E,KAAK4zB,aAAe,OAG5BR,EAAatyB,UAAUwzB,iBAAmB,SAAUpB,GAChDlzB,KAAKq0B,eAAiBnB,EACtByB,sBAAsB30B,KAAKi0B,UAE/Bb,EAAatyB,UAAUszB,WAAa,SAAUF,EAAM9P,GAChD,IAAIsQ,EAAcR,EAAKQ,YACnBnB,EAAgBvzB,KAAKuzB,cACrBqB,EAAcrB,EAAgBW,EAAKW,SACnCC,EACFF,EAAcA,GAAgBrB,EAAgBA,GAC5CvzB,KAAKwzB,YAAcpP,EACnB2Q,EAAO,EACX,OAAQb,EAAKpuB,MACT,IAAK,OACDivB,GAAQ,EAEZ,IAAK,QACDL,EAAYlC,cAAckC,EAAYlD,gBAAkBsD,EAAWC,GACnE,MACJ,IAAK,MACDA,GAAQ,EAEZ,IAAK,SACDL,EAAY5X,aAAa4X,EAAY/X,eAAiBmY,EAAWC,GACjE,QAIZ3B,EAAatyB,UAAUqzB,gBAAkB,SAAU/vB,EAAMD,GAGrD,IAFA,IAAIovB,EAAgBvzB,KAAKuzB,cACrByB,EAAW,KACN3kB,EAAK,EAAG5E,EAAKzL,KAAK4zB,aAAcvjB,EAAK5E,EAAGlK,OAAQ8O,IAAM,CAC3D,IAAIqkB,EAAcjpB,EAAG4E,GACjBJ,EAAOykB,EAAYtC,WACnB6C,EAAW7wB,EAAO6L,EAAK7L,KACvB8wB,EAAYjlB,EAAK1K,MAAQnB,EACzB+wB,EAAUhxB,EAAM8L,EAAK9L,IACrBixB,EAAanlB,EAAKvK,OAASvB,EAE3B8wB,GAAY,GAAKC,GAAa,GAAKC,GAAW,GAAKC,GAAc,IAC7DD,GAAW5B,GAAiBvzB,KAAK6zB,aAAea,EAAYW,iBAC1DL,GAAYA,EAASH,SAAWM,KAClCH,EAAW,CAAEN,YAAaA,EAAa5uB,KAAM,MAAO+uB,SAAUM,IAE9DC,GAAc7B,GAAiBvzB,KAAK8zB,eAAiBY,EAAYY,mBAC/DN,GAAYA,EAASH,SAAWO,KAClCJ,EAAW,CAAEN,YAAaA,EAAa5uB,KAAM,SAAU+uB,SAAUO,IAEjEH,GAAY1B,GAAiBvzB,KAAK+zB,eAAiBW,EAAYa,mBAC7DP,GAAYA,EAASH,SAAWI,KAClCD,EAAW,CAAEN,YAAaA,EAAa5uB,KAAM,OAAQ+uB,SAAUI,IAE/DC,GAAa3B,GAAiBvzB,KAAKg0B,gBAAkBU,EAAYc,oBAC/DR,GAAYA,EAASH,SAAWK,KAClCF,EAAW,CAAEN,YAAaA,EAAa5uB,KAAM,QAAS+uB,SAAUK,KAI5E,OAAOF,GAEX5B,EAAatyB,UAAUyzB,YAAc,WACjC,OAAOv0B,KAAKy1B,iBAAiB5T,KAAI,SAAUte,GACvC,OAAIA,IAAOkqB,OACA,IAAIqF,GAAsB,GAG1B,IAAIH,EAAuBpvB,GAAI,OAIlD6vB,EAAatyB,UAAU20B,eAAiB,WAEpC,IADA,IAAI3oB,EAAM,GACDuD,EAAK,EAAG5E,EAAKzL,KAAKszB,YAAajjB,EAAK5E,EAAGlK,OAAQ8O,IAAM,CAC1D,IAAIqlB,EAAQjqB,EAAG4E,GACM,kBAAVqlB,EACP5oB,EAAInD,KAAK+rB,GAGT5oB,EAAInD,KAAKlI,MAAMqL,EAAKtM,MAAMM,UAAUiF,MAAMvE,KAAKkD,SAASixB,iBAAiBD,KAGjF,OAAO5oB,GAEJsmB,EAnKsB,GA4K7BwC,EAA2C,SAAUj0B,GAErD,SAASi0B,EAA0B5J,GAC/B,IAAI9oB,EAAQvB,EAAOH,KAAKxB,KAAMgsB,IAAgBhsB,KAG9CkD,EAAM2yB,MAAQ,KACd3yB,EAAM4yB,YAAc,EACpB5yB,EAAM6yB,oBAAqB,EAC3B7yB,EAAM8yB,mBAAoB,EAC1B9yB,EAAM+yB,eAAgB,EACtB/yB,EAAM8lB,YAAa,EACnB9lB,EAAMgzB,cAAe,EACrBhzB,EAAMizB,qBAAsB,EAC5BjzB,EAAMkzB,eAAiB,KACvBlzB,EAAMmzB,cAAgB,SAAU/yB,GACvBJ,EAAM8lB,aACP9lB,EAAM+yB,eAAgB,EACtB/yB,EAAMgzB,cAAe,EACrBhzB,EAAMizB,qBAAsB,EAC5Bl2B,EAAKq2B,iBAAiB5xB,SAASqrB,MAC/B9vB,EAAKs2B,mBAAmB7xB,SAASqrB,MAI5BzsB,EAAGgrB,SACJhrB,EAAG+qB,UAAUoB,iBAEjBvsB,EAAM6pB,QAAQ/oB,QAAQ,cAAeV,GAChCJ,EAAMszB,QAAQnK,mBAEfnpB,EAAMuzB,OAAOpG,cAAa,GAC1BntB,EAAMuzB,OAAOt0B,MAAMmB,EAAG2oB,UAAW3oB,EAAGuqB,MAAOvqB,EAAG2qB,OAC9C/qB,EAAMwzB,WAAWpzB,GACZJ,EAAM4yB,aACP5yB,EAAMyzB,wBAAwBrzB,MAK9CJ,EAAM0zB,cAAgB,SAAUtzB,GAC5B,GAAIJ,EAAM+yB,cAAe,CAErB,GADA/yB,EAAM6pB,QAAQ/oB,QAAQ,cAAeV,IAChCJ,EAAMizB,oBAAqB,CAC5B,IAAIL,EAAc5yB,EAAM4yB,YACpBe,OAAa,EACbtI,EAASjrB,EAAGirB,OAAQE,EAASnrB,EAAGmrB,OACpCoI,EAAatI,EAASA,EAASE,EAASA,EACpCoI,GAAcf,EAAcA,GAC5B5yB,EAAMyzB,wBAAwBrzB,GAGlCJ,EAAM8lB,aAEoB,WAAtB1lB,EAAG+qB,UAAUzhB,OACb1J,EAAMuzB,OAAOrG,WAAW9sB,EAAGuqB,MAAOvqB,EAAG2qB,OACrC/qB,EAAM4zB,aAAa1G,WAAW9sB,EAAGuqB,MAAOvqB,EAAG2qB,QAE/C/qB,EAAM6pB,QAAQ/oB,QAAQ,WAAYV,MAI9CJ,EAAM6zB,YAAc,SAAUzzB,GACtBJ,EAAM+yB,gBACN/yB,EAAM+yB,eAAgB,EACtBh2B,EAAK+2B,eAAetyB,SAASqrB,MAC7B9vB,EAAKg3B,iBAAiBvyB,SAASqrB,MAC/B7sB,EAAM6pB,QAAQ/oB,QAAQ,YAAaV,GAC/BJ,EAAM8lB,aACN9lB,EAAM4zB,aAAavG,OACnBrtB,EAAMg0B,YAAY5zB,IAElBJ,EAAMkzB,iBACNe,aAAaj0B,EAAMkzB,gBACnBlzB,EAAMkzB,eAAiB,QAInC,IAAII,EAAUtzB,EAAMszB,QAAU,IAAIzK,EAAgBC,GAMlD,OALAwK,EAAQzJ,QAAQqK,GAAG,cAAel0B,EAAMmzB,eACxCG,EAAQzJ,QAAQqK,GAAG,cAAel0B,EAAM0zB,eACxCJ,EAAQzJ,QAAQqK,GAAG,YAAal0B,EAAM6zB,aACtC7zB,EAAMuzB,OAAS,IAAI/G,EACnBxsB,EAAM4zB,aAAe,IAAI1D,EAClBlwB,EA6DX,OAhJAvC,EAAUi1B,EAA2Bj0B,GAqFrCi0B,EAA0B90B,UAAU8D,QAAU,WAC1C5E,KAAKw2B,QAAQ5xB,WAEjBgxB,EAA0B90B,UAAU41B,WAAa,SAAUpzB,GACvD,IAAIJ,EAAQlD,KACc,kBAAfA,KAAK61B,MACZ71B,KAAKo2B,eAAiB7G,YAAW,WAC7BrsB,EAAMkzB,eAAiB,KACvBlzB,EAAMm0B,eAAe/zB,KACtBtD,KAAK61B,OAGR71B,KAAKq3B,eAAe/zB,IAG5BsyB,EAA0B90B,UAAUu2B,eAAiB,SAAU/zB,GAC3DtD,KAAKk2B,cAAe,EACpBl2B,KAAKs3B,aAAah0B,IAEtBsyB,EAA0B90B,UAAU61B,wBAA0B,SAAUrzB,GACpEtD,KAAKm2B,qBAAsB,EAC3Bn2B,KAAKs3B,aAAah0B,IAEtBsyB,EAA0B90B,UAAUw2B,aAAe,SAAUh0B,GACrDtD,KAAKk2B,cAAgBl2B,KAAKm2B,sBACrBn2B,KAAKw2B,QAAQhK,iBAAkBxsB,KAAK+1B,qBACrC/1B,KAAKgpB,YAAa,EAClBhpB,KAAKg2B,mBAAoB,EACzBh2B,KAAK82B,aAAa30B,MAAMmB,EAAGuqB,MAAOvqB,EAAG2qB,OACrCjuB,KAAK+sB,QAAQ/oB,QAAQ,YAAaV,IACF,IAA5BtD,KAAK+1B,oBACL/1B,KAAKw2B,QAAQtH,uBAK7B0G,EAA0B90B,UAAUo2B,YAAc,SAAU5zB,GAGxDtD,KAAKy2B,OAAOlG,KAAKvwB,KAAKg2B,kBAAmBh2B,KAAKu3B,SAAS3pB,KAAK5N,KAAMsD,KAGtEsyB,EAA0B90B,UAAUy2B,SAAW,SAAUj0B,GACrDtD,KAAKgpB,YAAa,EAClBhpB,KAAK+sB,QAAQ/oB,QAAQ,UAAWV,IAGpCsyB,EAA0B90B,UAAU02B,cAAgB,SAAUlH,GAC1DtwB,KAAKw2B,QAAQnK,iBAAmBiE,GAEpCsF,EAA0B90B,UAAU22B,mBAAqB,SAAUnH,GAC/DtwB,KAAKy2B,OAAOpG,aAAaC,IAE7BsF,EAA0B90B,UAAU42B,qBAAuB,SAAUpH,GACjEtwB,KAAKg2B,kBAAoB1F,GAE7BsF,EAA0B90B,UAAU62B,qBAAuB,SAAUrH,GACjEtwB,KAAK82B,aAAazD,UAAY/C,GAE3BsF,EAjJmC,CAkJ5C31B,EAAK23B,iBAUHC,EAA+B,WAC/B,SAASA,EAAct0B,GACnBvD,KAAK83B,SAAW73B,EAAKiF,YAAY3B,GAEjCvD,KAAK4zB,aAAe3zB,EAAK83B,mBAAmBx0B,GAAIse,KAAI,SAAUte,GAC1D,OAAO,IAAIovB,EAAuBpvB,GAAI,MAoC9C,OAjCAs0B,EAAc/2B,UAAU8D,QAAU,WAC9B,IAAK,IAAIyL,EAAK,EAAG5E,EAAKzL,KAAK4zB,aAAcvjB,EAAK5E,EAAGlK,OAAQ8O,IAAM,CAC3D,IAAIqkB,EAAcjpB,EAAG4E,GACrBqkB,EAAY9vB,YAGpBizB,EAAc/2B,UAAUk3B,YAAc,WAElC,IADA,IAAI5zB,EAAOpE,KAAK83B,SAAS1zB,KAChBiM,EAAK,EAAG5E,EAAKzL,KAAK4zB,aAAcvjB,EAAK5E,EAAGlK,OAAQ8O,IAAM,CAC3D,IAAIqkB,EAAcjpB,EAAG4E,GACrBjM,GAAQswB,EAAY/C,eAAiB+C,EAAYlD,gBAErD,OAAOptB,GAEXyzB,EAAc/2B,UAAUm3B,WAAa,WAEjC,IADA,IAAI9zB,EAAMnE,KAAK83B,SAAS3zB,IACfkM,EAAK,EAAG5E,EAAKzL,KAAK4zB,aAAcvjB,EAAK5E,EAAGlK,OAAQ8O,IAAM,CAC3D,IAAIqkB,EAAcjpB,EAAG4E,GACrBlM,GAAOuwB,EAAYhD,cAAgBgD,EAAY/X,eAEnD,OAAOxY,GAEX0zB,EAAc/2B,UAAUo3B,iBAAmB,SAAUrK,EAAOI,GAExD,IADA,IAAIkK,EAAQ,CAAE/zB,KAAMypB,EAAO1pB,IAAK8pB,GACvB5d,EAAK,EAAG5E,EAAKzL,KAAK4zB,aAAcvjB,EAAK5E,EAAGlK,OAAQ8O,IAAM,CAC3D,IAAIqkB,EAAcjpB,EAAG4E,GACrB,IAAK+nB,EAAkB1D,EAAYpC,oBAC9BryB,EAAKo4B,gBAAgBF,EAAOzD,EAAYtC,YACzC,OAAO,EAGf,OAAO,GAEJyF,EAzCuB,GA6ClC,SAASO,EAAkBpgB,GACvB,IAAIsgB,EAAUtgB,EAAKsgB,QACnB,MAAmB,SAAZA,GAAkC,SAAZA,EAgBjC,IAAIC,EAA6B,WAC7B,SAASA,EAAYC,EAAUC,GAC3B,IAAIv1B,EAAQlD,KAEZA,KAAK04B,kBAAmB,EACxB14B,KAAK24B,gBAAiB,EACtB34B,KAAK44B,WAAa,KAClB54B,KAAK64B,UAAY,KACjB74B,KAAK84B,SAAW,KAChB94B,KAAK+4B,kBAAoB,SAAUz1B,GAC/B,IAAIk1B,EAAWt1B,EAAMs1B,SACrBt1B,EAAM01B,WAAa,KACnB11B,EAAM21B,UAAY,KAClB31B,EAAM41B,SAAW,KACjB51B,EAAM81B,cACN91B,EAAM+1B,kBAAkB31B,GACpBJ,EAAM01B,aAAe11B,EAAMy1B,gBAC3BH,EAAShB,eAAc,GACvBt0B,EAAM6pB,QAAQ/oB,QAAQ,cAAeV,IAGrCk1B,EAAShB,eAAc,IAG/Bx3B,KAAKk5B,gBAAkB,SAAU51B,GAC7BJ,EAAM6pB,QAAQ/oB,QAAQ,YAAaV,GACnCJ,EAAMktB,WAAW9sB,GAAI,IAEzBtD,KAAKm5B,eAAiB,SAAU71B,GAC5BJ,EAAM6pB,QAAQ/oB,QAAQ,WAAYV,GAClCJ,EAAMktB,WAAW9sB,IAErBtD,KAAKo5B,gBAAkB,SAAU91B,GAC7BJ,EAAMm2B,cACNn2B,EAAM6pB,QAAQ/oB,QAAQ,YAAaV,IAEvCtD,KAAKs5B,cAAgB,SAAUh2B,GACvBJ,EAAM21B,WACN31B,EAAM6pB,QAAQ/oB,QAAQ,YAAa,MAAM,EAAMV,GAEnDJ,EAAM41B,SAAW51B,EAAM21B,UACvB31B,EAAM21B,UAAY,KAClB31B,EAAM6pB,QAAQ/oB,QAAQ,UAAWV,IAErCtD,KAAKy4B,eAAiBA,EACtBD,EAASzL,QAAQqK,GAAG,cAAep3B,KAAK+4B,mBACxCP,EAASzL,QAAQqK,GAAG,YAAap3B,KAAKk5B,iBACtCV,EAASzL,QAAQqK,GAAG,WAAYp3B,KAAKm5B,gBACrCX,EAASzL,QAAQqK,GAAG,YAAap3B,KAAKo5B,iBACtCZ,EAASzL,QAAQqK,GAAG,UAAWp3B,KAAKs5B,eACpCt5B,KAAKw4B,SAAWA,EAChBx4B,KAAK+sB,QAAU,IAAI9sB,EAAK0uB,aAmF5B,OA/EA4J,EAAYz3B,UAAUm4B,kBAAoB,SAAU31B,GAChD,IAGIi2B,EAHAC,EAAY,CAAEp1B,KAAMd,EAAGuqB,MAAO1pB,IAAKb,EAAG2qB,OACtCwL,EAAgBD,EAChBvN,EAAY3oB,EAAG2oB,UAEfA,IAAcvnB,WACd60B,EAAct5B,EAAKiF,YAAY+mB,GAC/BwN,EAAgBx5B,EAAKy5B,eAAeD,EAAeF,IAEvD,IAAIX,EAAa54B,KAAK44B,WAAa54B,KAAK25B,kBAAkBF,EAAcr1B,KAAMq1B,EAAct1B,KAC5F,GAAIy0B,EAAY,CACZ,GAAI54B,KAAK04B,kBAAoBa,EAAa,CACtC,IAAIK,EAAoB35B,EAAK45B,eAAeN,EAAaX,EAAW3oB,MAChE2pB,IACAH,EAAgBx5B,EAAK65B,cAAcF,IAG3C55B,KAAK+5B,YAAc95B,EAAK+5B,WAAWP,EAAeD,QAGlDx5B,KAAK+5B,YAAc,CAAE31B,KAAM,EAAGD,IAAK,IAG3Co0B,EAAYz3B,UAAUsvB,WAAa,SAAU9sB,EAAI22B,GAC7C,IAAIC,EAAMl6B,KAAK25B,kBAAkBr2B,EAAGuqB,MAAQ7tB,KAAK+5B,YAAY31B,KAAMd,EAAG2qB,MAAQjuB,KAAK+5B,YAAY51B,MAC3F81B,GAAgBE,EAAYn6B,KAAK64B,UAAWqB,KAC5Cl6B,KAAK64B,UAAYqB,EACjBl6B,KAAK+sB,QAAQ/oB,QAAQ,YAAak2B,GAAK,EAAO52B,KAGtDi1B,EAAYz3B,UAAUk4B,YAAc,WAChCh5B,KAAKo6B,eAAiBn6B,EAAKo6B,QAAQr6B,KAAKy4B,gBAAgB,SAAU6B,GAC9D,OAAO,IAAIzC,EAAcyC,EAAoB/2B,QAGrDg1B,EAAYz3B,UAAUu4B,YAAc,WAChC,IAAIe,EAAiBp6B,KAAKo6B,eAC1B,IAAK,IAAIG,KAAMH,EACXA,EAAeG,GAAI31B,UAEvB5E,KAAKo6B,eAAiB,IAE1B7B,EAAYz3B,UAAU64B,kBAAoB,SAAUa,EAAYC,GAC5D,IAAIhvB,EAAKzL,KAAMy4B,EAAiBhtB,EAAGgtB,eAAgB2B,EAAiB3uB,EAAG2uB,eACnEM,EAAU,KACd,IAAK,IAAIH,KAAM9B,EAAgB,CAC3B,IAAI7oB,EAAY6oB,EAAe8B,GAAI3qB,UAC/B+qB,EAAgBP,EAAeG,GACnC,GAAII,EAAczC,iBAAiBsC,EAAYC,GAAY,CACvD,IAAIG,EAAaD,EAAc3C,cAC3B6C,EAAYF,EAAc1C,aAC1BzoB,EAAegrB,EAAaI,EAC5BnrB,EAAcgrB,EAAYI,EAC1B/C,EAAW6C,EAAc7C,SACzBtyB,EAAQsyB,EAASvyB,MAAQuyB,EAAS1zB,KAClCuB,EAASmyB,EAASpyB,OAASoyB,EAAS3zB,IACxC,GAEAqL,GAAgB,GAAKA,EAAehK,GAChCiK,GAAe,GAAKA,EAAc9J,EAAQ,CAC1C,IAAIu0B,EAAMtqB,EAAUL,SAASC,EAAcC,EAAajK,EAAOG,IAC3Du0B,GAGCtqB,EAAUpB,MAAMsC,cACb7Q,EAAK66B,mBAAmBlrB,EAAUpB,MAAMsC,YAAYM,YAAa8oB,EAAIrqB,SAASC,QAChF4qB,KAAWR,EAAIhqB,MAAQwqB,EAAQxqB,SAEjCgqB,EAAIjqB,KAAK7L,MAAQw2B,EACjBV,EAAIjqB,KAAK1K,OAASq1B,EAClBV,EAAIjqB,KAAK9L,KAAO02B,EAChBX,EAAIjqB,KAAKvK,QAAUm1B,EACnBH,EAAUR,KAK1B,OAAOQ,GAEJnC,EAtIqB,GAwIhC,SAAS4B,EAAYY,EAAMC,GACvB,OAAKD,IAASC,GAGVC,QAAQF,KAAUE,QAAQD,IAGvB/6B,EAAKi7B,iBAAiBH,EAAKlrB,SAAUmrB,EAAKnrB,UAOrD,IAAIsrB,EAA8B,SAAUx5B,GAExC,SAASw5B,EAAaC,GAClB,IAAIl4B,EAAQvB,EAAOH,KAAKxB,KAAMo7B,IAAap7B,KAC3CkD,EAAM61B,kBAAoB,SAAUz1B,GAChC,IAAIk1B,EAAWt1B,EAAMs1B,SAErBA,EAAShB,eAAet0B,EAAM0M,UAAUyrB,kBAAkB7C,EAAShC,QAAQtK,UAG/EhpB,EAAMo2B,cAAgB,SAAUh2B,GAC5B,IAAIsM,EAAY1M,EAAM0M,UAClB4mB,EAAUtzB,EAAMs1B,SAAShC,QAC7B,IAAKA,EAAQhK,eAAgB,CACzB,IAAI/gB,EAAKvI,EAAMo4B,YAAa1C,EAAantB,EAAGmtB,WAAYE,EAAWrtB,EAAGqtB,SAClEF,GAAcE,GAAYqB,EAAYvB,EAAYE,IAClDlpB,EAAUvB,SAASktB,iBAAiB3C,EAAW/oB,SAAU+oB,EAAW5oB,MAAOJ,EAAU4D,KAAMlQ,EAAG+qB,aAI1G,IAAIze,EAAYwrB,EAASxrB,UAEzB1M,EAAMs1B,SAAW,IAAI5C,EAA0BhmB,EAAUrM,IACzDL,EAAMs1B,SAAS1B,aAAazD,WAAY,EACxC,IAAIiI,EAAcp4B,EAAMo4B,YAAc,IAAI/C,EAAYr1B,EAAMs1B,SAAUv4B,EAAKu7B,2BAA2BJ,IAGtG,OAFAE,EAAYvO,QAAQqK,GAAG,cAAel0B,EAAM61B,mBAC5CuC,EAAYvO,QAAQqK,GAAG,UAAWl0B,EAAMo2B,eACjCp2B,EAKX,OA/BAvC,EAAUw6B,EAAcx5B,GA4BxBw5B,EAAar6B,UAAU8D,QAAU,WAC7B5E,KAAKw4B,SAAS5zB,WAEXu2B,EAhCsB,CAiC/Bl7B,EAAKw7B,aAMHC,EAA+B,SAAU/5B,GAEzC,SAAS+5B,EAAcN,GACnB,IAAIl4B,EAAQvB,EAAOH,KAAKxB,KAAMo7B,IAAap7B,KAC3CkD,EAAMy4B,cAAgB,KACtBz4B,EAAM61B,kBAAoB,SAAUz1B,GAChC,IAAImI,EAAKvI,EAAO0M,EAAYnE,EAAGmE,UAAW4oB,EAAW/sB,EAAG+sB,SACpDoD,EAAYhsB,EAAUV,IAAI,eAC1BU,EAAUyrB,kBAAkB/3B,EAAG+qB,UAAU5qB,QAE7C+0B,EAAShB,eAAeoE,GAExBpD,EAAS3C,MAAQvyB,EAAGgrB,QAAUuN,EAAuBjsB,GAAa,MAEtE1M,EAAMg2B,gBAAkB,SAAU51B,GAC9BJ,EAAM0M,UAAUvB,SAASytB,SAASx4B,IAEtCJ,EAAM64B,gBAAkB,SAAU7B,EAAK8B,GACnC,IAAI3tB,EAAWnL,EAAM0M,UAAUvB,SAC3BstB,EAAgB,KAChBM,GAAY,EACZ/B,IACAyB,EAAgBO,EAAsBh5B,EAAMo4B,YAAY1C,WAAYsB,EAAK7rB,EAAS8tB,aAAaC,MAAMC,2BAChGV,GAAkBz4B,EAAM0M,UAAU0sB,qBAAqBX,KACxDM,GAAY,EACZN,EAAgB,OAGpBA,EACAttB,EAASkuB,SAAS,CAAE3vB,KAAM,eAAgB4vB,UAAWb,IAE/CK,GACN3tB,EAASkuB,SAAS,CAAE3vB,KAAM,mBAEzBqvB,EAIDh8B,EAAKw8B,gBAHLx8B,EAAKy8B,eAKJV,IACD94B,EAAMy4B,cAAgBA,IAG9Bz4B,EAAMk2B,gBAAkB,SAAUvM,GAC1B3pB,EAAMy4B,gBAENz4B,EAAM0M,UAAUvB,SAASsuB,kBAAkBz5B,EAAMy4B,cAAe9O,GAChE3pB,EAAMy4B,cAAgB,OAG9B,IAAI/rB,EAAYwrB,EAASxrB,UACrB4oB,EAAWt1B,EAAMs1B,SAAW,IAAI5C,EAA0BhmB,EAAUrM,IACxEi1B,EAASzC,oBAAqB,EAC9ByC,EAAS1C,YAAclmB,EAAUV,IAAI,sBAAwB,EAC7DspB,EAAS1B,aAAazD,UAAYzjB,EAAUV,IAAI,cAChD,IAAIosB,EAAcp4B,EAAMo4B,YAAc,IAAI/C,EAAYr1B,EAAMs1B,SAAUv4B,EAAKu7B,2BAA2BJ,IAKtG,OAJAE,EAAYvO,QAAQqK,GAAG,cAAel0B,EAAM61B,mBAC5CuC,EAAYvO,QAAQqK,GAAG,YAAal0B,EAAMg2B,iBAC1CoC,EAAYvO,QAAQqK,GAAG,YAAal0B,EAAM64B,iBAC1CT,EAAYvO,QAAQqK,GAAG,YAAal0B,EAAMk2B,iBACnCl2B,EAKX,OAjEAvC,EAAU+6B,EAAe/5B,GA8DzB+5B,EAAc56B,UAAU8D,QAAU,WAC9B5E,KAAKw4B,SAAS5zB,WAEX82B,EAlEuB,CAmEhCz7B,EAAKw7B,aACP,SAASI,EAAuBjsB,GAC5B,IAAIimB,EAAQjmB,EAAUV,IAAI,wBAI1B,OAHa,MAAT2mB,IACAA,EAAQjmB,EAAUV,IAAI,mBAEnB2mB,EAEX,SAASqG,EAAsBnB,EAAMC,EAAMqB,GACvC,IAAIO,EAAY7B,EAAKlrB,SACjBgtB,EAAY7B,EAAKnrB,SACjBitB,EAAK,CACLF,EAAU9sB,MAAM3N,MAChBy6B,EAAU9sB,MAAM1N,IAChBy6B,EAAU/sB,MAAM3N,MAChB06B,EAAU/sB,MAAM1N,KAEpB06B,EAAGhxB,KAAK7L,EAAK88B,gBAEb,IADA,IAAIvuB,EAAQ,GACH6B,EAAK,EAAG2sB,EAA8BX,EAA2BhsB,EAAK2sB,EAA4Bz7B,OAAQ8O,IAAM,CACrH,IAAI4sB,EAAcD,EAA4B3sB,GAC1C1Q,EAAMs9B,EAAYlC,EAAMC,GAC5B,IAAY,IAARr7B,EACA,OAAO,KAEFA,GACLqB,EAASwN,EAAO7O,GAKxB,OAFA6O,EAAMsB,MAAQ,CAAE3N,MAAO26B,EAAG,GAAI16B,IAAK06B,EAAG,IACtCtuB,EAAM5H,OAASg2B,EAAUh2B,OAClB4H,EAGX,IAAI0uB,EAA+B,SAAUv7B,GAEzC,SAASu7B,EAAc9B,GACnB,IAAIl4B,EAAQvB,EAAOH,KAAKxB,KAAMo7B,IAAap7B,KAE3CkD,EAAMi6B,WAAa,KACnBj6B,EAAM8lB,YAAa,EACnB9lB,EAAMqD,WAAa,KACnBrD,EAAMk6B,eAAiB,KACvBl6B,EAAMm6B,kBAAoB,KAC1Bn6B,EAAMo6B,cAAgB,KACtBp6B,EAAMq6B,sBAAwB,KAC9Br6B,EAAM61B,kBAAoB,SAAUz1B,GAChC,IAAIk6B,EAAal6B,EAAG+qB,UAAU5qB,OAC1BgI,EAAKvI,EAAO0M,EAAYnE,EAAGmE,UAAW4oB,EAAW/sB,EAAG+sB,SACpD/B,EAAS+B,EAAS/B,OAClBgH,EAAkB7tB,EAAUvB,SAC5B8uB,EAAaj6B,EAAMi6B,WAAal9B,EAAKy9B,SAASp6B,EAAG2oB,WACjD1lB,EAAarD,EAAMqD,WAAa42B,EAAW52B,WAC3Co3B,EAAkBp3B,EAAWyT,SAAS4jB,WAC1C16B,EAAMk6B,eAAiBn9B,EAAK49B,kBAAkBJ,EAAgBnnB,MAAMgI,WAAYqf,GAChFnF,EAAS1C,YAAcxyB,EAAGgrB,QAAU,EAAI1e,EAAUV,IAAI,wBACtDspB,EAAS3C,MAEJvyB,EAAGgrB,SAAWqP,IAAoB/tB,EAAUpB,MAAMG,eAC/CmvB,EAAyBluB,GACzB,KACR6mB,EAAOnd,WAAamkB,EAAgBl6B,GACpCkzB,EAAOzG,eAAiBpgB,EAAUV,IAAI,sBACtC,IAAI6uB,EAAUnuB,EAAUouB,iBAAiBR,KACpCv9B,EAAK+uB,eAAewO,EAAY,eACrChF,EAAShB,eAAeuG,GAGxB76B,EAAM8lB,WAAa+U,GACfz6B,EAAG2oB,UAAU9U,UAAU3T,SAAS,iBAExCN,EAAMg2B,gBAAkB,SAAU51B,GAC9B,IAAIm6B,EAAkBv6B,EAAM0M,UAAUvB,SAClC9H,EAAarD,EAAMqD,WACnBo3B,EAAkBp3B,EAAWyT,SAAS4jB,WACtCt6B,EAAGgrB,QAECqP,IAAoBz6B,EAAM0M,UAAUpB,MAAMG,gBAC1C8uB,EAAgBlB,SAAS,CAAE3vB,KAAM,eAAgB+wB,gBAAiBA,IAKtEF,EAAgBlB,SAAS,CAAE3vB,KAAM,mBAEjC1J,EAAM8lB,aACNyU,EAAgB3B,SAASx4B,GACzBm6B,EAAgBxpB,gBAAgB,iBAAkB,CAC9C,CACI1Q,GAAIL,EAAMi6B,WAAW55B,GACrB06B,MAAO,IAAIh+B,EAAKi+B,SAAST,EAAiBl3B,EAAWE,IAAKF,EAAWyT,UACrEd,QAAS5V,EAAG+qB,UACZ7a,KAAMtQ,EAAM0M,UAAU4D,UAKtCtQ,EAAM64B,gBAAkB,SAAU7B,EAAK8B,GACnC,GAAK94B,EAAM8lB,WAAX,CAGA,IAAIoU,EAAiBl6B,EAAMk6B,eACvBxE,EAAa11B,EAAMo4B,YAAY1C,WAC/B6E,EAAkBv6B,EAAM0M,UAAUvB,SAElCgvB,EAAoB,KACpBc,EAAW,KACXZ,EAAwB,KACxBtB,GAAY,EACZmC,EAAc,CACdC,eAAgBjB,EAChBkB,cAAer+B,EAAKs+B,wBACpBxV,SAAS,EACTyV,QAASt7B,EAAMi6B,YAEnB,GAAIjD,EAAK,CACL,IAAIuE,EAAqBvE,EAAItqB,UAC7BytB,EAAoBoB,EAAmBpwB,SACnCovB,IAAoBJ,GACpBoB,EAAmBvvB,IAAI,aAAeuvB,EAAmBvvB,IAAI,cAC7DivB,EAAWO,EAAqB9F,EAAYsB,EAAKmD,EAAkBlB,aAAaC,MAAMuC,4BAClFR,IACAZ,EAAwBt9B,EAAK2+B,0BAA0BxB,EAAgBC,EAAkB9e,aAAc4f,EAAUd,GACjHe,EAAYE,cAAgBf,EACvBkB,EAAmBI,mBAAmBT,KACvCnC,GAAY,EACZkC,EAAW,KACXZ,EAAwB,KACxBa,EAAYE,cAAgBr+B,EAAKs+B,2BAKzClB,EAAoB,KAG5Bn6B,EAAM47B,YAAYzB,EAAmBe,GAChCnC,EAIDh8B,EAAKw8B,gBAHLx8B,EAAKy8B,eAKJV,IACGyB,IAAoBJ,GACpBlD,EAAYvB,EAAYsB,KACxBiE,EAAW,MAEfj7B,EAAMs1B,SAASd,sBAAsByG,GAGrCj7B,EAAMs1B,SAASf,oBAAoByC,IAAQx1B,SAASwE,cAAc,eAElEhG,EAAMm6B,kBAAoBA,EAC1Bn6B,EAAMo6B,cAAgBa,EACtBj7B,EAAMq6B,sBAAwBA,KAGtCr6B,EAAMk2B,gBAAkB,WACfl2B,EAAM8lB,YACP9lB,EAAMkqB,WAGdlqB,EAAMo2B,cAAgB,SAAUh2B,GAC5B,GAAIJ,EAAM8lB,WAAY,CAClB,IAAI+V,EAAoB77B,EAAM0M,UAAUvB,SACpC2wB,EAAc97B,EAAM0M,UAAU4D,KAC9B6pB,EAAoBn6B,EAAMm6B,kBAC1B72B,EAAWtD,EAAMqD,WAAWE,IAC5Bw4B,EAAgB/7B,EAAMqD,WAAWyT,SACjCklB,EAAW,IAAIj/B,EAAKi+B,SAASa,EAAmBv4B,EAAUy4B,GAC1DE,EAAmBj8B,EAAMk6B,eACzBG,EAAwBr6B,EAAMq6B,sBAC9BzE,EAAW51B,EAAMo4B,YAAYxC,SAUjC,GATA51B,EAAMk8B,YACNL,EAAkB9qB,gBAAgB,gBAAiB,CAC/C,CACI1Q,GAAIL,EAAMi6B,WAAW55B,GACrB06B,MAAOiB,EACPhmB,QAAS5V,EAAG+qB,UACZ7a,KAAMwrB,KAGV97B,EAAMo6B,eAEN,GAAID,IAAsB0B,EAAmB,CACzCA,EAAkBxC,SAAS,CACvB3vB,KAAM,eACN0R,WAAYif,IAGhB,IADA,IAAI8B,EAAe,GACVhvB,EAAK,EAAG5E,EAAKszB,EAAkB5C,aAAaC,MAAMkD,sBAAuBjvB,EAAK5E,EAAGlK,OAAQ8O,IAAM,CACpG,IAAI4sB,EAAcxxB,EAAG4E,GACrBrP,EAASq+B,EAAcpC,EAAY/5B,EAAMo6B,cAAeyB,IAE5D/9B,EAASq+B,EAAc,CACnB97B,GAAID,EAAG2oB,UACPsT,MAAOr8B,EAAMo6B,cAAckC,WAC3BC,SAAUP,EACVjB,MAAO,IAAIh+B,EAAKi+B,SAChBa,EAAmBxB,EAAsBmC,KAAKl5B,EAASm5B,OAAQV,EAAgB1B,EAAsBqC,UAAUX,EAAcrB,YAAc,MAC3IiC,OAAQ,WACJd,EAAkBxC,SAAS,CACvB3vB,KAAM,eACN0R,WAAY6gB,KAGpBjmB,QAAS5V,EAAG+qB,UACZ7a,KAAMwrB,IAEVD,EAAkB9qB,gBAAgB,YAAa,CAACorB,SAG/C,GAAIhC,EAAmB,CACxB0B,EAAkB9qB,gBAAgB,aAAc,CAC5C,CACI6rB,UAAWx8B,EAAG2oB,UACdgS,MAAOiB,EACP1rB,KAAMwrB,KAGdD,EAAkBxC,SAAS,CACvB3vB,KAAM,yBACNgzB,UAAW18B,EAAMq6B,sBAAsBqC,YAE3CvC,EAAkBd,SAAS,CACvB3vB,KAAM,eACN0R,WAAYpb,EAAMq6B,wBAElBj6B,EAAGgrB,SACH+O,EAAkBd,SAAS,CACvB3vB,KAAM,eACN+wB,gBAAiBsB,EAAcrB,aAGvC,IAAImC,EAAU1C,EAAkB2C,kBAAkBlH,EAASjpB,UAC3DkwB,EAAQD,UAAYx8B,EAAG2oB,UACvB8T,EAAQ7mB,QAAU5V,EAAG+qB,UACrB0R,EAAQvsB,KAAOslB,EAASlpB,UACxBytB,EAAkBppB,gBAAgB,OAAQ,CAAC8rB,IAC3C1C,EAAkBppB,gBAAgB,eAAgB,CAC9C,CACI6rB,UAAWx8B,EAAG2oB,UACdgS,MAAO,IAAIh+B,EAAKi+B,SAChBb,EAAmBE,EAAsBmC,KAAKl5B,EAASm5B,OAAQpC,EAAsBqC,UAAUX,EAAcrB,aAC7GpqB,KAAMslB,EAASlpB,mBAM3BmvB,EAAkB9qB,gBAAgB,gBAG1C/Q,EAAMkqB,WAEV,IAAIxd,EAAY1M,EAAM0M,UAClB4oB,EAAWt1B,EAAMs1B,SAAW,IAAI5C,EAA0BhmB,EAAUrM,IACxEi1B,EAAShC,QAAQrK,SAAW+Q,EAAc+C,SAC1CzH,EAASzC,oBAAqB,EAC9ByC,EAAS1B,aAAazD,UAAYzjB,EAAUV,IAAI,cAChD,IAAIosB,EAAcp4B,EAAMo4B,YAAc,IAAI/C,EAAYr1B,EAAMs1B,SAAUv4B,EAAKigC,0BAO3E,OANA5E,EAAY5C,iBAAmB0C,EAAS7sB,eACxC+sB,EAAYvO,QAAQqK,GAAG,cAAel0B,EAAM61B,mBAC5CuC,EAAYvO,QAAQqK,GAAG,YAAal0B,EAAMg2B,iBAC1CoC,EAAYvO,QAAQqK,GAAG,YAAal0B,EAAM64B,iBAC1CT,EAAYvO,QAAQqK,GAAG,YAAal0B,EAAMk2B,iBAC1CkC,EAAYvO,QAAQqK,GAAG,UAAWl0B,EAAMo2B,eACjCp2B,EAsDX,OA/RAvC,EAAUu8B,EAAev7B,GA2OzBu7B,EAAcp8B,UAAU8D,QAAU,WAC9B5E,KAAKw4B,SAAS5zB,WAGlBs4B,EAAcp8B,UAAUg+B,YAAc,SAAUqB,EAAc7pB,GAC1D,IAAImnB,EAAkBz9B,KAAK4P,UAAUvB,SACjC+xB,EAAepgC,KAAKq9B,kBAEpB+C,GAAgBA,IAAiBD,IAG7BC,IAAiB3C,EACjB2C,EAAa7D,SAAS,CAClB3vB,KAAM,iBACN0J,MAAO,CACH+nB,eAAgB/nB,EAAM+nB,eACtBC,cAAer+B,EAAKs+B,wBACpBxV,SAAS,EACTyV,QAASloB,EAAMkoB,WAMvB4B,EAAa7D,SAAS,CAAE3vB,KAAM,sBAGlCuzB,GACAA,EAAa5D,SAAS,CAAE3vB,KAAM,iBAAkB0J,MAAOA,KAG/D4mB,EAAcp8B,UAAUs+B,UAAY,WAChC,IAAI3B,EAAkBz9B,KAAK4P,UAAUvB,SACjCgvB,EAAoBr9B,KAAKq9B,kBACzBA,GACAA,EAAkBd,SAAS,CAAE3vB,KAAM,qBAGnC6wB,IAAoBJ,GACpBI,EAAgBlB,SAAS,CAAE3vB,KAAM,sBAGzCswB,EAAcp8B,UAAUssB,QAAU,WAC9BptB,KAAKm9B,WAAa,KAClBn9B,KAAKgpB,YAAa,EAClBhpB,KAAKuG,WAAa,KAClBvG,KAAKo9B,eAAiB,KACtBp9B,KAAKq9B,kBAAoB,KACzBr9B,KAAKs9B,cAAgB,KACrBt9B,KAAKu9B,sBAAwB,MAEjCL,EAAc+C,SAAW,+BAClB/C,EAhSuB,CAiShCj9B,EAAKw7B,aACP,SAASiD,EAAqB3D,EAAMC,EAAMqF,GACtC,IAAIzD,EAAY7B,EAAKlrB,SACjBgtB,EAAY7B,EAAKnrB,SACjBywB,EAAQ1D,EAAU9sB,MAAM3N,MACxBo+B,EAAQ1D,EAAU/sB,MAAM3N,MACxBq+B,EAAgB,GAChB5D,EAAUh2B,SAAWi2B,EAAUj2B,SAC/B45B,EAAc55B,OAASi2B,EAAUj2B,OACjC45B,EAAcC,OAASzF,EAAKprB,UAAUV,IAAI,0BACtC2tB,EAAUj2B,SAGV05B,EAAQrgC,EAAKomB,WAAWia,KAGhC,IAAIf,EAAQt/B,EAAKygC,UAAUJ,EAAOC,EAAOxF,EAAKnrB,UAAU3N,QAAS84B,EAAKnrB,YAAcorB,EAAKprB,UACrFmrB,EAAKnrB,UAAU+wB,UACf,MACApB,EAAM9U,eACN+V,EAAc55B,QAAS,GAO3B,IALA,IAAIu3B,EAAW,CACXqB,WAAYD,EACZqB,SAAUrB,EACViB,cAAeA,GAEVnwB,EAAK,EAAGwwB,EAAcR,EAAWhwB,EAAKwwB,EAAYt/B,OAAQ8O,IAAM,CACrE,IAAIywB,EAAWD,EAAYxwB,GAC3BywB,EAAS3C,EAAUpD,EAAMC,GAE7B,OAAOmD,EAEX,SAASL,EAAyBluB,GAC9B,IAAIimB,EAAQjmB,EAAUV,IAAI,uBAI1B,OAHa,MAAT2mB,IACAA,EAAQjmB,EAAUV,IAAI,mBAEnB2mB,EAGX,IAAIkL,EAAiC,SAAUp/B,GAE3C,SAASu7B,EAAc9B,GACnB,IAAIl4B,EAAQvB,EAAOH,KAAKxB,KAAMo7B,IAAap7B,KAE3CkD,EAAM89B,YAAc,KACpB99B,EAAMqD,WAAa,KACnBrD,EAAMk6B,eAAiB,KACvBl6B,EAAMo6B,cAAgB,KACtBp6B,EAAMq6B,sBAAwB,KAC9Br6B,EAAM61B,kBAAoB,SAAUz1B,GAChC,IAAIsM,EAAY1M,EAAM0M,UAClB1J,EAAMhD,EAAM+9B,SAAS39B,GACrBiD,EAAarD,EAAMqD,WAAaL,EAAIK,WACxCrD,EAAMs1B,SAAS1C,YAAclmB,EAAUV,IAAI,wBAE3ChM,EAAMs1B,SAAShB,eAAet0B,EAAM0M,UAAUouB,iBAAiB16B,EAAG+qB,UAAU5qB,SACvEH,EAAGgrB,SAAWprB,EAAM0M,UAAUpB,MAAMG,iBAAmBpI,EAAWyT,SAAS4jB,aAEpF16B,EAAMg2B,gBAAkB,SAAU51B,GAC9B,IAAI+K,EAAWnL,EAAM0M,UAAUvB,SAC3B9H,EAAarD,EAAMqD,WACvBrD,EAAMk6B,eAAiBn9B,EAAK49B,kBAAkBxvB,EAASiI,MAAMgI,WAAYpb,EAAMqD,WAAWyT,SAAS4jB,YACnG16B,EAAM89B,YAAc99B,EAAM+9B,SAAS39B,GACnC+K,EAASytB,WACTztB,EAAS4F,gBAAgB,mBAAoB,CACzC,CACI1Q,GAAIL,EAAM89B,YAAYz9B,GACtB06B,MAAO,IAAIh+B,EAAKi+B,SAAS7vB,EAAU9H,EAAWE,IAAKF,EAAWyT,UAC9Dd,QAAS5V,EAAG+qB,UACZ7a,KAAMtQ,EAAM0M,UAAU4D,SAIlCtQ,EAAM64B,gBAAkB,SAAU7B,EAAK8B,EAAS14B,GAC5C,IAAI+K,EAAWnL,EAAM0M,UAAUvB,SAC3B+uB,EAAiBl6B,EAAMk6B,eACvBxE,EAAa11B,EAAMo4B,YAAY1C,WAC/BqG,EAAgB/7B,EAAMqD,WAAWyT,SACjCmkB,EAAW,KACXZ,EAAwB,KACxBtB,GAAY,EACZmC,EAAc,CACdC,eAAgBjB,EAChBkB,cAAer+B,EAAKs+B,wBACpBxV,SAAS,EACTyV,QAASt7B,EAAM89B,aAEf9G,IACAiE,EAAW+C,EAAgBtI,EAAYsB,EAAK52B,EAAG2oB,UAAU9U,UAAU3T,SAAS,oBAAqBy7B,EAAcnvB,MAAOzB,EAAS8tB,aAAaC,MAAM+E,4BAElJhD,IACAZ,EAAwBt9B,EAAK2+B,0BAA0BxB,EAAgB/uB,EAASkQ,aAAc4f,EAAU9vB,GACxG+vB,EAAYE,cAAgBf,EACvBr6B,EAAM0M,UAAUivB,mBAAmBT,KACpCnC,GAAY,EACZkC,EAAW,KACXZ,EAAwB,KACxBa,EAAYE,cAAgB,OAGhCf,EACAlvB,EAASkuB,SAAS,CACd3vB,KAAM,mBACN0J,MAAO8nB,IAIX/vB,EAASkuB,SAAS,CAAE3vB,KAAM,uBAEzBqvB,EAIDh8B,EAAKw8B,gBAHLx8B,EAAKy8B,eAKJV,IACGmC,GAAYhE,EAAYvB,EAAYsB,KACpCiE,EAAW,MAEfj7B,EAAMo6B,cAAgBa,EACtBj7B,EAAMq6B,sBAAwBA,IAGtCr6B,EAAMo2B,cAAgB,SAAUh2B,GAC5B,IAAI+K,EAAWnL,EAAM0M,UAAUvB,SAC3BmF,EAAOtQ,EAAM0M,UAAU4D,KACvBhN,EAAWtD,EAAMqD,WAAWE,IAC5Bw4B,EAAgB/7B,EAAMqD,WAAWyT,SACjCklB,EAAW,IAAIj/B,EAAKi+B,SAAS7vB,EAAU7H,EAAUy4B,GACjD7B,EAAiBl6B,EAAMk6B,eACvBG,EAAwBr6B,EAAMq6B,sBAClClvB,EAAS4F,gBAAgB,kBAAmB,CACxC,CACI1Q,GAAIL,EAAM89B,YAAYz9B,GACtB06B,MAAOiB,EACPhmB,QAAS5V,EAAG+qB,UACZ7a,KAAMA,KAGVtQ,EAAMo6B,eACNjvB,EAASkuB,SAAS,CACd3vB,KAAM,eACN0R,WAAYif,IAEhBlvB,EAAS4F,gBAAgB,cAAe,CACpC,CACI1Q,GAAIL,EAAM89B,YAAYz9B,GACtBi8B,WAAYt8B,EAAMo6B,cAAckC,YAAcv/B,EAAKslB,eAAe,GAClEqb,SAAU19B,EAAMo6B,cAAcsD,UAAY3gC,EAAKslB,eAAe,GAC9D6b,UAAWlC,EACXjB,MAAO,IAAIh+B,EAAKi+B,SAChB7vB,EAAUkvB,EAAsBmC,KAAKl5B,EAASm5B,OAAQV,EAAgB1B,EAAsBqC,UAAUX,EAAcrB,YAAc,MAClIiC,OAAQ,WACJxxB,EAASkuB,SAAS,CACd3vB,KAAM,eACN0R,WAAY8e,KAGpBlkB,QAAS5V,EAAG+qB,UACZ7a,KAAMA,MAKdnF,EAAS4F,gBAAgB,kBAG7B/Q,EAAM89B,YAAc,KACpB99B,EAAMk6B,eAAiB,KACvBl6B,EAAMo6B,cAAgB,MAG1B,IAAI1tB,EAAYwrB,EAASxrB,UACrB4oB,EAAWt1B,EAAMs1B,SAAW,IAAI5C,EAA0BhmB,EAAUrM,IACxEi1B,EAAShC,QAAQrK,SAAW,cAC5BqM,EAASzC,oBAAqB,EAC9ByC,EAAS1B,aAAazD,UAAYzjB,EAAUV,IAAI,cAChD,IAAIosB,EAAcp4B,EAAMo4B,YAAc,IAAI/C,EAAYr1B,EAAMs1B,SAAUv4B,EAAKu7B,2BAA2BJ,IAKtG,OAJAE,EAAYvO,QAAQqK,GAAG,cAAel0B,EAAM61B,mBAC5CuC,EAAYvO,QAAQqK,GAAG,YAAal0B,EAAMg2B,iBAC1CoC,EAAYvO,QAAQqK,GAAG,YAAal0B,EAAM64B,iBAC1CT,EAAYvO,QAAQqK,GAAG,UAAWl0B,EAAMo2B,eACjCp2B,EAQX,OAtJAvC,EAAUu8B,EAAev7B,GAgJzBu7B,EAAcp8B,UAAU8D,QAAU,WAC9B5E,KAAKw4B,SAAS5zB,WAElBs4B,EAAcp8B,UAAUmgC,SAAW,SAAU39B,GACzC,OAAOrD,EAAKy9B,SAASz9B,EAAK+uB,eAAe1rB,EAAG2oB,UAAWjsB,KAAK4P,UAAUyxB,iBAEnEnE,EAvJyB,CAwJlCj9B,EAAKw7B,aACP,SAASyF,EAAgBnG,EAAMC,EAAMsG,EAAaC,EAAeC,GAM7D,IALA,IAAIv/B,EAAU84B,EAAKnrB,UAAU3N,QACzBq+B,EAAQvF,EAAKlrB,SAASC,MAAM3N,MAC5Bo+B,EAAQvF,EAAKnrB,SAASC,MAAM3N,MAC5Bo9B,EAAQt/B,EAAKygC,UAAUJ,EAAOC,EAAOt+B,EAAS84B,EAAKnrB,UAAU+wB,WAC7DnyB,EAAQ,GACH6B,EAAK,EAAGoxB,EAAeD,EAAYnxB,EAAKoxB,EAAalgC,OAAQ8O,IAAM,CACxE,IAAIqxB,EAAYD,EAAapxB,GACzB1Q,EAAM+hC,EAAU3G,EAAMC,GAC1B,IAAY,IAARr7B,EACA,OAAO,KAEFA,GACLqB,EAASwN,EAAO7O,GAGxB,GAAI2hC,GACA,GAAIr/B,EAAQgW,IAAIspB,EAAcp/B,MAAOo9B,GAASgC,EAAcn/B,IAExD,OADAoM,EAAMgxB,WAAaD,EACZ/wB,OAIX,GAAIvM,EAAQgW,IAAIspB,EAAcn/B,IAAKm9B,GAASgC,EAAcp/B,MAEtD,OADAqM,EAAMoyB,SAAWrB,EACV/wB,EAGf,OAAO,KAGX,IAAImzB,EAA8B,WAC9B,SAASA,EAAatzB,GAClB,IAAInL,EAAQlD,KACZA,KAAK4hC,2BAA4B,EACjC5hC,KAAK6hC,SAAW,SAAUC,GAClBA,EAAW5oB,UACXhW,EAAM0+B,2BAA4B,IAG1C5hC,KAAK+hC,oBAAsB,SAAUlV,GACjC,IAAIphB,EAAKvI,EAAOmL,EAAW5C,EAAG4C,SAAU2zB,EAAkBv2B,EAAGu2B,gBACzD1rB,EAAQjI,EAASiI,MAErB,IAAK0rB,EAAgBxV,eAAgB,CACjC,GAAIlW,EAAM+H,gBACLnb,EAAM0+B,0BACT,CACE,IAAIK,EAAe5zB,EAAS6zB,QAAQ,gBAChCC,EAAiB9zB,EAAS6zB,QAAQ,mBAClCD,GAAkBA,GAAiBhiC,EAAK+uB,eAAegT,EAAgB9V,OAAQiW,IAC/E9zB,EAASytB,SAASjP,GAGtBvW,EAAM3H,iBACL1O,EAAK+uB,eAAegT,EAAgB9V,OAAQgR,EAAc+C,WAE3D5xB,EAASkuB,SAAS,CAAE3vB,KAAM,mBAGlC1J,EAAM0+B,2BAA4B,GAEtC5hC,KAAKqO,SAAWA,EAChB,IAAI2zB,EAAkBhiC,KAAKgiC,gBAAkB,IAAIjW,EAAgBrnB,UACjEs9B,EAAgB3V,kBAAmB,EACnC2V,EAAgB1V,mBAAoB,EACpC0V,EAAgBjV,QAAQqK,GAAG,YAAap3B,KAAK+hC,qBAI7C1zB,EAAS+oB,GAAG,SAAUp3B,KAAK6hC,UAM/B,OAJAF,EAAa7gC,UAAU8D,QAAU,WAC7B5E,KAAKqO,SAAS+zB,IAAI,SAAUpiC,KAAK6hC,UACjC7hC,KAAKgiC,gBAAgBp9B,WAElB+8B,EA7CsB,GAqD7BU,EAAyC,WACzC,SAASA,EAAwB7J,EAAU8J,GACvC,IAAIp/B,EAAQlD,KACZA,KAAKq9B,kBAAoB,KACzBr9B,KAAKuiC,eAAiB,KACtBviC,KAAKsiC,iBAAmB,KACxBtiC,KAAKwiC,SAAW,KAChBxiC,KAAKk5B,gBAAkB,SAAU51B,GAC7BJ,EAAMs/B,SAAWt/B,EAAMu/B,cAAcn/B,EAAG2oB,YAE5CjsB,KAAK+7B,gBAAkB,SAAU7B,EAAK8B,EAAS14B,GAC3C,IAAIk1B,EAAWt1B,EAAMo4B,YAAY9C,SAC7B6E,EAAoB,KACpBkF,EAAiB,KACjBtG,GAAY,EACZmC,EAAc,CACdC,eAAgBp+B,EAAKs+B,wBACrBD,cAAer+B,EAAKs+B,wBACpBxV,QAAS7lB,EAAMs/B,SAASzhC,OACxBy9B,QAAS,MAETtE,IACAmD,EAAoBnD,EAAItqB,UAAUvB,SAC9BnL,EAAMw/B,oBAAoBp/B,EAAG2oB,UAAWoR,KACxCkF,EAAiBI,EAAwBzI,EAAIrqB,SAAU3M,EAAMs/B,SAAUnF,GACvEe,EAAYE,cAAgBr+B,EAAK2iC,kBAAkBL,GACnDtG,GAAah8B,EAAK4+B,mBAAmBT,EAAaf,GAC9CpB,IACAmC,EAAYE,cAAgBr+B,EAAKs+B,wBACjCgE,EAAiB,QAI7Br/B,EAAM47B,YAAYzB,EAAmBe,GAGrC5F,EAASf,mBAAmBuE,IAAYuG,IAAmB79B,SAASwE,cAAc,eAC7E+yB,EAIDh8B,EAAKw8B,gBAHLx8B,EAAKy8B,eAKJV,IACDxD,EAASd,sBAAsB6K,GAC/Br/B,EAAMm6B,kBAAoBA,EAC1Bn6B,EAAMq/B,eAAiBA,IAG/BviC,KAAKs5B,cAAgB,SAAUzM,GAC3B,IAAIphB,EAAKvI,EAAOm6B,EAAoB5xB,EAAG4xB,kBAAmBkF,EAAiB92B,EAAG82B,eAE9E,GADAr/B,EAAMk8B,YACF/B,GAAqBkF,EAAgB,CACrC,IAAIzJ,EAAW51B,EAAMo4B,YAAYxC,SAC7B+J,EAAY/J,EAASlpB,UAAU4D,KAC/BgvB,EAAWt/B,EAAMs/B,SACjBM,EAAMzF,EAAkB2C,kBAAkBlH,EAASjpB,UACvDizB,EAAIhD,UAAYjT,EAAIZ,UACpB6W,EAAI5pB,QAAU2T,EAAIwB,UAClByU,EAAItvB,KAAOqvB,EACXxF,EAAkBppB,gBAAgB,OAAQ,CAAC6uB,IACvCN,EAASzhC,SACTs8B,EAAkBd,SAAS,CACvB3vB,KAAM,eACN0R,WAAYre,EAAK2iC,kBAAkBL,KAEnC1V,EAAIyB,SACJ+O,EAAkBd,SAAS,CACvB3vB,KAAM,eACN+wB,gBAAiB4E,EAAevoB,SAAS4jB,aAIjDP,EAAkBppB,gBAAgB,eAAgB,CAC9C,CACI6rB,UAAWjT,EAAIZ,UACfgS,MAAO,IAAIh+B,EAAKi+B,SAASb,EAAmBkF,EAAe97B,IAAK87B,EAAevoB,UAC/ExG,KAAMqvB,MAKtB3/B,EAAMm6B,kBAAoB,KAC1Bn6B,EAAMq/B,eAAiB,MAE3B,IAAIjH,EAAct7B,KAAKs7B,YAAc,IAAI/C,EAAYC,EAAUv4B,EAAKigC,0BACpE5E,EAAY3C,gBAAiB,EAC7B2C,EAAYvO,QAAQqK,GAAG,YAAap3B,KAAKk5B,iBACzCoC,EAAYvO,QAAQqK,GAAG,YAAap3B,KAAK+7B,iBACzCT,EAAYvO,QAAQqK,GAAG,UAAWp3B,KAAKs5B,eACvCt5B,KAAKsiC,iBAAmBA,EAqC5B,OAnCAD,EAAwBvhC,UAAU2hC,cAAgB,SAAUxW,GACxD,MAAqC,kBAA1BjsB,KAAKsiC,iBACLriC,EAAK8iC,cAAc/iC,KAAKsiC,kBAEO,oBAA1BtiC,KAAKsiC,iBACVriC,EAAK8iC,cAAc/iC,KAAKsiC,iBAAiBrW,IAGzC+W,EAAkB/W,IAGjCoW,EAAwBvhC,UAAUg+B,YAAc,SAAUqB,EAAc7pB,GACpE,IAAI8pB,EAAepgC,KAAKq9B,kBACpB+C,GAAgBA,IAAiBD,GACjCC,EAAa7D,SAAS,CAAE3vB,KAAM,qBAE9BuzB,GACAA,EAAa5D,SAAS,CAAE3vB,KAAM,iBAAkB0J,MAAOA,KAG/D+rB,EAAwBvhC,UAAUs+B,UAAY,WACtCp/B,KAAKq9B,mBACLr9B,KAAKq9B,kBAAkBd,SAAS,CAAE3vB,KAAM,sBAGhDy1B,EAAwBvhC,UAAU4hC,oBAAsB,SAAUn/B,EAAI85B,GAClE,IAAI4F,EAAa5F,EAAkBnuB,IAAI,cACvC,MAA0B,oBAAf+zB,EACAA,EAAW1/B,GAES,kBAAf0/B,IAA2BA,GAChChI,QAAQh7B,EAAKijC,eAAe3/B,EAAI0/B,KAIxCZ,EA/HiC,GAmI5C,SAASM,EAAwB9yB,EAAU2yB,EAAUn0B,GAEjD,IADA,IAAI80B,EAAWniC,EAAS,GAAIwhC,EAASY,eAC5B/yB,EAAK,EAAG5E,EAAK4C,EAAS8tB,aAAaC,MAAMiH,sBAAuBhzB,EAAK5E,EAAGlK,OAAQ8O,IAAM,CAC3F,IAAIqxB,EAAYj2B,EAAG4E,GACnBrP,EAASmiC,EAAUzB,EAAU7xB,EAAU2yB,IAE3C,IAAI/7B,EAAMxG,EAAKqjC,cAAcH,EAAUX,EAASe,SAAU1zB,EAASjJ,OAAQyH,EAASa,IAAI,uBAAyB+rB,QAAQuH,EAASxjB,UAClI3Q,GACIlM,EAAQ0N,EAASC,MAAM3N,MAGvB0N,EAASjJ,QAAU47B,EAASgB,YAC5BrhC,EAAQkM,EAASpM,QAAQgW,IAAI9V,EAAOqgC,EAASgB,YAEjD,IAAIphC,EAAMogC,EAASxjB,SACf3Q,EAASpM,QAAQgW,IAAI9V,EAAOqgC,EAASxjB,UACrC3Q,EAASo1B,mBAAmB5zB,EAASjJ,OAAQzE,GAC7C6X,EAAW/Z,EAAKyjC,oBAAoBj9B,EAAIk5B,MAAO,CAAEx9B,MAAOA,EAAOC,IAAKA,IACxE,MAAO,CAAEqE,IAAKA,EAAKuT,SAAUA,GAIjC,SAASgpB,EAAkBz/B,GACvB,IAAIogC,EAAMC,EAAkBrgC,EAAI,SAC5B8f,EAAMsgB,EACNE,KAAKC,MAAMH,GACX,CAAE5iC,QAAQ,GACd,OAAOd,EAAK8iC,cAAc1f,GAG9B,SAASugB,EAAkBrgC,EAAIuC,GAC3B,IAAIi+B,EAAS9jC,EAAKyrB,OAAOsY,eACrBC,GAAgBF,EAASA,EAAS,IAAM,IAAMj+B,EAClD,OAAOvC,EAAG2gC,aAAa,QAAUD,IAAiB,GAJtDhkC,EAAKyrB,OAAOsY,eAAiB,GAY7B,IAAIG,EAAmC,WACnC,SAASA,EAAkB5gC,EAAI63B,GAC3B,IAAIl4B,EAAQlD,UACK,IAAbo7B,IAAuBA,EAAW,IACtCp7B,KAAK+4B,kBAAoB,SAAUz1B,GAC/B,IAAIk1B,EAAWt1B,EAAMs1B,SACjB/sB,EAAKvI,EAAMk4B,SAAUtF,EAAcrqB,EAAGqqB,YAAasO,EAAiB34B,EAAG24B,eAC3E5L,EAAS1C,YACU,MAAfA,EACIA,EACCxyB,EAAGgrB,QAAU,EAAIruB,EAAKokC,eAAeC,qBAC9C9L,EAAS3C,MACLvyB,EAAGgrB,QACoB,MAAlB8V,EAAyBA,EAAiBnkC,EAAKokC,eAAeD,eAC/D,GAEZpkC,KAAKk5B,gBAAkB,SAAU51B,GACzBA,EAAGgrB,SACHprB,EAAMs1B,SAAS3C,OACfvyB,EAAG2oB,UAAU9U,UAAU3T,SAAS,aAChCN,EAAMs1B,SAAS/B,OAAO1F,cAAc5Z,UAAUc,IAAI,gBAG1DjY,KAAKo7B,SAAWA,EAChB,IAAI5C,EAAWx4B,KAAKw4B,SAAW,IAAI5C,EAA0BryB,GAC7Di1B,EAASzC,oBAAqB,EACD,MAAzBqF,EAASmJ,eACT/L,EAAShC,QAAQrK,SAAWiP,EAASmJ,cAEhB,MAArBnJ,EAASoJ,WACThM,EAAS/B,OAAOnd,WAAa8hB,EAASoJ,UAE1ChM,EAASzL,QAAQqK,GAAG,cAAep3B,KAAK+4B,mBACxCP,EAASzL,QAAQqK,GAAG,YAAap3B,KAAKk5B,iBACtC,IAAImJ,EAAwB7J,EAAU4C,EAASqJ,WAKnD,OAHAN,EAAkBrjC,UAAU8D,QAAU,WAClC5E,KAAKw4B,SAAS5zB,WAEXu/B,EAvC2B,GAgDlCO,EAAyC,SAAU/iC,GAEnD,SAAS+iC,EAAwB1Y,GAC7B,IAAI9oB,EAAQvB,EAAOH,KAAKxB,KAAMgsB,IAAgBhsB,KAC9CkD,EAAMmpB,kBAAmB,EACzBnpB,EAAMyhC,eAAiB,GACvBzhC,EAAM0hC,gBAAkB,KACxB1hC,EAAM61B,kBAAoB,SAAUz1B,GAChCJ,EAAM6pB,QAAQ/oB,QAAQ,cAAeV,GAChCJ,EAAMmpB,kBAEPnpB,EAAM6pB,QAAQ/oB,QAAQ,YAAaV,IAG3CJ,EAAM2hC,kBAAoB,SAAUvhC,GAC3BJ,EAAMmpB,kBACPnpB,EAAM6pB,QAAQ/oB,QAAQ,WAAYV,IAG1CJ,EAAMk2B,gBAAkB,SAAU91B,GAC9BJ,EAAM6pB,QAAQ/oB,QAAQ,YAAaV,GAC9BJ,EAAMmpB,kBAEPnpB,EAAM6pB,QAAQ/oB,QAAQ,UAAWV,IAGzC,IAAIkzB,EAAUtzB,EAAMszB,QAAU,IAAIzK,EAAgBC,GAIlD,OAHAwK,EAAQzJ,QAAQqK,GAAG,cAAel0B,EAAM61B,mBACxCvC,EAAQzJ,QAAQqK,GAAG,cAAel0B,EAAM2hC,mBACxCrO,EAAQzJ,QAAQqK,GAAG,YAAal0B,EAAMk2B,iBAC/Bl2B,EA2BX,OAxDAvC,EAAU+jC,EAAyB/iC,GA+BnC+iC,EAAwB5jC,UAAU8D,QAAU,WACxC5E,KAAKw2B,QAAQ5xB,WAEjB8/B,EAAwB5jC,UAAU02B,cAAgB,SAAUlH,GACxDtwB,KAAKqsB,iBAAmBiE,GAE5BoU,EAAwB5jC,UAAU22B,mBAAqB,SAAUnH,GAC7D,GAAIA,EAGItwB,KAAK4kC,kBACL5kC,KAAK4kC,gBAAgB/gC,MAAMotB,WAAa,GACxCjxB,KAAK4kC,gBAAkB,UAG1B,CACD,IAAI/U,EAAW7vB,KAAK2kC,eAChBjgC,SAASwE,cAAclJ,KAAK2kC,gBAC5B,KACA9U,IACA7vB,KAAK4kC,gBAAkB/U,EACvBA,EAAShsB,MAAMotB,WAAa,YAIjCyT,EAzDiC,CA0D1CzkC,EAAK23B,iBAMHkN,EAAqC,WACrC,SAASA,EAAoBC,EAAqB3J,GAC9C,IAAIpP,EAActnB,SAGlBqgC,IAAwBrgC,UACpBqgC,aAA+BC,SAC/BhZ,EAAc+Y,EACd3J,EAAWA,GAAY,IAGvBA,EAAY2J,GAAuB,GAEvC,IAAIvM,EAAWx4B,KAAKw4B,SAAW,IAAIkM,EAAwB1Y,GACtB,kBAA1BoP,EAASmJ,aAChB/L,EAAShC,QAAQrK,SAAWiP,EAASmJ,aAEhCvY,IAAgBtnB,WACrB8zB,EAAShC,QAAQrK,SAAW,gBAEO,kBAA5BiP,EAASuJ,iBAChBnM,EAASmM,eAAiBvJ,EAASuJ,gBAEvC,IAAItC,EAAwB7J,EAAU4C,EAASqJ,WAKnD,OAHAK,EAAoBhkC,UAAU8D,QAAU,WACpC5E,KAAKw4B,SAAS5zB,WAEXkgC,EA5B6B,GA+BpCnmB,EAAO1e,EAAK2e,aAAa,CACzBqmB,sBAAuB,CAAC9J,EAAcO,EAAewB,EAAe6D,GACpEmE,qBAAsB,CAACvD,GACvBwD,oBAAqBvP,IAGzB71B,EAAQqlC,UAAYjB,EACpBpkC,EAAQ61B,0BAA4BA,EACpC71B,EAAQgsB,gBAAkBA,EAC1BhsB,EAAQ+kC,oBAAsBA,EAC9B/kC,EAAQuf,QAAUX,EAElBte,OAAOof,eAAe1f,EAAS,aAAc,CAAE2f,OAAO,Q,qHCtmErC2lB,EAAU,+CAY7B,OAZ6B,4CAE9B,WACC,OAAO7lC,IAAMC,IAAI,sCAAsCC,MAAK,SAAAC,GAAG,OAAIA,EAAIC,KAAKA,UAC5E,2BAED,WACC,OAAOJ,IAAMC,IAAI,uCAAuCC,MAAK,SAAAC,GAAG,OAAIA,EAAIC,KAAKA,UAC7E,0BAED,WACC,OAAOJ,IAAMC,IAAI,sCAAsCC,MAAK,SAAAC,GAAG,OAAIA,EAAIC,KAAKA,YAC5E,EAZ6B","file":"js/chunk-3de280be.329c32a4.js","sourcesContent":["import axios from 'axios';\n\nexport default class EventService {\n\n\tgetEvents() {\n\t\treturn axios.get('assets/layout/data/events.json').then(res => res.data.data);\n\t}\n}","/*!\n@fullcalendar/daygrid v4.0.1\nDocs & License: https://fullcalendar.io/\n(c) 2019 Adam Shaw\n*/\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :\n typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :\n (global = global || self, factory(global.FullCalendarDayGrid = {}, global.FullCalendar));\n}(this, function (exports, core) { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise */\r\n\r\n var extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n }\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\n\n var DayGridDateProfileGenerator = /** @class */ (function (_super) {\n __extends(DayGridDateProfileGenerator, _super);\n function DayGridDateProfileGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // Computes the date range that will be rendered.\n DayGridDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {\n var dateEnv = this.dateEnv;\n var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay);\n var start = renderRange.start;\n var end = renderRange.end;\n var endOfWeek;\n // year and month views should be aligned with weeks. this is already done for week\n if (/^(year|month)$/.test(currentRangeUnit)) {\n start = dateEnv.startOfWeek(start);\n // make end-of-week if not already\n endOfWeek = dateEnv.startOfWeek(end);\n if (endOfWeek.valueOf() !== end.valueOf()) {\n end = core.addWeeks(endOfWeek, 1);\n }\n }\n // ensure 6 weeks\n if (this.options.monthMode &&\n this.options.fixedWeekCount) {\n var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\n core.diffWeeks(start, end));\n end = core.addWeeks(end, 6 - rowCnt);\n }\n return { start: start, end: end };\n };\n return DayGridDateProfileGenerator;\n }(core.DateProfileGenerator));\n\n /* A rectangular panel that is absolutely positioned over other content\n ------------------------------------------------------------------------------------------------------------------------\n Options:\n - className (string)\n - content (HTML string, element, or element array)\n - parentEl\n - top\n - left\n - right (the x coord of where the right edge should be. not a \"CSS\" right)\n - autoHide (boolean)\n - show (callback)\n - hide (callback)\n */\n var Popover = /** @class */ (function () {\n function Popover(options) {\n var _this = this;\n this.isHidden = true;\n this.margin = 10; // the space required between the popover and the edges of the scroll container\n // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n this.documentMousedown = function (ev) {\n // only hide the popover if the click happened outside the popover\n if (_this.el && !_this.el.contains(ev.target)) {\n _this.hide();\n }\n };\n this.options = options;\n }\n // Shows the popover on the specified position. Renders it if not already\n Popover.prototype.show = function () {\n if (this.isHidden) {\n if (!this.el) {\n this.render();\n }\n this.el.style.display = '';\n this.position();\n this.isHidden = false;\n this.trigger('show');\n }\n };\n // Hides the popover, through CSS, but does not remove it from the DOM\n Popover.prototype.hide = function () {\n if (!this.isHidden) {\n this.el.style.display = 'none';\n this.isHidden = true;\n this.trigger('hide');\n }\n };\n // Creates `this.el` and renders content inside of it\n Popover.prototype.render = function () {\n var _this = this;\n var options = this.options;\n var el = this.el = core.createElement('div', {\n className: 'fc-popover ' + (options.className || ''),\n style: {\n top: '0',\n left: '0'\n }\n });\n if (typeof options.content === 'function') {\n options.content(el);\n }\n options.parentEl.appendChild(el);\n // when a click happens on anything inside with a 'fc-close' className, hide the popover\n core.listenBySelector(el, 'click', '.fc-close', function (ev) {\n _this.hide();\n });\n if (options.autoHide) {\n document.addEventListener('mousedown', this.documentMousedown);\n }\n };\n // Hides and unregisters any handlers\n Popover.prototype.destroy = function () {\n this.hide();\n if (this.el) {\n core.removeElement(this.el);\n this.el = null;\n }\n document.removeEventListener('mousedown', this.documentMousedown);\n };\n // Positions the popover optimally, using the top/left/right options\n Popover.prototype.position = function () {\n var options = this.options;\n var el = this.el;\n var elDims = el.getBoundingClientRect(); // only used for width,height\n var origin = core.computeRect(el.offsetParent);\n var clippingRect = core.computeClippingRect(options.parentEl);\n var top; // the \"position\" (not \"offset\") values for the popover\n var left; //\n // compute top and left\n top = options.top || 0;\n if (options.left !== undefined) {\n left = options.left;\n }\n else if (options.right !== undefined) {\n left = options.right - elDims.width; // derive the left value from the right value\n }\n else {\n left = 0;\n }\n // constrain to the view port. if constrained by two edges, give precedence to top/left\n top = Math.min(top, clippingRect.bottom - elDims.height - this.margin);\n top = Math.max(top, clippingRect.top + this.margin);\n left = Math.min(left, clippingRect.right - elDims.width - this.margin);\n left = Math.max(left, clippingRect.left + this.margin);\n core.applyStyle(el, {\n top: top - origin.top,\n left: left - origin.left\n });\n };\n // Triggers a callback. Calls a function in the option hash of the same name.\n // Arguments beyond the first `name` are forwarded on.\n // TODO: better code reuse for this. Repeat code\n // can kill this???\n Popover.prototype.trigger = function (name) {\n if (this.options[name]) {\n this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n };\n return Popover;\n }());\n\n /* Event-rendering methods for the DayGrid class\n ----------------------------------------------------------------------------------------------------------------------*/\n // \"Simple\" is bad a name. has nothing to do with SimpleDayGrid\n var SimpleDayGridEventRenderer = /** @class */ (function (_super) {\n __extends(SimpleDayGridEventRenderer, _super);\n function SimpleDayGridEventRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // Builds the HTML to be used for the default element for an individual segment\n SimpleDayGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {\n var options = this.context.options;\n var eventRange = seg.eventRange;\n var eventDef = eventRange.def;\n var eventUi = eventRange.ui;\n var allDay = eventDef.allDay;\n var isDraggable = eventUi.startEditable;\n var isResizableFromStart = allDay && seg.isStart && eventUi.durationEditable && options.eventResizableFromStart;\n var isResizableFromEnd = allDay && seg.isEnd && eventUi.durationEditable;\n var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);\n var skinCss = core.cssToStr(this.getSkinCss(eventUi));\n var timeHtml = '';\n var timeText;\n var titleHtml;\n classes.unshift('fc-day-grid-event', 'fc-h-event');\n // Only display a timed events time if it is the starting segment\n if (seg.isStart) {\n timeText = this.getTimeText(eventRange);\n if (timeText) {\n timeHtml = '' + core.htmlEscape(timeText) + '';\n }\n }\n titleHtml =\n '' +\n (core.htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height\n '';\n return '' +\n '
' +\n (options.dir === 'rtl' ?\n titleHtml + ' ' + timeHtml : // put a natural space in between\n timeHtml + ' ' + titleHtml //\n ) +\n '
' +\n (isResizableFromStart ?\n '
' :\n '') +\n (isResizableFromEnd ?\n '
' :\n '') +\n '
';\n };\n // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined\n SimpleDayGridEventRenderer.prototype.computeEventTimeFormat = function () {\n return {\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'narrow'\n };\n };\n SimpleDayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\n return false; // TODO: somehow consider the originating DayGrid's column count\n };\n return SimpleDayGridEventRenderer;\n }(core.FgEventRenderer));\n\n /* Event-rendering methods for the DayGrid class\n ----------------------------------------------------------------------------------------------------------------------*/\n var DayGridEventRenderer = /** @class */ (function (_super) {\n __extends(DayGridEventRenderer, _super);\n function DayGridEventRenderer(dayGrid) {\n var _this = _super.call(this, dayGrid.context) || this;\n _this.dayGrid = dayGrid;\n return _this;\n }\n // Renders the given foreground event segments onto the grid\n DayGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {\n var rowStructs = this.rowStructs = this.renderSegRows(segs);\n // append to each row's content skeleton\n this.dayGrid.rowEls.forEach(function (rowNode, i) {\n rowNode.querySelector('.fc-content-skeleton > table').appendChild(rowStructs[i].tbodyEl);\n });\n // removes the \"more..\" events popover\n if (!mirrorInfo) {\n this.dayGrid.removeSegPopover();\n }\n };\n // Unrenders all currently rendered foreground event segments\n DayGridEventRenderer.prototype.detachSegs = function () {\n var rowStructs = this.rowStructs || [];\n var rowStruct;\n while ((rowStruct = rowStructs.pop())) {\n core.removeElement(rowStruct.tbodyEl);\n }\n this.rowStructs = null;\n };\n // Uses the given events array to generate elements that should be appended to each row's content skeleton.\n // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\n // PRECONDITION: each segment shoud already have a rendered and assigned `.el`\n DayGridEventRenderer.prototype.renderSegRows = function (segs) {\n var rowStructs = [];\n var segRows;\n var row;\n segRows = this.groupSegRows(segs); // group into nested arrays\n // iterate each row of segment groupings\n for (row = 0; row < segRows.length; row++) {\n rowStructs.push(this.renderSegRow(row, segRows[row]));\n }\n return rowStructs;\n };\n // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains\n // the segments. Returns object with a bunch of internal data about how the render was calculated.\n // NOTE: modifies rowSegs\n DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {\n var dayGrid = this.dayGrid;\n var colCnt = dayGrid.colCnt, isRtl = dayGrid.isRtl;\n var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\n var levelCnt = Math.max(1, segLevels.length); // ensure at least one level\n var tbody = document.createElement('tbody');\n var segMatrix = []; // lookup for which segments are rendered into which level+col cells\n var cellMatrix = []; // lookup for all elements of the level+col matrix\n var loneCellMatrix = []; // lookup for elements that only take up a single column\n var i;\n var levelSegs;\n var col;\n var tr;\n var j;\n var seg;\n var td;\n // populates empty cells from the current column (`col`) to `endCol`\n function emptyCellsUntil(endCol) {\n while (col < endCol) {\n // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\n td = (loneCellMatrix[i - 1] || [])[col];\n if (td) {\n td.rowSpan = (td.rowSpan || 1) + 1;\n }\n else {\n td = document.createElement('td');\n tr.appendChild(td);\n }\n cellMatrix[i][col] = td;\n loneCellMatrix[i][col] = td;\n col++;\n }\n }\n for (i = 0; i < levelCnt; i++) { // iterate through all levels\n levelSegs = segLevels[i];\n col = 0;\n tr = document.createElement('tr');\n segMatrix.push([]);\n cellMatrix.push([]);\n loneCellMatrix.push([]);\n // levelCnt might be 1 even though there are no actual levels. protect against this.\n // this single empty row is useful for styling.\n if (levelSegs) {\n for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\n seg = levelSegs[j];\n var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;\n var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;\n emptyCellsUntil(leftCol);\n // create a container that occupies or more columns. append the event element.\n td = core.createElement('td', { className: 'fc-event-container' }, seg.el);\n if (leftCol !== rightCol) {\n td.colSpan = rightCol - leftCol + 1;\n }\n else { // a single-column segment\n loneCellMatrix[i][col] = td;\n }\n while (col <= rightCol) {\n cellMatrix[i][col] = td;\n segMatrix[i][col] = seg;\n col++;\n }\n tr.appendChild(td);\n }\n }\n emptyCellsUntil(colCnt); // finish off the row\n var introHtml = dayGrid.renderProps.renderIntroHtml();\n if (introHtml) {\n if (dayGrid.isRtl) {\n core.appendToElement(tr, introHtml);\n }\n else {\n core.prependToElement(tr, introHtml);\n }\n }\n tbody.appendChild(tr);\n }\n return {\n row: row,\n tbodyEl: tbody,\n cellMatrix: cellMatrix,\n segMatrix: segMatrix,\n segLevels: segLevels,\n segs: rowSegs\n };\n };\n // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\n // NOTE: modifies segs\n DayGridEventRenderer.prototype.buildSegLevels = function (segs) {\n var _a = this.dayGrid, isRtl = _a.isRtl, colCnt = _a.colCnt;\n var levels = [];\n var i;\n var seg;\n var j;\n // Give preference to elements with certain criteria, so they have\n // a chance to be closer to the top.\n segs = this.sortEventSegs(segs);\n for (i = 0; i < segs.length; i++) {\n seg = segs[i];\n // loop through levels, starting with the topmost, until the segment doesn't collide with other segments\n for (j = 0; j < levels.length; j++) {\n if (!isDaySegCollision(seg, levels[j])) {\n break;\n }\n }\n // `j` now holds the desired subrow index\n seg.level = j;\n seg.leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; // for sorting only\n seg.rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol // for sorting only\n ;\n (levels[j] || (levels[j] = [])).push(seg);\n }\n // order segments left-to-right. very important if calendar is RTL\n for (j = 0; j < levels.length; j++) {\n levels[j].sort(compareDaySegCols);\n }\n return levels;\n };\n // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\n DayGridEventRenderer.prototype.groupSegRows = function (segs) {\n var segRows = [];\n var i;\n for (i = 0; i < this.dayGrid.rowCnt; i++) {\n segRows.push([]);\n }\n for (i = 0; i < segs.length; i++) {\n segRows[segs[i].row].push(segs[i]);\n }\n return segRows;\n };\n // Computes a default `displayEventEnd` value if one is not expliclty defined\n DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\n return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day\n };\n return DayGridEventRenderer;\n }(SimpleDayGridEventRenderer));\n // Computes whether two segments' columns collide. They are assumed to be in the same row.\n function isDaySegCollision(seg, otherSegs) {\n var i;\n var otherSeg;\n for (i = 0; i < otherSegs.length; i++) {\n otherSeg = otherSegs[i];\n if (otherSeg.firstCol <= seg.lastCol &&\n otherSeg.lastCol >= seg.firstCol) {\n return true;\n }\n }\n return false;\n }\n // A cmp function for determining the leftmost event\n function compareDaySegCols(a, b) {\n return a.leftCol - b.leftCol;\n }\n\n var DayGridMirrorRenderer = /** @class */ (function (_super) {\n __extends(DayGridMirrorRenderer, _super);\n function DayGridMirrorRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DayGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {\n var sourceSeg = mirrorInfo.sourceSeg;\n var rowStructs = this.rowStructs = this.renderSegRows(segs);\n // inject each new event skeleton into each associated row\n this.dayGrid.rowEls.forEach(function (rowNode, row) {\n var skeletonEl = core.htmlToElement('
'); // will be absolutely positioned\n var skeletonTopEl;\n var skeletonTop;\n // If there is an original segment, match the top position. Otherwise, put it at the row's top level\n if (sourceSeg && sourceSeg.row === row) {\n skeletonTopEl = sourceSeg.el;\n }\n else {\n skeletonTopEl = rowNode.querySelector('.fc-content-skeleton tbody');\n if (!skeletonTopEl) { // when no events\n skeletonTopEl = rowNode.querySelector('.fc-content-skeleton table');\n }\n }\n skeletonTop = skeletonTopEl.getBoundingClientRect().top -\n rowNode.getBoundingClientRect().top; // the offsetParent origin\n skeletonEl.style.top = skeletonTop + 'px';\n skeletonEl.querySelector('table').appendChild(rowStructs[row].tbodyEl);\n rowNode.appendChild(skeletonEl);\n });\n };\n return DayGridMirrorRenderer;\n }(DayGridEventRenderer));\n\n var DayGridFillRenderer = /** @class */ (function (_super) {\n __extends(DayGridFillRenderer, _super);\n function DayGridFillRenderer(dayGrid) {\n var _this = _super.call(this, dayGrid.context) || this;\n _this.fillSegTag = 'td'; // override the default tag name\n _this.dayGrid = dayGrid;\n return _this;\n }\n DayGridFillRenderer.prototype.renderSegs = function (type, segs) {\n // don't render timed background events\n if (type === 'bgEvent') {\n segs = segs.filter(function (seg) {\n return seg.eventRange.def.allDay;\n });\n }\n _super.prototype.renderSegs.call(this, type, segs);\n };\n DayGridFillRenderer.prototype.attachSegs = function (type, segs) {\n var els = [];\n var i;\n var seg;\n var skeletonEl;\n for (i = 0; i < segs.length; i++) {\n seg = segs[i];\n skeletonEl = this.renderFillRow(type, seg);\n this.dayGrid.rowEls[seg.row].appendChild(skeletonEl);\n els.push(skeletonEl);\n }\n return els;\n };\n // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\n DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {\n var dayGrid = this.dayGrid;\n var colCnt = dayGrid.colCnt, isRtl = dayGrid.isRtl;\n var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;\n var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;\n var startCol = leftCol;\n var endCol = rightCol + 1;\n var className;\n var skeletonEl;\n var trEl;\n if (type === 'businessHours') {\n className = 'bgevent';\n }\n else {\n className = type.toLowerCase();\n }\n skeletonEl = core.htmlToElement('
' +\n '
' +\n '
');\n trEl = skeletonEl.getElementsByTagName('tr')[0];\n if (startCol > 0) {\n core.appendToElement(trEl, \n // will create (startCol + 1) td's\n new Array(startCol + 1).join(''));\n }\n seg.el.colSpan = endCol - startCol;\n trEl.appendChild(seg.el);\n if (endCol < colCnt) {\n core.appendToElement(trEl, \n // will create (colCnt - endCol) td's\n new Array(colCnt - endCol + 1).join(''));\n }\n var introHtml = dayGrid.renderProps.renderIntroHtml();\n if (introHtml) {\n if (dayGrid.isRtl) {\n core.appendToElement(trEl, introHtml);\n }\n else {\n core.prependToElement(trEl, introHtml);\n }\n }\n return skeletonEl;\n };\n return DayGridFillRenderer;\n }(core.FillRenderer));\n\n var DayTile = /** @class */ (function (_super) {\n __extends(DayTile, _super);\n function DayTile(context, el) {\n var _this = _super.call(this, context, el) || this;\n var eventRenderer = _this.eventRenderer = new DayTileEventRenderer(_this);\n var renderFrame = _this.renderFrame = core.memoizeRendering(_this._renderFrame);\n _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderFrame]);\n _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);\n _this.renderEventDrag = core.memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);\n _this.renderEventResize = core.memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);\n context.calendar.registerInteractiveComponent(_this, {\n el: _this.el,\n useEventCenter: false\n });\n return _this;\n }\n DayTile.prototype.render = function (props) {\n this.renderFrame(props.date);\n this.renderFgEvents(props.fgSegs);\n this.renderEventSelection(props.eventSelection);\n this.renderEventDrag(props.eventDragInstances);\n this.renderEventResize(props.eventResizeInstances);\n };\n DayTile.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.renderFrame.unrender(); // should unrender everything else\n this.calendar.unregisterInteractiveComponent(this);\n };\n DayTile.prototype._renderFrame = function (date) {\n var _a = this, theme = _a.theme, dateEnv = _a.dateEnv;\n var title = dateEnv.format(date, core.createFormatter(this.opt('dayPopoverFormat')) // TODO: cache\n );\n this.el.innerHTML =\n '
' +\n '' +\n core.htmlEscape(title) +\n '' +\n '' +\n '
' +\n '
' +\n '
' +\n '
';\n this.segContainerEl = this.el.querySelector('.fc-event-container');\n };\n DayTile.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {\n var date = this.props.date; // HACK\n if (positionLeft < elWidth && positionTop < elHeight) {\n return {\n component: this,\n dateSpan: {\n allDay: true,\n range: { start: date, end: core.addDays(date, 1) }\n },\n dayEl: this.el,\n rect: {\n left: 0,\n top: 0,\n right: elWidth,\n bottom: elHeight\n },\n layer: 1\n };\n }\n };\n return DayTile;\n }(core.DateComponent));\n var DayTileEventRenderer = /** @class */ (function (_super) {\n __extends(DayTileEventRenderer, _super);\n function DayTileEventRenderer(dayTile) {\n var _this = _super.call(this, dayTile.context) || this;\n _this.dayTile = dayTile;\n return _this;\n }\n DayTileEventRenderer.prototype.attachSegs = function (segs) {\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\n var seg = segs_1[_i];\n this.dayTile.segContainerEl.appendChild(seg.el);\n }\n };\n DayTileEventRenderer.prototype.detachSegs = function (segs) {\n for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {\n var seg = segs_2[_i];\n core.removeElement(seg.el);\n }\n };\n return DayTileEventRenderer;\n }(SimpleDayGridEventRenderer));\n\n var DayBgRow = /** @class */ (function () {\n function DayBgRow(context) {\n this.context = context;\n }\n DayBgRow.prototype.renderHtml = function (props) {\n var parts = [];\n if (props.renderIntroHtml) {\n parts.push(props.renderIntroHtml());\n }\n for (var _i = 0, _a = props.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n parts.push(renderCellHtml(cell.date, props.dateProfile, this.context, cell.htmlAttrs));\n }\n if (!props.cells.length) {\n parts.push('');\n }\n if (this.context.options.dir === 'rtl') {\n parts.reverse();\n }\n return '' + parts.join('') + '';\n };\n return DayBgRow;\n }());\n function renderCellHtml(date, dateProfile, context, otherAttrs) {\n var dateEnv = context.dateEnv, theme = context.theme;\n var isDateValid = core.rangeContainsMarker(dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.\n var classes = core.getDayClasses(date, dateProfile, context);\n classes.unshift('fc-day', theme.getClass('widgetContent'));\n return '';\n }\n\n var DAY_NUM_FORMAT = core.createFormatter({ day: 'numeric' });\n var WEEK_NUM_FORMAT = core.createFormatter({ week: 'numeric' });\n var DayGrid = /** @class */ (function (_super) {\n __extends(DayGrid, _super);\n function DayGrid(context, el, renderProps) {\n var _this = _super.call(this, context, el) || this;\n _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid\n _this.isCellSizesDirty = false;\n var eventRenderer = _this.eventRenderer = new DayGridEventRenderer(_this);\n var fillRenderer = _this.fillRenderer = new DayGridFillRenderer(_this);\n _this.mirrorRenderer = new DayGridMirrorRenderer(_this);\n var renderCells = _this.renderCells = core.memoizeRendering(_this._renderCells, _this._unrenderCells);\n _this.renderBusinessHours = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderCells]);\n _this.renderDateSelection = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'highlight'), fillRenderer.unrender.bind(fillRenderer, 'highlight'), [renderCells]);\n _this.renderBgEvents = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderCells]);\n _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderCells]);\n _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);\n _this.renderEventDrag = core.memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderCells]);\n _this.renderEventResize = core.memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderCells]);\n _this.renderProps = renderProps;\n return _this;\n }\n DayGrid.prototype.render = function (props) {\n var cells = props.cells;\n this.rowCnt = cells.length;\n this.colCnt = cells[0].length;\n this.renderCells(cells, props.isRigid);\n this.renderBusinessHours(props.businessHourSegs);\n this.renderDateSelection(props.dateSelectionSegs);\n this.renderBgEvents(props.bgEventSegs);\n this.renderFgEvents(props.fgEventSegs);\n this.renderEventSelection(props.eventSelection);\n this.renderEventDrag(props.eventDrag);\n this.renderEventResize(props.eventResize);\n if (this.segPopoverTile) {\n this.updateSegPopoverTile();\n }\n };\n DayGrid.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.renderCells.unrender(); // will unrender everything else\n };\n DayGrid.prototype.getCellRange = function (row, col) {\n var start = this.props.cells[row][col].date;\n var end = core.addDays(start, 1);\n return { start: start, end: end };\n };\n DayGrid.prototype.updateSegPopoverTile = function (date, segs) {\n var ownProps = this.props;\n this.segPopoverTile.receiveProps({\n date: date || this.segPopoverTile.props.date,\n fgSegs: segs || this.segPopoverTile.props.fgSegs,\n eventSelection: ownProps.eventSelection,\n eventDragInstances: ownProps.eventDrag ? ownProps.eventDrag.affectedInstances : null,\n eventResizeInstances: ownProps.eventResize ? ownProps.eventResize.affectedInstances : null\n });\n };\n /* Date Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype._renderCells = function (cells, isRigid) {\n var _a = this, view = _a.view, dateEnv = _a.dateEnv;\n var _b = this, rowCnt = _b.rowCnt, colCnt = _b.colCnt;\n var html = '';\n var row;\n var col;\n for (row = 0; row < rowCnt; row++) {\n html += this.renderDayRowHtml(row, isRigid);\n }\n this.el.innerHTML = html;\n this.rowEls = core.findElements(this.el, '.fc-row');\n this.cellEls = core.findElements(this.el, '.fc-day, .fc-disabled-day');\n if (this.isRtl) {\n this.cellEls.reverse();\n }\n this.rowPositions = new core.PositionCache(this.el, this.rowEls, false, true // vertical\n );\n this.colPositions = new core.PositionCache(this.el, this.cellEls.slice(0, colCnt), // only the first row\n true, false // horizontal\n );\n // trigger dayRender with each cell's element\n for (row = 0; row < rowCnt; row++) {\n for (col = 0; col < colCnt; col++) {\n this.publiclyTrigger('dayRender', [\n {\n date: dateEnv.toDate(cells[row][col].date),\n el: this.getCellEl(row, col),\n view: view\n }\n ]);\n }\n }\n this.isCellSizesDirty = true;\n };\n DayGrid.prototype._unrenderCells = function () {\n this.removeSegPopover();\n };\n // Generates the HTML for a single row, which is a div that wraps a table.\n // `row` is the row number.\n DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {\n var theme = this.theme;\n var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];\n if (isRigid) {\n classes.push('fc-rigid');\n }\n var bgRow = new DayBgRow(this.context);\n return '' +\n '
' +\n '
' +\n '' +\n bgRow.renderHtml({\n cells: this.props.cells[row],\n dateProfile: this.props.dateProfile,\n renderIntroHtml: this.renderProps.renderBgIntroHtml\n }) +\n '
' +\n '
' +\n '
' +\n '' +\n (this.getIsNumbersVisible() ?\n '' +\n this.renderNumberTrHtml(row) +\n '' :\n '') +\n '
' +\n '
' +\n '
';\n };\n DayGrid.prototype.getIsNumbersVisible = function () {\n return this.getIsDayNumbersVisible() ||\n this.renderProps.cellWeekNumbersVisible ||\n this.renderProps.colWeekNumbersVisible;\n };\n DayGrid.prototype.getIsDayNumbersVisible = function () {\n return this.rowCnt > 1;\n };\n /* Grid Number Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype.renderNumberTrHtml = function (row) {\n var intro = this.renderProps.renderNumberIntroHtml(row, this);\n return '' +\n '' +\n (this.isRtl ? '' : intro) +\n this.renderNumberCellsHtml(row) +\n (this.isRtl ? intro : '') +\n '';\n };\n DayGrid.prototype.renderNumberCellsHtml = function (row) {\n var htmls = [];\n var col;\n var date;\n for (col = 0; col < this.colCnt; col++) {\n date = this.props.cells[row][col].date;\n htmls.push(this.renderNumberCellHtml(date));\n }\n if (this.isRtl) {\n htmls.reverse();\n }\n return htmls.join('');\n };\n // Generates the HTML for the s of the \"number\" row in the DayGrid's content skeleton.\n // The number row will only exist if either day numbers or week numbers are turned on.\n DayGrid.prototype.renderNumberCellHtml = function (date) {\n var _a = this, view = _a.view, dateEnv = _a.dateEnv;\n var html = '';\n var isDateValid = core.rangeContainsMarker(this.props.dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.\n var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;\n var classes;\n var weekCalcFirstDow;\n if (!isDayNumberVisible && !this.renderProps.cellWeekNumbersVisible) {\n // no numbers in day cell (week number must be along the side)\n return ''; // will create an empty space above events :(\n }\n classes = core.getDayClasses(date, this.props.dateProfile, this.context);\n classes.unshift('fc-day-top');\n if (this.renderProps.cellWeekNumbersVisible) {\n weekCalcFirstDow = dateEnv.weekDow;\n }\n html += '';\n if (this.renderProps.cellWeekNumbersVisible && (date.getUTCDay() === weekCalcFirstDow)) {\n html += core.buildGotoAnchorHtml(view, { date: date, type: 'week' }, { 'class': 'fc-week-number' }, dateEnv.format(date, WEEK_NUM_FORMAT) // inner HTML\n );\n }\n if (isDayNumberVisible) {\n html += core.buildGotoAnchorHtml(view, date, { 'class': 'fc-day-number' }, dateEnv.format(date, DAY_NUM_FORMAT) // inner HTML\n );\n }\n html += '';\n return html;\n };\n /* Sizing\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype.updateSize = function (isResize) {\n var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;\n if (isResize || this.isCellSizesDirty) {\n this.buildColPositions();\n this.buildRowPositions();\n this.isCellSizesDirty = false;\n }\n fillRenderer.computeSizes(isResize);\n eventRenderer.computeSizes(isResize);\n mirrorRenderer.computeSizes(isResize);\n fillRenderer.assignSizes(isResize);\n eventRenderer.assignSizes(isResize);\n mirrorRenderer.assignSizes(isResize);\n };\n DayGrid.prototype.buildColPositions = function () {\n this.colPositions.build();\n };\n DayGrid.prototype.buildRowPositions = function () {\n this.rowPositions.build();\n this.rowPositions.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\n };\n /* Hit System\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype.positionToHit = function (leftPosition, topPosition) {\n var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions;\n var col = colPositions.leftToIndex(leftPosition);\n var row = rowPositions.topToIndex(topPosition);\n if (row != null && col != null) {\n return {\n row: row,\n col: col,\n dateSpan: {\n range: this.getCellRange(row, col),\n allDay: true\n },\n dayEl: this.getCellEl(row, col),\n relativeRect: {\n left: colPositions.lefts[col],\n right: colPositions.rights[col],\n top: rowPositions.tops[row],\n bottom: rowPositions.bottoms[row]\n }\n };\n }\n };\n /* Cell System\n ------------------------------------------------------------------------------------------------------------------*/\n // FYI: the first column is the leftmost column, regardless of date\n DayGrid.prototype.getCellEl = function (row, col) {\n return this.cellEls[row * this.colCnt + col];\n };\n /* Event Drag Visualization\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype._renderEventDrag = function (state) {\n if (state) {\n this.eventRenderer.hideByHash(state.affectedInstances);\n this.fillRenderer.renderSegs('highlight', state.segs);\n }\n };\n DayGrid.prototype._unrenderEventDrag = function (state) {\n if (state) {\n this.eventRenderer.showByHash(state.affectedInstances);\n this.fillRenderer.unrender('highlight');\n }\n };\n /* Event Resize Visualization\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype._renderEventResize = function (state) {\n if (state) {\n this.eventRenderer.hideByHash(state.affectedInstances);\n this.fillRenderer.renderSegs('highlight', state.segs);\n this.mirrorRenderer.renderSegs(state.segs, { isResizing: true, sourceSeg: state.sourceSeg });\n }\n };\n DayGrid.prototype._unrenderEventResize = function (state) {\n if (state) {\n this.eventRenderer.showByHash(state.affectedInstances);\n this.fillRenderer.unrender('highlight');\n this.mirrorRenderer.unrender(state.segs, { isResizing: true, sourceSeg: state.sourceSeg });\n }\n };\n /* More+ Link Popover\n ------------------------------------------------------------------------------------------------------------------*/\n DayGrid.prototype.removeSegPopover = function () {\n if (this.segPopover) {\n this.segPopover.hide(); // in handler, will call segPopover's removeElement\n }\n };\n // Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\n // `levelLimit` can be false (don't limit), a number, or true (should be computed).\n DayGrid.prototype.limitRows = function (levelLimit) {\n var rowStructs = this.eventRenderer.rowStructs || [];\n var row; // row #\n var rowLevelLimit;\n for (row = 0; row < rowStructs.length; row++) {\n this.unlimitRow(row);\n if (!levelLimit) {\n rowLevelLimit = false;\n }\n else if (typeof levelLimit === 'number') {\n rowLevelLimit = levelLimit;\n }\n else {\n rowLevelLimit = this.computeRowLevelLimit(row);\n }\n if (rowLevelLimit !== false) {\n this.limitRow(row, rowLevelLimit);\n }\n }\n };\n // Computes the number of levels a row will accomodate without going outside its bounds.\n // Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\n // `row` is the row number.\n DayGrid.prototype.computeRowLevelLimit = function (row) {\n var rowEl = this.rowEls[row]; // the containing \"fake\" row div\n var rowBottom = rowEl.getBoundingClientRect().bottom; // relative to viewport!\n var trEls = core.findChildren(this.eventRenderer.rowStructs[row].tbodyEl);\n var i;\n var trEl;\n // Reveal one level at a time and stop when we find one out of bounds\n for (i = 0; i < trEls.length; i++) {\n trEl = trEls[i];\n trEl.classList.remove('fc-limited'); // reset to original state (reveal)\n if (trEl.getBoundingClientRect().bottom > rowBottom) {\n return i;\n }\n }\n return false; // should not limit at all\n };\n // Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\n // `row` is the row number.\n // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\n DayGrid.prototype.limitRow = function (row, levelLimit) {\n var _this = this;\n var _a = this, colCnt = _a.colCnt, isRtl = _a.isRtl;\n var rowStruct = this.eventRenderer.rowStructs[row];\n var moreNodes = []; // array of \"more\" links and DOM nodes\n var col = 0; // col #, left-to-right (not chronologically)\n var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\n var cellMatrix; // a matrix (by level, then column) of all elements in the row\n var limitedNodes; // array of temporarily hidden level and segment DOM nodes\n var i;\n var seg;\n var segsBelow; // array of segment objects below `seg` in the current `col`\n var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\n var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\n var td;\n var rowSpan;\n var segMoreNodes; // array of \"more\" cells that will stand-in for the current seg's cell\n var j;\n var moreTd;\n var moreWrap;\n var moreLink;\n // Iterates through empty level cells and places \"more\" links inside if need be\n var emptyCellsUntil = function (endCol) {\n while (col < endCol) {\n segsBelow = _this.getCellSegs(row, col, levelLimit);\n if (segsBelow.length) {\n td = cellMatrix[levelLimit - 1][col];\n moreLink = _this.renderMoreLink(row, col, segsBelow);\n moreWrap = core.createElement('div', null, moreLink);\n td.appendChild(moreWrap);\n moreNodes.push(moreWrap[0]);\n }\n col++;\n }\n };\n if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\n levelSegs = rowStruct.segLevels[levelLimit - 1];\n cellMatrix = rowStruct.cellMatrix;\n limitedNodes = core.findChildren(rowStruct.tbodyEl).slice(levelLimit); // get level elements past the limit\n limitedNodes.forEach(function (node) {\n node.classList.add('fc-limited'); // hide elements and get a simple DOM-nodes array\n });\n // iterate though segments in the last allowable level\n for (i = 0; i < levelSegs.length; i++) {\n seg = levelSegs[i];\n var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;\n var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;\n emptyCellsUntil(leftCol); // process empty cells before the segment\n // determine *all* segments below `seg` that occupy the same columns\n colSegsBelow = [];\n totalSegsBelow = 0;\n while (col <= rightCol) {\n segsBelow = this.getCellSegs(row, col, levelLimit);\n colSegsBelow.push(segsBelow);\n totalSegsBelow += segsBelow.length;\n col++;\n }\n if (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\n td = cellMatrix[levelLimit - 1][leftCol]; // the segment's parent cell\n rowSpan = td.rowSpan || 1;\n segMoreNodes = [];\n // make a replacement for each column the segment occupies. will be one for each colspan\n for (j = 0; j < colSegsBelow.length; j++) {\n moreTd = core.createElement('td', { className: 'fc-more-cell', rowSpan: rowSpan });\n segsBelow = colSegsBelow[j];\n moreLink = this.renderMoreLink(row, leftCol + j, [seg].concat(segsBelow) // count seg as hidden too\n );\n moreWrap = core.createElement('div', null, moreLink);\n moreTd.appendChild(moreWrap);\n segMoreNodes.push(moreTd);\n moreNodes.push(moreTd);\n }\n td.classList.add('fc-limited');\n core.insertAfterElement(td, segMoreNodes);\n limitedNodes.push(td);\n }\n }\n emptyCellsUntil(this.colCnt); // finish off the level\n rowStruct.moreEls = moreNodes; // for easy undoing later\n rowStruct.limitedEls = limitedNodes; // for easy undoing later\n }\n };\n // Reveals all levels and removes all \"more\"-related elements for a grid's row.\n // `row` is a row number.\n DayGrid.prototype.unlimitRow = function (row) {\n var rowStruct = this.eventRenderer.rowStructs[row];\n if (rowStruct.moreEls) {\n rowStruct.moreEls.forEach(core.removeElement);\n rowStruct.moreEls = null;\n }\n if (rowStruct.limitedEls) {\n rowStruct.limitedEls.forEach(function (limitedEl) {\n limitedEl.classList.remove('fc-limited');\n });\n rowStruct.limitedEls = null;\n }\n };\n // Renders an element that represents hidden event element for a cell.\n // Responsible for attaching click handler as well.\n DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {\n var _this = this;\n var _a = this, view = _a.view, dateEnv = _a.dateEnv;\n var a = core.createElement('a', { className: 'fc-more' });\n a.innerText = this.getMoreLinkText(hiddenSegs.length);\n a.addEventListener('click', function (ev) {\n var clickOption = _this.opt('eventLimitClick');\n var _col = _this.isRtl ? _this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?\n var date = _this.props.cells[row][_col].date;\n var moreEl = ev.currentTarget;\n var dayEl = _this.getCellEl(row, col);\n var allSegs = _this.getCellSegs(row, col);\n // rescope the segments to be within the cell's date\n var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\n var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\n if (typeof clickOption === 'function') {\n // the returned value can be an atomic option\n clickOption = _this.publiclyTrigger('eventLimitClick', [\n {\n date: dateEnv.toDate(date),\n allDay: true,\n dayEl: dayEl,\n moreEl: moreEl,\n segs: reslicedAllSegs,\n hiddenSegs: reslicedHiddenSegs,\n jsEvent: ev,\n view: view\n }\n ]);\n }\n if (clickOption === 'popover') {\n _this.showSegPopover(row, col, moreEl, reslicedAllSegs);\n }\n else if (typeof clickOption === 'string') { // a view name\n view.calendar.zoomTo(date, clickOption);\n }\n });\n return a;\n };\n // Reveals the popover that displays all events within a cell\n DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {\n var _this = this;\n var _a = this, calendar = _a.calendar, view = _a.view, theme = _a.theme;\n var _col = this.isRtl ? this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?\n var moreWrap = moreLink.parentNode; // the
wrapper around the \n var topEl; // the element we want to match the top coordinate of\n var options;\n if (this.rowCnt === 1) {\n topEl = view.el; // will cause the popover to cover any sort of header\n }\n else {\n topEl = this.rowEls[row]; // will align with top of row\n }\n options = {\n className: 'fc-more-popover ' + theme.getClass('popover'),\n parentEl: view.el,\n top: core.computeRect(topEl).top,\n autoHide: true,\n content: function (el) {\n _this.segPopoverTile = new DayTile(_this.context, el);\n _this.updateSegPopoverTile(_this.props.cells[row][_col].date, segs);\n },\n hide: function () {\n _this.segPopoverTile.destroy();\n _this.segPopoverTile = null;\n _this.segPopover.destroy();\n _this.segPopover = null;\n }\n };\n // Determine horizontal coordinate.\n // We use the moreWrap instead of the to avoid border confusion.\n if (this.isRtl) {\n options.right = core.computeRect(moreWrap).right + 1; // +1 to be over cell border\n }\n else {\n options.left = core.computeRect(moreWrap).left - 1; // -1 to be over cell border\n }\n this.segPopover = new Popover(options);\n this.segPopover.show();\n calendar.releaseAfterSizingTriggers(); // hack for eventPositioned\n };\n // Given the events within an array of segment objects, reslice them to be in a single day\n DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {\n var dayStart = dayDate;\n var dayEnd = core.addDays(dayStart, 1);\n var dayRange = { start: dayStart, end: dayEnd };\n var newSegs = [];\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\n var seg = segs_1[_i];\n var eventRange = seg.eventRange;\n var origRange = eventRange.range;\n var slicedRange = core.intersectRanges(origRange, dayRange);\n if (slicedRange) {\n newSegs.push(__assign({}, seg, { eventRange: {\n def: eventRange.def,\n ui: __assign({}, eventRange.ui, { durationEditable: false }),\n instance: eventRange.instance,\n range: slicedRange\n }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() }));\n }\n }\n return newSegs;\n };\n // Generates the text that should be inside a \"more\" link, given the number of events it represents\n DayGrid.prototype.getMoreLinkText = function (num) {\n var opt = this.opt('eventLimitText');\n if (typeof opt === 'function') {\n return opt(num);\n }\n else {\n return '+' + num + ' ' + opt;\n }\n };\n // Returns segments within a given cell.\n // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\n DayGrid.prototype.getCellSegs = function (row, col, startLevel) {\n var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;\n var level = startLevel || 0;\n var segs = [];\n var seg;\n while (level < segMatrix.length) {\n seg = segMatrix[level][col];\n if (seg) {\n segs.push(seg);\n }\n level++;\n }\n return segs;\n };\n return DayGrid;\n }(core.DateComponent));\n\n var WEEK_NUM_FORMAT$1 = core.createFormatter({ week: 'numeric' });\n /* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.\n ----------------------------------------------------------------------------------------------------------------------*/\n // It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\n // It is responsible for managing width/height.\n var DayGridView = /** @class */ (function (_super) {\n __extends(DayGridView, _super);\n function DayGridView(context, viewSpec, dateProfileGenerator, parentEl) {\n var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this;\n /* Header Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n // Generates the HTML that will go before the day-of week header cells\n _this.renderHeadIntroHtml = function () {\n var theme = _this.theme;\n if (_this.colWeekNumbersVisible) {\n return '' +\n '' +\n '' + // needed for matchCellWidths\n core.htmlEscape(_this.opt('weekLabel')) +\n '' +\n '';\n }\n return '';\n };\n /* Day Grid Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n // Generates the HTML that will go before content-skeleton cells that display the day/week numbers\n _this.renderDayGridNumberIntroHtml = function (row, dayGrid) {\n var dateEnv = _this.dateEnv;\n var weekStart = dayGrid.props.cells[row][0].date;\n if (_this.colWeekNumbersVisible) {\n return '' +\n '' +\n core.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\n _this, { date: weekStart, type: 'week', forceOff: dayGrid.colCnt === 1 }, dateEnv.format(weekStart, WEEK_NUM_FORMAT$1) // inner HTML\n ) +\n '';\n }\n return '';\n };\n // Generates the HTML that goes before the day bg cells for each day-row\n _this.renderDayGridBgIntroHtml = function () {\n var theme = _this.theme;\n if (_this.colWeekNumbersVisible) {\n return '';\n }\n return '';\n };\n // Generates the HTML that goes before every other type of row generated by DayGrid.\n // Affects mirror-skeleton and highlight-skeleton rows.\n _this.renderDayGridIntroHtml = function () {\n if (_this.colWeekNumbersVisible) {\n return '';\n }\n return '';\n };\n _this.el.classList.add('fc-dayGrid-view');\n _this.el.innerHTML = _this.renderSkeletonHtml();\n _this.scroller = new core.ScrollComponent('hidden', // overflow x\n 'auto' // overflow y\n );\n var dayGridContainerEl = _this.scroller.el;\n _this.el.querySelector('.fc-body > tr > td').appendChild(dayGridContainerEl);\n dayGridContainerEl.classList.add('fc-day-grid-container');\n var dayGridEl = core.createElement('div', { className: 'fc-day-grid' });\n dayGridContainerEl.appendChild(dayGridEl);\n var cellWeekNumbersVisible;\n if (_this.opt('weekNumbers')) {\n if (_this.opt('weekNumbersWithinDays')) {\n cellWeekNumbersVisible = true;\n _this.colWeekNumbersVisible = false;\n }\n else {\n cellWeekNumbersVisible = false;\n _this.colWeekNumbersVisible = true;\n }\n }\n else {\n _this.colWeekNumbersVisible = false;\n cellWeekNumbersVisible = false;\n }\n _this.dayGrid = new DayGrid(_this.context, dayGridEl, {\n renderNumberIntroHtml: _this.renderDayGridNumberIntroHtml,\n renderBgIntroHtml: _this.renderDayGridBgIntroHtml,\n renderIntroHtml: _this.renderDayGridIntroHtml,\n colWeekNumbersVisible: _this.colWeekNumbersVisible,\n cellWeekNumbersVisible: cellWeekNumbersVisible\n });\n return _this;\n }\n DayGridView.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.dayGrid.destroy();\n this.scroller.destroy();\n };\n // Builds the HTML skeleton for the view.\n // The day-grid component will render inside of a container defined by this HTML.\n DayGridView.prototype.renderSkeletonHtml = function () {\n var theme = this.theme;\n return '' +\n '' +\n (this.opt('columnHeader') ?\n '' +\n '' +\n '' +\n '' +\n '' :\n '') +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
 
';\n };\n // Generates an HTML attribute string for setting the width of the week number column, if it is known\n DayGridView.prototype.weekNumberStyleAttr = function () {\n if (this.weekNumberWidth != null) {\n return 'style=\"width:' + this.weekNumberWidth + 'px\"';\n }\n return '';\n };\n // Determines whether each row should have a constant height\n DayGridView.prototype.hasRigidRows = function () {\n var eventLimit = this.opt('eventLimit');\n return eventLimit && typeof eventLimit !== 'number';\n };\n /* Dimensions\n ------------------------------------------------------------------------------------------------------------------*/\n DayGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {\n _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first\n this.dayGrid.updateSize(isResize);\n };\n // Refreshes the horizontal dimensions of the view\n DayGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {\n var dayGrid = this.dayGrid;\n var eventLimit = this.opt('eventLimit');\n var headRowEl = this.header ? this.header.el : null; // HACK\n var scrollerHeight;\n var scrollbarWidths;\n // hack to give the view some height prior to dayGrid's columns being rendered\n // TODO: separate setting height from scroller VS dayGrid.\n if (!dayGrid.rowEls) {\n if (!isAuto) {\n scrollerHeight = this.computeScrollerHeight(viewHeight);\n this.scroller.setHeight(scrollerHeight);\n }\n return;\n }\n if (this.colWeekNumbersVisible) {\n // Make sure all week number cells running down the side have the same width.\n this.weekNumberWidth = core.matchCellWidths(core.findElements(this.el, '.fc-week-number'));\n }\n // reset all heights to be natural\n this.scroller.clear();\n if (headRowEl) {\n core.uncompensateScroll(headRowEl);\n }\n dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\n // is the event limit a constant level number?\n if (eventLimit && typeof eventLimit === 'number') {\n dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\n }\n // distribute the height to the rows\n // (viewHeight is a \"recommended\" value if isAuto)\n scrollerHeight = this.computeScrollerHeight(viewHeight);\n this.setGridHeight(scrollerHeight, isAuto);\n // is the event limit dynamically calculated?\n if (eventLimit && typeof eventLimit !== 'number') {\n dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\n }\n if (!isAuto) { // should we force dimensions of the scroll container?\n this.scroller.setHeight(scrollerHeight);\n scrollbarWidths = this.scroller.getScrollbarWidths();\n if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\n if (headRowEl) {\n core.compensateScroll(headRowEl, scrollbarWidths);\n }\n // doing the scrollbar compensation might have created text overflow which created more height. redo\n scrollerHeight = this.computeScrollerHeight(viewHeight);\n this.scroller.setHeight(scrollerHeight);\n }\n // guarantees the same scrollbar widths\n this.scroller.lockOverflow(scrollbarWidths);\n }\n };\n // given a desired total height of the view, returns what the height of the scroller should be\n DayGridView.prototype.computeScrollerHeight = function (viewHeight) {\n return viewHeight -\n core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n };\n // Sets the height of just the DayGrid component in this view\n DayGridView.prototype.setGridHeight = function (height, isAuto) {\n if (this.opt('monthMode')) {\n // if auto, make the height of each row the height that it would be if there were 6 weeks\n if (isAuto) {\n height *= this.dayGrid.rowCnt / 6;\n }\n core.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\n }\n else {\n if (isAuto) {\n core.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\n }\n else {\n core.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\n }\n }\n };\n /* Scroll\n ------------------------------------------------------------------------------------------------------------------*/\n DayGridView.prototype.computeInitialDateScroll = function () {\n return { top: 0 };\n };\n DayGridView.prototype.queryDateScroll = function () {\n return { top: this.scroller.getScrollTop() };\n };\n DayGridView.prototype.applyDateScroll = function (scroll) {\n if (scroll.top !== undefined) {\n this.scroller.setScrollTop(scroll.top);\n }\n };\n return DayGridView;\n }(core.View));\n DayGridView.prototype.dateProfileGeneratorClass = DayGridDateProfileGenerator;\n\n var SimpleDayGrid = /** @class */ (function (_super) {\n __extends(SimpleDayGrid, _super);\n function SimpleDayGrid(context, dayGrid) {\n var _this = _super.call(this, context, dayGrid.el) || this;\n _this.slicer = new DayGridSlicer();\n _this.dayGrid = dayGrid;\n context.calendar.registerInteractiveComponent(_this, { el: _this.dayGrid.el });\n return _this;\n }\n SimpleDayGrid.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.calendar.unregisterInteractiveComponent(this);\n };\n SimpleDayGrid.prototype.render = function (props) {\n var dayGrid = this.dayGrid;\n var dateProfile = props.dateProfile, dayTable = props.dayTable;\n dayGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, dayGrid, dayTable), { dateProfile: dateProfile, cells: dayTable.cells, isRigid: props.isRigid }));\n };\n SimpleDayGrid.prototype.queryHit = function (positionLeft, positionTop) {\n var rawHit = this.dayGrid.positionToHit(positionLeft, positionTop);\n if (rawHit) {\n return {\n component: this.dayGrid,\n dateSpan: rawHit.dateSpan,\n dayEl: rawHit.dayEl,\n rect: {\n left: rawHit.relativeRect.left,\n right: rawHit.relativeRect.right,\n top: rawHit.relativeRect.top,\n bottom: rawHit.relativeRect.bottom\n },\n layer: 0\n };\n }\n };\n return SimpleDayGrid;\n }(core.DateComponent));\n var DayGridSlicer = /** @class */ (function (_super) {\n __extends(DayGridSlicer, _super);\n function DayGridSlicer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DayGridSlicer.prototype.sliceRange = function (dateRange, dayTable) {\n return dayTable.sliceRange(dateRange);\n };\n return DayGridSlicer;\n }(core.Slicer));\n\n var DayGridView$1 = /** @class */ (function (_super) {\n __extends(DayGridView, _super);\n function DayGridView(_context, viewSpec, dateProfileGenerator, parentEl) {\n var _this = _super.call(this, _context, viewSpec, dateProfileGenerator, parentEl) || this;\n _this.buildDayTable = core.memoize(buildDayTable);\n if (_this.opt('columnHeader')) {\n _this.header = new core.DayHeader(_this.context, _this.el.querySelector('.fc-head-container'));\n }\n _this.simpleDayGrid = new SimpleDayGrid(_this.context, _this.dayGrid);\n return _this;\n }\n DayGridView.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.header) {\n this.header.destroy();\n }\n this.simpleDayGrid.destroy();\n };\n DayGridView.prototype.render = function (props) {\n _super.prototype.render.call(this, props);\n var dateProfile = this.props.dateProfile;\n var dayTable = this.dayTable =\n this.buildDayTable(dateProfile, this.dateProfileGenerator);\n if (this.header) {\n this.header.receiveProps({\n dateProfile: dateProfile,\n dates: dayTable.headerDates,\n datesRepDistinctDays: dayTable.rowCnt === 1,\n renderIntroHtml: this.renderHeadIntroHtml\n });\n }\n this.simpleDayGrid.receiveProps({\n dateProfile: dateProfile,\n dayTable: dayTable,\n businessHours: props.businessHours,\n dateSelection: props.dateSelection,\n eventStore: props.eventStore,\n eventUiBases: props.eventUiBases,\n eventSelection: props.eventSelection,\n eventDrag: props.eventDrag,\n eventResize: props.eventResize,\n isRigid: this.hasRigidRows(),\n nextDayThreshold: this.nextDayThreshold\n });\n };\n return DayGridView;\n }(DayGridView));\n function buildDayTable(dateProfile, dateProfileGenerator) {\n var daySeries = new core.DaySeries(dateProfile.renderRange, dateProfileGenerator);\n return new core.DayTable(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));\n }\n\n var main = core.createPlugin({\n defaultView: 'dayGridMonth',\n views: {\n dayGrid: DayGridView$1,\n dayGridDay: {\n type: 'dayGrid',\n duration: { days: 1 }\n },\n dayGridWeek: {\n type: 'dayGrid',\n duration: { weeks: 1 }\n },\n dayGridMonth: {\n type: 'dayGrid',\n duration: { months: 1 },\n monthMode: true,\n fixedWeekCount: true\n }\n }\n });\n\n exports.default = main;\n exports.SimpleDayGrid = SimpleDayGrid;\n exports.DayGridSlicer = DayGridSlicer;\n exports.DayGrid = DayGrid;\n exports.AbstractDayGridView = DayGridView;\n exports.DayGridView = DayGridView$1;\n exports.buildBasicDayTable = buildDayTable;\n exports.DayBgRow = DayBgRow;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","/*!\n@fullcalendar/timegrid v4.0.1\nDocs & License: https://fullcalendar.io/\n(c) 2019 Adam Shaw\n*/\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core'), require('@fullcalendar/daygrid')) :\n typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core', '@fullcalendar/daygrid'], factory) :\n (global = global || self, factory(global.FullCalendarTimeGrid = {}, global.FullCalendar, global.FullCalendarDayGrid));\n}(this, function (exports, core, daygrid) { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise */\r\n\r\n var extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n }\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\n\n /*\n Only handles foreground segs.\n Does not own rendering. Use for low-level util methods by TimeGrid.\n */\n var TimeGridEventRenderer = /** @class */ (function (_super) {\n __extends(TimeGridEventRenderer, _super);\n function TimeGridEventRenderer(timeGrid) {\n var _this = _super.call(this, timeGrid.context) || this;\n _this.timeGrid = timeGrid;\n _this.fullTimeFormat = core.createFormatter({\n hour: 'numeric',\n minute: '2-digit',\n separator: _this.context.options.defaultRangeSeparator\n });\n return _this;\n }\n // Given an array of foreground segments, render a DOM element for each, computes position,\n // and attaches to the column inner-container elements.\n TimeGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {\n var segsByCol = this.timeGrid.groupSegsByCol(segs);\n // order the segs within each column\n // TODO: have groupSegsByCol do this?\n for (var col = 0; col < segsByCol.length; col++) {\n segsByCol[col] = this.sortEventSegs(segsByCol[col]);\n }\n this.segsByCol = segsByCol;\n this.timeGrid.attachSegsByCol(segsByCol, this.timeGrid.fgContainerEls);\n };\n TimeGridEventRenderer.prototype.detachSegs = function (segs) {\n segs.forEach(function (seg) {\n core.removeElement(seg.el);\n });\n this.segsByCol = null;\n };\n TimeGridEventRenderer.prototype.computeSegSizes = function (allSegs) {\n var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;\n var colCnt = timeGrid.colCnt;\n timeGrid.computeSegVerticals(allSegs); // horizontals relies on this\n if (segsByCol) {\n for (var col = 0; col < colCnt; col++) {\n this.computeSegHorizontals(segsByCol[col]); // compute horizontal coordinates, z-index's, and reorder the array\n }\n }\n };\n TimeGridEventRenderer.prototype.assignSegSizes = function (allSegs) {\n var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;\n var colCnt = timeGrid.colCnt;\n timeGrid.assignSegVerticals(allSegs); // horizontals relies on this\n if (segsByCol) {\n for (var col = 0; col < colCnt; col++) {\n this.assignSegCss(segsByCol[col]);\n }\n }\n };\n // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined\n TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {\n return {\n hour: 'numeric',\n minute: '2-digit',\n meridiem: false\n };\n };\n // Computes a default `displayEventEnd` value if one is not expliclty defined\n TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {\n return true;\n };\n // Renders the HTML for a single event segment's default rendering\n TimeGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {\n var eventRange = seg.eventRange;\n var eventDef = eventRange.def;\n var eventUi = eventRange.ui;\n var allDay = eventDef.allDay;\n var isDraggable = eventUi.startEditable;\n var isResizableFromStart = seg.isStart && eventUi.durationEditable && this.context.options.eventResizableFromStart;\n var isResizableFromEnd = seg.isEnd && eventUi.durationEditable;\n var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);\n var skinCss = core.cssToStr(this.getSkinCss(eventUi));\n var timeText;\n var fullTimeText; // more verbose time text. for the print stylesheet\n var startTimeText; // just the start time text\n classes.unshift('fc-time-grid-event');\n // if the event appears to span more than one day...\n if (core.isMultiDayRange(eventRange.range)) {\n // Don't display time text on segments that run entirely through a day.\n // That would appear as midnight-midnight and would look dumb.\n // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\n if (seg.isStart || seg.isEnd) {\n var unzonedStart = seg.start;\n var unzonedEnd = seg.end;\n timeText = this._getTimeText(unzonedStart, unzonedEnd, allDay); // TODO: give the timezones\n fullTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, this.fullTimeFormat);\n startTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, null, false); // displayEnd=false\n }\n }\n else {\n // Display the normal time text for the *event's* times\n timeText = this.getTimeText(eventRange);\n fullTimeText = this.getTimeText(eventRange, this.fullTimeFormat);\n startTimeText = this.getTimeText(eventRange, null, false); // displayEnd=false\n }\n return '
' +\n '
' +\n (timeText ?\n '
' +\n '' + core.htmlEscape(timeText) + '' +\n '
' :\n '') +\n (eventDef.title ?\n '
' +\n core.htmlEscape(eventDef.title) +\n '
' :\n '') +\n '
' +\n /* TODO: write CSS for this\n (isResizableFromStart ?\n '
' :\n ''\n ) +\n */\n (isResizableFromEnd ?\n '
' :\n '') +\n '
';\n };\n // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\n // Assumed the segs are already ordered.\n // NOTE: Also reorders the given array by date!\n TimeGridEventRenderer.prototype.computeSegHorizontals = function (segs) {\n var levels;\n var level0;\n var i;\n levels = buildSlotSegLevels(segs);\n computeForwardSlotSegs(levels);\n if ((level0 = levels[0])) {\n for (i = 0; i < level0.length; i++) {\n computeSlotSegPressures(level0[i]);\n }\n for (i = 0; i < level0.length; i++) {\n this.computeSegForwardBack(level0[i], 0, 0);\n }\n }\n };\n // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\n // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\n // seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\n //\n // The segment might be part of a \"series\", which means consecutive segments with the same pressure\n // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\n // segments behind this one in the current series, and `seriesBackwardCoord` is the starting\n // coordinate of the first segment in the series.\n TimeGridEventRenderer.prototype.computeSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {\n var forwardSegs = seg.forwardSegs;\n var i;\n if (seg.forwardCoord === undefined) { // not already computed\n if (!forwardSegs.length) {\n // if there are no forward segments, this segment should butt up against the edge\n seg.forwardCoord = 1;\n }\n else {\n // sort highest pressure first\n this.sortForwardSegs(forwardSegs);\n // this segment's forwardCoord will be calculated from the backwardCoord of the\n // highest-pressure forward segment.\n this.computeSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\n seg.forwardCoord = forwardSegs[0].backwardCoord;\n }\n // calculate the backwardCoord from the forwardCoord. consider the series\n seg.backwardCoord = seg.forwardCoord -\n (seg.forwardCoord - seriesBackwardCoord) / // available width for series\n (seriesBackwardPressure + 1); // # of segments in the series\n // use this segment's coordinates to computed the coordinates of the less-pressurized\n // forward segments\n for (i = 0; i < forwardSegs.length; i++) {\n this.computeSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);\n }\n }\n };\n TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {\n var objs = forwardSegs.map(buildTimeGridSegCompareObj);\n var specs = [\n // put higher-pressure first\n { field: 'forwardPressure', order: -1 },\n // put segments that are closer to initial edge first (and favor ones with no coords yet)\n { field: 'backwardCoord', order: 1 }\n ].concat(this.context.view.eventOrderSpecs);\n objs.sort(function (obj0, obj1) {\n return core.compareByFieldSpecs(obj0, obj1, specs);\n });\n return objs.map(function (c) {\n return c._seg;\n });\n };\n // Given foreground event segments that have already had their position coordinates computed,\n // assigns position-related CSS values to their elements.\n TimeGridEventRenderer.prototype.assignSegCss = function (segs) {\n for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\n var seg = segs_1[_i];\n core.applyStyle(seg.el, this.generateSegCss(seg));\n if (seg.level > 0) {\n seg.el.classList.add('fc-time-grid-event-inset');\n }\n // if the event is short that the title will be cut off,\n // attach a className that condenses the title into the time area.\n if (seg.eventRange.def.title && seg.bottom - seg.top < 30) {\n seg.el.classList.add('fc-short'); // TODO: \"condensed\" is a better name\n }\n }\n };\n // Generates an object with CSS properties/values that should be applied to an event segment element.\n // Contains important positioning-related properties that should be applied to any event element, customized or not.\n TimeGridEventRenderer.prototype.generateSegCss = function (seg) {\n var shouldOverlap = this.context.options.slotEventOverlap;\n var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\n var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\n var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first\n var isRtl = this.timeGrid.isRtl;\n var left; // amount of space from left edge, a fraction of the total width\n var right; // amount of space from right edge, a fraction of the total width\n if (shouldOverlap) {\n // double the width, but don't go beyond the maximum forward coordinate (1.0)\n forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\n }\n if (isRtl) {\n left = 1 - forwardCoord;\n right = backwardCoord;\n }\n else {\n left = backwardCoord;\n right = 1 - forwardCoord;\n }\n props.zIndex = seg.level + 1; // convert from 0-base to 1-based\n props.left = left * 100 + '%';\n props.right = right * 100 + '%';\n if (shouldOverlap && seg.forwardPressure) {\n // add padding to the edge so that forward stacked events don't cover the resizer's icon\n props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\n }\n return props;\n };\n return TimeGridEventRenderer;\n }(core.FgEventRenderer));\n // Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\n // left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\n function buildSlotSegLevels(segs) {\n var levels = [];\n var i;\n var seg;\n var j;\n for (i = 0; i < segs.length; i++) {\n seg = segs[i];\n // go through all the levels and stop on the first level where there are no collisions\n for (j = 0; j < levels.length; j++) {\n if (!computeSlotSegCollisions(seg, levels[j]).length) {\n break;\n }\n }\n seg.level = j;\n (levels[j] || (levels[j] = [])).push(seg);\n }\n return levels;\n }\n // For every segment, figure out the other segments that are in subsequent\n // levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\n function computeForwardSlotSegs(levels) {\n var i;\n var level;\n var j;\n var seg;\n var k;\n for (i = 0; i < levels.length; i++) {\n level = levels[i];\n for (j = 0; j < level.length; j++) {\n seg = level[j];\n seg.forwardSegs = [];\n for (k = i + 1; k < levels.length; k++) {\n computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\n }\n }\n }\n }\n // Figure out which path forward (via seg.forwardSegs) results in the longest path until\n // the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\n function computeSlotSegPressures(seg) {\n var forwardSegs = seg.forwardSegs;\n var forwardPressure = 0;\n var i;\n var forwardSeg;\n if (seg.forwardPressure === undefined) { // not already computed\n for (i = 0; i < forwardSegs.length; i++) {\n forwardSeg = forwardSegs[i];\n // figure out the child's maximum forward path\n computeSlotSegPressures(forwardSeg);\n // either use the existing maximum, or use the child's forward pressure\n // plus one (for the forwardSeg itself)\n forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);\n }\n seg.forwardPressure = forwardPressure;\n }\n }\n // Find all the segments in `otherSegs` that vertically collide with `seg`.\n // Append into an optionally-supplied `results` array and return.\n function computeSlotSegCollisions(seg, otherSegs, results) {\n if (results === void 0) { results = []; }\n for (var i = 0; i < otherSegs.length; i++) {\n if (isSlotSegCollision(seg, otherSegs[i])) {\n results.push(otherSegs[i]);\n }\n }\n return results;\n }\n // Do these segments occupy the same vertical space?\n function isSlotSegCollision(seg1, seg2) {\n return seg1.bottom > seg2.top && seg1.top < seg2.bottom;\n }\n function buildTimeGridSegCompareObj(seg) {\n var obj = core.buildSegCompareObj(seg);\n obj.forwardPressure = seg.forwardPressure;\n obj.backwardCoord = seg.backwardCoord;\n return obj;\n }\n\n var TimeGridMirrorRenderer = /** @class */ (function (_super) {\n __extends(TimeGridMirrorRenderer, _super);\n function TimeGridMirrorRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n TimeGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {\n this.segsByCol = this.timeGrid.groupSegsByCol(segs);\n this.timeGrid.attachSegsByCol(this.segsByCol, this.timeGrid.mirrorContainerEls);\n this.sourceSeg = mirrorInfo.sourceSeg;\n };\n TimeGridMirrorRenderer.prototype.generateSegCss = function (seg) {\n var props = _super.prototype.generateSegCss.call(this, seg);\n var sourceSeg = this.sourceSeg;\n if (sourceSeg && sourceSeg.col === seg.col) {\n var sourceSegProps = _super.prototype.generateSegCss.call(this, sourceSeg);\n props.left = sourceSegProps.left;\n props.right = sourceSegProps.right;\n props.marginLeft = sourceSegProps.marginLeft;\n props.marginRight = sourceSegProps.marginRight;\n }\n return props;\n };\n return TimeGridMirrorRenderer;\n }(TimeGridEventRenderer));\n\n var TimeGridFillRenderer = /** @class */ (function (_super) {\n __extends(TimeGridFillRenderer, _super);\n function TimeGridFillRenderer(timeGrid) {\n var _this = _super.call(this, timeGrid.context) || this;\n _this.timeGrid = timeGrid;\n return _this;\n }\n TimeGridFillRenderer.prototype.attachSegs = function (type, segs) {\n var timeGrid = this.timeGrid;\n var containerEls;\n // TODO: more efficient lookup\n if (type === 'bgEvent') {\n containerEls = timeGrid.bgContainerEls;\n }\n else if (type === 'businessHours') {\n containerEls = timeGrid.businessContainerEls;\n }\n else if (type === 'highlight') {\n containerEls = timeGrid.highlightContainerEls;\n }\n timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);\n return segs.map(function (seg) {\n return seg.el;\n });\n };\n TimeGridFillRenderer.prototype.computeSegSizes = function (segs) {\n this.timeGrid.computeSegVerticals(segs);\n };\n TimeGridFillRenderer.prototype.assignSegSizes = function (segs) {\n this.timeGrid.assignSegVerticals(segs);\n };\n return TimeGridFillRenderer;\n }(core.FillRenderer));\n\n /* A component that renders one or more columns of vertical time slots\n ----------------------------------------------------------------------------------------------------------------------*/\n // potential nice values for the slot-duration and interval-duration\n // from largest to smallest\n var AGENDA_STOCK_SUB_DURATIONS = [\n { hours: 1 },\n { minutes: 30 },\n { minutes: 15 },\n { seconds: 30 },\n { seconds: 15 }\n ];\n var TimeGrid = /** @class */ (function (_super) {\n __extends(TimeGrid, _super);\n function TimeGrid(context, el, renderProps) {\n var _this = _super.call(this, context, el) || this;\n _this.isSlatSizesDirty = false;\n _this.isColSizesDirty = false;\n _this.renderSlats = core.memoizeRendering(_this._renderSlats);\n var eventRenderer = _this.eventRenderer = new TimeGridEventRenderer(_this);\n var fillRenderer = _this.fillRenderer = new TimeGridFillRenderer(_this);\n _this.mirrorRenderer = new TimeGridMirrorRenderer(_this);\n var renderColumns = _this.renderColumns = core.memoizeRendering(_this._renderColumns, _this._unrenderColumns);\n _this.renderBusinessHours = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderColumns]);\n _this.renderDateSelection = core.memoizeRendering(_this._renderDateSelection, _this._unrenderDateSelection, [renderColumns]);\n _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderColumns]);\n _this.renderBgEvents = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderColumns]);\n _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);\n _this.renderEventDrag = core.memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderColumns]);\n _this.renderEventResize = core.memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderColumns]);\n _this.processOptions();\n el.innerHTML =\n '
' +\n '
' +\n '
';\n _this.rootBgContainerEl = el.querySelector('.fc-bg');\n _this.slatContainerEl = el.querySelector('.fc-slats');\n _this.bottomRuleEl = el.querySelector('.fc-divider');\n _this.renderProps = renderProps;\n return _this;\n }\n /* Options\n ------------------------------------------------------------------------------------------------------------------*/\n // Parses various options into properties of this object\n TimeGrid.prototype.processOptions = function () {\n var slotDuration = this.opt('slotDuration');\n var snapDuration = this.opt('snapDuration');\n var snapsPerSlot;\n var input;\n slotDuration = core.createDuration(slotDuration);\n snapDuration = snapDuration ? core.createDuration(snapDuration) : slotDuration;\n snapsPerSlot = core.wholeDivideDurations(slotDuration, snapDuration);\n if (snapsPerSlot === null) {\n snapDuration = slotDuration;\n snapsPerSlot = 1;\n // TODO: say warning?\n }\n this.slotDuration = slotDuration;\n this.snapDuration = snapDuration;\n this.snapsPerSlot = snapsPerSlot;\n // might be an array value (for TimelineView).\n // if so, getting the most granular entry (the last one probably).\n input = this.opt('slotLabelFormat');\n if (Array.isArray(input)) {\n input = input[input.length - 1];\n }\n this.labelFormat = core.createFormatter(input || {\n hour: 'numeric',\n minute: '2-digit',\n omitZeroMinute: true,\n meridiem: 'short'\n });\n input = this.opt('slotLabelInterval');\n this.labelInterval = input ?\n core.createDuration(input) :\n this.computeLabelInterval(slotDuration);\n };\n // Computes an automatic value for slotLabelInterval\n TimeGrid.prototype.computeLabelInterval = function (slotDuration) {\n var i;\n var labelInterval;\n var slotsPerLabel;\n // find the smallest stock label interval that results in more than one slots-per-label\n for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\n labelInterval = core.createDuration(AGENDA_STOCK_SUB_DURATIONS[i]);\n slotsPerLabel = core.wholeDivideDurations(labelInterval, slotDuration);\n if (slotsPerLabel !== null && slotsPerLabel > 1) {\n return labelInterval;\n }\n }\n return slotDuration; // fall back\n };\n /* Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n TimeGrid.prototype.render = function (props) {\n var cells = props.cells;\n this.colCnt = cells.length;\n this.renderSlats(props.dateProfile);\n this.renderColumns(props.cells, props.dateProfile);\n this.renderBusinessHours(props.businessHourSegs);\n this.renderDateSelection(props.dateSelectionSegs);\n this.renderFgEvents(props.fgEventSegs);\n this.renderBgEvents(props.bgEventSegs);\n this.renderEventSelection(props.eventSelection);\n this.renderEventDrag(props.eventDrag);\n this.renderEventResize(props.eventResize);\n };\n TimeGrid.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n // should unrender everything else too\n this.renderSlats.unrender();\n this.renderColumns.unrender();\n };\n TimeGrid.prototype.updateSize = function (isResize) {\n var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;\n if (isResize || this.isSlatSizesDirty) {\n this.buildSlatPositions();\n this.isSlatSizesDirty = false;\n }\n if (isResize || this.isColSizesDirty) {\n this.buildColPositions();\n this.isColSizesDirty = false;\n }\n fillRenderer.computeSizes(isResize);\n eventRenderer.computeSizes(isResize);\n mirrorRenderer.computeSizes(isResize);\n fillRenderer.assignSizes(isResize);\n eventRenderer.assignSizes(isResize);\n mirrorRenderer.assignSizes(isResize);\n };\n TimeGrid.prototype._renderSlats = function (dateProfile) {\n var theme = this.theme;\n this.slatContainerEl.innerHTML =\n '' +\n this.renderSlatRowHtml(dateProfile) +\n '
';\n this.slatEls = core.findElements(this.slatContainerEl, 'tr');\n this.slatPositions = new core.PositionCache(this.el, this.slatEls, false, true // vertical\n );\n this.isSlatSizesDirty = true;\n };\n // Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\n TimeGrid.prototype.renderSlatRowHtml = function (dateProfile) {\n var _a = this, dateEnv = _a.dateEnv, theme = _a.theme, isRtl = _a.isRtl;\n var html = '';\n var dayStart = core.startOfDay(dateProfile.renderRange.start);\n var slotTime = dateProfile.minTime;\n var slotIterator = core.createDuration(0);\n var slotDate; // will be on the view's first day, but we only care about its time\n var isLabeled;\n var axisHtml;\n // Calculate the time for each slot\n while (core.asRoughMs(slotTime) < core.asRoughMs(dateProfile.maxTime)) {\n slotDate = dateEnv.add(dayStart, slotTime);\n isLabeled = core.wholeDivideDurations(slotIterator, this.labelInterval) !== null;\n axisHtml =\n '' +\n (isLabeled ?\n '' + // for matchCellWidths\n core.htmlEscape(dateEnv.format(slotDate, this.labelFormat)) +\n '' :\n '') +\n '';\n html +=\n '' +\n (!isRtl ? axisHtml : '') +\n '' +\n (isRtl ? axisHtml : '') +\n '';\n slotTime = core.addDurations(slotTime, this.slotDuration);\n slotIterator = core.addDurations(slotIterator, this.slotDuration);\n }\n return html;\n };\n TimeGrid.prototype._renderColumns = function (cells, dateProfile) {\n var theme = this.theme;\n var bgRow = new daygrid.DayBgRow(this.context);\n this.rootBgContainerEl.innerHTML =\n '' +\n bgRow.renderHtml({\n cells: cells,\n dateProfile: dateProfile,\n renderIntroHtml: this.renderProps.renderBgIntroHtml\n }) +\n '
';\n this.colEls = core.findElements(this.el, '.fc-day, .fc-disabled-day');\n if (this.isRtl) {\n this.colEls.reverse();\n }\n this.colPositions = new core.PositionCache(this.el, this.colEls, true, // horizontal\n false);\n this.renderContentSkeleton();\n this.isColSizesDirty = true;\n };\n TimeGrid.prototype._unrenderColumns = function () {\n this.unrenderContentSkeleton();\n };\n /* Content Skeleton\n ------------------------------------------------------------------------------------------------------------------*/\n // Renders the DOM that the view's content will live in\n TimeGrid.prototype.renderContentSkeleton = function () {\n var parts = [];\n var skeletonEl;\n parts.push(this.renderProps.renderIntroHtml());\n for (var i = 0; i < this.colCnt; i++) {\n parts.push('' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '');\n }\n if (this.isRtl) {\n parts.reverse();\n }\n skeletonEl = this.contentSkeletonEl = core.htmlToElement('
' +\n '' +\n '' + parts.join('') + '' +\n '
' +\n '
');\n this.colContainerEls = core.findElements(skeletonEl, '.fc-content-col');\n this.mirrorContainerEls = core.findElements(skeletonEl, '.fc-mirror-container');\n this.fgContainerEls = core.findElements(skeletonEl, '.fc-event-container:not(.fc-mirror-container)');\n this.bgContainerEls = core.findElements(skeletonEl, '.fc-bgevent-container');\n this.highlightContainerEls = core.findElements(skeletonEl, '.fc-highlight-container');\n this.businessContainerEls = core.findElements(skeletonEl, '.fc-business-container');\n if (this.isRtl) {\n this.colContainerEls.reverse();\n this.mirrorContainerEls.reverse();\n this.fgContainerEls.reverse();\n this.bgContainerEls.reverse();\n this.highlightContainerEls.reverse();\n this.businessContainerEls.reverse();\n }\n this.el.appendChild(skeletonEl);\n };\n TimeGrid.prototype.unrenderContentSkeleton = function () {\n core.removeElement(this.contentSkeletonEl);\n };\n // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\n TimeGrid.prototype.groupSegsByCol = function (segs) {\n var segsByCol = [];\n var i;\n for (i = 0; i < this.colCnt; i++) {\n segsByCol.push([]);\n }\n for (i = 0; i < segs.length; i++) {\n segsByCol[segs[i].col].push(segs[i]);\n }\n return segsByCol;\n };\n // Given segments grouped by column, insert the segments' elements into a parallel array of container\n // elements, each living within a column.\n TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {\n var col;\n var segs;\n var i;\n for (col = 0; col < this.colCnt; col++) { // iterate each column grouping\n segs = segsByCol[col];\n for (i = 0; i < segs.length; i++) {\n containerEls[col].appendChild(segs[i].el);\n }\n }\n };\n /* Now Indicator\n ------------------------------------------------------------------------------------------------------------------*/\n TimeGrid.prototype.getNowIndicatorUnit = function () {\n return 'minute'; // will refresh on the minute\n };\n TimeGrid.prototype.renderNowIndicator = function (segs, date) {\n // HACK: if date columns not ready for some reason (scheduler)\n if (!this.colContainerEls) {\n return;\n }\n var top = this.computeDateTop(date);\n var nodes = [];\n var i;\n // render lines within the columns\n for (i = 0; i < segs.length; i++) {\n var lineEl = core.createElement('div', { className: 'fc-now-indicator fc-now-indicator-line' });\n lineEl.style.top = top + 'px';\n this.colContainerEls[segs[i].col].appendChild(lineEl);\n nodes.push(lineEl);\n }\n // render an arrow over the axis\n if (segs.length > 0) { // is the current time in view?\n var arrowEl = core.createElement('div', { className: 'fc-now-indicator fc-now-indicator-arrow' });\n arrowEl.style.top = top + 'px';\n this.contentSkeletonEl.appendChild(arrowEl);\n nodes.push(arrowEl);\n }\n this.nowIndicatorEls = nodes;\n };\n TimeGrid.prototype.unrenderNowIndicator = function () {\n if (this.nowIndicatorEls) {\n this.nowIndicatorEls.forEach(core.removeElement);\n this.nowIndicatorEls = null;\n }\n };\n /* Coordinates\n ------------------------------------------------------------------------------------------------------------------*/\n TimeGrid.prototype.getTotalSlatHeight = function () {\n return this.slatContainerEl.offsetHeight;\n };\n // Computes the top coordinate, relative to the bounds of the grid, of the given date.\n // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\n TimeGrid.prototype.computeDateTop = function (when, startOfDayDate) {\n if (!startOfDayDate) {\n startOfDayDate = core.startOfDay(when);\n }\n return this.computeTimeTop(when.valueOf() - startOfDayDate.valueOf());\n };\n // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\n TimeGrid.prototype.computeTimeTop = function (timeMs) {\n var len = this.slatEls.length;\n var dateProfile = this.props.dateProfile;\n var slatCoverage = (timeMs - core.asRoughMs(dateProfile.minTime)) / core.asRoughMs(this.slotDuration); // floating-point value of # of slots covered\n var slatIndex;\n var slatRemainder;\n // compute a floating-point number for how many slats should be progressed through.\n // from 0 to number of slats (inclusive)\n // constrained because minTime/maxTime might be customized.\n slatCoverage = Math.max(0, slatCoverage);\n slatCoverage = Math.min(len, slatCoverage);\n // an integer index of the furthest whole slat\n // from 0 to number slats (*exclusive*, so len-1)\n slatIndex = Math.floor(slatCoverage);\n slatIndex = Math.min(slatIndex, len - 1);\n // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\n // could be 1.0 if slatCoverage is covering *all* the slots\n slatRemainder = slatCoverage - slatIndex;\n return this.slatPositions.tops[slatIndex] +\n this.slatPositions.getHeight(slatIndex) * slatRemainder;\n };\n // For each segment in an array, computes and assigns its top and bottom properties\n TimeGrid.prototype.computeSegVerticals = function (segs) {\n var eventMinHeight = this.opt('timeGridEventMinHeight');\n var i;\n var seg;\n var dayDate;\n for (i = 0; i < segs.length; i++) {\n seg = segs[i];\n dayDate = this.props.cells[seg.col].date;\n seg.top = this.computeDateTop(seg.start, dayDate);\n seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.end, dayDate));\n }\n };\n // Given segments that already have their top/bottom properties computed, applies those values to\n // the segments' elements.\n TimeGrid.prototype.assignSegVerticals = function (segs) {\n var i;\n var seg;\n for (i = 0; i < segs.length; i++) {\n seg = segs[i];\n core.applyStyle(seg.el, this.generateSegVerticalCss(seg));\n }\n };\n // Generates an object with CSS properties for the top/bottom coordinates of a segment element\n TimeGrid.prototype.generateSegVerticalCss = function (seg) {\n return {\n top: seg.top,\n bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\n };\n };\n /* Sizing\n ------------------------------------------------------------------------------------------------------------------*/\n TimeGrid.prototype.buildColPositions = function () {\n this.colPositions.build();\n };\n TimeGrid.prototype.buildSlatPositions = function () {\n this.slatPositions.build();\n };\n /* Hit System\n ------------------------------------------------------------------------------------------------------------------*/\n TimeGrid.prototype.positionToHit = function (positionLeft, positionTop) {\n var _a = this, dateEnv = _a.dateEnv, snapsPerSlot = _a.snapsPerSlot, slatPositions = _a.slatPositions, colPositions = _a.colPositions;\n var colIndex = colPositions.leftToIndex(positionLeft);\n var slatIndex = slatPositions.topToIndex(positionTop);\n if (colIndex != null && slatIndex != null) {\n var slatTop = slatPositions.tops[slatIndex];\n var slatHeight = slatPositions.getHeight(slatIndex);\n var partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1\n var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\n var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\n var dayDate = this.props.cells[colIndex].date;\n var time = core.addDurations(this.props.dateProfile.minTime, core.multiplyDuration(this.snapDuration, snapIndex));\n var start = dateEnv.add(dayDate, time);\n var end = dateEnv.add(start, this.snapDuration);\n return {\n col: colIndex,\n dateSpan: {\n range: { start: start, end: end },\n allDay: false\n },\n dayEl: this.colEls[colIndex],\n relativeRect: {\n left: colPositions.lefts[colIndex],\n right: colPositions.rights[colIndex],\n top: slatTop,\n bottom: slatTop + slatHeight\n }\n };\n }\n };\n /* Event Drag Visualization\n ------------------------------------------------------------------------------------------------------------------*/\n TimeGrid.prototype._renderEventDrag = function (state) {\n if (state) {\n this.eventRenderer.hideByHash(state.affectedInstances);\n if (state.isEvent) {\n this.mirrorRenderer.renderSegs(state.segs, { isDragging: true, sourceSeg: state.sourceSeg });\n }\n else {\n this.fillRenderer.renderSegs('highlight', state.segs);\n }\n }\n };\n TimeGrid.prototype._unrenderEventDrag = function (state) {\n if (state) {\n this.eventRenderer.showByHash(state.affectedInstances);\n this.mirrorRenderer.unrender(state.segs, { isDragging: true, sourceSeg: state.sourceSeg });\n this.fillRenderer.unrender('highlight');\n }\n };\n /* Event Resize Visualization\n ------------------------------------------------------------------------------------------------------------------*/\n TimeGrid.prototype._renderEventResize = function (state) {\n if (state) {\n this.eventRenderer.hideByHash(state.affectedInstances);\n this.mirrorRenderer.renderSegs(state.segs, { isResizing: true, sourceSeg: state.sourceSeg });\n }\n };\n TimeGrid.prototype._unrenderEventResize = function (state) {\n if (state) {\n this.eventRenderer.showByHash(state.affectedInstances);\n this.mirrorRenderer.unrender(state.segs, { isResizing: true, sourceSeg: state.sourceSeg });\n }\n };\n /* Selection\n ------------------------------------------------------------------------------------------------------------------*/\n // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\n TimeGrid.prototype._renderDateSelection = function (segs) {\n if (segs) {\n if (this.opt('selectMirror')) {\n this.mirrorRenderer.renderSegs(segs, { isSelecting: true });\n }\n else {\n this.fillRenderer.renderSegs('highlight', segs);\n }\n }\n };\n TimeGrid.prototype._unrenderDateSelection = function (segs) {\n this.mirrorRenderer.unrender(segs, { isSelecting: true });\n this.fillRenderer.unrender('highlight');\n };\n return TimeGrid;\n }(core.DateComponent));\n\n var AllDaySplitter = /** @class */ (function (_super) {\n __extends(AllDaySplitter, _super);\n function AllDaySplitter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AllDaySplitter.prototype.getKeyInfo = function () {\n return {\n allDay: {},\n timed: {}\n };\n };\n AllDaySplitter.prototype.getKeysForDateSpan = function (dateSpan) {\n if (dateSpan.allDay) {\n return ['allDay'];\n }\n else {\n return ['timed'];\n }\n };\n AllDaySplitter.prototype.getKeysForEventDef = function (eventDef) {\n if (!eventDef.allDay) {\n return ['timed'];\n }\n else if (core.hasBgRendering(eventDef)) {\n return ['timed', 'allDay'];\n }\n else {\n return ['allDay'];\n }\n };\n return AllDaySplitter;\n }(core.Splitter));\n\n var TIMEGRID_ALL_DAY_EVENT_LIMIT = 5;\n var WEEK_HEADER_FORMAT = core.createFormatter({ week: 'short' });\n /* An abstract class for all timegrid-related views. Displays one more columns with time slots running vertically.\n ----------------------------------------------------------------------------------------------------------------------*/\n // Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\n // Responsible for managing width/height.\n var TimeGridView = /** @class */ (function (_super) {\n __extends(TimeGridView, _super);\n function TimeGridView(context, viewSpec, dateProfileGenerator, parentEl) {\n var _this = _super.call(this, context, viewSpec, dateProfileGenerator, parentEl) || this;\n _this.splitter = new AllDaySplitter();\n /* Header Render Methods\n ------------------------------------------------------------------------------------------------------------------*/\n // Generates the HTML that will go before the day-of week header cells\n _this.renderHeadIntroHtml = function () {\n var _a = _this, theme = _a.theme, dateEnv = _a.dateEnv;\n var range = _this.props.dateProfile.renderRange;\n var dayCnt = core.diffDays(range.start, range.end);\n var weekText;\n if (_this.opt('weekNumbers')) {\n weekText = dateEnv.format(range.start, WEEK_HEADER_FORMAT);\n return '' +\n '' +\n core.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\n _this, { date: range.start, type: 'week', forceOff: dayCnt > 1 }, core.htmlEscape(weekText) // inner HTML\n ) +\n '';\n }\n else {\n return '';\n }\n };\n /* Time Grid Render Methods\n ------------------------------------------------------------------------------------------------------------------*/\n // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\n _this.renderTimeGridBgIntroHtml = function () {\n var theme = _this.theme;\n return '';\n };\n // Generates the HTML that goes before all other types of cells.\n // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.\n _this.renderTimeGridIntroHtml = function () {\n return '';\n };\n /* Day Grid Render Methods\n ------------------------------------------------------------------------------------------------------------------*/\n // Generates the HTML that goes before the all-day cells\n _this.renderDayGridBgIntroHtml = function () {\n var theme = _this.theme;\n return '' +\n '' +\n '' + // needed for matchCellWidths\n core.getAllDayHtml(_this) +\n '' +\n '';\n };\n // Generates the HTML that goes before all other types of cells.\n // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.\n _this.renderDayGridIntroHtml = function () {\n return '';\n };\n _this.el.classList.add('fc-timeGrid-view');\n _this.el.innerHTML = _this.renderSkeletonHtml();\n _this.scroller = new core.ScrollComponent('hidden', // overflow x\n 'auto' // overflow y\n );\n var timeGridWrapEl = _this.scroller.el;\n _this.el.querySelector('.fc-body > tr > td').appendChild(timeGridWrapEl);\n timeGridWrapEl.classList.add('fc-time-grid-container');\n var timeGridEl = core.createElement('div', { className: 'fc-time-grid' });\n timeGridWrapEl.appendChild(timeGridEl);\n _this.timeGrid = new TimeGrid(_this.context, timeGridEl, {\n renderBgIntroHtml: _this.renderTimeGridBgIntroHtml,\n renderIntroHtml: _this.renderTimeGridIntroHtml\n });\n if (_this.opt('allDaySlot')) { // should we display the \"all-day\" area?\n _this.dayGrid = new daygrid.DayGrid(// the all-day subcomponent of this view\n _this.context, _this.el.querySelector('.fc-day-grid'), {\n renderNumberIntroHtml: _this.renderDayGridIntroHtml,\n renderBgIntroHtml: _this.renderDayGridBgIntroHtml,\n renderIntroHtml: _this.renderDayGridIntroHtml,\n colWeekNumbersVisible: false,\n cellWeekNumbersVisible: false\n });\n // have the day-grid extend it's coordinate area over the
dividing the two grids\n _this.dayGrid.bottomCoordPadding = _this.el.querySelector('.fc-divider').offsetHeight;\n }\n return _this;\n }\n TimeGridView.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.timeGrid.destroy();\n if (this.dayGrid) {\n this.dayGrid.destroy();\n }\n this.scroller.destroy();\n };\n /* Rendering\n ------------------------------------------------------------------------------------------------------------------*/\n // Builds the HTML skeleton for the view.\n // The day-grid and time-grid components will render inside containers defined by this HTML.\n TimeGridView.prototype.renderSkeletonHtml = function () {\n var theme = this.theme;\n return '' +\n '' +\n (this.opt('columnHeader') ?\n '' +\n '' +\n '' +\n '' +\n '' :\n '') +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
 
' +\n (this.opt('allDaySlot') ?\n '
' +\n '
' :\n '') +\n '
';\n };\n /* Now Indicator\n ------------------------------------------------------------------------------------------------------------------*/\n TimeGridView.prototype.getNowIndicatorUnit = function () {\n return this.timeGrid.getNowIndicatorUnit();\n };\n // subclasses should implement\n // renderNowIndicator(date: DateMarker) {\n // }\n TimeGridView.prototype.unrenderNowIndicator = function () {\n this.timeGrid.unrenderNowIndicator();\n };\n /* Dimensions\n ------------------------------------------------------------------------------------------------------------------*/\n TimeGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {\n _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first\n this.timeGrid.updateSize(isResize);\n if (this.dayGrid) {\n this.dayGrid.updateSize(isResize);\n }\n };\n // Adjusts the vertical dimensions of the view to the specified values\n TimeGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {\n var _this = this;\n var eventLimit;\n var scrollerHeight;\n var scrollbarWidths;\n // make all axis cells line up\n this.axisWidth = core.matchCellWidths(core.findElements(this.el, '.fc-axis'));\n // hack to give the view some height prior to timeGrid's columns being rendered\n // TODO: separate setting height from scroller VS timeGrid.\n if (!this.timeGrid.colEls) {\n if (!isAuto) {\n scrollerHeight = this.computeScrollerHeight(viewHeight);\n this.scroller.setHeight(scrollerHeight);\n }\n return;\n }\n // set of fake row elements that must compensate when scroller has scrollbars\n var noScrollRowEls = core.findElements(this.el, '.fc-row').filter(function (node) {\n return !_this.scroller.el.contains(node);\n });\n // reset all dimensions back to the original state\n this.timeGrid.bottomRuleEl.style.display = 'none'; // will be shown later if this
is necessary\n this.scroller.clear(); // sets height to 'auto' and clears overflow\n noScrollRowEls.forEach(core.uncompensateScroll);\n // limit number of events in the all-day area\n if (this.dayGrid) {\n this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\n eventLimit = this.opt('eventLimit');\n if (eventLimit && typeof eventLimit !== 'number') {\n eventLimit = TIMEGRID_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\n }\n if (eventLimit) {\n this.dayGrid.limitRows(eventLimit);\n }\n }\n if (!isAuto) { // should we force dimensions of the scroll container?\n scrollerHeight = this.computeScrollerHeight(viewHeight);\n this.scroller.setHeight(scrollerHeight);\n scrollbarWidths = this.scroller.getScrollbarWidths();\n if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\n // make the all-day and header rows lines up\n noScrollRowEls.forEach(function (rowEl) {\n core.compensateScroll(rowEl, scrollbarWidths);\n });\n // the scrollbar compensation might have changed text flow, which might affect height, so recalculate\n // and reapply the desired height to the scroller.\n scrollerHeight = this.computeScrollerHeight(viewHeight);\n this.scroller.setHeight(scrollerHeight);\n }\n // guarantees the same scrollbar widths\n this.scroller.lockOverflow(scrollbarWidths);\n // if there's any space below the slats, show the horizontal rule.\n // this won't cause any new overflow, because lockOverflow already called.\n if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\n this.timeGrid.bottomRuleEl.style.display = '';\n }\n }\n };\n // given a desired total height of the view, returns what the height of the scroller should be\n TimeGridView.prototype.computeScrollerHeight = function (viewHeight) {\n return viewHeight -\n core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n };\n /* Scroll\n ------------------------------------------------------------------------------------------------------------------*/\n // Computes the initial pre-configured scroll state prior to allowing the user to change it\n TimeGridView.prototype.computeInitialDateScroll = function () {\n var scrollTime = core.createDuration(this.opt('scrollTime'));\n var top = this.timeGrid.computeTimeTop(scrollTime.milliseconds);\n // zoom can give weird floating-point values. rather scroll a little bit further\n top = Math.ceil(top);\n if (top) {\n top++; // to overcome top border that slots beyond the first have. looks better\n }\n return { top: top };\n };\n TimeGridView.prototype.queryDateScroll = function () {\n return { top: this.scroller.getScrollTop() };\n };\n TimeGridView.prototype.applyDateScroll = function (scroll) {\n if (scroll.top !== undefined) {\n this.scroller.setScrollTop(scroll.top);\n }\n };\n // Generates an HTML attribute string for setting the width of the axis, if it is known\n TimeGridView.prototype.axisStyleAttr = function () {\n if (this.axisWidth != null) {\n return 'style=\"width:' + this.axisWidth + 'px\"';\n }\n return '';\n };\n return TimeGridView;\n }(core.View));\n TimeGridView.prototype.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering\n\n var SimpleTimeGrid = /** @class */ (function (_super) {\n __extends(SimpleTimeGrid, _super);\n function SimpleTimeGrid(context, timeGrid) {\n var _this = _super.call(this, context, timeGrid.el) || this;\n _this.buildDayRanges = core.memoize(buildDayRanges);\n _this.slicer = new TimeGridSlicer();\n _this.timeGrid = timeGrid;\n context.calendar.registerInteractiveComponent(_this, {\n el: _this.timeGrid.el\n });\n return _this;\n }\n SimpleTimeGrid.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.calendar.unregisterInteractiveComponent(this);\n };\n SimpleTimeGrid.prototype.render = function (props) {\n var dateProfile = props.dateProfile, dayTable = props.dayTable;\n var dayRanges = this.dayRanges = this.buildDayRanges(dayTable, dateProfile, this.dateEnv);\n this.timeGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, null, this.timeGrid, dayRanges), { dateProfile: dateProfile, cells: dayTable.cells[0] }));\n };\n SimpleTimeGrid.prototype.renderNowIndicator = function (date) {\n this.timeGrid.renderNowIndicator(this.slicer.sliceNowDate(date, this.timeGrid, this.dayRanges), date);\n };\n SimpleTimeGrid.prototype.queryHit = function (positionLeft, positionTop) {\n var rawHit = this.timeGrid.positionToHit(positionLeft, positionTop);\n if (rawHit) {\n return {\n component: this.timeGrid,\n dateSpan: rawHit.dateSpan,\n dayEl: rawHit.dayEl,\n rect: {\n left: rawHit.relativeRect.left,\n right: rawHit.relativeRect.right,\n top: rawHit.relativeRect.top,\n bottom: rawHit.relativeRect.bottom\n },\n layer: 0\n };\n }\n };\n return SimpleTimeGrid;\n }(core.DateComponent));\n function buildDayRanges(dayTable, dateProfile, dateEnv) {\n var ranges = [];\n for (var _i = 0, _a = dayTable.headerDates; _i < _a.length; _i++) {\n var date = _a[_i];\n ranges.push({\n start: dateEnv.add(date, dateProfile.minTime),\n end: dateEnv.add(date, dateProfile.maxTime)\n });\n }\n return ranges;\n }\n var TimeGridSlicer = /** @class */ (function (_super) {\n __extends(TimeGridSlicer, _super);\n function TimeGridSlicer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n TimeGridSlicer.prototype.sliceRange = function (range, dayRanges) {\n var segs = [];\n for (var col = 0; col < dayRanges.length; col++) {\n var segRange = core.intersectRanges(range, dayRanges[col]);\n if (segRange) {\n segs.push({\n start: segRange.start,\n end: segRange.end,\n isStart: segRange.start.valueOf() === range.start.valueOf(),\n isEnd: segRange.end.valueOf() === range.end.valueOf(),\n col: col\n });\n }\n }\n return segs;\n };\n return TimeGridSlicer;\n }(core.Slicer));\n\n var TimeGridView$1 = /** @class */ (function (_super) {\n __extends(TimeGridView, _super);\n function TimeGridView(_context, viewSpec, dateProfileGenerator, parentEl) {\n var _this = _super.call(this, _context, viewSpec, dateProfileGenerator, parentEl) || this;\n _this.buildDayTable = core.memoize(buildDayTable);\n if (_this.opt('columnHeader')) {\n _this.header = new core.DayHeader(_this.context, _this.el.querySelector('.fc-head-container'));\n }\n _this.simpleTimeGrid = new SimpleTimeGrid(_this.context, _this.timeGrid);\n if (_this.dayGrid) {\n _this.simpleDayGrid = new daygrid.SimpleDayGrid(_this.context, _this.dayGrid);\n }\n return _this;\n }\n TimeGridView.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.header) {\n this.header.destroy();\n }\n this.simpleTimeGrid.destroy();\n if (this.simpleDayGrid) {\n this.simpleDayGrid.destroy();\n }\n };\n TimeGridView.prototype.render = function (props) {\n _super.prototype.render.call(this, props); // for flags for updateSize\n var dateProfile = this.props.dateProfile;\n var dayTable = this.buildDayTable(dateProfile, this.dateProfileGenerator);\n var splitProps = this.splitter.splitProps(props);\n if (this.header) {\n this.header.receiveProps({\n dateProfile: dateProfile,\n dates: dayTable.headerDates,\n datesRepDistinctDays: true,\n renderIntroHtml: this.renderHeadIntroHtml\n });\n }\n this.simpleTimeGrid.receiveProps(__assign({}, splitProps['timed'], { dateProfile: dateProfile,\n dayTable: dayTable }));\n if (this.simpleDayGrid) {\n this.simpleDayGrid.receiveProps(__assign({}, splitProps['allDay'], { dateProfile: dateProfile,\n dayTable: dayTable, nextDayThreshold: this.nextDayThreshold, isRigid: false }));\n }\n };\n TimeGridView.prototype.renderNowIndicator = function (date) {\n this.simpleTimeGrid.renderNowIndicator(date);\n };\n return TimeGridView;\n }(TimeGridView));\n function buildDayTable(dateProfile, dateProfileGenerator) {\n var daySeries = new core.DaySeries(dateProfile.renderRange, dateProfileGenerator);\n return new core.DayTable(daySeries, false);\n }\n\n var main = core.createPlugin({\n defaultView: 'timeGridWeek',\n views: {\n timeGrid: {\n class: TimeGridView$1,\n allDaySlot: true,\n slotDuration: '00:30:00',\n slotEventOverlap: true // a bad name. confused with overlap/constraint system\n },\n timeGridDay: {\n type: 'timeGrid',\n duration: { days: 1 }\n },\n timeGridWeek: {\n type: 'timeGrid',\n duration: { weeks: 1 }\n }\n }\n });\n\n exports.TimeGridView = TimeGridView$1;\n exports.AbstractTimeGridView = TimeGridView;\n exports.buildDayTable = buildDayTable;\n exports.buildDayRanges = buildDayRanges;\n exports.TimeGridSlicer = TimeGridSlicer;\n exports.default = main;\n exports.TimeGrid = TimeGrid;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","/*!\nFullCalendar Interaction Plugin v4.0.2\nDocs & License: https://fullcalendar.io/\n(c) 2019 Adam Shaw\n*/\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :\n typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :\n (global = global || self, factory(global.FullCalendarInteraction = {}, global.FullCalendar));\n}(this, function (exports, core) { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise */\r\n\r\n var extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n }\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\n\n core.config.touchMouseIgnoreWait = 500;\n var ignoreMouseDepth = 0;\n var listenerCnt = 0;\n var isWindowTouchMoveCancelled = false;\n /*\n Uses a \"pointer\" abstraction, which monitors UI events for both mouse and touch.\n Tracks when the pointer \"drags\" on a certain element, meaning down+move+up.\n\n Also, tracks if there was touch-scrolling.\n Also, can prevent touch-scrolling from happening.\n Also, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.\n\n emits:\n - pointerdown\n - pointermove\n - pointerup\n */\n var PointerDragging = /** @class */ (function () {\n function PointerDragging(containerEl) {\n var _this = this;\n this.subjectEl = null;\n this.downEl = null;\n // options that can be directly assigned by caller\n this.selector = ''; // will cause subjectEl in all emitted events to be this element\n this.handleSelector = '';\n this.shouldIgnoreMove = false;\n this.shouldWatchScroll = true; // for simulating pointermove on scroll\n // internal states\n this.isDragging = false;\n this.isTouchDragging = false;\n this.wasTouchScroll = false;\n // Mouse\n // ----------------------------------------------------------------------------------------------------\n this.handleMouseDown = function (ev) {\n if (!_this.shouldIgnoreMouse() &&\n isPrimaryMouseButton(ev) &&\n _this.tryStart(ev)) {\n var pev = _this.createEventFromMouse(ev, true);\n _this.emitter.trigger('pointerdown', pev);\n _this.initScrollWatch(pev);\n if (!_this.shouldIgnoreMove) {\n document.addEventListener('mousemove', _this.handleMouseMove);\n }\n document.addEventListener('mouseup', _this.handleMouseUp);\n }\n };\n this.handleMouseMove = function (ev) {\n var pev = _this.createEventFromMouse(ev);\n _this.recordCoords(pev);\n _this.emitter.trigger('pointermove', pev);\n };\n this.handleMouseUp = function (ev) {\n document.removeEventListener('mousemove', _this.handleMouseMove);\n document.removeEventListener('mouseup', _this.handleMouseUp);\n _this.emitter.trigger('pointerup', _this.createEventFromMouse(ev));\n _this.cleanup(); // call last so that pointerup has access to props\n };\n // Touch\n // ----------------------------------------------------------------------------------------------------\n this.handleTouchStart = function (ev) {\n if (_this.tryStart(ev)) {\n _this.isTouchDragging = true;\n var pev = _this.createEventFromTouch(ev, true);\n _this.emitter.trigger('pointerdown', pev);\n _this.initScrollWatch(pev);\n // unlike mouse, need to attach to target, not document\n // https://stackoverflow.com/a/45760014\n var target = ev.target;\n if (!_this.shouldIgnoreMove) {\n target.addEventListener('touchmove', _this.handleTouchMove);\n }\n target.addEventListener('touchend', _this.handleTouchEnd);\n target.addEventListener('touchcancel', _this.handleTouchEnd); // treat it as a touch end\n // attach a handler to get called when ANY scroll action happens on the page.\n // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\n // http://stackoverflow.com/a/32954565/96342\n window.addEventListener('scroll', _this.handleTouchScroll, true // useCapture\n );\n }\n };\n this.handleTouchMove = function (ev) {\n var pev = _this.createEventFromTouch(ev);\n _this.recordCoords(pev);\n _this.emitter.trigger('pointermove', pev);\n };\n this.handleTouchEnd = function (ev) {\n if (_this.isDragging) { // done to guard against touchend followed by touchcancel\n var target = ev.target;\n target.removeEventListener('touchmove', _this.handleTouchMove);\n target.removeEventListener('touchend', _this.handleTouchEnd);\n target.removeEventListener('touchcancel', _this.handleTouchEnd);\n window.removeEventListener('scroll', _this.handleTouchScroll, true); // useCaptured=true\n _this.emitter.trigger('pointerup', _this.createEventFromTouch(ev));\n _this.cleanup(); // call last so that pointerup has access to props\n _this.isTouchDragging = false;\n startIgnoringMouse();\n }\n };\n this.handleTouchScroll = function () {\n _this.wasTouchScroll = true;\n };\n this.handleScroll = function (ev) {\n if (!_this.shouldIgnoreMove) {\n var pageX = (window.pageXOffset - _this.prevScrollX) + _this.prevPageX;\n var pageY = (window.pageYOffset - _this.prevScrollY) + _this.prevPageY;\n _this.emitter.trigger('pointermove', {\n origEvent: ev,\n isTouch: _this.isTouchDragging,\n subjectEl: _this.subjectEl,\n pageX: pageX,\n pageY: pageY,\n deltaX: pageX - _this.origPageX,\n deltaY: pageY - _this.origPageY\n });\n }\n };\n this.containerEl = containerEl;\n this.emitter = new core.EmitterMixin();\n containerEl.addEventListener('mousedown', this.handleMouseDown);\n containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true });\n listenerCreated();\n }\n PointerDragging.prototype.destroy = function () {\n this.containerEl.removeEventListener('mousedown', this.handleMouseDown);\n this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true });\n listenerDestroyed();\n };\n PointerDragging.prototype.tryStart = function (ev) {\n var subjectEl = this.querySubjectEl(ev);\n var downEl = ev.target;\n if (subjectEl &&\n (!this.handleSelector || core.elementClosest(downEl, this.handleSelector))) {\n this.subjectEl = subjectEl;\n this.downEl = downEl;\n this.isDragging = true; // do this first so cancelTouchScroll will work\n this.wasTouchScroll = false;\n return true;\n }\n return false;\n };\n PointerDragging.prototype.cleanup = function () {\n isWindowTouchMoveCancelled = false;\n this.isDragging = false;\n this.subjectEl = null;\n this.downEl = null;\n // keep wasTouchScroll around for later access\n this.destroyScrollWatch();\n };\n PointerDragging.prototype.querySubjectEl = function (ev) {\n if (this.selector) {\n return core.elementClosest(ev.target, this.selector);\n }\n else {\n return this.containerEl;\n }\n };\n PointerDragging.prototype.shouldIgnoreMouse = function () {\n return ignoreMouseDepth || this.isTouchDragging;\n };\n // can be called by user of this class, to cancel touch-based scrolling for the current drag\n PointerDragging.prototype.cancelTouchScroll = function () {\n if (this.isDragging) {\n isWindowTouchMoveCancelled = true;\n }\n };\n // Scrolling that simulates pointermoves\n // ----------------------------------------------------------------------------------------------------\n PointerDragging.prototype.initScrollWatch = function (ev) {\n if (this.shouldWatchScroll) {\n this.recordCoords(ev);\n window.addEventListener('scroll', this.handleScroll, true); // useCapture=true\n }\n };\n PointerDragging.prototype.recordCoords = function (ev) {\n if (this.shouldWatchScroll) {\n this.prevPageX = ev.pageX;\n this.prevPageY = ev.pageY;\n this.prevScrollX = window.pageXOffset;\n this.prevScrollY = window.pageYOffset;\n }\n };\n PointerDragging.prototype.destroyScrollWatch = function () {\n if (this.shouldWatchScroll) {\n window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true\n }\n };\n // Event Normalization\n // ----------------------------------------------------------------------------------------------------\n PointerDragging.prototype.createEventFromMouse = function (ev, isFirst) {\n var deltaX = 0;\n var deltaY = 0;\n // TODO: repeat code\n if (isFirst) {\n this.origPageX = ev.pageX;\n this.origPageY = ev.pageY;\n }\n else {\n deltaX = ev.pageX - this.origPageX;\n deltaY = ev.pageY - this.origPageY;\n }\n return {\n origEvent: ev,\n isTouch: false,\n subjectEl: this.subjectEl,\n pageX: ev.pageX,\n pageY: ev.pageY,\n deltaX: deltaX,\n deltaY: deltaY\n };\n };\n PointerDragging.prototype.createEventFromTouch = function (ev, isFirst) {\n var touches = ev.touches;\n var pageX;\n var pageY;\n var deltaX = 0;\n var deltaY = 0;\n // if touch coords available, prefer,\n // because FF would give bad ev.pageX ev.pageY\n if (touches && touches.length) {\n pageX = touches[0].pageX;\n pageY = touches[0].pageY;\n }\n else {\n pageX = ev.pageX;\n pageY = ev.pageY;\n }\n // TODO: repeat code\n if (isFirst) {\n this.origPageX = pageX;\n this.origPageY = pageY;\n }\n else {\n deltaX = pageX - this.origPageX;\n deltaY = pageY - this.origPageY;\n }\n return {\n origEvent: ev,\n isTouch: true,\n subjectEl: this.subjectEl,\n pageX: pageX,\n pageY: pageY,\n deltaX: deltaX,\n deltaY: deltaY\n };\n };\n return PointerDragging;\n }());\n // Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\n function isPrimaryMouseButton(ev) {\n return ev.button === 0 && !ev.ctrlKey;\n }\n // Ignoring fake mouse events generated by touch\n // ----------------------------------------------------------------------------------------------------\n function startIgnoringMouse() {\n ignoreMouseDepth++;\n setTimeout(function () {\n ignoreMouseDepth--;\n }, core.config.touchMouseIgnoreWait);\n }\n // We want to attach touchmove as early as possible for Safari\n // ----------------------------------------------------------------------------------------------------\n function listenerCreated() {\n if (!(listenerCnt++)) {\n window.addEventListener('touchmove', onWindowTouchMove, { passive: false });\n }\n }\n function listenerDestroyed() {\n if (!(--listenerCnt)) {\n window.removeEventListener('touchmove', onWindowTouchMove, { passive: false });\n }\n }\n function onWindowTouchMove(ev) {\n if (isWindowTouchMoveCancelled) {\n ev.preventDefault();\n }\n }\n\n /*\n An effect in which an element follows the movement of a pointer across the screen.\n The moving element is a clone of some other element.\n Must call start + handleMove + stop.\n */\n var ElementMirror = /** @class */ (function () {\n function ElementMirror() {\n this.isVisible = false; // must be explicitly enabled\n this.sourceEl = null;\n this.mirrorEl = null;\n this.sourceElRect = null; // screen coords relative to viewport\n // options that can be set directly by caller\n this.parentNode = document.body;\n this.zIndex = 9999;\n this.revertDuration = 0;\n }\n ElementMirror.prototype.start = function (sourceEl, pageX, pageY) {\n this.sourceEl = sourceEl;\n this.sourceElRect = this.sourceEl.getBoundingClientRect();\n this.origScreenX = pageX - window.pageXOffset;\n this.origScreenY = pageY - window.pageYOffset;\n this.deltaX = 0;\n this.deltaY = 0;\n this.updateElPosition();\n };\n ElementMirror.prototype.handleMove = function (pageX, pageY) {\n this.deltaX = (pageX - window.pageXOffset) - this.origScreenX;\n this.deltaY = (pageY - window.pageYOffset) - this.origScreenY;\n this.updateElPosition();\n };\n // can be called before start\n ElementMirror.prototype.setIsVisible = function (bool) {\n if (bool) {\n if (!this.isVisible) {\n if (this.mirrorEl) {\n this.mirrorEl.style.display = '';\n }\n this.isVisible = bool; // needs to happen before updateElPosition\n this.updateElPosition(); // because was not updating the position while invisible\n }\n }\n else {\n if (this.isVisible) {\n if (this.mirrorEl) {\n this.mirrorEl.style.display = 'none';\n }\n this.isVisible = bool;\n }\n }\n };\n // always async\n ElementMirror.prototype.stop = function (needsRevertAnimation, callback) {\n var _this = this;\n var done = function () {\n _this.cleanup();\n callback();\n };\n if (needsRevertAnimation &&\n this.mirrorEl &&\n this.isVisible &&\n this.revertDuration && // if 0, transition won't work\n (this.deltaX || this.deltaY) // if same coords, transition won't work\n ) {\n this.doRevertAnimation(done, this.revertDuration);\n }\n else {\n setTimeout(done, 0);\n }\n };\n ElementMirror.prototype.doRevertAnimation = function (callback, revertDuration) {\n var mirrorEl = this.mirrorEl;\n var finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened\n mirrorEl.style.transition =\n 'top ' + revertDuration + 'ms,' +\n 'left ' + revertDuration + 'ms';\n core.applyStyle(mirrorEl, {\n left: finalSourceElRect.left,\n top: finalSourceElRect.top\n });\n core.whenTransitionDone(mirrorEl, function () {\n mirrorEl.style.transition = '';\n callback();\n });\n };\n ElementMirror.prototype.cleanup = function () {\n if (this.mirrorEl) {\n core.removeElement(this.mirrorEl);\n this.mirrorEl = null;\n }\n this.sourceEl = null;\n };\n ElementMirror.prototype.updateElPosition = function () {\n if (this.sourceEl && this.isVisible) {\n core.applyStyle(this.getMirrorEl(), {\n left: this.sourceElRect.left + this.deltaX,\n top: this.sourceElRect.top + this.deltaY\n });\n }\n };\n ElementMirror.prototype.getMirrorEl = function () {\n var sourceElRect = this.sourceElRect;\n var mirrorEl = this.mirrorEl;\n if (!mirrorEl) {\n mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true\n // we don't want long taps or any mouse interaction causing selection/menus.\n // would use preventSelection(), but that prevents selectstart, causing problems.\n mirrorEl.classList.add('fc-unselectable');\n mirrorEl.classList.add('fc-dragging');\n core.applyStyle(mirrorEl, {\n position: 'fixed',\n zIndex: this.zIndex,\n visibility: '',\n boxSizing: 'border-box',\n width: sourceElRect.right - sourceElRect.left,\n height: sourceElRect.bottom - sourceElRect.top,\n right: 'auto',\n bottom: 'auto',\n margin: 0\n });\n this.parentNode.appendChild(mirrorEl);\n }\n return mirrorEl;\n };\n return ElementMirror;\n }());\n\n /*\n Is a cache for a given element's scroll information (all the info that ScrollController stores)\n in addition the \"client rectangle\" of the element.. the area within the scrollbars.\n\n The cache can be in one of two modes:\n - doesListening:false - ignores when the container is scrolled by someone else\n - doesListening:true - watch for scrolling and update the cache\n */\n var ScrollGeomCache = /** @class */ (function (_super) {\n __extends(ScrollGeomCache, _super);\n function ScrollGeomCache(scrollController, doesListening) {\n var _this = _super.call(this) || this;\n _this.handleScroll = function () {\n _this.scrollTop = _this.scrollController.getScrollTop();\n _this.scrollLeft = _this.scrollController.getScrollLeft();\n _this.handleScrollChange();\n };\n _this.scrollController = scrollController;\n _this.doesListening = doesListening;\n _this.scrollTop = _this.origScrollTop = scrollController.getScrollTop();\n _this.scrollLeft = _this.origScrollLeft = scrollController.getScrollLeft();\n _this.scrollWidth = scrollController.getScrollWidth();\n _this.scrollHeight = scrollController.getScrollHeight();\n _this.clientWidth = scrollController.getClientWidth();\n _this.clientHeight = scrollController.getClientHeight();\n _this.clientRect = _this.computeClientRect(); // do last in case it needs cached values\n if (_this.doesListening) {\n _this.getEventTarget().addEventListener('scroll', _this.handleScroll);\n }\n return _this;\n }\n ScrollGeomCache.prototype.destroy = function () {\n if (this.doesListening) {\n this.getEventTarget().removeEventListener('scroll', this.handleScroll);\n }\n };\n ScrollGeomCache.prototype.getScrollTop = function () {\n return this.scrollTop;\n };\n ScrollGeomCache.prototype.getScrollLeft = function () {\n return this.scrollLeft;\n };\n ScrollGeomCache.prototype.setScrollTop = function (top) {\n this.scrollController.setScrollTop(top);\n if (!this.doesListening) {\n // we are not relying on the element to normalize out-of-bounds scroll values\n // so we need to sanitize ourselves\n this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);\n this.handleScrollChange();\n }\n };\n ScrollGeomCache.prototype.setScrollLeft = function (top) {\n this.scrollController.setScrollLeft(top);\n if (!this.doesListening) {\n // we are not relying on the element to normalize out-of-bounds scroll values\n // so we need to sanitize ourselves\n this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);\n this.handleScrollChange();\n }\n };\n ScrollGeomCache.prototype.getClientWidth = function () {\n return this.clientWidth;\n };\n ScrollGeomCache.prototype.getClientHeight = function () {\n return this.clientHeight;\n };\n ScrollGeomCache.prototype.getScrollWidth = function () {\n return this.scrollWidth;\n };\n ScrollGeomCache.prototype.getScrollHeight = function () {\n return this.scrollHeight;\n };\n ScrollGeomCache.prototype.handleScrollChange = function () {\n };\n return ScrollGeomCache;\n }(core.ScrollController));\n var ElementScrollGeomCache = /** @class */ (function (_super) {\n __extends(ElementScrollGeomCache, _super);\n function ElementScrollGeomCache(el, doesListening) {\n return _super.call(this, new core.ElementScrollController(el), doesListening) || this;\n }\n ElementScrollGeomCache.prototype.getEventTarget = function () {\n return this.scrollController.el;\n };\n ElementScrollGeomCache.prototype.computeClientRect = function () {\n return core.computeInnerRect(this.scrollController.el);\n };\n return ElementScrollGeomCache;\n }(ScrollGeomCache));\n var WindowScrollGeomCache = /** @class */ (function (_super) {\n __extends(WindowScrollGeomCache, _super);\n function WindowScrollGeomCache(doesListening) {\n return _super.call(this, new core.WindowScrollController(), doesListening) || this;\n }\n WindowScrollGeomCache.prototype.getEventTarget = function () {\n return window;\n };\n WindowScrollGeomCache.prototype.computeClientRect = function () {\n return {\n left: this.scrollLeft,\n right: this.scrollLeft + this.clientWidth,\n top: this.scrollTop,\n bottom: this.scrollTop + this.clientHeight\n };\n };\n // the window is the only scroll object that changes it's rectangle relative\n // to the document's topleft as it scrolls\n WindowScrollGeomCache.prototype.handleScrollChange = function () {\n this.clientRect = this.computeClientRect();\n };\n return WindowScrollGeomCache;\n }(ScrollGeomCache));\n\n // If available we are using native \"performance\" API instead of \"Date\"\n // Read more about it on MDN:\n // https://developer.mozilla.org/en-US/docs/Web/API/Performance\n var getTime = typeof performance === 'function' ? performance.now : Date.now;\n /*\n For a pointer interaction, automatically scrolls certain scroll containers when the pointer\n approaches the edge.\n\n The caller must call start + handleMove + stop.\n */\n var AutoScroller = /** @class */ (function () {\n function AutoScroller() {\n var _this = this;\n // options that can be set by caller\n this.isEnabled = true;\n this.scrollQuery = [window, '.fc-scroller'];\n this.edgeThreshold = 50; // pixels\n this.maxVelocity = 300; // pixels per second\n // internal state\n this.pointerScreenX = null;\n this.pointerScreenY = null;\n this.isAnimating = false;\n this.scrollCaches = null;\n // protect against the initial pointerdown being too close to an edge and starting the scroll\n this.everMovedUp = false;\n this.everMovedDown = false;\n this.everMovedLeft = false;\n this.everMovedRight = false;\n this.animate = function () {\n if (_this.isAnimating) { // wasn't cancelled between animation calls\n var edge = _this.computeBestEdge(_this.pointerScreenX + window.pageXOffset, _this.pointerScreenY + window.pageYOffset);\n if (edge) {\n var now = getTime();\n _this.handleSide(edge, (now - _this.msSinceRequest) / 1000);\n _this.requestAnimation(now);\n }\n else {\n _this.isAnimating = false; // will stop animation\n }\n }\n };\n }\n AutoScroller.prototype.start = function (pageX, pageY) {\n if (this.isEnabled) {\n this.scrollCaches = this.buildCaches();\n this.pointerScreenX = null;\n this.pointerScreenY = null;\n this.everMovedUp = false;\n this.everMovedDown = false;\n this.everMovedLeft = false;\n this.everMovedRight = false;\n this.handleMove(pageX, pageY);\n }\n };\n AutoScroller.prototype.handleMove = function (pageX, pageY) {\n if (this.isEnabled) {\n var pointerScreenX = pageX - window.pageXOffset;\n var pointerScreenY = pageY - window.pageYOffset;\n var yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;\n var xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;\n if (yDelta < 0) {\n this.everMovedUp = true;\n }\n else if (yDelta > 0) {\n this.everMovedDown = true;\n }\n if (xDelta < 0) {\n this.everMovedLeft = true;\n }\n else if (xDelta > 0) {\n this.everMovedRight = true;\n }\n this.pointerScreenX = pointerScreenX;\n this.pointerScreenY = pointerScreenY;\n if (!this.isAnimating) {\n this.isAnimating = true;\n this.requestAnimation(getTime());\n }\n }\n };\n AutoScroller.prototype.stop = function () {\n if (this.isEnabled) {\n this.isAnimating = false; // will stop animation\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n scrollCache.destroy();\n }\n this.scrollCaches = null;\n }\n };\n AutoScroller.prototype.requestAnimation = function (now) {\n this.msSinceRequest = now;\n requestAnimationFrame(this.animate);\n };\n AutoScroller.prototype.handleSide = function (edge, seconds) {\n var scrollCache = edge.scrollCache;\n var edgeThreshold = this.edgeThreshold;\n var invDistance = edgeThreshold - edge.distance;\n var velocity = // the closer to the edge, the faster we scroll\n (invDistance * invDistance) / (edgeThreshold * edgeThreshold) * // quadratic\n this.maxVelocity * seconds;\n var sign = 1;\n switch (edge.name) {\n case 'left':\n sign = -1;\n // falls through\n case 'right':\n scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);\n break;\n case 'top':\n sign = -1;\n // falls through\n case 'bottom':\n scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);\n break;\n }\n };\n // left/top are relative to document topleft\n AutoScroller.prototype.computeBestEdge = function (left, top) {\n var edgeThreshold = this.edgeThreshold;\n var bestSide = null;\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n var rect = scrollCache.clientRect;\n var leftDist = left - rect.left;\n var rightDist = rect.right - left;\n var topDist = top - rect.top;\n var bottomDist = rect.bottom - top;\n // completely within the rect?\n if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {\n if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&\n (!bestSide || bestSide.distance > topDist)) {\n bestSide = { scrollCache: scrollCache, name: 'top', distance: topDist };\n }\n if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&\n (!bestSide || bestSide.distance > bottomDist)) {\n bestSide = { scrollCache: scrollCache, name: 'bottom', distance: bottomDist };\n }\n if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&\n (!bestSide || bestSide.distance > leftDist)) {\n bestSide = { scrollCache: scrollCache, name: 'left', distance: leftDist };\n }\n if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&\n (!bestSide || bestSide.distance > rightDist)) {\n bestSide = { scrollCache: scrollCache, name: 'right', distance: rightDist };\n }\n }\n }\n return bestSide;\n };\n AutoScroller.prototype.buildCaches = function () {\n return this.queryScrollEls().map(function (el) {\n if (el === window) {\n return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls\n }\n else {\n return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls\n }\n });\n };\n AutoScroller.prototype.queryScrollEls = function () {\n var els = [];\n for (var _i = 0, _a = this.scrollQuery; _i < _a.length; _i++) {\n var query = _a[_i];\n if (typeof query === 'object') {\n els.push(query);\n }\n else {\n els.push.apply(els, Array.prototype.slice.call(document.querySelectorAll(query)));\n }\n }\n return els;\n };\n return AutoScroller;\n }());\n\n /*\n Monitors dragging on an element. Has a number of high-level features:\n - minimum distance required before dragging\n - minimum wait time (\"delay\") before dragging\n - a mirror element that follows the pointer\n */\n var FeaturefulElementDragging = /** @class */ (function (_super) {\n __extends(FeaturefulElementDragging, _super);\n function FeaturefulElementDragging(containerEl) {\n var _this = _super.call(this, containerEl) || this;\n // options that can be directly set by caller\n // the caller can also set the PointerDragging's options as well\n _this.delay = null;\n _this.minDistance = 0;\n _this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag\n _this.mirrorNeedsRevert = false;\n _this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup\n _this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation\n _this.isDelayEnded = false;\n _this.isDistanceSurpassed = false;\n _this.delayTimeoutId = null;\n _this.onPointerDown = function (ev) {\n if (!_this.isDragging) { // so new drag doesn't happen while revert animation is going\n _this.isInteracting = true;\n _this.isDelayEnded = false;\n _this.isDistanceSurpassed = false;\n core.preventSelection(document.body);\n core.preventContextMenu(document.body);\n // prevent links from being visited if there's an eventual drag.\n // also prevents selection in older browsers (maybe?).\n // not necessary for touch, besides, browser would complain about passiveness.\n if (!ev.isTouch) {\n ev.origEvent.preventDefault();\n }\n _this.emitter.trigger('pointerdown', ev);\n if (!_this.pointer.shouldIgnoreMove) {\n // actions related to initiating dragstart+dragmove+dragend...\n _this.mirror.setIsVisible(false); // reset. caller must set-visible\n _this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down\n _this.startDelay(ev);\n if (!_this.minDistance) {\n _this.handleDistanceSurpassed(ev);\n }\n }\n }\n };\n _this.onPointerMove = function (ev) {\n if (_this.isInteracting) { // if false, still waiting for previous drag's revert\n _this.emitter.trigger('pointermove', ev);\n if (!_this.isDistanceSurpassed) {\n var minDistance = _this.minDistance;\n var distanceSq = void 0; // current distance from the origin, squared\n var deltaX = ev.deltaX, deltaY = ev.deltaY;\n distanceSq = deltaX * deltaX + deltaY * deltaY;\n if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\n _this.handleDistanceSurpassed(ev);\n }\n }\n if (_this.isDragging) {\n // a real pointer move? (not one simulated by scrolling)\n if (ev.origEvent.type !== 'scroll') {\n _this.mirror.handleMove(ev.pageX, ev.pageY);\n _this.autoScroller.handleMove(ev.pageX, ev.pageY);\n }\n _this.emitter.trigger('dragmove', ev);\n }\n }\n };\n _this.onPointerUp = function (ev) {\n if (_this.isInteracting) { // if false, still waiting for previous drag's revert\n _this.isInteracting = false;\n core.allowSelection(document.body);\n core.allowContextMenu(document.body);\n _this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert\n if (_this.isDragging) {\n _this.autoScroller.stop();\n _this.tryStopDrag(ev); // which will stop the mirror\n }\n if (_this.delayTimeoutId) {\n clearTimeout(_this.delayTimeoutId);\n _this.delayTimeoutId = null;\n }\n }\n };\n var pointer = _this.pointer = new PointerDragging(containerEl);\n pointer.emitter.on('pointerdown', _this.onPointerDown);\n pointer.emitter.on('pointermove', _this.onPointerMove);\n pointer.emitter.on('pointerup', _this.onPointerUp);\n _this.mirror = new ElementMirror();\n _this.autoScroller = new AutoScroller();\n return _this;\n }\n FeaturefulElementDragging.prototype.destroy = function () {\n this.pointer.destroy();\n };\n FeaturefulElementDragging.prototype.startDelay = function (ev) {\n var _this = this;\n if (typeof this.delay === 'number') {\n this.delayTimeoutId = setTimeout(function () {\n _this.delayTimeoutId = null;\n _this.handleDelayEnd(ev);\n }, this.delay);\n }\n else {\n this.handleDelayEnd(ev);\n }\n };\n FeaturefulElementDragging.prototype.handleDelayEnd = function (ev) {\n this.isDelayEnded = true;\n this.tryStartDrag(ev);\n };\n FeaturefulElementDragging.prototype.handleDistanceSurpassed = function (ev) {\n this.isDistanceSurpassed = true;\n this.tryStartDrag(ev);\n };\n FeaturefulElementDragging.prototype.tryStartDrag = function (ev) {\n if (this.isDelayEnded && this.isDistanceSurpassed) {\n if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {\n this.isDragging = true;\n this.mirrorNeedsRevert = false;\n this.autoScroller.start(ev.pageX, ev.pageY);\n this.emitter.trigger('dragstart', ev);\n if (this.touchScrollAllowed === false) {\n this.pointer.cancelTouchScroll();\n }\n }\n }\n };\n FeaturefulElementDragging.prototype.tryStopDrag = function (ev) {\n // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events\n // that come from the document to fire beforehand. much more convenient this way.\n this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev) // bound with args\n );\n };\n FeaturefulElementDragging.prototype.stopDrag = function (ev) {\n this.isDragging = false;\n this.emitter.trigger('dragend', ev);\n };\n // fill in the implementations...\n FeaturefulElementDragging.prototype.setIgnoreMove = function (bool) {\n this.pointer.shouldIgnoreMove = bool;\n };\n FeaturefulElementDragging.prototype.setMirrorIsVisible = function (bool) {\n this.mirror.setIsVisible(bool);\n };\n FeaturefulElementDragging.prototype.setMirrorNeedsRevert = function (bool) {\n this.mirrorNeedsRevert = bool;\n };\n FeaturefulElementDragging.prototype.setAutoScrollEnabled = function (bool) {\n this.autoScroller.isEnabled = bool;\n };\n return FeaturefulElementDragging;\n }(core.ElementDragging));\n\n /*\n When this class is instantiated, it records the offset of an element (relative to the document topleft),\n and continues to monitor scrolling, updating the cached coordinates if it needs to.\n Does not access the DOM after instantiation, so highly performant.\n\n Also keeps track of all scrolling/overflow:hidden containers that are parents of the given element\n and an determine if a given point is inside the combined clipping rectangle.\n */\n var OffsetTracker = /** @class */ (function () {\n function OffsetTracker(el) {\n this.origRect = core.computeRect(el);\n // will work fine for divs that have overflow:hidden\n this.scrollCaches = core.getClippingParents(el).map(function (el) {\n return new ElementScrollGeomCache(el, true); // listen=true\n });\n }\n OffsetTracker.prototype.destroy = function () {\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n scrollCache.destroy();\n }\n };\n OffsetTracker.prototype.computeLeft = function () {\n var left = this.origRect.left;\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();\n }\n return left;\n };\n OffsetTracker.prototype.computeTop = function () {\n var top = this.origRect.top;\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n top += scrollCache.origScrollTop - scrollCache.getScrollTop();\n }\n return top;\n };\n OffsetTracker.prototype.isWithinClipping = function (pageX, pageY) {\n var point = { left: pageX, top: pageY };\n for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {\n var scrollCache = _a[_i];\n if (!isIgnoredClipping(scrollCache.getEventTarget()) &&\n !core.pointInsideRect(point, scrollCache.clientRect)) {\n return false;\n }\n }\n return true;\n };\n return OffsetTracker;\n }());\n // certain clipping containers should never constrain interactions, like and \n // https://github.com/fullcalendar/fullcalendar/issues/3615\n function isIgnoredClipping(node) {\n var tagName = node.tagName;\n return tagName === 'HTML' || tagName === 'BODY';\n }\n\n /*\n Tracks movement over multiple droppable areas (aka \"hits\")\n that exist in one or more DateComponents.\n Relies on an existing draggable.\n\n emits:\n - pointerdown\n - dragstart\n - hitchange - fires initially, even if not over a hit\n - pointerup\n - (hitchange - again, to null, if ended over a hit)\n - dragend\n */\n var HitDragging = /** @class */ (function () {\n function HitDragging(dragging, droppableStore) {\n var _this = this;\n // options that can be set by caller\n this.useSubjectCenter = false;\n this.requireInitial = true; // if doesn't start out on a hit, won't emit any events\n this.initialHit = null;\n this.movingHit = null;\n this.finalHit = null; // won't ever be populated if shouldIgnoreMove\n this.handlePointerDown = function (ev) {\n var dragging = _this.dragging;\n _this.initialHit = null;\n _this.movingHit = null;\n _this.finalHit = null;\n _this.prepareHits();\n _this.processFirstCoord(ev);\n if (_this.initialHit || !_this.requireInitial) {\n dragging.setIgnoreMove(false);\n _this.emitter.trigger('pointerdown', ev); // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(\n }\n else {\n dragging.setIgnoreMove(true);\n }\n };\n this.handleDragStart = function (ev) {\n _this.emitter.trigger('dragstart', ev);\n _this.handleMove(ev, true); // force = fire even if initially null\n };\n this.handleDragMove = function (ev) {\n _this.emitter.trigger('dragmove', ev);\n _this.handleMove(ev);\n };\n this.handlePointerUp = function (ev) {\n _this.releaseHits();\n _this.emitter.trigger('pointerup', ev);\n };\n this.handleDragEnd = function (ev) {\n if (_this.movingHit) {\n _this.emitter.trigger('hitupdate', null, true, ev);\n }\n _this.finalHit = _this.movingHit;\n _this.movingHit = null;\n _this.emitter.trigger('dragend', ev);\n };\n this.droppableStore = droppableStore;\n dragging.emitter.on('pointerdown', this.handlePointerDown);\n dragging.emitter.on('dragstart', this.handleDragStart);\n dragging.emitter.on('dragmove', this.handleDragMove);\n dragging.emitter.on('pointerup', this.handlePointerUp);\n dragging.emitter.on('dragend', this.handleDragEnd);\n this.dragging = dragging;\n this.emitter = new core.EmitterMixin();\n }\n // sets initialHit\n // sets coordAdjust\n HitDragging.prototype.processFirstCoord = function (ev) {\n var origPoint = { left: ev.pageX, top: ev.pageY };\n var adjustedPoint = origPoint;\n var subjectEl = ev.subjectEl;\n var subjectRect;\n if (subjectEl !== document) {\n subjectRect = core.computeRect(subjectEl);\n adjustedPoint = core.constrainPoint(adjustedPoint, subjectRect);\n }\n var initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);\n if (initialHit) {\n if (this.useSubjectCenter && subjectRect) {\n var slicedSubjectRect = core.intersectRects(subjectRect, initialHit.rect);\n if (slicedSubjectRect) {\n adjustedPoint = core.getRectCenter(slicedSubjectRect);\n }\n }\n this.coordAdjust = core.diffPoints(adjustedPoint, origPoint);\n }\n else {\n this.coordAdjust = { left: 0, top: 0 };\n }\n };\n HitDragging.prototype.handleMove = function (ev, forceHandle) {\n var hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);\n if (forceHandle || !isHitsEqual(this.movingHit, hit)) {\n this.movingHit = hit;\n this.emitter.trigger('hitupdate', hit, false, ev);\n }\n };\n HitDragging.prototype.prepareHits = function () {\n this.offsetTrackers = core.mapHash(this.droppableStore, function (interactionSettings) {\n return new OffsetTracker(interactionSettings.el);\n });\n };\n HitDragging.prototype.releaseHits = function () {\n var offsetTrackers = this.offsetTrackers;\n for (var id in offsetTrackers) {\n offsetTrackers[id].destroy();\n }\n this.offsetTrackers = {};\n };\n HitDragging.prototype.queryHitForOffset = function (offsetLeft, offsetTop) {\n var _a = this, droppableStore = _a.droppableStore, offsetTrackers = _a.offsetTrackers;\n var bestHit = null;\n for (var id in droppableStore) {\n var component = droppableStore[id].component;\n var offsetTracker = offsetTrackers[id];\n if (offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {\n var originLeft = offsetTracker.computeLeft();\n var originTop = offsetTracker.computeTop();\n var positionLeft = offsetLeft - originLeft;\n var positionTop = offsetTop - originTop;\n var origRect = offsetTracker.origRect;\n var width = origRect.right - origRect.left;\n var height = origRect.bottom - origRect.top;\n if (\n // must be within the element's bounds\n positionLeft >= 0 && positionLeft < width &&\n positionTop >= 0 && positionTop < height) {\n var hit = component.queryHit(positionLeft, positionTop, width, height);\n if (hit &&\n (\n // make sure the hit is within activeRange, meaning it's not a deal cell\n !component.props.dateProfile || // hack for DayTile\n core.rangeContainsRange(component.props.dateProfile.activeRange, hit.dateSpan.range)) &&\n (!bestHit || hit.layer > bestHit.layer)) {\n // TODO: better way to re-orient rectangle\n hit.rect.left += originLeft;\n hit.rect.right += originLeft;\n hit.rect.top += originTop;\n hit.rect.bottom += originTop;\n bestHit = hit;\n }\n }\n }\n }\n return bestHit;\n };\n return HitDragging;\n }());\n function isHitsEqual(hit0, hit1) {\n if (!hit0 && !hit1) {\n return true;\n }\n if (Boolean(hit0) !== Boolean(hit1)) {\n return false;\n }\n return core.isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);\n }\n\n /*\n Monitors when the user clicks on a specific date/time of a component.\n A pointerdown+pointerup on the same \"hit\" constitutes a click.\n */\n var DateClicking = /** @class */ (function (_super) {\n __extends(DateClicking, _super);\n function DateClicking(settings) {\n var _this = _super.call(this, settings) || this;\n _this.handlePointerDown = function (ev) {\n var dragging = _this.dragging;\n // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired\n dragging.setIgnoreMove(!_this.component.isValidDateDownEl(dragging.pointer.downEl));\n };\n // won't even fire if moving was ignored\n _this.handleDragEnd = function (ev) {\n var component = _this.component;\n var pointer = _this.dragging.pointer;\n if (!pointer.wasTouchScroll) {\n var _a = _this.hitDragging, initialHit = _a.initialHit, finalHit = _a.finalHit;\n if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {\n component.calendar.triggerDateClick(initialHit.dateSpan, initialHit.dayEl, component.view, ev.origEvent);\n }\n }\n };\n var component = settings.component;\n // we DO want to watch pointer moves because otherwise finalHit won't get populated\n _this.dragging = new FeaturefulElementDragging(component.el);\n _this.dragging.autoScroller.isEnabled = false;\n var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings));\n hitDragging.emitter.on('pointerdown', _this.handlePointerDown);\n hitDragging.emitter.on('dragend', _this.handleDragEnd);\n return _this;\n }\n DateClicking.prototype.destroy = function () {\n this.dragging.destroy();\n };\n return DateClicking;\n }(core.Interaction));\n\n /*\n Tracks when the user selects a portion of time of a component,\n constituted by a drag over date cells, with a possible delay at the beginning of the drag.\n */\n var DateSelecting = /** @class */ (function (_super) {\n __extends(DateSelecting, _super);\n function DateSelecting(settings) {\n var _this = _super.call(this, settings) || this;\n _this.dragSelection = null;\n _this.handlePointerDown = function (ev) {\n var _a = _this, component = _a.component, dragging = _a.dragging;\n var canSelect = component.opt('selectable') &&\n component.isValidDateDownEl(ev.origEvent.target);\n // don't bother to watch expensive moves if component won't do selection\n dragging.setIgnoreMove(!canSelect);\n // if touch, require user to hold down\n dragging.delay = ev.isTouch ? getComponentTouchDelay(component) : null;\n };\n _this.handleDragStart = function (ev) {\n _this.component.calendar.unselect(ev); // unselect previous selections\n };\n _this.handleHitUpdate = function (hit, isFinal) {\n var calendar = _this.component.calendar;\n var dragSelection = null;\n var isInvalid = false;\n if (hit) {\n dragSelection = joinHitsIntoSelection(_this.hitDragging.initialHit, hit, calendar.pluginSystem.hooks.dateSelectionTransformers);\n if (!dragSelection || !_this.component.isDateSelectionValid(dragSelection)) {\n isInvalid = true;\n dragSelection = null;\n }\n }\n if (dragSelection) {\n calendar.dispatch({ type: 'SELECT_DATES', selection: dragSelection });\n }\n else if (!isFinal) { // only unselect if moved away while dragging\n calendar.dispatch({ type: 'UNSELECT_DATES' });\n }\n if (!isInvalid) {\n core.enableCursor();\n }\n else {\n core.disableCursor();\n }\n if (!isFinal) {\n _this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging\n }\n };\n _this.handlePointerUp = function (pev) {\n if (_this.dragSelection) {\n // selection is already rendered, so just need to report selection\n _this.component.calendar.triggerDateSelect(_this.dragSelection, pev);\n _this.dragSelection = null;\n }\n };\n var component = settings.component;\n var dragging = _this.dragging = new FeaturefulElementDragging(component.el);\n dragging.touchScrollAllowed = false;\n dragging.minDistance = component.opt('selectMinDistance') || 0;\n dragging.autoScroller.isEnabled = component.opt('dragScroll');\n var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings));\n hitDragging.emitter.on('pointerdown', _this.handlePointerDown);\n hitDragging.emitter.on('dragstart', _this.handleDragStart);\n hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);\n hitDragging.emitter.on('pointerup', _this.handlePointerUp);\n return _this;\n }\n DateSelecting.prototype.destroy = function () {\n this.dragging.destroy();\n };\n return DateSelecting;\n }(core.Interaction));\n function getComponentTouchDelay(component) {\n var delay = component.opt('selectLongPressDelay');\n if (delay == null) {\n delay = component.opt('longPressDelay');\n }\n return delay;\n }\n function joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {\n var dateSpan0 = hit0.dateSpan;\n var dateSpan1 = hit1.dateSpan;\n var ms = [\n dateSpan0.range.start,\n dateSpan0.range.end,\n dateSpan1.range.start,\n dateSpan1.range.end\n ];\n ms.sort(core.compareNumbers);\n var props = {};\n for (var _i = 0, dateSelectionTransformers_1 = dateSelectionTransformers; _i < dateSelectionTransformers_1.length; _i++) {\n var transformer = dateSelectionTransformers_1[_i];\n var res = transformer(hit0, hit1);\n if (res === false) {\n return null;\n }\n else if (res) {\n __assign(props, res);\n }\n }\n props.range = { start: ms[0], end: ms[3] };\n props.allDay = dateSpan0.allDay;\n return props;\n }\n\n var EventDragging = /** @class */ (function (_super) {\n __extends(EventDragging, _super);\n function EventDragging(settings) {\n var _this = _super.call(this, settings) || this;\n // internal state\n _this.subjectSeg = null; // the seg being selected/dragged\n _this.isDragging = false;\n _this.eventRange = null;\n _this.relevantEvents = null; // the events being dragged\n _this.receivingCalendar = null;\n _this.validMutation = null;\n _this.mutatedRelevantEvents = null;\n _this.handlePointerDown = function (ev) {\n var origTarget = ev.origEvent.target;\n var _a = _this, component = _a.component, dragging = _a.dragging;\n var mirror = dragging.mirror;\n var initialCalendar = component.calendar;\n var subjectSeg = _this.subjectSeg = core.getElSeg(ev.subjectEl);\n var eventRange = _this.eventRange = subjectSeg.eventRange;\n var eventInstanceId = eventRange.instance.instanceId;\n _this.relevantEvents = core.getRelevantEvents(initialCalendar.state.eventStore, eventInstanceId);\n dragging.minDistance = ev.isTouch ? 0 : component.opt('eventDragMinDistance');\n dragging.delay =\n // only do a touch delay if touch and this event hasn't been selected yet\n (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?\n getComponentTouchDelay$1(component) :\n null;\n mirror.parentNode = initialCalendar.el;\n mirror.revertDuration = component.opt('dragRevertDuration');\n var isValid = component.isValidSegDownEl(origTarget) &&\n !core.elementClosest(origTarget, '.fc-resizer');\n dragging.setIgnoreMove(!isValid);\n // disable dragging for elements that are resizable (ie, selectable)\n // but are not draggable\n _this.isDragging = isValid &&\n ev.subjectEl.classList.contains('fc-draggable');\n };\n _this.handleDragStart = function (ev) {\n var initialCalendar = _this.component.calendar;\n var eventRange = _this.eventRange;\n var eventInstanceId = eventRange.instance.instanceId;\n if (ev.isTouch) {\n // need to select a different event?\n if (eventInstanceId !== _this.component.props.eventSelection) {\n initialCalendar.dispatch({ type: 'SELECT_EVENT', eventInstanceId: eventInstanceId });\n }\n }\n else {\n // if now using mouse, but was previous touch interaction, clear selected event\n initialCalendar.dispatch({ type: 'UNSELECT_EVENT' });\n }\n if (_this.isDragging) {\n initialCalendar.unselect(ev); // unselect *date* selection\n initialCalendar.publiclyTrigger('eventDragStart', [\n {\n el: _this.subjectSeg.el,\n event: new core.EventApi(initialCalendar, eventRange.def, eventRange.instance),\n jsEvent: ev.origEvent,\n view: _this.component.view\n }\n ]);\n }\n };\n _this.handleHitUpdate = function (hit, isFinal) {\n if (!_this.isDragging) {\n return;\n }\n var relevantEvents = _this.relevantEvents;\n var initialHit = _this.hitDragging.initialHit;\n var initialCalendar = _this.component.calendar;\n // states based on new hit\n var receivingCalendar = null;\n var mutation = null;\n var mutatedRelevantEvents = null;\n var isInvalid = false;\n var interaction = {\n affectedEvents: relevantEvents,\n mutatedEvents: core.createEmptyEventStore(),\n isEvent: true,\n origSeg: _this.subjectSeg\n };\n if (hit) {\n var receivingComponent = hit.component;\n receivingCalendar = receivingComponent.calendar;\n if (initialCalendar === receivingCalendar ||\n receivingComponent.opt('editable') && receivingComponent.opt('droppable')) {\n mutation = computeEventMutation(initialHit, hit, receivingCalendar.pluginSystem.hooks.eventDragMutationMassagers);\n if (mutation) {\n mutatedRelevantEvents = core.applyMutationToEventStore(relevantEvents, receivingCalendar.eventUiBases, mutation, receivingCalendar);\n interaction.mutatedEvents = mutatedRelevantEvents;\n if (!receivingComponent.isInteractionValid(interaction)) {\n isInvalid = true;\n mutation = null;\n mutatedRelevantEvents = null;\n interaction.mutatedEvents = core.createEmptyEventStore();\n }\n }\n }\n else {\n receivingCalendar = null;\n }\n }\n _this.displayDrag(receivingCalendar, interaction);\n if (!isInvalid) {\n core.enableCursor();\n }\n else {\n core.disableCursor();\n }\n if (!isFinal) {\n if (initialCalendar === receivingCalendar && // TODO: write test for this\n isHitsEqual(initialHit, hit)) {\n mutation = null;\n }\n _this.dragging.setMirrorNeedsRevert(!mutation);\n // render the mirror if no already-rendered mirror\n // TODO: wish we could somehow wait for dispatch to guarantee render\n _this.dragging.setMirrorIsVisible(!hit || !document.querySelector('.fc-mirror'));\n // assign states based on new hit\n _this.receivingCalendar = receivingCalendar;\n _this.validMutation = mutation;\n _this.mutatedRelevantEvents = mutatedRelevantEvents;\n }\n };\n _this.handlePointerUp = function () {\n if (!_this.isDragging) {\n _this.cleanup(); // because handleDragEnd won't fire\n }\n };\n _this.handleDragEnd = function (ev) {\n if (_this.isDragging) {\n var initialCalendar_1 = _this.component.calendar;\n var initialView = _this.component.view;\n var receivingCalendar = _this.receivingCalendar;\n var eventDef = _this.eventRange.def;\n var eventInstance = _this.eventRange.instance;\n var eventApi = new core.EventApi(initialCalendar_1, eventDef, eventInstance);\n var relevantEvents_1 = _this.relevantEvents;\n var mutatedRelevantEvents = _this.mutatedRelevantEvents;\n var finalHit = _this.hitDragging.finalHit;\n _this.clearDrag(); // must happen after revert animation\n initialCalendar_1.publiclyTrigger('eventDragStop', [\n {\n el: _this.subjectSeg.el,\n event: eventApi,\n jsEvent: ev.origEvent,\n view: initialView\n }\n ]);\n if (_this.validMutation) {\n // dropped within same calendar\n if (receivingCalendar === initialCalendar_1) {\n initialCalendar_1.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: mutatedRelevantEvents\n });\n var eventDropArg = {};\n for (var _i = 0, _a = initialCalendar_1.pluginSystem.hooks.eventDropTransformers; _i < _a.length; _i++) {\n var transformer = _a[_i];\n __assign(eventDropArg, transformer(_this.validMutation, initialCalendar_1));\n }\n __assign(eventDropArg, {\n el: ev.subjectEl,\n delta: _this.validMutation.startDelta,\n oldEvent: eventApi,\n event: new core.EventApi(// the data AFTER the mutation\n initialCalendar_1, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null),\n revert: function () {\n initialCalendar_1.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents_1\n });\n },\n jsEvent: ev.origEvent,\n view: initialView\n });\n initialCalendar_1.publiclyTrigger('eventDrop', [eventDropArg]);\n // dropped in different calendar\n }\n else if (receivingCalendar) {\n initialCalendar_1.publiclyTrigger('eventLeave', [\n {\n draggedEl: ev.subjectEl,\n event: eventApi,\n view: initialView\n }\n ]);\n initialCalendar_1.dispatch({\n type: 'REMOVE_EVENT_INSTANCES',\n instances: _this.mutatedRelevantEvents.instances\n });\n receivingCalendar.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: _this.mutatedRelevantEvents\n });\n if (ev.isTouch) {\n receivingCalendar.dispatch({\n type: 'SELECT_EVENT',\n eventInstanceId: eventInstance.instanceId\n });\n }\n var dropArg = receivingCalendar.buildDatePointApi(finalHit.dateSpan);\n dropArg.draggedEl = ev.subjectEl;\n dropArg.jsEvent = ev.origEvent;\n dropArg.view = finalHit.component; // ?\n receivingCalendar.publiclyTrigger('drop', [dropArg]);\n receivingCalendar.publiclyTrigger('eventReceive', [\n {\n draggedEl: ev.subjectEl,\n event: new core.EventApi(// the data AFTER the mutation\n receivingCalendar, mutatedRelevantEvents.defs[eventDef.defId], mutatedRelevantEvents.instances[eventInstance.instanceId]),\n view: finalHit.component\n }\n ]);\n }\n }\n else {\n initialCalendar_1.publiclyTrigger('_noEventDrop');\n }\n }\n _this.cleanup();\n };\n var component = _this.component;\n var dragging = _this.dragging = new FeaturefulElementDragging(component.el);\n dragging.pointer.selector = EventDragging.SELECTOR;\n dragging.touchScrollAllowed = false;\n dragging.autoScroller.isEnabled = component.opt('dragScroll');\n var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsStore);\n hitDragging.useSubjectCenter = settings.useEventCenter;\n hitDragging.emitter.on('pointerdown', _this.handlePointerDown);\n hitDragging.emitter.on('dragstart', _this.handleDragStart);\n hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);\n hitDragging.emitter.on('pointerup', _this.handlePointerUp);\n hitDragging.emitter.on('dragend', _this.handleDragEnd);\n return _this;\n }\n EventDragging.prototype.destroy = function () {\n this.dragging.destroy();\n };\n // render a drag state on the next receivingCalendar\n EventDragging.prototype.displayDrag = function (nextCalendar, state) {\n var initialCalendar = this.component.calendar;\n var prevCalendar = this.receivingCalendar;\n // does the previous calendar need to be cleared?\n if (prevCalendar && prevCalendar !== nextCalendar) {\n // does the initial calendar need to be cleared?\n // if so, don't clear all the way. we still need to to hide the affectedEvents\n if (prevCalendar === initialCalendar) {\n prevCalendar.dispatch({\n type: 'SET_EVENT_DRAG',\n state: {\n affectedEvents: state.affectedEvents,\n mutatedEvents: core.createEmptyEventStore(),\n isEvent: true,\n origSeg: state.origSeg\n }\n });\n // completely clear the old calendar if it wasn't the initial\n }\n else {\n prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n }\n if (nextCalendar) {\n nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });\n }\n };\n EventDragging.prototype.clearDrag = function () {\n var initialCalendar = this.component.calendar;\n var receivingCalendar = this.receivingCalendar;\n if (receivingCalendar) {\n receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n // the initial calendar might have an dummy drag state from displayDrag\n if (initialCalendar !== receivingCalendar) {\n initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n };\n EventDragging.prototype.cleanup = function () {\n this.subjectSeg = null;\n this.isDragging = false;\n this.eventRange = null;\n this.relevantEvents = null;\n this.receivingCalendar = null;\n this.validMutation = null;\n this.mutatedRelevantEvents = null;\n };\n EventDragging.SELECTOR = '.fc-draggable, .fc-resizable'; // TODO: test this in IE11\n return EventDragging;\n }(core.Interaction));\n function computeEventMutation(hit0, hit1, massagers) {\n var dateSpan0 = hit0.dateSpan;\n var dateSpan1 = hit1.dateSpan;\n var date0 = dateSpan0.range.start;\n var date1 = dateSpan1.range.start;\n var standardProps = {};\n if (dateSpan0.allDay !== dateSpan1.allDay) {\n standardProps.allDay = dateSpan1.allDay;\n standardProps.hasEnd = hit1.component.opt('allDayMaintainDuration');\n if (dateSpan1.allDay) {\n // means date1 is already start-of-day,\n // but date0 needs to be converted\n date0 = core.startOfDay(date0);\n }\n }\n var delta = core.diffDates(date0, date1, hit0.component.dateEnv, hit0.component === hit1.component ?\n hit0.component.largeUnit :\n null);\n if (delta.milliseconds) { // has hours/minutes/seconds\n standardProps.allDay = false;\n }\n var mutation = {\n startDelta: delta,\n endDelta: delta,\n standardProps: standardProps\n };\n for (var _i = 0, massagers_1 = massagers; _i < massagers_1.length; _i++) {\n var massager = massagers_1[_i];\n massager(mutation, hit0, hit1);\n }\n return mutation;\n }\n function getComponentTouchDelay$1(component) {\n var delay = component.opt('eventLongPressDelay');\n if (delay == null) {\n delay = component.opt('longPressDelay');\n }\n return delay;\n }\n\n var EventDragging$1 = /** @class */ (function (_super) {\n __extends(EventDragging, _super);\n function EventDragging(settings) {\n var _this = _super.call(this, settings) || this;\n // internal state\n _this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?\n _this.eventRange = null;\n _this.relevantEvents = null;\n _this.validMutation = null;\n _this.mutatedRelevantEvents = null;\n _this.handlePointerDown = function (ev) {\n var component = _this.component;\n var seg = _this.querySeg(ev);\n var eventRange = _this.eventRange = seg.eventRange;\n _this.dragging.minDistance = component.opt('eventDragMinDistance');\n // if touch, need to be working with a selected event\n _this.dragging.setIgnoreMove(!_this.component.isValidSegDownEl(ev.origEvent.target) ||\n (ev.isTouch && _this.component.props.eventSelection !== eventRange.instance.instanceId));\n };\n _this.handleDragStart = function (ev) {\n var calendar = _this.component.calendar;\n var eventRange = _this.eventRange;\n _this.relevantEvents = core.getRelevantEvents(calendar.state.eventStore, _this.eventRange.instance.instanceId);\n _this.draggingSeg = _this.querySeg(ev);\n calendar.unselect();\n calendar.publiclyTrigger('eventResizeStart', [\n {\n el: _this.draggingSeg.el,\n event: new core.EventApi(calendar, eventRange.def, eventRange.instance),\n jsEvent: ev.origEvent,\n view: _this.component.view\n }\n ]);\n };\n _this.handleHitUpdate = function (hit, isFinal, ev) {\n var calendar = _this.component.calendar;\n var relevantEvents = _this.relevantEvents;\n var initialHit = _this.hitDragging.initialHit;\n var eventInstance = _this.eventRange.instance;\n var mutation = null;\n var mutatedRelevantEvents = null;\n var isInvalid = false;\n var interaction = {\n affectedEvents: relevantEvents,\n mutatedEvents: core.createEmptyEventStore(),\n isEvent: true,\n origSeg: _this.draggingSeg\n };\n if (hit) {\n mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-start-resizer'), eventInstance.range, calendar.pluginSystem.hooks.eventResizeJoinTransforms);\n }\n if (mutation) {\n mutatedRelevantEvents = core.applyMutationToEventStore(relevantEvents, calendar.eventUiBases, mutation, calendar);\n interaction.mutatedEvents = mutatedRelevantEvents;\n if (!_this.component.isInteractionValid(interaction)) {\n isInvalid = true;\n mutation = null;\n mutatedRelevantEvents = null;\n interaction.mutatedEvents = null;\n }\n }\n if (mutatedRelevantEvents) {\n calendar.dispatch({\n type: 'SET_EVENT_RESIZE',\n state: interaction\n });\n }\n else {\n calendar.dispatch({ type: 'UNSET_EVENT_RESIZE' });\n }\n if (!isInvalid) {\n core.enableCursor();\n }\n else {\n core.disableCursor();\n }\n if (!isFinal) {\n if (mutation && isHitsEqual(initialHit, hit)) {\n mutation = null;\n }\n _this.validMutation = mutation;\n _this.mutatedRelevantEvents = mutatedRelevantEvents;\n }\n };\n _this.handleDragEnd = function (ev) {\n var calendar = _this.component.calendar;\n var view = _this.component.view;\n var eventDef = _this.eventRange.def;\n var eventInstance = _this.eventRange.instance;\n var eventApi = new core.EventApi(calendar, eventDef, eventInstance);\n var relevantEvents = _this.relevantEvents;\n var mutatedRelevantEvents = _this.mutatedRelevantEvents;\n calendar.publiclyTrigger('eventResizeStop', [\n {\n el: _this.draggingSeg.el,\n event: eventApi,\n jsEvent: ev.origEvent,\n view: view\n }\n ]);\n if (_this.validMutation) {\n calendar.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: mutatedRelevantEvents\n });\n calendar.publiclyTrigger('eventResize', [\n {\n el: _this.draggingSeg.el,\n startDelta: _this.validMutation.startDelta || core.createDuration(0),\n endDelta: _this.validMutation.endDelta || core.createDuration(0),\n prevEvent: eventApi,\n event: new core.EventApi(// the data AFTER the mutation\n calendar, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null),\n revert: function () {\n calendar.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: relevantEvents\n });\n },\n jsEvent: ev.origEvent,\n view: view\n }\n ]);\n }\n else {\n calendar.publiclyTrigger('_noEventResize');\n }\n // reset all internal state\n _this.draggingSeg = null;\n _this.relevantEvents = null;\n _this.validMutation = null;\n // okay to keep eventInstance around. useful to set it in handlePointerDown\n };\n var component = settings.component;\n var dragging = _this.dragging = new FeaturefulElementDragging(component.el);\n dragging.pointer.selector = '.fc-resizer';\n dragging.touchScrollAllowed = false;\n dragging.autoScroller.isEnabled = component.opt('dragScroll');\n var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings));\n hitDragging.emitter.on('pointerdown', _this.handlePointerDown);\n hitDragging.emitter.on('dragstart', _this.handleDragStart);\n hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);\n hitDragging.emitter.on('dragend', _this.handleDragEnd);\n return _this;\n }\n EventDragging.prototype.destroy = function () {\n this.dragging.destroy();\n };\n EventDragging.prototype.querySeg = function (ev) {\n return core.getElSeg(core.elementClosest(ev.subjectEl, this.component.fgSegSelector));\n };\n return EventDragging;\n }(core.Interaction));\n function computeMutation(hit0, hit1, isFromStart, instanceRange, transforms) {\n var dateEnv = hit0.component.dateEnv;\n var date0 = hit0.dateSpan.range.start;\n var date1 = hit1.dateSpan.range.start;\n var delta = core.diffDates(date0, date1, dateEnv, hit0.component.largeUnit);\n var props = {};\n for (var _i = 0, transforms_1 = transforms; _i < transforms_1.length; _i++) {\n var transform = transforms_1[_i];\n var res = transform(hit0, hit1);\n if (res === false) {\n return null;\n }\n else if (res) {\n __assign(props, res);\n }\n }\n if (isFromStart) {\n if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {\n props.startDelta = delta;\n return props;\n }\n }\n else {\n if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {\n props.endDelta = delta;\n return props;\n }\n }\n return null;\n }\n\n var UnselectAuto = /** @class */ (function () {\n function UnselectAuto(calendar) {\n var _this = this;\n this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system\n this.onSelect = function (selectInfo) {\n if (selectInfo.jsEvent) {\n _this.isRecentPointerDateSelect = true;\n }\n };\n this.onDocumentPointerUp = function (pev) {\n var _a = _this, calendar = _a.calendar, documentPointer = _a.documentPointer;\n var state = calendar.state;\n // touch-scrolling should never unfocus any type of selection\n if (!documentPointer.wasTouchScroll) {\n if (state.dateSelection && // an existing date selection?\n !_this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?\n ) {\n var unselectAuto = calendar.viewOpt('unselectAuto');\n var unselectCancel = calendar.viewOpt('unselectCancel');\n if (unselectAuto && (!unselectAuto || !core.elementClosest(documentPointer.downEl, unselectCancel))) {\n calendar.unselect(pev);\n }\n }\n if (state.eventSelection && // an existing event selected?\n !core.elementClosest(documentPointer.downEl, EventDragging.SELECTOR) // interaction DIDN'T start on an event\n ) {\n calendar.dispatch({ type: 'UNSELECT_EVENT' });\n }\n }\n _this.isRecentPointerDateSelect = false;\n };\n this.calendar = calendar;\n var documentPointer = this.documentPointer = new PointerDragging(document);\n documentPointer.shouldIgnoreMove = true;\n documentPointer.shouldWatchScroll = false;\n documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);\n /*\n TODO: better way to know about whether there was a selection with the pointer\n */\n calendar.on('select', this.onSelect);\n }\n UnselectAuto.prototype.destroy = function () {\n this.calendar.off('select', this.onSelect);\n this.documentPointer.destroy();\n };\n return UnselectAuto;\n }());\n\n /*\n Given an already instantiated draggable object for one-or-more elements,\n Interprets any dragging as an attempt to drag an events that lives outside\n of a calendar onto a calendar.\n */\n var ExternalElementDragging = /** @class */ (function () {\n function ExternalElementDragging(dragging, suppliedDragMeta) {\n var _this = this;\n this.receivingCalendar = null;\n this.droppableEvent = null; // will exist for all drags, even if create:false\n this.suppliedDragMeta = null;\n this.dragMeta = null;\n this.handleDragStart = function (ev) {\n _this.dragMeta = _this.buildDragMeta(ev.subjectEl);\n };\n this.handleHitUpdate = function (hit, isFinal, ev) {\n var dragging = _this.hitDragging.dragging;\n var receivingCalendar = null;\n var droppableEvent = null;\n var isInvalid = false;\n var interaction = {\n affectedEvents: core.createEmptyEventStore(),\n mutatedEvents: core.createEmptyEventStore(),\n isEvent: _this.dragMeta.create,\n origSeg: null\n };\n if (hit) {\n receivingCalendar = hit.component.calendar;\n if (_this.canDropElOnCalendar(ev.subjectEl, receivingCalendar)) {\n droppableEvent = computeEventForDateSpan(hit.dateSpan, _this.dragMeta, receivingCalendar);\n interaction.mutatedEvents = core.eventTupleToStore(droppableEvent);\n isInvalid = !core.isInteractionValid(interaction, receivingCalendar);\n if (isInvalid) {\n interaction.mutatedEvents = core.createEmptyEventStore();\n droppableEvent = null;\n }\n }\n }\n _this.displayDrag(receivingCalendar, interaction);\n // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)\n // TODO: wish we could somehow wait for dispatch to guarantee render\n dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-mirror'));\n if (!isInvalid) {\n core.enableCursor();\n }\n else {\n core.disableCursor();\n }\n if (!isFinal) {\n dragging.setMirrorNeedsRevert(!droppableEvent);\n _this.receivingCalendar = receivingCalendar;\n _this.droppableEvent = droppableEvent;\n }\n };\n this.handleDragEnd = function (pev) {\n var _a = _this, receivingCalendar = _a.receivingCalendar, droppableEvent = _a.droppableEvent;\n _this.clearDrag();\n if (receivingCalendar && droppableEvent) {\n var finalHit = _this.hitDragging.finalHit;\n var finalView = finalHit.component.view;\n var dragMeta = _this.dragMeta;\n var arg = receivingCalendar.buildDatePointApi(finalHit.dateSpan);\n arg.draggedEl = pev.subjectEl;\n arg.jsEvent = pev.origEvent;\n arg.view = finalView;\n receivingCalendar.publiclyTrigger('drop', [arg]);\n if (dragMeta.create) {\n receivingCalendar.dispatch({\n type: 'MERGE_EVENTS',\n eventStore: core.eventTupleToStore(droppableEvent)\n });\n if (pev.isTouch) {\n receivingCalendar.dispatch({\n type: 'SELECT_EVENT',\n eventInstanceId: droppableEvent.instance.instanceId\n });\n }\n // signal that an external event landed\n receivingCalendar.publiclyTrigger('eventReceive', [\n {\n draggedEl: pev.subjectEl,\n event: new core.EventApi(receivingCalendar, droppableEvent.def, droppableEvent.instance),\n view: finalView\n }\n ]);\n }\n }\n _this.receivingCalendar = null;\n _this.droppableEvent = null;\n };\n var hitDragging = this.hitDragging = new HitDragging(dragging, core.interactionSettingsStore);\n hitDragging.requireInitial = false; // will start outside of a component\n hitDragging.emitter.on('dragstart', this.handleDragStart);\n hitDragging.emitter.on('hitupdate', this.handleHitUpdate);\n hitDragging.emitter.on('dragend', this.handleDragEnd);\n this.suppliedDragMeta = suppliedDragMeta;\n }\n ExternalElementDragging.prototype.buildDragMeta = function (subjectEl) {\n if (typeof this.suppliedDragMeta === 'object') {\n return core.parseDragMeta(this.suppliedDragMeta);\n }\n else if (typeof this.suppliedDragMeta === 'function') {\n return core.parseDragMeta(this.suppliedDragMeta(subjectEl));\n }\n else {\n return getDragMetaFromEl(subjectEl);\n }\n };\n ExternalElementDragging.prototype.displayDrag = function (nextCalendar, state) {\n var prevCalendar = this.receivingCalendar;\n if (prevCalendar && prevCalendar !== nextCalendar) {\n prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n if (nextCalendar) {\n nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });\n }\n };\n ExternalElementDragging.prototype.clearDrag = function () {\n if (this.receivingCalendar) {\n this.receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });\n }\n };\n ExternalElementDragging.prototype.canDropElOnCalendar = function (el, receivingCalendar) {\n var dropAccept = receivingCalendar.opt('dropAccept');\n if (typeof dropAccept === 'function') {\n return dropAccept(el);\n }\n else if (typeof dropAccept === 'string' && dropAccept) {\n return Boolean(core.elementMatches(el, dropAccept));\n }\n return true;\n };\n return ExternalElementDragging;\n }());\n // Utils for computing event store from the DragMeta\n // ----------------------------------------------------------------------------------------------------\n function computeEventForDateSpan(dateSpan, dragMeta, calendar) {\n var defProps = __assign({}, dragMeta.leftoverProps);\n for (var _i = 0, _a = calendar.pluginSystem.hooks.externalDefTransforms; _i < _a.length; _i++) {\n var transform = _a[_i];\n __assign(defProps, transform(dateSpan, dragMeta));\n }\n var def = core.parseEventDef(defProps, dragMeta.sourceId, dateSpan.allDay, calendar.opt('forceEventDuration') || Boolean(dragMeta.duration), // hasEnd\n calendar);\n var start = dateSpan.range.start;\n // only rely on time info if drop zone is all-day,\n // otherwise, we already know the time\n if (dateSpan.allDay && dragMeta.startTime) {\n start = calendar.dateEnv.add(start, dragMeta.startTime);\n }\n var end = dragMeta.duration ?\n calendar.dateEnv.add(start, dragMeta.duration) :\n calendar.getDefaultEventEnd(dateSpan.allDay, start);\n var instance = core.createEventInstance(def.defId, { start: start, end: end });\n return { def: def, instance: instance };\n }\n // Utils for extracting data from element\n // ----------------------------------------------------------------------------------------------------\n function getDragMetaFromEl(el) {\n var str = getEmbeddedElData(el, 'event');\n var obj = str ?\n JSON.parse(str) :\n { create: false }; // if no embedded data, assume no event creation\n return core.parseDragMeta(obj);\n }\n core.config.dataAttrPrefix = '';\n function getEmbeddedElData(el, name) {\n var prefix = core.config.dataAttrPrefix;\n var prefixedName = (prefix ? prefix + '-' : '') + name;\n return el.getAttribute('data-' + prefixedName) || '';\n }\n\n /*\n Makes an element (that is *external* to any calendar) draggable.\n Can pass in data that determines how an event will be created when dropped onto a calendar.\n Leverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.\n */\n var ExternalDraggable = /** @class */ (function () {\n function ExternalDraggable(el, settings) {\n var _this = this;\n if (settings === void 0) { settings = {}; }\n this.handlePointerDown = function (ev) {\n var dragging = _this.dragging;\n var _a = _this.settings, minDistance = _a.minDistance, longPressDelay = _a.longPressDelay;\n dragging.minDistance =\n minDistance != null ?\n minDistance :\n (ev.isTouch ? 0 : core.globalDefaults.eventDragMinDistance);\n dragging.delay =\n ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv\n (longPressDelay != null ? longPressDelay : core.globalDefaults.longPressDelay) :\n 0;\n };\n this.handleDragStart = function (ev) {\n if (ev.isTouch &&\n _this.dragging.delay &&\n ev.subjectEl.classList.contains('fc-event')) {\n _this.dragging.mirror.getMirrorEl().classList.add('fc-selected');\n }\n };\n this.settings = settings;\n var dragging = this.dragging = new FeaturefulElementDragging(el);\n dragging.touchScrollAllowed = false;\n if (settings.itemSelector != null) {\n dragging.pointer.selector = settings.itemSelector;\n }\n if (settings.appendTo != null) {\n dragging.mirror.parentNode = settings.appendTo; // TODO: write tests\n }\n dragging.emitter.on('pointerdown', this.handlePointerDown);\n dragging.emitter.on('dragstart', this.handleDragStart);\n new ExternalElementDragging(dragging, settings.eventData);\n }\n ExternalDraggable.prototype.destroy = function () {\n this.dragging.destroy();\n };\n return ExternalDraggable;\n }());\n\n /*\n Detects when a *THIRD-PARTY* drag-n-drop system interacts with elements.\n The third-party system is responsible for drawing the visuals effects of the drag.\n This class simply monitors for pointer movements and fires events.\n It also has the ability to hide the moving element (the \"mirror\") during the drag.\n */\n var InferredElementDragging = /** @class */ (function (_super) {\n __extends(InferredElementDragging, _super);\n function InferredElementDragging(containerEl) {\n var _this = _super.call(this, containerEl) || this;\n _this.shouldIgnoreMove = false;\n _this.mirrorSelector = '';\n _this.currentMirrorEl = null;\n _this.handlePointerDown = function (ev) {\n _this.emitter.trigger('pointerdown', ev);\n if (!_this.shouldIgnoreMove) {\n // fire dragstart right away. does not support delay or min-distance\n _this.emitter.trigger('dragstart', ev);\n }\n };\n _this.handlePointerMove = function (ev) {\n if (!_this.shouldIgnoreMove) {\n _this.emitter.trigger('dragmove', ev);\n }\n };\n _this.handlePointerUp = function (ev) {\n _this.emitter.trigger('pointerup', ev);\n if (!_this.shouldIgnoreMove) {\n // fire dragend right away. does not support a revert animation\n _this.emitter.trigger('dragend', ev);\n }\n };\n var pointer = _this.pointer = new PointerDragging(containerEl);\n pointer.emitter.on('pointerdown', _this.handlePointerDown);\n pointer.emitter.on('pointermove', _this.handlePointerMove);\n pointer.emitter.on('pointerup', _this.handlePointerUp);\n return _this;\n }\n InferredElementDragging.prototype.destroy = function () {\n this.pointer.destroy();\n };\n InferredElementDragging.prototype.setIgnoreMove = function (bool) {\n this.shouldIgnoreMove = bool;\n };\n InferredElementDragging.prototype.setMirrorIsVisible = function (bool) {\n if (bool) {\n // restore a previously hidden element.\n // use the reference in case the selector class has already been removed.\n if (this.currentMirrorEl) {\n this.currentMirrorEl.style.visibility = '';\n this.currentMirrorEl = null;\n }\n }\n else {\n var mirrorEl = this.mirrorSelector ?\n document.querySelector(this.mirrorSelector) :\n null;\n if (mirrorEl) {\n this.currentMirrorEl = mirrorEl;\n mirrorEl.style.visibility = 'hidden';\n }\n }\n };\n return InferredElementDragging;\n }(core.ElementDragging));\n\n /*\n Bridges third-party drag-n-drop systems with FullCalendar.\n Must be instantiated and destroyed by caller.\n */\n var ThirdPartyDraggable = /** @class */ (function () {\n function ThirdPartyDraggable(containerOrSettings, settings) {\n var containerEl = document;\n if (\n // wish we could just test instanceof EventTarget, but doesn't work in IE11\n containerOrSettings === document ||\n containerOrSettings instanceof Element) {\n containerEl = containerOrSettings;\n settings = settings || {};\n }\n else {\n settings = (containerOrSettings || {});\n }\n var dragging = this.dragging = new InferredElementDragging(containerEl);\n if (typeof settings.itemSelector === 'string') {\n dragging.pointer.selector = settings.itemSelector;\n }\n else if (containerEl === document) {\n dragging.pointer.selector = '[data-event]';\n }\n if (typeof settings.mirrorSelector === 'string') {\n dragging.mirrorSelector = settings.mirrorSelector;\n }\n new ExternalElementDragging(dragging, settings.eventData);\n }\n ThirdPartyDraggable.prototype.destroy = function () {\n this.dragging.destroy();\n };\n return ThirdPartyDraggable;\n }());\n\n var main = core.createPlugin({\n componentInteractions: [DateClicking, DateSelecting, EventDragging, EventDragging$1],\n calendarInteractions: [UnselectAuto],\n elementDraggingImpl: FeaturefulElementDragging\n });\n\n exports.Draggable = ExternalDraggable;\n exports.FeaturefulElementDragging = FeaturefulElementDragging;\n exports.PointerDragging = PointerDragging;\n exports.ThirdPartyDraggable = ThirdPartyDraggable;\n exports.default = main;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","import axios from 'axios'\n\nexport default class CarService {\n\n\tgetCarsSmall() {\n\t\treturn axios.get('assets/layout/data/cars-small.json').then(res => res.data.data);\n\t}\n\n\tgetCarsMedium() {\n\t\treturn axios.get('assets/layout/data/cars-medium.json').then(res => res.data.data);\n\t}\n\n\tgetCarsLarge() {\n\t\treturn axios.get('assets/layout/data/cars-large.json').then(res => res.data.data);\n\t}\n}"],"sourceRoot":""}