{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?466e","webpack:///./src/components/VisitBookingSearchForm.vue?d807","webpack:///./src/views/Home.vue?e24b","webpack:///./src/views/Home.vue?a229","webpack:///./src/views/GantryAccessQR.vue?f3cc","webpack:///./src/views/Help.vue?fef4","webpack:///./src/views/MyBookingDetails.vue?8410","webpack:///./src/views/ValidateOtp.vue?e003","webpack:///./src/views/SeatsAvailability.vue?f6b2","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/App.vue?19ee","webpack:///./src/components/BottomNavigationBar.vue?304d","webpack:///src/components/BottomNavigationBar.vue","webpack:///./src/components/BottomNavigationBar.vue?6fff","webpack:///./src/components/BottomNavigationBar.vue?cbd8","webpack:///./src/components/Loading.vue?1a68","webpack:///./src/helpers/animator.js","webpack:///src/components/Loading.vue","webpack:///./src/components/Loading.vue?fee3","webpack:///./src/components/Loading.vue","webpack:///./src/components/RippleResult.vue?29f2","webpack:///src/components/RippleResult.vue","webpack:///./src/components/RippleResult.vue?348c","webpack:///./src/components/RippleResult.vue","webpack:///./src/components/SystemDialog.vue?6b2c","webpack:///src/components/SystemDialog.vue","webpack:///./src/components/SystemDialog.vue?023f","webpack:///./src/components/SystemDialog.vue","webpack:///./src/helpers/geolocationHelper.js","webpack:///./src/components/SystemAlert.vue?302f","webpack:///src/components/SystemAlert.vue","webpack:///./src/components/SystemAlert.vue?c119","webpack:///./src/components/SystemAlert.vue","webpack:///./src/components/CheckIn.vue?d4f1","webpack:///./src/helpers/validators.js","webpack:///./src/helpers/urlHelper.js","webpack:///./src/helpers/constants.js","webpack:///./src/store/index.js","webpack:///./src/views/Home.vue?bbba","webpack:///./src/components/LoginIcon.vue?ea4f","webpack:///src/components/LoginIcon.vue","webpack:///./src/components/LoginIcon.vue?e36f","webpack:///./src/components/LoginIcon.vue?f2e3","webpack:///./src/components/InputPopupSelect.vue?5e66","webpack:///src/components/InputPopupSelect.vue","webpack:///./src/components/InputPopupSelect.vue?3b55","webpack:///./src/components/InputPopupSelect.vue","webpack:///./src/components/InputPopupSelectDate.vue?3f4e","webpack:///src/components/InputPopupSelectDate.vue","webpack:///./src/components/InputPopupSelectDate.vue?9aa5","webpack:///./src/components/InputPopupSelectDate.vue","webpack:///./src/components/VisitBookingSearchForm.vue?17d6","webpack:///./src/helpers/formatters.js","webpack:///./src/helpers/calculator.js","webpack:///src/components/VisitBookingSearchForm.vue","webpack:///./src/components/VisitBookingSearchForm.vue?868c","webpack:///./src/components/VisitBookingSearchForm.vue?eeac","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?231f","webpack:///./src/views/Home.vue?441e","webpack:///./src/views/SearchResults.vue?894d","webpack:///src/views/SearchResults.vue","webpack:///./src/views/SearchResults.vue?d2c6","webpack:///./src/views/SearchResults.vue","webpack:///./src/views/BookingDetails.vue?a62e","webpack:///./src/helpers/routerHelper.js","webpack:///./src/components/InputPopupSelectWithIcon.vue?deff","webpack:///src/components/InputPopupSelectWithIcon.vue","webpack:///./src/components/InputPopupSelectWithIcon.vue?7b60","webpack:///./src/components/InputPopupSelectWithIcon.vue","webpack:///src/views/BookingDetails.vue","webpack:///./src/views/BookingDetails.vue?ad7a","webpack:///./src/views/BookingDetails.vue?6f58","webpack:///./src/views/VisitBookingSearchResults.vue?1c12","webpack:///src/views/VisitBookingSearchResults.vue","webpack:///./src/views/VisitBookingSearchResults.vue?50e6","webpack:///./src/views/VisitBookingSearchResults.vue","webpack:///./src/views/VisitBookingDetails.vue?4e71","webpack:///src/views/VisitBookingDetails.vue","webpack:///./src/views/VisitBookingDetails.vue?9504","webpack:///./src/views/VisitBookingDetails.vue?61ab","webpack:///./src/views/MyBookings.vue?dcf5","webpack:///./src/components/MyBookingList.vue?70b6","webpack:///./src/components/NoItems.vue?750c","webpack:///src/components/NoItems.vue","webpack:///./src/components/NoItems.vue?e9c9","webpack:///./src/components/NoItems.vue","webpack:///src/components/MyBookingList.vue","webpack:///./src/components/MyBookingList.vue?2c3a","webpack:///./src/components/MyBookingList.vue?9d2f","webpack:///src/views/MyBookings.vue","webpack:///./src/views/MyBookings.vue?f9c8","webpack:///./src/views/MyBookings.vue","webpack:///./src/views/MyBookingDetails.vue?cf10","webpack:///src/views/MyBookingDetails.vue","webpack:///./src/views/MyBookingDetails.vue?c05f","webpack:///./src/views/MyBookingDetails.vue?ec8c","webpack:///./src/views/Account.vue?124c","webpack:///src/views/Account.vue","webpack:///./src/views/Account.vue?9491","webpack:///./src/views/Account.vue","webpack:///./src/views/Login.vue?4677","webpack:///src/views/Login.vue","webpack:///./src/views/Login.vue?9a50","webpack:///./src/views/Login.vue?be16","webpack:///./src/views/ViewMaps.vue?e0bc","webpack:///src/views/ViewMaps.vue","webpack:///./src/views/ViewMaps.vue?ed9f","webpack:///./src/views/ViewMaps.vue","webpack:///./src/views/ScanQRCode.vue?4312","webpack:///./src/components/QRCodeScanner.vue?4608","webpack:///./src/helpers/qrScannerWeb.js","webpack:///src/components/QRCodeScanner.vue","webpack:///./src/components/QRCodeScanner.vue?8609","webpack:///./src/components/QRCodeScanner.vue?7a7c","webpack:///src/views/ScanQRCode.vue","webpack:///./src/views/ScanQRCode.vue?8bab","webpack:///./src/views/ScanQRCode.vue","webpack:///./src/views/Help.vue?039c","webpack:///src/views/Help.vue","webpack:///./src/views/Help.vue?3347","webpack:///./src/views/Help.vue?00d6","webpack:///./src/views/OnsiteDetector.vue?3bbb","webpack:///src/views/OnsiteDetector.vue","webpack:///./src/views/OnsiteDetector.vue?38e5","webpack:///./src/views/OnsiteDetector.vue","webpack:///./src/views/LoginOptions.vue?0f14","webpack:///src/views/LoginOptions.vue","webpack:///./src/views/LoginOptions.vue?f6a0","webpack:///./src/views/LoginOptions.vue","webpack:///./src/views/EmailMobileLogin.vue?2863","webpack:///src/views/EmailMobileLogin.vue","webpack:///./src/views/EmailMobileLogin.vue?c5e2","webpack:///./src/views/EmailMobileLogin.vue?c97e","webpack:///./src/views/ValidateOtp.vue?4fc0","webpack:///src/views/ValidateOtp.vue","webpack:///./src/views/ValidateOtp.vue?feed","webpack:///./src/views/ValidateOtp.vue?fc27","webpack:///./src/views/GantryAccessQR.vue?088e","webpack:///src/views/GantryAccessQR.vue","webpack:///./src/views/GantryAccessQR.vue?87fe","webpack:///./src/views/GantryAccessQR.vue?efd9","webpack:///./src/views/SeatsAvailability.vue?2372","webpack:///./src/components/Accordion.vue?1f7e","webpack:///./src/components/SeatAvailabilityTable.vue?a1bd","webpack:///src/components/SeatAvailabilityTable.vue","webpack:///./src/components/SeatAvailabilityTable.vue?f4f2","webpack:///./src/components/SeatAvailabilityTable.vue?eb40","webpack:///src/components/Accordion.vue","webpack:///./src/components/Accordion.vue?5311","webpack:///./src/components/Accordion.vue?f445","webpack:///./src/components/UpdateTimer.vue?4aa8","webpack:///src/components/UpdateTimer.vue","webpack:///./src/components/UpdateTimer.vue?b746","webpack:///./src/components/UpdateTimer.vue","webpack:///src/views/SeatsAvailability.vue","webpack:///./src/views/SeatsAvailability.vue?8ecf","webpack:///./src/views/SeatsAvailability.vue?d16b","webpack:///./src/views/SeatsAvailabilities.vue?4a42","webpack:///src/views/SeatsAvailabilities.vue","webpack:///./src/views/SeatsAvailabilities.vue?3dd4","webpack:///./src/views/SeatsAvailabilities.vue?2c63","webpack:///./src/router/index.js","webpack:///./src/helpers/apiHelper.js","webpack:///./src/helpers/businessLogic.js","webpack:///src/components/CheckIn.vue","webpack:///./src/components/CheckIn.vue?a05d","webpack:///./src/components/CheckIn.vue?f933","webpack:///./src/components/ServiceNotAvailable.vue?9194","webpack:///src/components/ServiceNotAvailable.vue","webpack:///./src/components/ServiceNotAvailable.vue?f955","webpack:///./src/components/ServiceNotAvailable.vue?5dd4","webpack:///src/App.vue","webpack:///./src/App.vue?5b92","webpack:///./src/App.vue?8ba3","webpack:///./src/plugins/vuetify.js","webpack:///./src/mixins/global.js","webpack:///./src/main.js","webpack:///./src/views/GantryAccessQR.vue?e54e","webpack:///./src/views/BookingDetails.vue?1f0c","webpack:///./src/components/SeatAvailabilityTable.vue?326d","webpack:///./src/components/Accordion.vue?1dbc","webpack:///./src/views/Help.vue?5486","webpack:///./src/views/SeatsAvailabilities.vue?b384","webpack:///./src/components/QRCodeScanner.vue?daa2","webpack:///./src/components/LoginIcon.vue?ac23","webpack:///./src/components/BottomNavigationBar.vue?88d2","webpack:///./src/components/CheckIn.vue?c116","webpack:///./src/assets/images/mylibrary-logo.png","webpack:///./src/views/EmailMobileLogin.vue?456a","webpack:///./src/components/ServiceNotAvailable.vue?89c5","webpack:///./src/views/Login.vue?7a4c","webpack:///./src/components/MyBookingList.vue?1999","webpack:///./src/views/VisitBookingDetails.vue?080c"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","jsonpScriptSrc","p","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","map","webpackContext","req","id","webpackContextResolve","code","keys","_vm","this","_h","$createElement","_c","_self","attrs","transitionName","staticStyle","staticRenderFns","directives","rawName","expression","navBarActiveButton","on","$event","$router","_v","navQRCodeActiveButton","staticClass","iconPath","computed","component","VBottomNavigation","VBtn","VIcon","VImg","loading","_s","loadingIcon","changeColor","eleId","fromColor","toColor","duration","anime","targets","color","easing","rippleTransition","targetId","rippleId","scaleFrom","scaleTo","radialImage","centerPosition","hideRippleAfterComplete","completeCallback","getElementById","ripple","targetInfo","getBoundingClientRect","divSize","centerPoint","x","innerWidth","y","innerHeight","style","left","top","width","height","backgroundColor","backgroundImage","getComputedStyle","rippleColor","transform","zIndex","opacity","scale","complete","methods","startLoading","blackRadial","show","animator","watch","immediate","handler","newValue","setStatusBackgroundBarColor","notRevertStatusBarColor","setThemeColorByMode","class","success","onsiteMode","updateResult","domProps","title","Math","min","windowInfo","showResultMessage","radialColor","rippleExpand","selectedRadialColor","getScaleTo","ceil","max","scaleConstant","rippleShrink","internalShow","created","VToolbar","systemDialog","persistentDialog","model","callback","$$v","showDialog","_e","actions","actionType","noClicked","yesClicked","yes","label","okClicked","buttonLabel","checkboxDontShowAgain","updateSystemDialog","no","VCard","VCardActions","VCardText","VCardTitle","VDialog","VDivider","VSpacer","getCurrentGeolocationBrowser","updateGeolocationBrowser","navigator","geolocation","getCurrentPosition","position","getCurrentPositionSuccessCallback","getCurrentPositionErrorCallback","debug","ex","geolocationInfo","longitude","coords","latitude","accuracy","geoLocationError","PERMISSION_DENIED","POSITION_UNAVAILABLE","TIMEOUT","UNKNOWN_ERROR","isInRange","some","finalMinLong","minLong","longTol","finalMaxLong","maxLong","finalMinLat","minLat","latTol","finalMaxLat","maxLat","systemAlert","showAlert","slot","close","updateSystemAlert","VAlert","showCheckIn","canCheckInNowBooking","autoCheckInFailedBookingId","checkInButtonClicked","isToday","dateString","nowMoment","isSame","moment","isBetweenDate","startDateString","endDateString","sameOrAfter","isSameOrAfter","sameOrBefore","isSameOrBefore","checkDate","todayMoment","format","diff","canCancel","canCancelStatus","bookingEndTimeString","bookingTimeslotInMinutes","bookingEndTime","cancellatioEndTime","subtract","canCancelVisit","bookingStartTimeString","bookingStartTime","canCheckIn","canCheckInStatus","checkInStartTimeInMinutes","checkInEndTimeInMinutes","checkInStartTime","checkInEndTime","add","canExtend","canExtendStatus","extensionStartTimeInMinutes","extensionEndTimeInMinutes","extensionStartTime","extensionEndTime","isOnOpeningDaysOfWeek","openingDaysOfWeek","dateMoment","includes","day","isHoliday","holidays","branchCode","startTime","endTime","excludedBranches","isBranchOpenToday","convertQueryStringToObj","url","queryStringIndex","indexOf","queryStringUrl","substring","fromEntries","URLSearchParams","GetQueryStringObjFromUrl","newQueryStringObj","time","Date","now","getLocationInfoFromLocQueryString","locQueryString","locationPattern","locMatch","match","locationInfo","groups","placeCode","seatNo","addSeatCodeToLocationInfo","seatCode","validateAreaQrCode","qrCode","queryStringObj","loc","freeze","storageKey","keyPrefix","searchResults","selectedArea","preCasAuthState","selectedBooking","locationInfoQrCode","locationInfoGps","OffsiteMode","OnsiteModeGps","OnsiteModeQrCode","channelId","SMS","Email","accountType","EmailLoginUser","MobileLoginUser","defaultBranchName","Vue","use","Vuex","Store","plugins","createPersistedState","reducer","persistedState","stateFilter","assign","blackList","forEach","item","state","settings","accountInfo","showLoginPage","showNavBar","showQRCodeBar","otpTimerStartTime","otpTimer","timerInSeconds","progressPercentage","timerInterval","isLoading","locationInfoFromQrCode","locationInfoFromGps","locationInfoFromUrl","visitBookingSearchResult","qrCodeEntry","casAuthState","getters","authenticated","isEmailMobileLogin","visitBookingEnabled","gantryAccessQrEnabled","constants","initialized","branchId","locationTimeout","system","onsiteModeTimeoutInMinutes","diffMinutes","seatBranchMenus","menus","branchMenus","filter","areas","visitBranchMenus","bookingsEnabled","visitCapacity","currentBranchName","currentBranchCodeFromUrl","currentBranchCode","branchFound","find","toLowerCase","mutations","updateTime","payload","updateSettings","updateAccountInfo","updateShowLoginPage","updateShowNavBar","updateShowQRCodeBar","updateNavBarActiveButton","updateNavQRCodeActiveButton","updateShowCheckIn","updateLoading","updateQRCode","updateLocationInfoFromQrCode","updateLocationInfoFromGps","updateSearchResults","updateSelectedArea","updateSelectedBooking","updateVisitBookingSearchResult","updatePreCasAuthState","updateOtpTimer","updateOtpTimerStartTime","updateQrCodeValue","updateCasAuthState","updateLocationInfoFromUrl","showSeatBookingSearchForm","seatBookingUnavailableForEmaiMobileLogin","ref","inputPopupSelectBranch","selectedItem","inputPopupSelectArea","stopPropagation","clearArea","inputPopupSelectDate","formatDate","bookingStartDateString","bookingEndDateString","inputPopupSelectTime","timeList","inputPopupSelectDuration","durationList","reset","params","search","loginAuth","routeName","$route","apiHelper","casAuth","beforeRouteEnter","next","vm","maxWidth","select","$set","radioModel","_l","selectItem","closePopup","props","String","list","Array","Boolean","$emit","VRadio","VRadioGroup","VRow","allowedDates","Function","VDatePicker","inputPopupSelectPax","paxList","calendarAllowedDates","calendar","convertMinutesToHoursMinutes","minutes","hoursMinutes","abs","formatCurrentDate","formatTime","formatIsoTimeNow","formatIsoTimeToTime","isoTimeString","formatPeriod","fromDateString","toDateString","formatLocation","area","seat","floor","formatLocationShort","formatBookingStatus","isVisitBooking","bookingStatus","text","icon","toTodaysTime","timeMoment","hour","minute","clone","advanceBookingDays","bookingReleaseTimeString","momentNow","todaysBookingEndTime","bookingReleaseTimeRaw","bookingReleaseTime","advanceBookingEndTime","openingTimeMoment","lastBookingTimeMoment","isSameDate","todaysOpeningTimeMoment","minBookingMinutes","maxBookingMinutes","closingTimeMoment","selectedTimeMoment","todaysClosingTime","todaysSelectedTime","formatters","getVisitBookingTimeslotsAndDurations","openingHours","visitBookingTimeIntervalInMinutes","visitBookingDurationInMinutes","dwellMinutesOfTheDay","bookingDateMoment","timeslotsAndDurations","openingHoursOfTheDay","defaultOpeningHours","durationOfTheDayInMinutes","startTimeOfTheDayMoment","endTimeOftheDayMoment","durationInMinutes","timeslot","visitBookingCalendar","bookingStartDate","bookingEndDate","startOf","validators","lastTimeslotOfToday","getVistiBookingTimeslots","timeslots","visitBookingTimeList","visitBookingDurationList","selectedTimeslotAndDuration","visitBookingMaxPax","toString","components","InputPopupSelect","InputPopupSelectDate","selectedBranch","selectedPax","selectedDate","selectedTime","selectedDuration","calculator","branch","beforeRouteLeave","oldValue","isTodaySelected","VCol","VTextField","LoginIcon","VisitBookingSearchForm","lastBookingTime","areaDependentSettings","openingTime","closingTime","earliestOpeningTime","latestClosingTime","smallestBookingTimeslotInMinutes","smallestMinBookingMinutes","largestMaxBookingMinutes","$msg","notEligbleToBookSeat","updateBranchAndAreaInputs","setContentHeight","$refs","homeScrollable","contentHeight","timeNameList","invalidQrCodeTitle","invalidQrCodeMsg","to","from","replace","activated","$nextTick","visitBookingSearchForm","stopNavigation","VToolbarTitle","Resize","goBack","searchResponse","showBookingDetails","areaImagePath","areaImageUrls","areaName","formatAvailability","availableSeatsCount","totalSeatCount","searchResultsScrollable","customGoBack","branchName","areaInformation","directionalInfo","areaConstraints","ageAboveOrEqual","viewMaps","confirmBooking","confirmDialog","termsAndConditions","inputPopupSelectSeat","isPreferredSeatNotAvailable","selectedSeatName","preferredSeatNotAvailableMsg","modifiedAvailableSeatIds","book","verifyAuthRoute","authRouteName","store","commit","router","shouldDisplayIcon","InputPopupSelectWithIcon","noPreferredSeat","mapFileNames","areaMapUrls","resetSeat","availableSeats","hasAvailableWheelchairSeats","routerHelper","query","reloaded","goHome","preferSeatUnavailable","preferredSeat","bookingDetailsScrollable","VCardSubtitle","branchImagePath","branchImageUrls","availableVisitCapacity","visitCapacityOfTheTimeSlot","visitBooking","pax","tabs","mergedVisitAndSeatBookingsList","lastAction","bookings","booking","showSameDateOnlyOnce","viewBookingDetails","primaryColor","appearedDate","NoItems","arrayIndex","date","VContainer","tabNo","Number","mergedList","sort","myBookingsScrollable","VTab","VTabItem","VTabs","VTabsItems","bookingRefId","canCancelNow","confirmCancelBooking","windowSettings","disableExtension","canExtendNow","extend","InputPopupSelectCancelReason","visitBookingCancelReasons","cancelReasons","cancel","mapUrls","confirmCancel","myBookingDetailsScrollable","extendFail","msg","confirmLogout","visitBookingMonthlyCountsForNonNlbUser","quotas","cckpl","showCCKPLQuota","percentage","remainingQuotaInMinutes","studyArea","convertToViewModel","dailyBookingQuota","accountScrollable","yesCallback","VProgressCircular","isMobileOrStandaloneMode","showPassword","login","_m","iconClicked","returnUrl","mapTabs","imageStyle","viewMapsScrollable","deactivated","videoLoaded","startQRScanning","successCallback","dialog","videoLoadedCallback","tick","unableToAccessCameraMsg","cameraAccessDenied","video","readyState","HAVE_ENOUGH_DATA","qrCanvasElement","videoHeight","videoWidth","qrCanvas","drawImage","imageData","getImageData","codeData","jsQR","inversionAttempts","self","scannedQRCodeTime","getTime","scanQRTimeout","getCameraOptions","options","option","facingMode","mediaDevices","getUserMedia","audio","then","stream","srcObject","play","catch","getContext","cameraAccessDeniedFriendlyMessage","suggessIosSafari","test","enumerateDevices","devices","device","kind","deviceId","exact","log","stopQRScanning","pause","getVideoTracks","track","stop","toggleTouchLight","audioBeep","mockQr","beep","qrScannerWeb","Audio","volume","silentBeep","QRCodeScanner","leftCols","rightCols","planYourVisitLink","gotoOnsiteDetector","feedbackLink","helpScrollable","clickCount","clickTimer","statusBarColor","VList","VListItem","VListItemContent","VListItemGroup","onsiteDetected","JSON","stringify","startOnsiteDetection","onsiteDetectionTimer","geoRange","onsiteDetectedTemp","geolocationHelper","setInterval","endOnsiteDetection","clearInterval","parseJson","jsonStr","VTextarea","navigateToMyLibraryUsernameLogin","navigateToEmailMobileLogin","loginOptionsScrollable","navFromLoginOptions","getCurrentBranchName","preventDefault","isFormValidated","emailMobileRules","otpChannelValue","trim","requestOtp","triggerOtpTimer","businessLogic","otpChannelId","isValidEmail","set","auth","emailMobileLoginScrollable","otpCannelValue","RegExp","isOtpTimerRunning","VForm","navigateBackOrHome","otpInputRules","onFinish","otpInput","validateOtp","resendOtp","validateOtpScrollable","otp","localtriggerOtpTimer","VOtpInput","QrcodeVue","searchSeatAvailability","areaId","open","displaySlots","toggleOpen","index","activeIndex","seats","hasAvailableSlots","timer","formattedTimeNow","updateLastUpdatedTime","resetTimer","$settings","seatAvailRefreshIntervalInSeconds","dashboard","beforeDestroy","interval","mounted","refMsg","currentTime","VueRouter","routes","path","Home","beforeEnter","ScanQRCode","SearchResults","BookingDetails","VisitBookingSearchResults","VisitBookingDetails","ViewMaps","MyBookings","MyBookingDetails","Account","Help","OnsiteDetector","LoginOptions","EmailMobileLogin","ValidateOtp","GantryAccessQR","SeatsAvailabilities","SeatsAvailability","base","process","beforeResolve","noAuthRouteNames","noCheckInRouteNames","beforeEach","showServiceNotAvailablePage","redirect_uri","response","$NotFirstRouting","updateAccountStateAfterLogin","reload","loginFail","reloginRequired","logout","getAccountInfo","resultCommonResponseHandler","commonResponseHandler","fullPath","showNavBarPages","showQRCodeBarPages","afterEach","axiosClient","defaultOptions","baseURL","userApiBaseUrl","instance","axios","interceptors","config","withCredentials","errorRes","errorMessage","errorData","status","values","errors","detail","currentRouteName","random","response_type","client_id","scope","applicationId","casAuthUrl","endpoint","location","href","clientLoginUrl","getModeRaw","post","loginEnpoint","Mode","authorizationCode","afterLogoutCallback","otpLogoutEndpoint","logoutEnpoint","casLogout","service","logoutEndpoint","getAccountInfoEndpoint","checkIn","bookingId","autoCheckIn","silent","getMode","checkInEndpoint","BookingId","AutoCheckIn","extendEndpoint","cancelReasonCode","body","CancelReason","cancelVisitEndpoint","cancelEndpoint","patch","searchEndpoint","BranchId","AreaId","StartTime","DurationInMinutes","SelectedSeatCode","revertStatusBarColor","searchAvailableVisitCapacity","searchAvailableVisitCapacityEndpoint","bookEndpoint","SeatCode","bookVisit","bookVisitEndpoint","requestOtpEndpoint","otpLoginEndpoint","getGantryAccessQr","getGantryAccessQrEndpoint","storeMode","BranchCode","clearCache","im8Logout","reloginRequiredTitle","successMessage","alwaysCallback","errorCallback","hideResult","getLocationInfoFromQrCode","urlHelper","branchMenu","getDwellTimeMinutes","branchDwellTime","bookingDateString","dayOfWeek","weeklyMaxDwellMinutes","holidayMaxDwellMinutes","hitHoliday","timeDiffInSeconds","durationInSeconds","asSeconds","totalSeconds","isTrigger","timeDiff","latestTimerInSeconds","resetOtpTimer","resendOtpTimeIntervalInSeconds","showAutoCheckInFailedHandler","checkInFailedMsg","startTryAutoCheckIn","tryingAutoCheckIn","tryAutoCheckIn","getCanCheckInNowBooking","canCheckInBookings","showMessage","serviceNotAvailableMessage","serviceNotAvailable","onResize","count","transitions","activeBtn","allScreenHeights","detectingBranchWithGps","VApp","VMain","Vuetify","theme","dark","themes","light","accent","warning","customProperties","variations","cspNonce","appVersion","publicPath","audioPath","mapState","mapGetters","$vuetify","primary","mapMutations","haha","alert","mockDateString","obj","parse","isMobileDevice","uaParser","UAParser","getResult","isUnsupportedBrowser","browser","android","userAgent","isInStandaloneMode","matchMedia","matches","standalone","referrer","heights","screen","documentElement","clientHeight","toolbar","toolbarWithButtons","tabbar","headerbar","bottombar","noticeBarHeight","screenHeight","screenHeights","windowInnerHeight","windowScreenHeight","docClientHeight","docScrollHeight","scrollHeight","bottomNavigationHeight","themeColor","setPrimaryColor","secondary","metaThemeColor","getAttribute","content","history","go","a","clientWidth","productionTip","mixin","globalMixin","vuetify","render","h","App","$mount"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASY,EAAe5B,GACvB,OAAOyB,EAAoBI,EAAI,OAAS,CAAC,MAAQ,SAAS7B,IAAUA,GAAW,IAAM,CAAC,MAAQ,YAAYA,GAAW,MAItH,SAASyB,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU+B,QAGnC,IAAIC,EAASJ,EAAiB5B,GAAY,CACzCK,EAAGL,EACHiC,GAAG,EACHF,QAAS,IAUV,OANAjB,EAAQd,GAAUW,KAAKqB,EAAOD,QAASC,EAAQA,EAAOD,QAASL,GAG/DM,EAAOC,GAAI,EAGJD,EAAOD,QAKfL,EAAoBQ,EAAI,SAAuBjC,GAC9C,IAAIkC,EAAW,GAKXC,EAAqBxB,EAAgBX,GACzC,GAA0B,IAAvBmC,EAGF,GAAGA,EACFD,EAAStB,KAAKuB,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAIC,SAAQ,SAASC,EAASC,GAC3CJ,EAAqBxB,EAAgBX,GAAW,CAACsC,EAASC,MAE3DL,EAAStB,KAAKuB,EAAmB,GAAKC,GAGtC,IACII,EADAC,EAASC,SAASC,cAAc,UAGpCF,EAAOG,QAAU,QACjBH,EAAOI,QAAU,IACbpB,EAAoBqB,IACvBL,EAAOM,aAAa,QAAStB,EAAoBqB,IAElDL,EAAOO,IAAMpB,EAAe5B,GAG5B,IAAIiD,EAAQ,IAAIC,MAChBV,EAAmB,SAAUW,GAE5BV,EAAOW,QAAUX,EAAOY,OAAS,KACjCC,aAAaT,GACb,IAAIU,EAAQ5C,EAAgBX,GAC5B,GAAa,IAAVuD,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYL,IAAyB,SAAfA,EAAMM,KAAkB,UAAYN,EAAMM,MAChEC,EAAUP,GAASA,EAAMQ,QAAUR,EAAMQ,OAAOX,IACpDC,EAAMW,QAAU,iBAAmB5D,EAAU,cAAgBwD,EAAY,KAAOE,EAAU,IAC1FT,EAAMY,KAAO,iBACbZ,EAAMQ,KAAOD,EACbP,EAAMa,QAAUJ,EAChBH,EAAM,GAAGN,GAEVtC,EAAgBX,QAAW+D,IAG7B,IAAIlB,EAAUmB,YAAW,WACxBxB,EAAiB,CAAEiB,KAAM,UAAWE,OAAQlB,MAC1C,MACHA,EAAOW,QAAUX,EAAOY,OAASb,EACjCE,SAASuB,KAAKC,YAAYzB,GAG5B,OAAOJ,QAAQ8B,IAAIjC,IAIpBT,EAAoB2C,EAAIvD,EAGxBY,EAAoB4C,EAAI1C,EAGxBF,EAAoB6C,EAAI,SAASxC,EAAS+B,EAAMU,GAC3C9C,EAAoB+C,EAAE1C,EAAS+B,IAClCtD,OAAOkE,eAAe3C,EAAS+B,EAAM,CAAEa,YAAY,EAAMC,IAAKJ,KAKhE9C,EAAoBmD,EAAI,SAAS9C,GACX,qBAAX+C,QAA0BA,OAAOC,aAC1CvE,OAAOkE,eAAe3C,EAAS+C,OAAOC,YAAa,CAAEC,MAAO,WAE7DxE,OAAOkE,eAAe3C,EAAS,aAAc,CAAEiD,OAAO,KAQvDtD,EAAoBuD,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQtD,EAAoBsD,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK5E,OAAO6E,OAAO,MAGvB,GAFA3D,EAAoBmD,EAAEO,GACtB5E,OAAOkE,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOtD,EAAoB6C,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR1D,EAAoB8D,EAAI,SAASxD,GAChC,IAAIwC,EAASxC,GAAUA,EAAOmD,WAC7B,WAAwB,OAAOnD,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAN,EAAoB6C,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR9C,EAAoB+C,EAAI,SAASgB,EAAQC,GAAY,OAAOlF,OAAOC,UAAUC,eAAeC,KAAK8E,EAAQC,IAGzGhE,EAAoBI,EAAI,gBAGxBJ,EAAoBiE,GAAK,SAASC,GAA2B,MAApBC,QAAQ3C,MAAM0C,GAAYA,GAEnE,IAAIE,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAWjF,KAAK0E,KAAKO,GAC5CA,EAAWjF,KAAOf,EAClBgG,EAAaA,EAAWG,QACxB,IAAI,IAAI5F,EAAI,EAAGA,EAAIyF,EAAWvF,OAAQF,IAAKP,EAAqBgG,EAAWzF,IAC3E,IAAIU,EAAsBiF,EAI1B/E,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,6EC5NT,yBAAgf,EAAG,G,sFCAnf,yBAAgjB,EAAG,G,oCCAnjB,yBAA8hB,EAAG,G,4DCAjiB,yBAAsgB,EAAG,G,sFCAzgB,yBAAwiB,EAAG,G,6DCA3iB,yBAAsgB,EAAG,G,oCCAzgB,yBAA0iB,EAAG,G,oCCA7iB,yBAA6gB,EAAG,G,6DCAhhB,yBAA2iB,EAAG,G,qBCA9iB,IAAI+E,EAAM,CACT,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,QAAS,OACT,WAAY,OACZ,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,gBAAiB,OACjB,aAAc,OACd,gBAAiB,OACjB,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,WAAY,OACZ,cAAe,OACf,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,YAAa,OACb,eAAgB,OAChB,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,QAAS,OACT,WAAY,OACZ,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,QAAS,OACT,WAAY,OACZ,OAAQ,OACR,UAAW,OACX,QAAS,OACT,WAAY,OACZ,QAAS,OACT,aAAc,OACd,gBAAiB,OACjB,WAAY,OACZ,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,YAAa,OACb,eAAgB,OAChB,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,gBAAiB,OACjB,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,QAIf,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAO1E,EAAoB2E,GAE5B,SAASC,EAAsBF,GAC9B,IAAI1E,EAAoB+C,EAAEyB,EAAKE,GAAM,CACpC,IAAIlE,EAAI,IAAIiB,MAAM,uBAAyBiD,EAAM,KAEjD,MADAlE,EAAEqE,KAAO,mBACHrE,EAEP,OAAOgE,EAAIE,GAEZD,EAAeK,KAAO,WACrB,OAAOhG,OAAOgG,KAAKN,IAEpBC,EAAe5D,QAAU+D,EACzBtE,EAAOD,QAAUoE,EACjBA,EAAeE,GAAK,Q,4HCnShB,EAAS,WAAa,IAAII,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACA,EAAG,eAAgBJ,EAA+B,4BAAEI,EAAG,uBAAuB,CAACA,EAAG,WAAWA,EAAG,gBAAgBA,EAAG,gBAAgBA,EAAG,SAAS,CAACA,EAAG,aAAa,CAACE,MAAM,CAAC,KAAON,EAAIO,iBAAiB,CAACH,EAAG,aAAa,CAACA,EAAG,cAAc,CAACI,YAAY,CAAC,SAAW,QAAQ,MAAQ,QAAQ,OAAS,QAAQ,WAAa,YAAY,IAAI,IAAI,GAAGJ,EAAG,WAAWA,EAAG,yBAAyB,IAC/dK,EAAkB,G,gECDlB,EAAS,WAAa,IAAIT,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,qBAAqB,CAACF,EAAG,sBAAsB,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAc,WAAEY,WAAW,eAAeJ,YAAY,CAAC,OAAS,QAAQF,MAAM,CAAC,MAAQN,EAAIa,mBAAmB,MAAQ,GAAG,KAAO,GAAG,MAAQ,YAAY,CAACT,EAAG,QAAQ,CAACU,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIgB,QAAQ5G,KAAK,qBAAqB,kBAAmB,CAACgG,EAAG,OAAO,CAACJ,EAAIiB,GAAG,WAAWb,EAAG,SAAS,CAACJ,EAAIiB,GAAG,4BAA4B,GAAGb,EAAG,QAAQ,CAACU,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIgB,QAAQ5G,KAAK,KAAK,kBAAmB,CAACgG,EAAG,OAAO,CAACJ,EAAIiB,GAAG,SAASb,EAAG,SAAS,CAACJ,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,QAAQ,CAACU,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIgB,QAAQ5G,KAAK,eAAe,kBAAmB,CAACgG,EAAG,OAAO,CAACJ,EAAIiB,GAAG,iBAAiBb,EAAG,SAAS,CAACJ,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,QAAQ,CAACU,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIgB,QAAQ5G,KAAK,YAAY,kBAAmB,CAACgG,EAAG,OAAO,CAACJ,EAAIiB,GAAG,aAAab,EAAG,SAAS,CAACJ,EAAIiB,GAAG,yBAAyB,IAAI,GAAGb,EAAG,sBAAsB,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAiB,cAAEY,WAAW,kBAAkBJ,YAAY,CAAC,OAAS,QAAQF,MAAM,CAAC,MAAQN,EAAIkB,sBAAsB,MAAQ,GAAG,KAAO,GAAG,MAAQ,YAAY,CAACd,EAAG,OAAO,CAACe,YAAY,0BAA0B,CAACnB,EAAIiB,GAAG,2CAA2Cb,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAON,EAAIoB,SAAW,aAAc,aAAa,MAAM,YAAY,UAAU,IAAI,IAC38C,EAAkB,G,YCoEtB,GACE/D,KAAM,sBACNgE,SAAU,OAAZ,OAAY,CAAZ,GACA,8FCxEwZ,I,6FCQpZC,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,MAIa,EAAAA,EAAiB,QAQhC,IAAkBA,EAAW,CAACC,oBAAA,KAAkBC,OAAA,KAAKC,QAAA,KAAMC,OAAA,OC3B3D,IAAI,EAAS,WAAa,IAAI1B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAI2B,QAAY,KAAEf,WAAW,iBAAiBJ,YAAY,CAAC,UAAU,MAAM,CAACJ,EAAG,MAAM,CAACI,YAAY,CAAC,SAAW,QAAQ,gBAAgB,OAAOF,MAAM,CAAC,GAAK,cAAcF,EAAG,MAAM,CAACI,YAAY,CAAC,SAAW,QAAQ,gBAAgB,OAAOF,MAAM,CAAC,GAAK,cAAcF,EAAG,MAAM,CAACe,YAAY,gBAAgBX,YAAY,CAAC,aAAa,SAAS,UAAU,MAAM,CAACJ,EAAG,SAAS,CAACI,YAAY,CAAC,MAAQ,QAAQ,YAAY,SAAS,CAACR,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI6B,gBAAgBzB,EAAG,IAAI,CAACI,YAAY,CAAC,aAAa,SAAS,KAAO,QAAQ,OAAS,QAAQ,MAAQ,QAAQ,YAAY,SAAS,CAACR,EAAIiB,GAAG,gGAAgG,MAC7yB,EAAkB,G,YCCP,GACXa,YADW,SACCC,EAAOC,EAAWC,EAASC,GACnCC,eAAM,CACFC,QAAS,IAAML,EACfM,MAAO,CAACL,EAAWC,GACnBC,SAAUA,GAAY,IACtBI,OAAQ,iBAGhBC,iBATW,SAUPC,EACAC,EACAP,EACAQ,EACAC,EACAN,EACAO,EACAC,EACAC,EACAC,GACKN,IAEDA,EAAW,mBAGf,IAAItF,EAASjB,SAAS8G,eAAeR,GACjCS,EAAS/G,SAAS8G,eAAeP,GACjCS,EAAa/F,EAAOgG,wBAExB,GAAIN,EAAgB,CAChB,IAAIO,EAAU,GAEVC,EAAc,CACdC,GAAIhE,OAAOiE,WAAaH,GAAW,EACnCI,GAAIlE,OAAOmE,YAAcL,GAAW,GAGxCH,EAAOS,MAAMC,KAAON,EAAYC,EAAI,KACpCL,EAAOS,MAAME,IAAMP,EAAYG,EAAI,KACnCP,EAAOS,MAAMG,MAAQT,EAAU,KAC/BH,EAAOS,MAAMI,OAASV,EAAU,UAEhCH,EAAOS,MAAMC,KAAOT,EAAWS,KAAO,KACtCV,EAAOS,MAAME,IAAMV,EAAWU,IAAM,KACpCX,EAAOS,MAAMG,MAAQX,EAAWW,MAAQ,KACxCZ,EAAOS,MAAMI,OAASZ,EAAWY,OAAS,KAG9C,GAAIzB,EACAY,EAAOS,MAAMK,gBAAkB1B,EAC/BY,EAAOS,MAAMM,gBAAkB,UAE9B,GAAIpB,EACLK,EAAOS,MAAMM,gBAAkBpB,MAE9B,CACD,IAAImB,EAAkBE,iBAAiB9G,GAAQ4G,gBAC3C1B,EAAQ4B,iBAAiB9G,GAAQkF,MACjC6B,EACoB,qBAApBH,EAAyC1B,EAAQ0B,EACrDd,EAAOS,MAAMK,gBAAkBG,EAGnCjB,EAAOS,MAAMS,UAAY,SAAWzB,EAAY,IAChDO,EAAOS,MAAMU,OAAS,EACtBnB,EAAOS,MAAMW,QAAU,EAEvBlC,eAAM,CACFC,QAAS,IAAMK,EACf6B,MAAO3B,EACPT,SAAUA,EACVI,OAAQ,aACRiC,SAAU,WACFxB,GACAA,IAGAD,EACAX,eAAM,CACFC,QAAS,IAAMK,EACf4B,QAAS,EACTnC,SAAU,IACVI,OAAQ,SACRiC,SAAU,WACNtB,EAAOS,MAAMU,QAAU,KAK/BnB,EAAOS,MAAMU,OAAS,OCxE1C,GACE/G,KAAM,UACN/D,KAAM,WAAR,OACA,cACA,4CACM,4CACA,4CACA,4CACA,4CACA,4CACA,4CAEA,6CAYN,iBACA,UACM,UACA,UACA,UACA,UACA,UACA,UAEA,WAEN,OACA,yBACA,0BAEM,iBACN,sBACA,YAGM,WACN,UACA,gBAIA,oCAEE+H,SAAU,OAAZ,OAAY,CAAZ,GACA,6BAEEmD,QAAS,CACPC,aADJ,WAEM,IAAN,8CACMxE,KAAK4B,YAAc,sBACnB3F,SAAS8G,eAAe,YAAYU,MAAMM,gBAAkBU,EAC5DxI,SAAS8G,eAAe,YAAYU,MAAMM,gBAAkBU,EAE5DzE,KAAKgD,OAAO,IAEdA,OATJ,SASA,cACM,GAAKhD,KAAK0B,QAAQgD,KAAlB,CAIA,IAAN,EACA,2BACA,EACA,2BAEA,uBACA,0BACA,8BACA,4BACA,wCAEA,aACY,EAAZ,eACU,EAAV,+BACU,EAAV,cAIMC,EAASrC,iBACf,EACA,EACA,IACA,EACA,EACA,KACA,GACA,GACA,EACA,GAGM/E,YAAW,WACT,IAAR,EACA,oCACQ,EAAR,yBACA,QAGEqH,MAAO,CACL,eAAgB,CACdC,WAAW,EACXC,QAFN,SAEA,gBACYC,GACF/E,KAAKgF,4BAA4B,WACjChF,KAAKwE,gBAEAxE,KAAK0B,QAAQuD,0BAChBjF,KAAKkF,sBAGL3H,YAAW,WACT,EAAd,wBACA,UC5I4Y,ICOxY,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAKhC,IAAkB,EAAW,CAACiE,QAAA,OCvB9B,IAAI,EAAS,WAAa,IAAIzB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAgB,aAAEY,WAAW,iBAAiBwE,MAAM,CAAE,kBAAmBpF,EAAIrF,OAAOgK,MAAMnE,YAAY,CAAC,UAAU,IAAI,SAAW,QAAQ,OAAS,OAAO,MAAQ,SAAS,CAACJ,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAqB,kBAAEY,WAAW,sBAAsBO,YAAY,0BAA0BiE,MAAMpF,EAAIrF,OAAO0K,QAAWrF,EAAIsF,WAAa,iBAAmB,iBAAoB,mBAAmB9E,YAAY,CAAC,SAAW,QAAQ,OAAS,OAAO,MAAQ,SAAS,CAACJ,EAAG,YAAY,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAIrF,OAAc,QAAEiG,WAAW,mBAAmBO,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,cAAc,UAAY,MAAM,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIuF,aAAa,CAAEZ,MAAM,OAAY,CAACvE,EAAG,SAAS,CAACJ,EAAIiB,GAAG,gBAAgB,IAAI,GAAGb,EAAG,MAAM,CAACe,YAAY,iBAAiB,CAACf,EAAG,IAAI,CAACe,YAAY,iCAAiCX,YAAY,CAAC,aAAa,YAAYgF,SAAS,CAAC,UAAYxF,EAAI4B,GAAG5B,EAAIrF,OAAO8K,UAAUrF,EAAG,IAAI,CAACe,YAAY,OAAOX,YAAY,CAAC,aAAa,YAAYgF,SAAS,CAAC,UAAYxF,EAAI4B,GAAG5B,EAAIrF,OAAOyC,YAAYgD,EAAG,SAAS,CAACI,YAAY,CAAC,OAAS,UAAUF,MAAM,CAAC,KAAOoF,KAAKC,IAAI3F,EAAI4F,aAAaD,IAAK,KAAK,MAAQ,UAAU,CAAC3F,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIrF,OAAO0K,QAAU,qCAAuC,gCAAgC,IAAI,GAAGjF,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,OAAQyB,EAAI6F,kBAAmBjF,WAAW,uBAAuBJ,YAAY,CAAC,SAAW,QAAQ,gBAAgB,OAAOF,MAAM,CAAC,GAAK,2BAC3pD,EAAkB,GCgDtB,GACEjD,KAAM,eACN/D,KAAM,WAAR,OACA,qBACA,gBACA,kEAEE+H,SAAU,OAAZ,OAAY,CAAZ,kBACA,4BADA,IAEIyE,YAFJ,WAGM,OAAO7F,KAAKtF,OAAO0K,QACzB,gBACA,4CACA,4CACA,+CAIEb,QAAS,OAAX,OAAW,CAAX,kBACA,kCADA,IAEIuB,aAFJ,WAEA,WACM9F,KAAK+F,oBAAsB/F,KAAK6F,YAChC7F,KAAK4F,mBAAoB,EACzB,IAAN,uBAEA,aACQ,IAAR,mBACA,aACA,UACA,UACA,UAEQ,EAAR,+BAEQ,EAAR,qBAGQ,IAAR,yBAEQrI,YAAW,WACT,EAAV,0BACA,IAGMoH,EAASrC,iBACf,EACA,EACA,IACA,EACA,kBACA,KACA,0BACA,GACA,EACA,IAGI0D,WAvCJ,WAwCM,IAAN,4BACM,OAAOP,KAAKQ,KAAKjG,KAAK2F,aAAaO,IAAM,IAAMC,GAEjDC,aA3CJ,WA2CA,WACMpG,KAAK4F,mBAAoB,EACzB,IAAN,uBAEA,aACQ,EAAR,iBAGMjB,EAASrC,iBACf,EACA,EACA,IACA,kBACA,EACA,KACA,0BACA,GACA,EACA,MAIEsC,MAAO,CACL,cAAe,CACbC,WAAW,EACXC,QAFN,SAEA,gBACYC,GACF/E,KAAKqG,aAAetB,EACpB/E,KAAKgF,4BAA4B,WACjChF,KAAK8F,iBAEL9F,KAAKoG,eAELpG,KAAKkF,sBAGL3H,YAAW,WACT,EAAZ,wBACA,SAKE+I,QAxGF,WAyGItG,KAAKqG,aAAerG,KAAKtF,OAAOgK,OC1J6W,I,YCO7Y,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAOhC,IAAkB,EAAW,CAACnD,OAAA,KAAKC,QAAA,KAAM+E,WAAA,OCzBzC,IAAI,EAAS,WAAa,IAAIxG,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAEJ,EAAgB,aAAEI,EAAG,WAAW,CAACE,MAAM,CAAC,WAAaN,EAAIyG,aAAaC,iBAAiB,YAAY,OAAOC,MAAM,CAACpI,MAAOyB,EAAc,WAAE4G,SAAS,SAAUC,GAAM7G,EAAI8G,WAAWD,GAAKjG,WAAW,eAAe,CAACR,EAAG,SAAS,CAAEJ,EAAIyG,aAAkB,MAAErG,EAAG,eAAe,CAACI,YAAY,CAAC,aAAa,cAAcgF,SAAS,CAAC,UAAYxF,EAAI4B,GAAG5B,EAAIyG,aAAahB,UAAUzF,EAAI+G,KAAM/G,EAAIyG,aAAoB,QAAE,CAACrG,EAAG,aAAaA,EAAG,cAAc,CAACe,YAAY,wBAAwBX,YAAY,CAAC,YAAY,WAAWgF,SAAS,CAAC,UAAYxF,EAAI4B,GAAG5B,EAAIyG,aAAarJ,YAAa4C,EAAIyG,aAAkB,MAAErG,EAAG,aAAaJ,EAAI+G,MAAM/G,EAAI+G,KAAK3G,EAAG,iBAAiB,CAACA,EAAG,YACruBJ,EAAIyG,aAAaO,SACuB,YAAxChH,EAAIyG,aAAaO,QAAQC,WACzB7G,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIkH,YAAY,CAAClH,EAAIiB,GAAG,QAAQb,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAImH,aAAa,CAACnH,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyG,aAAaO,QAAQI,IAAIC,OAAS,WAAW,GAAGjH,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIsH,YAAY,CAACtH,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyG,aAAac,aAAe,UAAU,IAAI,IAAI,GAAGvH,EAAI+G,MAAM,IACxZ,EAAkB,GC0DtB,GACE1J,KAAM,eACN/D,KAAM,WAAR,OACA,cACA,2BAEE+H,SAAU,OAAZ,OAAY,CAAZ,GACA,kCAGEwD,MAAO,CACL4B,aADJ,SACA,KACMxG,KAAKuH,uBAAwB,EAEzBxC,IACF/E,KAAK6G,YAAa,KAIxBtC,QAAS,CAGP8C,UAHJ,WAYMrH,KAAK6G,YAAa,EAClB7G,KAAKwH,mBAAmB,OAE1BN,WAfJ,WAgBUlH,KAAKwG,aAAaO,QAAQI,IAAIR,UAChC3G,KAAKwG,aAAaO,QAAQI,IAAIR,WAGhC3G,KAAKqH,aAEPJ,UAtBJ,WAwBA,8BACA,sCAEQjH,KAAKwG,aAAaO,QAAQU,GAAGd,WAE7B3G,KAAKqH,eC9GoY,I,4DCO7Y,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAYhC,IAAkB,EAAW,CAAC9F,OAAA,KAAKmG,QAAA,KAAMC,aAAA,OAAaC,UAAA,OAAUC,WAAA,OAAWC,UAAA,KAAQC,WAAA,KAASC,UAAA,O,cC9B7E,GACXC,6BADW,SACkBC,GAA0B,WACnD,IACQC,UAAUC,YACVD,UAAUC,YAAYC,oBAClB,SAAAC,GAAc,EAAKC,kCAAkCD,EAAUJ,MAC/D,SAAA1L,GAAW,EAAKgM,gCAAgChM,EAAO0L,KACvD,CACI9L,QAAS,MAKjB+C,QAAQsJ,MAAM,gEAEpB,MAAOC,GAELvJ,QAAQsJ,MAAM,yCAA0CC,KAGhEH,kCApBW,SAoBuBD,EAAUJ,GACxC,IAQI,IAAIS,EAAkB,CAClBC,UAAWN,EAASO,OAAOD,UAC3BE,SAAUR,EAASO,OAAOC,SAC1BC,SAAUT,EAASO,OAAOE,UAG9Bb,EAAyBS,GAE3B,MAAOD,GAELvJ,QAAQsJ,MAAM,8CAA+CC,KAGrEF,gCA1CW,SA0CqBhM,EAAO0L,GACnC,IACI,IAAIc,EAAmB,KACvB,OAAQxM,EAAMqD,MACV,KAAKrD,EAAMyM,kBACPD,EAAmB,2CACnB,MACJ,KAAKxM,EAAM0M,qBACPF,EAAmB,uCACnB,MACJ,KAAKxM,EAAM2M,QACPH,EAAmB,8CACnB,MACJ,KAAKxM,EAAM4M,cACPJ,EAAmB,6BACnB,MAER7J,QAAQsJ,MAAM,kCAAmCO,GACnD,MAAON,GACLvJ,QAAQsJ,MAAM,4CAA6CC,KAKnEW,UAlEW,SAkEDT,EAAWE,EAAUH,GAC3B,OAAOA,EAAgBW,MAAK,SAAAjG,GACxB,IAAMkG,EAAelG,EAAEmG,QAAUnG,EAAEoG,QAC7BC,EAAerG,EAAEsG,QAAUtG,EAAEoG,QAC7BG,EAAcvG,EAAEwG,OAASxG,EAAEyG,OAC3BC,EAAc1G,EAAE2G,OAAS3G,EAAEyG,OAKjC,GAAIlB,GAAaW,GAAgBX,GAAac,GAAgBZ,GAAYc,GAAed,GAAYiB,EACjG,OAAO,OC7EnB,EAAS,WAAa,IAAIhK,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAe,YAAEI,EAAG,MAAM,CAACI,YAAY,CAAC,SAAW,QAAQ,MAAQ,OAAO,UAAU,KAAKF,MAAM,CAAC,GAAK,iBAAiB,CAACF,EAAG,UAAU,CAACe,YAAY,OAAOb,MAAM,CAAC,YAAc,GAAG,MAAQ,GAAG,WAAa,qBAAqB,KAAON,EAAIkK,YAAY7E,QAAU,qCAAuC,2BAA2B,KAAOrF,EAAIkK,YAAY7E,QAAWrF,EAAIsF,WAAa,OAAQ,UAAa,UAAU,OAAS,OAAO,UAAY,KAAKqB,MAAM,CAACpI,MAAOyB,EAAa,UAAE4G,SAAS,SAAUC,GAAM7G,EAAImK,UAAUtD,GAAKjG,WAAW,cAAc,CAACR,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,WAAWkF,SAAS,CAAC,UAAYxF,EAAI4B,GAAG5B,EAAIkK,YAAY9M,UAAUgN,KAAK,YAAYhK,EAAG,MAAM,CAACI,YAAY,CAAC,SAAW,YAAYF,MAAM,CAAC,KAAO,SAASQ,GAAG,CAAC,MAAQd,EAAIqK,OAAOD,KAAK,SAAS,CAAChK,EAAG,MAAM,CAACe,YAAY,eAAeX,YAAY,CAAC,SAAW,WAAW,OAAS,OAAO,MAAQ,UAAUJ,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,OAAO,CAACN,EAAIiB,GAAG,gBAAgB,MAAM,GAAGjB,EAAI+G,MAC3/B,EAAkB,GCyBtB,GACE1J,KAAM,cACN/D,KAAM,WAAR,OACA,eAEE+H,SAAU,OAAZ,OAAY,CAAZ,GACA,iCAEEmD,QAAS,OAAX,OAAW,CAAX,kBACA,uCADA,IAEI6F,MAFJ,WAGMpK,KAAKkK,WAAY,EACjBlK,KAAKqK,kBAAkB,SAG3BzF,MAAO,CACLqF,YADJ,SACA,KACUlF,GAAYA,EAASL,KACvB1E,KAAKkK,WAAY,EAOjBlK,KAAKoK,WCnDmY,I,YCO5Y,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,KAAiB,QAMhC,IAAkB,EAAW,CAACE,SAAA,KAAO9I,QAAA,OCxBrC,IAAI,GAAS,WAAa,IAAIzB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAe,YAAEI,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAIwK,aAAexK,EAAIyK,sBAAwBzK,EAAI0K,2BAA4B9J,WAAW,sEAAsEJ,YAAY,CAAC,UAAU,IAAI,SAAW,QAAQ,OAAS,OAAO,MAAQ,SAAS,CAACJ,EAAG,MAAM,CAACe,YAAY,2BAA2BX,YAAY,CAAC,MAAQ,oBAAoBM,GAAG,CAAC,MAAQd,EAAI2K,uBAAuB,CAAC3K,EAAIiB,GAAG,gBAAgBb,EAAG,MAAM,CAACI,YAAY,CAAC,aAAa,UAAU,CAACJ,EAAG,QAAQ,CAACE,MAAM,CAAC,GAAK,aAAa,IAAM,GAAG,KAAO,GAAG,MAAQ,UAAUQ,GAAG,CAAC,MAAQd,EAAI2K,uBAAuB,CAACvK,EAAG,SAAS,CAACJ,EAAIiB,GAAG,yCAAyC,IAAI,KAAKjB,EAAI+G,MAC7xB,GAAkB,G,+ECCP,IACX6D,QADW,SACHC,EAAYC,GAChB,OAAOA,EAAUC,OAAOC,KAAOH,GAAa,QAEhDI,cAJW,SAIGJ,EAAYK,EAAiBC,GACvC,IAAMC,EAAcJ,KAAOH,GAAYQ,cAAcL,KAAOE,IACtDI,EAAeN,KAAOH,GAAYU,eAAeP,KAAOG,IAC9D,OAAOC,GAAeE,GAE1BE,UATW,SASDX,EAAYY,GAIlB,IAAM9Q,EAASqQ,KAAOA,KAAOH,GAAYa,OAAO,eAAeC,KAAKF,EAAa,QACjF,OAAO9Q,GAEXiR,UAhBW,SAgBDC,EAAiBC,EAAsBC,EAA0BjB,GACvE,IAAMkB,EAAiBhB,KAAOc,GACxBG,EAAqBD,EAAeE,SAASH,EAA0B,WACvEH,EAAYC,GAAmBf,EAAYmB,EAGjD,OAAOL,GAEXO,eAxBW,SAwBIN,EAAiBO,EAAwBtB,GACpD,IAAMuB,EAAmBrB,KAAOoB,GAC1BR,EAAYC,GAAmBf,EAAYuB,EAEjD,OAAOT,GAEXU,WA9BW,SA8BAC,EAAkBH,EAAwBI,EAA2BC,EAAyB3B,GACrG,IAAM4B,EAAmB1B,KAAOoB,GAAwBF,SAASM,EAA2B,WACtFG,EAAiB3B,KAAOoB,GAAwBQ,IAAIH,EAAyB,WAC7EH,EAAaC,GAAoBzB,GAAa4B,GAAoB5B,EAAY6B,EAGpF,OAAOL,GAEXO,UAtCW,SAsCDC,EAAiBhB,EAAsBiB,EAA6BC,EAA2BlC,GACrG,IAAMmC,EAAqBjC,KAAOc,GAAsBI,SAASa,EAA6B,WACxFG,EAAmBlC,KAAOc,GAAsBI,SAASc,EAA2B,WACpFH,EAAYC,GAAmBhC,GAAamC,GAAsBnC,EAAYoC,EAGpF,OAAOL,GAEXM,sBA9CW,SA8CWtC,EAAYuC,GAC9B,IAAKA,EACD,OAAO,EAGX,IAAMC,EAAarC,KAAOH,GAC1B,OAAOuC,EAAkBE,SAASD,EAAWE,QAEjDC,UAtDW,SAsDD3C,EAAY4C,EAAUC,GAAY,WAClCF,EAAYC,EAASlE,MAAK,SAAAjG,GAAC,OAAI,EAAK2H,cAAcJ,EAAYvH,EAAEqK,UAAWrK,EAAEsK,WAC9EtK,EAAEuK,iBAAiBP,SAASI,MAEjC,OAAOF,GAEXM,kBA5DW,SA4DOjD,EAAYuC,EAAmBK,EAAUC,GACvD,OAAOzN,KAAKkN,sBAAsBtC,EAAYuC,KAAuBnN,KAAKuN,UAAU3C,EAAY4C,EAAUC,K,+FC/DnG,IACXK,wBADW,SACaC,GACpB,GAAIA,GAAOA,EAAIlU,OAAQ,CACnB,IAAMmU,EAAmBD,EAAIE,QAAQ,KAErC,GAAID,GAAoB,EAAG,CACvB,IAAME,EAAiBH,EAAII,UAAUH,EAAmB,GACxD,OAAOlU,OAAOsU,YAAY,IAAIC,gBAAgBH,KAItD,OAAO,MAEXI,yBAbW,SAacP,GACrB,GAAIA,EAAK,CACL,IAAIQ,EAAoBvO,KAAK8N,wBAAwBC,GAErD,GAAIQ,EAEA,OADAA,EAAkBC,KAAOC,KAAKC,MACvBH,EAIf,OAAO,MAEXI,kCAzBW,SAyBuBC,GAChC,GAAIA,EAAgB,CAKd,IAAMC,EAAe,gBAAG,iHAAH,6DAEfC,EAAWF,EAAeG,MAAMF,GAElCG,EAAeF,EAAWA,EAASG,OAAS,KAWhD,GARID,GAAgBA,EAAaE,YAC7BF,EAAaE,UAAYF,EAAavB,WAAa,IAAMuB,EAAaE,WAGtEF,GAAgBA,EAAaG,SAC7BH,EAAehP,KAAKoP,0BAA0BJ,IAG9CA,EACA,OAAOA,EAIf,OAAO,MAEXI,0BArDW,SAqDeJ,GAKtB,IAAMK,EAAW,GAAH,OAAML,EAAaE,UAAnB,YAAgCF,EAAaG,QAE3D,OADAH,EAAaK,SAAWA,EACjBL,GAEXM,mBA9DW,SA8DQC,GACf,IAAMC,EAAiBxP,KAAKsO,yBAAyBiB,GAErD,GAAIC,GAAkBA,EAAeC,IAAK,CACtC,IAAMT,EAAehP,KAAK2O,kCAAkCa,EAAeC,KAE3E,GAAIT,EACA,OAAOA,EAIf,OAAO,O,sCCzEAlV,I,UAAAA,OAAO4V,OAAO,CACzBC,WAAY,CACRC,UAAW,eAEXpR,KAAM,OACNqR,cAAe,gBACfC,aAAc,eACdC,gBAAiB,kBACjBC,gBAAiB,kBACjBC,mBAAoB,qBACpBC,gBAAiB,mBAErB1R,KAAM,CACF2R,YAAa,cACbC,cAAe,gBACfC,iBAAkB,oBAEtBC,UAAW,CACPC,IAAK,MACLC,MAAO,SAEXC,YAAa,CACTC,eAAgB,iBAChBC,gBAAiB,mBAErBC,kBAAmB,4BCnBvBC,OAAIC,IAAIC,QAEO,WAAIA,OAAKC,MAAM,CAC5BC,QAAS,CAACC,gBAAqB,CAC7BtS,IAAK,mBACLuS,QAAS,SAACC,GACR,IAAMC,EAAcvX,OAAOwX,OAAO,GAAIF,GAChCG,EAAY,CAAC,OAAQ,UAAW,SAAU,cAAe,gBAM/D,OAJAA,EAAUC,SAAQ,SAACC,UACVJ,EAAYI,MAGdJ,MAGXK,MAAO,CACLlD,KAAM,KACNmD,SAAU,KACVC,YAAa,KACbC,eAAe,EACfC,YAAY,EACZC,eAAe,EACfxH,aAAa,EACb3J,mBAAoB,EACpBK,sBAAuB,EACvB+Q,kBAAmB,KACnBC,SAAU,CACRC,eAAgB,EAChBC,mBAAoB,IACpBC,cAAe,GACfC,WAAW,GAEb3Q,QAAS,CACPgD,MAAM,EACNO,yBAAyB,GAE3BvK,OAAQ,CACNgK,MAAM,EACNU,SAAS,EACTI,MAAO,GACPrI,QAAS,IAEX8M,YAAa,CACXvF,MAAM,EACNU,SAAS,EACTjI,QAAS,IAEXqJ,aAAc,KAad+I,OAAQ,CAAEjR,MAAO,KAAMoT,MAAO,MAC9BY,uBAAwB,KACxBC,oBAAqB,KACrBC,oBAAqB,KAErB3C,cAAe,KACfC,aAAc,KACdE,gBAAiB,KACjByC,yBAA0B,KAC1B1C,gBAAiB,KACjB2C,YAAa,GACbC,aAAc,IAEhBC,QAAS,CACPC,cAAe,SAACnB,EAAOkB,GACrB,QAASlB,EAAME,aAEjBnB,YAAa,SAACiB,EAAOkB,GACnB,OAAIA,EAAQC,cACHnB,EAAME,YAAYnB,YAEpB,MAGTqC,mBAAoB,SAACpB,EAAOkB,GAC1B,SAAIA,EAAQnC,cAAgBmC,EAAQG,sBAAuBH,EAAQI,yBAC1DJ,EAAQnC,YAAYpD,SAAS4F,GAAUxC,YAAYC,iBAAmBkC,EAAQnC,YAAYpD,SAAS4F,GAAUxC,YAAYE,mBAIpIuC,YAAa,SAACxB,EAAOkB,GACnB,QAASlB,EAAMC,UAEjBtM,WAAY,SAACqM,EAAOkB,GAClB,OAAOA,EAAQpU,OAASoU,EAAQpU,KAAKA,OAASyU,GAAUzU,KAAK4R,eAAiBwC,EAAQpU,KAAKA,OAASyU,GAAUzU,KAAK6R,mBAErH7R,KAAM,SAACkT,EAAOkB,GAEZ,IAAMpU,EAAO,CACXA,KAAMyU,GAAUzU,KAAK2R,YACrBgD,SAAU,EACV1F,WAAY,KACZyB,UAAW,KACXG,SAAU,MAGZ,GAAIqC,EAAMC,UAAYD,EAAMlD,MAAQkD,EAAMlD,KAAK3D,WAA6C,WAAhC,gBAAO6G,EAAMlD,KAAK3D,WAAwB,CACpG,IAAMuI,EAAkB1B,EAAMC,SAAS0B,OAAOC,2BAE9C,GAAI5B,EAAMY,uBAAwB,CAEhC,IAAMiB,EAAc7B,EAAMlD,KAAK3D,UAAUa,KAAKX,KAAO2G,EAAMY,uBAAuB9D,MAAO,WAEzF,GAAI+E,EAAcH,EAMhB,OALA5U,EAAKA,KAAOyU,GAAUzU,KAAK6R,iBAC3B7R,EAAK2U,SAAWzB,EAAMY,uBAAuBa,SAC7C3U,EAAK0Q,UAAYwC,EAAMY,uBAAuBpD,UAC9C1Q,EAAK6Q,SAAWqC,EAAMY,uBAAuBjD,SAEtC7Q,EAIX,GAAIkT,EAAMa,oBAAqB,CAG7B,IAAMgB,EAAc7B,EAAMlD,KAAK3D,UAAUa,KAAKX,KAAO2G,EAAMa,oBAAoB/D,MAAO,WAEtF,GAAI+E,EAAcH,EAOhB,OANA5U,EAAKA,KAAOyU,GAAUzU,KAAK4R,cAC3B5R,EAAK2U,SAAWzB,EAAMa,oBAAoB5S,GAC1CnB,EAAKiP,WAAaiE,EAAMa,oBAAoB1S,KAC5CrB,EAAK0Q,UAAY,KACjB1Q,EAAK6Q,SAAW,KAET7Q,GAKb,OAAOA,GAETgV,gBAAiB,SAAC9B,EAAOkB,GACvB,OAAOlB,EAAMC,SACTD,EAAMC,SAAS8B,MAAMC,YAAYC,QAAO,SAAAtQ,GAAC,OAAIA,EAAEuQ,OAASvQ,EAAEuQ,MAAM/Z,UAChE,MAENga,iBAAkB,SAACnC,EAAOkB,GACxB,OAAOlB,EAAMC,UAAYD,EAAMC,SAAS0B,OAAOS,gBAAgBzG,SAAS,UACtEqE,EAAMC,SAAS8B,MAAMC,YAAYpK,MAAK,SAAAjG,GAAC,OAAIA,EAAE0Q,cAAgB,KAC3DrC,EAAMC,SAAS8B,MAAMC,YAAYC,QAAO,SAAAtQ,GAAC,OAAIA,EAAE0Q,cAAgB,KAC/D,MAENhB,oBAAqB,SAACrB,EAAOkB,GAC3B,OAAOlB,EAAMC,UAAYD,EAAMC,SAAS0B,OAAOS,gBAAgBzG,SAAS,UAE1E2F,sBAAuB,SAACtB,EAAOkB,GAC7B,OAAOlB,EAAMC,UAAYD,EAAMC,SAAS0B,OAAOS,gBAAgBzG,SAAS,mBAE1E2G,kBAAmB,SAACtC,EAAOkB,GAAY,MAE/BqB,EAAwB,UAAGvC,EAAMc,2BAAT,aAAG,EAA2B0B,kBACtDC,EAAczC,EAAMC,SAAS8B,MAAMC,YAAYU,MAAK,SAAA/Q,GAAC,OAAIA,EAAExD,KAAKwU,iBAAP,OAAyBJ,QAAzB,IAAyBA,OAAzB,EAAyBA,EAA0BI,kBAElH,OAAOF,EAAcA,EAAY/W,KAAO6V,GAAUrC,oBAGtD0D,UAAW,CACTC,WADS,SACE7C,EAAO8C,GAEhB9C,EAAMlD,KAAOgG,GAEfC,eALS,SAKM/C,EAAO8C,GACpB9C,EAAMC,SAAW6C,GAEnBE,kBARS,SAQShD,EAAO8C,GAgBvB9C,EAAME,YAAc4C,GAEtBG,oBA1BS,SA0BWjD,EAAO8C,GACzB9C,EAAMG,cAAgB2C,GAExBI,iBA7BS,SA6BQlD,EAAO8C,GACtB9C,EAAMI,WAAa0C,GAErBK,oBAhCS,SAgCWnD,EAAO8C,GACzB9C,EAAMK,cAAgByC,GAExBM,yBAnCS,SAmCgBpD,EAAO8C,GAC9B9C,EAAM9Q,mBAAqB4T,GAE7BO,4BAtCS,SAsCmBrD,EAAO8C,GACjC9C,EAAMzQ,sBAAwBuT,GAEhCQ,kBAzCS,SAyCStD,EAAO8C,GACvB9C,EAAMnH,YAAciK,GAEtBS,cA5CS,SA4CKvD,EAAO8C,GACnB9C,EAAMhQ,QAAU8S,GAElBlP,aA/CS,SA+CIoM,EAAO8C,GAClB9C,EAAMhX,OAAS8Z,GAEjBhN,mBAlDS,SAkDUkK,EAAO8C,GACxB9C,EAAMlL,aAAegO,GAEvBnK,kBArDS,SAqDSqH,EAAO8C,GACvB9C,EAAMzH,YAAcuK,GAEtBU,aAxDS,SAwDIxD,EAAO8C,GAClB9C,EAAMnC,OAASiF,GAEjBW,6BA3DS,SA2DoBzD,EAAO8C,GAClCA,EAAQhG,KAAO,IAAIC,KACnBiD,EAAMY,uBAAyBkC,GAEjCY,0BA/DS,SA+DiB1D,EAAO8C,GAC/BA,EAAQhG,KAAO,IAAIC,KACnBiD,EAAMa,oBAAsBiC,GAK9Ba,oBAtES,SAsEW3D,EAAO8C,GACzB9C,EAAM7B,cAAgB2E,GAExBc,mBAzES,SAyEU5D,EAAO8C,GACxB9C,EAAM5B,aAAe0E,GAEvBe,sBA5ES,SA4Ea7D,EAAO8C,GAC3B9C,EAAM1B,gBAAkBwE,GAE1BgB,+BA/ES,SA+EsB9D,EAAO8C,GACpC9C,EAAMe,yBAA2B+B,GAEnCiB,sBAlFS,SAkFa/D,EAAO8C,GAC3B9C,EAAM3B,gBAAkByE,GAE1BkB,eArFS,SAqFMhE,EAAO8C,GACpB9C,EAAMO,SAAWuC,GAEnBmB,wBAxFS,SAwFejE,EAAO8C,GAC7B9C,EAAMM,kBAAoBwC,GAE5BoB,kBA3FS,SA2FSlE,EAAO8C,GACvB9C,EAAMgB,YAAc8B,GAEtBqB,mBA9FS,SA8FUnE,EAAO8C,GACxB9C,EAAMiB,aAAe6B,GAEvBsB,0BAjGS,SAiGiBpE,EAAO8C,GAC/B9C,EAAMc,oBAAsBgC,IAGhCzN,QAAS,GAET3M,QAAS,K,qECrRP,GAAS,WAAa,IAAI2F,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,sBAAsB,CAACR,EAAG,SAAS,CAACe,YAAY,OAAOX,YAAY,CAAC,gBAAgB,OAAOF,MAAM,CAAC,OAASN,EAAI8T,iBAAmB,QAAU,QAAQ,MAAQ,YAAY,CAAC1T,EAAG,YAAY,CAACI,YAAY,CAAC,6BAA6B,MAAM,4BAA4B,OAAOF,MAAM,CAAC,GAAK,oBAAoB,KAAO,GAAG,UAAY,IAAI,MAAQ,YAAY,CAACF,EAAG,MAAM,CAACe,YAAY,OAAOX,YAAY,CAAC,OAAS,OAAO,OAAS,QAAQF,MAAM,CAAC,IAAM,GAAG,aAAa,WAAW,IAAQL,KAAa,SAAI,wBAAyBG,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,iBAAiBb,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,YAAY,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIgB,QAAQ5G,KAAK,CAAEiD,KAAM,SAAU,kBAAmB,CAAC+C,EAAG,SAAS,CAACJ,EAAIiB,GAAG,8BAA8B,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,KAAK,CAACF,EAAG,cAAc,IAAI,GAAIJ,EAAoB,iBAAEI,EAAG,MAAM,CAACe,YAAY,aAAa,CAACf,EAAG,QAAQ,CAACe,YAAY,kBAAkBiE,MAAOpF,EAAIgW,0BAEvlC,kCADA,kCACkCxV,YAAY,CAAC,eAAe,MAAM,gBAAgB,OAAOF,MAAM,CAAC,MAAQ,QAAQ,OAAS,KAAK,SAAWN,EAAIgW,2BAA2BlV,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIgW,2BAA4B,KAAS,CAAChW,EAAIiB,GAAG,WAAWb,EAAG,QAAQ,CAACe,YAAY,kBAAkBiE,MAAMpF,EAAIgW,0BACvT,kCACA,kCAAkCxV,YAAY,CAAC,gBAAgB,OAAOF,MAAM,CAAC,MAAQ,QAAQ,OAAS,KAAK,UAAYN,EAAIgW,2BAA2BlV,GAAG,CAAC,MAAQd,EAAIiW,2CAA2C,CAACjW,EAAIiB,GAAG,WAAW,GAAGjB,EAAI+G,MAAM,GAAG3G,EAAG,MAAM,CAAC8V,IAAI,iBAAiB/U,YAAY,aAAauC,MAAO1D,EAAI8T,iBAC3T,+BACA,gCAAiC,CAAE9T,EAAoB,iBAAEI,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,OAAQyB,EAAIgW,0BAA2BpV,WAAW,gCAAgC,CAACR,EAAG,yBAAyB,CAAC8V,IAAI,4BAA4B,GAAGlW,EAAI+G,OACpQ/G,EAAI8T,kBAAoB9T,EAAIgW,4BAC9BhW,EAAI4R,UACJ5R,EAAImW,uBAAuBC,aAC3BhW,EAAG,SAAS,CAACe,YAAY,2BAA2BX,YAAY,CAAC,gBAAgB,QAAQ,CAACJ,EAAG,MAAM,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAImW,uBAAuBxR,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,aAAab,EAAG,eAAe,CAACE,MAAM,CAAC,aAAa,iBAAiB,MAAQN,EAAImW,uBAAuBC,aAAa/Y,KAAK,SAAW,KAAK,CAAC+C,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,iBAAiB8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAON,EAAIyT,gBAAgB,OAASzT,EAAImW,wBAAwBrV,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAImW,uBAAuBpV,OAAY,GAAGX,EAAG,MAAM,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIqW,qBAAqB1R,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,UAAUb,EAAG,eAAe,CAACE,MAAM,CAAC,aAAa,cAAc,qBAAqB,iBAAiB,MAAQN,EAAIqW,qBAAqBD,aACv7BpW,EAAIqW,qBAAqBD,aAAa/Y,KACtC,MAAM,SAAW,KAAK,CAAE2C,EAAIqW,qBAAiC,aAAEjW,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,UAAUQ,GAAG,CAAC,MAAQ,SAASC,GAAiC,OAAzBA,EAAOuV,kBAAyBtW,EAAIuW,UAAUxV,KAAUqJ,KAAK,UAAU,CAACpK,EAAIiB,GAAG,eAAejB,EAAI+G,MAAM,GAAG3G,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,OAAO,KAAON,EAAImW,uBAAuBC,aAAavC,MAAM,OAAS7T,EAAIqW,sBAAsBvV,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAIqW,qBAAqBtV,OAAY,GAAGX,EAAG,MAAM,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIwW,qBAAqB7R,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,UAAUb,EAAG,eAAe,CAACE,MAAM,CAAC,aAAa,cAAc,qBAAqB,qBAAqB,MAAQN,EAAIyW,WAAWzW,EAAIwW,qBAAqBJ,cAAc,SAAW,MAAMhW,EAAG,uBAAuB,CAACE,MAAM,CAAC,OAASN,EAAIwW,qBAAqB,IAAMxW,EAAI0W,uBAAuB,IAAM1W,EAAI2W,sBAAsB7V,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAIwW,qBAAqBzV,OAAY,GAAGX,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAI4W,qBAAqBjS,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,UAAUb,EAAG,eAAe,CAACE,MAAM,CAAC,aAAa,cAAc,qBAAqB,oBAAoB,MAAQN,EAAI4W,qBAAqBR,aAAa/Y,KAAK,SAAW,MAAM+C,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,OAAO,SAAW,QAAQ,KAAON,EAAI6W,SAAS,OAAS7W,EAAI4W,sBAAsB9V,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAI4W,qBAAqB7V,OAAY,GAAGX,EAAG,QAAQ,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAI8W,yBAAyBnS,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,uBAAuB,CAACnB,EAAIiB,GAAG,2BAA2Bb,EAAG,eAAe,CAACE,MAAM,CAAC,aAAa,kBAAkB,qBAAqB,iBAAiB,MAAQN,EAAI8W,yBAAyBV,aAAa/Y,KAAK,SAAW,MAAM+C,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,wBAAwB,SAAW,QAAQ,KAAON,EAAI+W,aAAa,OAAS/W,EAAI8W,0BAA0BhW,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAI8W,yBAAyB/V,OAAY,IAAI,GAAGX,EAAG,MAAM,CAACe,YAAY,eAAeX,YAAY,CAAC,aAAa,OAAO,gBAAgB,SAAS,CAACJ,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,UAAU,MAAQ,GAAG,MAAQ,IAAIQ,GAAG,CAAC,MAAQd,EAAIgX,QAAQ,CAAC5W,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,gBAAgBjB,EAAIiB,GAAG,WAAW,IAAI,GAAGb,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,UAAU,MAAQ,GAAG,MAAQ,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIgB,QAAQ5G,KAAK,CACnjFiD,KAAM,aACN4Z,OAAQ,CAAEtF,MAAO,aACb,CAACvR,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,gBAAgBjB,EAAIiB,GAAG,aAAa,IAAI,IAAI,GAAGb,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,uBAAuB,MAAQ,GAAG,MAAQ,IAAIQ,GAAG,CAAC,MAAQd,EAAIkX,SAAS,CAAC9W,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,iBAAiBjB,EAAIiB,GAAG,2BAA2B,IAAI,IAAI,IAAI,IAAI,GAAGjB,EAAI+G,MAAM,IAAI,IAC/X,GAAkB,GChBlB,I,8BAAS,WAAa,IAAI/G,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,SAAS,CAACE,MAAM,CAAC,aAAa,UAAUQ,GAAG,CAAC,MAAQd,EAAImX,YAAY,CAACnX,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI8S,cAAgB,qBAAuB,yBAAyB,KAChQ,GAAkB,GCYtB,IACEzV,KAAM,YACNgE,SAAU,OAAZ,OAAY,CAAZ,GACA,yDAEEmD,QAAS,OAAX,OAAW,CAAX,kBACA,2CADA,IAEI2S,UAFJ,WAKUlX,KAAK6S,cACP7S,KAAKe,QAAQ5G,KAAK,CAA1B,kBAEQ6F,KAAKyV,sBAAsB,CACzB0B,UAAWnX,KAAKoX,OAAOha,KACvBoR,KAAM,SAEJxO,KAAK+S,oBACP/S,KAAKe,QAAQ5G,KAAK,CAA5B,sBAEUkd,GAAUC,cAKlBC,iBAzBF,SAyBA,OACIC,GAAK,SAAT,GACM,GAAIC,EAAG5E,cACL,OAAO2E,EAAK,CAApB,iBAEYC,EAAG1E,oBACLyE,IAEAH,GAAUC,eC9C0X,MCQ1Y,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,OAIa,MAAiB,QAKhC,IAAkB,GAAW,CAAC9V,QAAA,OCxB9B,IAAI,GAAS,WAAa,IAAIzB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,WAAW,CAACF,EAAG,WAAW,CAACE,MAAM,CAAC,WAAa,GAAG,YAAYN,EAAI2X,UAAY,KAAKhR,MAAM,CAACpI,MAAOyB,EAAI4X,OAAW,KAAEhR,SAAS,SAAUC,GAAM7G,EAAI6X,KAAK7X,EAAI4X,OAAQ,OAAQ/Q,IAAMjG,WAAW,gBAAgB,CAACR,EAAG,SAAS,CAACA,EAAG,eAAe,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyF,UAAUrF,EAAG,aAAcJ,EAAQ,KAAEI,EAAG,cAAc,CAACe,YAAY,OAAOuC,MAAM,CAAGI,OAAQ9D,EAAI8D,SAAW,CAAC1D,EAAG,gBAAgB,CAACuG,MAAM,CAACpI,MAAOyB,EAAc,WAAE4G,SAAS,SAAUC,GAAM7G,EAAI8X,WAAWjR,GAAKjG,WAAW,eAAeZ,EAAI+X,GAAI/X,EAAQ,MAAE,SAAS0R,EAAK9X,GAAG,OAAOwG,EAAG,MAAM,CAACvB,IAAIjF,EAAEuH,YAAY,OAAOL,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIgY,WAAWtG,MAAS,CAACtR,EAAG,UAAU,CAACE,MAAM,CAAC,MAAQoR,EAAKrU,KAAK,MAAQqU,EAAK5R,SAAS,MAAK,IAAI,GAAGE,EAAI+G,KAAK3G,EAAG,aAAaA,EAAG,iBAAiB,CAACA,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIiY,aAAa,CAACjY,EAAIiB,GAAG,aAAa,IAAI,IAAI,IAAI,IACv9B,GAAkB,GC+BtB,IACE5D,KAAM,mBACN6a,MAAO,CACLzS,MAAO0S,OACPC,KAAMC,MACNvU,OAAQqU,OACRR,SAAUQ,OACVP,OAAQ,CACNjT,KAAM2T,QACNlC,aAAcrc,SAGlBT,KAAM,WAAR,OACA,kBAEEuL,MAAO,CACL,cAAe,SAAnB,KAIM5E,KAAK6X,WAAa7X,KAAK2X,OAAOxB,aACpC,8BACA,OAGE5R,QAAS,CACPyT,WADJ,WAEMhY,KAAKsY,MAAM,gBAAiB,CAC1B5T,MAAM,EACNyR,aAAcnW,KAAK2X,OAAOxB,gBAG9B4B,WAPJ,SAOA,GACM/X,KAAKsY,MAAM,gBAAiB,CAC1B5T,MAAM,EACNyR,aAAc1E,IAGhBzR,KAAKsY,MAAM,8BCtEoY,M,uCCOjZ,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAehC,IAAkB,GAAW,CAAC/W,OAAA,KAAKmG,QAAA,KAAMC,aAAA,OAAaC,UAAA,OAAUC,WAAA,OAAWC,UAAA,KAAQC,WAAA,KAASwQ,UAAA,KAAOC,eAAA,KAAYC,QAAA,KAAKzQ,UAAA,OCjCpH,IAAI,GAAS,WAAa,IAAIjI,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,WAAW,CAACF,EAAG,WAAW,CAACE,MAAM,CAAC,WAAa,GAAG,YAAY,SAASqG,MAAM,CAACpI,MAAOyB,EAAI4X,OAAW,KAAEhR,SAAS,SAAUC,GAAM7G,EAAI6X,KAAK7X,EAAI4X,OAAQ,OAAQ/Q,IAAMjG,WAAW,gBAAgB,CAACR,EAAG,gBAAgB,CAACE,MAAM,CAAC,IAAMN,EAAI2F,IAAI,IAAM3F,EAAImG,IAAI,gBAAgBnG,EAAI2Y,aAAa,eAAe3Y,EAAIyO,KAAKhD,YAAYC,OAAO,cAAc,MAAQ,WAAW5K,GAAG,CAAC,aAAa,SAASC,GAAQ,OAAOf,EAAIgY,WAAWhY,EAAI4X,OAAOxB,gBAAgBzP,MAAM,CAACpI,MAAOyB,EAAI4X,OAAmB,aAAEhR,SAAS,SAAUC,GAAM7G,EAAI6X,KAAK7X,EAAI4X,OAAQ,eAAgB/Q,IAAMjG,WAAW,wBAAwB,CAACR,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,WAAWQ,GAAG,CAAC,MAAQd,EAAIiY,aAAa,CAACjY,EAAIiB,GAAG,aAAa,IAAI,IAAI,IACtzB,GAAkB,GCmBtB,IACE5D,KAAM,uBACN6a,MAAO,CACLN,OAAQ,CACNjT,KAAM2T,QACNlC,aAAc+B,QAEhBxS,IAAKwS,OACLhS,IAAKgS,OACLQ,aAAcC,UAEhBpU,QAAS,CACPyT,WADJ,WAEMhY,KAAKsY,MAAM,gBAAiB,CAC1B5T,MAAM,EACNyR,aAAcnW,KAAK2X,OAAOxB,gBAG9B4B,WAPJ,SAOA,GACM/X,KAAKsY,MAAM,gBAAiB,CAC1B5T,MAAM,EACNyR,aAAc1E,OCzCmY,M,aCOrZ,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAShC,IAAkB,GAAW,CAAClQ,OAAA,KAAKqX,eAAA,KAAY9Q,UAAA,KAAQ2Q,QAAA,KAAKzQ,UAAA,OC3B5D,IAAI,GAAS,WAAa,IAAIjI,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACe,YAAY,2BAA2BX,YAAY,CAAC,gBAAgB,QAAQ,CAACJ,EAAG,MAAM,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAImW,uBAAuBxR,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,aAAab,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQN,EAAImW,uBAAuBC,aAAa/Y,KAAK,SAAW,KAAK,CAAC+C,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,iBAAiB8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAON,EAAI8T,iBAAiB,OAAS9T,EAAImW,wBAAwBrV,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAImW,uBAAuBpV,OAAY,GAAGX,EAAG,MAAM,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAI8Y,oBAAoBnU,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,SAASb,EAAG,eAAe,CAACE,MAAM,CAAC,qBAAqB,uBAAuB,MAAQN,EAAI8Y,oBAAoB1C,aAAa/Y,KAAK,SAAW,MAAM+C,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,MAAM,SAAW,QAAQ,KAAON,EAAI+Y,QAAQ,OAAS/Y,EAAI8Y,qBAAqBhY,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAI8Y,oBAAoB/X,OAAY,GAAGX,EAAG,MAAM,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIwW,qBAAqB7R,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,UAAUb,EAAG,eAAe,CAACE,MAAM,CAAC,qBAAqB,qBAAqB,MAAQN,EAAIyW,WAAWzW,EAAIwW,qBAAqBJ,cAAc,SAAW,MAAMhW,EAAG,uBAAuB,CAACE,MAAM,CAAC,OAASN,EAAIwW,qBAAqB,gBAAgBxW,EAAIgZ,qBAAqB,IAAMhZ,EAAIiZ,SAAStT,IAAI,IAAM3F,EAAIiZ,SAAS9S,KAAKrF,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAIwW,qBAAqBzV,OAAY,GAAGX,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAI4W,qBAAqBjS,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,UAAUb,EAAG,eAAe,CAACE,MAAM,CAAC,qBAAqB,oBAAoB,MAAQN,EAAI4W,qBAAqBR,aAAa/Y,KAAK,SAAW,MAAM+C,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,OAAO,SAAW,QAAQ,KAAON,EAAI6W,SAAS,OAAS7W,EAAI4W,sBAAsB9V,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAI4W,qBAAqB7V,OAAY,GAAGX,EAAG,QAAQ,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAI8W,yBAAyBnS,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,uBAAuB,CAACnB,EAAIiB,GAAG,2BAA2Bb,EAAG,eAAe,CAACE,MAAM,CAAC,qBAAqB,iBAAiB,MAAQN,EAAI8W,yBAAyBV,aAAa/Y,KAAK,SAAW,MAAM+C,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,wBAAwB,SAAW,QAAQ,KAAON,EAAI+W,aAAa,OAAS/W,EAAI8W,0BAA0BhW,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAI8W,yBAAyB/V,OAAY,IAAI,GAAGX,EAAG,MAAM,CAACe,YAAY,eAAeX,YAAY,CAAC,aAAa,OAAO,gBAAgB,SAAS,CAACJ,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,UAAU,MAAQ,GAAG,MAAQ,IAAIQ,GAAG,CAAC,MAAQd,EAAIgX,QAAQ,CAAC5W,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,gBAAgBjB,EAAIiB,GAAG,WAAW,IAAI,IAAI,GAAGb,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,mBAAmB,MAAQ,GAAG,MAAQ,IAAIQ,GAAG,CAAC,MAAQd,EAAIkX,SAAS,CAAC9W,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,iBAAiBjB,EAAIiB,GAAG,2BAA2B,IAAI,IAAI,IAAI,IAAI,IACr3G,GAAkB,GCCP,I,UAAA,CACXiY,6BADW,SACkBC,GACzB,IAAMC,EAAe,UAAGD,EAAU,EAAI,IAAM,IAAvB,OAAqD,EAAzBzT,KAAK2T,IAAIF,EAAU,KAAY,KAAO,IAAMA,EAAU,IAAI3Z,OAAO,GAClH,OAAO4Z,GAEX3C,WALW,SAKA5L,GACP,OAAOG,KAAOH,GAAYa,OAAO,qBAErC4N,kBARW,WAST,OAAOtO,OAASU,OAAO,gBAEzB6N,WAXW,SAWA1O,GACP,OAAOG,KAAOH,GAAYa,OAAO,WAErC8N,iBAdW,WAeP,OAAOxO,OAASU,OAAO,UAE3B+N,oBAjBW,SAiBSC,GAChB,OAAO1O,KAAO0O,EAAe,SAAShO,OAAO,WAEjDiO,aApBW,SAoBEC,EAAgBC,GACzB,gBAAU5Z,KAAKsZ,WAAWK,GAA1B,cAA+C3Z,KAAKsZ,WAAWM,KAEnEC,eAvBW,SAuBIC,EAAMC,EAAMC,GACvB,gBAAUF,EAAV,mBAAyBE,IAK7BC,oBA7BW,SA6BSH,EAAMC,EAAMC,GAC5B,gBAAUF,EAAV,cAAoBC,EAApB,cAA8BC,IAElCE,oBAhCW,SAgCSnT,EAASoT,GACzB,IAAIC,EAAgBD,EAAiB,CACjCE,KAAM,KACNC,KAAM,KACNlY,MAAO,MACP,CACAiY,KAAM,kEAENC,KAAM,iBACNlY,MAAO,IAmCX,OAhCI2E,EAAQsG,SAAS,oBACjB+M,EAAgB,CACZC,KAAM,YACNC,KAAM,kBACNlY,MAAO,OAEJ2E,EAAQsG,SAAS,uBACxB+M,EAAgB,CACZC,KAAM,sBACNC,KAAM,oBACNlY,MAAO,OAEJ2E,EAAQsG,SAAS,qBACxB+M,EAAgB,CACZC,KAAM,+GAENC,KAAM,oBACNlY,MAAO,QAGX2E,EAAQsG,SAAS,mBACjBtG,EAAQsG,SAAS,gBACjBtG,EAAQsG,SAAS,kBACjBtG,EAAQsG,SAAS,yBAEjB+M,EAAgB,CACZC,KAAM,aACNC,KAAM,qBACNlY,MAAO,WAIRgY,KC1EA,I,UAAA,CACXG,aADW,SACEC,EAAYhP,GACrB,IAAMiP,EAAOD,EAAWtc,IAAI,QACtBwc,EAASF,EAAWtc,IAAI,UAExBxD,EAAS8Q,EACVmP,QACAhO,IAAI8N,EAAM,QACV9N,IAAI+N,EAAQ,UAEjB,OAAOhgB,GAEXqR,eAZW,SAYI6O,EAAoBC,EAA0BrM,GACzD,IAAMsM,EAAYtM,EAAK3D,UACjBW,EAAcgD,EAAKhD,YAEnBuP,EAAuBvP,EAAYmP,QAAQhO,IAAI,EAAG,QAElDqO,EAAwBjQ,KAC1B8P,GAGEI,EAAqBjb,KAAKua,aAAaS,EAAuBxP,GAEhEmC,EAAU,KAEd,GAAIiN,EAAqB,EAAG,CACxB,IAAMM,EAAwBH,EAAqBJ,QAAQhO,IACvDiO,EACA,QAIAjN,EADAmN,GAAaG,EACHC,EAEAA,EAAsBP,QAAQhO,KAAK,EAAG,aAGpDgB,EAAUoN,EAGd,OAAOpN,GAEXiJ,SA3CW,SA2CFuE,EAAmBC,EAAuBtP,EAA0BuP,EAAYxQ,EAAWW,GAAa,WACvG8P,EAA0Btb,KAAKua,aAAaY,EAAmB3P,GAOrE,GAAI8P,GAA2BF,GAAyBtP,EAA0B,CAG9E,IAFA,IAAI8K,EAAW,GAGPjd,EAAI2hB,EACR3hB,GAAKyhB,EACLzhB,EAAIA,EACCghB,QACAhO,IAAIb,EAA0B,WAEnC8K,EAASzc,KAAK,CACV0F,KAAMlG,EAAE8R,OAAO,SACfrO,KAAMzD,EAAE8R,OAAO,YAWvB,OAPI4P,IACAzE,EAAWA,EAASjD,QAChB,SAACtQ,GAAD,OAAO,EAAKkX,aAAaxP,KAAO1H,EAAExD,KAAM,SAAU2L,GAAeX,MAKlE+L,EAGX,OAAO,MAEXE,aA/EW,SA+EEyE,EAAmBC,EAAmB1P,EAC/C2P,EAAmBC,EAAoBlQ,GACvC,IAAMmQ,EAAoB3b,KAAKua,aAAakB,EAAmBjQ,GACzDoQ,EAAqB5b,KAAKua,aAAamB,EAAoBlQ,GAEjE,GAAI+P,GAAqBC,GAAqB1P,EAA0B,CAEpE,IADA,IAAIgL,EAAe,GAEXnd,EAAI4hB,EACR5hB,GAAK6hB,EACL7hB,GAAKmS,EAELgL,EAAa3c,KAAK,CACd0F,KAAMlG,EACNyD,KAAMye,GAAW5C,6BAA6Btf,KAYtD,OARIgiB,GAAqBC,IACrB9E,EAAeA,EAAanD,QACxB,SAACtQ,GAAD,OACIuY,EAAmBjB,QAAQhO,IAAItJ,EAAExD,KAAM,YACvC8b,MAIL7E,EAGX,OAAO,MAEXgF,qCA9GW,SA8G0BC,EAAcC,EAAmCC,EAClFC,EAAsBC,GAAmB,WAEnCC,EAAwB,GACxBC,EAAuBN,EAAaO,oBAEpCC,EAA4BL,EAC5BzW,KAAKC,IACHwW,EACAD,GAEFA,EAgBN,OAdAI,EAAqB7K,SAAQ,SAAAnO,GAIzB,IAHA,IAAMmZ,EAA0B,EAAKjC,aAAaxP,KAAO1H,EAAEqK,WAAYyO,GACjEM,EAAwB,EAAKlC,aAAaxP,KAAO1H,EAAEsK,SAAUwO,GAE1DxiB,EAAI6iB,EAAyB7iB,EAAI8iB,EAAuB9iB,EAAIA,EAAEgT,IAAIqP,EAAmC,WAAY,CACtH,IAAIU,EAAoBH,EACpB5iB,EAAEghB,QAAQhO,IAAI4P,EAA2B,WAAaE,IACtDC,EAAoBD,EAAsB9B,QAAQjP,KAAK/R,EAAEghB,QAAS,YAGtEyB,EAAsBjiB,KAAK,CAAEwiB,SAAUhjB,EAAEghB,QAAS+B,kBAAmBA,QAItEN,GAEXQ,qBA3IW,SA2IUR,EAAuBxB,EAAoBK,EAAoB9N,EAAmBK,EAAUC,EAAYe,GACzH,IAAM3D,EAAY2D,EAAK3D,UACjBW,EAAcgD,EAAKhD,YACrBqR,EAAmBrR,EAAYmP,QAE7B5O,EAAiB/L,KAAK+L,eAAe6O,EAAoBK,EAAoBzM,GAC7EsO,EAAiB/Q,EAAe4O,QAAQoC,QAAQ,OAAOpQ,KAAK,EAAG,QAIrE,GAAImQ,EAAiBD,EACjB,IAAK,IAAIljB,EAAIkjB,EAAkBljB,GAAKmjB,EAAgBnjB,EAAIA,EAAEghB,QAAQhO,IAAI,EAAG,QAAS,CAC9E,IAAMkB,EAAoBmP,GAAWnP,kBACjClU,EACAwT,EACAK,EACAC,GAGJ,GAAII,EAAmB,CACnBgP,EAAmBljB,EACnB,OAMZ,IAAMsjB,EAAsBjd,KAAKua,aAAa6B,EAAsB7c,OAAO,GAAG,GAAGod,SAAUnR,GAEvFqR,EAAmBC,GAAkBD,EAAiB/R,OAAOU,IAAgBX,GAAaoS,GAC1FJ,EAAiBlQ,IAAI,EAAG,QAG5B,IAAMqM,EAAW,CAAEtT,IAAKmX,EAAiBpR,OAAO,cAAevF,IAAK4W,EAAerR,OAAO,eAC1F,OAAOuN,GAEXkE,yBA/KW,SA+KcnB,EAAcC,GAEnC,IAAMmB,EAAY,GACZd,EAAuBN,EAAaO,oBAW1C,OATAD,EAAqB7K,SAAQ,SAAAnO,GAIzB,IAHA,IAAMmZ,EAA0BzR,KAAO1H,EAAEqK,WACnC+O,EAAwB1R,KAAO1H,EAAEsK,SAE9BhU,EAAI6iB,EAAyB7iB,EAAI8iB,EAAuB9iB,EAAIA,EAAEgT,IAAIqP,EAAmC,WAC1GmB,EAAUhjB,KAAKR,EAAEghB,YAIlBwC,GAEXC,qBA/LW,SA+LUrB,EAAcC,EAAmCX,EAAYxQ,EAAWW,GAAa,WAItG,GAAIuQ,GAAgBC,EAAmC,CACnD,IAAIpF,EAAW,GACTuG,EAAYnd,KAAKkd,yBAAyBnB,EAAcC,GAY9D,OAVAmB,EAAU3L,SAAQ,SAAAnO,KACTgY,GAAeA,GAAc,EAAKd,aAAalX,EAAGmI,GAAeX,IAClE+L,EAASzc,KAAK,CACV0F,KAAMwD,EAAEoI,OAAO,SACfrO,KAAMiG,EAAEoI,OAAO,eAMpBmL,EAGX,OAAO,MAEXyG,yBAtNW,SAsNcjB,EAAuBV,GAE5C,IAAM4B,EAA8BlB,EAC/BhI,MAAK,SAAA/Q,GAAC,OAAIA,EAAEsZ,SAASlR,OAAO,WAAaiQ,EAAmBjQ,OAAO,YAExE,GAAI6R,EAA6B,CAC7B,IAAMxG,EAAe,CAAC,CAClBjX,KAAMyd,EAA4BZ,kBAClCtf,KAAMye,GAAW5C,6BAA6BqE,EAA4BZ,qBAG9E,OAAO5F,EAGX,OAAO,MAEXgC,QAtOW,SAsOHyE,GAEJ,IADA,IAAIzE,EAAU,GACLnf,EAAI,EAAGA,GAAK4jB,EAAoB5jB,IACrCmf,EAAQ3e,KAAK,CACT0F,KAAMlG,EACNyD,KAAMzD,EAAE6jB,aAIhB,OAAO1E,KC5Gf,IACE1b,KAAM,yBACNqgB,WAAY,CACVC,iBAAJ,GACIC,qBAAJ,IAEEtkB,KAAM,WAAR,OACA,6BACA,wBACA,QACA,cAEA,UACA,YAGA,qBACA,QACA,cACA,UACA,YAGA,sBACA,QACA,mBAEA,sBACA,QACA,cACA,UACA,YAGA,0BACA,QACA,cACA,UACA,cAIE+H,SAAU,OAAZ,OAAY,CAAZ,kBACA,6CADA,IAEIwc,eAFJ,WAGM,OAAO5d,KAAKkW,uBAAuBC,cAErC0H,YALJ,WAMM,OAAO7d,KAAK6Y,oBAAoB1C,cAElC2H,aARJ,WASM,OAAO9d,KAAKuW,qBAAqBJ,cAEnC4H,aAXJ,WAYM,OAAO/d,KAAK2W,qBAAqBR,cAEnC6H,iBAdJ,WAeM,OAAOhe,KAAK6W,yBAAyBV,cAEvC2C,QAjBJ,WAkBM,OAAOmF,GAAWnF,QAAQ9Y,KAAK4d,eAAeL,qBAEhDvE,SApBJ,WAqBM,IAAN,sBAEA,yBACA,uBACA,YACA,uBAGA,EACA,wCACA,eACA,oCACA,gCACA,EACA,uBAGA,0BACA,EACA,wCACA,wCACA,oBACA,uBACA,OACA,WAGM,OAAOA,GAETpC,SAlDJ,WAqDM,IAAN,sBACA,6BACA,wBACA,OAGA,0BACA,eACA,oCACA,EACA,oBACA,uBAGM,OAAOA,GAETE,aArEJ,WAuEM,IAAN,sBACA,0BACA,uCAEA,yBACA,uBACA,YACA,GAGA,EACA,wCACA,eACA,oCACA,gCACA,EACA,GAGA,8BACA,EACA,GAGM,OAAOA,KAGXvS,QAAS,OAAX,OAAW,CAAX,kBACA,oDADA,IAEIwU,qBAFJ,SAEA,GACM,IAAK/Y,KAAK4d,eACR,OAAO,EAGT,IAAN,uBACA,EACA,sCACA,uBACA,0BAGM,OAAO/P,GAETkJ,MAhBJ,WAgBA,WAEM,GAAI/W,KAAKqF,WAAY,CACnB,IAAR,8BACA,YAAU,OAAV,0BAGY6Y,IACFle,KAAKkW,uBAAuBC,aAAe+H,GAK/Cle,KAAK6Y,oBAAoB1C,aAAenW,KAAK8Y,QAAQ,GAGjD9Y,KAAKgZ,UAAYhZ,KAAKgZ,SAAStT,MACjC1F,KAAKuW,qBAAqBJ,aAAenW,KAAKgZ,SAAStT,IAEnD1F,KAAK4W,WACP5W,KAAK2W,qBAAqBR,aAAenW,KAAK4W,SAAS,GAEnD5W,KAAK8W,eACP9W,KAAK6W,yBAAyBV,aAAenW,KAAK8W,aAAa,OAKvE,OA5CJ,WA4CA,8KACA,2BACA,eACA,oCAGA,eACA,eACA,oBACA,uBAGA,MAZA,uBAaA,gBACA,QACA,WACA,QAEA,+BADA,uCAjBA,iCAwBA,sBACA,qBACA,yCACA,0BA3BA,UA6BA,gCACA,EACA,EACA,EACA,GAjCA,WA6BA,EA7BA,OAsCA,gCAtCA,wBAuCA,eAvCA,2BA4CA,UACA,sBAEA,2BACA,yCAEA,aAIA,6CAEA,gBACA,oCAIA,gBACA,QACA,WACA,0BACA,wCAIA,gBACA,QACA,WACA,UAxEA,+CA4EIN,WAxHJ,SAwHA,GACM,OAAOqF,GAAWrF,WAAW5L,IAE/BuT,iBA3HJ,SA2HA,OAWM,IARA,IAAN,GACA,4BACA,yBACA,0BACA,0BACA,+BAGA,mCACQ,GAAS,MAALxkB,GAAaA,EAAE+K,KAGjB,OAFA/K,EAAE+K,MAAO,GAEF,EAIX,OAAO,KAGXE,MAAO,CACL+M,SAAU,CACR9M,WAAW,EACXC,QAFN,SAEA,gBACQ,GAAIC,EAAU,CACZ,IAAV,2BAEU,GAAI/E,KAAKqF,WAAY,CACnB,IAAZ,8BACA,YAAc,OAAd,0BAGgB6Y,IACFN,EAAiBM,GAIrBle,KAAKkW,uBAAuBC,aAAeyH,KAIjD9E,QAAS,CACPjU,WAAW,EACXC,QAFN,SAEA,KACQ,GAAIC,GAAYA,EAASlL,OAAQ,CAC/B,IAAV,sCAEeif,EAAQzL,SAASrN,KAAK6d,YAAYzgB,QACrC4C,KAAK6Y,oBAAoB1C,aAAepR,EAAS,OAKzDiU,SAAU,CACRnU,WAAW,EACXC,QAFN,SAEA,KACQ,GAAIC,GAAYA,IAAaqZ,EAE3B,GAAIpe,KAAKuW,qBAAqBJ,aAAc,CAC1C,IAAZ,aACA,uCACA,qBAGA,uBACA,uCACA,sCACA,uBACA,2BAGgBkI,GAAoBxQ,IACtB7N,KAAKuW,qBAAqBJ,aAAepR,EAASW,UAGpD1F,KAAKuW,qBAAqBJ,aAAepR,EAASW,MAK1DkR,SAAU,CACR/R,WAAW,EACXC,QAFN,SAEA,KACQ,GAAIC,GAAYA,EAASlL,OAAQ,CAC/B,IAAV,sCAGA,wBACA,qCAEYmG,KAAK2W,qBAAqBR,aAAepR,EAAS,OAK1D+R,aAAc,CACZjS,WAAW,EACXC,QAFN,SAEA,KACQ,GAAIC,GAAYA,EAASlL,OAAQ,CAC/B,IAAV,sCAGA,4BACA,yCAEYmG,KAAK6W,yBAAyBV,aAAepR,EAAS,SCzfyV,M,sCCQvZ,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIa,MAAiB,QAUhC,IAAkB,GAAW,CAACxD,OAAA,KAAKmG,QAAA,KAAM4W,QAAA,KAAK9c,QAAA,KAAMiX,QAAA,KAAK8F,cAAA,OCsPzD,QACEnhB,KAAM,OACNqgB,WAAY,CACVe,UAAJ,GACId,iBAAJ,GACIC,qBAAJ,GACIc,uBAAJ,IAEEplB,KAAM,WAAR,OACA,6BACA,wBACA,QACA,cAEA,UACA,YAGA,sBACA,QACA,mBAEA,sBACA,QACA,mBAEA,sBACA,QACA,cACA,UACA,YAGA,0BACA,QACA,cACA,UACA,cAIE+H,SAAU,OAAZ,OAAY,CAAZ,iCACA,qDACA,gBACA,OACA,kBACA,mBACA,wBANA,IAQIwc,eARJ,WASM,OAAO5d,KAAKkW,uBAAuBC,cAErCrG,aAXJ,WAYM,OAAO9P,KAAKoW,qBAAqBD,cAEnC2H,aAdJ,WAeM,OAAO9d,KAAKuW,qBAAqBJ,cAEnC4H,aAjBJ,WAkBM,OAAO/d,KAAK2W,qBAAqBR,cAEnC6H,iBApBJ,WAqBM,OAAOhe,KAAK6W,yBAAyBV,cAEvCkF,WAvBJ,WAwBM,OAAOrb,KAAKwO,KAAK3D,UAAUC,OAAO,KAAxC,2BAEI4T,gBA1BJ,WA4BM,IAAN,KACA,aACA,6CACA,uBAEA,QACA,iEAEM,OAAOA,GAETjI,uBAtCJ,WAyCM,IAAN,EACA,0CACA,0CACA,oBAEM,OAAOoG,EAAiBpR,OAAO,eAEjCiL,qBAhDJ,WAiDM,OAAO1W,KAAK+L,eAAe4O,QAAQhO,KAAK,EAAG,QAAQlB,OAAO,eAE5DM,eAnDJ,WAoDM,IAAN,oBACA,wCACA,wCACA,WAGM,OAAOA,GAET6K,SA5DJ,WA6DM,IAAN,cACA,6CACA,qBACA,oDACA,gBACA,oBACA,uBAGM,OAAOA,GAETE,aAxEJ,WAyEM,IAAN,MACA,uCACA,+CAEA,4BACA,SACA,0BACA,8CAEA,6CAOM,GACN,kBACA,qCACA,2CACA,CACQ,GAAR,WACA,uCACA,qBACA,CAIU,IAAV,sCAEU,EAAV,wBACY,OAAZ,0DACA,kCACA,CAIU,IAAV,yCAEU,EAAV,wBACY,IAAZ,qDACc,OAAd,0DACA,iCAEY,OAAZ,0DACA,4DAGQ,EAAR,kDAGM,IAAN,kBACA,6CACA,EACA,oDACA,EACA,EACA,uBAGM,OAAOA,GAEToF,qBAvIJ,WAwIM,IAAN,2CACA,cAEA,yBACA,uBACA,EACA,mBAGM,OAAOA,GAETyC,sBAnJJ,WAqJM,IAAN,yCAEM,GAAI7O,EAAc,CAChB,IAAR,GACU8O,YAAa9O,EAAa8O,YAC1BC,YAAa/O,EAAa+O,YAC1B/S,yBAA0BgE,EAAahE,yBACvCyP,kBAAmBzL,EAAayL,kBAChCC,kBAAmB1L,EAAa0L,mBAGlC,OAAOmD,EAEP,IAAR,EACA,+CAOA,YACA,cAAU,OAAV,sDACA,MACA,YAOA,YACA,cAAU,OAAV,sDACA,MACA,YAEA,EACA,UACA,cAAU,OACV,4DACA,+BAGA,YACA,cAAU,OAAV,8CACA,wBAGA,YACA,cAAU,OAAV,8CACA,wBAGA,GACUC,YAAaE,EACbD,YAAaE,EACbjT,yBAA0BkT,EAC1BzD,kBAAmB0D,EACnBzD,kBAAmB0D,GAGrB,OAAO,KAIb3a,QAAS,OAAX,OAAW,CAAX,kBACA,gBACA,eACA,+BACA,sBACA,wBALA,IAOIwS,MAPJ,WAOA,WAEM,GAAI/W,KAAKqF,WAAY,CACnB,IAAR,6BACA,YAAU,OAAV,0BAGY6Y,IACFle,KAAKkW,uBAAuBC,aAAe+H,GAkB/Cle,KAAKoW,qBAAqBD,aAAe,KAGrCnW,KAAKyW,yBACPzW,KAAKuW,qBAAqBJ,aAAenW,KAAKyW,uBAE1CzW,KAAK4W,WACP5W,KAAK2W,qBAAqBR,aAAenW,KAAK4W,SAAS,GAEnD5W,KAAK8W,eACP9W,KAAK6W,yBAAyBV,aAAenW,KAAK8W,aAAa,OAKvEd,yCAhDJ,WAiDUhW,KAAK8S,mBACP9S,KAAKqK,kBAAkB,CACrB3F,MAAM,EACNU,SAAS,EACTjI,QAASkC,OAAO8f,KAAKC,uBAGvBpf,KAAK+V,2BAA4B,GAGrC,OA3DJ,WA2DA,gLACA,sBACA,wCACA,yCACA,0BACA,uCALA,SAOA,UACA,EACA,EACA,EACA,EACA,GAZA,UAOA,EAPA,OAiBA,gCAjBA,wBAkBA,eAlBA,2BAwBA,GACA,QACA,cACA,qBAEA,8BAIA,cACA,yBAEA,sCACA,gBACA,sBACA,QACA,6CAIA,gBACA,wBAIA,gBACA,QACA,WACA,sCACA,wCArDA,+CA0DIS,WArHJ,SAqHA,GACM,OAAOqF,GAAWrF,WAAW5L,IAE/B0L,UAxHJ,SAwHA,GACMtW,KAAKoW,qBAAqBD,aAAe,MAE3CkJ,0BA3HJ,SA2HA,GACM,IAAN,6BACA,YAAQ,OAAR,qBAGM,GAAInB,IACFle,KAAKkW,uBAAuBC,aAAe+H,EAEvClP,EAAaE,WAAW,CAC1B,IAAV,gBACA,YAAY,OACZ,kDACA,gCAkBc4K,IACF9Z,KAAKoW,qBAAqBD,aAAe2D,KAKjDwF,iBA/JJ,WAgKM,GAAItf,KAAKuf,MAAMC,eAAgB,CAC7B,IAAR,iBAEA,wBACA,4DACA,iDAEQxf,KAAKuf,MAAMC,eAAe/b,MAAMI,OAAS4b,EAAgB,SAI/D7a,MAAO,CACL+M,SAAU,CACR9M,WAAW,EACXC,QAFN,SAEA,gBACQ,GAAIC,EAAU,CACZ,GAAI/E,KAAKqF,WAAY,CACnB,IAAZ,6BACA,YAAc,OAAd,0BAGY,GAAI6Y,EAEF,YADAle,KAAKkW,uBAAuBC,aAAe+H,GAK/Cle,KAAKkW,uBAAuBC,aAAenW,KAAKwT,gBAAgB,MAQtE0C,uBAxBJ,SAwBA,KACUnR,EAASoR,eAAiBiI,EAASjI,eACrCnW,KAAKoW,qBAAqBD,aAAe,OAG7CM,uBAAwB,CACtB5R,WAAW,EACXC,QAFN,SAEA,KACYC,GAAYA,IAAaqZ,IAIrC,yCACA,WACA,uCACA,uBAGYpe,KAAKuW,qBAAqBJ,aACtC,gCAKIS,SAAU,CACR/R,WAAW,EACXC,QAFN,SAEA,KACQ,GAAIC,GAAYA,EAASlL,OAAQ,CAC/B,IAAV,sCAEe6lB,EAAarS,SAASrN,KAAK+d,aAAa3gB,QAC3C4C,KAAK2W,qBAAqBR,aAAepR,EAAS,OAK1D+R,aAAc,CACZjS,WAAW,EACXC,QAFN,SAEA,KACQ,GAAIC,GAAYA,EAASlL,OAAQ,CAC/B,IAAV,sCAEeid,EAAazJ,SAASrN,KAAKge,iBAAiB5gB,QAC/C4C,KAAK6W,yBAAyBV,aAAepR,EAAS,OAK9DwK,OAxEJ,SAwEA,KACM,GAAIxK,GAAYA,EAASzG,OAA4B,SAAnByG,EAAS2M,MAAkB,CAE3D,IAAR,+BACA,QACA,sBAGY1C,GACFhP,KAAKqf,0BAA0BrQ,GAC/BhP,KAAKmV,6BAA6BnG,GAElChP,KAAK+V,2BAA4B,GAEjC/V,KAAKwH,mBAAmB,CACtBhC,MAAOnG,OAAO8f,KAAKQ,mBACnBxiB,QAASkC,OAAO8f,KAAKS,qBAK7BxI,OAAQ,CACNvS,WAAW,EACXC,QAFN,SAEA,KACQ,GAAgB,SAAZ+a,EAAGziB,QAAqB0iB,GAAsB,SAAdA,EAAK1iB,OAEjD,sBACA,mBACA,sBACA,CAEY,IAAZ,+BACA,qBACA,sBAGgB4R,IACFhP,KAAKmV,6BAA6BnG,GAElChP,KAAK+V,2BAA4B,EACjC/V,KAAKqf,0BAA0BrQ,GAG/BhP,KAAKe,QAAQgf,QAAQ,CAAnC,yCAOEC,UApiBF,WAoiBA,WACIhgB,KAAKigB,WAAU,WAAnB,gCAEE1I,iBAviBF,SAuiBA,OACIC,GAAK,SAAT,GACUC,EAAG1B,2BAA6B0B,EAAG3E,qBACrC2E,EAAG1B,2BAA4B,OAIrCoI,iBA9iBF,SA8iBA,OAEI,GAAIne,KAAKuf,MAAMW,uBAAwB,CACrC,IAAN,qDACA,EACA,EACA,GAGM,GAAIC,EAEF,YADA3I,GAAK,GAaT,IARA,IAAJ,GACA,4BACA,0BACA,0BACA,0BACA,+BAGA,mCACM,GAAS,MAAL7d,GAAaA,EAAE+K,KAIjB,OAHA/K,EAAE+K,MAAO,OAET8S,GAAK,GAKTA,MCj2BqY,M,wECSrY,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIa,MAAiB,QAahC,IAAkB,GAAW,CAACjW,OAAA,KAAKmG,QAAA,KAAM4W,QAAA,KAAK9c,QAAA,KAAMiX,QAAA,KAAKzQ,UAAA,KAAQuW,cAAA,KAAWhY,WAAA,KAAS6Z,cAAA,UAMrF,KAAkB,GAAW,CAACC,OAAA,UCvC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,qBAAqBO,YAAY,iBAAiB,CAACf,EAAG,YAAY,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,YAAY,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIugB,SAAS,CAACngB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,qBAAqB,GAAIjB,EAAIwgB,gBAAkBxgB,EAAIwgB,eAAe3M,MAAOzT,EAAG,MAAM,CAACA,EAAG,SAAS,CAACe,YAAY,2DAA2DX,YAAY,CAAC,4BAA4B,MAAM,6BAA6B,OAAOF,MAAM,CAAC,KAAO,KAAK,CAAEN,EAAIwgB,eAAoB,MAAEpgB,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,sBAAsB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAIwgB,eAAe3M,MAAM/Z,QAAQ,UAAUkG,EAAI4B,GAAuC,IAApC5B,EAAIwgB,eAAe3M,MAAM/Z,OAAe,GAAK,KAAK,eAAe,IAAI,GAAGsG,EAAG,MAAM,CAACe,YAAY,aAAa,CAACf,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,aAAab,MAAM,CAAC,MAAQ,QAAQ,CAACN,EAAIiB,GAAG,gBAAgB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAG,gEAAgE,IAAI,KAAKb,EAAG,MAAM,CAAC8V,IAAI,0BAA0B/U,YAAY,cAAcnB,EAAI+X,GAAI/X,EAAIwgB,eAAoB,OAAE,SAASzG,EAAKngB,GAAG,OAAOwG,EAAG,SAAS,CAACvB,IAAIjF,EAAEuH,YAAY,OAAOb,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIygB,mBAAmB1G,MAAS,CAAC3Z,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,oCAAoC,CAACf,EAAG,QAAQ,CAACe,YAAY,QAAQb,MAAM,CAAC,IAAO,GAAKN,EAAI0gB,cAAiB3G,EAAK4G,cAAc,GAAK,eAAe,IAAI,aAAa,MAAM,YAAY,UAAU,GAAGvgB,EAAG,QAAQ,CAACe,YAAY,mBAAmBX,YAAY,CAAC,cAAc,SAAS,CAACJ,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,kCAAkC,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI8Z,eAAeC,EAAK6G,SAAU7G,EAAKE,YAAY,GAAG7Z,EAAG,QAAQ,CAACe,YAAY,aAAab,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,UAAU,CAACf,EAAG,OAAO,CAACe,YAAY,QAAQ,CAACf,EAAG,SAAS,CAACe,YAAY,gBAAgB,CAACnB,EAAIiB,GAAG,uBAAuBjB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAI2Z,aAAaI,EAAKpM,UAAWoM,EAAKnM,UAAU,MAAM,GAAGxN,EAAG,OAAO,CAACA,EAAG,SAAS,CAACe,YAAY,aAAaX,YAAY,CAAC,gBAAgB,QAAQ,CAACR,EAAIiB,GAAG,cAAcjB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAI6gB,mBAAoB9G,EAAK+G,oBAAqB/G,EAAKgH,iBAAkB,MAAM,MAAM,IAAI,IAAI,IAAI,MAAK,IAAI,GAAG/gB,EAAI+G,MAAM,IACjkF,GAAkB,GC0GtB,IAIEzN,KAAM,WAAR,OACA,sBAEE+H,SAAU,OAAZ,OAAY,CAAZ,GACA,mCAEEmD,QAAS,OAAX,OAAW,CAAX,kBACA,wCADA,IAEIic,mBAFJ,SAEA,GACMxgB,KAAKsV,mBAAmBwE,GACxB9Z,KAAKe,QAAQ5G,KAAK,CAChBiD,KAAM,iBACN4Z,OAAQ,CAAhB,0DAGI6C,eATJ,SASA,KACM,MAAO,GAAb,gCAEIH,aAZJ,SAYA,KACM,OAAOmC,GAAWnC,aAAaC,EAAgBC,IAEjDgH,mBAfJ,SAeA,KACM,MAAO,GAAb,yBAEItB,iBAlBJ,WAmBM,GAAItf,KAAKuf,MAAMwB,wBAAyB,CACtC,IAAR,iBACA,EACA,iDAEQ/gB,KAAKuf,MAAMwB,wBAAwBtd,MAAMI,OAAS4b,EAAgB,SAIxEO,UAtCF,WAsCA,WACIhgB,KAAKugB,eAAiBvgB,KAAK6P,cAE3B7P,KAAKigB,WAAU,WAAnB,iCCpJkZ,MCO9Y,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAYhC,IAAkB,GAAW,CAAC1e,OAAA,KAAKmG,QAAA,KAAM4W,QAAA,KAAK9c,QAAA,KAAMC,OAAA,KAAKgX,QAAA,KAAKlS,WAAA,KAAS6Z,cAAA,UAMvE,KAAkB,GAAW,CAACC,OAAA,UCpC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,sBAAsB,CAACR,EAAG,YAAY,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,YAAY,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIihB,eAAe,CAAC7gB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,sBAAsB,GAAIjB,EAAQ,KAAEI,EAAG,MAAM,CAAC8V,IAAI,2BAA2B/U,YAAY,cAAc,CAACf,EAAG,SAAS,CAACI,YAAY,CAAC,6BAA6B,MAAM,4BAA4B,OAAOF,MAAM,CAAC,KAAO,KAAK,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAO,GAAKN,EAAI0gB,cAAiB1gB,EAAI+Z,KAAK4G,cAAc,GAAK,aAAa,SAASvgB,EAAG,MAAM,CAACe,YAAY,mBAAmB,CAACf,EAAG,MAAM,CAACe,YAAY,yCAAyCX,YAAY,CAAC,aAAa,YAAY,CAACR,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAI8Z,eAAe9Z,EAAI+Z,KAAK6G,SAAU5gB,EAAI+Z,KAAKE,QAAQ,OAAQja,EAAI+Z,KAAmB,eAAE3Z,EAAG,MAAM,CAACe,YAAY,iCAAiCX,YAAY,CAAC,aAAa,YAAY,CAACR,EAAIiB,GAAG,0DAA0DjB,EAAI+G,KAAK3G,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI+Z,KAAKmH,gBAAgB,GAAG9gB,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,yBAAyB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyW,WAAWzW,EAAI+Z,KAAKpM,gBAAgB,GAAGvN,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,gBAAgB,CAACnB,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI2Z,aAAa3Z,EAAI+Z,KAAKpM,UAAW3N,EAAI+Z,KAAKnM,cAAc,GAAGxN,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,eAAe,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI6gB,mBAAoB7gB,EAAI+Z,KAAK+G,oBAAqB9gB,EAAI+Z,KAAKgH,qBAAsB,GAAI/gB,EAAI+Z,KAAKoH,iBAAmBnhB,EAAI+Z,KAAKoH,gBAAgBC,gBAAiBhhB,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI+Z,KAAKoH,gBAAgBC,qBAAqB,GAAGphB,EAAI+G,KAAM/G,EAA+B,4BAAEI,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAQL,KAAa,SAAI,yBAA0B,aAAa,KAAK,YAAY,SAAS,GAAGG,EAAG,QAAQ,CAACJ,EAAIiB,GAAG,4CAA4C,GAAGjB,EAAI+G,KAAK3G,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,sBAAsB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAG,gFAAgF,GAAIjB,EAAI+Z,KAAoB,gBAAE3Z,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAG,qBAAqBjB,EAAI4B,GAAG5B,EAAI+Z,KAAKsH,gBAAgBC,iBAAiB,kBAAkB,GAAGthB,EAAI+G,MAAM,GAAG3G,EAAG,MAAM,CAACe,YAAY,qBAAqB,CAACf,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,UAAU,MAAQ,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIuhB,SAASvhB,EAAI+Z,SAAS,CAAC3Z,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,oBAAoBjB,EAAIiB,GAAG,eAAe,IAAI,GAAGb,EAAG,QAAQ,CAAEJ,EAAiB,cAAEI,EAAG,QAAQ,CAACvB,IAAI,IAAIyB,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,SAAS,MAAQ,IAAIQ,GAAG,CAAC,MAAQd,EAAIwhB,iBAAiB,CAACphB,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,wBAAwBjB,EAAIiB,GAAG,UAAU,GAAGb,EAAG,QAAQ,CAACvB,IAAI,IAAIyB,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,SAAS,MAAQ,IAAIQ,GAAG,CAAC,MAAQd,EAAImX,YAAY,CAAC/W,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,uBAAuBjB,EAAIiB,GAAG,mBAAmB,IAAI,IAAI,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,WAAW,CAACF,EAAG,WAAW,CAACE,MAAM,CAAC,YAAY,QAAQqG,MAAM,CAACpI,MAAOyB,EAAIyhB,cAAkB,KAAE7a,SAAS,SAAUC,GAAM7G,EAAI6X,KAAK7X,EAAIyhB,cAAe,OAAQ5a,IAAMjG,WAAW,uBAAuB,CAACR,EAAG,SAAS,CAACe,YAAY,QAAQ,CAACf,EAAG,eAAe,CAACe,YAAY,QAAQ,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyhB,cAAcrkB,YAAYgD,EAAG,kBAAkB,CAACe,YAAY,aAAa,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyhB,cAAcC,uBAAuBthB,EAAG,MAAM,CAACU,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAI2hB,qBAAqBhd,MAAO,KAAQ,CAAE3E,EAAI4hB,6BAA+B5hB,EAAI6hB,iBAAkBzhB,EAAG,MAAM,CAACe,YAAY,cAAc,CAACf,EAAG,OAAO,CAACe,YAAY,sBAAsB,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI8hB,iCAAiC1hB,EAAG,MAAMA,EAAG,UAAUJ,EAAI+G,KAAK3G,EAAG,eAAe,CAACe,YAAY,OAAOb,MAAM,CAAC,qBAAqB,qBAAqB,MAAQN,EAAI2hB,qBAAqBvL,aAAa/Y,KAAK,SAAW,MAAM+C,EAAG,2BAA2B,CAACE,MAAM,CAAC,MAAQ,iBAAiB,KAAON,EAAI+hB,yBAAyB,OAAS/hB,EAAI2hB,qBAAqB,SAAW,SAAS7gB,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAI2hB,qBAAqB5gB,OAAY,GAAGX,EAAG,iBAAiB,CAACA,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,OAAS,UAAU,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIyhB,cAAc9c,MAAO,KAAS,CAAC3E,EAAIiB,GAAG,YAAYb,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIgiB,KAAKhiB,EAAI+Z,SAAS,CAAC/Z,EAAIiB,GAAG,cAAc,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,GAAGjB,EAAI+G,MAAM,IACvxK,GAAkB,G,aCIP,IACXkb,gBADW,SACKC,GACPC,GAAMtP,QAAQC,gBACfqP,GAAMC,OAAO,wBAAyB,CAClChL,UAAW8K,EACXzT,KAAMzD,SAENmX,GAAMtP,QAAQG,oBACdqP,GAAOjoB,KAAK,CACRiD,KAAM,iBAIVia,GAAUC,aClBtB,GAAS,WAAa,IAAIvX,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,WAAW,CAACF,EAAG,WAAW,CAACE,MAAM,CAAC,WAAa,GAAG,YAAYN,EAAI2X,UAAY,KAAKhR,MAAM,CAACpI,MAAOyB,EAAI4X,OAAW,KAAEhR,SAAS,SAAUC,GAAM7G,EAAI6X,KAAK7X,EAAI4X,OAAQ,OAAQ/Q,IAAMjG,WAAW,gBAAgB,CAACR,EAAG,SAAS,CAACA,EAAG,eAAe,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyF,UAAUrF,EAAG,aAAcJ,EAAQ,KAAEI,EAAG,cAAc,CAACe,YAAY,OAAOuC,MAAM,CAAGI,OAAQ9D,EAAI8D,SAAW,CAAC1D,EAAG,gBAAgB,CAACuG,MAAM,CAACpI,MAAOyB,EAAc,WAAE4G,SAAS,SAAUC,GAAM7G,EAAI8X,WAAWjR,GAAKjG,WAAW,eAAeZ,EAAI+X,GAAI/X,EAAQ,MAAE,SAAS0R,EAAK9X,GAAG,OAAOwG,EAAG,MAAM,CAACvB,IAAIjF,EAAEuH,YAAY,OAAOL,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIgY,WAAWtG,MAAS,CAACtR,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,UAAU,CAACE,MAAM,CAAC,MAAQoR,EAAKrU,KAAK,MAAQqU,EAAK5R,SAAS,GAAIE,EAAIsiB,kBAAkB5Q,GAAOtR,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,MAAM,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAON,EAAIoB,SAAW,yBAA0B,aAAa,KAAK,YAAY,SAAS,GAAGpB,EAAI+G,MAAM,IAAI,MAAK,IAAI,GAAG/G,EAAI+G,KAAK3G,EAAG,aAAaA,EAAG,iBAAiB,CAACA,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIiY,aAAa,CAACjY,EAAIiB,GAAG,aAAa,IAAI,IAAI,IAAI,IAC5qC,GAAkB,GC4CtB,IACE,KAAF,2BACE,MAAF,CACI,MAAJ,OACI,KAAJ,MACI,OAAJ,OACI,SAAJ,OACI,OAAJ,CACM,KAAN,QACM,aAAN,SAGE,KAAF,WAAI,MAAJ,CACM6W,WAAY,OAEhB,MAAF,CACI,cAAJ,cAIM,KAAN,oCACA,8BACA,OAGE,QAAF,CACI,WADJ,WAEM,KAAN,uBACQ,MAAR,EACQ,aAAR,4BAGI,WAPJ,SAOA,GACM,KAAN,uBACQ,MAAR,EACQ,aAAR,KAGI,kBAbJ,SAaA,GAEM,OAAN,iECrF6Z,MCOzZ,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAiBhC,IAAkB,GAAW,CAACtW,OAAA,KAAKmG,QAAA,KAAMC,aAAA,OAAaC,UAAA,OAAUC,WAAA,OAAWyW,QAAA,KAAKxW,UAAA,KAAQC,WAAA,KAAStG,OAAA,KAAK8W,UAAA,KAAOC,eAAA,KAAYC,QAAA,KAAKzQ,UAAA,OC6M9H,QACE5K,KAAM,iBACNqgB,WAAY,CACVC,iBAAJ,GACI4E,yBAAJ,IAEErK,MAAO,CACL2J,iBAAkB1J,QAEpB7e,KAAM,WAAR,OACA,UACA,iBACA,UACA,UACA,+BACA,+BACA,+BACA,sBACA,eACA,QACA,WACA,uBAEA,sBACA,QACA,cACA,UACA,YAGA,wDAEE+H,SAAU,OAAZ,OAAY,CAAZ,iCACA,sEACA,+CAFA,IAGI0gB,yBAHJ,WAIM,MAAO,CAAC9hB,KAAKuiB,iBAAnB,qDAGEhe,QAAS,OAAX,OAAW,CAAX,kBACA,+DADA,IAEI+c,SAFJ,SAEA,GACMthB,KAAKe,QAAQ5G,KAAK,CAChBiD,KAAM,WACN4Z,OAAQ,CACNwL,aAAc1I,EAAK2I,gBAIzBC,UAVJ,WAmBM,GARI1iB,KAAK8Z,KAAK6I,iBACZ3iB,KAAK0hB,qBAAqBvL,aAClC,iCAEQnW,KAAK4iB,4BACb,2CAAU,IAAV,EAAU,OAAV,+EAGU5iB,KAAKqF,YAEHrF,KAAKsS,uBAAwB,CAC/B,IAAV,8BAEctD,EAAaK,WACfrP,KAAK+Z,KAAO/Z,KAAK8Z,KAAK6I,eAAevO,MACjD,YAAc,OACd,mDAGgBpU,KAAK+Z,MACP/Z,KAAK0hB,qBAAqBvL,aAAenW,KAAK+Z,KAC9C/Z,KAAK2hB,6BAA8B,GAEnC3hB,KAAK2hB,6BAA8B,KAM7CzK,UAxCJ,WAyCM2L,GAAab,gBAAgBhiB,KAAKoX,OAAOha,OAE3C4jB,aA3CJ,WA4CUhhB,KAAKoX,OAAO0L,MAAMC,SAEpB/iB,KAAKgjB,SAELhjB,KAAKsgB,UAGTzG,eAnDJ,SAmDA,KACM,MAAO,GAAb,gCAEIH,aAtDJ,SAsDA,KACM,OAAOmC,GAAWnC,aAAaC,EAAgBC,IAEjDgH,mBAzDJ,SAyDA,KACM,MAAO,GAAb,yBAEIpK,WA5DJ,SA4DA,GACM,OAAOqF,GAAWrF,WAAW5L,IAE/BiX,6BA/DJ,WAgEM,OAAI7hB,KAAK4hB,iBACAviB,OAAO8f,KAAK8D,sBAAsBlD,QACjD,iBACA,uBAGa,MAETwB,eAxEJ,WAyEMvhB,KAAKwhB,cAAcrkB,QAAUkC,OAAO8f,KAAK+D,cACzCljB,KAAKwhB,cAAc9c,MAAO,EACtB1E,KAAK8Z,KAAKoH,gBACZlhB,KAAKwhB,cAAcC,mBAAqBzhB,KAAK8Z,KAAKoH,gBAAgBO,mBAGlEzhB,KAAKwhB,cAAcC,mBAAqB,MAG5C,KAlFJ,SAkFA,yKACA,yBAEA,qBAHA,gBAIA,qBACA,QACA,WACA,2CAPA,8BAWA,2CAXA,SAaA,QACA,SACA,YACA,oBACA,WACA,GAlBA,OAaA,EAbA,OAqBA,2CACA,EACA,EAIA,WACA,wBACA,gBACA,QACA,WACA,gCAEA,yCAEA,gBACA,QACA,WACA,2BACA,YAGA,sDAEA,gBACA,QACA,WACA,2BACA,YAjDA,+CAgEInC,iBAlJJ,WAmJM,GAAItf,KAAKuf,MAAM4D,yBAA0B,CACvC,IAAR,iBACA,uCAEQnjB,KAAKuf,MAAM4D,yBAAyB1f,MAAMI,OAAS4b,EAAgB,SAIzEO,UAlMF,WAkMA,WACIhgB,KAAK8Z,KAAO9Z,KAAK8P,aACjB9P,KAAK0iB,YACL1iB,KAAKigB,WAAU,WAAnB,gCAEE9B,iBAvMF,SAuMA,OAGI,IAFA,IAAJ,iDAEA,mCACM,GAAS,MAALxkB,GAAaA,EAAE+K,KAIjB,OAHA/K,EAAE+K,MAAO,OAET8S,GAAK,GAKTA,MCnc+Y,MCQ/Y,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,MAAiB,QAkBhC,IAAkB,GAAW,CAACjW,OAAA,KAAKmG,QAAA,KAAMC,aAAA,OAAayb,cAAA,OAAcvb,WAAA,OAAWyW,QAAA,KAAKxW,UAAA,KAAQtG,QAAA,KAAMC,OAAA,KAAKgX,QAAA,KAAKzQ,UAAA,KAAQuW,cAAA,KAAWhY,WAAA,KAAS6Z,cAAA,UAMxI,KAAkB,GAAW,CAACC,OAAA,UC3C9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,qBAAqBO,YAAY,iBAAiB,CAACf,EAAG,YAAY,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,YAAY,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIugB,SAAS,CAACngB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,qBAAqB,GAAIjB,EAAkB,eAAEI,EAAG,MAAM,CAACA,EAAG,SAAS,CAACe,YAAY,2DAA2DX,YAAY,CAAC,4BAA4B,MAAM,6BAA6B,OAAOF,MAAM,CAAC,KAAO,KAAK,CAAEN,EAAIwgB,eAAoB,MAAEpgB,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,sBAAsB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAG,sBAAsB,IAAI,GAAGb,EAAG,MAAM,CAACe,YAAY,aAAa,CAACf,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,aAAab,MAAM,CAAC,MAAQ,QAAQ,CAACN,EAAIiB,GAAG,gBAAgB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAG,+DAA+D,IAAI,KAAKb,EAAG,MAAM,CAAC8V,IAAI,0BAA0B/U,YAAY,cAAc,CAACf,EAAG,SAAS,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIygB,qBAAqB,CAACrgB,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,oCAAoC,CAACf,EAAG,QAAQ,CAACe,YAAY,QAAQb,MAAM,CAAC,IAAO,GAAKN,EAAIsjB,gBAAmBtjB,EAAIwgB,eAAexM,cAAcuP,gBAAgB,GAAK,eAAe,IAAI,aAAa,MAAM,YAAY,UAAU,GAAGnjB,EAAG,QAAQ,CAACe,YAAY,mBAAmBX,YAAY,CAAC,cAAc,SAAS,CAACJ,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,kCAAkC,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIwgB,eAAexM,cAAckN,gBAAgB,GAAG9gB,EAAG,QAAQ,CAACe,YAAY,aAAab,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,UAAU,CAACf,EAAG,OAAO,CAACe,YAAY,QAAQ,CAACf,EAAG,SAAS,CAACe,YAAY,gBAAgB,CAACnB,EAAIiB,GAAG,uBAAuBjB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAI2Z,aAAc3Z,EAAIwgB,eAAexM,cAAcrG,UAAW3N,EAAIwgB,eAAexM,cAAcpG,UAAW,MAAM,GAAGxN,EAAG,OAAO,CAACA,EAAG,SAAS,CAACe,YAAY,aAAaX,YAAY,CAAC,gBAAgB,QAAQ,CAACR,EAAIiB,GAAG,iBAAiBjB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAI6gB,mBAAoB7gB,EAAIwgB,eAAexM,cAAcwP,uBAAwBxjB,EAAIwgB,eAAexM,cAAcyP,6BAA8B,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,GAAGzjB,EAAI+G,MAAM,IAC//E,GAAkB,GCyFtB,IACE1J,KAAM,4BACN/D,KAAM,WAAR,OACA,sBAEE+H,SAAU,OAAZ,OAAY,CAAZ,GACA,8CAEEmD,QAAS,CACPic,mBADJ,WAEMxgB,KAAKe,QAAQ5G,KAAK,CAChBiD,KAAM,yBAGVsc,aANJ,SAMA,KACM,OAAOmC,GAAWnC,aAAaC,EAAgBC,IAEjDgH,mBATJ,SASA,KACM,MAAO,GAAb,yBAEItB,iBAZJ,WAaM,GAAItf,KAAKuf,MAAMwB,wBAAyB,CACtC,IAAR,iBACA,EACA,iDAEQ/gB,KAAKuf,MAAMwB,wBAAwBtd,MAAMI,OAAS4b,EAAgB,QAIxEO,UA9BF,WA8BA,WACIhgB,KAAKugB,eAAiBvgB,KAAKyS,yBAE3BzS,KAAKigB,WAAU,WAAnB,iCC3H8Z,MCO1Z,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAYhC,IAAkB,GAAW,CAAC1e,OAAA,KAAKmG,QAAA,KAAM4W,QAAA,KAAK9c,QAAA,KAAMC,OAAA,KAAKgX,QAAA,KAAKlS,WAAA,KAAS6Z,cAAA,UAMvE,KAAkB,GAAW,CAACC,OAAA,UCpC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,sBAAsB,CAACR,EAAG,YAAY,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,YAAY,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIihB,eAAe,CAAC7gB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,sBAAsB,GAAIjB,EAAgB,aAAEI,EAAG,MAAM,CAAC8V,IAAI,2BAA2B/U,YAAY,cAAc,CAACf,EAAG,SAAS,CAACI,YAAY,CAAC,6BAA6B,MAAM,4BAA4B,OAAOF,MAAM,CAAC,KAAO,KAAK,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAO,GAAKN,EAAIsjB,gBAAmBtjB,EAAI0jB,aAAaH,gBAAgB,GAAK,aAAa,SAASnjB,EAAG,MAAM,CAACe,YAAY,mBAAmB,CAACf,EAAG,MAAM,CAACe,YAAY,yCAAyCX,YAAY,CAAC,aAAa,YAAY,CAACR,EAAIiB,GAAG,qBAAqBb,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,2BAA2B,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI0jB,aAAaC,SAAS,GAAGvjB,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI0jB,aAAaxC,gBAAgB,GAAG9gB,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,yBAAyB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyW,WAAWzW,EAAI0jB,aAAa/V,gBAAgB,GAAGvN,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,gBAAgB,CAACnB,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI2Z,aAAa3Z,EAAI0jB,aAAa/V,UAAW3N,EAAI0jB,aAAa9V,cAAc,GAAGxN,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI6gB,mBAAoB7gB,EAAI0jB,aAAaF,uBAAwBxjB,EAAI0jB,aAAaD,iCAAkC,IAAI,GAAGrjB,EAAG,MAAM,CAACe,YAAY,qBAAqB,CAACf,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAAEJ,EAAiB,cAAEI,EAAG,QAAQ,CAACvB,IAAI,IAAIyB,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,SAAS,MAAQ,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIgiB,KAAKhiB,EAAI0jB,iBAAiB,CAACtjB,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,wBAAwBjB,EAAIiB,GAAG,UAAU,GAAGb,EAAG,QAAQ,CAACvB,IAAI,IAAIyB,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,SAAS,MAAQ,IAAIQ,GAAG,CAAC,MAAQd,EAAImX,YAAY,CAAC/W,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,uBAAuBjB,EAAIiB,GAAG,mBAAmB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAGjB,EAAI+G,MAAM,IAClmF,GAAkB,GC0HtB,IACE1J,KAAM,sBACN/D,KAAM,WAAR,OACA,oBAEE+H,SAAU,OAAZ,OAAY,CAAZ,GACA,yDAEEmD,QAAS,OAAX,OAAW,CAAX,kBACA,2CADA,IAEI2S,UAFJ,WAGM2L,GAAab,gBAAgBhiB,KAAKoX,OAAOha,OAE3C4jB,aALJ,WAMUhhB,KAAKoX,OAAO0L,MAAMC,SAEpB/iB,KAAKgjB,SAELhjB,KAAKsgB,UAGT5G,aAbJ,SAaA,KACM,OAAOmC,GAAWnC,aAAaC,EAAgBC,IAEjDgH,mBAhBJ,SAgBA,KACM,MAAO,GAAb,yBAKIpK,WAtBJ,SAsBA,GACM,OAAOqF,GAAWrF,WAAW5L,IAE/B,KAzBJ,SAyBA,oLACA,aACA,WACA,YACA,oBACA,OALA,OACA,EADA,OAQA,aACA,YACA,kBAEA,EACA,EAEA,wBACA,EACA,wBACA,qBACA,MACA,kBACA,uDACA,MAtBA,8CAyBI0U,iBAlDJ,WAmDM,GAAItf,KAAKuf,MAAM4D,yBAA0B,CACvC,IAAR,iBACA,uCAEQnjB,KAAKuf,MAAM4D,yBAAyB1f,MAAMI,OAAS4b,EAAgB,SAIzEO,UAnEF,WAmEA,WACIhgB,KAAKyjB,aAAezjB,KAAKyS,yBAAyBsB,cAElD/T,KAAKigB,WAAU,WAAnB,iCCjMwZ,MCQpZ,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,MAAiB,QAYhC,IAAkB,GAAW,CAAC1e,OAAA,KAAKmG,QAAA,KAAM4W,QAAA,KAAK9c,QAAA,KAAMC,OAAA,KAAKgX,QAAA,KAAKlS,WAAA,KAAS6Z,cAAA,UAMvE,KAAkB,GAAW,CAACC,OAAA,UCrC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,sBAAsB,CAACR,EAAG,MAAM,CAACA,EAAG,YAAY,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,YAAY,CAACF,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,SAAS,CAACE,MAAM,CAAC,aAAa,GAAG,mBAAmB,UAAU,KAAO,GAAG,OAAS,MAAMqG,MAAM,CAACpI,MAAOyB,EAAQ,KAAE4G,SAAS,SAAUC,GAAM7G,EAAI4jB,KAAK/c,GAAKjG,WAAW,SAAS,CAACR,EAAG,QAAQ,CAACe,YAAY,+CAA+C,CAACnB,EAAIiB,GAAG,WAAWb,EAAG,QAAQ,CAACe,YAAY,+CAA+C,CAACnB,EAAIiB,GAAG,cAAcb,EAAG,QAAQ,CAACe,YAAY,+CAA+C,CAACnB,EAAIiB,GAAG,eAAeb,EAAG,cAAc,IAAI,GAAIJ,EAAe,YAAEI,EAAG,MAAM,CAAC8V,IAAI,wBAAwB,CAAC9V,EAAG,eAAe,CAACe,YAAY,aAAaX,YAAY,CAAC,OAAS,QAAQmG,MAAM,CAACpI,MAAOyB,EAAQ,KAAE4G,SAAS,SAAUC,GAAM7G,EAAI4jB,KAAK/c,GAAKjG,WAAW,SAAS,CAACR,EAAG,aAAa,CAACI,YAAY,CAAC,OAAS,SAAS,CAACJ,EAAG,gBAAgB,CAACE,MAAM,CAAC,SAAWN,EAAI6jB,+BAA+BjQ,QAC1nC,SAAUtQ,GAAK,OAAOtD,EAAI4K,QAAQtH,EAAEqK,YAA+B,qBAAjBrK,EAAEwgB,kBAChD,GAAG1jB,EAAG,aAAa,CAACI,YAAY,CAAC,OAAS,SAAS,CAACJ,EAAG,gBAAgB,CAACE,MAAM,CAAC,SAAWN,EAAI6jB,+BAA+BjQ,QACjI,SAAUtQ,GAAK,OAAOtD,EAAIwL,UAAUlI,EAAEqK,WAAa,GAChC,qBAAjBrK,EAAEwgB,kBACA,GAAG1jB,EAAG,aAAa,CAACI,YAAY,CAAC,OAAS,SAAS,CAACJ,EAAG,gBAAgB,CAACE,MAAM,CAAC,SAAWN,EAAI6jB,+BAA+BjQ,QACjI,SAAUtQ,GAAK,MAAwB,qBAAjBA,EAAEwgB,kBACpB,IAAI,IAAI,GAAG9jB,EAAI+G,QAC7B,GAAkB,GCRlB,I,UAAS,WAAa,IAAI/G,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAI+jB,UAAY/jB,EAAI+jB,SAASjqB,OAAQsG,EAAG,MAAM,CAACJ,EAAI+X,GAAI/X,EAAY,UAAE,SAASgkB,EAAQpqB,GAAG,OAAOwG,EAAG,MAAM,CAACvB,IAAIjF,GAAG,CAACwG,EAAG,SAAS,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAIikB,qBAAqBjkB,EAAIyW,WAAWuN,EAAQrW,WAAY/T,GAAIgH,WAAW,2DAA2DO,YAAY,wDAAwDiE,MAAM,CAAE,OAAa,GAALxL,GAAS4G,YAAY,CAAC,4BAA4B,MAAM,6BAA6B,OAAOF,MAAM,CAAC,KAAO,KAAK,CAACN,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyW,WAAWuN,EAAQrW,eAAevN,EAAG,SAAS,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIkkB,mBAAmBF,MAAY,CAAC5jB,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,oCAAoC,CAACf,EAAG,QAAQ,CAACe,YAAY,QAAQb,MAAM,CAAC,IAAM0jB,EAAQL,IAC94B,GAAK3jB,EAAIsjB,gBAAmBU,EAAQT,gBAAgB,GACpD,GAAKvjB,EAAI0gB,cAAiBsD,EAAQrD,cAAc,GAAK,eAAe,IAAI,aAAa,MAAM,YAAY,UAAU,GAAGvgB,EAAG,QAAQ,CAACe,YAAY,wBAAwBX,YAAY,CAAC,cAAc,QAAQ,CAACJ,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,oDAAoD,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAGoiB,EAAQL,IAAMK,EAAQ9C,WAAalhB,EAAI8Z,eAAekK,EAAQjK,KAAMiK,EAAQhK,KAAMgK,EAAQ/J,YAAY,GAAG7Z,EAAG,QAAQ,CAACe,YAAY,eAAeX,YAAY,CAAC,iBAAiB,OAAOkD,MAAOsgB,EAAQL,IAAM,kBAAoB,KAAMrjB,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI2Z,aAAaqK,EAAQrW,UAAWqW,EAAQpW,aAAcoW,EAAW,IAAE5jB,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,mBAAmB,CAACnB,EAAIiB,GAAG,0BAA0BjB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAGoiB,EAAQL,KAAK,MAAM,GAAGvjB,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,mBAAmB,CAACnB,EAAIiB,GAAG,cAAcjB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAGoiB,EAAQhK,MAAM,MAAM,IAAI,GAAG5Z,EAAG,QAAQ,CAACe,YAAY,qBAAqBb,MAAM,CAAC,aAAa,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,aAAab,MAAM,CAAC,MAAQN,EAAIma,oBAAoB6J,EAAQhd,QAASgd,EAAQL,KAAKthB,QAAQ,CAACrC,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIma,oBAAoB6J,EAAQhd,QAASgd,EAAQL,KAAKpJ,UAAU,GAAGna,EAAG,QAAQ,CAACe,YAAY,wCAAwC,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIma,oBAAoB6J,EAAQhd,QAASgd,EAAQL,KAAKrJ,UAAU,IAAI,IAAI,IAAI,IAAI,MAAKla,EAAG,MAAM,CAACI,YAAY,CAAC,OAAS,MAAM,WAAa,kBAAkB,GAAGJ,EAAG,cAAc,CAACe,YAAY,uDAAuDX,YAAY,CAAC,OAAS,OAAO,aAAa,SAAS,YAAY,eAAe,CAACJ,EAAG,UAAU,CAACE,MAAM,CAAC,MAAQ,kBAAkB,KAC50D,GAAkB,GCHlB,GAAS,WAAa,IAAIN,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,MAAM,CAACe,YAAY,QAAQ,CAACf,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,uCAAuC,YAAY,UAAU,MAAQ,6BAA6B,MAAQ,aAAa,OAAS,aAAa,QAAU,4BAA4B,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,iRAAiR,UAAY,mCAAmC,KAAO,aAAaF,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,khBAAkhB,UAAY,mCAAmC,KAAO,aAAaF,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,6RAA6R,UAAY,mCAAmC,KAAON,EAAImkB,gBAAgB/jB,EAAG,SAAS,CAACE,MAAM,CAAC,GAAK,YAAY,GAAK,WAAW,EAAI,KAAK,KAAON,EAAImkB,gBAAgB/jB,EAAG,SAAS,CAACE,MAAM,CAAC,GAAK,YAAY,GAAK,WAAW,EAAI,WAAW,KAAO,UAAUF,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,8KAA8K,UAAY,mCAAmC,KAAO,aAAaF,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,oaAAoa,UAAY,mCAAmC,KAAO,aAAaF,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,gKAAgK,UAAY,mCAAmC,KAAON,EAAImkB,gBAAgB/jB,EAAG,SAAS,CAACE,MAAM,CAAC,GAAK,YAAY,GAAK,YAAY,EAAI,KAAK,KAAON,EAAImkB,gBAAgB/jB,EAAG,SAAS,CAACE,MAAM,CAAC,GAAK,YAAY,GAAK,YAAY,EAAI,WAAW,KAAO,cAAcF,EAAG,SAAS,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIqH,aACtiG,GAAkB,GCoDtB,IACEhK,KAAM,UACN6a,MAAO,CACL7Q,MAAO8Q,SCxDiY,MCOxY,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIa,M,QC2FXiM,GAAe,GAEnB,IACE/mB,KAAM,gBACNqgB,WAAY,CACV2G,QAAJ,IAEEnM,MAAO,CACL6L,SAAU1L,OAEZ/e,KAAM,WAAR,OACA,kBAEEkL,QAAS,OAAX,OAAW,CAAX,kBACA,2CADA,IAEI0f,mBAFJ,SAEA,GACMjkB,KAAKuV,sBAAsBwO,GAC3B/jB,KAAKe,QAAQ5G,KAAK,CAAxB,2BAEI0f,eANJ,SAMA,OACM,OAAOgC,GAAWhC,eAAeC,EAAMC,EAAMC,IAE/CN,aATJ,SASA,KACM,OAAOmC,GAAWnC,aAAaC,EAAgBC,IAEjDpD,WAZJ,SAYA,GACM,OAAOqF,GAAWrF,WAAW5L,IAE/BsP,oBAfJ,SAeA,KACM,OAAO2B,GAAW3B,oBAAoBnT,EAASoT,IAEjD6J,qBAlBJ,SAkBA,KACM,IAAN,KAcM,OAXmB,IAAfK,IACFF,GAAe,IAGbA,IAAgBA,GAAa9W,SAASiX,GACxC5f,GAAO,EAEPyf,GAAahqB,KAAKmqB,GAIb5f,MC3JqY,M,yBCQ9Y,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIa,MAAiB,QAUhC,IAAkB,GAAW,CAACgD,QAAA,KAAM4W,QAAA,KAAKiG,cAAA,KAAW/iB,QAAA,KAAMC,OAAA,KAAKgX,QAAA,OCwC/D,QACErb,KAAM,aACNqgB,WAAY,CAAd,kBACExF,MAAO,CACLuM,MAAOC,QAETprB,KAAM,WAAR,OACA,SAEE+H,SAAU,CACRwiB,+BADJ,WAEM,IAAN,4BACA,gCADA,gBAEA,4BAGM,OAAOc,EAAWC,MACxB,cAAQ,OACR,wCACA,wCAIEpgB,QAAS,CACP+a,iBADJ,WAEM,GAAItf,KAAKuf,MAAMqF,qBAAsB,CACnC,IAAR,iBACA,EACA,0DAEQ5kB,KAAKuf,MAAMqF,qBAAqBnhB,MAAMI,OAAS4b,EAAgB,OAGnE9U,QAVJ,SAUA,GACM,OAAOqS,GAAWrS,QAAQ2Z,EAAMtkB,KAAKwO,KAAK3D,YAE5CU,UAbJ,SAaA,GACM,OAAOyR,GAAWzR,UAAU+Y,EAAMtkB,KAAKwO,KAAKhD,eAGhDwU,UAxCF,WAwCA,WACIhgB,KAAKigB,WAAU,WAAnB,gCAEE1I,iBA3CF,SA2CA,OACIC,GAAK,SAAT,GAEA,2BACA,iCAEQC,EAAGkM,KAAOlM,EAAG+M,YCtH0X,M,oDCO3Y,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAWhC,IAAkB,GAAW,CAACzc,WAAA,KAAS8c,QAAA,KAAKC,YAAA,KAASC,SAAA,KAAMC,cAAA,KAAWze,WAAA,KAAS6Z,cAAA,UAM/E,KAAkB,GAAW,CAACC,OAAA,UCnC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,sBAAsB,CAACR,EAAG,MAAM,CAACA,EAAG,YAAY,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,YAAY,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIugB,SAAS,CAACngB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,yBAAyB,GAAIjB,EAAIgkB,SAAWhkB,EAAI6R,aAAe7R,EAAI4R,SAAUxR,EAAG,MAAM,CAAC8V,IAAI,6BAA6B/U,YAAY,cAAc,CAACf,EAAG,SAAS,CAACI,YAAY,CAAC,6BAA6B,MAAM,4BAA4B,MAAM,OAAS,QAAQF,MAAM,CAAC,KAAO,KAAK,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAMN,EAAIgkB,QAAQL,IACttB,GAAK3jB,EAAIsjB,gBAAmBtjB,EAAIgkB,QAAQT,gBAAgB,GACxD,GAAKvjB,EAAI0gB,cAAiB1gB,EAAIgkB,QAAQrD,cAAc,GAAK,aAAa,SAASvgB,EAAG,MAAM,CAACe,YAAY,mBAAmB,CAACf,EAAG,MAAM,CAACe,YAAY,0CAA0C,CAACnB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAIgkB,QAAQL,IAAM,gBAAkB3jB,EAAI8Z,eAAe9Z,EAAIgkB,QAAQjK,KAAM/Z,EAAIgkB,QAAQhK,KAAMha,EAAIgkB,QAAQ/J,QAAQ,OAAQja,EAAIgkB,QAA0B,mBAAE5jB,EAAG,MAAM,CAACe,YAAY,iCAAiCX,YAAY,CAAC,aAAa,YAAY,CAACR,EAAIiB,GAAG,0DAA0DjB,EAAI+G,KAAK3G,EAAG,MAAM,CAAEJ,EAAIgkB,QAAW,IAAE5jB,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,2BAA2B,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIgkB,QAAQL,SAAS,GAAGvjB,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,eAAe,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIgkB,QAAQhK,UAAU,GAAG5Z,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIgkB,QAAQkB,kBAAkB,GAAG9kB,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIgkB,QAAQ9C,gBAAgB,GAAG9gB,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,yBAAyB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyW,WAAWzW,EAAIgkB,QAAQrW,gBAAgB,GAAGvN,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAI2Z,aAAa3Z,EAAIgkB,QAAQrW,UAAW3N,EAAIgkB,QAAQpW,UAAU,QAAQ,GAAI5N,EAAIgkB,QAAQ7C,iBAAmBnhB,EAAIgkB,QAAQ7C,gBAAgBC,gBAAiBhhB,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,cAAc,CAACnB,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,QAAQ,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIgkB,QAAQ7C,gBAAgBC,qBAAqB,GAAGphB,EAAI+G,KAAK3G,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACe,YAAY,SAAS,CAACf,EAAG,SAAS,CAACe,YAAY,aAAab,MAAM,CAAC,MAAQN,EAAIma,oBAAoBna,EAAIgkB,QAAQhd,QAAShH,EAAIgkB,QAAQL,KAAKthB,QAAQ,CAACrC,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIma,oBAAoBna,EAAIgkB,QAAQhd,QAAShH,EAAIgkB,QAAQL,KAAKpJ,UAAU,GAAGna,EAAG,QAAQ,CAACe,YAAY,mBAAmB,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIma,oBAAoBna,EAAIgkB,QAAQhd,QAAShH,EAAIgkB,QAAQL,KAAKrJ,UAAU,IAAI,GAAGla,EAAG,MAAM,CAACe,YAAY,qBAAqB,CAAGnB,EAAIgkB,QAAQL,IAA+R3jB,EAAI+G,KAA9R3G,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,UAAU,MAAQ,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIuhB,SAASvhB,EAAIgkB,YAAY,CAAC5jB,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,oBAAoBjB,EAAIiB,GAAG,eAAe,IAAI,IAAI,IAAajB,EAAImlB,cAAkBllB,KAAK+jB,QAAQkB,aAAa5X,SAAS,MAAQtN,EAAI+S,mBAA6S/S,EAAI+G,KAA5R3G,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,SAAS,MAAQ,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIolB,qBAAqBplB,EAAIgkB,YAAY,CAAC5jB,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,qBAAqBjB,EAAIiB,GAAG,oBAAoB,IAAI,IAAI,GAAYb,EAAG,QAAQ,CAClqGJ,EAAIqlB,eAAeC,kBACnBtlB,EAAIgkB,QAAQL,MACb3jB,EAAIulB,aAC0PvlB,EAAI+G,KAAlQ3G,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,SAAS,MAAQ,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIwlB,OAAOxlB,EAAIgkB,YAAY,CAAC5jB,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,oBAAoBjB,EAAIiB,GAAG,yBAAyB,IAAI,IAAa,IAAI,MAAM,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,WAAW,CAACF,EAAG,WAAW,CAACE,MAAM,CAAC,YAAY,OAAOqG,MAAM,CAACpI,MAAOyB,EAAIyhB,cAAkB,KAAE7a,SAAS,SAAUC,GAAM7G,EAAI6X,KAAK7X,EAAIyhB,cAAe,OAAQ5a,IAAMjG,WAAW,uBAAuB,CAACR,EAAG,SAAS,CAACe,YAAY,QAAQ,CAACf,EAAG,eAAe,CAACe,YAAY,QAAQ,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyhB,cAAcrkB,YAAYgD,EAAG,MAAM,CAACU,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIylB,6BAA6B9gB,MAAO,KAAQ,CAACvE,EAAG,eAAe,CAACe,YAAY,OAAOb,MAAM,CAAC,YAAc,0BAA0B,MAAQN,EAAIylB,6BAA6BrP,aAC3zBpW,EAAIylB,6BAA6BrP,aAAa/Y,KAC9C,GAAG,SAAW,MAAM+C,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,0BAA0B,KAAON,EAAIgkB,QAAQL,IACvG3jB,EAAI4R,SAAS8B,MAAMgS,0BACnB1lB,EAAI4R,SAAS8B,MAAMiS,cAAc,OAAS3lB,EAAIylB,8BAA8B3kB,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAIylB,6BAA6B1kB,OAAY,GAAGX,EAAG,iBAAiB,CAACA,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIyhB,cAAc9c,MAAO,KAAS,CAAC3E,EAAIiB,GAAG,QAAQb,EAAG,QAAQ,CAACE,MAAM,CAAC,UAAYN,EAAIylB,6BAA6BrP,aAAa,MAAQ,UAAU,KAAO,IAAItV,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAI4lB,OACxd5lB,EAAIgkB,QACJhkB,EAAIylB,6BAA6BrP,aAAatW,SAC3C,CAACE,EAAIiB,GAAG,UAAU,IAAI,IAAI,IAAI,IAAI,GAAGjB,EAAI+G,MAAM,MAClE,GAAkB,GCoPtB,IACE1J,KAAM,mBACNqgB,WAAY,CAAd,qBACEpkB,KAAM,WAAR,OACA,aACA,eACA,QACA,YAEA,8BACA,QACA,qBAGE+H,SAAU,OAAZ,OAAY,CAAZ,iCACA,8CACA,+CAFA,IAGI8jB,aAHJ,WAIM,OAAOllB,KAAK+jB,QAAQL,IAC1B,kBACA,6BACA,uBACA,qBAEA,aACA,6BACA,qBACA,sCACA,sBAGI4B,aAjBJ,WAkBM,OAAOtI,GAAWpQ,UACxB,6BACA,qBACA,iDACA,+CACA,wBAIErI,QAAS,OAAX,OAAW,CAAX,kBACA,kDADA,IAEI+c,SAFJ,SAEA,GACMthB,KAAKe,QAAQ5G,KAAK,CAChBiD,KAAM,WACN4Z,OAAQ,CACNwL,aAAcuB,EAAQ6B,YAI5B/L,eAVJ,SAUA,OACM,OAAOgC,GAAWhC,eAAeC,EAAMC,EAAMC,IAE/CN,aAbJ,SAaA,KACM,OAAOmC,GAAWnC,aAAaC,EAAgBC,IAEjDpD,WAhBJ,SAgBA,GACM,OAAOqF,GAAWrF,WAAW5L,IAE/BsP,oBAnBJ,SAmBA,KACM,OAAO2B,GAAW3B,oBAAoBnT,EAASoT,IAEjD,QAtBJ,SAsBA,kLACA,WACA,aACA,EACA,YAJA,OACA,EADA,OAOA,wBACA,EACA,2BACA,yBACA,gCAXA,8CAcI,OApCJ,SAoCA,qKAEA,mDAFA,uBAGA,4DAHA,0CAOA,UACA,YACA,YATA,OAOA,EAPA,OAYA,wBACA,EACA,0BACA,wBACA,gCAhBA,8CAmBIgL,qBAvDJ,WAwDMnlB,KAAKwhB,cAAcrkB,QAAUkC,OAAO8f,KAAK0G,cACzC7lB,KAAKwhB,cAAc9c,MAAO,GAE5B,OA3DJ,SA2DA,2KACA,iBACA,QACA,YAHA,SAMA,UACA,MACA,YACA,EACA,YAVA,OAMA,EANA,OAaA,wBACA,EACA,0BACA,wBACA,gCAjBA,8CAoBI4a,iBA/EJ,WAgFM,GAAItf,KAAKuf,MAAMuG,2BAA4B,CACzC,IAAR,iBACA,uCAEQ9lB,KAAKuf,MAAMuG,2BAA2BriB,MAAMI,OACpD,WAIEe,MAAO,CACL2K,OADJ,SACA,gBACM,GAAIxK,GACqB,WAAnBA,EAAS2M,MAAoB,CAE/B,IAAV,+BACA,QACA,iCAGc1C,GACFhP,KAAKmV,6BAA6BnG,GAGlChP,KAAKigB,WAAU,WACb,GACd,cACA,qCAEgB,EAAhB,sBACA,CACgB,IAAhB,qCAEgB,EAAhB,oBACkBvb,MAAM,EACNc,MAAOnG,OAAO8f,KAAK4G,WACnB5oB,QAAS6oB,SAKfhmB,KAAKwH,mBAAmB,CACtBhC,MAAOnG,OAAO8f,KAAKQ,mBACnBxiB,QAASkC,OAAO8f,KAAKS,qBAM/B,qBAvCJ,SAuCA,KACM5f,KAAKwlB,6BAA6BrP,aAAe,OAGrD6J,UA7KF,WA6KA,WACIhgB,KAAK+jB,QAAU/jB,KAAKgQ,gBAEpBhQ,KAAKigB,WAAU,WAAnB,gCAEE9B,iBAlLF,SAkLA,OAGI,IAFA,IAAJ,yDAEA,mCACM,GAAS,MAALxkB,GAAaA,EAAE+K,KAIjB,OAHA/K,EAAE+K,MAAO,OAET8S,GAAK,GAKTA,MChciZ,MCQjZ,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,MAAiB,QAiBhC,IAAkB,GAAW,CAACjW,OAAA,KAAKmG,QAAA,KAAMC,aAAA,OAAaE,WAAA,OAAWyW,QAAA,KAAKxW,UAAA,KAAQtG,QAAA,KAAMC,OAAA,KAAKgX,QAAA,KAAKzQ,UAAA,KAAQuW,cAAA,KAAWhY,WAAA,KAAS6Z,cAAA,UAM1H,KAAkB,GAAW,CAACC,OAAA,UC1C9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAe,YAAEI,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,qBAAqBO,YAAY,WAAW,CAACf,EAAG,YAAY,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,YAAY,CAAEN,EAAI6R,YAAkD,uCAAEzR,EAAG,kBAAkB,CAACE,MAAM,CAAC,OAAS,oBAAoB,CAACN,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI6R,YAAYxU,SAAS+C,EAAG,kBAAkB,CAACe,YAAY,mBAAmB,CAACnB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI6R,YAAYxU,SAAS+C,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIkmB,gBAAgB,CAAC9lB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,yBAAyB,IAAI,GAAoC,SAAhCjB,EAAI6R,YAAYnB,aAA0B1Q,EAAIgT,oBAAqB5S,EAAG,SAAS,CAACe,YAAY,gEAAgEX,YAAY,CAAC,4BAA4B,MAAM,6BAA6B,MAAM,MAAQ,QAAQF,MAAM,CAAC,KAAO,KAAK,CAACN,EAAIiB,GAAG,2CAA2CjB,EAAI4B,GAAG5B,EAAI6R,YAAYsU,wCAAwC,OAAO/lB,EAAG,SAAS,CAACe,YAAY,gEAAgEX,YAAY,CAAC,4BAA4B,MAAM,6BAA6B,MAAM,MAAQ,QAAQF,MAAM,CAAC,KAAO,KAAK,CAACN,EAAIiB,GAAG,uBAAwBjB,EAAIqlB,eAA6B,eAAEjlB,EAAG,OAAO,CAACJ,EAAIiB,GAAG,OAAOjB,EAAI+G,OAAwC,SAAhC/G,EAAI6R,YAAYnB,aAA0B1Q,EAAIgT,oBAAqB5S,EAAG,MAAM,CAACe,YAAY,qEAAqEX,YAAY,CAAC,SAAW,aAAa,CAACR,EAAIiB,GAAG,wBAAyBjB,EAAIqlB,eAA6B,eAAEjlB,EAAG,OAAO,CAACJ,EAAIiB,GAAG,OAAOjB,EAAI+G,OAAO/G,EAAI+G,KAAK3G,EAAG,MAAM,CAAC8V,IAAI,oBAAoB/U,YAAY,mCAAmCiE,MAAMpF,EAAI0f,cAAgB,IAAM,wBAA0B,IAAI,CAAE1f,EAAIomB,QAAUpmB,EAAIomB,OAAOC,OAASrmB,EAAIqlB,eAAeiB,eAAgBlmB,EAAG,MAAM,CAACI,YAAY,CAAC,OAAS,UAAU,CAACJ,EAAG,sBAAsB,CAACI,YAAY,CAAC,OAAS,WAAWF,MAAM,CAAC,OAAS,MAAM,KAAO,MAAM,MAAQ,KAAK,MAAQN,EAAIomB,OAAOC,MAAME,WAAW,MAAQvmB,EAAIomB,OAAOC,MAAMG,wBAA0B,EAAI,UAAY,WAAW,CAACpmB,EAAG,MAAM,CAACA,EAAG,MAAM,CAACI,YAAY,CAAC,MAAQ,QAAQ,cAAc,OAAO,YAAY,SAAS,CAACR,EAAIiB,GAAG,sBAAsBb,EAAG,MAAM,CAACe,YAAY,wBAAwBX,YAAY,CAAC,YAAY,SAAS,CAACR,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAIomB,OAAOC,MAAM/L,MAAM,YAAY,GAAGta,EAAI+G,KAAM/G,EAAIomB,QAAUpmB,EAAIomB,OAAOK,UAAWrmB,EAAG,MAAM,CAACe,YAAY,OAAOuC,MAAO1D,EAAIqlB,eAAeiB,eAAiB,gBAAkB,iBAAkB,CAAClmB,EAAG,sBAAsB,CAACI,YAAY,CAAC,OAAS,WAAWF,MAAM,CAAC,OAAS,MAAM,KAAON,EAAIqlB,eAAeiB,eAAiB,IAAM,IAAI,MAAQ,KAAK,MAAQtmB,EAAIomB,OAAOK,UAAUF,WAAW,MAAQvmB,EAAIomB,OAAOK,UAAUD,wBAA0B,EAAI,UAAY,WAAW,CAACpmB,EAAG,MAAM,CAACA,EAAG,MAAM,CAACI,YAAY,CAAC,MAAQ,QAAQ,cAAc,OAAO,YAAY,SAAS,CAACR,EAAIiB,GAAG,mBAAmBb,EAAG,MAAM,CAACe,YAAY,wBAAwBX,YAAY,CAAC,YAAY,SAAS,CAACR,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAIomB,OAAOK,UAAUnM,MAAM,YAAY,GAAGta,EAAI+G,QAAQ,GAAG/G,EAAI+G,MACnlG,GAAkB,GCsHtB,IACE1J,KAAM,UACN/D,KAAM,WAAR,OACA,gBACA,kBAEE+H,SAAU,OAAZ,OAAY,CAAZ,kBACA,yCADA,IAEI+kB,OAFJ,WAGM,OACN,kBACA,qCACA,2CAEe,CACLC,MAAOpmB,KAAKymB,mBACtB,sDAAY,MAAZ,qBAEUD,UAAWxmB,KAAKymB,mBAC1B,0CACA,YAAY,MAAZ,0BAMa,QAGXliB,QAAS,CACPkiB,mBADJ,SACA,GACM,IAAKC,EACH,OAAO,KAGT,IAAN,EACA,kCACA,2BAEA,MACA,oDAEA,EACA,0BACA,iBACA,IAEM,OAAO,gBACLrM,KAAR,EACQiM,WAAR,GACA,IAGIrN,6BAxBJ,SAwBA,GACM,OAAO4C,GAAW5C,6BAA6BC,IAEjDoG,iBA3BJ,WA4BM,GAAItf,KAAKuf,MAAMoH,kBAAmB,CAChC,IAAR,iBACA,EACA,uDAEQ3mB,KAAKyf,cAAgBA,EAErBzf,KAAKuf,MAAMoH,kBAAkBljB,MAAMI,OAAS4b,EAAgB,OAGhEwG,cAtCJ,WAsCA,WACA,0JACA,WADA,gGAIMjmB,KAAKwH,mBAAmB,CACtBhC,MAAOnG,OAAO8f,KAAK8G,cAEnBlf,QAAS,CACPC,WAAY,UACZG,IAAK,CACHR,SAAUigB,QAMpB5G,UApFF,WAoFA,WACIhgB,KAAKigB,WAAU,WAAnB,iCC5M4Y,M,aCOxY,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAWhC,IAAkB,GAAW,CAAC1e,OAAA,KAAKmG,QAAA,KAAMlG,QAAA,KAAMqlB,qBAAA,KAAkB7e,UAAA,KAAQzB,WAAA,KAAS6Z,cAAA,UAMlF,KAAkB,GAAW,CAACC,OAAA,UCnC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACgF,MAAM,CAC5G,CAAE,oBAAqBpF,EAAI+mB,0BAC3B/mB,EAAIsF,WAAa,iBAAmB,kBAAmB9E,YAAY,CAAC,OAAS,QAAQ,aAAa,SAAS,MAAQ,SAASF,MAAM,CAAC,GAAK,eAAe,CAACF,EAAG,YAAY,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,cAAc,UAAY,MAAM,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIugB,SAAS,CAACngB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,gBAAgB,IAAI,GAAGb,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACI,YAAY,CAAC,OAAS,aAAaF,MAAM,CAAC,IAAM,EAAQ,WAAyCF,EAAG,MAAM,CAACe,YAAY,QAAQ,CAACf,EAAG,eAAe,CAACe,YAAY,OAAOb,MAAM,CAAC,UAAY,KAAK,KAAO,GAAG,eAAe,GAAG,mBAAmB,UAAU,cAAc,GAAG,KAAO,GAAG,UAAY,GAAG,qBAAqB,gBAAgB,CAACF,EAAG,WAAW,CAACgK,KAAK,SAAS,CAAChK,EAAG,IAAI,CAACJ,EAAIiB,GAAG,QAAQjB,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,eAAe,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,eAAe,GAAG,mBAAmB,UAAU,MAAQ,WAAW,cAAc,GAAG,KAAO,GAAG,UAAY,GAAG,cAAcN,EAAIgnB,aAAe,UAAY,cAAc,KAAOhnB,EAAIgnB,aAAe,OAAS,WAAW,qBAAqB,YAAYlmB,GAAG,CAAC,eAAe,SAASC,GAAQf,EAAIgnB,cAAgBhnB,EAAIgnB,iBAAiB5mB,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,GAAK,WAAW,QAAU,cAAc,MAAQ,kBAAkB,MAAQ,GAAG,KAAO,GAAG,MAAQ,GAAG,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIinB,QAAQ,CAAC7mB,EAAG,UAAUJ,EAAIiB,GAAG,WAAW,GAAGjB,EAAIknB,GAAG,GAAGlnB,EAAIknB,GAAG,GAAGlnB,EAAIknB,GAAG,IAAI,IAAI,IAAI,IACl2C,GAAkB,CAAC,WAAa,IAAIlnB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACe,YAAY,QAAQ,CAACf,EAAG,IAAI,CAACe,YAAY,cAAcX,YAAY,CAAC,YAAY,YAAYF,MAAM,CAAC,KAAO,MAAM,CAACN,EAAIiB,GAAG,4CAA4C,WAAa,IAAIjB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACe,YAAY,QAAQ,CAACf,EAAG,IAAI,CAACe,YAAY,cAAcX,YAAY,CAAC,YAAY,YAAYF,MAAM,CAAC,KAAO,MAAM,CAACN,EAAIiB,GAAG,2BAA2B,WAAa,IAAIjB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACe,YAAY,QAAQ,CAACf,EAAG,IAAI,CAACe,YAAY,cAAcX,YAAY,CAAC,YAAY,YAAYF,MAAM,CAAC,KAAO,MAAM,CAACN,EAAIiB,GAAG,oBCyF7tB,IACE5D,KAAM,QACN/D,KAAM,WAAR,OACA,kBAEE+H,SAAU,OAAZ,OAAY,CAAZ,kBACA,mCACA,mCAEEmD,QAAS,OAAX,OAAW,CAAX,kBACA,6DADA,IAEI2iB,YAFJ,WAGWlnB,KAAK6S,eACR7S,KAAK2U,qBAAoB,IAG7BqS,MAPJ,WAOA,WAaMhnB,KAAKigB,WAAU,WACb,IAAR,8BAEYkH,EACF,EAAV,gBAEU,EAAV,gBC/H0Y,MCQtY,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,OAIa,GAAiB,QAShC,IAAkB,GAAW,CAAC5lB,OAAA,KAAKC,QAAA,KAAMC,OAAA,KAAK8c,cAAA,KAAWhY,WAAA,OC5BzD,IAAI,GAAS,WAAa,IAAIxG,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,sBAAsB,CAACR,EAAG,MAAM,CAACA,EAAG,YAAY,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,UAAU,OAAS,SAAS,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIugB,SAAS,CAACngB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,WAAW,GAAGb,EAAG,SAAS,CAACE,MAAM,CAAC,aAAa,GAAG,mBAAmB,UAAU,KAAO,GAAG,OAAS,MAAMqG,MAAM,CAACpI,MAAOyB,EAAW,QAAE4G,SAAS,SAAUC,GAAM7G,EAAIqnB,QAAQxgB,GAAKjG,WAAW,YAAY,CAACR,EAAG,QAAQ,CAACe,YAAY,+CAA+C,CAACnB,EAAIiB,GAAG,eAAeb,EAAG,QAAQ,CAACe,YAAY,+CAA+C,CAACnB,EAAIiB,GAAG,iBAAiB,GAAGb,EAAG,cAAc,GAAIJ,EAAgB,aAAEI,EAAG,MAAM,CAAC8V,IAAI,qBAAqB/U,YAAY,cAAc,CAACf,EAAG,eAAe,CAACI,YAAY,CAAC,OAAS,WAAWF,MAAM,CAAC,GAAK,eAAeqG,MAAM,CAACpI,MAAOyB,EAAW,QAAE4G,SAAS,SAAUC,GAAM7G,EAAIqnB,QAAQxgB,GAAKjG,WAAW,YAAY,CAACR,EAAG,aAAa,CAACe,YAAY,8BAA8BX,YAAY,CAAC,OAAS,YAAY,CAACJ,EAAG,QAAQ,CAACsD,MAAO1D,EAAc,WAAEM,MAAM,CAAC,IAAO,GAAKN,EAAI0gB,cAAiB1gB,EAAIyiB,aAAapO,MAAK,SAAU/Q,GAAK,OAAOA,EAAEgK,SAAS,UAAa,QAAU,OAAO,GAAGlN,EAAG,aAAa,CAACe,YAAY,8BAA8BX,YAAY,CAAC,OAAS,YAAY,CAACJ,EAAG,QAAQ,CAACsD,MAAO1D,EAAc,WAAEM,MAAM,CAAC,IAAO,GAAKN,EAAI0gB,cAAiB1gB,EAAIyiB,aAAapO,MAAK,SAAU/Q,GAAK,OAAOA,EAAEgK,SAAS,UAAa,QAAU,OAAO,IAAI,IAAI,GAAGtN,EAAI+G,QACnlD,GAAkB,GCgCtB,IACE1J,KAAM,WACN6a,MAAO,CACLuK,aAAcpK,OAEhB/e,KAAM,WAAR,OACA,UACA,kBAEE+H,SAAU,CACRimB,WADJ,WAEM,OAAOrnB,KAAKyf,cAAgB,CAAlC,0CAGElb,QAAS,CACP+a,iBADJ,WAEM,GAAItf,KAAKuf,MAAM+H,mBAAoB,CACjC,IAAR,iBACA,gDACQtnB,KAAKyf,cAAgBA,EAErBzf,KAAKuf,MAAM+H,mBAAmB7jB,MAAMI,OAAS4b,EAAgB,QAInEO,UAzBF,WAyBA,WACIhgB,KAAKigB,WAAU,WAAnB,+BAEIjgB,KAAKonB,QAAU,GAEjBG,YA9BF,WA+BIvnB,KAAKonB,QAAU,IChE0X,MCOzY,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAchC,IAAkB,GAAW,CAAC7lB,OAAA,KAAKwG,WAAA,KAASvG,QAAA,KAAMC,OAAA,KAAKojB,QAAA,KAAKC,YAAA,KAASC,SAAA,KAAMC,cAAA,KAAWze,WAAA,KAAS6Z,cAAA,UAM/F,KAAkB,GAAW,CAACC,OAAA,UCtC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,gBAAgB,CAACE,MAAM,CAAC,MAAQN,EAAI2R,MAAM,MAAQ3R,EAAIyF,UACrJ,GAAkB,GCDlB,GAAS,WAAa,IAAIzF,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,MAAM,CAACI,YAAY,CAAC,OAAS,OAAO,mBAAmB,UAAU,CAACJ,EAAG,MAAM,CAACI,YAAY,CAAC,SAAW,WAAW,UAAU,MAAM,CAACJ,EAAG,YAAY,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,QAAQ,OAAS,kBAAkB,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,OAAS,iBAAiBQ,GAAG,CAAC,MAAQd,EAAIugB,SAAS,CAACngB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACA,EAAG,SAAS,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIyF,OAAS,sBAAsB,IAAI,GAAGzF,EAAIknB,GAAG,GAAG9mB,EAAG,MAAM,CAACe,YAAY,gBAAgB,CAACf,EAAG,SAAS,CAACe,YAAY,eAAeb,MAAM,CAAC,KAAO,OAAO,MAAQN,EAAIynB,YAAc,GAAK,UAAU,CAACznB,EAAIiB,GAAG,oBAAoB,QACjsB,GAAkB,CAAC,WAAa,IAAIjB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACe,YAAY,gBAAgBb,MAAM,CAAC,GAAK,mBAAmBF,EAAG,SAAS,CAACe,YAAY,eAAeX,YAAY,CAAC,QAAU,KAAKF,MAAM,CAAC,GAAK,mB,wBCE5P,IACLonB,gBADK,SACWC,EAAiB5kB,EAAkB6kB,EAAQC,GAAqB,0FA2CrEC,EA3CqE,sFAC5EC,EAA0BzoB,OAAO8f,KAAK4I,mBADsC,SA2CrEF,EA3CqE,WA8C1E,GAAIG,EAAMC,aAAeD,EAAME,iBAAkB,CAI7CC,EAAgBtkB,OAASmkB,EAAMI,YAC/BD,EAAgBvkB,MAAQokB,EAAMK,WAE9BC,EAASC,UAAUP,EAAO,EAAG,EAAGG,EAAgBvkB,MAAOukB,EAAgBtkB,QAEvE,IAAIhE,EAAO,KAGP2oB,EAAYF,EAASG,aAAa,EAAG,EAAGN,EAAgBvkB,MAAOukB,EAAgBtkB,QAE/E6kB,EAAWC,KAAKH,EAAUnvB,KAAMmvB,EAAU5kB,MAAO4kB,EAAU3kB,OAAQ,CACnE+kB,kBAAmB,eAGnBF,GAAYA,EAASrvB,OACrBwG,EAAO6oB,EAASrvB,MAIhBwG,KACKgpB,EAAKC,oBAAsB,IAAIra,MAAQsa,UAAYF,EAAKC,kBAAkBC,UAAY,OACvFF,EAAKC,kBAAoB,IAAIra,KAC7BiZ,EAAgB7nB,GAChBiD,KAKZ+lB,EAAKG,cAAgBzrB,WAAWsqB,EAAM,MA1EtCgB,EAAO,GAEPA,EAAKG,cANqE,iEAUxD,EAAKC,mBAVmD,OAUxEC,EAVwE,OAWxEC,EAASD,GAAWA,EAAQrvB,OAASqvB,EAAQA,EAAQrvB,OAAS,GAAK,CAAEuvB,WAAY,eAMvFjhB,UAAUkhB,aAAaC,aAAa,CAAEtB,MAAOmB,EAAQI,OAAO,IAASC,MAAK,SAAUC,GAC5E7B,GACAA,IAGJ,IAAII,EAAQ/rB,SAAS8G,eAAe,iBACpCilB,EAAM0B,UAAYD,EAClBzB,EAAM1rB,aAAa,eAAe,GAClC0rB,EAAM2B,OAENd,EAAKG,cAAgBzrB,WAAWsqB,EAAM,QAErC+B,OAAM,SAAUptB,GACbmrB,EAAO,CAAEniB,MAAOsiB,EAAyB3qB,QAASX,IAElDsG,OAMJklB,EAAQ,EAAKA,MAAQ/rB,SAAS8G,eAAe,iBAC7ColB,EAAkBlsB,SAAS8G,eAAe,aAC1CulB,EAAWH,EAAgB0B,WAAW,MAxCoC,qDAoF1EC,EAAoCzqB,OAAO8f,KAAK4K,iBAEhD,gBAAgBC,KAAhB,MACArC,EAAO,CAAEniB,MAAOsiB,EAAyB3qB,QAAS2sB,IAGlDnC,EAAO,CAAEniB,MAAOsiB,EAAyB3qB,QAAS,EAAF,KAGpD2F,IA7F8E,6DAgGtFmmB,iBAjGW,WAkGP,IAAMttB,EAAU,IAAIC,SAAQ,SAAUC,EAASC,GAC3C,IAAIotB,EAAU,GAEd,GAAI/gB,UAAUkhB,cAAgBlhB,UAAUkhB,aAAaY,iBACjD,IACI9hB,UAAUkhB,aAAaY,mBAClBT,MAAK,SAAUU,GACZA,EAAQ1Y,SAAQ,SAAU2Y,GACF,eAAhBA,EAAOC,MACHD,EAAO/iB,MAAMiN,cAAc4C,OAAO,SAAW,GAC7CiS,EAAQ/uB,KAAK,CAAEkwB,SAAU,CAAEC,MAAOH,EAAOE,UAAYjB,WAAY,mBAM7EvtB,EAAQqtB,MAGpB,MAAO1tB,GACH2D,QAAQorB,IAAI,4BAA6B/uB,GACzCK,EAAQqtB,QAIZ/pB,QAAQorB,IAAI,uEACZ1uB,EAAQqtB,MAIhB,OAAOvtB,GAEX6uB,eAlIW,WAmIP,IAAI3B,EAAO7oB,KAEP6oB,EAAKG,gBACLnsB,aAAagsB,EAAKG,eAClBH,EAAKG,cAAgB,MAGrBhpB,KAAKgoB,QACLhoB,KAAKgoB,MAAMyC,QACXzqB,KAAKgoB,MAAMzrB,IAAM,GACbyD,KAAKgoB,MAAM0B,WACX1pB,KAAKgoB,MAAM0B,UAAUgB,iBAAiBlZ,SAAQ,SAAAmZ,GAAK,OAAIA,EAAMC,YAIzEC,iBAlJW,SAkJMhqB,MChGrB,IACEzD,KAAM,gBACN6a,MAAO,CACLvG,MAAOwG,OACP1S,MAAO0S,QAET7e,KANF,WAOI,MAAO,CACLyxB,UAAW,KACXtD,aAAa,EACbxH,WAAW,IAGfzb,QAAS,OAAX,OAAW,CAAX,kBACA,kCADA,IAEIwmB,OAFJ,SAEA,cACA,OAEA,EACA,uEAEmB,SAATlrB,EACF0P,EACR,sEACA,YACQA,EACR,iEAGMkI,EAAGuT,OAEHztB,YAAW,WACTka,EAAGvC,aAAa,CACd5W,MAAOiR,EACPmC,MAAO,EAAjB,UAEA,IAEM+F,EAAG6I,UAELmH,gBA3BJ,WA2BA,WAKA,OAEA,cACQhQ,EAAGuT,OAEHztB,YAAW,WACTka,EAAGvC,aAAa,CACd5W,MAAO+b,EACP3I,MAAO,EAAnB,UAEA,KAGA,aACQ+F,EAAG6I,UAGL2K,GAAaxD,gBACnB,EACA,EACA,yBACA,WACQ,EAAR,mBAII+C,eA1DJ,WA2DMS,GAAaT,iBACbxqB,KAAKwnB,aAAc,GAErBwD,KA9DJ,SA8DA,GACM,IAAN,iBAEWF,IACHA,EAAY,IAAII,MAAM,GAA9B,oCAQQJ,EAAUK,OADRC,EACiB,EAEA,EAGrBN,EAAUnB,UAGd3J,UA/FF,WAgGIhgB,KAAKynB,mBAGPF,YAnGF,WAoGIvnB,KAAKwqB,mBCzJyY,MCQ9Y,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,MAAiB,QAQhC,IAAkB,GAAW,CAACjpB,OAAA,KAAKC,QAAA,KAAM+E,WAAA,KAAS6Z,cAAA,UCpBlD,QACEhjB,KAAM,aACN6a,MAAO,CACLvG,MAAOwG,OACP1S,MAAO0S,QAETuF,WAAY,CACV4N,cAAJ,IAEErL,UATF,WAUIhgB,KAAKgF,4BAA4B,YAEnCuiB,YAZF,WAaIvnB,KAAKkF,wBCpBsY,MCO3Y,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAInF,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,qBAAqBwE,MAAM,CAC/N,CAAE,oBAAqBpF,EAAI+mB,0BAC3B/mB,EAAIsF,WAAa,iBAAmB,kBAAmB9E,YAAY,CAAC,MAAQ,SAASF,MAAM,CAAC,GAAK,YAAY,CAACF,EAAG,YAAY,CAACE,MAAM,CAAC,GAAK,aAAa,KAAO,GAAG,MAAQ,cAAc,UAAY,MAAM,CAACF,EAAG,QAAQ,CAACI,YAAY,CAAC,UAAU,KAAKF,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIugB,SAAS,CAACngB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACe,YAAY,wBAAwBX,YAAY,CAAC,SAAW,WAAW,KAAO,OAAO,MAAQ,UAAU,CAACJ,EAAG,SAAS,CAACJ,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,MAAM,CAAC8V,IAAI,iBAAiB/U,YAAY,8BAA8BX,YAAY,CAAC,aAAa,WAAW,CAACJ,EAAG,SAAS,CAACe,YAAY,OAAOb,MAAM,CAAC,MAAQ,GAAG,aAAa,GAAG,KAAO,GAAG,KAAO,GAAG,KAAO,GAAG,MAAQ,cAAc,UAAY,KAAK,CAACF,EAAG,oBAAoB,CAAEJ,EAAIqlB,eAA4B,cAAEjlB,EAAG,cAAc,CAACvB,IAAI,IAAIyB,MAAM,CAAC,QAAS,IAAQ,CAACF,EAAG,QAAQ,CAACI,YAAY,CAAC,MAAQ,UAAU,mBAAmB,UAAU,CAACJ,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIurB,WAAW,CAACnrB,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,GAAG,KAAO,GAAG,MAAQ,MAAM,MAAQ,GAAG,UAAY,MAAM,CAACF,EAAG,SAAS,CAACJ,EAAIiB,GAAG,wBAAwB,IAAI,GAAGb,EAAG,QAAQ,CAACe,YAAY,gCAAgCb,MAAM,CAAC,KAAON,EAAIwrB,YAAY,CAACprB,EAAG,sBAAsB,CAACJ,EAAIiB,GAAG,uNAAuN,IAAI,IAAI,GAAGjB,EAAI+G,KAAM/G,EAAIqlB,eAA4B,cAAEjlB,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,OAASN,EAAIurB,WAAW,CAACnrB,EAAG,cAAc,GAAGJ,EAAI+G,KAAK3G,EAAG,cAAc,CAACvB,IAAI,IAAIyB,MAAM,CAAC,QAAS,IAAQ,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIurB,WAAW,CAACnrB,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,GAAG,KAAO,GAAG,MAAQ,SAAS,MAAQ,KAAK,CAACF,EAAG,SAAS,CAACJ,EAAIiB,GAAG,kBAAkB,IAAI,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIwrB,YAAY,CAACprB,EAAG,sBAAsB,CAACA,EAAG,IAAI,CAACe,YAAY,oBAAoB,CAACnB,EAAIiB,GAAG,8BAA8Bb,EAAG,KAAK,CAAEJ,EAAuB,oBAAEI,EAAG,KAAK,CAACJ,EAAIiB,GAAG,qEAAqEjB,EAAI+G,KAAK3G,EAAG,KAAK,CAACJ,EAAIiB,GAAG,+DAA+Db,EAAG,KAAK,CAACJ,EAAIiB,GAAG,0FAA0F,IAAI,IAAI,GAAGb,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,OAASN,EAAIurB,WAAW,CAACnrB,EAAG,cAAc,GAAGA,EAAG,cAAc,CAACvB,IAAI,IAAIyB,MAAM,CAAC,QAAS,IAAQ,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIurB,WAAW,CAACnrB,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,GAAG,KAAO,GAAG,MAAQ,SAAS,MAAQ,KAAK,CAACF,EAAG,SAAS,CAACJ,EAAIiB,GAAG,yBAAyB,IAAI,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIwrB,YAAY,CAACprB,EAAG,sBAAsB,CAACA,EAAG,IAAI,CAACe,YAAY,oBAAoB,CAACnB,EAAIiB,GAAG,eAAgBjB,EAAuB,oBAAEI,EAAG,OAAO,CAACJ,EAAIiB,GAAG,YAAYjB,EAAI+G,OAAO3G,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIiB,GAAG,yKAAyKb,EAAG,KAAK,CAACJ,EAAIiB,GAAG,oEAAoEb,EAAG,IAAI,CAACe,YAAY,yBAAyB,CAACnB,EAAIiB,GAAG,kBAAkBb,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIiB,GAAG,+FAA+Fb,EAAG,KAAK,CAACJ,EAAIiB,GAAG,gGAAiGjB,EAAIqlB,eAAgC,kBAAEjlB,EAAG,OAAO,CAACJ,EAAIiB,GAAG,8EAA8EjB,EAAI+G,OAAO3G,EAAG,KAAK,CAACJ,EAAIiB,GAAG,+OAAgPjB,EAAuB,oBAAEI,EAAG,KAAK,CAACJ,EAAIiB,GAAG,0MAA0MjB,EAAI+G,OAAQ/G,EAAuB,oBAAEI,EAAG,IAAI,CAACe,YAAY,yBAAyB,CAACnB,EAAIiB,GAAG,mBAAmBjB,EAAI+G,KAAK3G,EAAG,KAAK,CAAEJ,EAAuB,oBAAEI,EAAG,KAAK,CAACJ,EAAIiB,GAAG,yFAAyFb,EAAG,MAAM,CAACI,YAAY,CAAC,aAAa,YAAY,cAAc,SAAS,CAACJ,EAAG,IAAI,CAACe,YAAY,cAAcb,MAAM,CAAC,KAAON,EAAIyrB,oBAAoB,CAACzrB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAIyrB,kBAAkBzL,QAAQ,eAAgB,KAAK,SAAShgB,EAAIiB,GAAG,yBAAyBjB,EAAI+G,KAAM/G,EAAuB,oBAAEI,EAAG,KAAK,CAACJ,EAAIiB,GAAG,mEAAmEjB,EAAI+G,UAAU,IAAI,IAAI,GAAG3G,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,OAASN,EAAIurB,WAAW,CAACnrB,EAAG,cAAc,GAAGA,EAAG,cAAc,CAACvB,IAAI,IAAIyB,MAAM,CAAC,QAAS,IAAQ,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIurB,WAAW,CAACnrB,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,GAAG,KAAO,GAAG,MAAQ,SAAS,MAAQ,KAAK,CAACF,EAAG,SAAS,CAACJ,EAAIiB,GAAG,yCAAyC,IAAI,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIwrB,YAAY,CAACprB,EAAG,sBAAsB,CAACA,EAAG,IAAI,CAACe,YAAY,oBAAoB,CAACnB,EAAIiB,GAAG,2BAA4BjB,EAAuB,oBAAEI,EAAG,OAAO,CAACJ,EAAIiB,GAAG,+BAA+BjB,EAAI+G,OAAO3G,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIiB,GAAG,kJAAkJb,EAAG,KAAK,CAACJ,EAAIiB,GAAG,qCAAqCb,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIiB,GAAG,gHAAgHb,EAAG,KAAK,CAACJ,EAAIiB,GAAG,oJAAoJb,EAAG,KAAK,CAACJ,EAAIiB,GAAG,yEAAyEb,EAAG,KAAK,CAACJ,EAAIiB,GAAG,uNAAuN,IAAI,IAAI,GAAGb,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,OAASN,EAAIurB,WAAW,CAACnrB,EAAG,cAAc,GAAGA,EAAG,cAAc,CAACvB,IAAI,IAAIyB,MAAM,CAAC,QAAS,IAAQ,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIurB,WAAW,CAACnrB,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,GAAG,KAAO,GAAG,MAAQ,SAAS,MAAQ,KAAK,CAACF,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,IAAI,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIwrB,YAAY,CAACprB,EAAG,sBAAsB,CAACA,EAAG,IAAI,CAACe,YAAY,oBAAoB,CAACnB,EAAIiB,GAAG,6BAA8BjB,EAAIqlB,eAAgC,kBAAEjlB,EAAG,OAAO,CAACJ,EAAIiB,GAAG,uDAAuDjB,EAAI+G,OAAO3G,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIiB,GAAG,6FAA6Fb,EAAG,KAAK,CAACJ,EAAIiB,GAAG,yHAAyHb,EAAG,KAAK,CAACJ,EAAIiB,GAAG,mHAAmH,IAAI,IAAI,GAAGb,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,OAASN,EAAIurB,WAAW,CAACnrB,EAAG,cAAc,GAAGA,EAAG,cAAc,CAACvB,IAAI,IAAIyB,MAAM,CAAC,QAAS,IAAQ,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIurB,WAAW,CAACnrB,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,GAAG,KAAO,GAAG,MAAQ,SAAS,MAAQ,KAAK,CAACF,EAAG,SAAS,CAACJ,EAAIiB,GAAG,sBAAsB,IAAI,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIwrB,YAAY,CAACprB,EAAG,sBAAsB,CAACA,EAAG,IAAI,CAACe,YAAY,oBAAoB,CAACnB,EAAIiB,GAAG,0BAA0Bb,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIiB,GAAG,8CAA8Cb,EAAG,KAAK,CAACJ,EAAIiB,GAAG,6GAA8GjB,EAAIqlB,eAAgC,kBAAEjlB,EAAG,OAAO,CAACJ,EAAIiB,GAAG,kIAAkIjB,EAAI+G,OAAO3G,EAAG,KAAK,CAACJ,EAAIiB,GAAG,wJAAyJjB,EAAIqlB,eAAgC,kBAAEjlB,EAAG,KAAK,CAACJ,EAAIiB,GAAG,ySAAySjB,EAAI+G,KAAM/G,EAAuB,oBAAEI,EAAG,KAAK,CAACJ,EAAIiB,GAAG,0EAA0EjB,EAAI+G,UAAU,IAAI,IAAI,GAAG3G,EAAG,QAAQ,CAACe,YAAY,OAAOb,MAAM,CAAC,OAASN,EAAIurB,WAAW,CAACnrB,EAAG,cAAc,GAAGA,EAAG,cAAc,CAACvB,IAAI,IAAIyB,MAAM,CAAC,QAAS,IAAQ,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIurB,WAAW,CAACnrB,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,GAAG,KAAO,GAAG,MAAQ,SAAS,MAAQ,IAAIQ,GAAG,CAAC,MAAQd,EAAI0rB,qBAAqB,CAACtrB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,2BAA2B,IAAI,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAON,EAAIwrB,YAAY,CAACprB,EAAG,sBAAsB,CAACJ,EAAIiB,GAAG,mJAAmJb,EAAG,MAAM,CAACI,YAAY,CAAC,aAAa,YAAY,cAAc,SAAS,CAACJ,EAAG,IAAI,CAACe,YAAY,cAAcb,MAAM,CAAC,KAAON,EAAI2rB,eAAe,CAAC3rB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAI2rB,aAAa3L,QAAQ,WAAY,KAAK,YAAY,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAC9pS,GAAkB,GCiZtB,IACE3iB,KAAM,OACN/D,KAAM,WAAR,OACA,WACA,YACA,2CACA,qDACA,aACA,kBAEE+H,SAAU,OAAZ,OAAY,CAAZ,GACA,yCAEEmD,QAAS,CACP+a,iBADJ,WAEM,GAAItf,KAAKuf,MAAMoM,eAAgB,CAC7B,IAAR,iBACA,uCAEQ3rB,KAAKuf,MAAMoM,eAAeloB,MAAMI,OAAS4b,EAAgB,OAG7DgM,mBATJ,WASA,WACMzrB,KAAK4rB,aAEA5rB,KAAK6rB,WAOhB,sCACQ7rB,KAAK4rB,WAAa,EAClB5rB,KAAK6rB,WAAa,KAClB7rB,KAAKe,QAAQ5G,KAAK,CAA1B,0BATQ6F,KAAK4rB,WAAa,EAElB5rB,KAAK6rB,WAAatuB,YAAW,WAC3B,EAAV,aACU,EAAV,kBACA,QAQEyiB,UAvCF,WAuCA,WACIhgB,KAAKigB,WAAU,WAAnB,+BAEI,IAAJ,sCACIjgB,KAAKgF,4BAA4B8mB,GAEjC9rB,KAAK4rB,WAAa,EAClB5rB,KAAK6rB,WAAa,MAEpBtE,YAhDF,WAiDIvnB,KAAKkF,wBCrcgY,M,0ECSrY,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIa,MAAiB,QAehC,IAAkB,GAAW,CAAC3D,OAAA,KAAK+c,QAAA,KAAKvW,WAAA,KAASvG,QAAA,KAAMuqB,SAAA,KAAMC,aAAA,KAAUC,iBAAA,QAAiBC,kBAAA,KAAezT,QAAA,KAAKlS,WAAA,KAAS6Z,cAAA,UAMrH,KAAkB,GAAW,CAACC,OAAA,UCzC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,qBAAqBwE,MAAM,CAC/N,CAAE,oBAAqBpF,EAAI+mB,0BAC3B/mB,EAAIosB,eAAiB,iBAAmB,kBAAmB5rB,YAAY,CAAC,MAAQ,SAASF,MAAM,CAAC,GAAK,YAAY,CAACF,EAAG,YAAY,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,cAAc,UAAY,MAAM,CAACF,EAAG,QAAQ,CAACI,YAAY,CAAC,UAAU,KAAKF,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIugB,SAAS,CAACngB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACe,YAAY,wBAAwBX,YAAY,CAAC,SAAW,WAAW,KAAO,OAAO,MAAQ,UAAU,CAACJ,EAAG,SAAS,CAACJ,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,MAAM,CAAC8V,IAAI,iBAAiB/U,YAAY,8BAA8BX,YAAY,CAAC,UAAY,WAAW,CAACJ,EAAG,MAAM,CAACU,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAImW,uBAAuBxR,MAAO,KAAQ,CAACvE,EAAG,eAAe,CAACe,YAAY,YAAYb,MAAM,CAAC,KAAO,GAAG,KAAO,GAAG,eAAe,GAAG,gBAAkB,cAAc,MAAQ,UAAU,SAAW,GAAG,MAAQN,EAAImW,uBAAuBC,aAAa/Y,QAAQ+C,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAON,EAAI4R,SAAS8B,MAAMC,YAAY,OAAS3T,EAAImW,wBAAwBrV,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAImW,uBAAuBpV,OAAY,GAAGX,EAAG,aAAa,CAAC8V,IAAI,WAAW/U,YAAY,OAAOb,MAAM,CAAC,GAAK,WAAW,KAAO,GAAG,KAAO,GAAG,eAAe,GAAG,MAAQ,oBAAoB,gBAAkB,cAAc,KAAO,KAAK,MAAQN,EAAImW,uBAAuBC,aAAa/Y,KACnyCgvB,KAAKC,UACHtsB,EAAImW,uBAAuBC,aAAaxN,gBACxC,KACA,GAEF,MAAMxI,EAAG,aAAa,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,KAAO,GAAG,eAAe,GAAG,MAAQ,uBAAuB,gBAAkB,cAAc,KAAO,IAAI,SAAW,IAAIqG,MAAM,CAACpI,MAAOyB,EAAmB,gBAAE4G,SAAS,SAAUC,GAAM7G,EAAI4I,gBAAgB/B,GAAKjG,WAAW,sBAAsB,IAAI,MACpT,GAAkB,GCmFtB,IACEvD,KAAM,iBACNqgB,WAAY,CACVC,iBAAJ,IAEErkB,KAAM,WAAR,OACA,kBACA,0BACA,qBACA,wBACA,QACA,cACA,UACA,cAIEkL,QAAS,CACP+a,iBADJ,WAEM,GAAItf,KAAKuf,MAAMoM,eAAgB,CAC7B,IAAR,iBACA,uCAEQ3rB,KAAKuf,MAAMoM,eAAeloB,MAAMI,OAAS4b,EAAgB,OAG7D6M,qBATJ,WASA,WACM,IAAItsB,KAAKusB,qBAAT,CAIA,IAAN,cACQvd,EAAaR,KAAO,OAA5B,wBACQ,EAAR,yCAEQ,IAAR,KAEA,4CACA,iBAEYge,IACFC,EAAqBC,EAAkBrjB,UACjD,YACA,WACA,IAIQ,EAAR,iBAEQ,IAAR,uCACQ,EAAR,mBAEQ,IAAR,uCACQ,EAAR,gCAGMqjB,EAAkBzkB,6BACxB,GAGMjI,KAAKusB,qBAAuBI,aAAY,WACtCD,EAAkBzkB,6BAC1B,KAEA,OAEI2kB,mBAlDJ,WAmDU5sB,KAAKusB,uBACPM,cAAc7sB,KAAKusB,sBACnBvsB,KAAKusB,qBAAuB,OAGhCO,UAxDJ,SAwDA,GACM,GAAIC,EACF,IACE,IAAV,gBAEU,GAAV,WAAc,OAAd,QAAc,CAAd,GACY,OAAOryB,EAEnB,UAGM,OAAO,OAGXslB,UAvFF,WAuFA,WACIhgB,KAAKigB,WAAU,WAAnB,+BAEIjgB,KAAKgF,4BAA4B,WAEjChF,KAAKssB,wBAEP/E,YA9FF,WA+FIvnB,KAAKkF,sBAELlF,KAAK4sB,sBAEPzO,iBAnGF,SAmGA,OAGI,IAFA,IAAJ,gCAEA,mCACM,GAAS,MAALxkB,GAAaA,EAAE+K,KAIjB,OAHA/K,EAAE+K,MAAO,OAET8S,GAAK,GAKTA,MC3M+Y,M,aCO/Y,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAUhC,IAAkB,GAAW,CAACjW,OAAA,KAAKC,QAAA,KAAM+c,cAAA,KAAWyO,aAAA,KAAUzmB,WAAA,KAAS6Z,cAAA,UAMvE,KAAkB,GAAW,CAACC,OAAA,UClC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAuB,oBAAEI,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,qBAAqBwE,MAAM,CACjP,CAAE,oBAAqBpF,EAAI+mB,0BAC3B/mB,EAAIsF,WAAa,iBAAmB,mBAAoB,CAAClF,EAAG,YAAY,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,gBAAgB,CAACF,EAAG,QAAQ,CAACI,YAAY,CAAC,UAAU,KAAKF,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIgB,QAAQ5G,KAAK,KAAK,kBAAmB,CAACgG,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,YAAY,GAAGb,EAAG,MAAM,CAAC8V,IAAI,yBAAyB/U,YAAY,+BAA+B,CAACf,EAAG,SAAS,CAACe,YAAY,oCAAoCX,YAAY,CAAC,OAAS,WAAWF,MAAM,CAAC,MAAQ,cAAc,UAAY,OAAO,CAACF,EAAG,MAAM,CAACA,EAAG,MAAM,CAACe,YAAY,+BAA+B,CAACnB,EAAIiB,GAAG,iBAAiBb,EAAG,MAAM,CAACA,EAAG,cAAc,CAACA,EAAG,QAAQ,CAACe,YAAY,cAAc,CAACf,EAAG,QAAQ,CAACe,YAAY,yBAAyB,CAACf,EAAG,QAAQ,CAACe,YAAY,iBAAiBX,YAAY,CAAC,gBAAgB,QAAQF,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,kBAAkB,MAAQ,MAAM,OAAS,OAAOQ,GAAG,CAAC,MAAQd,EAAIktB,mCAAmC,CAAC9sB,EAAG,MAAM,CAACA,EAAG,MAAM,CAACe,YAAY,QAAQ,CAACf,EAAG,SAAS,CAACE,MAAM,CAAC,UAAU,GAAG,KAAO,KAAK,CAACN,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,MAAM,CAACe,YAAY,2BAA2B,CAACnB,EAAIiB,GAAG,cAAcb,EAAG,MAAMJ,EAAIiB,GAAG,mBAAmBb,EAAG,MAAM,CAACe,YAAY,qCAAqC,CAACnB,EAAIiB,GAAG,uCAAuC,GAAGb,EAAG,QAAQ,CAACe,YAAY,yBAAyB,CAACf,EAAG,QAAQ,CAACe,YAAY,uBAAuBX,YAAY,CAAC,gBAAgB,QAAQF,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,kBAAkB,MAAQ,MAAM,OAAS,OAAOQ,GAAG,CAAC,MAAQd,EAAImtB,6BAA6B,CAAC/sB,EAAG,MAAM,CAACA,EAAG,MAAM,CAACe,YAAY,QAAQ,CAACf,EAAG,SAAS,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,UAAU,KAAK,CAACN,EAAIiB,GAAG,mBAAmBb,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,GAAG,UAAU,KAAK,CAACN,EAAIiB,GAAG,gBAAgB,GAAGb,EAAG,MAAM,CAACe,YAAY,2BAA2B,CAACnB,EAAIiB,GAAG,sBAAsBb,EAAG,MAAM,CAACe,YAAY,qCAAqC,CAACnB,EAAIiB,GAAG,oCAAoC,IAAI,IAAI,IAAI,QAAQ,IAAI,GAAGjB,EAAI+G,MACv9D,GAAkB,GCsFtB,IACE1J,KAAM,eACNmH,QAAS,CACP0oB,iCADJ,WAEM5V,GAAUC,WAEZ4V,2BAJJ,WAKMltB,KAAKe,QAAQ5G,KAAK,CAChBiD,KAAM,mBACN0lB,MAAO,CAAf,wBAGIxD,iBAVJ,WAWM,GAAItf,KAAKuf,MAAM4N,uBAAwB,CACrC,IAAR,iBACA,uCAEQntB,KAAKuf,MAAM4N,uBAAuB1pB,MAAMI,OAAS4b,EAAgB,QAIvE,SAAF,kBACA,yCAEEO,UAxBF,WAwBA,WACIhgB,KAAKigB,WAAU,WAAnB,gCAKE1I,iBA9BF,SA8BA,OACIC,GAAK,SAAT,GACM,GAAIC,EAAG5E,cACL,OAAO2E,EAAK,CAApB,cAEYC,EAAG1E,oBACLyE,IAEAH,GAAUC,eC/H6X,MCO7Y,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAYhC,IAAkB,GAAW,CAAC/V,OAAA,KAAKmG,QAAA,KAAM4W,QAAA,KAAKiG,cAAA,KAAW/iB,QAAA,KAAMiX,QAAA,KAAKlS,WAAA,KAAS6Z,cAAA,UAM7E,KAAkB,GAAW,CAACC,OAAA,UCpC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAIgT,qBAAuBhT,EAAIiT,sBAAuB7S,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,qBAAqBwE,MAAM,CAC9Q,CAAE,oBAAqBpF,EAAI+mB,0BAC3B/mB,EAAIsF,WAAa,iBAAmB,kBAAmBhF,MAAM,CAAC,GAAK,2BAA2B,CAACF,EAAG,YAAY,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAIgT,qBAAuBhT,EAAIqtB,oBAAqBzsB,WAAW,+CAA+CO,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,gBAAgB,CAACF,EAAG,QAAQ,CAACI,YAAY,CAAC,UAAU,KAAKF,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIgB,QAAQ5G,KAAK,kBAAkB,kBAAmB,CAACgG,EAAG,SAAS,CAACJ,EAAIiB,GAAG,qBAAqB,GAAGb,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,YAAY,GAAGb,EAAG,MAAM,CAAC8V,IAAI,6BAA6B/U,YAAY,+BAA+B,CAACf,EAAG,SAAS,CAACe,YAAY,yCAAyCX,YAAY,CAAC,OAAS,WAAWF,MAAM,CAAC,MAAQ,cAAc,UAAY,OAAO,CAACF,EAAG,MAAM,CAAEJ,EAAIgT,qBAAuBhT,EAAIqtB,oBAAqBjtB,EAAG,MAAM,CAACe,YAAY,+BAA+B,CAACnB,EAAIiB,GAAG,6FAA6Fb,EAAG,MAAM,CAACe,YAAY,+BAA+B,CAACf,EAAG,MAAM,CAACJ,EAAIiB,GAAG,cAAcjB,EAAI4B,GAAG5B,EAAIstB,sBAAsB,OAAOltB,EAAG,MAAM,CAACJ,EAAIiB,GAAG,sIAAsIb,EAAG,cAAc,CAACA,EAAG,SAAS,CAAC8V,IAAI,OAAOpV,GAAG,CAAC,OAAS,SAASC,GAAQA,EAAOwsB,mBAAoB5mB,MAAM,CAACpI,MAAOyB,EAAmB,gBAAE4G,SAAS,SAAUC,GAAM7G,EAAIwtB,gBAAgB3mB,GAAKjG,WAAW,oBAAoB,CAACR,EAAG,QAAQ,CAACe,YAAY,cAAc,CAACf,EAAG,eAAe,CAAC8V,IAAI,UAAU/U,YAAY,2BAA2Bb,MAAM,CAAC,UAAY,KAAK,KAAO,GAAG,mBAAmB,UAAU,UAAY,GAAG,cAAc,GAAG,KAAO,GAAG,qBAAqB,cAAc,MAAQN,EAAIytB,iBAAiB,SAAW,IAAI9mB,MAAM,CAACpI,MAAOyB,EAAmB,gBAAE4G,SAAS,SAAUC,GAAM7G,EAAI0tB,gBAAgC,kBAAR7mB,EAAkBA,EAAI8mB,OAAQ9mB,GAAMjG,WAAW,oBAAoB,CAACR,EAAG,MAAM,CAACE,MAAM,CAAC,KAAO,SAAS8J,KAAK,SAAS,CAACpK,EAAIiB,GAAG,wBAAwB,GAAGb,EAAG,QAAQ,CAACe,YAAY,oCAAoC,CAACf,EAAG,MAAM,CAACe,YAAY,kBAAkBX,YAAY,CAAC,MAAQ,SAAS,CAACJ,EAAG,QAAQ,CAACE,MAAM,CAAC,QAAU,cAAc,MAAQ,kBAAkB,MAAQ,GAAG,MAAQ,GAAG,KAAO,GAAG,UAAYN,EAAIwtB,iBAAmBxtB,EAAIkS,SAASI,WAAWxR,GAAG,CAAC,MAAQd,EAAI4tB,aAAa,CAAC5tB,EAAIiB,GAAG,iBAAiBb,EAAG,OAAO,CAACA,EAAG,sBAAsB,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAIkS,SAAkB,UAAEtR,WAAW,uBAAuBO,YAAY,OAAOX,YAAY,CAAC,YAAY,OAAO,cAAc,QAAQF,MAAM,CAAC,QAAU,GAAG,KAAO,GAAG,MAAQ,EAAE,MAAQ,UAAU,CAACN,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIkS,SAASC,gBAAgB,QAAQ,MAAM,KAAK/R,EAAG,QAAQ,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAIgT,qBAAuBhT,EAAIqtB,oBAAqBzsB,WAAW,+CAA+CO,YAAY,oCAAoC,CAACf,EAAG,IAAI,CAACe,YAAY,0BAA0Bb,MAAM,CAAC,KAAO,KAAKQ,GAAG,CAAC,MAAQd,EAAIuX,UAAU,CAACvX,EAAIiB,GAAG,uCAAuC,IAAI,IAAI,MAAM,IAAI,GAAGjB,EAAI+G,MACjiG,GAAkB,GCiHtB,I,UAAA,CACE1J,KAAM,mBACN/D,KAFF,WAGI,MAAO,CACLk0B,iBAAiB,EACjBK,iBAAiB,EACjBH,gBAAiBvV,OACjBsV,iBAAkB,CACxB,YAAQ,QAAR,eACA,YAAQ,MACR,4CACA,mCAIEpsB,SAAU,OAAZ,OAAY,CAAZ,iCACA,8BACA,wGAFA,IAGIgsB,oBAHJ,WAIM,MAAkC,iBAA3BptB,KAAKoX,OAAO0L,MAAMhD,MAE3BuN,qBANJ,WAOM,OAAOQ,GAAcR,wBAEvBS,aAAc,CACZ5vB,IADN,WAEQ,OAAO8B,KAAK+tB,aAAa/tB,KAAKytB,kBAEhCO,IAJN,SAIA,GACQ,OAAOjpB,MAIbR,QAAS,CACP+S,QADJ,WAEMtX,KAAKiuB,KAAKjuB,KAAKoX,OAAOha,OAExBkiB,iBAJJ,WAKM,GAAItf,KAAKuf,MAAM2O,2BAA4B,CACzC,IAAR,iBACA,uCAEQluB,KAAKuf,MAAM2O,2BAA2BzqB,MAAMI,OACpD,SAGIkqB,aAbJ,SAaA,GACM,GAAII,EAAgB,CAClB,GAAIA,EAAepf,MAAMqf,OAAO,oBAC9B,OAAOnb,GAAU3C,UAAUE,MACrC,mCACU,OAAOyC,GAAU3C,UAAUC,MAIjC,WAtBJ,WAsBA,oKACA,2BAEA,EAHA,uBAKA,sBAEA,iDACA,qBACA,gDACA,0BACA,mBAXA,SAeA,cACA,eACA,mBAjBA,OAeA,EAfA,OAoBA,wBACA,EACA,+BACA,4BACA,MACA,kBACA,gBACA,mBACA,QACA,4BACA,kCACA,mCAEA,qCAEA,MAnCA,+CAwCEyP,UA/FF,WA+FA,WACIhgB,KAAKigB,WAAU,WAAnB,+BACIjgB,KAAKigB,WAAU,WAAnB,kCAEIjgB,KAAK8tB,aAAe,KACpB9tB,KAAKytB,gBAAkB,KAEvBztB,KAAK4tB,iBAAkB,GAEnB5tB,KAAK+S,qBAAuB/S,KAAKgT,wBACnC6a,GAAcQ,kBACpB,gDACA,6BACA,uBAQE9W,iBApHF,SAoHA,OACIC,GAAK,SAAT,GACM,GAAIC,EAAG5E,cACL,OAAO2E,EAAK,CAApB,cAGYC,EAAG1E,qBAAuB0E,EAAGzE,sBAC/BwE,IAEAH,GAAUC,gBCjPiY,M,yBCQjZ,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAchC,IAAkB,GAAW,CAAC/V,OAAA,KAAKmG,QAAA,KAAM6c,cAAA,KAAW+J,SAAA,KAAM9sB,QAAA,KAAMqlB,qBAAA,KAAkBpO,QAAA,KAAK8F,cAAA,KAAWhY,WAAA,KAAS6Z,cAAA,UAM3G,KAAkB,GAAW,CAACC,OAAA,UCvC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAIgT,qBAAuBhT,EAAIiT,sBAAuB7S,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,qBAAqBwE,MAAM,CAC9Q,CAAE,oBAAqBpF,EAAI+mB,0BAC3B/mB,EAAIsF,WAAa,iBAAmB,kBAAmBhF,MAAM,CAAC,GAAK,qBAAqB,CAACF,EAAG,YAAY,CAACe,YAAY,OAAOb,MAAM,CAAC,KAAO,GAAG,MAAQ,gBAAgB,CAACF,EAAG,QAAQ,CAACI,YAAY,CAAC,UAAU,KAAKF,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIwuB,qBAAqB,CAACpuB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAI5B,EAAIgT,qBAAuBhT,EAAIqtB,oBAAuB,mBAAqB,kBAAkB,QAAQ,GAAGjtB,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,YAAY,GAAGb,EAAG,MAAM,CAAC8V,IAAI,wBAAwB/U,YAAY,+BAA+B,CAACf,EAAG,SAAS,CAACe,YAAY,yCAAyCX,YAAY,CAAC,OAAS,WAAWF,MAAM,CAAC,MAAQ,cAAc,UAAY,OAAO,CAACF,EAAG,SAAS,CAAC8V,IAAI,QAAQ,CAAC9V,EAAG,MAAM,CAAEJ,EAAmB,gBAAEI,EAAG,MAAM,CAACe,YAAY,+BAA+B,CAACnB,EAAIiB,GAAG,yCAAyCjB,EAAI4B,GAAG3B,KAAKytB,iBAAiB,OAAO1tB,EAAI+G,KAAK3G,EAAG,cAAc,CAACA,EAAG,SAAS,CAAC8V,IAAI,kBAAkBpV,GAAG,CAAC,OAAS,SAASC,GAAQA,EAAOwsB,oBAAqB,CAACntB,EAAG,QAAQ,CAACe,YAAY,oCAAoC,CAACf,EAAG,MAAM,CAACe,YAAY,oBAAoB,CAACf,EAAG,SAAS,CAACI,YAAY,CAAC,iBAAiB,OAAOF,MAAM,CAAC,MAAQ,GAAG,MAAQ,UAAU,CAACN,EAAIiB,GAAG,6BAA6BjB,EAAIiB,GAAG,kCAAkC,KAAKb,EAAG,QAAQ,CAACe,YAAY,cAAc,CAACf,EAAG,cAAc,CAACe,YAAY,QAAQ,CAACf,EAAG,cAAc,CAAC8V,IAAI,UAAU5V,MAAM,CAAC,KAAO,SAAS,aAAa,IAAI,IAAM,OAAO,MAAQN,EAAIyuB,eAAe3tB,GAAG,CAAC,OAASd,EAAI0uB,UAAU/nB,MAAM,CAACpI,MAAOyB,EAAY,SAAE4G,SAAS,SAAUC,GAAM7G,EAAI2uB,SAAS9nB,GAAKjG,WAAW,eAAe,IAAI,GAAGR,EAAG,QAAQ,CAACe,YAAY,oCAAoC,CAACf,EAAG,MAAM,CAACe,YAAY,YAAYX,YAAY,CAAC,MAAQ,SAAS,CAACJ,EAAG,QAAQ,CAACE,MAAM,CAAC,GAAK,WAAW,QAAU,cAAc,MAAQ,kBAAkB,MAAQ,GAAG,MAAQ,GAAG,KAAO,GAAG,qBAAoB,EAAK,aAAa,qBAAqBQ,GAAG,CAAC,MAAQd,EAAI4uB,cAAc,CAAE5uB,EAAIgT,qBAAuBhT,EAAIqtB,oBAAqBjtB,EAAG,MAAM,CAACJ,EAAIiB,GAAG,cAAcb,EAAG,MAAM,CAACJ,EAAIiB,GAAG,2BAA2B,MAAM,GAAGb,EAAG,QAAQ,CAACe,YAAY,oCAAoC,CAACf,EAAG,MAAM,CAACe,YAAY,eAAe,CAACf,EAAG,IAAI,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAIkS,SAAkB,UAAEtR,WAAW,uBAAuBO,YAAY,eAAe,CAACnB,EAAIiB,GAAG,iBAAiBjB,EAAI4B,GAAG5B,EAAIkS,SAASC,gBAAgB,cAAc/R,EAAG,IAAI,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,OAAQyB,EAAIkS,SAASI,UAAW1R,WAAW,wBAAwBO,YAAY,eAAe,CAACnB,EAAIiB,GAAG,6BAA6Bb,EAAG,IAAI,CAACe,YAAY,cAAcb,MAAM,CAAC,KAAO,KAAKQ,GAAG,CAAC,MAAQd,EAAI6uB,YAAY,CAAC7uB,EAAIiB,GAAG,mBAAmB,IAAI,MAAM,IAAI,IAAI,GAAGjB,EAAI+G,MAC3nF,GAAkB,GCsGtB,IACE1J,KAAM,cACN6a,MAAO,CACL6V,aAAc5V,OACduV,gBAAiBvV,OACjB0V,gBAAiBvV,SAEnBhf,KAAM,WAAR,OACA,cACA,wBACA,eACA,mCACA,0CAGE+H,SAAU,OAAZ,OAAY,CAAZ,iCACA,gDACA,sFAFA,IAGIgsB,oBAHJ,WAIM,MAAkC,iBAA3BptB,KAAKoX,OAAO0L,MAAMhD,QAG7Bvb,QAAS,OAAX,OAAW,CAAX,kBACA,gBAEE,eACF,2BAJA,IAMI+a,iBANJ,WAOM,GAAItf,KAAKuf,MAAMsP,sBAAuB,CACpC,IAAR,iBACA,uCAEQ7uB,KAAKuf,MAAMsP,sBAAsBprB,MAAMI,OAAS4b,EAAgB,OAGpEgP,SAdJ,SAcA,GACMzuB,KAAK0uB,SAAWI,GAElB9L,OAjBJ,WAkBMhjB,KAAKe,QAAQ5G,KAAK,MAEpBo0B,mBApBJ,WAqBUvuB,KAAKotB,oBACPptB,KAAKgjB,SAELhjB,KAAKsgB,UAGT,YA3BJ,WA2BA,wKACA,2BAEA,EAHA,iCAIA,eACA,eACA,kBACA,YAPA,UAIA,EAJA,QAUA,WAVA,oBAWA,2BAEA,oCAEA,iEAfA,kCAiBA,uBAjBA,QAiBA,EAjBA,OAmBA,6CAnBA,QAsBA,oBACA,GAGA,8BAEA,gDACA,wCAGA,gBACA,iBACA,qBAIA,8BAtCA,wBAyCA,gBACA,QACA,WACA,4BACA,iCA7CA,+CA2DI,UAtFJ,WAsFA,wKACA,kDACA,KAEA,qBACA,gDACA,0BACA,IAPA,SAWA,cACA,eACA,mBAbA,OAWA,EAXA,OAgBA,wBACA,EACA,+BACA,4BACA,KACA,KACA,MAtBA,gDA0BEN,UAtIF,WAsIA,WACIhgB,KAAKigB,WAAU,WAAnB,+BACIjgB,KAAKigB,WAAU,WAAnB,kCAEIjgB,KAAK0uB,SAAW,KAEZ1uB,KAAK4tB,kBACP5tB,KAAK+uB,sBAAuB,IAU1B/uB,KAAK+S,qBAAuB/S,KAAKgT,wBACnC6a,GAAcQ,kBACpB,gDACA,6BACA,4BAIE9W,iBA/JF,SA+JA,OACIC,GAAK,SAAT,GACM,OAAIC,EAAG5E,cACE2E,EAAK,CAApB,eAEYC,EAAG1E,qBAAuB0E,EAAGzE,sBAC/BwE,IAEAH,GAAUC,UAITG,EAAGgW,qBAGNjW,IAFOA,EAAK,CAApB,gCCrRgZ,M,yBCQ5Y,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAahC,IAAkB,GAAW,CAACjW,OAAA,KAAKmG,QAAA,KAAM6c,cAAA,KAAW+J,SAAA,KAAM9sB,QAAA,KAAMwtB,aAAA,KAAUvW,QAAA,KAAKlS,WAAA,KAAS6Z,cAAA,UAMxF,KAAkB,GAAW,CAACC,OAAA,UCtC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAIiT,uBAAyBjT,EAAI2S,YAAavS,EAAG,MAAM,CAACA,EAAG,MAAM,CAACA,EAAG,SAAS,CAACe,YAAY,OAAOX,YAAY,CAAC,gBAAgB,OAAOF,MAAM,CAAC,OAAS,QAAQ,MAAQ,YAAY,CAACF,EAAG,YAAY,CAACI,YAAY,CAAC,6BAA6B,MAAM,4BAA4B,OAAOF,MAAM,CAAC,GAAK,oBAAoB,KAAO,GAAG,UAAY,IAAI,MAAQ,YAAY,CAACF,EAAG,MAAM,CAACe,YAAY,OAAOX,YAAY,CAAC,OAAS,OAAO,OAAS,QAAQF,MAAM,CAAC,IAAQL,KAAa,SAAI,wBAAyBG,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,sBAAsBb,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,IAAIQ,GAAG,CAAC,MAAQd,EAAIkmB,gBAAgB,CAAC9lB,EAAG,SAAS,CAACJ,EAAIiB,GAAG,yBAAyB,IAAI,GAAGb,EAAG,SAAS,CAACe,YAAY,2BAA2BX,YAAY,CAAC,gBAAgB,QAAQ,CAACJ,EAAG,MAAM,CAACe,YAAY,0BAA0B,CAACf,EAAG,SAAS,CAACe,YAAY,UAAU,CAACf,EAAG,aAAa,CAACE,MAAM,CAAC,MAAQN,EAAI2S,YAAY,KAAO,IAAI,MAAQ,OAAOvS,EAAG,MAAM,CAACe,YAAY,gBAAgBX,YAAY,CAAC,OAAS,OAAO,MAAQ,QAAQF,MAAM,CAAC,IAAQL,KAAa,SAAI,2BAA4B,KAAKG,EAAG,MAAM,CAACe,YAAY,0BAA0B,CAACnB,EAAIiB,GAAG,+DAA+Db,EAAG,MAAM,CAACe,YAAY,+BAA+B,CAACnB,EAAIiB,GAAG,kCAAkCb,EAAG,MAAM,CAACe,YAAY,0BAA0B,CAACnB,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAIsZ,qBAAqB,UAAU,IAAI,GAAGlZ,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,qBAAqB,CAACF,EAAG,sBAAsB,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,OAAM,EAAOqC,WAAW,SAASJ,YAAY,CAAC,OAAS,QAAQF,MAAM,CAAC,MAAQ,GAAG,KAAO,GAAG,MAAQ,UAAU,MAAQ,KAAK,CAACF,EAAG,QAAQ,CAACA,EAAG,OAAO,CAACJ,EAAIiB,GAAG,aAAab,EAAG,SAAS,CAACJ,EAAIiB,GAAG,iBAAiB,IAAI,IAAI,KAAKjB,EAAI+G,MACvxD,GAAkB,G,aCkFtB,IACE1J,KAAM,iBACNqgB,WAAY,CACVwR,UAAJ,SAEE7tB,SAAU,OAAZ,OAAY,CAAZ,kBACA,0CACA,iFAEEmD,QAAS,CACP0hB,cADJ,WACA,WACA,0JACA,WADA,gGAIMjmB,KAAKwH,mBAAmB,CACtBhC,MAAOnG,OAAO8f,KAAK8G,cAEnBlf,QAAS,CACPC,WAAY,UACZG,IAAK,CACHR,SAAUigB,OAKlBvN,kBAjBJ,WAkBM,OAAOwC,GAAWxC,sBAGtB9B,iBA9BF,SA8BA,OACIC,GAAK,SAAT,GACM,KAAIC,EAAG5E,eAAiB4E,EAAGzE,uBAAyByE,EAAG/E,aAIrD,OAAO8E,EAAK,CAApB,0BAHQA,SCpH2Y,MCS/Y,I,oBAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,MAAiB,QAWhC,IAAkB,GAAW,CAAClW,oBAAA,KAAkBC,OAAA,KAAKmG,QAAA,KAAMlG,QAAA,KAAMwG,UAAA,KAAQzB,WAAA,KAAS6Z,cAAA,UC/BlF,IAAI,GAAS,WAAa,IAAIrgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,sBAAsB,CAACR,EAAG,SAAS,CAACe,YAAY,OAAOX,YAAY,CAAC,gBAAgB,OAAOF,MAAM,CAAC,MAAQ,UAAU,OAASN,EAAI8T,iBAAmB,QAAU,UAAU,CAAC1T,EAAG,YAAY,CAACI,YAAY,CAAC,6BAA6B,MAAM,4BAA4B,OAAOF,MAAM,CAAC,GAAK,oBAAoB,KAAO,GAAG,UAAY,IAAI,MAAQ,YAAY,CAACF,EAAG,MAAM,CAACe,YAAY,OAAOX,YAAY,CAAC,OAAS,OAAO,OAAS,QAAQF,MAAM,CAAC,IAAM,GAAG,aAAa,WAAW,IAAQL,KAAa,SAAI,wBAAyBG,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,uBAAuBb,EAAG,aAAa,IAAI,GAAGA,EAAG,MAAM,CAAC8V,IAAI,iBAAiB/U,YAAY,aAAauC,MAAO1D,EAAI8T,iBAAmB,+BAAiC,gCAAiC,CAAE9T,EAAoB,iBAAEI,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,OAAQyB,EAAIgW,0BAA2BpV,WAAW,gCAAgC,CAACR,EAAG,yBAAyB,CAAC8V,IAAI,4BAA4B,GAAGlW,EAAI+G,MAAQ/G,EAAI8T,kBAAoB9T,EAAIgW,0BAA4B5V,EAAG,SAAS,CAACe,YAAY,2BAA2BX,YAAY,CAAC,gBAAgB,QAAQ,CAACJ,EAAG,MAAM,CAACA,EAAG,MAAM,CAACe,YAAY,SAAS,CAACf,EAAG,OAAO,CAACA,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,gBAAgB,MAAQ,SAAS8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,cAAcjB,EAAIiB,GAAG,gBAAgB,GAAGb,EAAG,OAAO,CAACA,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,gBAAgB,MAAQ,OAAO8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,gBAAgBjB,EAAIiB,GAAG,oBAAoB,KAAKb,EAAG,MAAM,CAACI,YAAY,CAAC,aAAa,UAAU,CAACJ,EAAG,cAAc,CAACe,YAAY,OAAOL,GAAG,CAAC,WAAW,SAASC,GAAQ,OAAOf,EAAImvB,uBAAuBnvB,EAAI0N,WAAY1N,EAAIovB,aAAa,KAAKhvB,EAAG,MAAM,CAACA,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,aAAab,EAAG,eAAe,CAACE,MAAM,CAAC,aAAa,iBAAiB,MAAQN,EAAIme,OAAO,SAAW,KAAK,CAAC/d,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,iBAAiB8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,kBAAkB,IAAI,GAAIjB,EAAS,MAAEI,EAAG,MAAM,CAACe,YAAY,aAAanB,EAAI+X,GAAI/X,EAAS,OAAE,SAAS+Z,EAAKngB,GAAG,OAAOwG,EAAG,YAAY,CAACvB,IAAIjF,EAAE0G,MAAM,CAAC,MAAQ,CAACyZ,GAAM,MAAQngB,EAAE,EAAE,KAAOmgB,EAAKsV,KAAK,aAAervB,EAAIsvB,cAAcxuB,GAAG,CAAC,WAAad,EAAIuvB,iBAAgB,GAAGnvB,EAAG,MAAM,CAACA,EAAG,OAAO,CAACJ,EAAIiB,GAAG,qCAAqCjB,EAAI+G,MAAM,IAAI,IAC31E,GAAkB,GCDlB,GAAS,WAAa,IAAI/G,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACgF,MAAMpF,EAAIqvB,KAAO,iBAAmB,YAAYvuB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOf,EAAIuY,MAAM,aAAcvY,EAAIwvB,UAAUxvB,EAAI+X,GAAI/X,EAAS,OAAE,SAAS+Z,EAAKngB,GAAG,OAAOwG,EAAG,MAAM,CAACvB,IAAIjF,EAAE0G,MAAM,CAAC,MAAQ1G,IAAI,CAACwG,EAAG,MAAM,CAACe,YAAY,QAAQb,MAAM,CAAC,GAAKyZ,EAAKqV,QAAQtuB,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIyvB,YAAczvB,EAAIyvB,cAAgB71B,EAAI,KAAOA,KAAK,CAACoG,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAGmY,EAAK1c,MAAM,KAAK+C,EAAG,OAAO,CAACe,YAAY,uBAAuBf,EAAG,MAAM,CAACe,YAAY,SAAS,CAACf,EAAG,MAAM,CAACA,EAAG,wBAAwB,CAACvB,IAAImB,EAAIlF,EAAEwF,MAAM,CAAC,MAAQN,EAAIlF,EAAE,MAAQif,EAAK2V,MAAM,aAAe1vB,EAAIsvB,iBAAiB,UAAS,IAC/qB,GAAkB,GCDlB,GAAS,WAAa,IAAItvB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAC8V,IAAI,4BAA4B,CAAC9V,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACe,YAAY,QAAQb,MAAM,CAAC,GAAK,cAAc,CAACF,EAAG,QAAQ,CAACA,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIiB,GAAG,WAAWjB,EAAI+X,GAAI/X,EAAI0vB,MAAM,GAAGC,kBAAkBnwB,MAAM,EAAGQ,EAAIsvB,eAAe,SAASllB,EAAKolB,GAAO,OAAOpvB,EAAG,KAAK,CAACvB,IAAI2wB,GAAO,CAAepvB,EAAG,OAAN,IAAVovB,EAAuB,CAACxvB,EAAIiB,GAAG,QAAQjB,EAAI4B,GAAGwI,EAAKqE,QAAmB,CAACzO,EAAIiB,GAAGjB,EAAI4B,GAAGwI,EAAKqE,eAAc,KAAKzO,EAAI+X,GAAI/X,EAAS,OAAE,SAASga,EAAKpgB,GAAG,OAAOwG,EAAG,QAAQ,CAACvB,IAAIjF,EAAE0G,MAAM,CAAC,MAAQ1G,IAAI,CAACwG,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAGoY,EAAK3c,SAAS2C,EAAI+X,GAAIiC,EAAK2V,kBAAkBnwB,MAAM,EAAGQ,EAAIsvB,eAAe,SAASllB,EAAKolB,GAAO,OAAOpvB,EAAG,KAAK,CAACvB,IAAI2wB,GAAO,CAAEplB,EAAY,QAAEhK,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,gBAAgB,MAAQ,SAAS8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,cAAcb,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,gBAAgB,MAAQ,OAAO8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,iBAAiB,OAAM,SAAQ,QACv7B,GAAkB,GC6BtB,IACE,KAAF,wBACE,MAAF,iCACE,WAAF,CACI,UAAJ,KClC0Z,MCQtZ,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,MAAiB,QAKhC,IAAkB,GAAW,CAACQ,QAAA,OCJ9B,QACE,KAAF,YAEE,KAAF,WAAI,MAAJ,CACMguB,YAAa,OAGjB,MAAF,CACI,MAAJ,CACM,KAAN,MACM,UAAN,GAEI,MAAJ,CACM,KAAN,OACM,UAAN,GAEI,KAAJ,CACM,KAAN,QACM,UAAN,GAEI,MAAJ,CACM,KAAN,OACM,UAAN,GAEI,KAAJ,CACM,KAAN,MACM,UAAN,GAEI,OAAJ,CACM,KAAN,OACM,UAAN,GAEI,SAAJ,CACM,KAAN,OACM,UAAN,GAEI,OAAJ,CACM,KAAN,OACM,UAAN,EACM,QAAN,WACQ,MAAR,CACU,MAAV,EACU,aAAV,QAII,MAAJ,CACM,KAAN,QACM,UAAN,GAEI,aAAJ,CACM,KAAN,OACM,UAAN,IAIE,WAAF,CACI,sBAAJ,IAGE,QAAF,CACI,kBADJ,WAEM,IAAN,4CAEM,IAAN,oBACQ,IAAR,6BAEQ,GAAR,GACA,8BAkBU,EAAV,gBAAY,SAAZ,eAME,QA5FF,WA6FI,KAAJ,oBACI,YAAJ,8BClH8Y,MCQ1Y,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIzvB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACe,YAAY,kDAAkDX,YAAY,CAAC,cAAc,MAAM,iBAAiB,MAAM,6BAA6B,MAAM,8BAA8B,OAAOF,MAAM,CAAC,KAAO,KAAK,CAACF,EAAG,sBAAsB,CAACe,YAAY,OAAOX,YAAY,CAAC,YAAY,OAAO,cAAc,OAAO,eAAe,OAAOF,MAAM,CAAC,QAAU,GAAG,KAAO,GAAG,MAAQ,EAAE,MAAQN,EAAIzB,MAAM,MAAQ,YAAY,CAACyB,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI4vB,UAAUxvB,EAAG,OAAO,CAACJ,EAAIiB,GAAG,kBAAkBjB,EAAI4B,GAAG5B,EAAI6vB,sBAAsB,IAChmB,GAAkB,GC4BtB,IACExyB,KAAM,cACNqgB,WAAY,GACZpkB,KAAM,WAAR,OACA,YACA,UACA,yDACA,wBAEE+H,SAAU,OAAZ,OAAY,CAAZ,GACA,+BAEEmD,QAAS,CACPsrB,sBADJ,WAEM7vB,KAAK4vB,iBAAmB5vB,KAAKwO,KAAK3D,UAAUY,OAClD,0BAGIqkB,WANJ,WAOM9vB,KAAK2vB,MAAQtwB,OAAO0wB,UAAUC,kCAC9BhwB,KAAK1B,MAAQ,MAGjBsG,MAAO,CACLqrB,UADJ,SACA,KACUlrB,IACF/E,KAAK8vB,aACL9vB,KAAK6vB,2BAIXK,cA/BF,WAgCIrD,cAAc7sB,KAAKmwB,WAErBC,QAlCF,WAkCA,WACIpwB,KAAK6vB,wBAEL7vB,KAAKmwB,SAAWxD,aAAY,WAC1B,IAAN,qDAEM,GAAI,EAAV,SACQ,EAAR,iBACA,CACQ,EAAR,SACQ,IAAR,UACQ,EAAR,SAEA,IAAY,EAAZ,QACU,EAAV,kBACU,EAAV,4BAGA,OCjFgZ,MCO5Y,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAKhC,IAAkB,GAAW,CAAC9F,qBAAA,OCoE9B,UAEA,QACE,KAAF,oBACE,WAAF,CACI,UAAJ,GACI,UAAJ,GACI,YAAJ,GACI,uBAAJ,IAGE,MAAF,CACI,MAAJ,SAGE,KAAF,WAAI,MAAJ,CACM,MAAN,GACM,OAAN,KACM,OAAN,KACM,WAAN,KACM,YAAN,KACM,aAAN,4DAGE,SAAF,gDAEA,mCACA,qCAHA,IAKI,eALJ,WAMM,OAAN,0CAGI,aATJ,WAUM,OAAN,0CAIE,QAAF,iCACA,gBACA,yBAFA,IAKI,iBALJ,WAMM,GAAN,2BACQ,IAAR,iBACA,iBACA,4DACA,iDAEQ,KAAR,2CAII,uBAhBJ,SAgBA,KAAM,IAAN,OAAM,OAAN,sDAAQ,IAAR,EAAQ,OAAR,qCAAU,MAAV,EAAY,OAAZ,sCACA,+BADA,UACgB,EADhB,OAGA,gCAHA,uBAKgB,GAAhB,YALA,0BASoBtG,GACpB,QACA,cACA,qBACkB,EAAlB,4BAEA,eAEoB,EAApB,yBACoB,EAApB,qBAYkB,EAAlB,cAAoB,KAApB,uCA9BA,8CAkCI,WAlDJ,SAkDA,GACM,KAAN,oCAOQ,OALE,EAAV,KADA,UACA,OAKA,QAKE,iBAnGF,SAmGA,OACI,GAAJ,YACM,EAAN,+BACM,EAAN,uBACM,EAAN,mDCpMsZ,MCQlZ,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,MAAiB,QAUhC,IAAkB,GAAW,CAAC7Y,QAAA,KAAMlG,QAAA,KAAMwG,UAAA,KAAQuW,cAAA,KAAWhY,WAAA,KAAS6Z,cAAA,UAMtE,KAAkB,GAAW,CAACC,OAAA,UCnC9B,IAAI,GAAS,WAAa,IAAItgB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAoB,iBAAEY,WAAW,sBAAsB,CAACR,EAAG,SAAS,CAACe,YAAY,OAAOX,YAAY,CAAC,gBAAgB,OAAOF,MAAM,CAAC,MAAQ,UAAU,OAASN,EAAI8T,iBAAmB,QAAU,UAAU,CAAC1T,EAAG,YAAY,CAACI,YAAY,CAAC,6BAA6B,MAAM,4BAA4B,OAAOF,MAAM,CAAC,GAAK,oBAAoB,KAAO,GAAG,UAAY,IAAI,MAAQ,YAAY,CAACF,EAAG,MAAM,CAACe,YAAY,OAAOX,YAAY,CAAC,OAAS,OAAO,OAAS,QAAQF,MAAM,CAAC,IAAM,GAAG,aAAa,WAAW,IAAQL,KAAa,SAAI,wBAAyBG,EAAG,kBAAkB,CAACJ,EAAIiB,GAAG,uBAAuBb,EAAG,YAAYA,EAAG,QAAQ,CAACE,MAAM,CAAC,aAAa,YAAY,KAAO,IAAIQ,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAIgB,QAAQ5G,KAAK,CAAEiD,KAAM,SAAU,kBAAmB,CAAC+C,EAAG,SAAS,CAACJ,EAAIiB,GAAG,8BAA8B,GAAGb,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,KAAK,CAACF,EAAG,cAAc,IAAI,IAAI,GAAGA,EAAG,MAAM,CAAC8V,IAAI,iBAAiB/U,YAAY,aAAauC,MAAO1D,EAAI8T,iBAAmB,+BAAiC,gCAAiC,CAAE9T,EAAoB,iBAAEI,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,OAAQyB,EAAIgW,0BAA2BpV,WAAW,gCAAgC,CAACR,EAAG,yBAAyB,CAAC8V,IAAI,4BAA4B,GAAGlW,EAAI+G,OAAQ/G,EAAI8T,kBAAoB9T,EAAIgW,4BAA8BhW,EAAI4R,UAAY5R,EAAImW,uBAAuBC,aAAchW,EAAG,SAAS,CAACe,YAAY,2BAA2BX,YAAY,CAAC,gBAAgB,QAAQ,CAACJ,EAAG,MAAM,CAACe,YAAY,yBAAyB,CAACf,EAAG,MAAM,CAACI,YAAY,CAAC,aAAa,UAAU,cAAc,MAAM,CAACJ,EAAG,OAAO,CAACI,YAAY,CAAC,YAAY,OAAO,cAAc,SAAS,CAACR,EAAIiB,GAAG,IAAIjB,EAAI4B,GAAG5B,EAAIswB,QAAQ,SAASlwB,EAAG,MAAM,CAACe,YAAY,QAAQX,YAAY,CAAC,aAAa,UAAU,CAACJ,EAAG,OAAO,CAACA,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,gBAAgB,MAAQ,SAAS8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,cAAcjB,EAAIiB,GAAG,gBAAgB,GAAGb,EAAG,OAAO,CAACA,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,gBAAgB,MAAQ,OAAO8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,gBAAgBjB,EAAIiB,GAAG,oBAAoB,KAAKb,EAAG,MAAM,CAACI,YAAY,CAAC,aAAa,UAAU,CAACJ,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,yBAAyBb,EAAG,OAAO,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAIuwB,oBAAoBnwB,EAAG,MAAM,CAACe,YAAY,sBAAsBL,GAAG,CAAC,MAAQ,SAASC,GAAQf,EAAImW,uBAAuBxR,MAAO,KAAQ,CAACvE,EAAG,OAAO,CAACe,YAAY,SAAS,CAACnB,EAAIiB,GAAG,aAAab,EAAG,eAAe,CAACE,MAAM,CAAC,aAAa,iBAAiB,MAAQN,EAAImW,uBAAuBC,aAAa/Y,KAAK,SAAW,KAAK,CAAC+C,EAAG,SAAS,CAACE,MAAM,CAAC,KAAO,iBAAiB8J,KAAK,iBAAiB,CAACpK,EAAIiB,GAAG,kBAAkB,GAAGb,EAAG,mBAAmB,CAACE,MAAM,CAAC,MAAQ,UAAU,KAAON,EAAIyT,gBAAgB,OAASzT,EAAImW,wBAAwBrV,GAAG,CAAC,gBAAgB,SAASC,GAAQf,EAAImW,uBAAuBpV,OAAY,GAAIf,EAAwB,qBAAEI,EAAG,MAAM,CAACe,YAAY,aAAanB,EAAI+X,GAAI/X,EAAImW,uBAAuBC,aAAkB,OAAE,SAAS2D,EAAKngB,GAAG,OAAOwG,EAAG,YAAY,CAACvB,IAAIjF,EAAE0G,MAAM,CAAC,MAAQ,CAACyZ,GAAM,MAAQngB,EAAE,KAAOmgB,EAAKsV,KAAK,aAAervB,EAAIsvB,cAAcxuB,GAAG,CAAC,WAAad,EAAIuvB,iBAAgB,GAAGnvB,EAAG,MAAM,CAACA,EAAG,OAAO,CAACJ,EAAIiB,GAAG,qCAAqCjB,EAAI+G,MAAM,IAAI,IAC7tG,GAAkB,GCkGtB,UAEA,QACE,KAAF,OACE,WAAF,CACI,UAAJ,GACI,UAAJ,GACI,iBAAJ,GACI,uBAAJ,IAGE,KAAF,WAAI,MAAJ,CAEM,eAAN,KAGM,YAAN,KAGM,uBAAN,CACQ,MAAR,EACQ,aAAR,CAEU,KAAV,KACU,KAAV,OAIM,qBAAN,CACQ,MAAR,EACQ,aAAR,MAGM,aAAN,oDAEM,OAAN,qCAGE,QApCF,WAqCI,KAAJ,kBAGE,SAAF,gDAEA,mCACA,qCAHA,IAKI,eALJ,WAMM,OAAN,0CAGI,aATJ,WAUM,OAAN,0CAIE,QAAF,iCACA,gBACA,yBAFA,IAOI,eAPJ,WAQM,IAAN,WACA,gCACA,kCACA,kCACM,KAAN,sDAGI,WAfJ,SAeA,GACM,OAAN,cAKI,iBArBJ,WAsBM,GAAN,2BACQ,IAAR,iBACA,iBACA,4DACA,iDAEQ,KAAR,2CAII,uBAhCJ,WAgCM,IAAN,OAAM,OAAN,sDAAQ,IAAR,IAAQ,OAAR,qCAAU,MAAV,EAAY,OAAZ,6BACgB,EAAhB,oBADA,SAGA,6BAHA,UAGgB,EAHhB,OAKA,gCALA,uBAOgB,GAAhB,YAPA,0BAWoByZ,GACpB,QACA,cACA,qBACkB,EAAlB,4BAEA,cAEoB,QAApB,mBAoBkB,EAAlB,cACoB,MAApB,EACoB,SAApB,EACoB,MAApB,gCACoB,QAApB,gCA3CA,8CAgDI,WAhFJ,SAgFA,GACM,KAAN,4GAOQ,OALE,EAAV,KADA,QACA,OAKA,QAKE,UAnJF,WAmJI,IAAJ,OACI,KAAJ,kCACI,KAAJ,sBAAM,OAAN,yBAGE,MAAF,CACI,SAAJ,CACM,WAAN,EACM,QAFN,SAEA,KAAQ,IAAR,OACQ,GAAR,GACU,GAAV,iBACY,IAAZ,6BACA,YAAc,OAAd,0BAGY,GAAZ,EAEc,YADA,KAAd,uCAIU,KAAV,+DAII,uBAnBJ,SAmBA,KACA,kCACQ,KAAR,2CClRwZ,MCQpZ,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,MAAiB,QAWhC,IAAkB,GAAW,CAAChf,OAAA,KAAKmG,QAAA,KAAMlG,QAAA,KAAMwG,UAAA,KAAQuW,cAAA,KAAWhY,WAAA,KAAS6Z,cAAA,UAM3E,KAAkB,GAAW,CAACC,OAAA,UCR9BxP,OAAIC,IAAIyf,SAER,IAAMC,GAAS,CACb,CACEC,KAAM,IACNrzB,KAAM,OACNiE,UAAWqvB,IAEb,CACED,KAAM,SACNrzB,KAAM,QACNuzB,YAAa,SAAC9Q,EAAIC,EAAMtI,GAIpBH,GAAUC,YAIhB,CACEmZ,KAAM,qBACNrzB,KAAM,aACNiE,UAAWuvB,GACX3Y,OAAO,GAET,CACEwY,KAAM,qBACNrzB,KAAM,gBACNiE,UAAWwvB,IAEb,CACEJ,KAAM,sBACNrzB,KAAM,iBACNiE,UAAWyvB,GACX7Y,OAAO,GAET,CACEwY,KAAM,iCACNrzB,KAAM,4BACNiE,UAAW0vB,IAEb,CACEN,KAAM,kCACNrzB,KAAM,sBACNiE,UAAW2vB,IAEb,CACEP,KAAM,mBACNrzB,KAAM,WACNiE,UAAW4vB,GACXhZ,OAAO,GAET,CACEwY,KAAM,cACNrzB,KAAM,aACNiE,UAAW6vB,GACXjZ,OAAO,GAET,CACEwY,KAAM,+BACNrzB,KAAM,mBACNiE,UAAW8vB,IAEb,CACEV,KAAM,WACNrzB,KAAM,UACNiE,UAAW+vB,IAEb,CACEX,KAAM,eACNrzB,KAAM,OACNiE,UAAWgwB,IAEb,CACEZ,KAAM,yBACNrzB,KAAM,iBACNiE,UAAWiwB,IAEb,CACEb,KAAM,iBACNrzB,KAAM,eACNiE,UAAWkwB,IAEb,CACEd,KAAM,0BACNrzB,KAAM,mBACNiE,UAAWmwB,IAEb,CACEf,KAAM,qBACNrzB,KAAM,cACNiE,UAAWowB,GACXxZ,OAAO,GAET,CACEwY,KAAM,SACNrzB,KAAM,QAINiE,UAAW,kBAAM,yCAEnB,CACEovB,KAAM,+BACNrzB,KAAM,iBACNiE,UAAWqwB,IAEb,CACEjB,KAAM,oBACNrzB,KAAM,sBACNiE,UAAWswB,IAEb,CACElB,KAAM,0CACNrzB,KAAM,oBACNiE,UAAWuwB,KAITxP,GAAS,IAAImO,QAAU,CAC3B/xB,KAAM,UACNqzB,KAAMC,gBACNtB,YAGFpO,GAAO2P,eAAc,SAAClS,EAAIC,EAAMtI,GAC9B,GAAI0K,GAAMxQ,MAAMlL,aAGd,OAFA0b,GAAMC,OAAO,qBAAsB,WACnC3K,GAAK,GAIPA,OAID,IAAMwa,GAAmB,CACvB,QAAS,OAAQ,gBAAiB,iBAAkB,4BAA6B,sBACjF,WAAY,aAAc,OAAQ,iBAAkB,eAAgB,mBAAoB,cACxF,sBAAuB,qBAQpBC,GAAsB,CAAC,cAE7B7P,GAAO8P,WAAP,0DAAkB,WAAOrS,EAAIC,EAAMtI,GAAjB,qGAEZnY,OAAO0wB,UAAUoC,4BAFL,uBAGd3a,IAHc,6BAQV7E,EAAeuP,GAAMxQ,MAAMiB,cAG7BkN,EAAGiD,QAASjD,EAAGiD,MAAMjjB,MAASggB,EAAGiD,MAAMpR,QAAUiB,EAXrC,iCAkBS0E,GAAU2P,MAAMnH,EAAGiD,MAAMjjB,KAAMR,OAAO0wB,UAAUzY,QAAQ8a,cAlBjE,cAkBRC,EAlBQ,OAoBVA,GAAYA,EAASh5B,MACvBgG,OAAOizB,kBAAmB,EAE1BzE,GAAc0E,6BAA6BF,GAErCtiB,EAAkBmS,GAAMxQ,MAAM3B,gBAChCA,GAGFmS,GAAMC,OAAO,wBAAyB,MAGtCC,GAAOrC,QAAQ,KACfvI,EAAK,CAAEpa,KAAM2S,EAAgBoH,UAAW2L,MAAO,CAAE0P,QAAQ,MAGzDhb,EAAK,CAAEpa,KAAM,WAGf8kB,GAAMC,OAAO,eAAgB,CAC3Bzd,MAAM,EACNU,SAAS,EACTI,MAAOnG,OAAO8f,KAAKsT,UACnBt1B,QAASk1B,IAGPA,IAAahzB,OAAO8f,KAAKuT,gBAC3Bn1B,YAAW,WACTswB,GAAc8E,WACb,KAGHnb,EAAK,CAAEpa,KAAM,UApDH,8BA4DNiC,OAAOizB,iBA5DD,kCAgESjb,GAAUub,iBAhEnB,WAgERP,EAhEQ,OAkER3K,EAAkB,WACtBxF,GAAMC,OAAO,iBAAkBkQ,EAASh5B,KAAKsY,WAGzCkhB,EAA8BhF,GAAciF,sBAChDT,EACA,KACA,KACA,KACA3K,EACA,MACA,GAGEmL,IAAgCxzB,OAAO8f,KAAKuT,gBAhFlC,wBAiFZlb,IAjFY,8BAsFhBnY,OAAOizB,kBAAmB,GAYtBpQ,GAAMxQ,MAAMgB,aAA2B,mBAAZmN,EAAGziB,KAlGlB,0CAmGPoa,EAAK,CAAEpa,KAAM,oBAnGN,QA6HZ40B,GAAiB3kB,SAASwS,EAAGziB,OAAU8kB,GAAMtP,QAAQC,eAEnDgN,EAAGkT,SAAS1lB,SAAS,aACvB6U,GAAMC,OAAO,2BAA4B,GAElCtC,EAAGkT,SAAS1lB,SAAS,WAC5B6U,GAAMC,OAAO,2BAA4B,GAElCtC,EAAGkT,SAAS1lB,SAAS,qBAC5B6U,GAAMC,OAAO,8BAA+B,GAC5CD,GAAMC,OAAO,2BAA4B,IAGzCD,GAAMC,OAAO,2BAA4B,GAG3C3K,MAUA0K,GAAMC,OAAO,wBAAyB,CACpChL,UAAW0I,EAAGziB,KACdoR,KAAMzD,SAGRmX,GAAMC,OAAO,4BAA6B,CACxCjO,kBAAmB2L,EAAG7I,OAAOvJ,YAAcwF,GAAUrC,oBAGnDsR,GAAMtP,QAAQI,uBAAyB6M,EAAGkT,SAAS1lB,SAAS,kBAC9DmK,EAAK,CAAEpa,KAAM,qBAGboa,EAAK,mBAILya,GAAoB5kB,SAASwS,EAAGziB,MAClC8kB,GAAMC,OAAO,qBAAqB,GAGlCD,GAAMC,OAAO,qBAAqB,GA5KpB,4CAAlB,2DAuLA,IAAM6Q,GAAkB,CAAC,OAAQ,aAAc,UAAW,uBACpDC,GAAqB,CAAC,qBAG5B7Q,GAAO8Q,WAAU,SAACrT,EAAIC,GAChBkT,GAAgB3lB,SAASwS,EAAGziB,MAC9B8kB,GAAMC,OAAO,oBAAoB,GAGjCD,GAAMC,OAAO,oBAAoB,GAG9B8Q,GAAmB5lB,SAASwS,EAAGziB,MACjC8kB,GAAMC,OAAO,uBAAuB,GAGpCD,GAAMC,OAAO,uBAAuB,MAK1BC,UCvXT+Q,GAAc,WAChB,IAAMC,EAAiB,CACnBC,QAASh0B,OAAO0wB,UAAUuD,gBAIxBC,EAAWC,KAAM70B,OAAOy0B,GAiD9B,OA9CAG,EAASE,aAAap2B,QAAQyT,KAAI,SAAU4iB,GAOxC,OANAA,EAAOC,iBAAkB,EAMlBD,KAGXH,EAASE,aAAapB,SAASvhB,KAAI,SAAUuhB,GACzC,OAAOA,KACR,SAAU71B,GAKT2C,QAAQsJ,MAAM,6BAA8BjM,EAAOA,EAAM61B,UACzD,IAAMuB,EAAWp3B,EAAM61B,SAGnBwB,EAAe,0BAEnB,GAAID,GAAYA,EAASv6B,KAAM,CAC3B,IAAMy6B,EAAYF,EAASv6B,KAEvBy6B,IACyB,MAArBA,EAAUC,OACVF,EAAe/5B,OAAOk6B,OAAOF,EAAUG,QAAQ,GAAG,GAExB,MAArBH,EAAUC,OACfF,EAAeC,EAAUI,OAEC,MAArBJ,EAAUC,SAEjBF,EAAex0B,OAAO8f,KAAKuT,kBAOrC,OAFAvzB,QAAQsJ,MAAM,eAAgBorB,GAEvBj4B,QAAQC,QAAQg4B,MAIpBN,GAGI,IACXjc,QADW,SACH6c,GACJ,IAAM7c,EAAUjY,OAAO0wB,UAAUzY,QAC3B3E,EAAelN,KAAK2uB,SAAS5W,SAAS,IAAIrP,UAAU,EAAG,IAmB7D+T,GAAMC,OAAO,qBAAsBxP,GAElC,IAAMqE,EAAS,IAAI3I,gBAAgB,CAChCgmB,cAAe/c,EAAQ+c,cACvBC,UAAWhd,EAAQgd,UACnBlC,aAAc9a,EAAQ8a,aACtBmC,MAAOjd,EAAQid,MAAM7G,OACrBhc,MAAOwQ,GAAMxQ,MAAMiB,aACnB6hB,cAAeld,EAAQkd,gBAGrBC,EAAand,EAAQod,SAAW,IAAM1d,EAAOwG,WACnDne,OAAOs1B,SAASC,KAAOH,EAEvBt1B,QAAQorB,IAAI,aAAckK,IAExBzN,MAtCK,SAsCCnnB,EAAMg1B,EAAgB1hB,GAAU,wKACxC5V,YAAW,WACP,EAAKmE,SAAQ,KACd,GAEGlD,EAAO,EAAKs2B,aALsB,SAOjB3B,KAAc4B,KAAK11B,OAAO0wB,UAAUiF,aAAc,CACrEC,KAAMz2B,EACN02B,kBAAmBr1B,EACnBg1B,eAAgBA,IAVoB,cAOlCxC,EAPkC,OAaxC90B,YAAW,WACP,EAAKmE,SAAQ,KACd,GAfqC,kBAkBjC2wB,GAlBiC,8CAoBtCM,OA1DK,SA0DEwC,EAAqBhiB,GAAU,sKAElC3U,EAAO,EAAKs2B,cAEd,UAAA5S,GAAMxQ,MAAME,mBAAZ,eAAyBnB,eAAgBwC,GAAUxC,YAAYC,iBAC/D,UAAAwR,GAAMxQ,MAAME,mBAAZ,eAAyBnB,eAAgBwC,GAAUxC,YAAYE,gBAL3B,gCAO9BwiB,KAAc4B,KAAK11B,OAAO0wB,UAAUqF,kBAAmB,CACzDH,KAAMz2B,IAR0B,OAWhC22B,GACAA,IAIAjT,GAAMxQ,MAAMc,oBACZ4P,GAAOjoB,KAAK,2BAGZioB,GAAOjoB,KAAK,KApBoB,wCAwB9Bg5B,KAAc4B,KAAK11B,OAAO0wB,UAAUsF,cAAe,CACrDJ,KAAMz2B,IAzB0B,QA4BhC22B,GACAA,IAGJ,EAAKG,YAhC+B,+CAmC5CA,UA7FW,WA+FP,IAAMhe,EAAUjY,OAAO0wB,UAAUzY,QAE3BN,EAAS,IAAI3I,gBAAgB,CAC/BknB,QAASje,EAAQ8a,eAGfqC,EAAand,EAAQke,eAAiB,IAAMxe,EAAOwG,WACzDne,OAAOs1B,SAASC,KAAOH,GAErB7B,eAxGK,WAwGY,sKACnBr1B,YAAW,WACP,EAAKmE,SAAQ,KACd,GAHgB,SAKIyxB,KAAcj1B,IAAImB,OAAO0wB,UAAU0F,wBALvC,cAKbpD,EALa,OAOnB90B,YAAW,WACP,EAAKmE,SAAQ,KACd,GATgB,kBAYZ2wB,GAZY,8CAcjBqD,QAtHK,SAsHGC,EAAWC,EAAaziB,EAAU0iB,GAAQ,wKAC/CA,GACD,EAAKn0B,SAAQ,GAGXlD,EAAO,EAAKs3B,QAAQ3iB,GAL0B,SAO7BggB,KAAc4B,KAAK11B,OAAO0wB,UAAUgG,gBAAiB,CACxEd,KAAMz2B,EACNw3B,UAAWL,EACXM,YAAaL,IAVmC,cAO9CvD,EAP8C,OAapD,EAAK3wB,SAAQ,GAAO,GAbgC,kBAgB7C2wB,GAhB6C,8CAkBlD9M,OAxIK,SAwIEoQ,EAAWxiB,GAAU,wKAC9B,EAAKzR,SAAQ,GAEPlD,EAAO,EAAKs3B,QAAQ3iB,GAHI,SAKPggB,KAAc4B,KAAK11B,OAAO0wB,UAAUmG,eAAgB,CACvEjB,KAAMz2B,EACNw3B,UAAWL,IAPe,cAKxBtD,EALwB,OAU9B,EAAK3wB,SAAQ,GAAO,GAVU,kBAavB2wB,GAbuB,8CAe5B1M,OAvJK,SAuJExL,EAAgBwb,EAAWQ,EAAkBhjB,GAAU,4KAChE,EAAKzR,SAAQ,GAEPlD,EAAO,EAAKs3B,QAAQ3iB,GAEpBijB,EAAO,CACT53B,OACAm3B,YACAU,aAAcF,GAIZzB,EAAWva,EAAiB9a,OAAO0wB,UAAUuG,oBAAsBj3B,OAAO0wB,UAAUwG,eAZ1B,SAazCpD,KAAcqD,MAAM9B,EAAU0B,GAbW,cAa1D/D,EAb0D,OAehE,EAAK3wB,SAAQ,GAAO,GAf4C,kBAkBzD2wB,GAlByD,8CAoB9Dpb,OA3KK,SA2KE9D,EAAUgc,EAAQzhB,EAAWgP,EAAmBrN,GAAU,0KACnE,EAAK3N,SAAQ,GAEPlD,EAAO,EAAKs3B,QAAQ3iB,GAHyC,SAK5CggB,KAAcj1B,IAAImB,OAAO0wB,UAAU0G,eAAgB,CACtEzf,OAAQ,CACJie,KAAMz2B,EACNk4B,SAAUvjB,EACVwjB,OAAQxH,EACRyH,UAAWlpB,EACXmpB,kBAAmBna,EACnBoa,iBAAkBznB,KAZyC,cAK7DgjB,EAL6D,OAgB7D0E,EACF1E,GACAA,EAASh5B,MACTg5B,EAASh5B,KAAKua,OACdye,EAASh5B,KAAKua,MAAM/Z,OAExB,EAAK6H,SAAQ,GAAQq1B,GAtB8C,kBAyB5D1E,GAzB4D,8CA2BjE2E,6BAtMK,SAsMwB7jB,EAAUuQ,EAAKhW,EAAWgP,GAAmB,0KAC5E,EAAKhb,SAAQ,GAEPlD,EAAO,EAAKs3B,QAAQ3iB,GAHkD,SAKrDggB,KAAcj1B,IAAImB,OAAO0wB,UAAUkH,qCAAsC,CAC5FjgB,OAAQ,CACJxY,OACA2U,WACAuQ,MACAhW,YACAgP,uBAXoE,cAKtE2V,EALsE,OAetE0E,EACF1E,GACAA,EAASh5B,MACTg5B,EAASh5B,KAAK0a,cAElB,EAAKrS,SAAQ,GAAQq1B,GApBuD,kBAuBrE1E,GAvBqE,8CAyB1EtQ,KA/NK,SA+NAoN,EAAQzhB,EAAWgP,EAAmBvJ,EAAU9D,GAAU,wKACjE,EAAK3N,SAAQ,GAEPlD,EAAO,EAAKs3B,QAAQ3iB,GAHuC,SAK1CggB,KAAc4B,KAAK11B,OAAO0wB,UAAUmH,aAAc,CACrEjC,KAAMz2B,EACNm4B,OAAQxH,EACRyH,UAAWlpB,EACXmpB,kBAAmBna,EACnBya,SAAU9nB,IAVmD,cAK3DgjB,EAL2D,OAajE,EAAK3wB,SAAQ,GAAO,GAb6C,kBAgB1D2wB,GAhB0D,8CAkB/D+E,UAjPK,SAiPKjkB,EAAUzF,EAAWgP,EAAmBgH,GAAK,wKACzD,EAAKhiB,SAAQ,GAEPlD,EAAO,EAAKs3B,QAAQ3iB,GAH+B,SAKlCggB,KAAc4B,KAAK11B,OAAO0wB,UAAUsH,kBAAmB,CAC1E74B,OACA2U,WACAzF,YACAgP,oBACAgH,QAVqD,cAKnD2O,EALmD,OAazD,EAAK3wB,SAAQ,GAAO,GAbqC,kBAgBlD2wB,GAhBkD,8CAkBvD1E,WAnQK,SAmQMrd,EAAWhS,GAAO,wKAC/B,EAAKoD,SAAQ,GAEPlD,EAAO,EAAKs2B,aAHa,SAKR3B,KAAc4B,KAAK11B,OAAO0wB,UAAUuH,mBAAoB,CAC3EhnB,YACAhS,QACAE,SAR2B,cAKzB6zB,EALyB,OAW/B,EAAK3wB,SAAQ,GAAO,GAXW,kBAcxB2wB,GAdwB,8CAgB7B1D,YAnRK,SAmROre,EAAWhS,EAAOwwB,GAAK,wKACrC,EAAKptB,SAAQ,GAEPlD,EAAO,EAAKs2B,aAHmB,SAKd3B,KAAcqD,MAAMn3B,OAAO0wB,UAAUwH,iBAAkB,CAC1EjnB,YACAhS,QACAwwB,MACAtwB,SATiC,cAK/B6zB,EAL+B,OAYrC,EAAK3wB,SAAQ,GAAO,GAZiB,kBAe9B2wB,GAf8B,8CAiBnCmF,kBApSK,WAoSe,wKAEhBh5B,EAAO,EAAKs2B,aAFI,SAIC3B,KAAcj1B,IAAImB,OAAO0wB,UAAU0H,0BAA2B,CACjFzgB,OAAQ,CACJxY,UANc,cAIhB6zB,EAJgB,yBAUfA,GAVe,8CAY1ByD,QAhTW,SAgTH3iB,GACJ,IAAMukB,EAAYxV,GAAMtP,QAAQpU,KAEhC,OAAIk5B,GAAavkB,IACZukB,EAAUl5B,OAASyU,GAAUzU,KAAK6R,kBAC/BqnB,EAAUl5B,OAASyU,GAAUzU,KAAK4R,gBACtCsnB,EAAUvkB,WAAaA,EAGhBukB,EAAUl5B,KAIdyU,GAAUzU,KAAK2R,aAE1B2kB,WA/TW,WAgUP,OAAO5S,GAAMtP,QAAQpU,KAAKA,MAE9BkD,QAlUW,SAkUHgD,EAAMO,GACVid,GAAMC,OAAO,gBAAiB,CAAEzd,KAAMA,EAAMO,wBAAyBA,KAEnEiqB,uBArUK,SAqUkBzhB,EAAY0hB,GAAQ,0KAC7C,EAAKztB,SAAQ,GAGPlD,EAAO,EAAKs3B,QAAQroB,GAJmB,SAKtB0lB,KAAcj1B,IAAImB,OAAO0wB,UAAUb,uBAAwB,CAC9ElY,OAAQ,CACJie,KAAMz2B,EACNm5B,WAAYlqB,EACZkpB,OAAQxH,KAT6B,cAKvCkD,EALuC,OAavC0E,EACF1E,GACAA,EAASh5B,MACTg5B,EAASh5B,KAAKua,OACdye,EAASh5B,KAAKua,MAAM/Z,OAExB,EAAK6H,SAAQ,GAAQq1B,GAnBwB,kBAqBtC1E,GArBsC,+CC/XtC,IACXuF,WADW,WAGP1V,GAAMC,OAAO,oBAAqB,MAElCD,GAAMC,OAAO,sBAAuB,MACpCD,GAAMC,OAAO,qBAAsB,MACnCD,GAAMC,OAAO,wBAAyB,MACtCD,GAAMC,OAAO,oBAAqB,OAEtCwQ,OAVW,WAUF,WAECwC,EAAsB,WACxB,EAAKyC,cAGTvgB,GAAUsb,OAAOwC,IAErBG,UAlBW,WAoBPt1B,KAAK43B,aAELvgB,GAAUie,aAEduC,UAxBW,WAgCP73B,KAAK43B,aAGL1V,GAAMC,OAAO,eAAgB,CACzBzd,MAAM,EACNU,SAAS,EACTI,MAAOnG,OAAO8f,KAAK2Y,qBACnB36B,QAASkC,OAAO8f,KAAKuT,kBAIzBn1B,YAAW,WACP8Z,GAAUie,cACX,MAEPxC,sBA/CW,SA+CWT,EAAU0F,EAAgBlE,EAC5CmE,EAAgBtQ,EAAiBuQ,EAAeC,GAAY,WACxD1yB,EAAQquB,EACRzuB,GAAU,EAEd,GAAIitB,GAAYA,EAASh5B,KACrBmM,EAAQuyB,EACR3yB,GAAU,EAEL8yB,GACDhW,GAAMC,OAAO,eAAgB,CAAEzd,MAAM,EAAMU,QAASA,EAASI,MAAOA,IAGxE0c,GAAMC,OAAO,oBAAqBkQ,EAASh5B,KAAKuY,aAE5C8V,GACAA,QAED,CAeH,GAbKwQ,GAAc7F,IAAahzB,OAAO8f,KAAKuT,kBACpCL,IAAahzB,OAAO8f,KAAKuT,kBACzBltB,EAAQnG,OAAO8f,KAAK2Y,sBAGxB5V,GAAMC,OAAO,eAAgB,CACzBzd,MAAM,EACNU,QAASA,EACTI,MAAOA,EACPrI,QAASk1B,KAIbA,IAAahzB,OAAO8f,KAAKuT,gBAQzB,OANA1yB,KAAK43B,aAELr6B,YAAW,WACP,EAAK+3B,cACN,KAEIj2B,OAAO8f,KAAKuT,gBAGnBuF,GACAA,IAQR,OAJID,GACAA,IAGG5yB,GAEX+yB,0BAtGW,SAsGe5oB,EAAQmE,GAC9B,GAAInE,GAAUmE,EAAa,CACvB,IAAM1E,EAAeopB,GAAU9oB,mBAAmBC,GAElD,GAAIP,EAAc,CACd,IAAMqpB,EAAa3kB,EAAYU,MAC3B,SAAC/Q,GAAD,OAAOA,EAAExD,KAAKwU,gBAAkBrF,EAAavB,WAAW4G,iBAG5D,GAAIgkB,EAIA,OAHArpB,EAAamE,SAAWklB,EAAW14B,GAG5BqP,GAKnB,OAAO,MAEXqe,qBA1HW,WA2HP,OAAOnL,GAAMtP,QAAQoB,mBAEzBskB,oBA7HW,SA6HS9qB,EAAU+qB,EAAiBC,GAC3C,GAAID,EAAiB,CACjB,IAAME,EAAY1tB,KAAOytB,GAAmBlrB,MACxC4O,EAAuBqc,EAAgBG,sBAAsBD,GAEjE,GAAIF,EAAgBI,uBAAyB,EAAG,CAE5C,IAAMC,EAAaprB,EAASlE,MAAK,SAAAjG,GAAC,OAAI2Z,GAAWhS,cAAcwtB,EAAmBn1B,EAAEqK,UAAWrK,EAAEsK,YAE7FirB,IACA1c,EAAuBqc,EAAgBI,wBAI/C,GAAIzc,EAAuB,EACvB,OAAOA,EAIf,OAAO,MAEXqW,6BAlJW,SAkJkBF,GACrBA,GAAYA,EAASh5B,OAErB6oB,GAAMC,OAAO,iBAAkBkQ,EAASh5B,KAAKsY,UAC7CuQ,GAAMC,OAAO,oBAAqBkQ,EAASh5B,KAAKuY,eAGxDgE,kBAzJW,SAyJOyc,GACVA,GACAnQ,GAAMC,OAAO,oBAAqBkQ,IAG1CwG,kBA9JW,SA8JOvI,EAAa5iB,GAC3B,IAAMzL,EACF8I,KAAOulB,GAAa5kB,KAChBX,KAAO2C,IAETorB,EACF/tB,KAAO9I,SAASA,GAAU82B,YAE9B,OAAOD,GAEXzK,kBAxKW,SAwKO2K,EAActqB,EAAKuqB,GAAW,WACtCtJ,EAAQzN,GAAMxQ,MAAMO,SAE1B,GAAKgnB,GAActJ,EAAMtd,UAAzB,CAIA,IAAIL,EAAoBkQ,GAAMxQ,MAAMM,kBAEhC2d,EAAMvd,gBACNya,cAAc8C,EAAMvd,eACpBud,EAAMvd,cAAgB,IAQ1B,IAAM8mB,EAAWl5B,KAAK64B,kBAAkBnqB,EAAKsD,GAE7C,GAAIknB,EAAW,GAAKA,EAAWF,EAC7B,CACE,IAAMG,EAAuBH,EAAeE,EAC5CvJ,EAAMzd,eAAiBinB,OAEtB,IAAKF,EAEN,YADAj5B,KAAKo5B,gBAITzJ,EAAMvd,cAAgBua,aAAY,WAE1BgD,EAAMzd,gBAAkB,EACxB,EAAKknB,iBAELzJ,EAAMzd,gBAAkB,EACxByd,EAAMxd,mBACDwd,EAAMzd,eAAiB8mB,EAAgB,IAE5C9W,GAAMC,OAAO,iBAAkB,CAC3BjQ,eAAgByd,EAAMzd,eACtBC,mBAAoBwd,EAAMxd,mBAC1BC,cAAeud,EAAMvd,cACrBC,WAAW,IAGX4mB,GACA/W,GAAMC,OAAO,0BAA2BzT,MAGjD,OAEP0qB,cA7NW,WA8NP,IAAMzJ,EAAQzN,GAAMxQ,MAAMO,SAE1B0d,EAAMzd,eAAiB7S,OAAO0wB,UAAUsJ,+BACxC1J,EAAMxd,mBAAqB,IAEvBwd,EAAMvd,gBACNya,cAAc8C,EAAMvd,eACpBud,EAAMvd,cAAgB,IAG1B8P,GAAMC,OAAO,iBAAkB,CAC3BjQ,eAAgByd,EAAMzd,eACtBC,mBAAoBwd,EAAMxd,mBAC1BE,WAAW,MChNvB,IACEjV,KAAM,UACN/D,KAAM,WAAR,OACA,0BACA,gCACA,qBACA,6BAEE+H,SAAU,OAAZ,OAAY,CAAZ,kBACA,0CACA,0BAEEmD,QAAS,OAAX,OAAW,CAAX,kBACA,kDADA,IAEI,QAFJ,SAEA,6KACA,oDAEA,uBAHA,qBAMA,wBANA,mBAOA,wBACA,wBACA,aAGA,SAZA,uBAaA,+CAbA,mBAcA,GAdA,cAkBA,iDAlBA,UAuBA,WACA,iCACA,EACA,gCACA,GA3BA,eAuBA,EAvBA,OA8BA,aACA,kCACA,4BACA,0BAEA,iCACA,qCAIA,0BACA,EACA,2BACA,wBACA,KACA,EACA,KACA,GA/CA,kBAkDA,GAlDA,kCAqDA,GArDA,+CAuDI+0B,6BAzDJ,WA4DM,GACN,2BACA,sEACA,CACQt5B,KAAKyK,2BAA6BzK,KAAKwK,qBAAqBmrB,UAE5D,IAAR,sCACA,4BACA,8CAMQ31B,KAAKqK,kBAAkB,CACrB3F,MAAM,EACNU,SAAS,EACTjI,QAASo8B,MAIfC,oBAjFJ,WAiFA,WACUx5B,KAAKy5B,oBAITz5B,KAAKy5B,mBAAoB,EAEzBz5B,KAAK05B,iBAEL/M,aAAY,WACV,EAAR,mBACA,wCAEI,eA9FJ,WA8FA,sKACA,cADA,oDAMA,oDAEA,uBARA,oBASA,gDAUA,cACA,kDApBA,iCAwBA,iBAxBA,OAwBA,EAxBA,OA0BA,GAEA,yCACA,iBACA,GAGA,qBACA,QACA,WACA,aAGA,iCAvCA,wBA0CA,iCA1CA,gCA6CA,kCA7CA,+CAiDI,qBA/IJ,WA+IA,6JACA,uBADA,oBAKA,cACA,kDANA,gCASA,YATA,6BAWA,gBACA,kBACA,4DAbA,8CAkBIgN,wBAjKJ,WAiKA,WACA,oCACA,YAAQ,OACR,0CACA,sBAGM,GAAIC,EAAoB,CACtB,IAAR,sBACU,OAAO5c,GAAW3Q,WAC5B,mBACA,YACA,4CACA,0CACA,qBAIQ,OAAO7B,EAGT,OAAO,QAGX5F,MAAO,CACLgN,YADJ,SACA,KACU7M,GACF/E,KAAKw5B,uBAGTjqB,OANJ,SAMA,gBACM,GAAIxK,GAA+B,YAAnBA,EAAS2M,MAAqB,CAI5C,IAAR,+BACA,QACA,iCAGY1C,GACFhP,KAAKmV,6BAA6BnG,GAGlChP,KAAKigB,UAAf,iJAEA,cACA,kDAHA,gCAMA,YANA,6BAQA,sCAEA,sBACA,QACA,8BACA,YAbA,6CAkBUjgB,KAAKwH,mBAAmB,CACtBhC,MAAOnG,OAAO8f,KAAKQ,mBACnBxiB,QAASkC,OAAO8f,KAAKS,uBC9Q2W,MCQxY,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,MAAiB,QAMhC,IAAkB,GAAW,CAACre,OAAA,KAAKC,QAAA,OCzBnC,IAAI,GAAS,WAAa,IAAIzB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,2BAA2B,CAACF,EAAG,MAAM,CAACI,YAAY,CAAC,SAAW,QAAQ,gBAAgB,OAAOF,MAAM,CAAC,GAAK,0BAA0BF,EAAG,MAAM,CAACI,YAAY,CAAC,SAAW,QAAQ,gBAAgB,OAAOF,MAAM,CAAC,GAAK,0BAA0BF,EAAG,MAAM,CAACe,YAAY,gBAAgBX,YAAY,CAAC,aAAa,SAAS,UAAU,IAAI,MAAQ,OAAO,QAAU,KAAKF,MAAM,CAAC,GAAK,aAAa,CAACF,EAAG,IAAI,CAACe,YAAY,gBAAgBX,YAAY,CAAC,UAAU,IAAI,MAAQ,OAAO,aAAa,WAAW,MAAQ,QAAQ,SAAW,WAAW,IAAM,UAAU,CAACR,EAAIiB,GAAG,oBAAoBb,EAAG,QAAQ,CAACI,YAAY,CAAC,OAAS,QAAQF,MAAM,CAAC,IAAQL,KAAa,SAAI,0BAA2B,MAAQ,MAAM,OAAS,UAAU,GAAGG,EAAG,MAAM,CAACe,YAAY,gBAAgBX,YAAY,CAAC,aAAa,SAAS,UAAU,IAAI,MAAQ,SAAS,CAACJ,EAAG,SAAS,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,OAAQyB,EAAI85B,YAAal5B,WAAW,iBAAiBJ,YAAY,CAAC,MAAQ,QAAQ,YAAY,SAAS,CAACR,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI6B,iBAAiB,GAAGzB,EAAG,MAAM,CAACe,YAAY,UAAU,CAACf,EAAG,IAAI,CAACM,WAAW,CAAC,CAACrD,KAAK,SAASsD,QAAQ,WAAWpC,MAAOyB,EAAY,SAAEY,WAAW,aAAaO,YAAY,OAAOX,YAAY,CAAC,SAAW,WAAW,MAAQ,OAAO,MAAQ,SAASF,MAAM,CAAC,GAAK,eAAe,CAACF,EAAG,KAAK,CAACJ,EAAIiB,GAAGjB,EAAI4B,GAAG5B,EAAI+5B,iCAAiC35B,EAAG,MAAM,CAACM,WAAW,CAAC,CAACrD,KAAK,OAAOsD,QAAQ,SAASpC,MAAOyB,EAAW,QAAEY,WAAW,YAAYJ,YAAY,CAAC,SAAW,WAAW,OAAS,MAAM,KAAO,UAAU,CAACJ,EAAG,SAAS,CAACE,MAAM,CAAC,MAAQ,UAAU,CAACN,EAAIiB,GAAG,sBAAsB,GAAGb,EAAG,MAAM,CAACA,EAAG,MAAM,CAACe,YAAY,QAAQb,MAAM,CAAC,MAAQ,6BAA6B,cAAc,+BAA+B,QAAU,cAAc,oBAAsB,OAAO,kBAAkB,SAAS,CAACF,EAAG,OAAO,CAACA,EAAG,OAAO,CAACE,MAAM,CAAC,GAAK,cAAc,EAAI,gFAAgFF,EAAG,IAAI,CAACe,YAAY,YAAY,CAACf,EAAG,MAAM,CAACE,MAAM,CAAC,aAAa,eAAe,EAAI,KAAK,EAAI,IAAI,KAAO,0BAA0BF,EAAG,MAAM,CAACE,MAAM,CAAC,aAAa,eAAe,EAAI,KAAK,EAAI,IAAI,KAAO,2BAA2BF,EAAG,MAAM,CAACE,MAAM,CAAC,aAAa,eAAe,EAAI,KAAK,EAAI,IAAI,KAAO,2BAA2BF,EAAG,MAAM,CAACE,MAAM,CAAC,aAAa,eAAe,EAAI,KAAK,EAAI,IAAI,KAAO,qBACj1E,GAAkB,GCkHtB,IACEjD,KAAM,sBACN/D,KAAM,WAAR,OACA,eACA,WACA,iBACA,8BACA,aACA,CACQ0K,gBAAiB,4CACjB+nB,eAAgB,UAChBxR,KAAM,wBAER,CACEvW,gBAAiB,4CACjB+nB,eAAgB,UAChBxR,KAAM,mBAER,CACEvW,gBAAiB,4CACjB+nB,eAAgB,UAChBxR,KAAM,kBAER,CACEvW,gBAAiB,4CACjB+nB,eAAgB,UAChBxR,KAAM,YAER,CACEvW,gBAAiB,4CACjB+nB,eAAgB,UAChBxR,KAAM,SAcZ8V,QA7CF,WA6CA,WACIpwB,KAAKsf,mBAELtf,KAAKgF,4BAA4B,WAEjChF,KAAK85B,2BAA6Bz6B,OAAO8f,KAAK4a,oBAE9Cx8B,YAAW,WACT,EAAN,iBACA,MAEEgH,QAAS,CACPC,aADJ,WAEMxE,KAAKgD,OAAO,IAEdg3B,SAJJ,WAKM/9B,SAAS8G,eAAe,cAAcU,MAAME,IAClD,mCAEM3D,KAAKsf,oBAEPA,iBAVJ,WAWMrjB,SAAS8G,eAAe,0BAA0BU,MAAMI,OAC9D,4BAEIb,OAdJ,SAcA,cACM,KAAIi3B,GAASj6B,KAAKk6B,YAAYrgC,QAA9B,CAIA,IAAN,EACA,0BACA,EACA,0BACA,sBAEM0D,YAAW,WACT,EAAR,kCAEY08B,IAAU,EAAtB,uBACUh+B,SAAS8G,eAAe,YAAYU,MAAMW,QAAU,KAE9D,KAEM,IAAN,0CAEA,OAEQtB,EADEm3B,EAAQj6B,KAAKk6B,YAAYrgC,OAAS,EACjB,WACjB,EAAV,8CACU,EAAV,aAG2B,WACjB,EAAV,8CACUoC,SAAS8G,eACnB,0BACA,kEAEU9G,SAAS8G,eAAe,wBAAwBU,MAAMW,QAAU,EAChEnI,SAAS8G,eAAe,wBAAwBU,MAAMW,QAAU,EAChE,EAAV,eAEU7G,YAAW,WACT,EAAZ,WACYA,YAAW,WACT,EAAd,aACA,OACA,OAIMoH,EAASrC,iBACf,EACA,EACA,IACA,EACA,GACA,KACA,mBACA,GACA,EACA,OClPwZ,MCQpZ,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,OAIa,MAAiB,QAMhC,IAAkB,GAAW,CAACd,QAAA,KAAMC,OAAA,OAMpC,KAAkB,GAAW,CAAC4e,OAAA,UCqB9B,QACE,KAAF,MACE,WAAF,CACI,oBAAJ,EACI,QAAJ,EACI,aAAJ,EACI,aAAJ,EACI,YAAJ,GACI,QAAJ,GACI,oBAAJ,IAEE,KAAF,WAAI,MAAJ,CACM8R,6BAA6B,EAC7B7xB,eAAgB,qBAChB65B,UAAW,EACXC,iBAAkB,EAClBC,wBAAwB,IAE5B,QAAF,iCACA,gBACA,4BACA,gBAHA,IAKI,SALJ,aAiBI,kBAjBJ,WAiBM,IAAN,OACM,KAAN,2BAEM,QAAN,MACA,OACA,6BACA,gCAIM,aAAN,WACQ,EAAR,0BAOA,wCAEI,4BArCJ,WAqCM,IAAN,OACM,IAAN,4BAAM,CAIA,KAAN,0BAGM,IAAN,cACQ,IAAR,iDACU,OAAV,YACA,YACA,WACA,sBAIA,GAEU,EAAV,8BAIM,EAAN,6BACA,GAIM,aAAN,WACQ,EAAR,6BACA,KAEA,2CAEI,uCAvEJ,WAwEA,6BACQ,QAAR,yCACQ,KAAR,mBACU,MAAV,EACU,SAAV,EACU,QAAV,kCAGA,wBACQ,QAAR,wCAEQ,KAAR,mBACU,MAAV,EACU,SAAV,EACU,QAAV,8BAII,wBA1FJ,WA2FM,QAAN,qBACM,KAAN,mBACQ,MAAR,EACQ,SAAR,EACQ,QAAR,mCAGI,kBAlGJ,SAkGA,KACM,IAAN,gBACA,gBAGA,0CACQ,GAAR,IAGA,0CACQ,GAAR,IAGM,IAAN,6BACA,6BAIQ,KAAR,eAFA,aAEA,KAGA,iDAIE,MAAF,CACI,OADJ,SACA,KACM,KAAN,wBAEI,SAJJ,SAIA,KACA,GACQ,KAAR,+BAGI,WAAJ,CACM,WAAN,EACM,QAFN,SAEA,KACQ,KAAR,yBAIE,QA7JF,WA8JI,QAAJ,oBAEA,6CACM,KAAN,+BAEM,KAAN,qBAGE,QAtKF,WAwKA,wCACA,sCACQ,KAAR,0BAEQ,KAAR,4CChOsX,M,sCCQlX,GAAY,eACd,GACA,EACA75B,GACA,EACA,KACA,KACA,MAIa,MAAiB,QAMhC,IAAkB,GAAW,CAAC85B,QAAA,KAAKC,SAAA,O,2BCpBnC1pB,OAAIC,IAAI0pB,SAEO,WAAIA,QAAQ,CACvBC,MAAO,CACHC,MAAM,EACNC,OAAQ,CACJC,MAAO,CACHC,OAAQ,UACRC,QAAS,WAEbJ,KAAM,CACFG,OAAQ,YAGhB3R,QAAS,CACL6R,kBAAkB,EAClBC,YAAY,EACZC,SAAU,kB,wBCdP,IACX5hC,KAAM,iBAAO,CACT0gC,qBAAqB,EACrBmB,WAAY,QACZC,WAAYrJ,gBACZrR,cAAeqR,0BACfzO,gBAAiByO,6BACjBsJ,UAAWtJ,sBACX3wB,SAAU2wB,4BAEd1wB,SAAU,gDACHi6B,eAAS,CAAC,OAAQ,cAAe,WAAY,iBAC7CC,eAAW,CAAC,gBAAiB,gBAF5B,IAGJlW,eAHM,WAIF,OAAO/lB,OAAO0wB,WAElB7L,aANM,WAOF,OAAOlkB,KAAKu7B,SAASd,MAAME,OAAOC,MAAMY,WAGhDj3B,QAAS,iCACFk3B,eAAa,CAAC,gBAAiB,eAAgB,qBAAsB,uBADrE,IAEHC,KAFK,WAGDC,MAAM,UAEV5S,QALK,WAOD,IAAMle,EAAYE,KAAO1L,OAAO0wB,UAAU6L,gBACpCpwB,EAAcT,KAAOF,EAAUY,OAAO,eAE5C,MAAO,CACHZ,YAAWW,gBAGnBmP,MAdK,SAcCkhB,GACF,OAAOzP,KAAK0P,MAAM1P,KAAKC,UAAUwP,KAErCE,eAjBK,WAkBD,IAAMC,EAAW,IAAIC,KACfvhC,EAASshC,EAASE,YAQxB,OAAOxhC,GAAUA,EAAOyvB,QAAUzvB,EAAOyvB,OAAOntB,OAAgC,WAAvBtC,EAAOyvB,OAAOntB,MAA4C,WAAvBtC,EAAOyvB,OAAOntB,OAE9Gm/B,qBA7BK,WA8BD,IAAMH,EAAW,IAAIC,KACfvhC,EAASshC,EAASE,YAExB,OAAOxhC,GAAUA,EAAO0hC,SAAmC,OAAxB1hC,EAAO0hC,QAAQh/B,MAEtDi/B,QAnCK,WAoCD,MAAO,WAAWrS,KAAK3qB,OAAO8I,UAAUm0B,YAE5CC,mBAtCK,WAuCD,OAAQl9B,OAAOm9B,WAAW,8BAA8BC,SAAap9B,OAAO8I,UAAUu0B,YAAezgC,SAAS0gC,SAAStvB,SAAS,mBAEpIyZ,yBAzCK,WA0CD,OAAO9mB,KAAKu8B,sBAAwBv8B,KAAK+7B,kBAE7Ca,QA5CK,WA6CD,MAAO,CACHC,OAAQ5gC,SAAS6gC,gBAAgBC,aACjCC,QAAS,GACTC,mBAAoB,IACpBC,OAAQ,GACRC,UAAW,GACXC,UAAW,GACXC,gBAAiB,KAGzBC,aAvDK,WAwDD,OAAOrhC,SAAS6gC,gBAAgBC,cAEpCQ,cA1DK,WA2DD,MAAO,CACHC,kBAAmBn+B,OAAOmE,YAC1Bi6B,mBAAoBp+B,OAAOw9B,OAAOh5B,OAClC65B,gBAAiBzhC,SAAS6gC,gBAAgBC,aAC1CY,gBAAiB1hC,SAAS6gC,gBAAgBc,eAGlDC,uBAlEK,WAmE8B5hC,SAC1B8G,eAAe,oBACfG,wBAAwBW,OAE7B,OAAO,IAEXoqB,KAzEK,SAyEAkG,GACIn0B,KAAK6S,cAIN7S,KAAKe,QAAQ5G,KAAK,CAAEiD,KAAM,YAH1Bia,GAAUC,QAAQ6c,IAM1BxB,OAjFK,WAkFD9E,GAAc8E,UAElBztB,oBApFK,SAoFejD,GAEhB,IAAI67B,EAAa99B,KAAKqF,WAAa,UAAY,UAG/CrF,KAAK+9B,gBAAgBD,GAEI,SAArB99B,KAAKoX,OAAOha,OACZ0gC,EAAa99B,KAAKqF,WAAa,UAAY,WAG/CrF,KAAKgF,4BAA4B84B,EAAY77B,IAEjD87B,gBAjGK,SAiGW37B,EAAO47B,GACnBh+B,KAAKu7B,SAASd,MAAME,OAAOC,MAAMY,QAAUp5B,EAC3CpC,KAAKu7B,SAASd,MAAME,OAAOC,MAAMoD,UAAYA,GAEjDh5B,4BArGK,SAqGuB5C,EAAOH,GAC/B,IAAMg8B,EAAiBhiC,SAAS8G,eAAe,kBAAkBm7B,aAAa,WAE9Eh8B,eAAM,CACFC,QAAS,kBACTg8B,QAAS,CAACF,EAAgB77B,GAC1BH,SAAUA,GAAY,EACtBI,OAAQ,iBAUhBie,OAtHK,WAuHDjhB,OAAO++B,QAAQvkC,OAAS,EAAImG,KAAKe,QAAQs9B,IAAI,GAAKr+B,KAAKe,QAAQ5G,KAAK,MAExE6oB,OAzHK,WA0HDhjB,KAAKe,QAAQ5G,KAAK,MAEtB2T,wBA5HK,SA4HmBC,GACpB,GAAIA,EAAK,CACL,IAAMC,EAAmBD,EAAIE,QAAQ,KACrC,GAAID,GAAoB,GAAKD,EAAIlU,OAAS,EAAG,CACzC,IAAMqU,EAAiBH,EAAII,UAAUH,EAAmB,GACxD,OAAOlU,OAAOsU,YAAY,IAAIC,gBAAgBH,KAItD,OAAO,MAEXvI,WAvIK,WAwID,IAAM24B,EAAI,CACN16B,MAAO3H,SAAS6gC,gBAAgByB,YAChC16B,OAAQ5H,SAAS6gC,gBAAgBC,aACjCr3B,IAAKD,KAAKC,IAAIzJ,SAAS6gC,gBAAgByB,YAAatiC,SAAS6gC,gBAAgBC,cAC7E72B,IAAKT,KAAKS,IAAIjK,SAAS6gC,gBAAgByB,YAAatiC,SAAS6gC,gBAAgBC,eAGjF,OAAOuB,GAEXxL,sBAjJK,SAiJiBT,EAAU0F,EAAgBlE,EAC5CmE,EAAgBtQ,EAAiBuQ,EAAeC,GAEhD,OAAOrK,GAAciF,sBAAsBT,EAAU0F,EAAgBlE,EACjEmE,EAAgBtQ,EAAiBuQ,EAAeC,OC1KhErnB,OAAI6iB,OAAO8K,eAAgB,EAE3B3tB,OAAI4tB,MAAMC,IAEV,IAAI7tB,OAAI,CACNuR,UACAF,SACAyc,WACAC,OAAQ,SAAAC,GAAC,OAAIA,EAAEC,OACdC,OAAO,S,sIChBV,yBAAghB,EAAG,G,oCCAnhB,yBAAwiB,EAAG,G,oCCA3iB,yBAA+iB,EAAG,G,oFCAljB,yBAAmiB,EAAG,G,6DCAtiB,yBAA8hB,EAAG,G,2DCAjiB,yBAA6iB,EAAG,G,oCCAhjB,yBAAuiB,EAAG,G,oCCA1iB,yBAA2gB,EAAG,G,kCCA9gB,yBAA6iB,EAAG,G,yDCAhjB,yBAAiiB,EAAG,G,qBCApiBzjC,EAAOD,QAAU,IAA0B,mC,kCCA3C,yBAAkhB,EAAG,G,yDCArhB,yBAAqhB,EAAG,G,yDCAxhB,yBAAugB,EAAG,G,gFCA1gB,0BAAuiB,EAAG,G,gFCA1iB,yBAA6iB,EAAG,G","file":"js/app.b2c8b4e6.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"about\":\"about\"}[chunkId]||chunkId) + \".\" + {\"about\":\"6b1d92fd\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/seatbooking/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingSearchForm.vue?vue&type=style&index=0&id=d8d1d088&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingSearchForm.vue?vue&type=style&index=0&id=d8d1d088&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=1a2aa8f8&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=1a2aa8f8&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=1&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=1&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GantryAccessQR.vue?vue&type=style&index=0&id=4133be48&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GantryAccessQR.vue?vue&type=style&index=0&id=4133be48&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Help.vue?vue&type=style&index=1&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Help.vue?vue&type=style&index=1&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookingDetails.vue?vue&type=style&index=0&id=565eba45&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookingDetails.vue?vue&type=style&index=0&id=565eba45&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ValidateOtp.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ValidateOtp.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatsAvailability.vue?vue&type=style&index=0&id=99aee8fe&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatsAvailability.vue?vue&type=style&index=0&id=99aee8fe&scoped=true&lang=css&\"","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('SystemAlert'),(_vm.showServiceNotAvailablePage)?_c('ServiceNotAvailable'):[_c('Loading'),_c('RippleResult'),_c('SystemDialog'),_c('v-main',[_c('transition',{attrs:{\"name\":_vm.transitionName}},[_c('keep-alive',[_c('router-view',{staticStyle:{\"position\":\"fixed\",\"width\":\"100vw\",\"height\":\"100vh\",\"background\":\"white\"}})],1)],1)],1),_c('CheckIn'),_c('BottomNavigationBar')]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"bottomNavigation\"}},[_c('v-bottom-navigation',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showNavBar),expression:\"showNavBar\"}],staticStyle:{\"height\":\"auto\"},attrs:{\"value\":_vm.navBarActiveButton,\"fixed\":\"\",\"grow\":\"\",\"color\":\"primary\"}},[_c('v-btn',{on:{\"click\":function($event){_vm.$router.push('/seatavailability', function () {})}}},[_c('span',[_vm._v(\"Check\")]),_c('v-icon',[_vm._v(\"mdi-calendar-question\")])],1),_c('v-btn',{on:{\"click\":function($event){_vm.$router.push('/', function () {})}}},[_c('span',[_vm._v(\"New\")]),_c('v-icon',[_vm._v(\"mdi-calendar-plus\")])],1),_c('v-btn',{on:{\"click\":function($event){_vm.$router.push('/mybookings', function () {})}}},[_c('span',[_vm._v(\"My Bookings\")]),_c('v-icon',[_vm._v(\"mdi-calendar-star\")])],1),_c('v-btn',{on:{\"click\":function($event){_vm.$router.push('/account', function () {})}}},[_c('span',[_vm._v(\"Account\")]),_c('v-icon',[_vm._v(\"mdi-account-circle\")])],1)],1),_c('v-bottom-navigation',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showQRCodeBar),expression:\"showQRCodeBar\"}],staticStyle:{\"height\":\"auto\"},attrs:{\"value\":_vm.navQRCodeActiveButton,\"fixed\":\"\",\"grow\":\"\",\"color\":\"primary\"}},[_c('span',{staticClass:\"qrcode-bar-btm-wording\"},[_vm._v(\" Scan the QR code to make a booking! \")]),_c('v-img',{attrs:{\"src\":(_vm.iconPath + \"qrcode.png\"),\"max-height\":\"120\",\"max-width\":\"120\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div id=\"bottomNavigation\">\r\n <v-bottom-navigation\r\n v-show=\"showNavBar\"\r\n :value=\"navBarActiveButton\"\r\n fixed\r\n grow\r\n color=\"primary\"\r\n style=\"height: auto\"\r\n >\r\n <!-- \r\n CHECK Button \r\n -->\r\n <v-btn @click=\"$router.push('/seatavailability', () => {})\">\r\n <span>Check</span>\r\n <v-icon>mdi-calendar-question</v-icon>\r\n </v-btn>\r\n\r\n <!-- \r\n NEW Button \r\n -->\r\n <v-btn @click=\"$router.push('/', () => {})\">\r\n <span>New</span>\r\n <v-icon>mdi-calendar-plus</v-icon>\r\n </v-btn>\r\n\r\n <!-- \r\n MY BOOKINGS Button \r\n -->\r\n <v-btn @click=\"$router.push('/mybookings', () => {})\">\r\n <span>My Bookings</span>\r\n <v-icon>mdi-calendar-star</v-icon>\r\n </v-btn>\r\n\r\n <!-- \r\n ACCOUNT Button \r\n -->\r\n <v-btn @click=\"$router.push('/account', () => {})\">\r\n <span>Account</span>\r\n <v-icon>mdi-account-circle</v-icon>\r\n </v-btn>\r\n\r\n </v-bottom-navigation>\r\n\r\n <v-bottom-navigation\r\n v-show=\"showQRCodeBar\"\r\n :value=\"navQRCodeActiveButton\"\r\n fixed\r\n grow\r\n color=\"primary\"\r\n style=\"height: auto\"\r\n >\r\n <span class=\"qrcode-bar-btm-wording\">\r\n Scan the QR code to make a booking!\r\n </span>\r\n\r\n <v-img\r\n :src=\"`${iconPath}qrcode.png`\"\r\n max-height=\"120\"\r\n max-width=\"120\"\r\n ></v-img>\r\n\r\n </v-bottom-navigation>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapState } from \"vuex\";\r\n\r\nexport default {\r\n name: \"BottomNavigationBar\",\r\n computed: {\r\n ...mapState([\"showNavBar\", \"navBarActiveButton\", \"showQRCodeBar\", \"navQRCodeActiveButton\"]),\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n /* Fix bottom-navigation button floting up issue */\r\n #bottomNavigation .v-btn:not(.v-btn--round).v-size--default {\r\n height: auto;\r\n }\r\n\r\n #bottomNavigation,\r\n #bottomNavigation .v-icon {\r\n font-size: 20px;\r\n }\r\n\r\n #bottomNavigation .v-icon {\r\n margin-bottom: 2px;\r\n }\r\n\r\n #bottomNavigation .v-btn {\r\n padding-top: 7px;\r\n padding-bottom: 5px;\r\n background-color:white;\r\n }\r\n\r\n #bottomNavigation .v-item-group.v-bottom-navigation .v-btn {\r\n font-size: 12px !important;\r\n }\r\n\r\n .qrcode-bar-btm-wording {\r\n color : black;\r\n margin : auto 1.5rem;\r\n font-size : 1rem;\r\n }\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BottomNavigationBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BottomNavigationBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BottomNavigationBar.vue?vue&type=template&id=c6f5d8d6&scoped=true&\"\nimport script from \"./BottomNavigationBar.vue?vue&type=script&lang=js&\"\nexport * from \"./BottomNavigationBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BottomNavigationBar.vue?vue&type=style&index=0&id=c6f5d8d6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c6f5d8d6\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBottomNavigation } from 'vuetify/lib/components/VBottomNavigation';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\ninstallComponents(component, {VBottomNavigation,VBtn,VIcon,VImg})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loading.show),expression:\"loading.show\"}],staticStyle:{\"z-index\":\"5\"}},[_c('div',{staticStyle:{\"position\":\"fixed\",\"border-radius\":\"50%\"},attrs:{\"id\":\"loading1\"}}),_c('div',{staticStyle:{\"position\":\"fixed\",\"border-radius\":\"50%\"},attrs:{\"id\":\"loading2\"}}),_c('div',{staticClass:\"fixed-center2\",staticStyle:{\"text-align\":\"center\",\"z-index\":\"2\"}},[_c('v-icon',{staticStyle:{\"color\":\"white\",\"font-size\":\"50px\"}},[_vm._v(_vm._s(_vm.loadingIcon))]),_c('p',{staticStyle:{\"text-align\":\"center\",\"left\":\"-10px\",\"bottom\":\"-50px\",\"color\":\"white\",\"font-size\":\"20px\"}},[_vm._v(\"We are experiencing a high volume of requests. Please wait while we process your request.\")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import anime from \"animejs/lib/anime.es.js\";\r\n\r\nexport default {\r\n changeColor(eleId, fromColor, toColor, duration) {\r\n anime({\r\n targets: \"#\" + eleId,\r\n color: [fromColor, toColor],\r\n duration: duration || 200,\r\n easing: 'easeOutCirc'\r\n });\r\n },\r\n rippleTransition(\r\n targetId,\r\n rippleId,\r\n duration,\r\n scaleFrom,\r\n scaleTo,\r\n color,\r\n radialImage,\r\n centerPosition,\r\n hideRippleAfterComplete,\r\n completeCallback) {\r\n if (!rippleId) {\r\n //Share the same \"rippleAnimation\" element with \"RippleTransition.vue\" for now\r\n rippleId = \"rippleAnimation\"\r\n }\r\n\r\n let target = document.getElementById(targetId)\r\n let ripple = document.getElementById(rippleId)\r\n let targetInfo = target.getBoundingClientRect();\r\n\r\n if (centerPosition) {\r\n let divSize = 56;\r\n\r\n let centerPoint = {\r\n x: (window.innerWidth - divSize) / 2,\r\n y: (window.innerHeight - divSize) / 2\r\n };\r\n\r\n ripple.style.left = centerPoint.x + \"px\";\r\n ripple.style.top = centerPoint.y + \"px\";\r\n ripple.style.width = divSize + \"px\";\r\n ripple.style.height = divSize + \"px\";\r\n } else {\r\n ripple.style.left = targetInfo.left + \"px\";\r\n ripple.style.top = targetInfo.top + \"px\";\r\n ripple.style.width = targetInfo.width + \"px\";\r\n ripple.style.height = targetInfo.height + \"px\";\r\n }\r\n\r\n if (color) {\r\n ripple.style.backgroundColor = color;\r\n ripple.style.backgroundImage = null;\r\n }\r\n else if (radialImage) {\r\n ripple.style.backgroundImage = radialImage;\r\n }\r\n else {\r\n let backgroundColor = getComputedStyle(target).backgroundColor;\r\n let color = getComputedStyle(target).color;\r\n let rippleColor =\r\n backgroundColor === \"rgba(0, 0, 0, 0)\" ? color : backgroundColor;\r\n ripple.style.backgroundColor = rippleColor;\r\n }\r\n\r\n ripple.style.transform = \"scale(\" + scaleFrom + \")\";\r\n ripple.style.zIndex = 2;\r\n ripple.style.opacity = 1;\r\n\r\n anime({\r\n targets: \"#\" + rippleId,\r\n scale: scaleTo,\r\n duration: duration,\r\n easing: \"easeInCirc\",\r\n complete: function () {\r\n if (completeCallback) {\r\n completeCallback();\r\n }\r\n\r\n if (hideRippleAfterComplete) {\r\n anime({\r\n targets: \"#\" + rippleId,\r\n opacity: 0,\r\n duration: 100,\r\n easing: \"linear\",\r\n complete: function () {\r\n ripple.style.zIndex = -1;\r\n }\r\n });\r\n }\r\n else {\r\n ripple.style.zIndex = 1;\r\n }\r\n }\r\n });\r\n }\r\n}","<template>\r\n <div v-show=\"loading.show\" style=\"z-index: 5\">\r\n <div id=\"loading1\" style=\"position: fixed; border-radius: 50%\"></div>\r\n <div id=\"loading2\" style=\"position: fixed; border-radius: 50%\"></div>\r\n\r\n <div class=\"fixed-center2\" style=\"text-align: center; z-index: 2\">\r\n <v-icon style=\"color: white; font-size: 50px\">{{loadingIcon}}</v-icon>\r\n\r\n <p\r\n style=\"text-align: center; left: -10px; bottom: -50px; color: white; font-size: 20px\"\r\n >We are experiencing a high volume of requests. Please wait while we process your request.</p>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport animator from \"@/helpers/animator\";\r\nimport { mapState } from \"vuex\";\r\n\r\nexport default {\r\n name: \"Loading\",\r\n data: () => ({\r\n rippleColors: [\r\n \"radial-gradient(circle, #F44336, #B71C1C)\", //Red\r\n \"radial-gradient(circle, #FF9800, #E65100)\", //Orange\r\n \"radial-gradient(circle, #FFEB3B, #FFFF00)\", //Yellow\r\n \"radial-gradient(circle, #4CAF50, #1B5E20)\", //Green\r\n \"radial-gradient(circle, #2196f3, #0d47a1)\", //Blue\r\n \"radial-gradient(circle, #3F51B5, #1A237E)\", //Indigo\r\n \"radial-gradient(circle, #9C27B0, #4A148C)\", //Purple\r\n // \"radial-gradient(circle, #607D8B, #263238)\", //Blue gray\r\n \"radial-gradient(circle, #424242, #000000)\", //Black\r\n ],\r\n // rippleColors: [\r\n // \"radial-gradient(circle, #2196f3, #0d47a1)\", //Blue\r\n // \"radial-gradient(circle, #424242, black)\", //Black\r\n // \"radial-gradient(circle, #FFEB3B, #F57F17)\", //Yellow\r\n // \"radial-gradient(circle, #9C27B0, #4A148C)\", //Purple\r\n // \"radial-gradient(circle, #F44336, #B71C1C)\", //Red\r\n // \"radial-gradient(circle, #4CAF50, #1B5E20)\", //Green\r\n // \"radial-gradient(circle, #607D8B, #263238)\", //Blue gray\r\n // \"radial-gradient(circle, #FF9800, #E65100)\" //Orange\r\n // ],\r\n rippleEndColors: [\r\n \"#B71C1C\", //Red\r\n \"#E65100\", //Orange\r\n \"#FFFF00\", //Yellow\r\n \"#1B5E20\", //Green\r\n \"#0d47a1\", //Blue\r\n \"#1A237E\", //Indigo\r\n \"#4A148C\", //Purple\r\n // \"radial-gradient(circle, #607D8B, #263238)\", //Blue gray\r\n \"#000000\", //Black\r\n ],\r\n icons: [\r\n \"mdi-seat-recline-extra\",\r\n \"mdi-seat-recline-normal\",\r\n // \"mdi-meditation\",\r\n \"mdi-human-male\",\r\n \"mdi-human-handsdown\",\r\n \"mdi-human\",\r\n // \"mdi-human-handsup\",\r\n // \"mdi-motion-sensor\",\r\n \"mdi-walk\",\r\n \"mdi-run\",\r\n \"mdi-run-fast\",\r\n // \"mdi-escalator\"\r\n // \"mdi-karate\"\r\n ],\r\n loadingIcon: \"mdi-human-handsdown\",\r\n }),\r\n computed: {\r\n ...mapState([\"loading\"]),\r\n },\r\n methods: {\r\n startLoading() {\r\n const blackRadial = \"radial-gradient(circle, #424242, #000000)\";\r\n this.loadingIcon = \"mdi-human-handsdown\";\r\n document.getElementById(\"loading1\").style.backgroundImage = blackRadial;\r\n document.getElementById(\"loading2\").style.backgroundImage = blackRadial;\r\n\r\n this.ripple(4);\r\n },\r\n ripple(count) {\r\n if (!this.loading.show) {\r\n return;\r\n }\r\n\r\n let rippleColorIndex =\r\n this.rippleColors.length > count\r\n ? count\r\n : count % this.rippleColors.length;\r\n\r\n const radialColor = this.rippleColors[rippleColorIndex];\r\n const rippleEndColor = this.rippleEndColors[rippleColorIndex];\r\n const loadingEleId = \"loading\" + (count % 2 === 0 ? \"1\" : \"2\");\r\n const scaleConstant = this.isMobileDevice() ? 2 : 3; //Mobile +2; Desktop +3 or +6\r\n const scaleTo = Math.ceil(this.windowInfo().max / 56) + scaleConstant;\r\n\r\n const completeCallback = () => {\r\n if (this.loading.show) {\r\n this.setStatusBackgroundBarColor(rippleEndColor);\r\n this.ripple(++count);\r\n }\r\n };\r\n\r\n animator.rippleTransition(\r\n loadingEleId,\r\n loadingEleId,\r\n 500,\r\n 0,\r\n scaleTo,\r\n null,\r\n radialColor,\r\n true,\r\n false,\r\n completeCallback\r\n );\r\n\r\n setTimeout(() => {\r\n let loadingIconIndex =\r\n this.icons.length > count ? count : count % this.icons.length;\r\n this.loadingIcon = this.icons[loadingIconIndex];\r\n }, 370);\r\n },\r\n },\r\n watch: {\r\n \"loading.show\": {\r\n immediate: true,\r\n handler(newValue, oldValue) {\r\n if (newValue) {\r\n this.setStatusBackgroundBarColor(\"#000000\");\r\n this.startLoading();\r\n } else {\r\n if (!this.loading.notRevertStatusBarColor) {\r\n this.setThemeColorByMode();\r\n\r\n //Insurance\r\n setTimeout(() => {\r\n this.setThemeColorByMode();\r\n }, 100);\r\n }\r\n }\r\n },\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style>\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Loading.vue?vue&type=template&id=53eae5b4&\"\nimport script from \"./Loading.vue?vue&type=script&lang=js&\"\nexport * from \"./Loading.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.internalShow),expression:\"internalShow\"}],class:{ 'bg-black-radial': _vm.result.show},staticStyle:{\"z-index\":\"6\",\"position\":\"fixed\",\"height\":\"100%\",\"width\":\"100%\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showResultMessage),expression:\"showResultMessage\"}],staticClass:\"text-center white--text\",class:_vm.result.success ? (_vm.onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial') : 'bg-orange-radial',staticStyle:{\"position\":\"fixed\",\"height\":\"100%\",\"width\":\"100%\"}},[_c('v-toolbar',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.result.message),expression:\"result.message\"}],staticClass:\"px-1\",attrs:{\"dark\":\"\",\"color\":\"transparent\",\"elevation\":\"0\"}},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.updateResult({ show: false })}}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1),_c('div',{staticClass:\"fixed-center2\"},[_c('p',{staticClass:\"headline font-weight-bold px-2\",staticStyle:{\"word-break\":\"keep-all\"},domProps:{\"innerHTML\":_vm._s(_vm.result.title)}}),_c('p',{staticClass:\"px-2\",staticStyle:{\"word-break\":\"keep-all\"},domProps:{\"innerHTML\":_vm._s(_vm.result.message)}}),_c('v-icon',{staticStyle:{\"margin\":\"25px 0\"},attrs:{\"size\":Math.min(_vm.windowInfo().min, 500),\"color\":\"white\"}},[_vm._v(_vm._s(_vm.result.success ? 'mdi-checkbox-marked-circle-outline' : 'mdi-close-circle-outline'))])],1)],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.showResultMessage),expression:\"!showResultMessage\"}],staticStyle:{\"position\":\"fixed\",\"border-radius\":\"50%\"},attrs:{\"id\":\"rippleResultEffect\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n v-show=\"internalShow\"\r\n style=\"z-index: 6; position: fixed; height: 100%; width: 100%\"\r\n :class=\"{ 'bg-black-radial': result.show}\"\r\n >\r\n <div\r\n v-show=\"showResultMessage\"\r\n class=\"text-center white--text\"\r\n :class=\"result.success ? (onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial') : 'bg-orange-radial'\"\r\n style=\"position: fixed; height: 100%; width: 100%;\"\r\n >\r\n <v-toolbar v-show=\"result.message\" dark color=\"transparent\" elevation=\"0\" class=\"px-1\">\r\n <v-btn icon @click=\"updateResult({ show: false })\">\r\n <v-icon>mdi-close</v-icon>\r\n </v-btn>\r\n </v-toolbar>\r\n\r\n <div class=\"fixed-center2\">\r\n <p style=\"word-break: keep-all\" class=\"headline font-weight-bold px-2\" v-html=\"result.title\"></p>\r\n\r\n <p style=\"word-break: keep-all\" class=\"px-2\" v-html=\"result.message\"></p>\r\n\r\n <v-icon\r\n :size=\"Math.min(windowInfo().min, 500)\"\r\n color=\"white\"\r\n style=\"margin: 25px 0\"\r\n >{{result.success ? 'mdi-checkbox-marked-circle-outline' : 'mdi-close-circle-outline' }}</v-icon>\r\n </div>\r\n </div>\r\n\r\n <div\r\n v-show=\"!showResultMessage\"\r\n id=\"rippleResultEffect\"\r\n style=\"position: fixed; border-radius: 50%\"\r\n ></div>\r\n </div>\r\n\r\n <!-- <v-toolbar dark color=\"transparent\" elevation=\"0\" class=\"px-1\">\r\n <v-btn icon @click=\"updateResult({ show: false })\">\r\n <v-icon>mdi-close</v-icon>\r\n </v-btn>\r\n </v-toolbar>-->\r\n</template>\r\n\r\n<script>\r\nimport { mapState, mapMutations } from \"vuex\";\r\nimport animator from \"@/helpers/animator\";\r\n\r\nexport default {\r\n name: \"RippleResult\",\r\n data: () => ({\r\n showResultMessage: false,\r\n internalShow: false,\r\n selectedRadialColor: \"radial-gradient(circle, #2196f3, #0d47a1)\",\r\n }),\r\n computed: {\r\n ...mapState([\"result\"]),\r\n radialColor() {\r\n return this.result.success\r\n ? this.onsiteMode\r\n ? \"radial-gradient(circle, #2196f3, #0d47a1)\"\r\n : \"radial-gradient(circle, #009688, #004D40)\"\r\n : \"radial-gradient(circle, #FF9800, #E65100)\";\r\n // : \"radial-gradient(circle, #f44336, #b71c1c)\";\r\n },\r\n },\r\n methods: {\r\n ...mapMutations([\"updateResult\"]),\r\n rippleExpand() {\r\n this.selectedRadialColor = this.radialColor;\r\n this.showResultMessage = false;\r\n let rippleEleId = \"rippleResultEffect\";\r\n\r\n let completeCallback = () => {\r\n const statusBarColor = this.result.success\r\n ? this.onsiteMode\r\n ? \"#0d47a1\"\r\n : \"#004D40\"\r\n : \"#E65100\";\r\n\r\n this.setStatusBackgroundBarColor(statusBarColor);\r\n\r\n this.showResultMessage = true;\r\n\r\n //Hide success RippleResult automatically after 3 sec; failed, 3 secs\r\n const closeResultInMilliseconds = this.result.message ? 3000 : 3000;\r\n\r\n setTimeout(() => {\r\n this.updateResult({ show: false });\r\n }, closeResultInMilliseconds);\r\n };\r\n\r\n animator.rippleTransition(\r\n rippleEleId,\r\n rippleEleId,\r\n 300,\r\n 0,\r\n this.getScaleTo(),\r\n null,\r\n this.selectedRadialColor,\r\n true,\r\n false,\r\n completeCallback\r\n );\r\n },\r\n getScaleTo() {\r\n const scaleConstant = this.isMobileDevice() ? 2 : 3; //Mobile +2; Desktop +3 or +6\r\n return Math.ceil(this.windowInfo().max / 56) + scaleConstant;\r\n },\r\n rippleShrink() {\r\n this.showResultMessage = false;\r\n let rippleEleId = \"rippleResultEffect\";\r\n\r\n let completeCallback = () => {\r\n this.internalShow = false;\r\n };\r\n\r\n animator.rippleTransition(\r\n rippleEleId,\r\n rippleEleId,\r\n 200,\r\n this.getScaleTo(),\r\n 0,\r\n null,\r\n this.selectedRadialColor,\r\n true,\r\n false,\r\n completeCallback\r\n );\r\n },\r\n },\r\n watch: {\r\n \"result.show\": {\r\n immediate: false,\r\n handler(newValue, oldValue) {\r\n if (newValue) {\r\n this.internalShow = newValue;\r\n this.setStatusBackgroundBarColor(\"#000000\");\r\n this.rippleExpand();\r\n } else {\r\n this.rippleShrink();\r\n\r\n this.setThemeColorByMode();\r\n\r\n //Insurance\r\n setTimeout(() => {\r\n this.setThemeColorByMode();\r\n }, 100);\r\n }\r\n },\r\n },\r\n },\r\n created() {\r\n this.internalShow = this.result.show;\r\n },\r\n};\r\n</script>\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RippleResult.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RippleResult.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RippleResult.vue?vue&type=template&id=9a1f7ff4&\"\nimport script from \"./RippleResult.vue?vue&type=script&lang=js&\"\nexport * from \"./RippleResult.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VIcon,VToolbar})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.systemDialog)?_c('v-dialog',{attrs:{\"persistent\":_vm.systemDialog.persistentDialog,\"max-width\":\"400\"},model:{value:(_vm.showDialog),callback:function ($$v) {_vm.showDialog=$$v},expression:\"showDialog\"}},[_c('v-card',[(_vm.systemDialog.title)?_c('v-card-title',{staticStyle:{\"word-break\":\"break-word\"},domProps:{\"innerHTML\":_vm._s(_vm.systemDialog.title)}}):_vm._e(),(_vm.systemDialog.message)?[_c('v-divider'),_c('v-card-text',{staticClass:\"my-6 pb-0 black--text\",staticStyle:{\"font-size\":\"initial\"},domProps:{\"innerHTML\":_vm._s(_vm.systemDialog.message)}}),(_vm.systemDialog.title)?_c('v-divider'):_vm._e()]:_vm._e(),_c('v-card-actions',[_c('v-spacer'),(\n _vm.systemDialog.actions &&\n _vm.systemDialog.actions.actionType === 'YesOrNo'\n )?_c('div',[_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.noClicked}},[_vm._v(\"No\")]),_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.yesClicked}},[_vm._v(_vm._s(_vm.systemDialog.actions.yes.label || \"Yes\"))])],1):_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.okClicked}},[_vm._v(_vm._s(_vm.systemDialog.buttonLabel || \"OK\"))])],1)],2)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <v-dialog\r\n v-if=\"systemDialog\"\r\n v-model=\"showDialog\"\r\n :persistent=\"systemDialog.persistentDialog\"\r\n max-width=\"400\"\r\n >\r\n <v-card>\r\n <v-card-title\r\n v-if=\"systemDialog.title\"\r\n v-html=\"systemDialog.title\"\r\n style=\"word-break: break-word\"\r\n ></v-card-title>\r\n\r\n <template v-if=\"systemDialog.message\">\r\n <v-divider></v-divider>\r\n\r\n <v-card-text\r\n v-html=\"systemDialog.message\"\r\n class=\"my-6 pb-0 black--text\"\r\n style=\"font-size: initial\"\r\n ></v-card-text>\r\n\r\n <v-divider v-if=\"systemDialog.title\"></v-divider>\r\n </template>\r\n\r\n <!-- <v-checkbox\r\n v-if=\"localStorageKey4DontShowAgain\"\r\n v-model=\"checkboxDontShowAgain\"\r\n :label=\"`Don't show again`\"\r\n class=\"pl-5\"\r\n ></v-checkbox>-->\r\n\r\n <v-card-actions>\r\n <v-spacer></v-spacer>\r\n <div\r\n v-if=\"\r\n systemDialog.actions &&\r\n systemDialog.actions.actionType === 'YesOrNo'\r\n \"\r\n >\r\n <v-btn color=\"primary\" text @click=\"noClicked\">No</v-btn>\r\n\r\n <v-btn color=\"primary\" text @click=\"yesClicked\">{{\r\n systemDialog.actions.yes.label || \"Yes\"\r\n }}</v-btn>\r\n </div>\r\n\r\n <v-btn v-else color=\"primary\" text @click=\"okClicked\">{{\r\n systemDialog.buttonLabel || \"OK\"\r\n }}</v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapState, mapMutations } from \"vuex\";\r\n// import localStorageHelper from \"@/helpers/localStorageHelper\";\r\n\r\nexport default {\r\n name: \"SystemDialog\",\r\n data: () => ({\r\n showDialog: false,\r\n checkboxDontShowAgain: false,\r\n }),\r\n computed: {\r\n ...mapState([\"systemDialog\"]),\r\n // ...mapState([\"dialog\", \"localStorageKey4DontShowAgain\"])\r\n },\r\n watch: {\r\n systemDialog(newValue, oldValue) {\r\n this.checkboxDontShowAgain = false;\r\n\r\n if (newValue) {\r\n this.showDialog = true;\r\n }\r\n },\r\n },\r\n methods: {\r\n // ...mapMutations([\"updateSystemDialog\"]),\r\n // ...mapMutations([\"updateLocalStorageKey4DontShowAgain\"]),\r\n okClicked() {\r\n // if (this.localStorageKey4DontShowAgain) {\r\n // if (this.checkboxDontShowAgain) {\r\n // localStorageHelper.setItem(this.localStorageKey4DontShowAgain, true);\r\n // }\r\n\r\n // this.updateLocalStorageKey4DontShowAgain(null);\r\n // }\r\n\r\n this.showDialog = false;\r\n this.updateSystemDialog(null);\r\n },\r\n yesClicked() {\r\n if (this.systemDialog.actions.yes.callback) {\r\n this.systemDialog.actions.yes.callback();\r\n }\r\n\r\n this.okClicked();\r\n },\r\n noClicked() {\r\n if (\r\n this.systemDialog.actions.no &&\r\n this.systemDialog.actions.no.callback\r\n ) {\r\n this.systemDialog.actions.no.callback();\r\n } else {\r\n this.okClicked();\r\n }\r\n },\r\n },\r\n};\r\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SystemDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SystemDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SystemDialog.vue?vue&type=template&id=6e505249&\"\nimport script from \"./SystemDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./SystemDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VDialog,VDivider,VSpacer})\n","export default {\r\n getCurrentGeolocationBrowser(updateGeolocationBrowser) {\r\n try {\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n position => { this.getCurrentPositionSuccessCallback(position, updateGeolocationBrowser) },\r\n error => { this.getCurrentPositionErrorCallback(error, updateGeolocationBrowser) },\r\n {\r\n timeout: 3000\r\n }\r\n );\r\n } else {\r\n // updateGeolocationBrowser(null);\r\n console.debug(\"getCurrentGeolocationBrowser - navigator.geolocation is null\");\r\n }\r\n } catch (ex) {\r\n // updateGeolocationBrowser(null);\r\n console.debug(\"getCurrentGeolocationBrowser exception\", ex);\r\n }\r\n },\r\n getCurrentPositionSuccessCallback(position, updateGeolocationBrowser) {\r\n try {\r\n // const hbplGeolocationRange = {\r\n // longMin: 103.823105,\r\n // longMax: 103.823634,\r\n // latMin: 1.263263,\r\n // latMax: 1.264257\r\n // };\r\n\r\n let geolocationInfo = {\r\n longitude: position.coords.longitude,\r\n latitude: position.coords.latitude,\r\n accuracy: position.coords.accuracy\r\n };\r\n\r\n updateGeolocationBrowser(geolocationInfo);\r\n // console.debug(\"getCurrentPositionSuccessCallback\", geolocationInfo);\r\n } catch (ex) {\r\n // updateGeolocationBrowser(null);\r\n console.debug(\"getCurrentPositionSuccessCallback exception\", ex);\r\n }\r\n },\r\n getCurrentPositionErrorCallback(error, updateGeolocationBrowser) {\r\n try {\r\n let geoLocationError = null;\r\n switch (error.code) {\r\n case error.PERMISSION_DENIED:\r\n geoLocationError = \"User denied the request for Geolocation.\";\r\n break;\r\n case error.POSITION_UNAVAILABLE:\r\n geoLocationError = \"Location information is unavailable.\";\r\n break;\r\n case error.TIMEOUT:\r\n geoLocationError = \"The request to get user location timed out.\";\r\n break;\r\n case error.UNKNOWN_ERROR:\r\n geoLocationError = \"An unknown error occurred.\";\r\n break;\r\n }\r\n console.debug(\"getCurrentPositionErrorCallback\", geoLocationError);\r\n } catch (ex) {\r\n console.debug(\"getCurrentPositionErrorCallback exception\", ex);\r\n }\r\n\r\n // updateGeolocationBrowser(null);\r\n },\r\n isInRange(longitude, latitude, geolocationInfo) {\r\n return geolocationInfo.some(x => {\r\n const finalMinLong = x.minLong - x.longTol;\r\n const finalMaxLong = x.maxLong + x.longTol;\r\n const finalMinLat = x.minLat - x.latTol;\r\n const finalMaxLat = x.maxLat + x.latTol;\r\n\r\n // console.debug(\"here\", longitude, latitude)\r\n // console.debug(\"isInRange\", finalMinLong, finalMaxLong, finalMinLat, finalMaxLat)\r\n\r\n if (longitude >= finalMinLong && longitude <= finalMaxLong && latitude >= finalMinLat && latitude <= finalMaxLat) {\r\n return true;\r\n }\r\n })\r\n }\r\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.systemAlert)?_c('div',{staticStyle:{\"position\":\"fixed\",\"width\":\"100%\",\"z-index\":\"1\"},attrs:{\"id\":\"system-alert\"}},[_c('v-alert',{staticClass:\"pr-2\",attrs:{\"dismissible\":\"\",\"dense\":\"\",\"transition\":\"slide-y-transition\",\"icon\":_vm.systemAlert.success ? 'mdi-checkbox-marked-circle-outline' : 'mdi-alert-circle-outline',\"type\":_vm.systemAlert.success ? (_vm.onsiteMode ? 'info' :'success') : 'warning',\"border\":\"left\",\"elevation\":\"2\"},model:{value:(_vm.showAlert),callback:function ($$v) {_vm.showAlert=$$v},expression:\"showAlert\"}},[_c('span',{attrs:{\"slot\":\"default\"},domProps:{\"innerHTML\":_vm._s(_vm.systemAlert.message)},slot:\"default\"}),_c('div',{staticStyle:{\"position\":\"relative\"},attrs:{\"slot\":\"close\"},on:{\"click\":_vm.close},slot:\"close\"},[_c('div',{staticClass:\"fixed-center\",staticStyle:{\"position\":\"absolute\",\"height\":\"45px\",\"width\":\"45px\"}}),_c('v-icon',{attrs:{\"size\":\"16\"}},[_vm._v(\"mdi-close\")])],1)])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-if=\"systemAlert\" id=\"system-alert\" style=\"position: fixed; width: 100%; z-index: 1\">\r\n <v-alert\r\n v-model=\"showAlert\"\r\n dismissible\r\n dense\r\n transition=\"slide-y-transition\"\r\n :icon=\"systemAlert.success ? 'mdi-checkbox-marked-circle-outline' : 'mdi-alert-circle-outline'\"\r\n :type=\"systemAlert.success ? (onsiteMode ? 'info' :'success') : 'warning'\"\r\n border=\"left\"\r\n elevation=\"2\"\r\n class=\"pr-2\"\r\n >\r\n <span slot=\"default\" v-html=\"systemAlert.message\"></span>\r\n\r\n <div slot=\"close\" @click=\"close\" style=\"position: relative\">\r\n <div style=\"position: absolute; height: 45px; width: 45px\" class=\"fixed-center\"></div>\r\n <v-icon size=\"16\">mdi-close</v-icon>\r\n </div>\r\n </v-alert>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapState, mapMutations } from \"vuex\";\r\n\r\nexport default {\r\n name: \"SystemAlert\",\r\n data: () => ({\r\n showAlert: false,\r\n }),\r\n computed: {\r\n ...mapState([\"systemAlert\"]),\r\n },\r\n methods: {\r\n ...mapMutations([\"updateSystemAlert\"]),\r\n close() {\r\n this.showAlert = false;\r\n this.updateSystemAlert(null);\r\n },\r\n },\r\n watch: {\r\n systemAlert(newValue, oldValue) {\r\n if (newValue && newValue.show) {\r\n this.showAlert = true;\r\n\r\n // setTimeout(() => {\r\n // this.showAlert = false;\r\n // this.updateSystemAlert(null);\r\n // }, 3000);\r\n } else {\r\n this.close();\r\n }\r\n },\r\n },\r\n};\r\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SystemAlert.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SystemAlert.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SystemAlert.vue?vue&type=template&id=176895e0&\"\nimport script from \"./SystemAlert.vue?vue&type=script&lang=js&\"\nexport * from \"./SystemAlert.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VAlert,VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.accountInfo)?_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showCheckIn && _vm.canCheckInNowBooking && _vm.autoCheckInFailedBookingId),expression:\"showCheckIn && canCheckInNowBooking && autoCheckInFailedBookingId\"}],staticStyle:{\"z-index\":\"1\",\"position\":\"fixed\",\"bottom\":\"58px\",\"right\":\"10px\"}},[_c('div',{staticClass:\"speech-bubble text-small\",staticStyle:{\"color\":\"white !important\"},on:{\"click\":_vm.checkInButtonClicked}},[_vm._v(\" Check-In \")]),_c('div',{staticStyle:{\"text-align\":\"right\"}},[_c('v-btn',{attrs:{\"id\":\"btnCheckIn\",\"fab\":\"\",\"dark\":\"\",\"color\":\"orange\"},on:{\"click\":_vm.checkInButtonClicked}},[_c('v-icon',[_vm._v(\"mdi-checkbox-marked-circle-outline\")])],1)],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import moment from \"moment\"\r\n\r\nexport default {\r\n isToday(dateString, nowMoment) {\r\n return nowMoment.isSame(moment(dateString), \"day\");\r\n },\r\n isBetweenDate(dateString, startDateString, endDateString) {\r\n const sameOrAfter = moment(dateString).isSameOrAfter(moment(startDateString));\r\n const sameOrBefore = moment(dateString).isSameOrBefore(moment(endDateString));\r\n return sameOrAfter && sameOrBefore;\r\n },\r\n checkDate(dateString, todayMoment) {\r\n //Return -1 for history\r\n //Return 0 for today\r\n //Return 1 for upcoming\r\n const result = moment(moment(dateString).format(\"YYYY-MM-DD\")).diff(todayMoment, 'days');\r\n return result;\r\n },\r\n canCancel(canCancelStatus, bookingEndTimeString, bookingTimeslotInMinutes, nowMoment) {\r\n const bookingEndTime = moment(bookingEndTimeString);\r\n const cancellatioEndTime = bookingEndTime.subtract(bookingTimeslotInMinutes, \"minutes\")\r\n const canCancel = canCancelStatus && nowMoment < cancellatioEndTime;\r\n // console.debug(\"canCancel\", canCancel, bookingEndTimeString, cancellatioEndTime.format())\r\n\r\n return canCancel;\r\n },\r\n canCancelVisit(canCancelStatus, bookingStartTimeString, nowMoment) {\r\n const bookingStartTime = moment(bookingStartTimeString);\r\n const canCancel = canCancelStatus && nowMoment < bookingStartTime;\r\n\r\n return canCancel;\r\n },\r\n canCheckIn(canCheckInStatus, bookingStartTimeString, checkInStartTimeInMinutes, checkInEndTimeInMinutes, nowMoment) {\r\n const checkInStartTime = moment(bookingStartTimeString).subtract(checkInStartTimeInMinutes, \"minutes\")\r\n const checkInEndTime = moment(bookingStartTimeString).add(checkInEndTimeInMinutes, \"minutes\")\r\n const canCheckIn = canCheckInStatus && nowMoment >= checkInStartTime && nowMoment < checkInEndTime\r\n // console.debug(\"canCheckIn\", canCheckIn, bookingStartTimeString, checkInStartTime.format(), checkInEndTime.format())\r\n\r\n return canCheckIn;\r\n },\r\n canExtend(canExtendStatus, bookingEndTimeString, extensionStartTimeInMinutes, extensionEndTimeInMinutes, nowMoment) {\r\n const extensionStartTime = moment(bookingEndTimeString).subtract(extensionStartTimeInMinutes, \"minutes\")\r\n const extensionEndTime = moment(bookingEndTimeString).subtract(extensionEndTimeInMinutes, \"minutes\")\r\n const canExtend = canExtendStatus && nowMoment >= extensionStartTime && nowMoment < extensionEndTime;\r\n // console.debug(\"canExtend\", canExtend, bookingEndTimeString, extensionStartTime.format(), extensionEndTime.format())\r\n\r\n return canExtend;\r\n },\r\n isOnOpeningDaysOfWeek(dateString, openingDaysOfWeek) {\r\n if (!openingDaysOfWeek) {\r\n return true;\r\n }\r\n\r\n const dateMoment = moment(dateString);\r\n return openingDaysOfWeek.includes(dateMoment.day());\r\n },\r\n isHoliday(dateString, holidays, branchCode) {\r\n const isHoliday = holidays.some(x => this.isBetweenDate(dateString, x.startTime, x.endTime) &&\r\n !x.excludedBranches.includes(branchCode));\r\n\r\n return isHoliday;\r\n },\r\n isBranchOpenToday(dateString, openingDaysOfWeek, holidays, branchCode) {\r\n return this.isOnOpeningDaysOfWeek(dateString, openingDaysOfWeek) && !this.isHoliday(dateString, holidays, branchCode);\r\n }\r\n}\r\n","export default {\r\n convertQueryStringToObj(url) {\r\n if (url && url.length) {\r\n const queryStringIndex = url.indexOf(\"?\")\r\n\r\n if (queryStringIndex >= 0) {\r\n const queryStringUrl = url.substring(queryStringIndex + 1)\r\n return Object.fromEntries(new URLSearchParams(queryStringUrl))\r\n }\r\n }\r\n\r\n return null\r\n },\r\n GetQueryStringObjFromUrl(url) {\r\n if (url) {\r\n let newQueryStringObj = this.convertQueryStringToObj(url)\r\n\r\n if (newQueryStringObj) {\r\n newQueryStringObj.time = Date.now()\r\n return newQueryStringObj\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n getLocationInfoFromLocQueryString(locQueryString) {\r\n if (locQueryString) {\r\n //seatCode is optional\r\n // const locationPattern = /^(?<instituteCode>\\w{1,20}).(?<branchCode>\\w{1,20}).(?<floor>\\d{1,2}).(?<placeCode>\\w{1,30})(.(?<seatCode>\\d{1,3}))?$/\r\n // const locationPattern = /^(?<instituteCode>\\w{1,20}).(?<placeCode>(?<branchCode>\\w{1,20}).(?<floor>\\w{1,2}).\\w{1,30})(.(?<seatNo>\\d{1,3}))?$/\r\n\r\n const locationPattern = /(?<instituteCode>\\w{1,20}).(?<branchCode>\\w{1,20})(.(?<placeCode>(?<floor>\\w{1,2}).\\w{1,30}))?(.(?<seatNo>\\d{1,3}[a-zA-Z]?))?/\r\n\r\n const locMatch = locQueryString.match(locationPattern)\r\n\r\n let locationInfo = locMatch ? locMatch.groups : null\r\n\r\n // add back branchCode into placeCode\r\n if (locationInfo && locationInfo.placeCode) {\r\n locationInfo.placeCode = locationInfo.branchCode + \".\" + locationInfo.placeCode\r\n }\r\n\r\n if (locationInfo && locationInfo.seatNo) {\r\n locationInfo = this.addSeatCodeToLocationInfo(locationInfo)\r\n }\r\n\r\n if (locationInfo) {\r\n return locationInfo\r\n }\r\n }\r\n\r\n return null\r\n },\r\n addSeatCodeToLocationInfo(locationInfo) {\r\n // https://192.168.10.100:8090/seatbooking/?loc=NLB.TRL.5.BloombergTerminal.1\r\n \r\n //SeatNo = 1\r\n //seatCode = TRL.5.BLoombergTerminal.1\r\n const seatCode = `${locationInfo.placeCode}.${locationInfo.seatNo}`;\r\n locationInfo.seatCode = seatCode;\r\n return locationInfo;\r\n },\r\n validateAreaQrCode(qrCode) {\r\n const queryStringObj = this.GetQueryStringObjFromUrl(qrCode);\r\n\r\n if (queryStringObj && queryStringObj.loc) {\r\n const locationInfo = this.getLocationInfoFromLocQueryString(queryStringObj.loc)\r\n\r\n if (locationInfo) {\r\n return locationInfo\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","export default Object.freeze({\r\n storageKey: {\r\n keyPrefix: \"seatbooking.\",\r\n //sid: \"sid\",\r\n mode: \"mode\",\r\n searchResults: \"searchResults\",\r\n selectedArea: \"selectedArea\",\r\n preCasAuthState: \"preCasAuthState\",\r\n selectedBooking: \"selectedBooking\",\r\n locationInfoQrCode: \"locationInfoQrCode\",\r\n locationInfoGps: \"locationInfoGps\"\r\n },\r\n mode: {\r\n OffsiteMode: \"OffsiteMode\",\r\n OnsiteModeGps: \"OnsiteModeGps\",\r\n OnsiteModeQrCode: \"OnsiteModeQrCode\"\r\n },\r\n channelId: {\r\n SMS: \"SMS\",\r\n Email: \"Email\"\r\n },\r\n accountType: {\r\n EmailLoginUser: \"EmailLoginUser\",\r\n MobileLoginUser: \"MobileLoginUser\"\r\n },\r\n defaultBranchName: \"National Library Board\"\r\n})","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport createPersistedState from \"vuex-persistedstate\";\nimport moment from \"moment\"\nimport constants from '../helpers/constants';\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n plugins: [createPersistedState({\n key: \"seatbooking.vuex\",\n reducer: (persistedState) => {\n const stateFilter = Object.assign({}, persistedState)\n const blackList = ['time', 'loading', 'result', 'systemAlert', 'systemDialog']\n\n blackList.forEach((item) => {\n delete stateFilter[item]\n })\n\n return stateFilter\n }\n })],\n state: {\n time: null, //Single source of truth of current time\n settings: null, //settings (Type = PublicAppSettings) is returned from server when page refresh and first login. Without it almost nothing can run\n accountInfo: null, //Only available after patron login\n showLoginPage: false, //For testing, local login page\n showNavBar: true, //Only show bottom navigation bar on the first level pages\n showQRCodeBar: true,\n showCheckIn: true, //Hide the floating check in button from certain pages, e.g. ScanQRCode page\n navBarActiveButton: 0, //Ensure the button on the bottom navigation bar is highlighted correctly\n navQRCodeActiveButton: 0,\n otpTimerStartTime: null, //seperate so will not be reset\n otpTimer: {\n timerInSeconds: 0,\n progressPercentage: 100,\n timerInterval: {},\n isLoading: false,\n },\n loading: { //To control <Loading/> component\n show: false,\n notRevertStatusBarColor: false\n },\n result: { //To control <RippleResult/> component that shows transaction results with ripple animation effect\n show: false,\n success: true,\n title: \"\",\n message: \"\"\n },\n systemAlert: { //To control <SystemAlert/> component\n show: false,\n success: true,\n message: \"\"\n },\n systemDialog: null, //To control <SystemDialog/> component\n // systemDialog: {\n // title: \"\",\n // message: \"\",\n // persistentDialog: false,\n // actions: {\n // actionType: \"\", //\"YesOrNo\" or only yes\n // yes: {\n // label: \"\",\n // url: \"\"\n // }\n // }\n // },\n qrCode: { value: null, state: null }, //QR code scanning result will be stored in the value field, while state field tells which component initiated the QR scanning and it has to handled the result\n locationInfoFromQrCode: null, //Area identifiable, seat identifiable is optional. E.g. {\"instituteCode\":\"NLB\",\"placeCode\":\"TRL.8.BloombergTerminal\",\"branchCode\":\"TRL\",\"floor\":\"8\",\"seatNo\":\"2\",\"seatCode\":\"TRL.8.BloombergTerminal.2\",\"branchId\":352,\"time\":\"2021-05-09T11:09:52.417Z\"}\n locationInfoFromGps: null, //Type = PublicBranchMenu, branch identifiable\n locationInfoFromUrl: null,\n //sid: \"\",\n searchResults: null, //Stored it to survive page reload\n selectedArea: null, //Stored it to survive page reload\n selectedBooking: null, //Stored it to survive page reload\n visitBookingSearchResult: null, //Stored it to survive page reload\n preCasAuthState: null,\n qrCodeEntry: \"\",\n casAuthState: \"\",\n },\n getters: {\n authenticated: (state, getters) => {\n return !!state.accountInfo\n },\n accountType: (state, getters) => {\n if (getters.authenticated) {\n return state.accountInfo.accountType;\n }\n return null;\n },\n // TODO: THink about it && (a || b) [DONE]\n isEmailMobileLogin: (state, getters) => {\n if (getters.accountType && (getters.visitBookingEnabled || getters.gantryAccessQrEnabled)) { //TODO: Remove getters.visitBookingEnabled)\n return getters.accountType.includes(constants.accountType.EmailLoginUser) || getters.accountType.includes(constants.accountType.MobileLoginUser);\n }\n return false;\n },\n initialized: (state, getters) => {\n return !!state.settings;\n },\n onsiteMode: (state, getters) => {\n return getters.mode && (getters.mode.mode === constants.mode.OnsiteModeGps || getters.mode.mode === constants.mode.OnsiteModeQrCode)\n },\n mode: (state, getters) => {\n //Mode tells which mode and where\n const mode = {\n mode: constants.mode.OffsiteMode,\n branchId: 0,\n branchCode: null,\n placeCode: null,\n seatCode: null\n };\n\n if (state.settings && state.time && state.time.nowMoment && typeof state.time.nowMoment === \"object\") {\n const locationTimeout = state.settings.system.onsiteModeTimeoutInMinutes;\n\n if (state.locationInfoFromQrCode) {\n //With QR code area and seat (optional) can be determined\n const diffMinutes = state.time.nowMoment.diff(moment(state.locationInfoFromQrCode.time), \"minutes\")\n\n if (diffMinutes < locationTimeout) {\n mode.mode = constants.mode.OnsiteModeQrCode\n mode.branchId = state.locationInfoFromQrCode.branchId\n mode.placeCode = state.locationInfoFromQrCode.placeCode\n mode.seatCode = state.locationInfoFromQrCode.seatCode\n\n return mode\n }\n }\n\n if (state.locationInfoFromGps) {\n //With GPS only branch can be determined\n //locationInfoFromGps Type = PublicBranchMenu\n const diffMinutes = state.time.nowMoment.diff(moment(state.locationInfoFromGps.time), \"minutes\")\n\n if (diffMinutes < locationTimeout) {\n mode.mode = constants.mode.OnsiteModeGps\n mode.branchId = state.locationInfoFromGps.id\n mode.branchCode = state.locationInfoFromGps.code\n mode.placeCode = null\n mode.seatCode = null\n\n return mode\n }\n }\n }\n\n return mode;\n },\n seatBranchMenus: (state, getters) => {\n return state.settings\n ? state.settings.menus.branchMenus.filter(x => x.areas && x.areas.length)\n : null\n },\n visitBranchMenus: (state, getters) => {\n return state.settings && state.settings.system.bookingsEnabled.includes(\"Visit\") &&\n state.settings.menus.branchMenus.some(x => x.visitCapacity > 0)\n ? state.settings.menus.branchMenus.filter(x => x.visitCapacity > 0)\n : null\n },\n visitBookingEnabled: (state, getters) => {\n return state.settings && state.settings.system.bookingsEnabled.includes(\"Visit\")\n },\n gantryAccessQrEnabled: (state, getters) => {\n return state.settings && state.settings.system.bookingsEnabled.includes(\"GantryAccessQr\")\n },\n currentBranchName: (state, getters) => { \n\n const currentBranchCodeFromUrl = state.locationInfoFromUrl?.currentBranchCode\n const branchFound = state.settings.menus.branchMenus.find(x => x.code.toLowerCase() === currentBranchCodeFromUrl?.toLowerCase())\n\n return branchFound ? branchFound.name : constants.defaultBranchName\n },\n },\n mutations: {\n updateTime(state, payload) {\n // console.debug(\"updateTime\", payload.now.toString(), payload.nowMoment.format(), payload.todayMoment.format())\n state.time = payload\n },\n updateSettings(state, payload) {\n state.settings = payload\n },\n updateAccountInfo(state, payload) {\n ////Abandon this cuz it can be solved with - this.$set(booking, 'canCheckInNowStatus', canCheckInNowStatus)\n\n //To fix Vue reactivity issue for new properties - No new properties\n //Add new properties if not found before assigning the object to Vue - canCancelNowStatus, canCheckInNowStatus, canExtendNowStatus\n // if (payload && payload.bookings && payload.bookings.length) {\n // const foundProperty = Object.prototype.hasOwnProperty.call(payload.bookings[0], 'canCancelNowStatus');\n\n // if (!foundProperty) {\n // payload.bookings.forEach(x => {\n // x.canCancelNowStatus = false;\n // x.canCheckInNowStatus = false;\n // x.canExtendNowStatus = false;\n // });\n // }\n // }\n state.accountInfo = payload\n },\n updateShowLoginPage(state, payload) {\n state.showLoginPage = payload\n },\n updateShowNavBar(state, payload) {\n state.showNavBar = payload\n },\n updateShowQRCodeBar(state, payload) {\n state.showQRCodeBar = payload\n },\n updateNavBarActiveButton(state, payload) {\n state.navBarActiveButton = payload\n },\n updateNavQRCodeActiveButton(state, payload) {\n state.navQRCodeActiveButton = payload\n },\n updateShowCheckIn(state, payload) {\n state.showCheckIn = payload\n },\n updateLoading(state, payload) {\n state.loading = payload\n },\n updateResult(state, payload) {\n state.result = payload\n },\n updateSystemDialog(state, payload) {\n state.systemDialog = payload\n },\n updateSystemAlert(state, payload) {\n state.systemAlert = payload\n },\n updateQRCode(state, payload) {\n state.qrCode = payload\n },\n updateLocationInfoFromQrCode(state, payload) {\n payload.time = new Date()\n state.locationInfoFromQrCode = payload\n },\n updateLocationInfoFromGps(state, payload) {\n payload.time = new Date()\n state.locationInfoFromGps = payload\n },\n // updateSid(state, payload) {\n // state.sid = payload\n // },\n updateSearchResults(state, payload) {\n state.searchResults = payload\n },\n updateSelectedArea(state, payload) {\n state.selectedArea = payload\n },\n updateSelectedBooking(state, payload) {\n state.selectedBooking = payload\n },\n updateVisitBookingSearchResult(state, payload) {\n state.visitBookingSearchResult = payload\n },\n updatePreCasAuthState(state, payload) {\n state.preCasAuthState = payload\n },\n updateOtpTimer(state, payload) {\n state.otpTimer = payload\n },\n updateOtpTimerStartTime(state, payload) {\n state.otpTimerStartTime = payload\n },\n updateQrCodeValue(state, payload) {\n state.qrCodeEntry = payload\n },\n updateCasAuthState(state, payload) {\n state.casAuthState = payload\n },\n updateLocationInfoFromUrl(state, payload) {\n state.locationInfoFromUrl = payload\n }\n },\n actions: {\n },\n modules: {\n }\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}]},[_c('v-card',{staticClass:\"pr-1\",staticStyle:{\"border-radius\":\"0px\"},attrs:{\"height\":_vm.visitBranchMenus ? '140px' : '104px',\"color\":\"primary\"}},[_c('v-toolbar',{staticStyle:{\"border-bottom-right-radius\":\"5px\",\"border-bottom-left-radius\":\"5px\"},attrs:{\"id\":\"newBookingToolbar\",\"dark\":\"\",\"elevation\":\"0\",\"color\":\"primary\"}},[_c('img',{staticClass:\"mr-3\",staticStyle:{\"height\":\"48px\",\"widthx\":\"24px\"},attrs:{\"img\":\"\",\"aria-label\":\"NLB Logo\",\"src\":((this.iconPath) + \"nlb-logo-white.png\")}}),_c('v-toolbar-title',[_vm._v(\"New Booking\")]),_c('v-spacer'),_c('v-btn',{attrs:{\"aria-label\":\"Show help\",\"icon\":\"\"},on:{\"click\":function($event){_vm.$router.push({ name: 'Help' }, function () {})}}},[_c('v-icon',[_vm._v(\"mdi-help-circle-outline\")])],1),_c('v-btn',{attrs:{\"icon\":\"\"}},[_c('LoginIcon')],1)],1),(_vm.visitBranchMenus)?_c('div',{staticClass:\"pl-2 mt-2\"},[_c('v-btn',{staticClass:\"text-capitalize\",class:!_vm.showSeatBookingSearchForm\n ? 'primary--text font-weight-black'\n : 'white--text font-weight-regular',staticStyle:{\"margin-right\":\"6px\",\"border-radius\":\"8px\"},attrs:{\"color\":\"white\",\"height\":\"34\",\"outlined\":_vm.showSeatBookingSearchForm},on:{\"click\":function($event){_vm.showSeatBookingSearchForm = false}}},[_vm._v(\"Visit\")]),_c('v-btn',{staticClass:\"text-capitalize\",class:_vm.showSeatBookingSearchForm\n ? 'primary--text font-weight-black'\n : 'white--text font-weight-regular',staticStyle:{\"border-radius\":\"8px\"},attrs:{\"color\":\"white\",\"height\":\"34\",\"outlined\":!_vm.showSeatBookingSearchForm},on:{\"click\":_vm.seatBookingUnavailableForEmaiMobileLogin}},[_vm._v(\"Seat\")])],1):_vm._e()],1),_c('div',{ref:\"homeScrollable\",staticClass:\"scrollable\",style:(_vm.visitBranchMenus\n ? 'margin-top: -36px !important'\n : 'margin-top: -45px !important')},[(_vm.visitBranchMenus)?_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.showSeatBookingSearchForm),expression:\"!showSeatBookingSearchForm\"}]},[_c('VisitBookingSearchForm',{ref:\"visitBookingSearchForm\"})],1):_vm._e(),(\n (!_vm.visitBranchMenus || _vm.showSeatBookingSearchForm) &&\n _vm.settings &&\n _vm.inputPopupSelectBranch.selectedItem\n )?_c('v-card',{staticClass:\"mx-2 px-5 pt-4 pb-3 mb-2\",staticStyle:{\"border-radius\":\"8px\"}},[_c('div',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectBranch.show = true}}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Library\")]),_c('v-text-field',{attrs:{\"aria-label\":\"Select library\",\"value\":_vm.inputPopupSelectBranch.selectedItem.name,\"readonly\":\"\"}},[_c('v-icon',{attrs:{\"slot\":\"prepend-inner\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-library\")])],1),_c('InputPopupSelect',{attrs:{\"title\":\"Library\",\"list\":_vm.seatBranchMenus,\"select\":_vm.inputPopupSelectBranch},on:{\"update:select\":function($event){_vm.inputPopupSelectBranch=$event}}})],1),_c('div',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectArea.show = true}}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Area\")]),_c('v-text-field',{attrs:{\"aria-label\":\"Select area\",\"prepend-inner-icon\":\"mdi-map-marker\",\"value\":_vm.inputPopupSelectArea.selectedItem\n ? _vm.inputPopupSelectArea.selectedItem.name\n : 'All',\"readonly\":\"\"}},[(_vm.inputPopupSelectArea.selectedItem)?_c('v-icon',{attrs:{\"slot\":\"append\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.clearArea($event)}},slot:\"append\"},[_vm._v(\"mdi-close\")]):_vm._e()],1),_c('InputPopupSelect',{attrs:{\"title\":\"Area\",\"list\":_vm.inputPopupSelectBranch.selectedItem.areas,\"select\":_vm.inputPopupSelectArea},on:{\"update:select\":function($event){_vm.inputPopupSelectArea=$event}}})],1),_c('div',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectDate.show = true}}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Date\")]),_c('v-text-field',{attrs:{\"aria-label\":\"Select date\",\"prepend-inner-icon\":\"mdi-calendar-month\",\"value\":_vm.formatDate(_vm.inputPopupSelectDate.selectedItem),\"readonly\":\"\"}}),_c('InputPopupSelectDate',{attrs:{\"select\":_vm.inputPopupSelectDate,\"min\":_vm.bookingStartDateString,\"max\":_vm.bookingEndDateString},on:{\"update:select\":function($event){_vm.inputPopupSelectDate=$event}}})],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectTime.show = true}}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Time\")]),_c('v-text-field',{attrs:{\"aria-label\":\"Select time\",\"prepend-inner-icon\":\"mdi-clock-outline\",\"value\":_vm.inputPopupSelectTime.selectedItem.name,\"readonly\":\"\"}}),_c('InputPopupSelect',{attrs:{\"title\":\"Time\",\"maxWidth\":\"270px\",\"list\":_vm.timeList,\"select\":_vm.inputPopupSelectTime},on:{\"update:select\":function($event){_vm.inputPopupSelectTime=$event}}})],1),_c('v-col',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectDuration.show = true}}},[_c('span',{staticClass:\"label text-truncate\"},[_vm._v(\"Duration (Hour : Min)\")]),_c('v-text-field',{attrs:{\"aria-label\":\"Select duration\",\"prepend-inner-icon\":\"mdi-timer-sand\",\"value\":_vm.inputPopupSelectDuration.selectedItem.name,\"readonly\":\"\"}}),_c('InputPopupSelect',{attrs:{\"title\":\"Duration (Hour : Min)\",\"maxWidth\":\"270px\",\"list\":_vm.durationList,\"select\":_vm.inputPopupSelectDuration},on:{\"update:select\":function($event){_vm.inputPopupSelectDuration=$event}}})],1)],1),_c('div',{staticClass:\"button-group\",staticStyle:{\"margin-top\":\"18px\",\"margin-bottom\":\"18px\"}},[_c('v-row',[_c('v-col',[_c('v-btn',{staticClass:\"px-5\",attrs:{\"dark\":\"\",\"color\":\"primary\",\"large\":\"\",\"block\":\"\"},on:{\"click\":_vm.reset}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-cached\")]),_vm._v(\"Reset \")],1)],1),_c('v-col',[_c('v-btn',{attrs:{\"dark\":\"\",\"color\":\"primary\",\"large\":\"\",\"block\":\"\"},on:{\"click\":function($event){return _vm.$router.push({\n name: 'ScanQRCode',\n params: { state: 'home' },\n })}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-qrcode\")]),_vm._v(\"QR Code \")],1)],1)],1),_c('v-row',[_c('v-col',[_c('v-btn',{attrs:{\"dark\":\"\",\"color\":\"deep-orange darken-4\",\"large\":\"\",\"block\":\"\"},on:{\"click\":_vm.search}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-magnify\")]),_vm._v(\"Check available slots \")],1)],1)],1)],1)],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-icon',{attrs:{\"aria-label\":\"Log in\"},on:{\"click\":_vm.loginAuth}},[_vm._v(_vm._s(_vm.authenticated ? \"mdi-account-circle\" : \"mdi-login-variant\"))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <v-icon aria-label=\"Log in\" @click=\"loginAuth\">{{\r\n authenticated ? \"mdi-account-circle\" : \"mdi-login-variant\"\r\n }}</v-icon>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapMutations, mapGetters } from \"vuex\";\r\nimport moment from \"moment\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\n\r\nexport default {\r\n name: \"LoginIcon\",\r\n computed: {\r\n ...mapGetters([\"authenticated\", \"visitBookingEnabled\"]),\r\n },\r\n methods: {\r\n ...mapMutations([\"updatePreCasAuthState\"]),\r\n loginAuth() {\r\n //Home(visitBookingEnabled) -> LoginOptions -> 1)Home(once success login), 2)Account(icon)\r\n //Home(!visitBookingEnabled) -> CAS login\r\n if (this.authenticated) {\r\n this.$router.push({ name: \"Account\" });\r\n } else {\r\n this.updatePreCasAuthState({\r\n routeName: this.$route.name,\r\n time: moment(),\r\n });\r\n if (this.visitBookingEnabled) {\r\n this.$router.push({ name: \"LoginOptions\" });\r\n } else {\r\n apiHelper.casAuth();\r\n }\r\n }\r\n },\r\n },\r\n beforeRouteEnter(to, from, next) {\r\n next((vm) => {\r\n if (vm.authenticated) {\r\n return next({ name: \"Account\" });\r\n } else {\r\n if (vm.visitBookingEnabled) {\r\n next();\r\n } else {\r\n apiHelper.casAuth();\r\n }\r\n }\r\n });\r\n },\r\n};\r\n</script>\r\n\r\n<style>\r\n#login-page .v-input__prepend-inner .v-icon {\r\n color: white !important;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginIcon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginIcon.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoginIcon.vue?vue&type=template&id=06808439&\"\nimport script from \"./LoginIcon.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginIcon.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LoginIcon.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-dialog',{attrs:{\"scrollable\":\"\",\"max-width\":_vm.maxWidth || 400},model:{value:(_vm.select.show),callback:function ($$v) {_vm.$set(_vm.select, \"show\", $$v)},expression:\"select.show\"}},[_c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.title))]),_c('v-divider'),(_vm.list)?_c('v-card-text',{staticClass:\"pb-0\",style:({ height: _vm.height })},[_c('v-radio-group',{model:{value:(_vm.radioModel),callback:function ($$v) {_vm.radioModel=$$v},expression:\"radioModel\"}},_vm._l((_vm.list),function(item,i){return _c('div',{key:i,staticClass:\"my-2\",on:{\"click\":function($event){return _vm.selectItem(item)}}},[_c('v-radio',{attrs:{\"label\":item.name,\"value\":item.code}})],1)}),0)],1):_vm._e(),_c('v-divider'),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.closePopup}},[_vm._v(\"Cancel\")])],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template >\r\n <v-row justify=\"center\">\r\n <v-dialog v-model=\"select.show\" scrollable :max-width=\"maxWidth || 400\">\r\n <v-card>\r\n <v-card-title>{{ title }}</v-card-title>\r\n <v-divider></v-divider>\r\n\r\n <v-card-text v-if=\"list\" :style=\"{ height: height }\" class=\"pb-0\">\r\n <v-radio-group v-model=\"radioModel\">\r\n <div\r\n v-for=\"(item, i) in list\"\r\n :key=\"i\"\r\n @click=\"selectItem(item)\"\r\n class=\"my-2\"\r\n >\r\n <v-radio :label=\"item.name\" :value=\"item.code\"></v-radio>\r\n </div>\r\n </v-radio-group>\r\n </v-card-text>\r\n\r\n <v-divider></v-divider>\r\n\r\n <v-card-actions>\r\n <v-spacer></v-spacer>\r\n <v-btn color=\"primary\" text @click=\"closePopup\">Cancel</v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n </v-row>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"InputPopupSelect\",\r\n props: {\r\n title: String,\r\n list: Array,\r\n height: String,\r\n maxWidth: String,\r\n select: {\r\n show: Boolean,\r\n selectedItem: Object,\r\n },\r\n },\r\n data: () => ({\r\n radioModel: null,\r\n }),\r\n watch: {\r\n \"select.show\": function (newValue, oldValue) {\r\n //Watch for \"select.show\" because the radio button on time and duration list is not selected on UI\r\n //Can be simulated by selecting any duration other than 1 hour before selecting Bloomberg Terminal area\r\n //And this only works when using v-model instead of :value on v-radio-group. E.g. <v-radio-group v-model=\"radioModel\">\r\n this.radioModel = this.select.selectedItem\r\n ? this.select.selectedItem.code\r\n : null;\r\n },\r\n },\r\n methods: {\r\n closePopup() {\r\n this.$emit(\"update:select\", {\r\n show: false,\r\n selectedItem: this.select.selectedItem,\r\n });\r\n },\r\n selectItem(item) {\r\n this.$emit(\"update:select\", {\r\n show: false,\r\n selectedItem: item,\r\n });\r\n\r\n this.$emit('seatsAvailabilitysearch');\r\n },\r\n },\r\n};\r\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputPopupSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputPopupSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InputPopupSelect.vue?vue&type=template&id=c3bd7a3c&\"\nimport script from \"./InputPopupSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./InputPopupSelect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VRadio } from 'vuetify/lib/components/VRadioGroup';\nimport { VRadioGroup } from 'vuetify/lib/components/VRadioGroup';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VDialog,VDivider,VRadio,VRadioGroup,VRow,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-dialog',{attrs:{\"scrollable\":\"\",\"max-width\":\"312px\"},model:{value:(_vm.select.show),callback:function ($$v) {_vm.$set(_vm.select, \"show\", $$v)},expression:\"select.show\"}},[_c('v-date-picker',{attrs:{\"min\":_vm.min,\"max\":_vm.max,\"allowed-dates\":_vm.allowedDates,\"show-current\":_vm.time.todayMoment.format('YYYY-MM-DD'),\"color\":\"primary\"},on:{\"click:date\":function($event){return _vm.selectItem(_vm.select.selectedItem)}},model:{value:(_vm.select.selectedItem),callback:function ($$v) {_vm.$set(_vm.select, \"selectedItem\", $$v)},expression:\"select.selectedItem\"}},[_c('v-spacer'),_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":_vm.closePopup}},[_vm._v(\"Cancel\")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template >\r\n <v-row justify=\"center\">\r\n <v-dialog v-model=\"select.show\" scrollable max-width=\"312px\">\r\n <v-date-picker\r\n v-model=\"select.selectedItem\"\r\n @click:date=\"selectItem(select.selectedItem)\"\r\n :min=\"min\"\r\n :max=\"max\"\r\n :allowed-dates=\"allowedDates\"\r\n :show-current=\"time.todayMoment.format('YYYY-MM-DD')\"\r\n color=\"primary\"\r\n >\r\n <v-spacer></v-spacer>\r\n <v-btn text color=\"primary\" @click=\"closePopup\">Cancel</v-btn>\r\n </v-date-picker>\r\n </v-dialog>\r\n </v-row>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"InputPopupSelectDate\",\r\n props: {\r\n select: {\r\n show: Boolean,\r\n selectedItem: String,\r\n },\r\n min: String,\r\n max: String,\r\n allowedDates: Function,\r\n },\r\n methods: {\r\n closePopup() {\r\n this.$emit(\"update:select\", {\r\n show: false,\r\n selectedItem: this.select.selectedItem,\r\n });\r\n },\r\n selectItem(item) {\r\n this.$emit(\"update:select\", {\r\n show: false,\r\n selectedItem: item,\r\n });\r\n },\r\n },\r\n};\r\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputPopupSelectDate.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputPopupSelectDate.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InputPopupSelectDate.vue?vue&type=template&id=ad310dc2&\"\nimport script from \"./InputPopupSelectDate.vue?vue&type=script&lang=js&\"\nexport * from \"./InputPopupSelectDate.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDatePicker } from 'vuetify/lib/components/VDatePicker';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VDatePicker,VDialog,VRow,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"mx-2 px-5 pt-4 pb-3 mb-2\",staticStyle:{\"border-radius\":\"8px\"}},[_c('div',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectBranch.show = true}}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Library\")]),_c('v-text-field',{attrs:{\"value\":_vm.inputPopupSelectBranch.selectedItem.name,\"readonly\":\"\"}},[_c('v-icon',{attrs:{\"slot\":\"prepend-inner\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-library\")])],1),_c('InputPopupSelect',{attrs:{\"title\":\"Library\",\"list\":_vm.visitBranchMenus,\"select\":_vm.inputPopupSelectBranch},on:{\"update:select\":function($event){_vm.inputPopupSelectBranch=$event}}})],1),_c('div',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectPax.show = true}}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Pax\")]),_c('v-text-field',{attrs:{\"prepend-inner-icon\":\"mdi-account-multiple\",\"value\":_vm.inputPopupSelectPax.selectedItem.name,\"readonly\":\"\"}}),_c('InputPopupSelect',{attrs:{\"title\":\"Pax\",\"maxWidth\":\"240px\",\"list\":_vm.paxList,\"select\":_vm.inputPopupSelectPax},on:{\"update:select\":function($event){_vm.inputPopupSelectPax=$event}}})],1),_c('div',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectDate.show = true}}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Date\")]),_c('v-text-field',{attrs:{\"prepend-inner-icon\":\"mdi-calendar-month\",\"value\":_vm.formatDate(_vm.inputPopupSelectDate.selectedItem),\"readonly\":\"\"}}),_c('InputPopupSelectDate',{attrs:{\"select\":_vm.inputPopupSelectDate,\"allowed-dates\":_vm.calendarAllowedDates,\"min\":_vm.calendar.min,\"max\":_vm.calendar.max},on:{\"update:select\":function($event){_vm.inputPopupSelectDate=$event}}})],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectTime.show = true}}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Time\")]),_c('v-text-field',{attrs:{\"prepend-inner-icon\":\"mdi-clock-outline\",\"value\":_vm.inputPopupSelectTime.selectedItem.name,\"readonly\":\"\"}}),_c('InputPopupSelect',{attrs:{\"title\":\"Time\",\"maxWidth\":\"270px\",\"list\":_vm.timeList,\"select\":_vm.inputPopupSelectTime},on:{\"update:select\":function($event){_vm.inputPopupSelectTime=$event}}})],1),_c('v-col',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectDuration.show = true}}},[_c('span',{staticClass:\"label text-truncate\"},[_vm._v(\"Duration (Hour : Min)\")]),_c('v-text-field',{attrs:{\"prepend-inner-icon\":\"mdi-timer-sand\",\"value\":_vm.inputPopupSelectDuration.selectedItem.name,\"readonly\":\"\"}}),_c('InputPopupSelect',{attrs:{\"title\":\"Duration (Hour : Min)\",\"maxWidth\":\"270px\",\"list\":_vm.durationList,\"select\":_vm.inputPopupSelectDuration},on:{\"update:select\":function($event){_vm.inputPopupSelectDuration=$event}}})],1)],1),_c('div',{staticClass:\"button-group\",staticStyle:{\"margin-top\":\"18px\",\"margin-bottom\":\"18px\"}},[_c('v-row',[_c('v-col',[_c('v-btn',{staticClass:\"px-5\",attrs:{\"dark\":\"\",\"color\":\"primary\",\"large\":\"\",\"block\":\"\"},on:{\"click\":_vm.reset}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-cached\")]),_vm._v(\"Reset \")],1)],1)],1),_c('v-row',[_c('v-col',[_c('v-btn',{attrs:{\"dark\":\"\",\"color\":\"orange darken-2x\",\"large\":\"\",\"block\":\"\"},on:{\"click\":_vm.search}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-magnify\")]),_vm._v(\"Check available slots \")],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import moment from \"moment\"\r\n\r\nexport default {\r\n convertMinutesToHoursMinutes(minutes) {\r\n const hoursMinutes = `${minutes < 0 ? '-' : ''}${Math.abs(minutes / 60) ^ 0}` + ':' + ('0' + minutes % 60).slice(-2)\r\n return hoursMinutes;\r\n },\r\n formatDate(dateString) {\r\n return moment(dateString).format('dddd, D MMM YYYY');\r\n },\r\n formatCurrentDate() {\r\n return moment().format('DD MMM YYYY');\r\n },\r\n formatTime(dateString) {\r\n return moment(dateString).format('h:mm a');\r\n },\r\n formatIsoTimeNow() {\r\n return moment().format('HH:mm')\r\n },\r\n formatIsoTimeToTime(isoTimeString) {\r\n return moment(isoTimeString, \"HH:mm\").format('h:mm a');\r\n },\r\n formatPeriod(fromDateString, toDateString) {\r\n return `${this.formatTime(fromDateString)} - ${this.formatTime(toDateString)}`;\r\n },\r\n formatLocation(area, seat, floor) {\r\n return `${area}, Level ${floor}`;\r\n },\r\n // formatLocation(area, seat, floor) {\r\n // return `${area} - ${seat}, Level ${floor}`;\r\n // },\r\n formatLocationShort(area, seat, floor) {\r\n return `${area} - ${seat}, L${floor}`;\r\n },\r\n formatBookingStatus(actions, isVisitBooking) {\r\n let bookingStatus = isVisitBooking ? {\r\n text: null,\r\n icon: null,\r\n color: null\r\n } : {\r\n text: \"Check-in no later than 14 minutes from your booking start time.\",\r\n // text: \"Check-in required\",\r\n icon: \"mdi-map-marker\",\r\n color: \"\"\r\n };\r\n\r\n if (actions.includes(\"ManualFullCancel\")) {\r\n bookingStatus = {\r\n text: \"Cancelled\",\r\n icon: \"mdi-close-thick\",\r\n color: \"red\"\r\n };\r\n } else if (actions.includes(\"ManualPartialCancel\")) {\r\n bookingStatus = {\r\n text: \"Partially cancelled\",\r\n icon: \"mdi-close-outline\",\r\n color: \"red\"\r\n };\r\n } else if (actions.includes(\"AutoPartialCancel\")) {\r\n bookingStatus = {\r\n text: \"This booking has been cancelled as you did not check-in, 15 minutes has been deducted from your daily quota.\",\r\n // text: \"Partially auto-cancelled\",\r\n icon: \"mdi-close-outline\",\r\n color: \"red\"\r\n };\r\n } else if (\r\n actions.includes(\"BookAndCheckIn\") ||\r\n actions.includes(\"AutoCheckIn\") ||\r\n actions.includes(\"ManualCheckIn\") ||\r\n actions.includes(\"OverBookAndCheckIn\")\r\n ) {\r\n bookingStatus = {\r\n text: \"Checked in\",\r\n icon: \"mdi-check-decagram\",\r\n color: \"orange\"\r\n };\r\n }\r\n\r\n return bookingStatus;\r\n }\r\n}\r\n","import moment from \"moment\";\r\nimport formatters from \"@/helpers/formatters\";\r\nimport validators from \"@/helpers/validators\";\r\n\r\nexport default {\r\n toTodaysTime(timeMoment, todayMoment) {\r\n const hour = timeMoment.get(\"hour\");\r\n const minute = timeMoment.get(\"minute\");\r\n\r\n const result = todayMoment\r\n .clone()\r\n .add(hour, \"hour\")\r\n .add(minute, \"minute\");\r\n\r\n return result;\r\n },\r\n bookingEndTime(advanceBookingDays, bookingReleaseTimeString, time) {\r\n const momentNow = time.nowMoment;\r\n const todayMoment = time.todayMoment;\r\n\r\n const todaysBookingEndTime = todayMoment.clone().add(1, \"days\");\r\n\r\n const bookingReleaseTimeRaw = moment(\r\n bookingReleaseTimeString\r\n );\r\n\r\n const bookingReleaseTime = this.toTodaysTime(bookingReleaseTimeRaw, todayMoment)\r\n\r\n let endTime = null;\r\n\r\n if (advanceBookingDays > 0) {\r\n const advanceBookingEndTime = todaysBookingEndTime.clone().add(\r\n advanceBookingDays,\r\n \"days\"\r\n );\r\n\r\n if (momentNow >= bookingReleaseTime) {\r\n endTime = advanceBookingEndTime;\r\n } else {\r\n endTime = advanceBookingEndTime.clone().add(-1, \"days\");\r\n }\r\n } else {\r\n endTime = todaysBookingEndTime;\r\n }\r\n\r\n return endTime;\r\n },\r\n timeList(openingTimeMoment, lastBookingTimeMoment, bookingTimeslotInMinutes, isSameDate, nowMoment, todayMoment) {\r\n const todaysOpeningTimeMoment = this.toTodaysTime(openingTimeMoment, todayMoment)\r\n\r\n // console.log(\"timeList\", nowMoment.format())\r\n // console.log(\"openingTimeMoment\", openingTimeMoment.format())\r\n // console.log(\"lastBookingTimeMoment\", lastBookingTimeMoment.format())\r\n // console.log(\"todaysOpeningTimeMoment\", todaysOpeningTimeMoment.format())\r\n\r\n if (todaysOpeningTimeMoment && lastBookingTimeMoment && bookingTimeslotInMinutes) {\r\n let timeList = [];\r\n\r\n for (\r\n let i = todaysOpeningTimeMoment;\r\n i <= lastBookingTimeMoment;\r\n i = i\r\n .clone()\r\n .add(bookingTimeslotInMinutes, \"minutes\")\r\n ) {\r\n timeList.push({\r\n code: i.format(\"HH:mm\"),\r\n name: i.format(\"h:mm a\"),\r\n });\r\n }\r\n\r\n if (isSameDate) {\r\n timeList = timeList.filter(\r\n (x) => this.toTodaysTime(moment(x.code, \"HH:mm\"), todayMoment) > nowMoment\r\n );\r\n }\r\n\r\n // console.log(\"timeList\", JSON.stringify(timeList))\r\n return timeList;\r\n }\r\n\r\n return null;\r\n },\r\n durationList(minBookingMinutes, maxBookingMinutes, bookingTimeslotInMinutes,\r\n closingTimeMoment, selectedTimeMoment, todayMoment) {\r\n const todaysClosingTime = this.toTodaysTime(closingTimeMoment, todayMoment)\r\n const todaysSelectedTime = this.toTodaysTime(selectedTimeMoment, todayMoment)\r\n\r\n if (minBookingMinutes && maxBookingMinutes && bookingTimeslotInMinutes) {\r\n let durationList = [];\r\n for (\r\n let i = minBookingMinutes;\r\n i <= maxBookingMinutes;\r\n i += bookingTimeslotInMinutes\r\n ) {\r\n durationList.push({\r\n code: i,\r\n name: formatters.convertMinutesToHoursMinutes(i),\r\n });\r\n }\r\n\r\n if (todaysClosingTime && todaysSelectedTime) {\r\n durationList = durationList.filter(\r\n (x) =>\r\n todaysSelectedTime.clone().add(x.code, \"minutes\") <=\r\n todaysClosingTime\r\n );\r\n }\r\n\r\n return durationList;\r\n }\r\n\r\n return null;\r\n },\r\n getVisitBookingTimeslotsAndDurations(openingHours, visitBookingTimeIntervalInMinutes, visitBookingDurationInMinutes,\r\n dwellMinutesOfTheDay, bookingDateMoment) {\r\n // - OpeningHours - E.g. {\"defaultOpeningHours\":[{startTime: \"2021-12-07T09:00:00+08:00\", endTime: \"2021-12-07T15:00:00+08:00\"},{\"startTime\":\"2021-12-07T16:00:00+08:00\",\"endTime\":\"2021-12-07T20:00:00+08:00\"}]}\r\n const timeslotsAndDurations = [];\r\n const openingHoursOfTheDay = openingHours.defaultOpeningHours;\r\n\r\n const durationOfTheDayInMinutes = dwellMinutesOfTheDay\r\n ? Math.min(\r\n dwellMinutesOfTheDay,\r\n visitBookingDurationInMinutes\r\n )\r\n : visitBookingDurationInMinutes;\r\n\r\n openingHoursOfTheDay.forEach(x => {\r\n const startTimeOfTheDayMoment = this.toTodaysTime(moment(x.startTime), bookingDateMoment);\r\n const endTimeOftheDayMoment = this.toTodaysTime(moment(x.endTime), bookingDateMoment)\r\n\r\n for (var i = startTimeOfTheDayMoment; i < endTimeOftheDayMoment; i = i.add(visitBookingTimeIntervalInMinutes, \"minutes\")) {\r\n let durationInMinutes = durationOfTheDayInMinutes;\r\n if (i.clone().add(durationOfTheDayInMinutes, \"minutes\") > endTimeOftheDayMoment) {\r\n durationInMinutes = endTimeOftheDayMoment.clone().diff(i.clone(), \"minutes\");\r\n }\r\n\r\n timeslotsAndDurations.push({ timeslot: i.clone(), durationInMinutes: durationInMinutes });\r\n }\r\n });\r\n\r\n return timeslotsAndDurations;\r\n },\r\n visitBookingCalendar(timeslotsAndDurations, advanceBookingDays, bookingReleaseTime, openingDaysOfWeek, holidays, branchCode, time) {\r\n const nowMoment = time.nowMoment;\r\n const todayMoment = time.todayMoment;\r\n let bookingStartDate = todayMoment.clone();\r\n\r\n const bookingEndTime = this.bookingEndTime(advanceBookingDays, bookingReleaseTime, time);\r\n const bookingEndDate = bookingEndTime.clone().startOf(\"day\").add(-1, \"days\");\r\n\r\n //Try to bypass library closing days. E.g. Library opens only on the weekends, if today is Friday, and Saturday is bookable now, \r\n //the calendar start date will be set to Saturday instead of Friday\r\n if (bookingEndDate > bookingStartDate) {\r\n for (var i = bookingStartDate; i <= bookingEndDate; i = i.clone().add(1, \"days\")) { \r\n const isBranchOpenToday = validators.isBranchOpenToday(\r\n i,\r\n openingDaysOfWeek,\r\n holidays,\r\n branchCode\r\n );\r\n\r\n if (isBranchOpenToday) {\r\n bookingStartDate = i;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n //Try to set the start date of the calendar to tomorrow if no bookable timeslots are available for today\r\n const lastTimeslotOfToday = this.toTodaysTime(timeslotsAndDurations.slice(-1)[0].timeslot, todayMoment)\r\n\r\n if (bookingStartDate < bookingEndDate && bookingStartDate.isSame(todayMoment) && nowMoment >= lastTimeslotOfToday) {\r\n bookingStartDate.add(1, \"days\");\r\n }\r\n\r\n const calendar = { min: bookingStartDate.format(\"YYYY-MM-DD\"), max: bookingEndDate.format(\"YYYY-MM-DD\") };\r\n return calendar;\r\n },\r\n getVistiBookingTimeslots(openingHours, visitBookingTimeIntervalInMinutes) {\r\n // - OpeningHours - E.g. {\"defaultOpeningHours\":[{startTime: \"2021-12-07T09:00:00+08:00\", endTime: \"2021-12-07T15:00:00+08:00\"},{\"startTime\":\"2021-12-07T16:00:00+08:00\",\"endTime\":\"2021-12-07T20:00:00+08:00\"}]}\r\n const timeslots = [];\r\n const openingHoursOfTheDay = openingHours.defaultOpeningHours;\r\n\r\n openingHoursOfTheDay.forEach(x => {\r\n const startTimeOfTheDayMoment = moment(x.startTime);\r\n const endTimeOftheDayMoment = moment(x.endTime);\r\n\r\n for (var i = startTimeOfTheDayMoment; i < endTimeOftheDayMoment; i = i.add(visitBookingTimeIntervalInMinutes, \"minutes\")) {\r\n timeslots.push(i.clone());\r\n }\r\n });\r\n\r\n return timeslots;\r\n },\r\n visitBookingTimeList(openingHours, visitBookingTimeIntervalInMinutes, isSameDate, nowMoment, todayMoment) {\r\n //Visit booking time list depends on the selected branch and the selected calendar date.\r\n //E.g. If the selected calendar date is today, passed timeslots shouldn't be shown\r\n\r\n if (openingHours && visitBookingTimeIntervalInMinutes) {\r\n let timeList = [];\r\n const timeslots = this.getVistiBookingTimeslots(openingHours, visitBookingTimeIntervalInMinutes);\r\n\r\n timeslots.forEach(x => {\r\n if (!isSameDate || (isSameDate && this.toTodaysTime(x, todayMoment) > nowMoment)) {\r\n timeList.push({\r\n code: x.format(\"HH:mm\"),\r\n name: x.format(\"h:mm a\"),\r\n });\r\n }\r\n });\r\n\r\n // console.log(\"timeList\", JSON.stringify(timeList))\r\n return timeList;\r\n }\r\n\r\n return null;\r\n },\r\n visitBookingDurationList(timeslotsAndDurations, selectedTimeMoment) {\r\n //Visit booking duration list depends on branch, selected date (Dwell time can be different for different dates) and selected time\r\n const selectedTimeslotAndDuration = timeslotsAndDurations\r\n .find(x => x.timeslot.format(\"HH:mm\") === selectedTimeMoment.format(\"HH:mm\"));\r\n\r\n if (selectedTimeslotAndDuration) {\r\n const durationList = [{\r\n code: selectedTimeslotAndDuration.durationInMinutes,\r\n name: formatters.convertMinutesToHoursMinutes(selectedTimeslotAndDuration.durationInMinutes)\r\n }];\r\n\r\n return durationList;\r\n }\r\n\r\n return null;\r\n },\r\n paxList(visitBookingMaxPax) {\r\n let paxList = [];\r\n for (let i = 1; i <= visitBookingMaxPax; i++) {\r\n paxList.push({\r\n code: i,\r\n name: i.toString(),\r\n });\r\n }\r\n\r\n return paxList;\r\n }\r\n}","<template>\r\n <v-card class=\"mx-2 px-5 pt-4 pb-3 mb-2\" style=\"border-radius: 8px\">\r\n <!-- Select library -->\r\n <div\r\n class=\"inputPopupSelectDiv\"\r\n @click=\"inputPopupSelectBranch.show = true\"\r\n >\r\n <span class=\"label\">Library</span>\r\n <v-text-field :value=\"inputPopupSelectBranch.selectedItem.name\" readonly>\r\n <v-icon slot=\"prepend-inner\">mdi-library</v-icon>\r\n </v-text-field>\r\n\r\n <InputPopupSelect\r\n title=\"Library\"\r\n :list=\"visitBranchMenus\"\r\n :select.sync=\"inputPopupSelectBranch\"\r\n />\r\n </div>\r\n\r\n <!-- Select pax -->\r\n <div @click=\"inputPopupSelectPax.show = true\" class=\"inputPopupSelectDiv\">\r\n <span class=\"label\">Pax</span>\r\n <v-text-field\r\n prepend-inner-icon=\"mdi-account-multiple\"\r\n :value=\"inputPopupSelectPax.selectedItem.name\"\r\n readonly\r\n >\r\n </v-text-field>\r\n\r\n <InputPopupSelect\r\n title=\"Pax\"\r\n maxWidth=\"240px\"\r\n :list=\"paxList\"\r\n :select.sync=\"inputPopupSelectPax\"\r\n />\r\n </div>\r\n\r\n <!-- Select date -->\r\n <div @click=\"inputPopupSelectDate.show = true\" class=\"inputPopupSelectDiv\">\r\n <span class=\"label\">Date</span>\r\n <v-text-field\r\n prepend-inner-icon=\"mdi-calendar-month\"\r\n :value=\"formatDate(inputPopupSelectDate.selectedItem)\"\r\n readonly\r\n ></v-text-field>\r\n\r\n <InputPopupSelectDate\r\n :select.sync=\"inputPopupSelectDate\"\r\n :allowed-dates=\"calendarAllowedDates\"\r\n :min=\"calendar.min\"\r\n :max=\"calendar.max\"\r\n />\r\n </div>\r\n\r\n <v-row no-gutters>\r\n <!-- Select time -->\r\n <v-col\r\n @click=\"inputPopupSelectTime.show = true\"\r\n class=\"inputPopupSelectDiv\"\r\n >\r\n <span class=\"label\">Time</span>\r\n <v-text-field\r\n prepend-inner-icon=\"mdi-clock-outline\"\r\n :value=\"inputPopupSelectTime.selectedItem.name\"\r\n readonly\r\n ></v-text-field>\r\n\r\n <InputPopupSelect\r\n title=\"Time\"\r\n maxWidth=\"270px\"\r\n :list=\"timeList\"\r\n :select.sync=\"inputPopupSelectTime\"\r\n />\r\n </v-col>\r\n\r\n <!-- Select duration -->\r\n <v-col\r\n @click=\"inputPopupSelectDuration.show = true\"\r\n class=\"inputPopupSelectDiv\"\r\n >\r\n <span class=\"label text-truncate\">Duration (Hour : Min)</span>\r\n <v-text-field\r\n prepend-inner-icon=\"mdi-timer-sand\"\r\n :value=\"inputPopupSelectDuration.selectedItem.name\"\r\n readonly\r\n ></v-text-field>\r\n\r\n <InputPopupSelect\r\n title=\"Duration (Hour : Min)\"\r\n maxWidth=\"270px\"\r\n :list=\"durationList\"\r\n :select.sync=\"inputPopupSelectDuration\"\r\n />\r\n </v-col>\r\n </v-row>\r\n\r\n <!-- Buttons -->\r\n <div class=\"button-group\" style=\"margin-top: 18px; margin-bottom: 18px\">\r\n <v-row>\r\n <v-col>\r\n <v-btn @click=\"reset\" dark color=\"primary\" class=\"px-5\" large block>\r\n <v-icon left dark>mdi-cached</v-icon>Reset\r\n </v-btn>\r\n </v-col>\r\n </v-row>\r\n\r\n <v-row>\r\n <v-col>\r\n <v-btn\r\n dark\r\n color=\"orange darken-2x\"\r\n large\r\n class\r\n block\r\n @click=\"search\"\r\n >\r\n <v-icon left dark>mdi-magnify</v-icon>Check available slots\r\n </v-btn>\r\n </v-col>\r\n </v-row>\r\n </div>\r\n </v-card>\r\n</template>\r\n\r\n<script>\r\nimport { mapState, mapGetters, mapMutations } from \"vuex\";\r\nimport moment from \"moment\";\r\nimport InputPopupSelect from \"@/components/InputPopupSelect\";\r\nimport InputPopupSelectDate from \"@/components/InputPopupSelectDate\";\r\nimport formatters from \"@/helpers/formatters\";\r\nimport calculator from \"@/helpers/calculator\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\nimport businessLogic from \"@/helpers/businessLogic\";\r\nimport validators from \"@/helpers/validators\";\r\n\r\nexport default {\r\n name: \"VisitBookingSearchForm\",\r\n components: {\r\n InputPopupSelect,\r\n InputPopupSelectDate,\r\n },\r\n data: () => ({\r\n showSeatBookingSearchForm: false,\r\n inputPopupSelectBranch: {\r\n show: false,\r\n selectedItem: {\r\n //PublicBranchMenu\r\n name: null,\r\n code: null,\r\n },\r\n },\r\n inputPopupSelectPax: {\r\n show: false,\r\n selectedItem: {\r\n name: null,\r\n code: null, //0, 1\r\n },\r\n },\r\n inputPopupSelectDate: {\r\n show: false,\r\n selectedItem: null, //yyyy-MM-dd\r\n },\r\n inputPopupSelectTime: {\r\n show: false,\r\n selectedItem: {\r\n name: null,\r\n code: null, //HH-mm\r\n },\r\n },\r\n inputPopupSelectDuration: {\r\n show: false,\r\n selectedItem: {\r\n name: null, //(Hour:Minute)\r\n code: null, //Minutes\r\n },\r\n },\r\n }),\r\n computed: {\r\n ...mapGetters([\"mode\", \"visitBranchMenus\"]),\r\n selectedBranch() {\r\n return this.inputPopupSelectBranch.selectedItem;\r\n },\r\n selectedPax() {\r\n return this.inputPopupSelectPax.selectedItem;\r\n },\r\n selectedDate() {\r\n return this.inputPopupSelectDate.selectedItem;\r\n },\r\n selectedTime() {\r\n return this.inputPopupSelectTime.selectedItem;\r\n },\r\n selectedDuration() {\r\n return this.inputPopupSelectDuration.selectedItem;\r\n },\r\n paxList() {\r\n return calculator.paxList(this.selectedBranch.visitBookingMaxPax);\r\n },\r\n calendar() {\r\n const selectedBranch = this.selectedBranch;\r\n\r\n const dwellMinutesOfTheDay = businessLogic.getDwellTimeMinutes(\r\n this.settings.holidays,\r\n selectedBranch.dwellTime,\r\n this.time.todayMoment\r\n );\r\n\r\n const timeslotsAndDurations =\r\n calculator.getVisitBookingTimeslotsAndDurations(\r\n selectedBranch.openingHours,\r\n selectedBranch.visitBookingTimeIntervalInMinutes,\r\n selectedBranch.visitBookingDurationInMinutes,\r\n dwellMinutesOfTheDay,\r\n this.time.todayMoment\r\n );\r\n\r\n const calendar = calculator.visitBookingCalendar(\r\n timeslotsAndDurations,\r\n this.settings.system.advanceBookingDays,\r\n this.settings.system.bookingReleaseTime,\r\n selectedBranch.openingDaysOfWeek,\r\n this.settings.holidays,\r\n selectedBranch.code,\r\n this.time\r\n );\r\n\r\n return calendar;\r\n },\r\n timeList() {\r\n //Visit booking time list depends on the selected branch and the selected calendar date.\r\n //E.g. If the selected calendar date is today, passed timeslots shouldn't be shown\r\n const selectedBranch = this.selectedBranch;\r\n const isSameDate = this.time.nowMoment.isSame(\r\n moment(this.selectedDate),\r\n \"day\"\r\n );\r\n\r\n const timeList = calculator.visitBookingTimeList(\r\n selectedBranch.openingHours,\r\n selectedBranch.visitBookingTimeIntervalInMinutes,\r\n isSameDate,\r\n this.time.nowMoment,\r\n this.time.todayMoment\r\n );\r\n\r\n return timeList;\r\n },\r\n durationList() {\r\n //Visit booking duration list depends on branch, selected date (Dwell time can be different for different dates) and selected time\r\n const selectedBranch = this.selectedBranch;\r\n const selectedDateMoment = moment(this.selectedDate);\r\n const selectedTimeMoment = moment(this.selectedTime.code, \"HH:mm\");\r\n\r\n const dwellMinutesOfTheDay = businessLogic.getDwellTimeMinutes(\r\n this.settings.holidays,\r\n selectedBranch.dwellTime,\r\n selectedDateMoment\r\n );\r\n\r\n const timeslotsAndDurations =\r\n calculator.getVisitBookingTimeslotsAndDurations(\r\n selectedBranch.openingHours,\r\n selectedBranch.visitBookingTimeIntervalInMinutes,\r\n selectedBranch.visitBookingDurationInMinutes,\r\n dwellMinutesOfTheDay,\r\n selectedDateMoment\r\n );\r\n\r\n const durationList = calculator.visitBookingDurationList(\r\n timeslotsAndDurations,\r\n selectedTimeMoment\r\n );\r\n\r\n return durationList;\r\n },\r\n },\r\n methods: {\r\n ...mapMutations([\"updateVisitBookingSearchResult\"]),\r\n calendarAllowedDates(dateString) {\r\n if (!this.selectedBranch) {\r\n return false;\r\n }\r\n\r\n const isBranchOpenToday = validators.isBranchOpenToday(\r\n dateString,\r\n this.selectedBranch.openingDaysOfWeek,\r\n this.settings.holidays,\r\n this.selectedBranch.code\r\n );\r\n\r\n return isBranchOpenToday;\r\n },\r\n reset() {\r\n //Reset branch\r\n if (this.onsiteMode) {\r\n const branch = this.visitBranchMenus.find(\r\n (x) => x.id === this.mode.branchId\r\n );\r\n\r\n if (branch) {\r\n this.inputPopupSelectBranch.selectedItem = branch;\r\n }\r\n }\r\n\r\n //Reset pax\r\n this.inputPopupSelectPax.selectedItem = this.paxList[0];\r\n\r\n //Reset date, time, duration\r\n if (this.calendar && this.calendar.min) {\r\n this.inputPopupSelectDate.selectedItem = this.calendar.min;\r\n\r\n if (this.timeList) {\r\n this.inputPopupSelectTime.selectedItem = this.timeList[0];\r\n\r\n if (this.durationList) {\r\n this.inputPopupSelectDuration.selectedItem = this.durationList[0];\r\n }\r\n }\r\n }\r\n },\r\n async search() {\r\n const isOnOpeningDaysOfWeek = validators.isOnOpeningDaysOfWeek(\r\n this.selectedDate,\r\n this.selectedBranch.openingDaysOfWeek\r\n );\r\n\r\n const isHoliday = validators.isHoliday(\r\n this.selectedDate,\r\n this.settings.holidays,\r\n this.selectedBranch.code\r\n );\r\n\r\n if (!isOnOpeningDaysOfWeek || isHoliday) {\r\n this.updateResult({\r\n show: true,\r\n success: false,\r\n title: !isOnOpeningDaysOfWeek\r\n ? window.$msg.noVisitBookingOnWeekdays\r\n : window.$msg.noVisitBookingOpen,\r\n });\r\n\r\n return;\r\n }\r\n\r\n const branchId = this.selectedBranch.id;\r\n const pax = this.selectedPax.code;\r\n const starTime = this.selectedDate + \"T\" + this.selectedTime.code;\r\n const durationInMinutes = this.selectedDuration.code;\r\n\r\n const searchResponse = await apiHelper.searchAvailableVisitCapacity(\r\n branchId,\r\n pax,\r\n starTime,\r\n durationInMinutes\r\n );\r\n\r\n //commonResponseHandler is not used in this case, because this handler is a bit different\r\n //IM8 logout takes the highest priority\r\n if (searchResponse === window.$msg.reloginRequired) {\r\n businessLogic.im8Logout();\r\n\r\n return;\r\n }\r\n\r\n if (searchResponse && searchResponse.data) {\r\n if (searchResponse.data.visitCapacity) {\r\n //Add selected pax into the result for subsequent visit booking\r\n searchResponse.data.visitCapacity.pax = pax;\r\n this.updateVisitBookingSearchResult(searchResponse.data);\r\n\r\n if (searchResponse.data.found) {\r\n // this.$router.push({\r\n // name: \"VisitBookingSearchResults\",\r\n // });\r\n this.$router.push({ name: \"VisitBookingDetails\" });\r\n } else {\r\n this.$router.push({\r\n name: \"VisitBookingSearchResults\",\r\n });\r\n }\r\n } else {\r\n this.updateResult({\r\n show: true,\r\n success: false,\r\n title: searchResponse.data.errorMessage,\r\n message: window.$msg.noResultsFoundMsg,\r\n });\r\n }\r\n } else {\r\n this.updateResult({\r\n show: true,\r\n success: false,\r\n title: searchResponse,\r\n });\r\n }\r\n },\r\n formatDate(dateString) {\r\n return formatters.formatDate(dateString);\r\n },\r\n beforeRouteLeave(to, from, next) {\r\n //Cause the back button to close any popups instead of navigate to another page\r\n\r\n const inputs = [\r\n this.inputPopupSelectBranch,\r\n this.inputPopupSelectPax,\r\n this.inputPopupSelectDate,\r\n this.inputPopupSelectTime,\r\n this.inputPopupSelectDuration,\r\n ];\r\n\r\n for (const i of inputs) {\r\n if (i != null && i.show) {\r\n i.show = false;\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n },\r\n watch: {\r\n settings: {\r\n immediate: true,\r\n handler(newValue, oldValue) {\r\n if (newValue) {\r\n let selectedBranch = this.visitBranchMenus[0];\r\n\r\n if (this.onsiteMode) {\r\n const branch = this.visitBranchMenus.find(\r\n (x) => x.id === this.mode.branchId\r\n );\r\n\r\n if (branch) {\r\n selectedBranch = branch;\r\n }\r\n }\r\n\r\n this.inputPopupSelectBranch.selectedItem = selectedBranch;\r\n }\r\n },\r\n },\r\n paxList: {\r\n immediate: true,\r\n handler(newValue, oldValue) {\r\n if (newValue && newValue.length) {\r\n const paxList = newValue.map((x) => x.name);\r\n\r\n if (!paxList.includes(this.selectedPax.name)) {\r\n this.inputPopupSelectPax.selectedItem = newValue[0];\r\n }\r\n }\r\n },\r\n },\r\n calendar: {\r\n immediate: true,\r\n handler(newValue, oldValue) {\r\n if (newValue && newValue !== oldValue) {\r\n //Mainly used for the initial update, and to auto-update calandar to tomorrow when there is no timeslots left for today\r\n if (this.inputPopupSelectDate.selectedItem) {\r\n const isTodaySelected = validators.isToday(\r\n this.inputPopupSelectDate.selectedItem,\r\n this.time.nowMoment\r\n );\r\n\r\n const isBranchOpenToday = validators.isBranchOpenToday(\r\n this.inputPopupSelectDate.selectedItem,\r\n this.selectedBranch.openingDaysOfWeek,\r\n this.settings.holidays,\r\n this.selectedBranch.code\r\n );\r\n\r\n if (isTodaySelected || !isBranchOpenToday) {\r\n this.inputPopupSelectDate.selectedItem = newValue.min;\r\n }\r\n } else {\r\n this.inputPopupSelectDate.selectedItem = newValue.min;\r\n }\r\n }\r\n },\r\n },\r\n timeList: {\r\n immediate: true,\r\n handler(newValue, oldValue) {\r\n if (newValue && newValue.length) {\r\n const timeNameList = newValue.map((x) => x.name);\r\n\r\n if (\r\n !this.selectedTime.name ||\r\n !timeNameList.includes(this.selectedTime.name)\r\n ) {\r\n this.inputPopupSelectTime.selectedItem = newValue[0];\r\n }\r\n }\r\n },\r\n },\r\n durationList: {\r\n immediate: true,\r\n handler(newValue, oldValue) {\r\n if (newValue && newValue.length) {\r\n const durationList = newValue.map((x) => x.name);\r\n\r\n if (\r\n !this.selectedDuration.name ||\r\n !durationList.includes(this.selectedDuration.name)\r\n ) {\r\n this.inputPopupSelectDuration.selectedItem = newValue[0];\r\n }\r\n }\r\n },\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.label {\r\n font-weight: bold;\r\n font-size: 14px;\r\n}\r\n\r\n.button-group {\r\n margin: 6px;\r\n}\r\n\r\n.button-group .col {\r\n margin: 5px;\r\n padding: 0px;\r\n}\r\n\r\n.v-list-item__content {\r\n padding: 0;\r\n}\r\n\r\n.inputPopupSelectDiv {\r\n margin-bottom: 24px;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingSearchForm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingSearchForm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VisitBookingSearchForm.vue?vue&type=template&id=d8d1d088&scoped=true&\"\nimport script from \"./VisitBookingSearchForm.vue?vue&type=script&lang=js&\"\nexport * from \"./VisitBookingSearchForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VisitBookingSearchForm.vue?vue&type=style&index=0&id=d8d1d088&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d8d1d088\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VBtn,VCard,VCol,VIcon,VRow,VTextField})\n","<template>\n <div v-resize=\"setContentHeight\">\n <v-card\n :height=\"visitBranchMenus ? '140px' : '104px'\"\n style=\"border-radius: 0px\"\n color=\"primary\"\n class=\"pr-1\"\n >\n <!-- Toolbar -->\n <v-toolbar\n id=\"newBookingToolbar\"\n dark\n elevation=\"0\"\n color=\"primary\"\n style=\"border-bottom-right-radius: 5px; border-bottom-left-radius: 5px\"\n >\n <img\n img aria-label=\"NLB Logo\"\n :src=\"`${this.iconPath}nlb-logo-white.png`\"\n style=\"height: 48px; widthx: 24px\"\n class=\"mr-3\"\n />\n\n <v-toolbar-title>New Booking</v-toolbar-title>\n\n <v-spacer></v-spacer>\n\n <v-btn aria-label=\"Show help\" @click=\"$router.push({ name: 'Help' }, () => {})\" icon>\n <v-icon>mdi-help-circle-outline</v-icon>\n </v-btn>\n\n <v-btn icon>\n <LoginIcon />\n </v-btn>\n </v-toolbar>\n\n <!-- Seat & visit tab buttons -->\n <div v-if=\"visitBranchMenus\" class=\"pl-2 mt-2\">\n <v-btn\n color=\"white\"\n height=\"34\"\n class=\"text-capitalize\"\n style=\"margin-right: 6px; border-radius: 8px\"\n :class=\"\n !showSeatBookingSearchForm\n ? 'primary--text font-weight-black'\n : 'white--text font-weight-regular'\n \"\n :outlined=\"showSeatBookingSearchForm\"\n @click=\"showSeatBookingSearchForm = false\"\n >Visit</v-btn\n >\n <v-btn\n color=\"white\"\n height=\"34\"\n class=\"text-capitalize\"\n style=\"border-radius: 8px\"\n :class=\"\n showSeatBookingSearchForm\n ? 'primary--text font-weight-black'\n : 'white--text font-weight-regular'\n \"\n :outlined=\"!showSeatBookingSearchForm\"\n @click=\"seatBookingUnavailableForEmaiMobileLogin\"\n >Seat</v-btn\n >\n </div>\n </v-card>\n\n <div\n ref=\"homeScrollable\"\n class=\"scrollable\"\n :style=\"\n visitBranchMenus\n ? 'margin-top: -36px !important'\n : 'margin-top: -45px !important'\n \"\n >\n <div v-if=\"visitBranchMenus\" v-show=\"!showSeatBookingSearchForm\">\n <VisitBookingSearchForm ref=\"visitBookingSearchForm\" />\n </div>\n\n <v-card\n v-if=\"\n (!visitBranchMenus || showSeatBookingSearchForm) &&\n settings &&\n inputPopupSelectBranch.selectedItem\n \"\n class=\"mx-2 px-5 pt-4 pb-3 mb-2\"\n style=\"border-radius: 8px\"\n >\n <!-- Select library -->\n <div\n class=\"inputPopupSelectDiv\"\n @click=\"inputPopupSelectBranch.show = true\"\n >\n <span class=\"label\">Library</span>\n <v-text-field\n aria-label=\"Select library\"\n :value=\"inputPopupSelectBranch.selectedItem.name\"\n readonly\n >\n <v-icon slot=\"prepend-inner\">mdi-library</v-icon>\n </v-text-field>\n\n <InputPopupSelect\n title=\"Library\"\n :list=\"seatBranchMenus\"\n :select.sync=\"inputPopupSelectBranch\"\n />\n </div>\n\n <!-- Select area -->\n <div\n class=\"inputPopupSelectDiv\"\n @click=\"inputPopupSelectArea.show = true\"\n >\n <span class=\"label\">Area</span>\n <v-text-field\n aria-label=\"Select area\"\n prepend-inner-icon=\"mdi-map-marker\"\n :value=\"\n inputPopupSelectArea.selectedItem\n ? inputPopupSelectArea.selectedItem.name\n : 'All'\n \"\n readonly\n >\n <v-icon\n v-if=\"inputPopupSelectArea.selectedItem\"\n slot=\"append\"\n @click.stop=\"clearArea\"\n >mdi-close</v-icon\n >\n </v-text-field>\n\n <InputPopupSelect\n title=\"Area\"\n :list=\"inputPopupSelectBranch.selectedItem.areas\"\n :select.sync=\"inputPopupSelectArea\"\n />\n </div>\n\n <!-- Select date -->\n <div\n class=\"inputPopupSelectDiv\"\n @click=\"inputPopupSelectDate.show = true\"\n >\n <span class=\"label\">Date</span>\n <v-text-field\n aria-label=\"Select date\"\n prepend-inner-icon=\"mdi-calendar-month\"\n :value=\"formatDate(inputPopupSelectDate.selectedItem)\"\n readonly\n ></v-text-field>\n\n <InputPopupSelectDate\n :select.sync=\"inputPopupSelectDate\"\n :min=\"bookingStartDateString\"\n :max=\"bookingEndDateString\"\n />\n </div>\n\n <v-row no-gutters>\n <!-- Select time -->\n <v-col\n @click=\"inputPopupSelectTime.show = true\"\n class=\"inputPopupSelectDiv\"\n >\n <span class=\"label\">Time</span>\n <v-text-field\n aria-label=\"Select time\"\n prepend-inner-icon=\"mdi-clock-outline\"\n :value=\"inputPopupSelectTime.selectedItem.name\"\n readonly\n ></v-text-field>\n\n <InputPopupSelect\n title=\"Time\"\n maxWidth=\"270px\"\n :list=\"timeList\"\n :select.sync=\"inputPopupSelectTime\"\n />\n </v-col>\n\n <!-- Select duration -->\n <v-col\n @click=\"inputPopupSelectDuration.show = true\"\n class=\"inputPopupSelectDiv\"\n >\n <span class=\"label text-truncate\">Duration (Hour : Min)</span>\n <v-text-field\n aria-label=\"Select duration\"\n prepend-inner-icon=\"mdi-timer-sand\"\n :value=\"inputPopupSelectDuration.selectedItem.name\"\n readonly\n ></v-text-field>\n\n <InputPopupSelect\n title=\"Duration (Hour : Min)\"\n maxWidth=\"270px\"\n :list=\"durationList\"\n :select.sync=\"inputPopupSelectDuration\"\n />\n </v-col>\n </v-row>\n\n <!-- Buttons -->\n <div class=\"button-group\" style=\"margin-top: 18px; margin-bottom: 18px\">\n <v-row>\n <v-col>\n <v-btn\n @click=\"reset\"\n dark\n color=\"primary\"\n class=\"px-5\"\n large\n block\n >\n <v-icon left dark>mdi-cached</v-icon>Reset\n </v-btn>\n </v-col>\n\n <v-col>\n <v-btn\n @click=\"\n $router.push({\n name: 'ScanQRCode',\n params: { state: 'home' },\n })\n \"\n dark\n color=\"primary\"\n class\n large\n block\n >\n <v-icon left dark>mdi-qrcode</v-icon>QR Code\n </v-btn>\n </v-col>\n </v-row>\n\n <v-row>\n <v-col>\n <v-btn\n dark\n color=\"deep-orange darken-4\"\n large\n class\n block\n @click=\"search\"\n >\n <v-icon left dark>mdi-magnify</v-icon>Check available slots\n </v-btn>\n </v-col>\n </v-row>\n </div>\n </v-card>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState, mapGetters, mapMutations } from \"vuex\";\nimport moment from \"moment\";\nimport LoginIcon from \"@/components/LoginIcon\";\nimport InputPopupSelect from \"@/components/InputPopupSelect\";\nimport InputPopupSelectDate from \"@/components/InputPopupSelectDate\";\nimport VisitBookingSearchForm from \"@/components/VisitBookingSearchForm\";\nimport formatters from \"@/helpers/formatters\";\nimport calculator from \"@/helpers/calculator\";\nimport apiHelper from \"@/helpers/apiHelper\";\nimport businessLogic from \"@/helpers/businessLogic\";\nimport validators from \"@/helpers/validators\";\n\nexport default {\n name: \"Home\",\n components: {\n LoginIcon,\n InputPopupSelect,\n InputPopupSelectDate,\n VisitBookingSearchForm,\n },\n data: () => ({\n showSeatBookingSearchForm: false,\n inputPopupSelectBranch: {\n show: false,\n selectedItem: {\n //PublicBranchMenu\n name: null,\n code: null,\n },\n },\n inputPopupSelectArea: {\n show: false,\n selectedItem: null, //PublicAreaMenu (null = \"All\" areas)\n },\n inputPopupSelectDate: {\n show: false,\n selectedItem: null, //yyyy-MM-dd\n },\n inputPopupSelectTime: {\n show: false,\n selectedItem: {\n name: null,\n code: null, //HH-mm\n },\n },\n inputPopupSelectDuration: {\n show: false,\n selectedItem: {\n name: null,\n code: null, //Minutes\n },\n },\n }),\n computed: {\n ...mapState([\"qrCode\", \"locationInfoFromQrCode\"]),\n ...mapGetters([\n \"mode\",\n \"seatBranchMenus\",\n \"visitBranchMenus\",\n \"isEmailMobileLogin\",\n ]),\n selectedBranch() {\n return this.inputPopupSelectBranch.selectedItem;\n },\n selectedArea() {\n return this.inputPopupSelectArea.selectedItem;\n },\n selectedDate() {\n return this.inputPopupSelectDate.selectedItem;\n },\n selectedTime() {\n return this.inputPopupSelectTime.selectedItem;\n },\n selectedDuration() {\n return this.inputPopupSelectDuration.selectedItem;\n },\n isSameDate() {\n return this.time.nowMoment.isSame(moment(this.selectedDate), \"day\");\n },\n lastBookingTime() {\n //lastBookingTime = closingTime - minBookingMinutes\n const lastBookingTime = calculator\n .toTodaysTime(\n moment(this.areaDependentSettings.closingTime),\n this.time.todayMoment\n )\n .clone()\n .subtract(this.areaDependentSettings.minBookingMinutes, \"minutes\");\n\n return lastBookingTime;\n },\n bookingStartDateString() {\n //TODO: Better logic that considers holidays and no advance booking, etc.\n\n const bookingStartDate =\n this.time.nowMoment >= this.lastBookingTime\n ? this.time.nowMoment.clone().add(1, \"days\")\n : this.time.nowMoment;\n\n return bookingStartDate.format(\"YYYY-MM-DD\");\n },\n bookingEndDateString() {\n return this.bookingEndTime.clone().add(-1, \"days\").format(\"YYYY-MM-DD\");\n },\n bookingEndTime() {\n const bookingEndTime = calculator.bookingEndTime(\n this.settings.system.advanceBookingDays,\n this.settings.system.bookingReleaseTime,\n this.time\n );\n\n return bookingEndTime;\n },\n timeList() {\n const timeList = calculator.timeList(\n moment(this.areaDependentSettings.openingTime),\n this.lastBookingTime,\n this.areaDependentSettings.bookingTimeslotInMinutes,\n this.isSameDate,\n this.time.nowMoment,\n this.time.todayMoment\n );\n\n return timeList;\n },\n durationList() {\n let quotaLeftInMinutes = Infinity;\n const selectedTimeMoment = moment(this.selectedTime.code, \"HH:mm\");\n const closingTimeMoment = moment(this.areaDependentSettings.closingTime);\n\n let maxBookingMinutes = this.dwellMinutesOfTheDay\n ? Math.min(\n this.dwellMinutesOfTheDay,\n this.areaDependentSettings.maxBookingMinutes\n )\n : this.areaDependentSettings.maxBookingMinutes;\n\n // For \"maxBookingMinutes\", it has to be at least 1 hour\n // Or it must be the quotaLeft\n\n //maxBookingMinutes = Math.max(1 hour, quotaLeft);\n\n if (\n this.accountInfo &&\n this.accountInfo.dailyBookingQuotas &&\n this.accountInfo.dailyBookingQuotas.length\n ) {\n if (validators.isToday(\n this.inputPopupSelectDate.selectedItem,\n this.time.nowMoment\n )) {\n // If selected date is today, get quota from dailyBookingQuotas\n // Find the entry with the maximum remainingQuotaInMinutes within dailyBookingQuotas\n\n const remainingDailyBookingQuotas = this.accountInfo.dailyBookingQuotas;\n\n quotaLeftInMinutes = remainingDailyBookingQuotas.reduce((max, quota) => {\n return quota.remainingQuotaInMinutes > max.remainingQuotaInMinutes ? quota : max;\n }, remainingDailyBookingQuotas[0].remainingQuotaInMinutes);\n } else {\n // If selected date is not today, get quota from advancedDailyBookingQuotas\n // Find the entry with the maximum remainingQuotaInMinutes within advancedBookingQuotas\n\n const remainingAdvancedBookingQuotas = this.accountInfo.advancedBookingQuotas;\n\n quotaLeftInMinutes = remainingAdvancedBookingQuotas.reduce((maxEntry, booking) => {\n const maxQuotaEntry = booking.advancedDailyBookingQuotas.reduce((max, quota) => {\n return quota.remainingQuotaInMinutes > max.remainingQuotaInMinutes ? quota : max;\n }, booking.advancedDailyBookingQuotas[0]);\n\n return maxQuotaEntry.remainingQuotaInMinutes > maxEntry.remainingQuotaInMinutes ? maxQuotaEntry : maxEntry;\n }, remainingAdvancedBookingQuotas[0].advancedDailyBookingQuotas[0].remainingQuotaInMinutes);\n }\n\n maxBookingMinutes = Math.max(this.settings.system.extensionMinutes, quotaLeftInMinutes); // To have a minimum bookable duration of 1 hour as still need to enable the 2 free overbookings\n }\n\n const durationList = calculator.durationList(\n this.areaDependentSettings.minBookingMinutes,\n maxBookingMinutes,\n this.areaDependentSettings.bookingTimeslotInMinutes,\n closingTimeMoment,\n selectedTimeMoment,\n this.time.todayMoment\n );\n\n return durationList;\n },\n dwellMinutesOfTheDay() {\n const selectedBranch = this.inputPopupSelectBranch.selectedItem;\n const branchDwellTime = selectedBranch.dwellTime;\n\n const dwellMinutesOfTheDay = businessLogic.getDwellTimeMinutes(\n this.settings.holidays,\n branchDwellTime,\n this.selectedDate\n );\n\n return dwellMinutesOfTheDay;\n },\n areaDependentSettings() {\n //This guy is added for Bloomberg terminal SR, some settings are dynamic now, depending on which area is selected\n const selectedArea = this.inputPopupSelectArea.selectedItem;\n\n if (selectedArea) {\n const areaDependentSettings = {\n openingTime: selectedArea.openingTime,\n closingTime: selectedArea.closingTime,\n bookingTimeslotInMinutes: selectedArea.bookingTimeslotInMinutes,\n minBookingMinutes: selectedArea.minBookingMinutes,\n maxBookingMinutes: selectedArea.maxBookingMinutes,\n };\n\n return areaDependentSettings;\n } else {\n const allAreasInSelectedBranch =\n this.inputPopupSelectBranch.selectedItem.areas;\n\n // const earliestOpeningTime = allAreasInSelectedBranch.reduce(\n // (p, c) => (p < c.openingTime ? p.openingTime : c.openingTime),\n // allAreasInSelectedBranch[0].openingTime\n // );\n\n const earliestOpeningTime = allAreasInSelectedBranch.reduce(\n (p, c) => new Date(p.openingTime) < new Date(c.openingTime) ? p : c,\n allAreasInSelectedBranch[0]\n ).openingTime;\n\n // const latestClosingTime = allAreasInSelectedBranch.reduce(\n // (p, c) => (p > c.closingTime ? p.closingTime : c.closingTime),\n // allAreasInSelectedBranch[0].closingTime\n // );\n\n const latestClosingTime = allAreasInSelectedBranch.reduce(\n (p, c) => new Date(p.closingTime) > new Date(c.closingTime) ? p : c,\n allAreasInSelectedBranch[0]\n ).closingTime;\n\n const smallestBookingTimeslotInMinutes =\n allAreasInSelectedBranch.reduce(\n (p, c) =>\n p < c.bookingTimeslotInMinutes ? p : c.bookingTimeslotInMinutes,\n allAreasInSelectedBranch[0].bookingTimeslotInMinutes\n );\n\n const smallestMinBookingMinutes = allAreasInSelectedBranch.reduce(\n (p, c) => (p < c.minBookingMinutes ? p : c.minBookingMinutes),\n allAreasInSelectedBranch[0].minBookingMinutes\n );\n\n const largestMaxBookingMinutes = allAreasInSelectedBranch.reduce(\n (p, c) => (p > c.maxBookingMinutes ? p : c.maxBookingMinutes),\n allAreasInSelectedBranch[0].maxBookingMinutes\n );\n\n const areaDependentSettings = {\n openingTime: earliestOpeningTime,\n closingTime: latestClosingTime,\n bookingTimeslotInMinutes: smallestBookingTimeslotInMinutes,\n minBookingMinutes: smallestMinBookingMinutes,\n maxBookingMinutes: largestMaxBookingMinutes,\n };\n\n return areaDependentSettings;\n }\n },\n },\n methods: {\n ...mapMutations([\n \"updateQrCode\",\n \"updateLocationInfoFromQrCode\",\n \"updateSearchResults\",\n \"updateSelectedArea\",\n ]),\n reset() {\n //Reset branch\n if (this.onsiteMode) {\n const branch = this.seatBranchMenus.find(\n (x) => x.id === this.mode.branchId\n );\n\n if (branch) {\n this.inputPopupSelectBranch.selectedItem = branch;\n }\n\n //Reset branch & area\n // if (this.mode.mode === constants.mode.OnsiteModeQrCode) {\n // this.updateBranchAndAreaInputs(this.locationInfoFromQrCode);\n // } else {\n // const branch = this.seatBranchMenus.find(\n // (x) => x.id === this.mode.branchId\n // );\n\n // if (branch) {\n // this.inputPopupSelectBranch.selectedItem = branch;\n // }\n // }\n }\n\n //Reset area\n this.inputPopupSelectArea.selectedItem = null;\n\n //Reset date, time, duration\n if (this.bookingStartDateString) {\n this.inputPopupSelectDate.selectedItem = this.bookingStartDateString;\n\n if (this.timeList) {\n this.inputPopupSelectTime.selectedItem = this.timeList[0];\n\n if (this.durationList) {\n this.inputPopupSelectDuration.selectedItem = this.durationList[0];\n }\n }\n }\n },\n seatBookingUnavailableForEmaiMobileLogin() {\n if (this.isEmailMobileLogin) {\n this.updateSystemAlert({\n show: true,\n success: false,\n message: window.$msg.notEligbleToBookSeat,\n });\n } else {\n this.showSeatBookingSearchForm = true;\n }\n },\n async search() {\n const branchId = this.selectedBranch.id;\n const areaId = this.selectedArea ? this.selectedArea.id : null;\n const starTime = this.selectedDate + \"T\" + this.selectedTime.code;\n const durationInMinutes = this.selectedDuration.code;\n const seatCode = this.mode.seatCode ? this.mode.seatCode : null;\n\n const searchResponse = await apiHelper.search(\n branchId,\n areaId,\n starTime,\n durationInMinutes,\n seatCode\n );\n\n //commonResponseHandler is not used in this case, because this handler is a bit different\n //IM8 logout takes the highest priority\n if (searchResponse === window.$msg.reloginRequired) {\n businessLogic.im8Logout();\n\n return;\n }\n\n if (\n searchResponse &&\n searchResponse.data &&\n searchResponse.data.areas &&\n searchResponse.data.areas.length\n ) {\n this.updateSearchResults(searchResponse.data);\n\n // this.updateLoading({ show: false });\n if (\n searchResponse.data.found &&\n searchResponse.data.areas.length === 1\n ) {\n this.updateSelectedArea(searchResponse.data.areas[0]);\n this.$router.push({\n name: \"BookingDetails\",\n params: {\n selectedSeatName: searchResponse.data.selectedSeatName,\n },\n });\n } else {\n this.$router.push({\n name: \"SearchResults\",\n });\n }\n } else {\n this.updateResult({\n show: true,\n success: false,\n title: window.$msg.noResultsFoundTitle,\n message: window.$msg.noResultsFoundMsg,\n });\n // this.updateLoading({ show: false, notRevertStatusBarColor: true });\n }\n },\n formatDate(dateString) {\n return formatters.formatDate(dateString);\n },\n clearArea(event) {\n this.inputPopupSelectArea.selectedItem = null;\n },\n updateBranchAndAreaInputs(locationInfo) {\n const branch = this.seatBranchMenus.find(\n (x) => x.id === locationInfo.branchId\n );\n\n if (branch) {\n this.inputPopupSelectBranch.selectedItem = branch;\n\n if (locationInfo.placeCode) {\n const area = branch.areas.find(\n (x) =>\n x.code.toLowerCase() === locationInfo.placeCode.toLowerCase() &&\n x.floor.toString() === locationInfo.floor\n );\n\n //For testing only - Start\n // const shortPlaceCode = locationInfo.placeCode.substr(\n // locationInfo.placeCode.lastIndexOf(\".\") + 1\n // );\n\n // const area = branch.areas.find((x) => {\n // if (x.code.includes(\".\")) {\n // let shortCode = x.code.substr(x.code.lastIndexOf(\".\") + 1);\n // return shortPlaceCode === shortCode;\n // } else {\n // return shortPlaceCode === x.code;\n // }\n // });\n //For testing only - End\n\n if (area) {\n this.inputPopupSelectArea.selectedItem = area;\n }\n }\n }\n },\n setContentHeight() {\n if (this.$refs.homeScrollable) {\n const heights = this.heights();\n\n const contentHeight = this.visitBranchMenus\n ? heights.screen - heights.toolbarWithButtons - heights.bottombar - heights.noticeBarHeight\n : heights.screen - heights.toolbar - heights.bottombar - heights.noticeBarHeight;\n\n this.$refs.homeScrollable.style.height = contentHeight + \"px\";\n }\n },\n },\n watch: {\n settings: {\n immediate: true,\n handler(newValue, oldValue) {\n if (newValue) {\n if (this.onsiteMode) {\n const branch = this.seatBranchMenus.find(\n (x) => x.id === this.mode.branchId\n );\n\n if (branch) {\n this.inputPopupSelectBranch.selectedItem = branch;\n return;\n }\n }\n\n this.inputPopupSelectBranch.selectedItem = this.seatBranchMenus[0];\n\n // setTimeout(() => {\n // this.reset();\n // }, 10);\n }\n },\n },\n inputPopupSelectBranch(newValue, oldValue) {\n if (newValue.selectedItem !== oldValue.selectedItem) {\n this.inputPopupSelectArea.selectedItem = null;\n }\n },\n bookingStartDateString: {\n immediate: true,\n handler(newValue, oldValue) {\n if (newValue && newValue !== oldValue) {\n //Mainly used for the initial update, and\n //to auto-update calandar to tomorrow when there is no timeslot left for the selected area today\n if (\n !this.inputPopupSelectDate.selectedItem ||\n validators.isToday(\n this.inputPopupSelectDate.selectedItem,\n this.time.nowMoment\n )\n ) {\n this.inputPopupSelectDate.selectedItem =\n this.bookingStartDateString;\n }\n }\n },\n },\n timeList: {\n immediate: true,\n handler(newValue, oldValue) {\n if (newValue && newValue.length) {\n const timeNameList = newValue.map((x) => x.name);\n\n if (!timeNameList.includes(this.selectedTime.name)) {\n this.inputPopupSelectTime.selectedItem = newValue[0];\n }\n }\n },\n },\n durationList: {\n immediate: true,\n handler(newValue, oldValue) {\n if (newValue && newValue.length) {\n const durationList = newValue.map((x) => x.name);\n\n if (!durationList.includes(this.selectedDuration.name)) {\n this.inputPopupSelectDuration.selectedItem = newValue[0];\n }\n }\n },\n },\n qrCode(newValue, oldValue) {\n if (newValue && newValue.value && newValue.state === \"home\") {\n //Update locationInfoFromQrCode\n const locationInfo = businessLogic.getLocationInfoFromQrCode(\n newValue.value,\n this.seatBranchMenus\n );\n\n if (locationInfo) {\n this.updateBranchAndAreaInputs(locationInfo);\n this.updateLocationInfoFromQrCode(locationInfo);\n //Seat button is selected when area or seat QR code URL is detected\n this.showSeatBookingSearchForm = true;\n } else {\n this.updateSystemDialog({\n title: window.$msg.invalidQrCodeTitle,\n message: window.$msg.invalidQrCodeMsg,\n });\n }\n }\n },\n $route: {\n immediate: true,\n handler(to, from) {\n if (to.name === \"Home\" && (!from || from.name === \"Home\")) {\n if (\n this.$route.fullPath &&\n this.$route.query &&\n this.$route.query.loc\n ) {\n //Update locationInfo from URL\n const locationInfo = businessLogic.getLocationInfoFromQrCode(\n this.$route.fullPath,\n this.seatBranchMenus\n );\n\n if (locationInfo) {\n this.updateLocationInfoFromQrCode(locationInfo);\n //Seat button is selected when area or seat QR code URL is detected\n this.showSeatBookingSearchForm = true;\n this.updateBranchAndAreaInputs(locationInfo);\n\n //Query string changed detected, processed, removed\n this.$router.replace({ query: null }).catch((ex) => {});\n }\n }\n }\n },\n },\n },\n activated() {\n this.$nextTick(() => this.setContentHeight());\n },\n beforeRouteEnter(to, from, next) {\n next((vm) => {\n if (vm.showSeatBookingSearchForm && vm.isEmailMobileLogin) {\n vm.showSeatBookingSearchForm = false;\n }\n });\n },\n beforeRouteLeave(to, from, next) {\n //Cause the back button to close any popups instead of navigate to another page\n if (this.$refs.visitBookingSearchForm) {\n const stopNavigation = this.$refs.visitBookingSearchForm.beforeRouteLeave(\n to,\n from,\n next\n );\n\n if (stopNavigation) {\n next(false);\n return;\n }\n }\n\n const inputs = [\n this.inputPopupSelectBranch,\n this.inputPopupSelectArea,\n this.inputPopupSelectDate,\n this.inputPopupSelectTime,\n this.inputPopupSelectDuration,\n ];\n\n for (const i of inputs) {\n if (i != null && i.show) {\n i.show = false;\n\n next(false);\n return;\n }\n }\n\n next();\n },\n};\n</script>\n\n<style scoped>\n.label {\n font-weight: bold;\n font-size: 14px;\n}\n\n.button-group {\n margin: 6px;\n}\n\n.button-group .col {\n margin: 5px;\n padding: 0px;\n}\n\n.v-list-item__content {\n padding: 0;\n}\n\n.v-btn--outlined {\n /* border-width: 1.9px; */\n}\n\n.inputPopupSelectDiv {\n margin-bottom: 24px;\n}\n\n</style>\n\n<style>\n#newBookingToolbar .v-toolbar__content,\n.v-toolbar__extension {\n padding-left: 10px !important;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=1a2aa8f8&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=1a2aa8f8&scoped=true&lang=css&\"\nimport style1 from \"./Home.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1a2aa8f8\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VCol,VIcon,VRow,VSpacer,VTextField,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}],staticClass:\"search-result\"},[_c('v-toolbar',{staticClass:\"pr-1\",attrs:{\"dark\":\"\",\"color\":\"primary\"}},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.goBack}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',[_vm._v(\"Search Results\")])],1),(_vm.searchResponse && _vm.searchResponse.areas)?_c('div',[_c('v-card',{staticClass:\"px-2 py-2 mb-1 text-small font-weight-bold primary--text\",staticStyle:{\"border-bottom-left-radius\":\"3px\",\"border-bottom-right-radius\":\"3px\"},attrs:{\"tile\":\"\"}},[(_vm.searchResponse.found)?_c('div',[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-information\")])],1),_c('v-col',[_vm._v(\" \"+_vm._s(_vm.searchResponse.areas.length)+\" result\"+_vm._s(_vm.searchResponse.areas.length === 1 ? \"\" : \"s\")+\" found. \")])],1)],1):_c('div',{staticClass:\"red--text\"},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\",attrs:{\"color\":\"red\"}},[_vm._v(\"mdi-alert\")])],1),_c('v-col',[_vm._v(\" No matching results found. Other suggested slots below: \")])],1)],1)]),_c('div',{ref:\"searchResultsScrollable\",staticClass:\"scrollable\"},_vm._l((_vm.searchResponse.areas),function(area,i){return _c('v-card',{key:i,staticClass:\"mb-1\",attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.showBookingDetails(area)}}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-3 flex-center-left-container\"},[_c('v-img',{staticClass:\"ma-1x\",attrs:{\"src\":(\"\" + _vm.areaImagePath + (area.areaImageUrls[0])),\"aspect-ratio\":\"1\",\"max-height\":\"100\",\"max-width\":\"100\"}})],1),_c('v-col',{staticClass:\"col-9 pl-4 pt-5x\",staticStyle:{\"padding-top\":\"16px\"}},[_c('v-row',{staticClass:\"pb-2\",attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"text-title-black text-truncate\"},[_vm._v(_vm._s(_vm.formatLocation(area.areaName, area.floor)))])],1),_c('v-row',{staticClass:\"text-small\",attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-12\"},[_c('span',{staticClass:\"pr-3\"},[_c('v-icon',{staticClass:\"icon-smaller\"},[_vm._v(\"mdi-clock-outline\")]),_vm._v(\" \"+_vm._s(_vm.formatPeriod(area.startTime, area.endTime))+\" \")],1),_c('span',[_c('v-icon',{staticClass:\"icon-small\",staticStyle:{\"padding-right\":\"5px\"}},[_vm._v(\"mdi-seat\")]),_vm._v(\" \"+_vm._s(_vm.formatAvailability( area.availableSeatsCount, area.totalSeatCount ))+\" \")],1)])],1)],1)],1)],1)}),1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div v-resize=\"setContentHeight\" class=\"search-result\">\n <v-toolbar dark color=\"primary\" class=\"pr-1\">\n <v-btn icon @click=\"goBack\">\n <v-icon>mdi-arrow-left</v-icon>\n </v-btn>\n\n <v-toolbar-title>Search Results</v-toolbar-title>\n </v-toolbar>\n\n <div v-if=\"searchResponse && searchResponse.areas\">\n <v-card\n tile\n class=\"px-2 py-2 mb-1 text-small font-weight-bold primary--text\"\n style=\"border-bottom-left-radius: 3px; border-bottom-right-radius: 3px\"\n >\n <div v-if=\"searchResponse.found\">\n <v-row no-gutters>\n <v-col class=\"col-1\">\n <v-icon class=\"icon-small\">mdi-information</v-icon>\n </v-col>\n <v-col>\n {{ searchResponse.areas.length }} result{{\n searchResponse.areas.length === 1 ? \"\" : \"s\"\n }}\n found.\n </v-col>\n </v-row>\n </div>\n <div v-else class=\"red--text\">\n <v-row no-gutters>\n <v-col class=\"col-1\">\n <v-icon color=\"red\" class=\"icon-small\">mdi-alert</v-icon>\n </v-col>\n <v-col>\n No matching results found. Other suggested slots below:\n </v-col>\n </v-row>\n </div>\n </v-card>\n\n <div ref=\"searchResultsScrollable\" class=\"scrollable\">\n <v-card\n v-for=\"(area, i) in searchResponse.areas\"\n :key=\"i\"\n tile\n class=\"mb-1\"\n @click=\"showBookingDetails(area)\"\n >\n <v-row no-gutters>\n <v-col class=\"col-3 flex-center-left-container\">\n <v-img\n class=\"ma-1x\"\n :src=\"`${areaImagePath}${area.areaImageUrls[0]}`\"\n aspect-ratio=\"1\"\n max-height=\"100\"\n max-width=\"100\"\n />\n\n <!-- <v-img\n class=\"ma-1x\"\n :src=\"require(`@/assets/images/trl-study-lounge.png`)\"\n aspect-ratio=\"1\"\n max-height=\"100\"\n max-width=\"100\"\n />-->\n\n <!-- :src=\"require(`@/assets/images/${area.image}`)\" -->\n </v-col>\n <v-col class=\"col-9 pl-4 pt-5x\" style=\"padding-top: 16px\">\n <v-row no-gutters class=\"pb-2\">\n <v-col class=\"text-title-black text-truncate\">{{\n formatLocation(area.areaName, area.floor)\n }}</v-col>\n </v-row>\n <v-row no-gutters class=\"text-small\">\n <v-col class=\"col-12\">\n <span class=\"pr-3\">\n <v-icon class=\"icon-smaller\">mdi-clock-outline</v-icon>\n {{ formatPeriod(area.startTime, area.endTime) }}\n </span>\n <span>\n <v-icon class=\"icon-small\" style=\"padding-right: 5px\"\n >mdi-seat</v-icon\n >\n {{\n formatAvailability(\n area.availableSeatsCount,\n area.totalSeatCount\n )\n }}\n </span>\n </v-col>\n </v-row>\n </v-col>\n </v-row>\n </v-card>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState, mapMutations } from \"vuex\";\nimport formatters from \"@/helpers/formatters\";\nimport constants from \"@/helpers/constants\";\n\nexport default {\n // props: {\n // searchResponse: Object,\n // },\n data: () => ({\n searchResponse: null,\n }),\n computed: {\n ...mapState([\"searchResults\"]),\n },\n methods: {\n ...mapMutations([\"updateSelectedArea\"]),\n showBookingDetails(area) {\n this.updateSelectedArea(area);\n this.$router.push({\n name: \"BookingDetails\",\n params: { selectedSeatName: this.searchResponse.selectedSeatName },\n });\n },\n formatLocation(area, floor) {\n return `${area}, Level ${floor}`;\n },\n formatPeriod(fromDateString, toDateString) {\n return formatters.formatPeriod(fromDateString, toDateString);\n },\n formatAvailability(availableSeatsCount, totalSeatCount) {\n return `${availableSeatsCount}/${totalSeatCount}`;\n },\n setContentHeight() {\n if (this.$refs.searchResultsScrollable) {\n const heights = this.heights();\n const contentHeight =\n heights.screen - heights.toolbar - heights.headerbar - heights.noticeBarHeight;\n\n this.$refs.searchResultsScrollable.style.height = contentHeight + \"px\";\n }\n },\n },\n activated() {\n this.searchResponse = this.searchResults;\n\n this.$nextTick(() => this.setContentHeight());\n },\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchResults.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchResults.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SearchResults.vue?vue&type=template&id=104a5ff7&\"\nimport script from \"./SearchResults.vue?vue&type=script&lang=js&\"\nexport * from \"./SearchResults.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VCol,VIcon,VImg,VRow,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}]},[_c('v-toolbar',{staticClass:\"pr-1\",attrs:{\"dark\":\"\",\"color\":\"primary\"}},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.customGoBack}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',[_vm._v(\"Booking Details\")])],1),(_vm.area)?_c('div',{ref:\"bookingDetailsScrollable\",staticClass:\"scrollable\"},[_c('v-card',{staticStyle:{\"border-bottom-right-radius\":\"5px\",\"border-bottom-left-radius\":\"5px\"},attrs:{\"flat\":\"\"}},[_c('v-img',{attrs:{\"src\":(\"\" + _vm.areaImagePath + (_vm.area.areaImageUrls[0])),\"max-height\":\"154\"}}),_c('div',{staticClass:\"pa-4 text-small\"},[_c('div',{staticClass:\"font-weight-bold mb-1 text-title-black\",staticStyle:{\"font-sizex\":\"initial\"}},[_vm._v(\" \"+_vm._s(_vm.formatLocation(_vm.area.areaName, _vm.area.floor))+\" \")]),(_vm.area.ignoreHolidays)?_c('div',{staticClass:\"subtitle font-weight-bold mb-2\",staticStyle:{\"font-sizex\":\"initial\"}},[_vm._v(\" Extended hours zone – available on Public Holidays \")]):_vm._e(),_c('div',[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-library\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.area.branchName))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-calendar-month\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.formatDate(_vm.area.startTime)))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-smaller\"},[_vm._v(\"mdi-clock-outline\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.formatPeriod(_vm.area.startTime, _vm.area.endTime)))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-seat\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.formatAvailability( _vm.area.availableSeatsCount, _vm.area.totalSeatCount )))])],1),(_vm.area.areaInformation && _vm.area.areaInformation.directionalInfo)?_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-directions\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.area.areaInformation.directionalInfo))])],1):_vm._e(),(_vm.hasAvailableWheelchairSeats)?_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-img',{attrs:{\"src\":((this.iconPath) + \"accessibility-icon.png\"),\"max-height\":\"35\",\"max-width\":\"15\"}})],1),_c('v-col',[_vm._v(\" Wheelchair friendly seats available \")])],1):_vm._e(),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-information\")])],1),_c('v-col',[_vm._v(\" Your seat number will be assigned after a booking is made successfully. \")])],1),(_vm.area.areaConstraints)?_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-account-alert\")])],1),_c('v-col',[_vm._v(\" For patrons aged \"+_vm._s(_vm.area.areaConstraints.ageAboveOrEqual)+\" and above \")])],1):_vm._e()],1),_c('div',{staticClass:\"button-group mt-4\"},[_c('v-row',[_c('v-col',[_c('v-btn',{staticClass:\"px-5\",attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"primary\",\"block\":\"\"},on:{\"click\":function($event){return _vm.viewMaps(_vm.area)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-map-search\")]),_vm._v(\"View Maps \")],1)],1),_c('v-col',[(_vm.authenticated)?_c('v-btn',{key:\"1\",attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"orange\",\"block\":\"\"},on:{\"click\":_vm.confirmBooking}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-calendar-check\")]),_vm._v(\"Book \")],1):_c('v-btn',{key:\"2\",attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"orange\",\"block\":\"\"},on:{\"click\":_vm.loginAuth}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-login-variant\")]),_vm._v(\"Login to Book \")],1)],1)],1),_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-dialog',{attrs:{\"max-width\":\"100%\"},model:{value:(_vm.confirmDialog.show),callback:function ($$v) {_vm.$set(_vm.confirmDialog, \"show\", $$v)},expression:\"confirmDialog.show\"}},[_c('v-card',{staticClass:\"py-2\"},[_c('v-card-title',{staticClass:\"mb-3\"},[_vm._v(_vm._s(_vm.confirmDialog.message))]),_c('v-card-subtitle',{staticClass:\"red--text\"},[_vm._v(_vm._s(_vm.confirmDialog.termsAndConditions))]),_c('div',{on:{\"click\":function($event){_vm.inputPopupSelectSeat.show = true}}},[(_vm.isPreferredSeatNotAvailable && _vm.selectedSeatName)?_c('div',{staticClass:\"label px-8\"},[_c('span',{staticClass:\"preferred-seat-msg\"},[_vm._v(_vm._s(_vm.preferredSeatNotAvailableMsg())),_c('br'),_c('br')])]):_vm._e(),_c('v-text-field',{staticClass:\"px-8\",attrs:{\"prepend-inner-icon\":\"mdi-seat-passenger\",\"value\":_vm.inputPopupSelectSeat.selectedItem.name,\"readonly\":\"\"}}),_c('InputPopupSelectWithIcon',{attrs:{\"title\":\"Preferred Seat\",\"list\":_vm.modifiedAvailableSeatIds,\"select\":_vm.inputPopupSelectSeat,\"maxWidth\":\"220px\"},on:{\"update:select\":function($event){_vm.inputPopupSelectSeat=$event}}})],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"xcolor\":\"primary\",\"text\":\"\"},on:{\"click\":function($event){_vm.confirmDialog.show = false}}},[_vm._v(\"Cancel\")]),_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":function($event){return _vm.book(_vm.area)}}},[_vm._v(\"Confirm\")])],1)],1)],1)],1)],1)])],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import store from \"@/store/index\";\r\nimport router from '@/router/index'\r\nimport moment from \"moment\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\n\r\nexport default {\r\n verifyAuthRoute(authRouteName) {\r\n if (!store.getters.authenticated) {\r\n store.commit(\"updatePreCasAuthState\", {\r\n routeName: authRouteName,\r\n time: moment(),\r\n });\r\n if (store.getters.visitBookingEnabled) {\r\n router.push({\r\n name: \"LoginOptions\",\r\n });\r\n }\r\n else {\r\n apiHelper.casAuth();\r\n }\r\n }\r\n }\r\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-dialog',{attrs:{\"scrollable\":\"\",\"max-width\":_vm.maxWidth || 400},model:{value:(_vm.select.show),callback:function ($$v) {_vm.$set(_vm.select, \"show\", $$v)},expression:\"select.show\"}},[_c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.title))]),_c('v-divider'),(_vm.list)?_c('v-card-text',{staticClass:\"pb-0\",style:({ height: _vm.height })},[_c('v-radio-group',{model:{value:(_vm.radioModel),callback:function ($$v) {_vm.radioModel=$$v},expression:\"radioModel\"}},_vm._l((_vm.list),function(item,i){return _c('div',{key:i,staticClass:\"my-2\",on:{\"click\":function($event){return _vm.selectItem(item)}}},[_c('v-row',[_c('v-col',[_c('v-radio',{attrs:{\"label\":item.name,\"value\":item.code}})],1),(_vm.shouldDisplayIcon(item))?_c('v-col',{attrs:{\"cols\":\"4\"}},[_c('v-img',{attrs:{\"src\":(_vm.iconPath + \"accessibility-icon.png\"),\"max-height\":\"35\",\"max-width\":\"15\"}})],1):_vm._e()],1)],1)}),0)],1):_vm._e(),_c('v-divider'),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.closePopup}},[_vm._v(\"Cancel\")])],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template >\r\n <v-row justify=\"center\">\r\n <v-dialog v-model=\"select.show\" scrollable :max-width=\"maxWidth || 400\">\r\n <v-card>\r\n <v-card-title>{{ title }}</v-card-title>\r\n <v-divider></v-divider>\r\n\r\n <v-card-text v-if=\"list\" :style=\"{ height: height }\" class=\"pb-0\">\r\n <v-radio-group v-model=\"radioModel\">\r\n <div\r\n v-for=\"(item, i) in list\"\r\n :key=\"i\"\r\n @click=\"selectItem(item)\"\r\n class=\"my-2\"\r\n >\r\n <v-row>\r\n <v-col>\r\n <v-radio :label=\"item.name\" :value=\"item.code\"></v-radio>\r\n </v-col>\r\n <v-col cols=\"4\" v-if=\"shouldDisplayIcon(item)\">\r\n <!-- <v-icon>{{ getIcon(item) }}</v-icon> -->\r\n <!--TODO-Conso - Insert provided icon--> <!--DONE-->\r\n <v-img\r\n :src=\"`${iconPath}accessibility-icon.png`\"\r\n max-height=\"35\"\r\n max-width=\"15\"\r\n ></v-img>\r\n </v-col>\r\n </v-row>\r\n </div>\r\n </v-radio-group>\r\n </v-card-text>\r\n\r\n <v-divider></v-divider>\r\n\r\n <v-card-actions>\r\n <v-spacer></v-spacer>\r\n <v-btn color=\"primary\" text @click=\"closePopup\">Cancel</v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n </v-row>\r\n</template>\r\n\r\n<script>\r\n export default {\r\n name: \"InputPopupSelectWithIcon\",\r\n props: {\r\n title: String,\r\n list: Array,\r\n height: String,\r\n maxWidth: String,\r\n select: {\r\n show: Boolean,\r\n selectedItem: Object,\r\n },\r\n },\r\n data: () => ({\r\n radioModel: null,\r\n }),\r\n watch: {\r\n \"select.show\": function (newValue, oldValue) {\r\n //Watch for \"select.show\" because the radio button on time and duration list is not selected on UI\r\n //Can be simulated by selecting any duration other than 1 hour before selecting Bloomberg Terminal area\r\n //And this only works when using v-model instead of :value on v-radio-group. E.g. <v-radio-group v-model=\"radioModel\">\r\n this.radioModel = this.select.selectedItem\r\n ? this.select.selectedItem.code\r\n : null;\r\n },\r\n },\r\n methods: {\r\n closePopup() {\r\n this.$emit(\"update:select\", {\r\n show: false,\r\n selectedItem: this.select.selectedItem,\r\n });\r\n },\r\n selectItem(item) {\r\n this.$emit(\"update:select\", {\r\n show: false,\r\n selectedItem: item,\r\n });\r\n },\r\n shouldDisplayIcon(item) {\r\n // Modify this function to define your criteria for displaying icons\r\n return item.seatInformation && item.seatInformation.isWheelchairFriendlySeat;\r\n },\r\n },\r\n };\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputPopupSelectWithIcon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputPopupSelectWithIcon.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InputPopupSelectWithIcon.vue?vue&type=template&id=9b65c14c&\"\nimport script from \"./InputPopupSelectWithIcon.vue?vue&type=script&lang=js&\"\nexport * from \"./InputPopupSelectWithIcon.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRadio } from 'vuetify/lib/components/VRadioGroup';\nimport { VRadioGroup } from 'vuetify/lib/components/VRadioGroup';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VCol,VDialog,VDivider,VImg,VRadio,VRadioGroup,VRow,VSpacer})\n","<template>\r\n <div v-resize=\"setContentHeight\">\r\n <v-toolbar dark color=\"primary\" class=\"pr-1\">\r\n <v-btn icon @click=\"customGoBack\">\r\n <v-icon>mdi-arrow-left</v-icon>\r\n </v-btn>\r\n\r\n <v-toolbar-title>Booking Details</v-toolbar-title>\r\n </v-toolbar>\r\n\r\n <div v-if=\"area\" ref=\"bookingDetailsScrollable\" class=\"scrollable\">\r\n <v-card\r\n flat\r\n style=\"border-bottom-right-radius: 5px; border-bottom-left-radius: 5px\"\r\n >\r\n <v-img\r\n :src=\"`${areaImagePath}${area.areaImageUrls[0]}`\"\r\n max-height=\"154\"\r\n ></v-img>\r\n\r\n <!-- <v-img :src=\"require(`@/assets/images/trl-study-lounge.png`)\" max-height=\"154\"></v-img> -->\r\n\r\n <div class=\"pa-4 text-small\">\r\n <div\r\n class=\"font-weight-bold mb-1 text-title-black\"\r\n style=\"font-sizex: initial\"\r\n >\r\n {{ formatLocation(area.areaName, area.floor) }}\r\n </div>\r\n <div\r\n v-if=\"area.ignoreHolidays\"\r\n class=\"subtitle font-weight-bold mb-2\"\r\n style=\"font-sizex: initial\"\r\n >\r\n Extended hours zone – available on Public Holidays\r\n </div>\r\n <div>\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-library</v-icon>\r\n </v-col>\r\n <v-col>{{ area.branchName }}</v-col>\r\n </v-row>\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-calendar-month</v-icon>\r\n </v-col>\r\n <v-col>{{ formatDate(area.startTime) }}</v-col>\r\n </v-row>\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-smaller\">mdi-clock-outline</v-icon>\r\n </v-col>\r\n <v-col>{{ formatPeriod(area.startTime, area.endTime) }}</v-col>\r\n </v-row>\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-seat</v-icon>\r\n </v-col>\r\n <v-col>{{\r\n formatAvailability(\r\n area.availableSeatsCount,\r\n area.totalSeatCount\r\n )\r\n }}</v-col>\r\n </v-row>\r\n\r\n <v-row dense v-if=\"area.areaInformation && area.areaInformation.directionalInfo\">\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-directions</v-icon>\r\n </v-col>\r\n <v-col>{{ area.areaInformation.directionalInfo }}</v-col>\r\n </v-row>\r\n\r\n <v-row dense v-if=\"hasAvailableWheelchairSeats\">\r\n <v-col class=\"col-1\">\r\n <v-img\r\n :src=\"`${this.iconPath}accessibility-icon.png`\"\r\n max-height=\"35\"\r\n max-width=\"15\"\r\n ></v-img>\r\n </v-col>\r\n <v-col>\r\n Wheelchair friendly seats available\r\n </v-col>\r\n </v-row>\r\n\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-information</v-icon>\r\n </v-col>\r\n <v-col>\r\n Your seat number will be assigned after a booking is made\r\n successfully.\r\n </v-col>\r\n </v-row>\r\n\r\n <v-row dense v-if=\"area.areaConstraints\">\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-account-alert</v-icon>\r\n </v-col>\r\n <v-col>\r\n For patrons aged {{ area.areaConstraints.ageAboveOrEqual }} and above\r\n </v-col>\r\n </v-row>\r\n <!-- <v-row v-if=\"windowSettings.showBloombergEndingSoonInfo && (area.areaName == 'Bloomberg Terminal')\" dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-information-outline</v-icon>\r\n </v-col>\r\n <v-col>\r\n We are sorry that this database will not be available from 27 October 2021. If you have any queries, please send an email to our Customer Relations Officer at <a href='mailto: enquiry@nlb.gov.sg'>enquiry@nlb.gov.sg</a>\r\n </v-col>\r\n </v-row> -->\r\n\r\n <!-- <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-timer-sand</v-icon>\r\n </v-col>\r\n <v-col>\r\n {{area.maxDuration}} (Hour : Minute)\r\n <v-btn icon x-small class=\"ml-5\" color=\"primary\">\r\n <v-icon class=\"icon-smallx\">mdi-square-edit-outline</v-icon>Edit\r\n </v-btn>\r\n </v-col>\r\n </v-row>-->\r\n </div>\r\n\r\n <div class=\"button-group mt-4\">\r\n <v-row>\r\n <v-col>\r\n <v-btn\r\n @click=\"viewMaps(area)\"\r\n dark\r\n large\r\n color=\"primary\"\r\n class=\"px-5\"\r\n block\r\n >\r\n <v-icon left dark>mdi-map-search</v-icon>View Maps\r\n </v-btn>\r\n </v-col>\r\n <v-col>\r\n <v-btn\r\n v-if=\"authenticated\"\r\n key=\"1\"\r\n @click=\"confirmBooking\"\r\n dark\r\n large\r\n color=\"orange\"\r\n class\r\n block\r\n >\r\n <v-icon left dark>mdi-calendar-check</v-icon>Book\r\n </v-btn>\r\n\r\n <v-btn\r\n v-else\r\n key=\"2\"\r\n @click=\"loginAuth\"\r\n dark\r\n large\r\n color=\"orange\"\r\n class\r\n block\r\n >\r\n <v-icon left dark>mdi-login-variant</v-icon>Login to Book\r\n </v-btn>\r\n </v-col>\r\n </v-row>\r\n\r\n <!-- Seat Selection popup -->\r\n <v-row justify=\"center\">\r\n <v-dialog v-model=\"confirmDialog.show\" max-width=\"100%\">\r\n <v-card class=\"py-2\">\r\n <v-card-title class=\"mb-3\">{{\r\n confirmDialog.message\r\n }}</v-card-title>\r\n\r\n <v-card-subtitle class=\"red--text\">{{\r\n confirmDialog.termsAndConditions\r\n }}</v-card-subtitle>\r\n\r\n <div @click=\"inputPopupSelectSeat.show = true\">\r\n <div\r\n v-if=\"isPreferredSeatNotAvailable && selectedSeatName\"\r\n class=\"label px-8\"\r\n >\r\n <span class=\"preferred-seat-msg\"\r\n >{{ preferredSeatNotAvailableMsg() }}<br /><br\r\n /></span>\r\n </div>\r\n\r\n <v-text-field\r\n prepend-inner-icon=\"mdi-seat-passenger\"\r\n :value=\"inputPopupSelectSeat.selectedItem.name\"\r\n class=\"px-8\"\r\n readonly\r\n ></v-text-field>\r\n\r\n <!-- TODO:Make InputPopupSelect component generic for icon requirement, and remove this eventually -->\r\n <InputPopupSelectWithIcon\r\n title=\"Preferred Seat\"\r\n :list=\"modifiedAvailableSeatIds\"\r\n :select.sync=\"inputPopupSelectSeat\"\r\n maxWidth=\"220px\"\r\n />\r\n </div>\r\n\r\n <v-card-actions>\r\n <v-spacer></v-spacer>\r\n <v-btn\r\n xcolor=\"primary\"\r\n text\r\n @click=\"confirmDialog.show = false\"\r\n >Cancel</v-btn\r\n >\r\n\r\n <v-btn color=\"primary\" text @click=\"book(area)\"\r\n >Confirm</v-btn\r\n >\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n </v-row>\r\n </div>\r\n </div>\r\n </v-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapGetters, mapState, mapMutations } from \"vuex\";\r\nimport formatters from \"@/helpers/formatters\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\nimport validators from \"@/helpers/validators\";\r\nimport routerHelper from \"@/helpers/routerHelper\";\r\nimport InputPopupSelect from \"@/components/InputPopupSelect\";\r\nimport InputPopupSelectWithIcon from \"@/components/InputPopupSelectWithIcon\";\r\n\r\nexport default {\r\n name: \"BookingDetails\",\r\n components: {\r\n InputPopupSelect,\r\n InputPopupSelectWithIcon,\r\n },\r\n props: {\r\n selectedSeatName: String,\r\n },\r\n data: () => ({\r\n area: null,\r\n viewMapDialog: false,\r\n mapTabs: 0,\r\n seat: null,\r\n isPreferredSeatNotAvailable: false,\r\n isPreferredNewSeatSelection: false,\r\n hasAvailableWheelchairSeats: false,\r\n hasDirectionalInfo: false,\r\n confirmDialog: {\r\n show: false,\r\n message: \"\",\r\n termsAndConditions: \"\",\r\n },\r\n inputPopupSelectSeat: {\r\n show: false,\r\n selectedItem: {\r\n name: null,\r\n code: null,\r\n },\r\n },\r\n noPreferredSeat: { name: \"No preferred seat\", code: \"any\" },\r\n }),\r\n computed: {\r\n ...mapState([\"selectedArea\", \"settings\", \"locationInfoFromQrCode\"]),\r\n ...mapGetters([\"mode\", \"isEmailMobileLogin\"]),\r\n modifiedAvailableSeatIds() {\r\n return [this.noPreferredSeat, ...this.area.availableSeats];\r\n },\r\n },\r\n methods: {\r\n ...mapMutations([\"updatePreCasAuthState\", \"updateAccountInfo\"]),\r\n viewMaps(area) {\r\n this.$router.push({\r\n name: \"ViewMaps\",\r\n params: {\r\n mapFileNames: area.areaMapUrls,\r\n },\r\n });\r\n },\r\n resetSeat() {\r\n if (this.area.availableSeats) {\r\n this.inputPopupSelectSeat.selectedItem =\r\n this.modifiedAvailableSeatIds[0];\r\n\r\n this.hasAvailableWheelchairSeats =\r\n this.area.availableSeats.some(seat => seat.seatInformation?.isWheelchairFriendlySeat);\r\n }\r\n\r\n if (this.onsiteMode) {\r\n //Get seat code from QRCode\r\n if (this.locationInfoFromQrCode) {\r\n const locationInfo = this.locationInfoFromQrCode;\r\n\r\n if (locationInfo.seatCode) {\r\n this.seat = this.area.availableSeats.find(\r\n (x) =>\r\n x.code.toLowerCase() === locationInfo.seatCode.toLowerCase()\r\n );\r\n\r\n if (this.seat) {\r\n this.inputPopupSelectSeat.selectedItem = this.seat;\r\n this.isPreferredSeatNotAvailable = false;\r\n } else {\r\n this.isPreferredSeatNotAvailable = true;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n loginAuth() {\r\n routerHelper.verifyAuthRoute(this.$route.name);\r\n },\r\n customGoBack() {\r\n if (this.$route.query.reloaded) {\r\n //Prevent redirecting back to CAS login page after logging in\r\n this.goHome();\r\n } else {\r\n this.goBack();\r\n }\r\n },\r\n formatLocation(area, floor) {\r\n return `${area}, Level ${floor}`;\r\n },\r\n formatPeriod(fromDateString, toDateString) {\r\n return formatters.formatPeriod(fromDateString, toDateString);\r\n },\r\n formatAvailability(availableSeatsCount, totalSeatCount) {\r\n return `${availableSeatsCount}/${totalSeatCount}`;\r\n },\r\n formatDate(dateString) {\r\n return formatters.formatDate(dateString);\r\n },\r\n preferredSeatNotAvailableMsg() {\r\n if (this.selectedSeatName) {\r\n return window.$msg.preferSeatUnavailable.replace(\r\n \"{selectedSeat}\",\r\n this.selectedSeatName\r\n );\r\n }\r\n return null;\r\n },\r\n confirmBooking() {\r\n this.confirmDialog.message = window.$msg.preferredSeat;\r\n this.confirmDialog.show = true;\r\n if (this.area.areaInformation) {\r\n this.confirmDialog.termsAndConditions = this.area.areaInformation.termsAndConditions;\r\n }\r\n else {\r\n this.confirmDialog.termsAndConditions = null;\r\n } \r\n },\r\n async book(area) {\r\n this.confirmDialog.show = false;\r\n\r\n if (this.isEmailMobileLogin) {\r\n this.updateSystemAlert({\r\n show: true,\r\n success: false,\r\n message: window.$msg.notEligbleToBookSeat,\r\n });\r\n } else {\r\n //const seatCode = this.mode.seatCode;\r\n const seatCode = this.inputPopupSelectSeat.selectedItem.code;\r\n\r\n const response = await apiHelper.book(\r\n area.areaId,\r\n area.startTime,\r\n area.durationInMinutes,\r\n area.branchId,\r\n seatCode\r\n );\r\n\r\n const tabNo = validators.isToday(area.startTime, this.time.nowMoment)\r\n ? 0\r\n : 1;\r\n\r\n //commonResponseHandler is not used in this case, because this handler is a bit different\r\n //There are two response when booking success, preferred seat is true then return success, else return fail\r\n if (response && response.data) {\r\n if (response.data.isPreferredSeat) {\r\n this.updateResult({\r\n show: true,\r\n success: true,\r\n title: window.$msg.bookSuccess,\r\n });\r\n this.updateAccountInfo(response.data.accountInfo);\r\n } else {\r\n this.updateResult({\r\n show: true,\r\n success: false,\r\n title: window.$msg.bookFail,\r\n message: response,\r\n });\r\n }\r\n this.$router.push({ name: \"MyBookings\", params: { tabNo: tabNo } });\r\n } else {\r\n this.updateResult({\r\n show: true,\r\n success: false,\r\n title: window.$msg.bookFail,\r\n message: response,\r\n });\r\n }\r\n\r\n // this.commonResponseHandler(\r\n // response,\r\n // window.$msg.bookSuccess,\r\n // window.$msg.bookFail,\r\n // null,\r\n // () =>\r\n // this.$router.push({ name: \"MyBookings\", params: { tabNo: tabNo } }),\r\n // null\r\n // );\r\n }\r\n },\r\n setContentHeight() {\r\n if (this.$refs.bookingDetailsScrollable) {\r\n const heights = this.heights();\r\n const contentHeight = heights.screen - heights.toolbar - heights.noticeBarHeight;\r\n\r\n this.$refs.bookingDetailsScrollable.style.height = contentHeight + \"px\";\r\n }\r\n },\r\n },\r\n activated() {\r\n this.area = this.selectedArea;\r\n this.resetSeat();\r\n this.$nextTick(() => this.setContentHeight());\r\n },\r\n beforeRouteLeave(to, from, next) {\r\n const inputs = [this.inputPopupSelectSeat, this.confirmDialog];\r\n\r\n for (let i of inputs) {\r\n if (i != null && i.show) {\r\n i.show = false;\r\n\r\n next(false);\r\n return;\r\n }\r\n }\r\n\r\n next();\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.button-group .col {\r\n margin: 5px;\r\n padding: 0px;\r\n}\r\n\r\n.preferred-seat-msg {\r\n color: red !important;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BookingDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BookingDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BookingDetails.vue?vue&type=template&id=5b932807&scoped=true&\"\nimport script from \"./BookingDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./BookingDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BookingDetails.vue?vue&type=style&index=0&id=5b932807&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5b932807\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardSubtitle } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardSubtitle,VCardTitle,VCol,VDialog,VIcon,VImg,VRow,VSpacer,VTextField,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}],staticClass:\"search-result\"},[_c('v-toolbar',{staticClass:\"pr-1\",attrs:{\"dark\":\"\",\"color\":\"primary\"}},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.goBack}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',[_vm._v(\"Search Results\")])],1),(_vm.searchResponse)?_c('div',[_c('v-card',{staticClass:\"px-2 py-2 mb-1 text-small font-weight-bold primary--text\",staticStyle:{\"border-bottom-left-radius\":\"3px\",\"border-bottom-right-radius\":\"3px\"},attrs:{\"tile\":\"\"}},[(_vm.searchResponse.found)?_c('div',[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-information\")])],1),_c('v-col',[_vm._v(\"1 result found.\")])],1)],1):_c('div',{staticClass:\"red--text\"},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\",attrs:{\"color\":\"red\"}},[_vm._v(\"mdi-alert\")])],1),_c('v-col',[_vm._v(\" No matching results found. Other suggested slot below: \")])],1)],1)]),_c('div',{ref:\"searchResultsScrollable\",staticClass:\"scrollable\"},[_c('v-card',{staticClass:\"mb-1\",attrs:{\"tile\":\"\"},on:{\"click\":_vm.showBookingDetails}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-3 flex-center-left-container\"},[_c('v-img',{staticClass:\"ma-1x\",attrs:{\"src\":(\"\" + _vm.branchImagePath + (_vm.searchResponse.visitCapacity.branchImageUrls[0])),\"aspect-ratio\":\"1\",\"max-height\":\"100\",\"max-width\":\"100\"}})],1),_c('v-col',{staticClass:\"col-9 pl-4 pt-5x\",staticStyle:{\"padding-top\":\"16px\"}},[_c('v-row',{staticClass:\"pb-2\",attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"text-title-black text-truncate\"},[_vm._v(_vm._s(_vm.searchResponse.visitCapacity.branchName))])],1),_c('v-row',{staticClass:\"text-small\",attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-12\"},[_c('span',{staticClass:\"pr-3\"},[_c('v-icon',{staticClass:\"icon-smaller\"},[_vm._v(\"mdi-clock-outline\")]),_vm._v(\" \"+_vm._s(_vm.formatPeriod( _vm.searchResponse.visitCapacity.startTime, _vm.searchResponse.visitCapacity.endTime ))+\" \")],1),_c('span',[_c('v-icon',{staticClass:\"icon-small\",staticStyle:{\"padding-right\":\"5px\"}},[_vm._v(\"mdi-counter\")]),_vm._v(\" \"+_vm._s(_vm.formatAvailability( _vm.searchResponse.visitCapacity.availableVisitCapacity, _vm.searchResponse.visitCapacity.visitCapacityOfTheTimeSlot ))+\" \")],1)])],1)],1)],1)],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div v-resize=\"setContentHeight\" class=\"search-result\">\n <v-toolbar dark color=\"primary\" class=\"pr-1\">\n <v-btn icon @click=\"goBack\">\n <v-icon>mdi-arrow-left</v-icon>\n </v-btn>\n\n <v-toolbar-title>Search Results</v-toolbar-title>\n </v-toolbar>\n\n <div v-if=\"searchResponse\">\n <v-card\n tile\n class=\"px-2 py-2 mb-1 text-small font-weight-bold primary--text\"\n style=\"border-bottom-left-radius: 3px; border-bottom-right-radius: 3px\"\n >\n <div v-if=\"searchResponse.found\">\n <v-row no-gutters>\n <v-col class=\"col-1\">\n <v-icon class=\"icon-small\">mdi-information</v-icon>\n </v-col>\n <v-col>1 result found.</v-col>\n </v-row>\n </div>\n <div v-else class=\"red--text\">\n <v-row no-gutters>\n <v-col class=\"col-1\">\n <v-icon color=\"red\" class=\"icon-small\">mdi-alert</v-icon>\n </v-col>\n <v-col>\n No matching results found. Other suggested slot below:\n </v-col>\n </v-row>\n </div>\n </v-card>\n\n <div ref=\"searchResultsScrollable\" class=\"scrollable\">\n <v-card tile class=\"mb-1\" @click=\"showBookingDetails\">\n <v-row no-gutters>\n <v-col class=\"col-3 flex-center-left-container\">\n <v-img\n class=\"ma-1x\"\n :src=\"`${branchImagePath}${searchResponse.visitCapacity.branchImageUrls[0]}`\"\n aspect-ratio=\"1\"\n max-height=\"100\"\n max-width=\"100\"\n />\n </v-col>\n <v-col class=\"col-9 pl-4 pt-5x\" style=\"padding-top: 16px\">\n <v-row no-gutters class=\"pb-2\">\n <v-col class=\"text-title-black text-truncate\">{{\n searchResponse.visitCapacity.branchName\n }}</v-col>\n </v-row>\n <v-row no-gutters class=\"text-small\">\n <v-col class=\"col-12\">\n <span class=\"pr-3\">\n <v-icon class=\"icon-smaller\">mdi-clock-outline</v-icon>\n {{\n formatPeriod(\n searchResponse.visitCapacity.startTime,\n searchResponse.visitCapacity.endTime\n )\n }}\n </span>\n <span>\n <v-icon class=\"icon-small\" style=\"padding-right: 5px\"\n >mdi-counter</v-icon\n >\n {{\n formatAvailability(\n searchResponse.visitCapacity.availableVisitCapacity,\n searchResponse.visitCapacity.visitCapacityOfTheTimeSlot\n )\n }}\n </span>\n </v-col>\n </v-row>\n </v-col>\n </v-row>\n </v-card>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport formatters from \"@/helpers/formatters\";\n\nexport default { \n name: \"VisitBookingSearchResults\",\n data: () => ({\n searchResponse: null,\n }),\n computed: {\n ...mapState([\"visitBookingSearchResult\"]),\n },\n methods: {\n showBookingDetails() {\n this.$router.push({\n name: \"VisitBookingDetails\",\n });\n },\n formatPeriod(fromDateString, toDateString) {\n return formatters.formatPeriod(fromDateString, toDateString);\n },\n formatAvailability(availableSeatsCount, totalSeatCount) {\n return `${availableSeatsCount}/${totalSeatCount}`;\n },\n setContentHeight() {\n if (this.$refs.searchResultsScrollable) {\n const heights = this.heights();\n const contentHeight =\n heights.screen - heights.toolbar - heights.headerbar - heights.noticeBarHeight;\n\n this.$refs.searchResultsScrollable.style.height = contentHeight + \"px\";\n }\n },\n },\n activated() {\n this.searchResponse = this.visitBookingSearchResult;\n\n this.$nextTick(() => this.setContentHeight());\n },\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingSearchResults.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingSearchResults.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VisitBookingSearchResults.vue?vue&type=template&id=178ea8fa&\"\nimport script from \"./VisitBookingSearchResults.vue?vue&type=script&lang=js&\"\nexport * from \"./VisitBookingSearchResults.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VCol,VIcon,VImg,VRow,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}]},[_c('v-toolbar',{staticClass:\"pr-1\",attrs:{\"dark\":\"\",\"color\":\"primary\"}},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.customGoBack}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',[_vm._v(\"Booking Details\")])],1),(_vm.visitBooking)?_c('div',{ref:\"bookingDetailsScrollable\",staticClass:\"scrollable\"},[_c('v-card',{staticStyle:{\"border-bottom-right-radius\":\"5px\",\"border-bottom-left-radius\":\"5px\"},attrs:{\"flat\":\"\"}},[_c('v-img',{attrs:{\"src\":(\"\" + _vm.branchImagePath + (_vm.visitBooking.branchImageUrls[0])),\"max-height\":\"154\"}}),_c('div',{staticClass:\"pa-4 text-small\"},[_c('div',{staticClass:\"font-weight-bold mb-1 text-title-black\",staticStyle:{\"font-sizex\":\"initial\"}},[_vm._v(\" Library Visit \")]),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-account-multiple\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.visitBooking.pax))])],1),_c('div',[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-library\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.visitBooking.branchName))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-calendar-month\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.formatDate(_vm.visitBooking.startTime)))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-smaller\"},[_vm._v(\"mdi-clock-outline\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.formatPeriod(_vm.visitBooking.startTime, _vm.visitBooking.endTime)))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-counter\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.formatAvailability( _vm.visitBooking.availableVisitCapacity, _vm.visitBooking.visitCapacityOfTheTimeSlot )))])],1)],1),_c('div',{staticClass:\"button-group mt-4\"},[_c('v-row',[_c('v-col',[(_vm.authenticated)?_c('v-btn',{key:\"1\",attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"orange\",\"block\":\"\"},on:{\"click\":function($event){return _vm.book(_vm.visitBooking)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-calendar-check\")]),_vm._v(\"Book \")],1):_c('v-btn',{key:\"2\",attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"orange\",\"block\":\"\"},on:{\"click\":_vm.loginAuth}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-login-variant\")]),_vm._v(\"Login to Book \")],1)],1)],1)],1)],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-resize=\"setContentHeight\">\r\n <v-toolbar dark color=\"primary\" class=\"pr-1\">\r\n <v-btn icon @click=\"customGoBack\">\r\n <v-icon>mdi-arrow-left</v-icon>\r\n </v-btn>\r\n\r\n <v-toolbar-title>Booking Details</v-toolbar-title>\r\n </v-toolbar>\r\n\r\n <div v-if=\"visitBooking\" ref=\"bookingDetailsScrollable\" class=\"scrollable\">\r\n <v-card\r\n flat\r\n style=\"border-bottom-right-radius: 5px; border-bottom-left-radius: 5px\"\r\n >\r\n <v-img\r\n :src=\"`${branchImagePath}${visitBooking.branchImageUrls[0]}`\"\r\n max-height=\"154\"\r\n ></v-img>\r\n\r\n <div class=\"pa-4 text-small\">\r\n <div\r\n class=\"font-weight-bold mb-1 text-title-black\"\r\n style=\"font-sizex: initial\"\r\n >\r\n Library Visit\r\n </div>\r\n\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-account-multiple</v-icon>\r\n </v-col>\r\n <v-col>{{ visitBooking.pax }}</v-col>\r\n </v-row>\r\n\r\n <div>\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-library</v-icon>\r\n </v-col>\r\n <v-col>{{ visitBooking.branchName }}</v-col>\r\n </v-row>\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-calendar-month</v-icon>\r\n </v-col>\r\n <v-col>{{ formatDate(visitBooking.startTime) }}</v-col>\r\n </v-row>\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-smaller\">mdi-clock-outline</v-icon>\r\n </v-col>\r\n <v-col>{{\r\n formatPeriod(visitBooking.startTime, visitBooking.endTime)\r\n }}</v-col>\r\n </v-row>\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-counter</v-icon>\r\n </v-col>\r\n <v-col>{{\r\n formatAvailability(\r\n visitBooking.availableVisitCapacity,\r\n visitBooking.visitCapacityOfTheTimeSlot\r\n )\r\n }}</v-col>\r\n </v-row>\r\n\r\n <!-- <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-information</v-icon>\r\n </v-col>\r\n <v-col>\r\n Your seat number will be assigned after a booking is made\r\n successfully.\r\n </v-col>\r\n </v-row> -->\r\n </div>\r\n\r\n <div class=\"button-group mt-4\">\r\n <v-row>\r\n <v-col>\r\n <v-btn\r\n v-if=\"authenticated\"\r\n key=\"1\"\r\n @click=\"book(visitBooking)\"\r\n dark\r\n large\r\n color=\"orange\"\r\n class\r\n block\r\n >\r\n <v-icon left dark>mdi-calendar-check</v-icon>Book\r\n </v-btn>\r\n\r\n <v-btn\r\n v-else\r\n key=\"2\"\r\n @click=\"loginAuth\"\r\n dark\r\n large\r\n color=\"orange\"\r\n class\r\n block\r\n >\r\n <v-icon left dark>mdi-login-variant</v-icon>Login to Book\r\n </v-btn>\r\n </v-col>\r\n </v-row>\r\n </div>\r\n </div>\r\n </v-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapState, mapMutations } from \"vuex\";\r\nimport formatters from \"@/helpers/formatters\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\nimport validators from \"@/helpers/validators\";\r\nimport routerHelper from \"@/helpers/routerHelper\";\r\n\r\nexport default {\r\n name: \"VisitBookingDetails\",\r\n data: () => ({\r\n visitBooking: null,\r\n }),\r\n computed: {\r\n ...mapState([\"visitBookingSearchResult\", \"settings\"]),\r\n },\r\n methods: {\r\n ...mapMutations([\"updatePreCasAuthState\"]),\r\n loginAuth() { \r\n routerHelper.verifyAuthRoute(this.$route.name);\r\n },\r\n customGoBack() {\r\n if (this.$route.query.reloaded) {\r\n //Prevent redirecting back to CAS login page after logging in\r\n this.goHome();\r\n } else {\r\n this.goBack();\r\n }\r\n },\r\n formatPeriod(fromDateString, toDateString) {\r\n return formatters.formatPeriod(fromDateString, toDateString);\r\n },\r\n formatAvailability(availableVisitCapacity, visitCapacityOfTheTimeSlot) {\r\n return `${availableVisitCapacity}/${visitCapacityOfTheTimeSlot}`;\r\n },\r\n // formatAvailability(pax, availableVisitCapacity, visitCapacityOfTheTimeSlot) {\r\n // return `${pax} (${availableVisitCapacity}/${visitCapacityOfTheTimeSlot})`;\r\n // },\r\n formatDate(dateString) {\r\n return formatters.formatDate(dateString);\r\n },\r\n async book(visitBooking) {\r\n const response = await apiHelper.bookVisit(\r\n visitBooking.branchId,\r\n visitBooking.startTime,\r\n visitBooking.durationInMinutes,\r\n visitBooking.pax\r\n );\r\n\r\n const tabNo = validators.isToday(\r\n visitBooking.startTime,\r\n this.time.nowMoment\r\n )\r\n ? 0\r\n : 1;\r\n\r\n this.commonResponseHandler(\r\n response,\r\n window.$msg.bookSuccess,\r\n window.$msg.bookFail,\r\n null,\r\n () =>\r\n this.$router.push({ name: \"MyBookings\", params: { tabNo: tabNo } }),\r\n null\r\n );\r\n },\r\n setContentHeight() {\r\n if (this.$refs.bookingDetailsScrollable) {\r\n const heights = this.heights();\r\n const contentHeight = heights.screen - heights.toolbar - heights.noticeBarHeight;\r\n\r\n this.$refs.bookingDetailsScrollable.style.height = contentHeight + \"px\";\r\n }\r\n },\r\n },\r\n activated() {\r\n this.visitBooking = this.visitBookingSearchResult.visitCapacity;\r\n\r\n this.$nextTick(() => this.setContentHeight());\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.button-group .col {\r\n margin: 5px;\r\n padding: 0px;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VisitBookingDetails.vue?vue&type=template&id=ceba771e&scoped=true&\"\nimport script from \"./VisitBookingDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./VisitBookingDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VisitBookingDetails.vue?vue&type=style&index=0&id=ceba771e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ceba771e\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VCol,VIcon,VImg,VRow,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}]},[_c('div',[_c('v-toolbar',{staticClass:\"px-1\",attrs:{\"dark\":\"\",\"color\":\"primary\"}},[_c('v-toolbar-title',[_vm._v(\"My Bookings\")])],1),_c('v-tabs',{attrs:{\"fixed-tabs\":\"\",\"background-color\":\"primary\",\"dark\":\"\",\"height\":\"40\"},model:{value:(_vm.tabs),callback:function ($$v) {_vm.tabs=$$v},expression:\"tabs\"}},[_c('v-tab',{staticClass:\"subtitle-1 font-weight-bold text-capitalize\"},[_vm._v(\"Today\")]),_c('v-tab',{staticClass:\"subtitle-1 font-weight-bold text-capitalize\"},[_vm._v(\"Upcoming\")]),_c('v-tab',{staticClass:\"subtitle-1 font-weight-bold text-capitalize\"},[_vm._v(\"Cancelled\")]),_c('v-divider')],1)],1),(_vm.accountInfo)?_c('div',{ref:\"myBookingsScrollable\"},[_c('v-tabs-items',{staticClass:\"scrollable\",staticStyle:{\"height\":\"100%\"},model:{value:(_vm.tabs),callback:function ($$v) {_vm.tabs=$$v},expression:\"tabs\"}},[_c('v-tab-item',{staticStyle:{\"height\":\"100%\"}},[_c('MyBookingList',{attrs:{\"bookings\":_vm.mergedVisitAndSeatBookingsList.filter(\n function (x) { return _vm.isToday(x.startTime) && x.lastAction !== 'ManualFullCancel'; }\n )}})],1),_c('v-tab-item',{staticStyle:{\"height\":\"100%\"}},[_c('MyBookingList',{attrs:{\"bookings\":_vm.mergedVisitAndSeatBookingsList.filter(\n function (x) { return _vm.checkDate(x.startTime) > 0 &&\n x.lastAction !== 'ManualFullCancel'; }\n )}})],1),_c('v-tab-item',{staticStyle:{\"height\":\"100%\"}},[_c('MyBookingList',{attrs:{\"bookings\":_vm.mergedVisitAndSeatBookingsList.filter(\n function (x) { return x.lastAction === 'ManualFullCancel'; }\n )}})],1)],1)],1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.bookings && _vm.bookings.length)?_c('div',[_vm._l((_vm.bookings),function(booking,i){return _c('div',{key:i},[_c('v-card',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showSameDateOnlyOnce(_vm.formatDate(booking.startTime), i)),expression:\"showSameDateOnlyOnce(formatDate(booking.startTime), i)\"}],staticClass:\"px-2 py-1 text-smaller font-weight-bold primary--text\",class:{ 'mt-0': i != 0 },staticStyle:{\"border-bottom-left-radius\":\"3px\",\"border-bottom-right-radius\":\"3px\"},attrs:{\"tile\":\"\"}},[_vm._v(_vm._s(_vm.formatDate(booking.startTime)))]),_c('v-card',{staticClass:\"my-1\",attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.viewBookingDetails(booking)}}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-3 flex-center-left-container\"},[_c('v-img',{staticClass:\"ma-1x\",attrs:{\"src\":booking.pax\n ? (\"\" + _vm.branchImagePath + (booking.branchImageUrls[0]))\n : (\"\" + _vm.areaImagePath + (booking.areaImageUrls[0])),\"aspect-ratio\":\"1\",\"max-height\":\"100\",\"max-width\":\"100\"}})],1),_c('v-col',{staticClass:\"col-9 pl-4 pt-3x pr-4\",staticStyle:{\"padding-top\":\"7px\"}},[_c('v-row',{staticClass:\"pb-1\",attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"text-title-medium text-title-black text-truncate\"},[_vm._v(_vm._s(booking.pax ? booking.branchName : _vm.formatLocation(booking.area, booking.seat, booking.floor)))])],1),_c('v-row',{staticClass:\"text-smaller\",staticStyle:{\"padding-bottom\":\"2px\"},style:(booking.pax ? 'margin-top: 0px' : null),attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-clock-outline\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.formatPeriod(booking.startTime, booking.endTime)))]),(booking.pax)?_c('v-col',{staticClass:\"col-4\"},[_c('v-icon',{staticClass:\"icon-small pr-1\"},[_vm._v(\"mdi-account-multiple\")]),_vm._v(\" \"+_vm._s(booking.pax)+\" \")],1):_c('v-col',{staticClass:\"col-4\"},[_c('v-icon',{staticClass:\"icon-small pr-1\"},[_vm._v(\"mdi-seat\")]),_vm._v(\" \"+_vm._s(booking.seat)+\" \")],1)],1),_c('v-row',{staticClass:\"text-xsmall-weight\",attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\",attrs:{\"color\":_vm.formatBookingStatus(booking.actions, booking.pax).color}},[_vm._v(_vm._s(_vm.formatBookingStatus(booking.actions, booking.pax).icon))])],1),_c('v-col',{staticClass:\"text-uppercasex text-truncate-2lines\"},[_vm._v(_vm._s(_vm.formatBookingStatus(booking.actions, booking.pax).text))])],1)],1)],1)],1)],1)}),_c('div',{staticStyle:{\"height\":\"1px\",\"background\":\"transparent\"}})],2):_c('v-container',{staticClass:\"primary--text flex-center-container text-title-black\",staticStyle:{\"height\":\"100%\",\"text-align\":\"center\",\"word-wrap\":\"break-word\"}},[_c('NoItems',{attrs:{\"label\":\"No bookings\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"mb-5\"},[_c('svg',{attrs:{\"id\":\"b21613c9-2bf0-4d37-bef0-3b193d34fc5d\",\"data-name\":\"Layer 1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"114.763626\",\"height\":\"113.217383\",\"viewBox\":\"0 0 647.63626 632.17383\"}},[_c('path',{attrs:{\"d\":\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\",\"transform\":\"translate(-276.18187 -133.91309)\",\"fill\":\"#f2f2f2\"}}),_c('path',{attrs:{\"d\":\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\",\"transform\":\"translate(-276.18187 -133.91309)\",\"fill\":\"#3f3d56\"}}),_c('path',{attrs:{\"d\":\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\",\"transform\":\"translate(-276.18187 -133.91309)\",\"fill\":_vm.primaryColor}}),_c('circle',{attrs:{\"cx\":\"190.15351\",\"cy\":\"24.95465\",\"r\":\"20\",\"fill\":_vm.primaryColor}}),_c('circle',{attrs:{\"cx\":\"190.15351\",\"cy\":\"24.95465\",\"r\":\"12.66462\",\"fill\":\"#fff\"}}),_c('path',{attrs:{\"d\":\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\",\"transform\":\"translate(-276.18187 -133.91309)\",\"fill\":\"#e6e6e6\"}}),_c('path',{attrs:{\"d\":\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\",\"transform\":\"translate(-276.18187 -133.91309)\",\"fill\":\"#3f3d56\"}}),_c('path',{attrs:{\"d\":\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\",\"transform\":\"translate(-276.18187 -133.91309)\",\"fill\":_vm.primaryColor}}),_c('circle',{attrs:{\"cx\":\"433.63626\",\"cy\":\"105.17383\",\"r\":\"20\",\"fill\":_vm.primaryColor}}),_c('circle',{attrs:{\"cx\":\"433.63626\",\"cy\":\"105.17383\",\"r\":\"12.18187\",\"fill\":\"#fff\"}})])]),_c('strong',[_vm._v(_vm._s(_vm.label))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <div class=\"mb-5\">\r\n <svg\r\n id=\"b21613c9-2bf0-4d37-bef0-3b193d34fc5d\"\r\n data-name=\"Layer 1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"114.763626\"\r\n height=\"113.217383\"\r\n viewBox=\"0 0 647.63626 632.17383\"\r\n >\r\n <path\r\n d=\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\"\r\n transform=\"translate(-276.18187 -133.91309)\"\r\n fill=\"#f2f2f2\"\r\n />\r\n <path\r\n d=\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\"\r\n transform=\"translate(-276.18187 -133.91309)\"\r\n fill=\"#3f3d56\"\r\n />\r\n <path\r\n d=\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\"\r\n transform=\"translate(-276.18187 -133.91309)\"\r\n :fill=\"primaryColor\"\r\n />\r\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"20\" :fill=\"primaryColor\" />\r\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"12.66462\" fill=\"#fff\" />\r\n <path\r\n d=\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\"\r\n transform=\"translate(-276.18187 -133.91309)\"\r\n fill=\"#e6e6e6\"\r\n />\r\n <path\r\n d=\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\"\r\n transform=\"translate(-276.18187 -133.91309)\"\r\n fill=\"#3f3d56\"\r\n />\r\n <path\r\n d=\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\"\r\n transform=\"translate(-276.18187 -133.91309)\"\r\n :fill=\"primaryColor\"\r\n />\r\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"20\" :fill=\"primaryColor\" />\r\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"12.18187\" fill=\"#fff\" />\r\n </svg>\r\n </div>\r\n\r\n <strong>{{label}}</strong>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"NoItems\",\r\n props: {\r\n label: String\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NoItems.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NoItems.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NoItems.vue?vue&type=template&id=042d28cf&scoped=true&\"\nimport script from \"./NoItems.vue?vue&type=script&lang=js&\"\nexport * from \"./NoItems.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"042d28cf\",\n null\n \n)\n\nexport default component.exports","<template>\n <div v-if=\"bookings && bookings.length\">\n <div v-for=\"(booking, i) in bookings\" :key=\"i\">\n <v-card\n tile\n v-show=\"showSameDateOnlyOnce(formatDate(booking.startTime), i)\"\n class=\"px-2 py-1 text-smaller font-weight-bold primary--text\"\n :class=\"{ 'mt-0': i != 0 }\"\n style=\"border-bottom-left-radius: 3px; border-bottom-right-radius: 3px\"\n >{{ formatDate(booking.startTime) }}</v-card\n >\n\n <v-card tile class=\"my-1\" @click=\"viewBookingDetails(booking)\">\n <v-row no-gutters>\n <v-col class=\"col-3 flex-center-left-container\">\n <v-img\n class=\"ma-1x\"\n :src=\"\n booking.pax\n ? `${branchImagePath}${booking.branchImageUrls[0]}`\n : `${areaImagePath}${booking.areaImageUrls[0]}`\n \"\n aspect-ratio=\"1\"\n max-height=\"100\"\n max-width=\"100\"\n />\n </v-col>\n <v-col class=\"col-9 pl-4 pt-3x pr-4\" style=\"padding-top: 7px;\">\n <v-row no-gutters class=\"pb-1\">\n <v-col class=\"text-title-medium text-title-black text-truncate\">{{\n booking.pax\n ? booking.branchName\n : formatLocation(booking.area, booking.seat, booking.floor)\n }}</v-col>\n </v-row>\n\n <v-row\n no-gutters\n class=\"text-smaller\"\n style=\"padding-bottom: 2px\"\n :style=\"booking.pax ? 'margin-top: 0px' : null\"\n >\n <v-col class=\"col-1\">\n <v-icon class=\"icon-small\">mdi-clock-outline</v-icon>\n <!-- <v-icon class=\"icon-small\">{{\n booking.pax ? \"mdi-human-handsdown\" : \"mdi-seat\"\n }}</v-icon> -->\n </v-col>\n <v-col>{{\n formatPeriod(booking.startTime, booking.endTime)\n }}</v-col>\n <v-col v-if=\"booking.pax\" class=\"col-4\">\n <v-icon class=\"icon-small pr-1\">mdi-account-multiple</v-icon>\n {{ booking.pax }}\n </v-col>\n <v-col v-else class=\"col-4\">\n <v-icon class=\"icon-small pr-1\">mdi-seat</v-icon>\n {{ booking.seat }}\n </v-col>\n </v-row>\n\n <v-row no-gutters class=\"text-xsmall-weight\">\n <v-col class=\"col-1\">\n <v-icon\n :color=\"\n formatBookingStatus(booking.actions, booking.pax).color\n \"\n class=\"icon-small\"\n >{{\n formatBookingStatus(booking.actions, booking.pax).icon\n }}</v-icon\n >\n </v-col>\n <v-col class=\"text-uppercasex text-truncate-2lines\">{{\n formatBookingStatus(booking.actions, booking.pax).text\n }}</v-col>\n </v-row>\n\n <!-- <v-row v-if=\"booking.pax\" no-gutters class=\"text-small\">\n <v-col class=\"col-1\">\n <v-icon class=\"icon-small\">mdi-account-multiple</v-icon>\n </v-col>\n <v-col>{{ booking.pax }}</v-col>\n </v-row> -->\n </v-col>\n </v-row>\n </v-card>\n </div>\n\n <!-- An invisible div fix the unknown flickering of the the shadow of the last card while tabs are being swipped left and right -->\n <div style=\"height: 1px; background: transparent\"></div>\n </div>\n\n <v-container\n v-else\n style=\"height: 100%; text-align: center; word-wrap: break-word\"\n class=\"primary--text flex-center-container text-title-black\"\n >\n <NoItems label=\"No bookings\" />\n <!-- <strong>No bookings</strong> -->\n </v-container>\n</template>\n\n<script>\nimport { mapMutations } from \"vuex\";\nimport formatters from \"@/helpers/formatters\";\nimport constants from \"@/helpers/constants\";\nimport NoItems from \"@/components/NoItems\";\n\nvar appearedDate = [];\n\nexport default {\n name: \"MyBookingList\",\n components: {\n NoItems,\n },\n props: {\n bookings: Array,\n },\n data: () => ({\n appearedDate: [],\n }),\n methods: {\n ...mapMutations([\"updateSelectedBooking\"]),\n viewBookingDetails(booking) {\n this.updateSelectedBooking(booking);\n this.$router.push({ name: \"MyBookingDetails\" });\n },\n formatLocation(area, seat, floor) {\n return formatters.formatLocation(area, seat, floor);\n },\n formatPeriod(fromDateString, toDateString) {\n return formatters.formatPeriod(fromDateString, toDateString);\n },\n formatDate(dateString) {\n return formatters.formatDate(dateString);\n },\n formatBookingStatus(actions, isVisitBooking) {\n return formatters.formatBookingStatus(actions, isVisitBooking);\n },\n showSameDateOnlyOnce(date, arrayIndex) {\n let show = true;\n // const appearedDate = this.appearedDate;\n\n if (arrayIndex === 0) {\n appearedDate = [];\n }\n\n if (appearedDate && appearedDate.includes(date)) {\n show = false;\n } else {\n appearedDate.push(date);\n }\n\n // console.log(show, date, JSON.stringify(appearedDate));\n return show;\n },\n },\n};\n</script>\n\n<style scoped>\n.text-truncate-2lines {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookingList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookingList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MyBookingList.vue?vue&type=template&id=123c9df6&scoped=true&\"\nimport script from \"./MyBookingList.vue?vue&type=script&lang=js&\"\nexport * from \"./MyBookingList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MyBookingList.vue?vue&type=style&index=0&id=123c9df6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"123c9df6\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCard,VCol,VContainer,VIcon,VImg,VRow})\n","<template>\n <div v-resize=\"setContentHeight\">\n <div>\n <v-toolbar dark color=\"primary\" class=\"px-1\">\n <v-toolbar-title>My Bookings</v-toolbar-title>\n </v-toolbar>\n\n <v-tabs\n v-model=\"tabs\"\n fixed-tabs\n background-color=\"primary\"\n dark\n height=\"40\"\n >\n <v-tab class=\"subtitle-1 font-weight-bold text-capitalize\">Today</v-tab>\n <v-tab class=\"subtitle-1 font-weight-bold text-capitalize\"\n >Upcoming</v-tab\n >\n <v-tab class=\"subtitle-1 font-weight-bold text-capitalize\"\n >Cancelled</v-tab\n >\n\n <v-divider />\n </v-tabs>\n </div>\n\n <div v-if=\"accountInfo\" ref=\"myBookingsScrollable\">\n <v-tabs-items v-model=\"tabs\" style=\"height: 100%\" class=\"scrollable\">\n <v-tab-item style=\"height: 100%\">\n <MyBookingList\n :bookings=\"\n mergedVisitAndSeatBookingsList.filter(\n (x) =>\n isToday(x.startTime) && x.lastAction !== 'ManualFullCancel'\n )\n \"\n />\n </v-tab-item>\n\n <v-tab-item style=\"height: 100%\">\n <MyBookingList\n :bookings=\"\n mergedVisitAndSeatBookingsList.filter(\n (x) =>\n checkDate(x.startTime) > 0 &&\n x.lastAction !== 'ManualFullCancel'\n )\n \"\n />\n </v-tab-item>\n\n <v-tab-item style=\"height: 100%\">\n <MyBookingList\n :bookings=\"\n mergedVisitAndSeatBookingsList.filter(\n (x) => x.lastAction === 'ManualFullCancel'\n )\n \"\n />\n </v-tab-item>\n </v-tabs-items>\n </div>\n </div>\n</template>\n\n<script>\nimport MyBookingList from \"@/components/MyBookingList\";\nimport validators from \"@/helpers/validators\";\n\nexport default {\n name: \"MyBookings\",\n components: { MyBookingList },\n props: {\n tabNo: Number,\n },\n data: () => ({\n tabs: 0,\n }),\n computed: {\n mergedVisitAndSeatBookingsList() {\n const mergedList = [\n ...this.accountInfo.visitBookings,\n ...this.accountInfo.bookings,\n ];\n\n return mergedList.sort(\n (x, y) =>\n x.startTime.localeCompare(y.startTime) ||\n x.endTime.localeCompare(y.endTime)\n );\n },\n },\n methods: {\n setContentHeight() {\n if (this.$refs.myBookingsScrollable) {\n const heights = this.heights();\n const contentHeight =\n heights.screen - heights.toolbar - heights.tabbar - heights.bottombar - heights.noticeBarHeight;\n\n this.$refs.myBookingsScrollable.style.height = contentHeight + \"px\";\n }\n },\n isToday(date) {\n return validators.isToday(date, this.time.nowMoment);\n },\n checkDate(date) {\n return validators.checkDate(date, this.time.todayMoment);\n },\n },\n activated() {\n this.$nextTick(() => this.setContentHeight());\n },\n beforeRouteEnter(to, from, next) {\n next((vm) => {\n if (\n from.name === \"BookingDetails\" ||\n from.name === \"VisitBookingDetails\"\n ) {\n vm.tabs = vm.tabNo;\n }\n });\n },\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MyBookings.vue?vue&type=template&id=901003b0&\"\nimport script from \"./MyBookings.vue?vue&type=script&lang=js&\"\nexport * from \"./MyBookings.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VDivider,VTab,VTabItem,VTabs,VTabsItems,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}]},[_c('div',[_c('v-toolbar',{staticClass:\"pr-1\",attrs:{\"dark\":\"\",\"color\":\"primary\"}},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.goBack}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',[_vm._v(\"My Booking Details\")])],1),(_vm.booking && _vm.accountInfo && _vm.settings)?_c('div',{ref:\"myBookingDetailsScrollable\",staticClass:\"scrollable\"},[_c('v-card',{staticStyle:{\"border-bottom-right-radius\":\"5px\",\"border-bottom-left-radius\":\"5px\",\"height\":\"100%\"},attrs:{\"flat\":\"\"}},[_c('v-img',{attrs:{\"src\":_vm.booking.pax\n ? (\"\" + _vm.branchImagePath + (_vm.booking.branchImageUrls[0]))\n : (\"\" + _vm.areaImagePath + (_vm.booking.areaImageUrls[0])),\"max-height\":\"154\"}}),_c('div',{staticClass:\"pa-4 text-small\"},[_c('div',{staticClass:\"font-weight-bold mb-1 text-title-black\"},[_vm._v(\" \"+_vm._s(_vm.booking.pax ? \"Library Visit\" : _vm.formatLocation(_vm.booking.area, _vm.booking.seat, _vm.booking.floor))+\" \")]),(_vm.booking.areaIgnoreHolidays)?_c('div',{staticClass:\"subtitle font-weight-bold mb-2\",staticStyle:{\"font-sizex\":\"initial\"}},[_vm._v(\" Extended hours zone – available on Public Holidays \")]):_vm._e(),_c('div',[(_vm.booking.pax)?_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-account-multiple\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.booking.pax))])],1):_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-seat\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.booking.seat))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-counter\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.booking.bookingRefId))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-library\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.booking.branchName))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-calendar-month\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.formatDate(_vm.booking.startTime)))])],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-clock-outline\")])],1),_c('v-col',[_vm._v(\" \"+_vm._s(_vm.formatPeriod(_vm.booking.startTime, _vm.booking.endTime))+\" \")])],1),(_vm.booking.areaInformation && _vm.booking.areaInformation.directionalInfo)?_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\"},[_vm._v(\"mdi-directions\")])],1),_c('v-col',[_vm._v(_vm._s(_vm.booking.areaInformation.directionalInfo))])],1):_vm._e(),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"col-1\"},[_c('v-icon',{staticClass:\"icon-small\",attrs:{\"color\":_vm.formatBookingStatus(_vm.booking.actions, _vm.booking.pax).color}},[_vm._v(_vm._s(_vm.formatBookingStatus(_vm.booking.actions, _vm.booking.pax).icon))])],1),_c('v-col',{staticClass:\"text-uppercasex\"},[_vm._v(_vm._s(_vm.formatBookingStatus(_vm.booking.actions, _vm.booking.pax).text))])],1)],1),_c('div',{staticClass:\"button-group mt-4\"},[(!_vm.booking.pax)?_c('v-row',[_c('v-col',[_c('v-btn',{staticClass:\"px-5\",attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"primary\",\"block\":\"\"},on:{\"click\":function($event){return _vm.viewMaps(_vm.booking)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-map-search\")]),_vm._v(\"View Maps \")],1)],1)],1):_vm._e(),(_vm.canCancelNow && !(this.booking.bookingRefId.includes('S') && _vm.isEmailMobileLogin))?_c('v-row',[_c('v-col',[_c('v-btn',{attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"orange\",\"block\":\"\"},on:{\"click\":function($event){return _vm.confirmCancelBooking(_vm.booking)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-close-thick\")]),_vm._v(\"Cancel Booking \")],1)],1)],1):_vm._e(),_c('v-row',[(\n !_vm.windowSettings.disableExtension &&\n !_vm.booking.pax &&\n _vm.canExtendNow\n )?_c('v-col',[_c('v-btn',{attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"orange\",\"block\":\"\"},on:{\"click\":function($event){return _vm.extend(_vm.booking)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-expand-all\")]),_vm._v(\"Extend If Available \")],1)],1):_vm._e()],1)],1)])],1),_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-dialog',{attrs:{\"max-width\":\"400\"},model:{value:(_vm.confirmDialog.show),callback:function ($$v) {_vm.$set(_vm.confirmDialog, \"show\", $$v)},expression:\"confirmDialog.show\"}},[_c('v-card',{staticClass:\"py-2\"},[_c('v-card-title',{staticClass:\"mb-3\"},[_vm._v(_vm._s(_vm.confirmDialog.message))]),_c('div',{on:{\"click\":function($event){_vm.InputPopupSelectCancelReason.show = true}}},[_c('v-text-field',{staticClass:\"px-8\",attrs:{\"placeholder\":\"Reason for cancellation\",\"value\":_vm.InputPopupSelectCancelReason.selectedItem\n ? _vm.InputPopupSelectCancelReason.selectedItem.name\n : '',\"readonly\":\"\"}}),_c('InputPopupSelect',{attrs:{\"title\":\"Reason for cancellation\",\"list\":_vm.booking.pax\n ? _vm.settings.menus.visitBookingCancelReasons\n : _vm.settings.menus.cancelReasons,\"select\":_vm.InputPopupSelectCancelReason},on:{\"update:select\":function($event){_vm.InputPopupSelectCancelReason=$event}}})],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":function($event){_vm.confirmDialog.show = false}}},[_vm._v(\"No\")]),_c('v-btn',{attrs:{\"disabled\":!_vm.InputPopupSelectCancelReason.selectedItem,\"color\":\"primary\",\"text\":\"\"},on:{\"click\":function($event){return _vm.cancel(\n _vm.booking,\n _vm.InputPopupSelectCancelReason.selectedItem.code\n )}}},[_vm._v(\"Yes\")])],1)],1)],1)],1)],1):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-resize=\"setContentHeight\">\r\n <div>\r\n <!-- Toolbar -->\r\n <v-toolbar dark color=\"primary\" class=\"pr-1\">\r\n <v-btn icon @click=\"goBack\">\r\n <v-icon>mdi-arrow-left</v-icon>\r\n </v-btn>\r\n\r\n <v-toolbar-title>My Booking Details</v-toolbar-title>\r\n </v-toolbar>\r\n\r\n <div\r\n v-if=\"booking && accountInfo && settings\"\r\n ref=\"myBookingDetailsScrollable\"\r\n class=\"scrollable\"\r\n >\r\n <v-card\r\n flat\r\n style=\"\r\n border-bottom-right-radius: 5px;\r\n border-bottom-left-radius: 5px;\r\n height: 100%;\r\n \"\r\n >\r\n <v-img\r\n :src=\"\r\n booking.pax\r\n ? `${branchImagePath}${booking.branchImageUrls[0]}`\r\n : `${areaImagePath}${booking.areaImageUrls[0]}`\r\n \"\r\n max-height=\"154\"\r\n ></v-img>\r\n\r\n <div class=\"pa-4 text-small\">\r\n <!-- Booking details -->\r\n <div class=\"font-weight-bold mb-1 text-title-black\">\r\n {{\r\n booking.pax\r\n ? \"Library Visit\"\r\n : formatLocation(booking.area, booking.seat, booking.floor)\r\n }}\r\n </div>\r\n <div\r\n v-if=\"booking.areaIgnoreHolidays\"\r\n class=\"subtitle font-weight-bold mb-2\"\r\n style=\"font-sizex: initial\"\r\n >\r\n Extended hours zone – available on Public Holidays\r\n </div>\r\n <div>\r\n <v-row v-if=\"booking.pax\" dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-account-multiple</v-icon>\r\n </v-col>\r\n <v-col>{{ booking.pax }}</v-col>\r\n </v-row>\r\n <v-row v-else dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-seat</v-icon>\r\n </v-col>\r\n <v-col>{{ booking.seat }}</v-col>\r\n </v-row>\r\n\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-counter</v-icon>\r\n <!-- mdi-format-list-numbered -->\r\n <!-- mdi-counter -->\r\n <!-- mdi-fingerprint -->\r\n <!-- music-accidental-sharp -->\r\n </v-col>\r\n <v-col>{{ booking.bookingRefId }}</v-col>\r\n </v-row>\r\n\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-library</v-icon>\r\n </v-col>\r\n <v-col>{{ booking.branchName }}</v-col>\r\n </v-row>\r\n\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-calendar-month</v-icon>\r\n </v-col>\r\n <v-col>{{ formatDate(booking.startTime) }}</v-col>\r\n </v-row>\r\n\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-clock-outline</v-icon>\r\n <!-- <v-icon class=\"icon-small\">{{\r\n booking.pax ? \"mdi-human-handsdown\" : \"mdi-seat\"\r\n }}</v-icon> -->\r\n </v-col>\r\n <v-col>\r\n {{ formatPeriod(booking.startTime, booking.endTime) }}\r\n </v-col>\r\n </v-row>\r\n\r\n <v-row dense v-if=\"booking.areaInformation && booking.areaInformation.directionalInfo\">\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-directions</v-icon>\r\n </v-col>\r\n <v-col>{{ booking.areaInformation.directionalInfo }}</v-col>\r\n </v-row>\r\n\r\n <v-row dense>\r\n <v-col class=\"col-1\">\r\n <v-icon\r\n :color=\"\r\n formatBookingStatus(booking.actions, booking.pax).color\r\n \"\r\n class=\"icon-small\"\r\n >{{\r\n formatBookingStatus(booking.actions, booking.pax).icon\r\n }}</v-icon\r\n >\r\n </v-col>\r\n <v-col class=\"text-uppercasex\">{{\r\n formatBookingStatus(booking.actions, booking.pax).text\r\n }}</v-col>\r\n </v-row>\r\n\r\n <!-- <v-row v-if=\"windowSettings.showBloombergEndingSoonInfo && (booking.area == 'Bloomberg Terminal')\" dense>\r\n <v-col class=\"col-1\">\r\n <v-icon class=\"icon-small\">mdi-information-outline</v-icon>\r\n </v-col>\r\n <v-col>\r\n We are sorry that this database will not be available from 27 October 2021. If you have any queries, please send an email to our Customer Relations Officer at <a href='mailto: enquiry@nlb.gov.sg'>enquiry@nlb.gov.sg</a>\r\n </v-col>\r\n </v-row> -->\r\n </div>\r\n\r\n <!-- Action buttons -->\r\n <div class=\"button-group mt-4\">\r\n <!-- View map button -->\r\n <v-row v-if=\"!booking.pax\">\r\n <v-col>\r\n <v-btn\r\n @click=\"viewMaps(booking)\"\r\n dark\r\n large\r\n color=\"primary\"\r\n class=\"px-5\"\r\n block\r\n >\r\n <v-icon left dark>mdi-map-search</v-icon>View Maps\r\n </v-btn>\r\n </v-col>\r\n </v-row>\r\n\r\n <!-- Cancel button -->\r\n <v-row v-if=\"canCancelNow && !(this.booking.bookingRefId.includes('S') && isEmailMobileLogin)\">\r\n <v-col>\r\n <v-btn\r\n @click=\"confirmCancelBooking(booking)\"\r\n dark\r\n large\r\n color=\"orange\"\r\n block\r\n >\r\n <v-icon left dark>mdi-close-thick</v-icon>Cancel Booking\r\n </v-btn>\r\n </v-col>\r\n </v-row>\r\n\r\n <v-row>\r\n <v-col\r\n v-if=\"\r\n !windowSettings.disableExtension &&\r\n !booking.pax &&\r\n canExtendNow\r\n \"\r\n >\r\n <v-btn\r\n @click=\"extend(booking)\"\r\n dark\r\n large\r\n color=\"orange\"\r\n block\r\n >\r\n <v-icon left dark>mdi-expand-all</v-icon>Extend If Available\r\n </v-btn>\r\n </v-col>\r\n </v-row>\r\n </div>\r\n </div>\r\n </v-card>\r\n\r\n <!-- Cancellation confirmation popup -->\r\n <v-row justify=\"center\">\r\n <v-dialog v-model=\"confirmDialog.show\" max-width=\"400\">\r\n <v-card class=\"py-2\">\r\n <v-card-title class=\"mb-3\">{{\r\n confirmDialog.message\r\n }}</v-card-title>\r\n\r\n <div @click=\"InputPopupSelectCancelReason.show = true\">\r\n <v-text-field\r\n placeholder=\"Reason for cancellation\"\r\n :value=\"\r\n InputPopupSelectCancelReason.selectedItem\r\n ? InputPopupSelectCancelReason.selectedItem.name\r\n : ''\r\n \"\r\n class=\"px-8\"\r\n readonly\r\n ></v-text-field>\r\n\r\n <InputPopupSelect\r\n title=\"Reason for cancellation\"\r\n :list=\"\r\n booking.pax\r\n ? settings.menus.visitBookingCancelReasons\r\n : settings.menus.cancelReasons\r\n \"\r\n :select.sync=\"InputPopupSelectCancelReason\"\r\n />\r\n </div>\r\n\r\n <v-card-actions>\r\n <v-spacer></v-spacer>\r\n <v-btn color=\"primary\" text @click=\"confirmDialog.show = false\"\r\n >No</v-btn\r\n >\r\n\r\n <v-btn\r\n :disabled=\"!InputPopupSelectCancelReason.selectedItem\"\r\n color=\"primary\"\r\n text\r\n @click=\"\r\n cancel(\r\n booking,\r\n InputPopupSelectCancelReason.selectedItem.code\r\n )\r\n \"\r\n >Yes</v-btn\r\n >\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n </v-row>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport formatters from \"@/helpers/formatters\";\r\nimport validators from \"@/helpers/validators\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\nimport InputPopupSelect from \"@/components/InputPopupSelect\";\r\n\r\nimport businessLogic from \"@/helpers/businessLogic\";\r\nimport { mapState, mapGetters, mapMutations } from \"vuex\";\r\n\r\nexport default {\r\n name: \"MyBookingDetails\",\r\n components: { InputPopupSelect },\r\n data: () => ({\r\n booking: null,\r\n confirmDialog: {\r\n show: false,\r\n message: \"\",\r\n },\r\n InputPopupSelectCancelReason: {\r\n show: false,\r\n selectedItem: null,\r\n },\r\n }),\r\n computed: {\r\n ...mapState([\"qrCode\", \"selectedBooking\"]),\r\n ...mapGetters([\"mode\", \"isEmailMobileLogin\"]),\r\n canCancelNow() {\r\n return this.booking.pax\r\n ? validators.canCancelVisit(\r\n this.booking.canCancelStatus,\r\n this.booking.startTime,\r\n this.time.nowMoment\r\n )\r\n : validators.canCancel(\r\n this.booking.canCancelStatus,\r\n this.booking.endTime,\r\n this.booking.bookingTimeslotInMinutes,\r\n this.time.nowMoment\r\n );\r\n },\r\n canExtendNow() {\r\n return validators.canExtend(\r\n this.booking.canExtendStatus,\r\n this.booking.endTime,\r\n this.settings.system.extensionStartTimeInMinutes,\r\n this.settings.system.extensionEndTimeInMinutes,\r\n this.time.nowMoment\r\n );\r\n },\r\n },\r\n methods: {\r\n ...mapMutations([\"updateLocationInfoFromQrCode\"]),\r\n viewMaps(booking) {\r\n this.$router.push({\r\n name: \"ViewMaps\",\r\n params: {\r\n mapFileNames: booking.mapUrls,\r\n },\r\n });\r\n },\r\n formatLocation(area, seat, floor) {\r\n return formatters.formatLocation(area, seat, floor);\r\n },\r\n formatPeriod(fromDateString, toDateString) {\r\n return formatters.formatPeriod(fromDateString, toDateString);\r\n },\r\n formatDate(dateString) {\r\n return formatters.formatDate(dateString);\r\n },\r\n formatBookingStatus(actions, isVisitBooking) {\r\n return formatters.formatBookingStatus(actions, isVisitBooking);\r\n },\r\n async checkIn(booking) {\r\n const response = await apiHelper.checkIn(\r\n booking.bookingId,\r\n false,\r\n booking.branchId\r\n );\r\n\r\n this.commonResponseHandler(\r\n response,\r\n window.$msg.checkInSuccess,\r\n window.$msg.checkInFail,\r\n () => this.goBack()\r\n );\r\n },\r\n async extend(booking) {\r\n //Check if it's in onsiteMode, if not, redirect to ScanQRCode\r\n if (!this.onsiteMode || this.mode.branchId !== this.booking.branchId) {\r\n this.$router.push({ name: \"ScanQRCode\", params: { state: \"extend\" } });\r\n return;\r\n }\r\n\r\n const response = await apiHelper.extend(\r\n booking.bookingId,\r\n booking.branchId\r\n );\r\n\r\n this.commonResponseHandler(\r\n response,\r\n window.$msg.extendSuccess,\r\n window.$msg.extendFail,\r\n () => this.goBack()\r\n );\r\n },\r\n confirmCancelBooking() {\r\n this.confirmDialog.message = window.$msg.confirmCancel;\r\n this.confirmDialog.show = true;\r\n },\r\n async cancel(booking, cancelReasonCode) {\r\n this.confirmDialog = {\r\n show: false,\r\n message: \"\",\r\n };\r\n\r\n const response = await apiHelper.cancel(\r\n booking.pax,\r\n booking.bookingId,\r\n cancelReasonCode,\r\n booking.branchId\r\n );\r\n\r\n this.commonResponseHandler(\r\n response,\r\n window.$msg.cancelSuccess,\r\n window.$msg.cancelFail,\r\n () => this.goBack()\r\n );\r\n },\r\n setContentHeight() {\r\n if (this.$refs.myBookingDetailsScrollable) {\r\n const heights = this.heights();\r\n const contentHeight = heights.screen - heights.toolbar - heights.noticeBarHeight;\r\n\r\n this.$refs.myBookingDetailsScrollable.style.height =\r\n contentHeight + \"px\";\r\n }\r\n },\r\n },\r\n watch: {\r\n qrCode(newValue, oldValue) {\r\n if (newValue) {\r\n if (newValue.state === \"extend\") {\r\n //Update locationInfoFromQrCode\r\n const locationInfo = businessLogic.getLocationInfoFromQrCode(\r\n newValue.value,\r\n this.settings.menus.branchMenus\r\n );\r\n\r\n if (locationInfo) {\r\n this.updateLocationInfoFromQrCode(locationInfo);\r\n\r\n //Check onsiteMode & extend if really onsite\r\n this.$nextTick(() => {\r\n if (\r\n this.onsiteMode &&\r\n this.mode.branchId === this.booking.branchId\r\n ) {\r\n this.extend(this.booking);\r\n } else {\r\n const msg = window.$msg.extendAtTheWrongBranch;\r\n\r\n this.updateSystemDialog({\r\n show: true,\r\n title: window.$msg.extendFail,\r\n message: msg,\r\n });\r\n }\r\n });\r\n } else {\r\n this.updateSystemDialog({\r\n title: window.$msg.invalidQrCodeTitle,\r\n message: window.$msg.invalidQrCodeMsg,\r\n });\r\n }\r\n }\r\n }\r\n },\r\n \"confirmDialog.show\"(newValue, oldValue) {\r\n this.InputPopupSelectCancelReason.selectedItem = null;\r\n },\r\n },\r\n activated() {\r\n this.booking = this.selectedBooking;\r\n\r\n this.$nextTick(() => this.setContentHeight());\r\n },\r\n beforeRouteLeave(to, from, next) {\r\n const inputs = [this.InputPopupSelectCancelReason, this.confirmDialog];\r\n\r\n for (let i of inputs) {\r\n if (i != null && i.show) {\r\n i.show = false;\r\n\r\n next(false);\r\n return;\r\n }\r\n }\r\n\r\n next();\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.button-group .col {\r\n margin: 5px;\r\n padding: 0px;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookingDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookingDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MyBookingDetails.vue?vue&type=template&id=565eba45&scoped=true&\"\nimport script from \"./MyBookingDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./MyBookingDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MyBookingDetails.vue?vue&type=style&index=0&id=565eba45&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"565eba45\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardTitle,VCol,VDialog,VIcon,VImg,VRow,VSpacer,VTextField,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.accountInfo)?_c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}],staticClass:\"account\"},[_c('v-toolbar',{staticClass:\"px-1\",attrs:{\"dark\":\"\",\"color\":\"primary\"}},[(_vm.accountInfo.visitBookingMonthlyCountsForNonNlbUser)?_c('v-toolbar-title',{attrs:{\"xclass\":\"text-capitalize\"}},[_vm._v(_vm._s(_vm.accountInfo.name))]):_c('v-toolbar-title',{staticClass:\"text-capitalize\"},[_vm._v(_vm._s(_vm.accountInfo.name))]),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.confirmLogout}},[_c('v-icon',[_vm._v(\"mdi-logout-variant\")])],1)],1),(_vm.accountInfo.accountType !== 'User' && _vm.visitBookingEnabled)?_c('v-card',{staticClass:\"px-2 py-1 text-small font-weight-bold primary--text text-left\",staticStyle:{\"border-bottom-left-radius\":\"3px\",\"border-bottom-right-radius\":\"3px\",\"width\":\"100%\"},attrs:{\"tile\":\"\"}},[_vm._v(\" Number of bookings left in this month: \"+_vm._s(_vm.accountInfo.visitBookingMonthlyCountsForNonNlbUser)+\" \")]):_c('v-card',{staticClass:\"px-2 py-1 text-small font-weight-bold primary--text text-left\",staticStyle:{\"border-bottom-left-radius\":\"3px\",\"border-bottom-right-radius\":\"3px\",\"width\":\"100%\"},attrs:{\"tile\":\"\"}},[_vm._v(\"Daily Booking Quota\"),(_vm.windowSettings.showCCKPLQuota)?_c('span',[_vm._v(\"s\")]):_vm._e()]),(_vm.accountInfo.accountType !== 'User' && _vm.visitBookingEnabled)?_c('div',{staticClass:\"px-2 py-1 pt-2 text-small font-weight-bold primary--text text-left\",staticStyle:{\"position\":\"absolute\"}},[_vm._v(\" Daily Booking Quota\"),(_vm.windowSettings.showCCKPLQuota)?_c('span',[_vm._v(\"s\")]):_vm._e()]):_vm._e(),_c('div',{ref:\"accountScrollable\",staticClass:\"scrollable text-center pt-2 pb-4\",class:_vm.contentHeight > 300 ? 'flex-center-container' : ''},[(_vm.quotas && _vm.quotas.cckpl && _vm.windowSettings.showCCKPLQuota)?_c('div',{staticStyle:{\"height\":\"167px\"}},[_c('v-progress-circular',{staticStyle:{\"height\":\"inherit\"},attrs:{\"rotate\":\"-90\",\"size\":\"167\",\"width\":\"15\",\"value\":_vm.quotas.cckpl.percentage,\"color\":_vm.quotas.cckpl.remainingQuotaInMinutes > 0 ? 'primary' : 'orange'}},[_c('div',[_c('div',{staticStyle:{\"color\":\"black\",\"font-weight\":\"bold\",\"font-size\":\"12px\"}},[_vm._v(\" Breakout Zones \")]),_c('div',{staticClass:\"mt-1 font-weight-bold\",staticStyle:{\"font-size\":\"22px\"}},[_vm._v(\" \"+_vm._s(_vm.quotas.cckpl.text)+\" \")])])])],1):_vm._e(),(_vm.quotas && _vm.quotas.studyArea)?_c('div',{staticClass:\"pt-2\",style:(_vm.windowSettings.showCCKPLQuota ? 'height: 272px' : 'height: 300px')},[_c('v-progress-circular',{staticStyle:{\"height\":\"inherit\"},attrs:{\"rotate\":\"-90\",\"size\":_vm.windowSettings.showCCKPLQuota ? 272 : 300,\"width\":\"24\",\"value\":_vm.quotas.studyArea.percentage,\"color\":_vm.quotas.studyArea.remainingQuotaInMinutes > 0 ? 'primary' : 'orange'}},[_c('div',[_c('div',{staticStyle:{\"color\":\"black\",\"font-weight\":\"bold\",\"font-size\":\"16px\"}},[_vm._v(\" Study Areas \")]),_c('div',{staticClass:\"mt-1 font-weight-bold\",staticStyle:{\"font-size\":\"40px\"}},[_vm._v(\" \"+_vm._s(_vm.quotas.studyArea.text)+\" \")])])])],1):_vm._e()])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div v-if=\"accountInfo\" class=\"account\" v-resize=\"setContentHeight\">\n <v-toolbar dark color=\"primary\" class=\"px-1\">\n <v-toolbar-title\n v-if=\"accountInfo.visitBookingMonthlyCountsForNonNlbUser\"\n xclass=\"text-capitalize\"\n >{{ accountInfo.name }}</v-toolbar-title\n >\n <v-toolbar-title v-else class=\"text-capitalize\">{{\n accountInfo.name\n }}</v-toolbar-title>\n\n <v-spacer></v-spacer>\n\n <v-btn icon @click=\"confirmLogout\">\n <v-icon>mdi-logout-variant</v-icon>\n </v-btn>\n </v-toolbar>\n\n <v-card\n v-if=\"accountInfo.accountType !== 'User' && visitBookingEnabled\"\n tile\n class=\"px-2 py-1 text-small font-weight-bold primary--text text-left\"\n style=\"\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n width: 100%;\n \"\n >\n Number of bookings left in this month:\n {{ accountInfo.visitBookingMonthlyCountsForNonNlbUser }}\n </v-card>\n <v-card\n v-else\n tile\n class=\"px-2 py-1 text-small font-weight-bold primary--text text-left\"\n style=\"\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n width: 100%;\n \"\n >Daily Booking Quota<span v-if=\"windowSettings.showCCKPLQuota\">s</span>\n </v-card>\n\n <div\n v-if=\"accountInfo.accountType !== 'User' && visitBookingEnabled\"\n class=\"px-2 py-1 pt-2 text-small font-weight-bold primary--text text-left\"\n style=\"position: absolute\"\n >\n Daily Booking Quota<span v-if=\"windowSettings.showCCKPLQuota\">s</span>\n </div>\n\n <div\n ref=\"accountScrollable\"\n class=\"scrollable text-center pt-2 pb-4\"\n :class=\"contentHeight > 300 ? 'flex-center-container' : ''\"\n >\n <div\n v-if=\"quotas && quotas.cckpl && windowSettings.showCCKPLQuota\"\n style=\"height: 167px\"\n >\n <v-progress-circular\n rotate=\"-90\"\n size=\"167\"\n width=\"15\"\n :value=\"quotas.cckpl.percentage\"\n :color=\"\n quotas.cckpl.remainingQuotaInMinutes > 0 ? 'primary' : 'orange'\n \"\n style=\"height: inherit\"\n >\n <div>\n <div style=\"color: black; font-weight: bold; font-size: 12px\">\n Breakout Zones\n </div>\n\n <div class=\"mt-1 font-weight-bold\" style=\"font-size: 22px\">\n {{ quotas.cckpl.text }}\n </div>\n </div>\n </v-progress-circular>\n </div>\n\n <div\n v-if=\"quotas && quotas.studyArea\"\n :style=\"\n windowSettings.showCCKPLQuota ? 'height: 272px' : 'height: 300px'\n \"\n class=\"pt-2\"\n >\n <v-progress-circular\n rotate=\"-90\"\n :size=\"windowSettings.showCCKPLQuota ? 272 : 300\"\n width=\"24\"\n :value=\"quotas.studyArea.percentage\"\n :color=\"\n quotas.studyArea.remainingQuotaInMinutes > 0 ? 'primary' : 'orange'\n \"\n style=\"height: inherit\"\n >\n <div>\n <div style=\"color: black; font-weight: bold; font-size: 16px\">\n Study Areas\n </div>\n\n <div class=\"mt-1 font-weight-bold\" style=\"font-size: 40px\">\n {{ quotas.studyArea.text }}\n </div>\n </div>\n </v-progress-circular>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport formatters from \"@/helpers/formatters\";\nimport { mapGetters } from \"vuex\";\n\nexport default {\n name: \"Account\",\n data: () => ({\n minWindowSize: 0,\n contentHeight: 0,\n }),\n computed: {\n ...mapGetters([\"visitBookingEnabled\"]),\n quotas() {\n if (\n this.accountInfo &&\n this.accountInfo.dailyBookingQuotas &&\n this.accountInfo.dailyBookingQuotas.length\n ) {\n return {\n cckpl: this.convertToViewModel(\n this.accountInfo.dailyBookingQuotas.find((x) => x.code === \"CCKPL\")\n ),\n studyArea: this.convertToViewModel(\n this.accountInfo.dailyBookingQuotas.find(\n (x) => x.code === \"StudyArea\"\n )\n ),\n };\n }\n\n return null;\n },\n },\n methods: {\n convertToViewModel(dailyBookingQuota) {\n if (!dailyBookingQuota) {\n return null;\n }\n\n const text =\n this.convertMinutesToHoursMinutes(\n dailyBookingQuota.remainingQuotaInMinutes\n ) +\n \" / \" +\n this.convertMinutesToHoursMinutes(dailyBookingQuota.quotaInMinutes);\n\n const percentage =\n (dailyBookingQuota.remainingQuotaInMinutes /\n dailyBookingQuota.quotaInMinutes) *\n 100;\n\n return {\n text,\n percentage,\n ...dailyBookingQuota,\n };\n },\n convertMinutesToHoursMinutes(minutes) {\n return formatters.convertMinutesToHoursMinutes(minutes);\n },\n setContentHeight() {\n if (this.$refs.accountScrollable) {\n const heights = this.heights();\n const contentHeight =\n heights.screen - heights.toolbar - heights.bottombar - 29 - 33 - heights.noticeBarHeight; //29px = \"Daily Booking Quotas\" header bar, 33px = \"Number of bookings left in this month:\"\n\n this.contentHeight = contentHeight;\n\n this.$refs.accountScrollable.style.height = contentHeight + \"px\";\n }\n },\n confirmLogout() {\n const yesCallback = async () => {\n this.logout();\n };\n\n this.updateSystemDialog({\n title: window.$msg.confirmLogout,\n // message: window.$msg.confirmLogout,\n actions: {\n actionType: \"YesOrNo\",\n yes: {\n callback: yesCallback,\n },\n },\n });\n },\n },\n activated() {\n this.$nextTick(() => this.setContentHeight());\n },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Account.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Account.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Account.vue?vue&type=template&id=2e743651&\"\nimport script from \"./Account.vue?vue&type=script&lang=js&\"\nexport * from \"./Account.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VIcon,VProgressCircular,VSpacer,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:[\n { 'inset-box-shadow': !_vm.isMobileOrStandaloneMode },\n _vm.onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial' ],staticStyle:{\"height\":\"100vh\",\"text-align\":\"center\",\"color\":\"white\"},attrs:{\"id\":\"login-page\"}},[_c('v-toolbar',{attrs:{\"dark\":\"\",\"color\":\"transparent\",\"elevation\":\"0\"}},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.goBack}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1)],1),_c('div',[_c('v-img',{staticStyle:{\"margin\":\"50px 80px\"},attrs:{\"src\":require(\"@/assets/images/mylibrary-logo.png\")}}),_c('div',{staticClass:\"ma-6\"},[_c('v-text-field',{staticClass:\"mb-2\",attrs:{\"elevation\":\"21\",\"dark\":\"\",\"hide-details\":\"\",\"background-color\":\"primary\",\"single-line\":\"\",\"solo\":\"\",\"clearable\":\"\",\"prepend-inner-icon\":\"mdi-account\"}},[_c('template',{slot:\"label\"},[_c('i',[_vm._v(\"my\")]),_vm._v(\"Library ID \")])],2),_c('v-text-field',{staticClass:\"mb-2\",attrs:{\"dark\":\"\",\"hide-details\":\"\",\"background-color\":\"primary\",\"label\":\"Password\",\"single-line\":\"\",\"solo\":\"\",\"clearable\":\"\",\"append-icon\":_vm.showPassword ? 'mdi-eye' : 'mdi-eye-off',\"type\":_vm.showPassword ? 'text' : 'password',\"prepend-inner-icon\":\"mdi-lock\"},on:{\"click:append\":function($event){_vm.showPassword = !_vm.showPassword}}}),_c('v-btn',{staticClass:\"mt-6\",attrs:{\"id\":\"btnLogin\",\"onfocus\":\"this.blur()\",\"color\":\"orange darken-2\",\"large\":\"\",\"fabx\":\"\",\"block\":\"\",\"dark\":\"\"},on:{\"click\":_vm.login}},[_c('v-icon'),_vm._v(\"Login \")],1),_vm._m(0),_vm._m(1),_vm._m(2)],1)],1)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"pt-9\"},[_c('a',{staticClass:\"white--text\",staticStyle:{\"font-size\":\"0.875rem\"},attrs:{\"href\":\"#\"}},[_vm._v(\"Don't have an account yet? Sign up!\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"pt-0\"},[_c('a',{staticClass:\"white--text\",staticStyle:{\"font-size\":\"0.875rem\"},attrs:{\"href\":\"#\"}},[_vm._v(\"Forgot everything?\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"pt-0\"},[_c('a',{staticClass:\"white--text\",staticStyle:{\"font-size\":\"0.875rem\"},attrs:{\"href\":\"#\"}},[_vm._v(\"Need help?\")])])}]\n\nexport { render, staticRenderFns }","// Test only\r\n\r\n<template>\r\n <div\r\n id=\"login-page\"\r\n style=\"height: 100vh; text-align: center; color: white\"\r\n :class=\"[\r\n { 'inset-box-shadow': !isMobileOrStandaloneMode },\r\n onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial',\r\n ]\"\r\n >\r\n <v-toolbar dark color=\"transparent\" elevation=\"0\">\r\n <v-btn icon @click=\"goBack\">\r\n <v-icon>mdi-close</v-icon>\r\n </v-btn>\r\n </v-toolbar>\r\n\r\n <div>\r\n <v-img\r\n style=\"margin: 50px 80px\"\r\n src=\"@/assets/images/mylibrary-logo.png\"\r\n ></v-img>\r\n\r\n <div class=\"ma-6\">\r\n <v-text-field\r\n elevation=\"21\"\r\n dark\r\n hide-details\r\n background-color=\"primary\"\r\n class=\"mb-2\"\r\n single-line\r\n solo\r\n clearable\r\n prepend-inner-icon=\"mdi-account\"\r\n >\r\n <template slot=\"label\"> <i>my</i>Library ID </template>\r\n </v-text-field>\r\n\r\n <v-text-field\r\n dark\r\n hide-details\r\n background-color=\"primary\"\r\n class=\"mb-2\"\r\n label=\"Password\"\r\n single-line\r\n solo\r\n clearable\r\n :append-icon=\"showPassword ? 'mdi-eye' : 'mdi-eye-off'\"\r\n @click:append=\"showPassword = !showPassword\"\r\n :type=\"showPassword ? 'text' : 'password'\"\r\n prepend-inner-icon=\"mdi-lock\"\r\n ></v-text-field>\r\n\r\n <v-btn\r\n @click=\"login\"\r\n id=\"btnLogin\"\r\n onfocus=\"this.blur()\"\r\n color=\"orange darken-2\"\r\n large\r\n fabx\r\n block\r\n dark\r\n class=\"mt-6\"\r\n >\r\n <v-icon></v-icon>Login\r\n </v-btn>\r\n\r\n <div class=\"pt-9\">\r\n <a href=\"#\" style=\"font-size: 0.875rem\" class=\"white--text\"\r\n >Don't have an account yet? Sign up!</a\r\n >\r\n </div>\r\n\r\n <div class=\"pt-0\">\r\n <a href=\"#\" style=\"font-size: 0.875rem\" class=\"white--text\"\r\n >Forgot everything?</a\r\n >\r\n </div>\r\n\r\n <div class=\"pt-0\">\r\n <a href=\"#\" style=\"font-size: 0.875rem\" class=\"white--text\"\r\n >Need help?</a\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapState, mapGetters, mapMutations } from \"vuex\";\r\n\r\nexport default {\r\n name: \"Login\",\r\n data: () => ({\r\n showPassword: false,\r\n }),\r\n computed: {\r\n ...mapState([\"showLoginPage\"]),\r\n ...mapGetters([\"authenticated\"]),\r\n },\r\n methods: {\r\n ...mapMutations([\"updateAccountInfo\", \"updateShowLoginPage\"]),\r\n iconClicked() {\r\n if (!this.authenticated) {\r\n this.updateShowLoginPage(true);\r\n }\r\n },\r\n login() {\r\n // this.updateAccountInfo(null);\r\n\r\n // setTimeout(() => {\r\n // const returnUrl = this.$route.query.redirectFrom;\r\n\r\n // if (returnUrl) {\r\n // this.$router.push(returnUrl);\r\n // } else {\r\n // this.goHome();\r\n // }\r\n // }, 500);\r\n\r\n this.$nextTick(() => {\r\n const returnUrl = this.$route.query.redirectFrom;\r\n\r\n if (returnUrl) {\r\n this.$router.push(returnUrl);\r\n } else {\r\n this.goHome();\r\n }\r\n });\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style>\r\n#login-page .v-input__prepend-inner .v-icon {\r\n color: white !important;\r\n}\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=77691080&\"\nimport script from \"./Login.vue?vue&type=script&lang=js&\"\nexport * from \"./Login.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VIcon,VImg,VTextField,VToolbar})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}]},[_c('div',[_c('v-toolbar',{attrs:{\"dark\":\"\",\"color\":\"primary\",\"classx\":\"px-1\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"dark\":\"\"},on:{\"click\":_vm.goBack}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',[_vm._v(\"Maps\")])],1),_c('v-tabs',{attrs:{\"fixed-tabs\":\"\",\"background-color\":\"primary\",\"dark\":\"\",\"height\":\"40\"},model:{value:(_vm.mapTabs),callback:function ($$v) {_vm.mapTabs=$$v},expression:\"mapTabs\"}},[_c('v-tab',{staticClass:\"subtitle-1 font-weight-bold text-capitalize\"},[_vm._v(\"Seat Plan\")]),_c('v-tab',{staticClass:\"subtitle-1 font-weight-bold text-capitalize\"},[_vm._v(\"Floor Plan\")])],1),_c('v-divider')],1),(_vm.mapFileNames)?_c('div',{ref:\"viewMapsScrollable\",staticClass:\"scrollable\"},[_c('v-tabs-items',{staticStyle:{\"height\":\"inherit\"},attrs:{\"id\":\"viewMapMaps\"},model:{value:(_vm.mapTabs),callback:function ($$v) {_vm.mapTabs=$$v},expression:\"mapTabs\"}},[_c('v-tab-item',{staticClass:\"flex-center-containerx pa-5\",staticStyle:{\"height\":\"inherit\"}},[_c('v-img',{style:(_vm.imageStyle),attrs:{\"src\":(\"\" + _vm.areaImagePath + (_vm.mapFileNames.find(function (x) { return x.includes('-sp'); }))),\"contain\":\"\"}})],1),_c('v-tab-item',{staticClass:\"flex-center-containerx pa-5\",staticStyle:{\"height\":\"inherit\"}},[_c('v-img',{style:(_vm.imageStyle),attrs:{\"src\":(\"\" + _vm.areaImagePath + (_vm.mapFileNames.find(function (x) { return x.includes('-fp'); }))),\"contain\":\"\"}})],1)],1)],1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-resize=\"setContentHeight\">\r\n <div>\r\n <v-toolbar dark color=\"primary\" classx=\"px-1\">\r\n <v-btn icon dark @click=\"goBack\">\r\n <v-icon>mdi-arrow-left</v-icon>\r\n </v-btn>\r\n <v-toolbar-title>Maps</v-toolbar-title>\r\n </v-toolbar>\r\n\r\n <v-tabs v-model=\"mapTabs\" fixed-tabs background-color=\"primary\" dark height=\"40\">\r\n <v-tab class=\"subtitle-1 font-weight-bold text-capitalize\">Seat Plan</v-tab>\r\n <v-tab class=\"subtitle-1 font-weight-bold text-capitalize\">Floor Plan</v-tab>\r\n </v-tabs>\r\n\r\n <v-divider />\r\n </div>\r\n\r\n <div v-if=\"mapFileNames\" ref=\"viewMapsScrollable\" class=\"scrollable\">\r\n <v-tabs-items id=\"viewMapMaps\" v-model=\"mapTabs\" style=\"height: inherit\">\r\n <v-tab-item class=\"flex-center-containerx pa-5\" style=\"height: inherit\">\r\n <v-img :src=\"`${areaImagePath}${mapFileNames.find(x => x.includes('-sp'))}`\" contain :style=\"imageStyle\"></v-img>\r\n </v-tab-item>\r\n\r\n <v-tab-item class=\"flex-center-containerx pa-5\" style=\"height: inherit\">\r\n <v-img :src=\"`${areaImagePath}${mapFileNames.find(x => x.includes('-fp'))}`\" contain :style=\"imageStyle\"></v-img>\r\n </v-tab-item>\r\n </v-tabs-items>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"ViewMaps\",\r\n props: {\r\n mapFileNames: Array,\r\n },\r\n data: () => ({\r\n mapTabs: 0,\r\n contentHeight: 0\r\n }),\r\n computed: {\r\n imageStyle() {\r\n return this.contentHeight ? { height: (this.contentHeight - 40) + \"px\" } : null;\r\n }\r\n },\r\n methods: {\r\n setContentHeight() {\r\n if (this.$refs.viewMapsScrollable) {\r\n const heights = this.heights();\r\n const contentHeight = heights.screen - heights.toolbar - heights.tabbar - heights.noticeBarHeight;\r\n this.contentHeight = contentHeight;\r\n\r\n this.$refs.viewMapsScrollable.style.height = contentHeight + \"px\";\r\n }\r\n },\r\n },\r\n activated() {\r\n this.$nextTick(() => this.setContentHeight());\r\n\r\n this.mapTabs = 0;\r\n },\r\n deactivated() {\r\n this.mapTabs = 0;\r\n },\r\n};\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ViewMaps.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ViewMaps.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ViewMaps.vue?vue&type=template&id=8b78af24&\"\nimport script from \"./ViewMaps.vue?vue&type=script&lang=js&\"\nexport * from \"./ViewMaps.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VDivider,VIcon,VImg,VTab,VTabItem,VTabs,VTabsItems,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('QRCodeScanner',{attrs:{\"state\":_vm.state,\"title\":_vm.title}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticStyle:{\"height\":\"100%\",\"background-color\":\"black\"}},[_c('div',{staticStyle:{\"position\":\"relative\",\"z-index\":\"1\"}},[_c('v-toolbar',{attrs:{\"dark\":\"\",\"color\":\"black\",\"classs\":\"primary--text\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"classs\":\"primary--text\"},on:{\"click\":_vm.goBack}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',[_c('strong',[_vm._v(_vm._s(_vm.title || \"Scan QR code\"))])])],1)],1),_vm._m(0),_c('div',{staticClass:\"fixed-center\"},[_c('v-icon',{staticClass:\"fixed-center\",attrs:{\"size\":\"50vh\",\"color\":_vm.videoLoaded ? '' : 'white'}},[_vm._v(\"mdi-crop-free\")])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('video',{staticClass:\"fixed-center3\",attrs:{\"id\":\"video-preview\"}}),_c('canvas',{staticClass:\"fixed-center\",staticStyle:{\"opacity\":\"0\"},attrs:{\"id\":\"qr-canvas\"}})])}]\n\nexport { render, staticRenderFns }","import jsQR from \"jsqr\"\r\n// import logger from \"@/helpers/logger\"\r\n\r\nexport default {\r\n async startQRScanning(successCallback, completeCallback, dialog, videoLoadedCallback) {\r\n const unableToAccessCameraMsg = window.$msg.cameraAccessDenied;\r\n\r\n try {\r\n let self = this;\r\n\r\n if (self.scanQRTimeout) {\r\n return;\r\n }\r\n\r\n const options = await this.getCameraOptions();\r\n const option = options && options.length ? options[options.length - 1] : { facingMode: \"environment\" };\r\n // console.debug(\"Selected camera option\", option);\r\n\r\n /* Ask for \"environnement\" (rear) camera if available (mobile), will fallback to only available otherwise (desktop).\r\n * User will be prompted if (s)he allows camera to be started */\r\n // navigator.mediaDevices.getUserMedia({ video: { facingMode: \"environment\" }, audio: false }).then(function (stream) {\r\n navigator.mediaDevices.getUserMedia({ video: option, audio: false }).then(function (stream) {\r\n if (videoLoadedCallback) {\r\n videoLoadedCallback();\r\n }\r\n\r\n var video = document.getElementById(\"video-preview\");\r\n video.srcObject = stream;\r\n video.setAttribute(\"playsinline\", true); /* otherwise iOS safari starts fullscreen */\r\n video.play();\r\n\r\n self.scanQRTimeout = setTimeout(tick, 100);\r\n })\r\n .catch(function (error) {\r\n dialog({ title: unableToAccessCameraMsg, message: error })\r\n\r\n completeCallback()\r\n\r\n // logger.logError(\"Browser QRScanner - getUserMedia - error callback\", error)\r\n // alert(error); /* User probably refused to grant access*/\r\n });\r\n\r\n let video = this.video = document.getElementById(\"video-preview\");\r\n var qrCanvasElement = document.getElementById(\"qr-canvas\");\r\n var qrCanvas = qrCanvasElement.getContext(\"2d\");\r\n // var loadingMessage = document.getElementById(\"loadingMessage\");\r\n\r\n function tick() {\r\n // loadingMessage.innerText = \"Loading video...\"\r\n\r\n if (video.readyState === video.HAVE_ENOUGH_DATA) {\r\n // loadingMessage.hidden = true;\r\n\r\n //These 2 lines are very important as it somehow increase QR detection\r\n qrCanvasElement.height = video.videoHeight;\r\n qrCanvasElement.width = video.videoWidth;\r\n\r\n qrCanvas.drawImage(video, 0, 0, qrCanvasElement.width, qrCanvasElement.height);\r\n\r\n var code = null;\r\n\r\n //1. jsQR\r\n var imageData = qrCanvas.getImageData(0, 0, qrCanvasElement.width, qrCanvasElement.height);\r\n\r\n var codeData = jsQR(imageData.data, imageData.width, imageData.height, {\r\n inversionAttempts: \"dontInvert\"\r\n });\r\n\r\n if (codeData && codeData.data) {\r\n code = codeData.data;\r\n }\r\n\r\n //Allow rescanning the same barcode only after 1 second(s)\r\n if (code) {\r\n if (!self.scannedQRCodeTime || (new Date()).getTime() - self.scannedQRCodeTime.getTime() > 1000) {\r\n self.scannedQRCodeTime = new Date();\r\n successCallback(code);\r\n completeCallback()\r\n }\r\n }\r\n }\r\n\r\n self.scanQRTimeout = setTimeout(tick, 100);\r\n }\r\n }\r\n catch (ex) {\r\n // logger.logError(\"Browser QRScanner - startQRScanning - exception\", ex)\r\n\r\n let cameraAccessDeniedFriendlyMessage = window.$msg.suggessIosSafari;\r\n // let cameraAccessDeniedFriendlyMessage = \"Your browser either does not have the permissions required to access the camera or it does not support WebRTC (Web Real-Time Communications). <br/><br/>Please grant your browser camera access or update it. Trying out different browsers might help too!\"\r\n if (/getUserMedia/i.test(ex)) {\r\n dialog({ title: unableToAccessCameraMsg, message: cameraAccessDeniedFriendlyMessage })\r\n }\r\n else {\r\n dialog({ title: unableToAccessCameraMsg, message: ex })\r\n }\r\n\r\n completeCallback()\r\n }\r\n },\r\n getCameraOptions() {\r\n const promise = new Promise(function (resolve, reject) {\r\n var options = [];\r\n\r\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\r\n try {\r\n navigator.mediaDevices.enumerateDevices()\r\n .then(function (devices) {\r\n devices.forEach(function (device) {\r\n if (device.kind === 'videoinput') {\r\n if (device.label.toLowerCase().search(\"back\") > -1) {\r\n options.push({ deviceId: { exact: device.deviceId }, facingMode: 'environment' });\r\n }\r\n }\r\n // console.log(\"getCameraOption - \" + device.kind + \": \" + device.label + \" id = \" + device.deviceId);\r\n });\r\n\r\n resolve(options);\r\n });\r\n }\r\n catch (e) {\r\n console.log(\"getCameraOption exception\", e);\r\n resolve(options);\r\n }\r\n }\r\n else {\r\n console.log(\"getCameraOption failed - no navigator.mediaDevices.enumerateDevices\");\r\n resolve(options);\r\n }\r\n });\r\n\r\n return promise;\r\n },\r\n stopQRScanning() {\r\n let self = this;\r\n\r\n if (self.scanQRTimeout) {\r\n clearTimeout(self.scanQRTimeout)\r\n self.scanQRTimeout = null;\r\n }\r\n\r\n if (this.video) {\r\n this.video.pause();\r\n this.video.src = \"\";\r\n if (this.video.srcObject) {\r\n this.video.srcObject.getVideoTracks().forEach(track => track.stop());\r\n }\r\n }\r\n },\r\n toggleTouchLight(on) {\r\n }\r\n}","<template>\r\n <div>\r\n <div style=\"height: 100%; background-color: black\">\r\n <div style=\"position: relative; z-index: 1\">\r\n <v-toolbar dark color=\"black\" classs=\"primary--text\">\r\n <v-btn icon @click=\"goBack\" classs=\"primary--text\">\r\n <v-icon>mdi-arrow-left</v-icon>\r\n </v-btn>\r\n\r\n <v-toolbar-title>\r\n <strong>{{ title || \"Scan QR code\" }}</strong>\r\n </v-toolbar-title>\r\n </v-toolbar>\r\n </div>\r\n\r\n <div>\r\n <!-- <div\r\n id=\"loadingMessage\"\r\n style=\"position: absolute\"\r\n >Unable to access video stream (please make sure you have a webcam enabled)</div>-->\r\n <!--Added to ensure QR camera frame displays correctly across different browsers-->\r\n <video id=\"video-preview\" class=\"fixed-center3\"></video>\r\n <canvas id=\"qr-canvas\" class=\"fixed-center\" style=\"opacity: 0\"></canvas>\r\n </div>\r\n\r\n <!-- Don't understand why -->\r\n <div class=\"fixed-center\">\r\n <v-icon class=\"fixed-center\" size=\"50vh\" :color=\"videoLoaded ? '' : 'white'\">mdi-crop-free</v-icon>\r\n </div>\r\n\r\n <!-- TODO: Remove these -->\r\n <!-- <div class=\"text-center\" style=\"position: fixed; bottom: 8vh; width: 100vw\">\r\n <v-btn @click=\"mockQr('invalid')\" fab depressed class=\"bg-translucent ma-2\">\r\n <v-icon color=\"white\">mdi-alert-circle-outline</v-icon>\r\n </v-btn>\r\n\r\n <v-btn @click=\"mockQr('trl')\" fab depressed class=\"bg-translucent ma-2\">\r\n <v-icon color=\"white\">mdi-checkbox-marked-circle-outline</v-icon>\r\n </v-btn>\r\n\r\n <v-btn @click=\"mockQr('jwpl')\" fab depressed class=\"bg-translucent ma-2\">\r\n <v-icon color=\"white\">mdi-close-circle-outline</v-icon>\r\n </v-btn>\r\n </div> -->\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapMutations } from \"vuex\";\r\nimport qrScannerWeb from \"@/helpers/qrScannerWeb\";\r\nimport animator from \"@/helpers/animator\";\r\n\r\nexport default {\r\n name: \"QRCodeScanner\",\r\n props: {\r\n state: String,\r\n title: String\r\n },\r\n data() {\r\n return {\r\n audioBeep: null,\r\n videoLoaded: false,\r\n activated: false,\r\n };\r\n },\r\n methods: {\r\n ...mapMutations([\"updateQRCode\"]),\r\n mockQr(code) {\r\n const vm = this;\r\n\r\n let qrCode =\r\n \"https://www.nlb.gov.sg/seatbooking/?xloc=NLB.JWPL.3.ExpressionCorner\";\r\n\r\n if (code === \"jwpl\") {\r\n qrCode =\r\n \"https://www.nlb.gov.sg/seatbooking/?loc=NLB.JWPL.3.ExpressionCorner\";\r\n } else if (code === \"trl\") {\r\n qrCode =\r\n \"https://www.nlb.gov.sg/seatbooking/?loc=NLB.TRL.5.StudyLounge\";\r\n }\r\n\r\n vm.beep();\r\n\r\n setTimeout(() => {\r\n vm.updateQRCode({\r\n value: qrCode,\r\n state: this.state,\r\n });\r\n }, 10);\r\n\r\n vm.goBack();\r\n },\r\n startQRScanning() {\r\n //When this page is activated, QR scanner will start scanning,\r\n //the detected QR code (URL), will be stored in the store.QRCode in { value: text, state: this.state, } format\r\n //Next, the QRCode watcher of the component that initiated the QR scanning will handle it based on the state property in the result\r\n\r\n let vm = this;\r\n\r\n let successCallback = (text) => {\r\n vm.beep();\r\n\r\n setTimeout(() => {\r\n vm.updateQRCode({\r\n value: text,\r\n state: this.state,\r\n });\r\n }, 10);\r\n };\r\n\r\n let completeCallback = () => {\r\n vm.goBack();\r\n };\r\n\r\n qrScannerWeb.startQRScanning(\r\n successCallback,\r\n completeCallback,\r\n this.updateSystemDialog,\r\n () => {\r\n vm.videoLoaded = true;\r\n }\r\n );\r\n },\r\n stopQRScanning() {\r\n qrScannerWeb.stopQRScanning();\r\n this.videoLoaded = false;\r\n },\r\n beep(silentBeep) {\r\n let audioBeep = this.audioBeep;\r\n\r\n if (!audioBeep) {\r\n audioBeep = new Audio(`${this.audioPath}beep.mp3`)\r\n \r\n // audioBeep = new Audio(\r\n // \"data:audio/wav;base64,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qJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=\"\r\n // );\r\n }\r\n\r\n if (silentBeep) {\r\n audioBeep.volume = 0;\r\n } else {\r\n audioBeep.volume = 1;\r\n }\r\n\r\n audioBeep.play();\r\n },\r\n },\r\n activated() {\r\n this.startQRScanning();\r\n // console.debug(\"state\", this.state);\r\n },\r\n deactivated() {\r\n this.stopQRScanning();\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.bg-translucent {\r\n background-color: rgba(0, 0, 0, 0.5) !important;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QRCodeScanner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QRCodeScanner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./QRCodeScanner.vue?vue&type=template&id=af85e3e2&scoped=true&\"\nimport script from \"./QRCodeScanner.vue?vue&type=script&lang=js&\"\nexport * from \"./QRCodeScanner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./QRCodeScanner.vue?vue&type=style&index=0&id=af85e3e2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"af85e3e2\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VIcon,VToolbar,VToolbarTitle})\n","<template>\r\n <QRCodeScanner :state=\"state\" :title=\"title\" />\r\n</template>\r\n\r\n<script>\r\nimport QRCodeScanner from \"@/components/QRCodeScanner\";\r\n\r\nexport default {\r\n name: \"ScanQRCode\",\r\n props: {\r\n state: String, //state is property that will be included into the result of scanning, so different handlings can be applied\r\n title: String\r\n },\r\n components: {\r\n QRCodeScanner,\r\n },\r\n activated() {\r\n this.setStatusBackgroundBarColor(\"#000000\");\r\n },\r\n deactivated() {\r\n this.setThemeColorByMode();\r\n },\r\n};\r\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScanQRCode.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScanQRCode.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ScanQRCode.vue?vue&type=template&id=64e87fc7&\"\nimport script from \"./ScanQRCode.vue?vue&type=script&lang=js&\"\nexport * from \"./ScanQRCode.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}],class:[\n { 'inset-box-shadow': !_vm.isMobileOrStandaloneMode },\n _vm.onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial' ],staticStyle:{\"color\":\"white\"},attrs:{\"id\":\"helpDiv\"}},[_c('v-toolbar',{attrs:{\"id\":\"helpHeader\",\"dark\":\"\",\"color\":\"transparent\",\"elevation\":\"0\"}},[_c('v-btn',{staticStyle:{\"z-index\":\"1\"},attrs:{\"icon\":\"\"},on:{\"click\":_vm.goBack}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',{staticClass:\"text-center headlinex\",staticStyle:{\"position\":\"absolute\",\"left\":\"-4px\",\"width\":\"100vw\"}},[_c('strong',[_vm._v(\"Getting Started\")])])],1),_c('div',{ref:\"helpScrollable\",staticClass:\"scrollable box-shadow-inset\",staticStyle:{\"overflow-x\":\"hidden\"}},[_c('v-list',{staticClass:\"mt-0\",attrs:{\"dense\":\"\",\"three-line\":\"\",\"flat\":\"\",\"tile\":\"\",\"dark\":\"\",\"color\":\"transparent\",\"disabledx\":\"\"}},[_c('v-list-item-group',[(_vm.windowSettings.showCovidInfo)?_c('v-list-item',{key:\"1\",attrs:{\"ripple\":false}},[_c('v-row',{staticStyle:{\"color\":\"#f44336\",\"background-color\":\"white\"}},[_c('v-col',{attrs:{\"cols\":_vm.leftCols}},[_c('v-btn',{attrs:{\"fab\":\"\",\"dark\":\"\",\"color\":\"red\",\"small\":\"\",\"elevation\":\"0\"}},[_c('v-icon',[_vm._v(\"mdi-alert-outline\")])],1)],1),_c('v-col',{staticClass:\"font-weight-bold text-shadowx\",attrs:{\"cols\":_vm.rightCols}},[_c('v-list-item-content',[_vm._v(\"From 1 December 2021, Vaccination-Differentiated Safe Management Measures will be implemented at all libraries, Archives Reading Room, Former Ford Factory and National Library Building’s Level 5 Study Lounge.\")])],1)],1)],1):_vm._e(),(_vm.windowSettings.showCovidInfo)?_c('v-col',{staticClass:\"pa-0\",attrs:{\"offset\":_vm.leftCols}},[_c('v-divider')],1):_vm._e(),_c('v-list-item',{key:\"2\",attrs:{\"ripple\":false}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.leftCols}},[_c('v-btn',{attrs:{\"fab\":\"\",\"dark\":\"\",\"color\":\"orange\",\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-magnify\")])],1)],1),_c('v-col',{attrs:{\"cols\":_vm.rightCols}},[_c('v-list-item-content',[_c('p',{staticClass:\"font-weight-bold\"},[_vm._v(\"Search for booking slots\")]),_c('ul',[(_vm.visitBookingEnabled)?_c('li',[_vm._v(\" Click the button to select the type of booking that you need. \")]):_vm._e(),_c('li',[_vm._v(\" Search for booking slots that best match your criteria. \")]),_c('li',[_vm._v(\" Seats may be booked one day in advance. Booking slots are open at 12pm daily. \")])])])],1)],1)],1),_c('v-col',{staticClass:\"pa-0\",attrs:{\"offset\":_vm.leftCols}},[_c('v-divider')],1),_c('v-list-item',{key:\"3\",attrs:{\"ripple\":false}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.leftCols}},[_c('v-btn',{attrs:{\"fab\":\"\",\"dark\":\"\",\"color\":\"orange\",\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-calendar-check\")])],1)],1),_c('v-col',{attrs:{\"cols\":_vm.rightCols}},[_c('v-list-item-content',[_c('p',{staticClass:\"font-weight-bold\"},[_vm._v(\"Book a seat\"),(_vm.visitBookingEnabled)?_c('span',[_vm._v(\"/visit\")]):_vm._e()]),_c('ul',[_c('li',[_vm._v(\" Login via mylibrary username to make a booking. An email confirming your transaction(s) will be sent to the email address associated with the mylibrary username. \")]),_c('li',[_vm._v(\" Do note that the email may appear in your Junk/Spam inbox. \")])]),_c('p',{staticClass:\"font-weight-bold pt-3\"},[_vm._v(\"Seat booking\")]),_c('ul',[_c('li',[_vm._v(\" Your seat will be assigned by the system, check “My Bookings†tab for your seat number. \")]),_c('li',[_vm._v(\" Seat booking timeslots are at 15-minute intervals. Minimum booking duration is 30 minutes. \"),(_vm.windowSettings.showBloombergInfo)?_c('span',[_vm._v(\"(For Bloomberg Terminal, booking timeslots are at 1-hour intervals only)\")]):_vm._e()]),_c('li',[_vm._v(\" If the seat you have booked is occupied by another patron, please show your booking confirmation to the patron. Do remember to take your belongings with you once your booking ends. Another patron may have booked the seat after you. \")]),(_vm.visitBookingEnabled)?_c('li',[_vm._v(\" If you have booked a seat beforehand, you do not need to make a separate visit booking to the libraries included in this seat booking system. Show your seat booking details to enter the library. \")]):_vm._e()]),(_vm.visitBookingEnabled)?_c('p',{staticClass:\"font-weight-bold pt-3\"},[_vm._v(\"Visit booking\")]):_vm._e(),_c('ul',[(_vm.visitBookingEnabled)?_c('li',[_vm._v(\" Visit booking timeslots are dependent on the site you are visiting. Please refer to \"),_c('div',{staticStyle:{\"word-break\":\"break-all\",\"line-height\":\"24px\"}},[_c('a',{staticClass:\"white--text\",attrs:{\"href\":_vm.planYourVisitLink}},[_vm._v(\" \"+_vm._s(_vm.planYourVisitLink.replace(\"https://www.\", \"\"))+\" \")])]),_vm._v(\" for more details. \")]):_vm._e(),(_vm.visitBookingEnabled)?_c('li',[_vm._v(\" Visit bookings are limited to 1 booking per branch per day. \")]):_vm._e()])])],1)],1)],1),_c('v-col',{staticClass:\"pa-0\",attrs:{\"offset\":_vm.leftCols}},[_c('v-divider')],1),_c('v-list-item',{key:\"4\",attrs:{\"ripple\":false}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.leftCols}},[_c('v-btn',{attrs:{\"fab\":\"\",\"dark\":\"\",\"color\":\"orange\",\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-checkbox-marked-circle-outline\")])],1)],1),_c('v-col',{attrs:{\"cols\":_vm.rightCols}},[_c('v-list-item-content',[_c('p',{staticClass:\"font-weight-bold\"},[_vm._v(\" Check-in at your seat \"),(_vm.visitBookingEnabled)?_c('span',[_vm._v(\"(Not required for visits)\")]):_vm._e()]),_c('ul',[_c('li',[_vm._v(\" Check-ins are needed to confirm that you are showing up for the booking made. You will need to verify that you are on-site at the library. \")]),_c('li',[_vm._v(\" There are two ways to check-in: \"),_c('ol',[_c('li',[_vm._v(\" Allow the webpage to verify that your current location is at the library you have made a booking for, or \")]),_c('li',[_vm._v(\" Click the orange icon in the bottom-right corner, then scan the QR code placed at the area you have booked for or at your assigned seat. \")])])]),_c('li',[_vm._v(\" You may check-in 15 mins before your booking starts to secure it. \")]),_c('li',[_vm._v(\" You must check-in within 14 minutes from the start time of your booking, or your booking will be automatically cancelled. [For example, if your booking begins at 1pm, you have until 1:14pm to check-in]. \")])])])],1)],1)],1),_c('v-col',{staticClass:\"pa-0\",attrs:{\"offset\":_vm.leftCols}},[_c('v-divider')],1),_c('v-list-item',{key:\"5\",attrs:{\"ripple\":false}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.leftCols}},[_c('v-btn',{attrs:{\"fab\":\"\",\"dark\":\"\",\"color\":\"orange\",\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-expand-all\")])],1)],1),_c('v-col',{attrs:{\"cols\":_vm.rightCols}},[_c('v-list-item-content',[_c('p',{staticClass:\"font-weight-bold\"},[_vm._v(\" Extend your seat booking\"),(_vm.windowSettings.showBloombergInfo)?_c('span',[_vm._v(\" (Not applicable for Bloomberg Terminal bookings)\")]):_vm._e()]),_c('ul',[_c('li',[_vm._v(\" You can extend the booking for your seat only in the last 15 minutes of your booking. \")]),_c('li',[_vm._v(\" Seat bookings can be extended for 1 hour each time, and only if your current seat is available for the next hour. \")]),_c('li',[_vm._v(\" If you have run out of daily booking quota, you can still make up to 2 additional extensions each day. \")])])])],1)],1)],1),_c('v-col',{staticClass:\"pa-0\",attrs:{\"offset\":_vm.leftCols}},[_c('v-divider')],1),_c('v-list-item',{key:\"6\",attrs:{\"ripple\":false}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.leftCols}},[_c('v-btn',{attrs:{\"fab\":\"\",\"dark\":\"\",\"color\":\"orange\",\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-close-thick\")])],1)],1),_c('v-col',{attrs:{\"cols\":_vm.rightCols}},[_c('v-list-item-content',[_c('p',{staticClass:\"font-weight-bold\"},[_vm._v(\"Cancel your bookings\")]),_c('ul',[_c('li',[_vm._v(\"Cancel bookings that you no longer need.\")]),_c('li',[_vm._v(\" At the point of cancellation, any unused booking timeslots will be returned to your daily booking quota.\"),(_vm.windowSettings.showBloombergInfo)?_c('span',[_vm._v(\" However, if you do not show up for your Bloomberg Terminal bookings, you will not be able to make another booking that day.\")]):_vm._e()]),_c('li',[_vm._v(\" If you cancel a seat booking that has already started, it will be a partial cancellation. Your cancelled timeslots can be booked by other users. \")]),(_vm.windowSettings.showBloombergInfo)?_c('li',[_vm._v(\" Bloomberg Terminal bookings: If you cancel a booking that had already started, or if your booking was automatically cancelled by the system due to elapsed time, you will not be able to re-book for that day. Bookings made for the Bloomberg Terminal are separate from the Seat Booking quota. \")]):_vm._e(),(_vm.visitBookingEnabled)?_c('li',[_vm._v(\" Visit quota will not be returned once booking has already started. \")]):_vm._e()])])],1)],1)],1),_c('v-col',{staticClass:\"pa-0\",attrs:{\"offset\":_vm.leftCols}},[_c('v-divider')],1),_c('v-list-item',{key:\"7\",attrs:{\"ripple\":false}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.leftCols}},[_c('v-btn',{attrs:{\"fab\":\"\",\"dark\":\"\",\"color\":\"orange\",\"small\":\"\"},on:{\"click\":_vm.gotoOnsiteDetector}},[_c('v-icon',[_vm._v(\"mdi-thumb-up-outline\")])],1)],1),_c('v-col',{attrs:{\"cols\":_vm.rightCols}},[_c('v-list-item-content',[_vm._v(\" The Seat Booking System is used to manage the use of library seats in selected areas. Help us improve this system by leaving your feedback at \"),_c('div',{staticStyle:{\"word-break\":\"break-all\",\"line-height\":\"24px\"}},[_c('a',{staticClass:\"white--text\",attrs:{\"href\":_vm.feedbackLink}},[_vm._v(\" \"+_vm._s(_vm.feedbackLink.replace(\"https://\", \"\"))+\" \")])])])],1)],1)],1)],1)],1)],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <div\r\n v-resize=\"setContentHeight\"\r\n id=\"helpDiv\"\r\n style=\"color: white\"\r\n :class=\"[\r\n { 'inset-box-shadow': !isMobileOrStandaloneMode },\r\n onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial',\r\n ]\"\r\n >\r\n <v-toolbar id=\"helpHeader\" dark color=\"transparent\" elevation=\"0\">\r\n <v-btn icon @click=\"goBack\" style=\"z-index: 1\">\r\n <v-icon>mdi-arrow-left</v-icon>\r\n </v-btn>\r\n\r\n <v-toolbar-title\r\n style=\"position: absolute; left: -4px; width: 100vw\"\r\n class=\"text-center headlinex\"\r\n >\r\n <strong>Getting Started</strong>\r\n </v-toolbar-title>\r\n </v-toolbar>\r\n\r\n <div\r\n ref=\"helpScrollable\"\r\n class=\"scrollable box-shadow-inset\"\r\n style=\"overflow-x: hidden\"\r\n >\r\n <v-list\r\n dense\r\n three-line\r\n flat\r\n tile\r\n dark\r\n color=\"transparent\"\r\n class=\"mt-0\"\r\n disabledx\r\n >\r\n <v-list-item-group>\r\n <v-list-item\r\n v-if=\"windowSettings.showCovidInfo\"\r\n key=\"1\"\r\n :ripple=\"false\"\r\n >\r\n <v-row style=\"color: #f44336; background-color: white\">\r\n <v-col :cols=\"leftCols\">\r\n <v-btn fab dark color=\"red\" small elevation=\"0\">\r\n <v-icon>mdi-alert-outline</v-icon>\r\n </v-btn>\r\n </v-col>\r\n <v-col :cols=\"rightCols\" class=\"font-weight-bold text-shadowx\">\r\n <v-list-item-content\r\n >From 1 December 2021, Vaccination-Differentiated Safe\r\n Management Measures will be implemented at all libraries,\r\n Archives Reading Room, Former Ford Factory and National\r\n Library Building’s Level 5 Study\r\n Lounge.</v-list-item-content\r\n >\r\n </v-col>\r\n </v-row>\r\n </v-list-item>\r\n <v-col\r\n v-if=\"windowSettings.showCovidInfo\"\r\n :offset=\"leftCols\"\r\n class=\"pa-0\"\r\n >\r\n <v-divider></v-divider>\r\n </v-col>\r\n\r\n <!-- <v-list-item\r\n v-if=\"windowSettings.showBloombergEndingSoonInfo\"\r\n key=\"111\"\r\n :ripple=\"false\"\r\n >\r\n <v-row\r\n style=\"background-color: white\"\r\n :style=\"'color: ' + $vuetify.theme.themes.light.primary\"\r\n >\r\n <v-col :cols=\"leftCols\">\r\n <v-btn fab dark color=\"primary\" small elevation=\"0\">\r\n <v-icon>mdi-information-outline</v-icon>\r\n </v-btn>\r\n </v-col>\r\n <v-col :cols=\"rightCols\" class=\"font-weight-bold text-shadowx\">\r\n <v-list-item-content\r\n >We are sorry that Bloomberg Terminal service will not be\r\n available from 27 October 2021. If you have any queries,\r\n please send an email to our Customer Relations Officer at\r\n <a href=\"mailto: enquiry@nlb.gov.sg\"\r\n >enquiry@nlb.gov.sg</a\r\n ></v-list-item-content\r\n >\r\n </v-col>\r\n </v-row>\r\n </v-list-item>\r\n <v-col\r\n v-if=\"windowSettings.showBloombergEndingSoonInfo\"\r\n :offset=\"leftCols\"\r\n class=\"pa-0\"\r\n >\r\n <v-divider></v-divider>\r\n </v-col> -->\r\n\r\n <v-list-item key=\"2\" :ripple=\"false\">\r\n <v-row>\r\n <v-col :cols=\"leftCols\">\r\n <v-btn fab dark color=\"orange\" small>\r\n <v-icon>mdi-magnify</v-icon>\r\n </v-btn>\r\n </v-col>\r\n <v-col :cols=\"rightCols\">\r\n <v-list-item-content>\r\n <p class=\"font-weight-bold\">Search for booking slots</p>\r\n <ul>\r\n <li v-if=\"visitBookingEnabled\">\r\n Click the button to select the type of booking that you\r\n need.\r\n </li>\r\n <li>\r\n Search for booking slots that best match your criteria.\r\n </li>\r\n <li>\r\n Seats may be booked one day in advance. Booking slots are open at 12pm daily.\r\n </li>\r\n </ul>\r\n </v-list-item-content>\r\n </v-col>\r\n </v-row>\r\n </v-list-item>\r\n <v-col :offset=\"leftCols\" class=\"pa-0\">\r\n <v-divider></v-divider>\r\n </v-col>\r\n\r\n <v-list-item key=\"3\" :ripple=\"false\">\r\n <v-row>\r\n <v-col :cols=\"leftCols\">\r\n <v-btn fab dark color=\"orange\" small>\r\n <v-icon>mdi-calendar-check</v-icon>\r\n </v-btn>\r\n </v-col>\r\n <v-col :cols=\"rightCols\">\r\n <v-list-item-content>\r\n <p class=\"font-weight-bold\">Book a seat<span v-if=\"visitBookingEnabled\">/visit</span></p>\r\n <ul>\r\n <li>\r\n Login via mylibrary username to make a booking. An email\r\n confirming your transaction(s) will be sent to the email\r\n address associated with the mylibrary username.\r\n </li>\r\n <li>\r\n Do note that the email may appear in your Junk/Spam inbox.\r\n </li>\r\n </ul>\r\n\r\n <p class=\"font-weight-bold pt-3\">Seat booking</p>\r\n <ul>\r\n <li>\r\n Your seat will be assigned by the system, check “My\r\n Bookings†tab for your seat number.\r\n </li>\r\n <li>\r\n Seat booking timeslots are at 15-minute intervals.\r\n Minimum booking duration is 30 minutes.\r\n <span v-if=\"windowSettings.showBloombergInfo\"\r\n >(For Bloomberg Terminal, booking timeslots are at\r\n 1-hour intervals only)</span\r\n >\r\n </li>\r\n <!-- <li>\r\n Your maximum daily booking quota is 4 hours across all\r\n library seats<span\r\n v-if=\"windowSettings.showBloombergInfo\"\r\n >\r\n and 1 hour for the Bloomberg Terminal.</span\r\n ><span v-else>.</span>\r\n </li> -->\r\n <li>\r\n If the seat you have booked is occupied by another patron, \r\n please show your booking confirmation to the patron. \r\n Do remember to take your belongings with you once your booking ends. \r\n Another patron may have booked the seat after you.\r\n </li>\r\n <li v-if=\"visitBookingEnabled\">\r\n If you have booked a seat beforehand, you do not need to\r\n make a separate visit booking to the libraries included\r\n in this seat booking system. Show your seat booking\r\n details to enter the library.\r\n </li>\r\n </ul>\r\n\r\n <p v-if=\"visitBookingEnabled\" class=\"font-weight-bold pt-3\">Visit booking</p>\r\n <ul>\r\n <li v-if=\"visitBookingEnabled\">\r\n Visit booking timeslots are dependent on the site you\r\n are visiting. Please refer to\r\n <div style=\"word-break: break-all; line-height: 24px\">\r\n <a :href=\"planYourVisitLink\" class=\"white--text\">\r\n {{ planYourVisitLink.replace(\"https://www.\", \"\") }}\r\n </a>\r\n </div>\r\n for more details.\r\n </li>\r\n <li v-if=\"visitBookingEnabled\">\r\n Visit bookings are limited to 1 booking per branch per\r\n day.\r\n </li>\r\n </ul>\r\n </v-list-item-content>\r\n </v-col>\r\n </v-row>\r\n </v-list-item>\r\n <v-col :offset=\"leftCols\" class=\"pa-0\">\r\n <v-divider></v-divider>\r\n </v-col>\r\n\r\n <v-list-item key=\"4\" :ripple=\"false\">\r\n <v-row>\r\n <v-col :cols=\"leftCols\">\r\n <v-btn fab dark color=\"orange\" small>\r\n <v-icon>mdi-checkbox-marked-circle-outline</v-icon>\r\n </v-btn>\r\n </v-col>\r\n <v-col :cols=\"rightCols\">\r\n <v-list-item-content>\r\n <p class=\"font-weight-bold\">\r\n Check-in at your seat <span v-if=\"visitBookingEnabled\">(Not required for visits)</span> \r\n </p>\r\n <ul>\r\n <li>\r\n Check-ins are needed to confirm that you are showing up\r\n for the booking made. You will need to verify that you\r\n are on-site at the library.\r\n </li>\r\n <li>\r\n There are two ways to check-in:\r\n <ol>\r\n <li>\r\n Allow the webpage to verify that your current\r\n location is at the library you have made a booking\r\n for, or\r\n </li>\r\n <li>\r\n Click the orange icon in the bottom-right corner,\r\n then scan the QR code placed at the area you have\r\n booked for or at your assigned seat.\r\n </li>\r\n </ol>\r\n </li>\r\n <li>\r\n You may check-in 15 mins before your booking starts to\r\n secure it.\r\n </li>\r\n <li>\r\n You must check-in within 14 minutes from the start time \r\n of your booking, or your booking will be automatically cancelled. \r\n [For example, if your booking begins at 1pm, you have \r\n until 1:14pm to check-in].\r\n </li>\r\n </ul>\r\n </v-list-item-content>\r\n </v-col>\r\n </v-row>\r\n </v-list-item>\r\n <v-col :offset=\"leftCols\" class=\"pa-0\">\r\n <v-divider></v-divider>\r\n </v-col>\r\n\r\n <v-list-item key=\"5\" :ripple=\"false\">\r\n <v-row>\r\n <v-col :cols=\"leftCols\">\r\n <v-btn fab dark color=\"orange\" small>\r\n <v-icon>mdi-expand-all</v-icon>\r\n </v-btn>\r\n </v-col>\r\n <v-col :cols=\"rightCols\">\r\n <v-list-item-content>\r\n <p class=\"font-weight-bold\">\r\n Extend your seat booking<span\r\n v-if=\"windowSettings.showBloombergInfo\"\r\n >\r\n (Not applicable for Bloomberg Terminal bookings)</span\r\n >\r\n </p>\r\n <ul>\r\n <li>\r\n You can extend the booking for your seat only in the\r\n last 15 minutes of your booking.\r\n </li>\r\n <li>\r\n Seat bookings can be extended for 1 hour each time, and\r\n only if your current seat is available for the next\r\n hour.\r\n </li>\r\n <li>\r\n If you have run out of daily booking quota, you can\r\n still make up to 2 additional extensions each day.\r\n </li>\r\n </ul>\r\n </v-list-item-content>\r\n </v-col>\r\n </v-row>\r\n </v-list-item>\r\n <v-col :offset=\"leftCols\" class=\"pa-0\">\r\n <v-divider></v-divider>\r\n </v-col>\r\n\r\n <v-list-item key=\"6\" :ripple=\"false\">\r\n <v-row>\r\n <v-col :cols=\"leftCols\">\r\n <v-btn fab dark color=\"orange\" small>\r\n <v-icon>mdi-close-thick</v-icon>\r\n </v-btn>\r\n </v-col>\r\n <v-col :cols=\"rightCols\">\r\n <v-list-item-content>\r\n <p class=\"font-weight-bold\">Cancel your bookings</p>\r\n <ul>\r\n <li>Cancel bookings that you no longer need.</li>\r\n <li>\r\n At the point of cancellation, any unused booking\r\n timeslots will be returned to your daily booking\r\n quota.<span v-if=\"windowSettings.showBloombergInfo\">\r\n However, if you do not show up for your Bloomberg\r\n Terminal bookings, you will not be able to make\r\n another booking that day.</span\r\n >\r\n </li>\r\n <li>\r\n If you cancel a seat booking that has already started,\r\n it will be a partial cancellation. Your cancelled\r\n timeslots can be booked by other users.\r\n </li>\r\n <li v-if=\"windowSettings.showBloombergInfo\">\r\n Bloomberg Terminal bookings: If you cancel a booking\r\n that had already started, or if your booking was\r\n automatically cancelled by the system due to elapsed\r\n time, you will not be able to re-book for that day.\r\n Bookings made for the Bloomberg Terminal are separate\r\n from the Seat Booking quota.\r\n </li>\r\n <li v-if=\"visitBookingEnabled\">\r\n Visit quota will not be returned once booking has\r\n already started.\r\n </li>\r\n </ul>\r\n </v-list-item-content>\r\n </v-col>\r\n </v-row>\r\n </v-list-item>\r\n <v-col :offset=\"leftCols\" class=\"pa-0\">\r\n <v-divider></v-divider>\r\n </v-col>\r\n\r\n <v-list-item key=\"7\" :ripple=\"false\">\r\n <v-row>\r\n <v-col :cols=\"leftCols\">\r\n <v-btn\r\n fab\r\n dark\r\n color=\"orange\"\r\n small\r\n @click=\"gotoOnsiteDetector\"\r\n >\r\n <v-icon>mdi-thumb-up-outline</v-icon>\r\n </v-btn>\r\n </v-col>\r\n <v-col :cols=\"rightCols\">\r\n <v-list-item-content>\r\n The Seat Booking System is used to manage the use of library\r\n seats in selected areas. Help us improve this system by\r\n leaving your feedback at\r\n <div style=\"word-break: break-all; line-height: 24px\">\r\n <a :href=\"feedbackLink\" class=\"white--text\">\r\n {{ feedbackLink.replace(\"https://\", \"\") }}\r\n </a>\r\n </div>\r\n </v-list-item-content>\r\n </v-col>\r\n </v-row>\r\n </v-list-item>\r\n\r\n <!-- <v-list-item key=\"1\">\r\n <v-row>\r\n <v-col :cols=\"leftCols\">\r\n <v-btn fab dark color=\"orange\" small>\r\n <v-icon>mdi-logout-variant</v-icon>\r\n </v-btn>\r\n </v-col>\r\n <v-col :cols=\"rightCols\">\r\n <v-list-item-content>Log out.</v-list-item-content>\r\n </v-col>\r\n </v-row>\r\n </v-list-item>-->\r\n </v-list-item-group>\r\n </v-list>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapGetters } from \"vuex\";\r\n\r\nexport default {\r\n name: \"Help\",\r\n data: () => ({\r\n leftCols: 3,\r\n rightCols: 9,\r\n feedbackLink: window.$settings.feedbackLink,\r\n planYourVisitLink: window.$settings.planYourVisitLink,\r\n clickCount: 0,\r\n clickTimer: null,\r\n }),\r\n computed: {\r\n ...mapGetters([\"visitBookingEnabled\"])\r\n },\r\n methods: {\r\n setContentHeight() {\r\n if (this.$refs.helpScrollable) {\r\n const heights = this.heights();\r\n const contentHeight = heights.screen - heights.toolbar - heights.noticeBarHeight;\r\n\r\n this.$refs.helpScrollable.style.height = contentHeight + \"px\";\r\n }\r\n },\r\n gotoOnsiteDetector() {\r\n this.clickCount++;\r\n\r\n if (!this.clickTimer) {\r\n this.clickCount = 1;\r\n\r\n this.clickTimer = setTimeout(() => {\r\n this.clickCount = 0;\r\n this.clickTimer = null;\r\n }, 700);\r\n } else if (this.clickTimer && this.clickCount >= 5) {\r\n this.clickCount = 0;\r\n this.clickTimer = null;\r\n this.$router.push({ name: \"OnsiteDetector\" });\r\n }\r\n },\r\n },\r\n activated() {\r\n this.$nextTick(() => this.setContentHeight());\r\n\r\n const statusBarColor = this.onsiteMode ? \"#0d47a1\" : \"#004d40\";\r\n this.setStatusBackgroundBarColor(statusBarColor);\r\n\r\n this.clickCount = 0;\r\n this.clickTimer = null;\r\n },\r\n deactivated() {\r\n this.setThemeColorByMode();\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.v-list-item {\r\n margin-top: 12px;\r\n margin-bottom: 12px;\r\n}\r\n</style>\r\n\r\n<style>\r\n#helpDiv .v-list-item {\r\n padding: 0 16px;\r\n}\r\n\r\n#helpDiv .col {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n#helpDiv .col.col-3 {\r\n text-align: center;\r\n vertical-align: middle !important;\r\n}\r\n\r\n#helpDiv .v-list-item__icon {\r\n margin-right: 0 !important;\r\n}\r\n\r\n#helpDiv .v-list-item__icon .v-icon {\r\n font-size: 30px !important;\r\n}\r\n\r\n#helpDiv .v-btn--fab.v-size--small {\r\n height: 48px;\r\n width: 48px;\r\n}\r\n\r\n#helpDiv li {\r\n padding: 5px;\r\n line-height: 24px;\r\n}\r\n\r\n#helpDiv ol {\r\n list-style-type: lower-roman;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Help.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Help.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Help.vue?vue&type=template&id=111493cd&scoped=true&\"\nimport script from \"./Help.vue?vue&type=script&lang=js&\"\nexport * from \"./Help.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Help.vue?vue&type=style&index=0&id=111493cd&scoped=true&lang=css&\"\nimport style1 from \"./Help.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"111493cd\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemGroup } from 'vuetify/lib/components/VList';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCol,VDivider,VIcon,VList,VListItem,VListItemContent,VListItemGroup,VRow,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}],class:[\n { 'inset-box-shadow': !_vm.isMobileOrStandaloneMode },\n _vm.onsiteDetected ? 'bg-blue-radial' : 'bg-teal-radial' ],staticStyle:{\"color\":\"white\"},attrs:{\"id\":\"helpDiv\"}},[_c('v-toolbar',{attrs:{\"dark\":\"\",\"color\":\"transparent\",\"elevation\":\"0\"}},[_c('v-btn',{staticStyle:{\"z-index\":\"1\"},attrs:{\"icon\":\"\"},on:{\"click\":_vm.goBack}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',{staticClass:\"text-center headlinex\",staticStyle:{\"position\":\"absolute\",\"left\":\"-4px\",\"width\":\"100vw\"}},[_c('strong',[_vm._v(\"Onsite Detector\")])])],1),_c('div',{ref:\"helpScrollable\",staticClass:\"scrollable box-shadow-inset\",staticStyle:{\"overflowx\":\"hidden\"}},[_c('div',{on:{\"click\":function($event){_vm.inputPopupSelectBranch.show = true}}},[_c('v-text-field',{staticClass:\"mx-5 mt-5\",attrs:{\"solo\":\"\",\"dark\":\"\",\"hide-details\":\"\",\"backgroundColor\":\"transparent\",\"label\":\"Library\",\"readonly\":\"\",\"value\":_vm.inputPopupSelectBranch.selectedItem.name}}),_c('InputPopupSelect',{attrs:{\"title\":\"Library\",\"list\":_vm.settings.menus.branchMenus,\"select\":_vm.inputPopupSelectBranch},on:{\"update:select\":function($event){_vm.inputPopupSelectBranch=$event}}})],1),_c('v-textarea',{ref:\"geoRange\",staticClass:\"ma-5\",attrs:{\"id\":\"geoRange\",\"solo\":\"\",\"dark\":\"\",\"hide-details\":\"\",\"label\":\"Geolocation range\",\"backgroundColor\":\"transparent\",\"rows\":\"10\",\"value\":_vm.inputPopupSelectBranch.selectedItem.name\n ? JSON.stringify(\n _vm.inputPopupSelectBranch.selectedItem.geolocationInfo,\n null,\n 2\n )\n : ''}}),_c('v-textarea',{staticClass:\"ma-5\",attrs:{\"solo\":\"\",\"dark\":\"\",\"hide-details\":\"\",\"label\":\"Realtime Geolocation\",\"backgroundColor\":\"transparent\",\"rows\":\"6\",\"readonly\":\"\"},model:{value:(_vm.geolocationInfo),callback:function ($$v) {_vm.geolocationInfo=$$v},expression:\"geolocationInfo\"}})],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <div\r\n v-resize=\"setContentHeight\"\r\n id=\"helpDiv\"\r\n style=\"color: white\"\r\n :class=\"[\r\n { 'inset-box-shadow': !isMobileOrStandaloneMode },\r\n onsiteDetected ? 'bg-blue-radial' : 'bg-teal-radial',\r\n ]\"\r\n >\r\n <v-toolbar dark color=\"transparent\" elevation=\"0\">\r\n <v-btn icon @click=\"goBack\" style=\"z-index: 1\">\r\n <v-icon>mdi-arrow-left</v-icon>\r\n </v-btn>\r\n\r\n <v-toolbar-title\r\n style=\"position: absolute; left: -4px; width: 100vw\"\r\n class=\"text-center headlinex\"\r\n >\r\n <strong>Onsite Detector</strong>\r\n </v-toolbar-title>\r\n </v-toolbar>\r\n\r\n <div\r\n ref=\"helpScrollable\"\r\n class=\"scrollable box-shadow-inset\"\r\n style=\"overflowx: hidden\"\r\n >\r\n <!-- Select library -->\r\n <div @click=\"inputPopupSelectBranch.show = true\">\r\n <v-text-field\r\n solo\r\n dark\r\n hide-details\r\n backgroundColor=\"transparent\"\r\n label=\"Library\"\r\n class=\"mx-5 mt-5\"\r\n readonly\r\n :value=\"inputPopupSelectBranch.selectedItem.name\"\r\n >\r\n </v-text-field>\r\n\r\n <InputPopupSelect\r\n title=\"Library\"\r\n :list=\"settings.menus.branchMenus\"\r\n :select.sync=\"inputPopupSelectBranch\"\r\n />\r\n </div>\r\n\r\n <v-textarea\r\n id=\"geoRange\"\r\n ref=\"geoRange\"\r\n solo\r\n dark\r\n hide-details\r\n label=\"Geolocation range\"\r\n backgroundColor=\"transparent\"\r\n rows=\"10\"\r\n class=\"ma-5\"\r\n :value=\"\r\n inputPopupSelectBranch.selectedItem.name\r\n ? JSON.stringify(\r\n inputPopupSelectBranch.selectedItem.geolocationInfo,\r\n null,\r\n 2\r\n )\r\n : ''\r\n \"\r\n ></v-textarea>\r\n\r\n <v-textarea\r\n solo\r\n dark\r\n hide-details\r\n label=\"Realtime Geolocation\"\r\n backgroundColor=\"transparent\"\r\n class=\"ma-5\"\r\n rows=\"6\"\r\n readonly\r\n v-model=\"geolocationInfo\"\r\n ></v-textarea>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport moment from \"moment\";\r\nimport InputPopupSelect from \"@/components/InputPopupSelect\";\r\nimport geolocationHelper from \"@/helpers/geolocationHelper\";\r\n\r\nexport default {\r\n name: \"OnsiteDetector\",\r\n components: {\r\n InputPopupSelect,\r\n },\r\n data: () => ({\r\n onsiteDetected: false,\r\n onsiteDetectionTimer: null,\r\n geolocationInfo: null,\r\n inputPopupSelectBranch: {\r\n show: false,\r\n selectedItem: {\r\n name: null,\r\n code: null,\r\n },\r\n },\r\n }),\r\n methods: {\r\n setContentHeight() {\r\n if (this.$refs.helpScrollable) {\r\n const heights = this.heights();\r\n const contentHeight = heights.screen - heights.toolbar - heights.noticeBarHeight;\r\n\r\n this.$refs.helpScrollable.style.height = contentHeight + \"px\";\r\n }\r\n },\r\n startOnsiteDetection() {\r\n if (this.onsiteDetectionTimer) {\r\n return;\r\n }\r\n\r\n const getCurrentGeolocationBrowserCallback = (locationInfo) => {\r\n locationInfo.time = moment().format(\"h:mm:ss.SSS a\");\r\n this.geolocationInfo = JSON.stringify(locationInfo, null, 2);\r\n\r\n let onsiteDetectedTemp = false;\r\n\r\n const geoRangeStr = document.getElementById(\"geoRange\").value;\r\n let geoRange = this.parseJson(geoRangeStr);\r\n\r\n if (geoRange) {\r\n onsiteDetectedTemp = geolocationHelper.isInRange(\r\n locationInfo.longitude,\r\n locationInfo.latitude,\r\n geoRange\r\n );\r\n }\r\n\r\n this.onsiteDetected = onsiteDetectedTemp;\r\n\r\n const themeColor = this.onsiteDetected ? \"#1976D2\" : \"#00796B\";\r\n this.setPrimaryColor(themeColor);\r\n\r\n const statusBarColor = this.onsiteDetected ? \"#0d47a1\" : \"#004d40\";\r\n this.setStatusBackgroundBarColor(statusBarColor);\r\n };\r\n\r\n geolocationHelper.getCurrentGeolocationBrowser(\r\n getCurrentGeolocationBrowserCallback\r\n );\r\n\r\n this.onsiteDetectionTimer = setInterval(() => {\r\n geolocationHelper.getCurrentGeolocationBrowser(\r\n getCurrentGeolocationBrowserCallback\r\n );\r\n }, 500);\r\n },\r\n endOnsiteDetection() {\r\n if (this.onsiteDetectionTimer) {\r\n clearInterval(this.onsiteDetectionTimer);\r\n this.onsiteDetectionTimer = null;\r\n }\r\n },\r\n parseJson(jsonStr) {\r\n if (jsonStr) {\r\n try {\r\n const result = JSON.parse(jsonStr);\r\n\r\n if (typeof result === \"object\") {\r\n return result;\r\n }\r\n } catch (e) {}\r\n }\r\n\r\n return null;\r\n },\r\n },\r\n activated() {\r\n this.$nextTick(() => this.setContentHeight());\r\n\r\n this.setStatusBackgroundBarColor(\"#004d40\");\r\n\r\n this.startOnsiteDetection();\r\n },\r\n deactivated() {\r\n this.setThemeColorByMode();\r\n\r\n this.endOnsiteDetection();\r\n },\r\n beforeRouteLeave(to, from, next) {\r\n const inputs = [this.inputPopupSelectBranch];\r\n\r\n for (let i of inputs) {\r\n if (i != null && i.show) {\r\n i.show = false;\r\n\r\n next(false);\r\n return;\r\n }\r\n }\r\n\r\n next();\r\n },\r\n};\r\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnsiteDetector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnsiteDetector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OnsiteDetector.vue?vue&type=template&id=3afee691&\"\nimport script from \"./OnsiteDetector.vue?vue&type=script&lang=js&\"\nexport * from \"./OnsiteDetector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VIcon,VTextField,VTextarea,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visitBookingEnabled)?_c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}],class:[\n { 'inset-box-shadow': !_vm.isMobileOrStandaloneMode },\n _vm.onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial' ]},[_c('v-toolbar',{staticClass:\"pr-1\",attrs:{\"dark\":\"\",\"color\":\"transparent\"}},[_c('v-btn',{staticStyle:{\"z-index\":\"1\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$router.push('/', function () {})}}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',[_vm._v(\"Login\")])],1),_c('div',{ref:\"loginOptionsScrollable\",staticClass:\"scrollable box-shadow-inset\"},[_c('v-card',{staticClass:\"white--text flex-center-container\",staticStyle:{\"height\":\"inherit\"},attrs:{\"color\":\"transparent\",\"elevation\":\"24\"}},[_c('div',[_c('div',{staticClass:\"text-large text-center pb-8\"},[_vm._v(\"Log in with\")]),_c('div',[_c('v-container',[_c('v-row',{staticClass:\"no-gutters\"},[_c('v-col',{staticClass:\"flex-center-container\"},[_c('v-btn',{staticClass:\"px-5 text-none\",staticStyle:{\"border-radius\":\"20px\"},attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"orange darken-2\",\"width\":\"150\",\"height\":\"130\"},on:{\"click\":_vm.navigateToMyLibraryUsernameLogin}},[_c('div',[_c('div',{staticClass:\"mb-2\"},[_c('v-icon',{attrs:{\"x-large\":\"\",\"dark\":\"\"}},[_vm._v(\"mdi-library\")])],1),_c('div',{staticClass:\"text-medium white--text\"},[_vm._v(\" myLibrary\"),_c('br'),_vm._v(\"username \")])])]),_c('div',{staticClass:\"px-4 mt-4 text-center white--text\"},[_vm._v(\" To book library seats & visits \")])],1),_c('v-col',{staticClass:\"flex-center-container\"},[_c('v-btn',{staticClass:\"px-5 text-capitalize\",staticStyle:{\"border-radius\":\"20px\"},attrs:{\"dark\":\"\",\"large\":\"\",\"color\":\"orange darken-2\",\"width\":\"150\",\"height\":\"130\"},on:{\"click\":_vm.navigateToEmailMobileLogin}},[_c('div',[_c('div',{staticClass:\"mb-5\"},[_c('v-icon',{staticClass:\"pr-1\",attrs:{\"dark\":\"\",\"x-large\":\"\"}},[_vm._v(\"mdi-cellphone\")]),_c('v-icon',{attrs:{\"dark\":\"\",\"x-large\":\"\"}},[_vm._v(\"mdi-email\")])],1),_c('div',{staticClass:\"text-medium white--text\"},[_vm._v(\"Mobile/Email\")])])]),_c('div',{staticClass:\"px-4 mt-4 text-center white--text\"},[_vm._v(\" To book library visits only \")])],1)],1)],1)],1)])])],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n v-if=\"visitBookingEnabled\"\r\n v-resize=\"setContentHeight\"\r\n :class=\"[\r\n { 'inset-box-shadow': !isMobileOrStandaloneMode },\r\n onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial',\r\n ]\"\r\n >\r\n <!-- Toolbar -->\r\n <v-toolbar dark color=\"transparent\" class=\"pr-1\">\r\n <v-btn icon @click=\"$router.push('/', () => {})\" style=\"z-index: 1\">\r\n <v-icon>mdi-arrow-left</v-icon>\r\n </v-btn>\r\n <v-toolbar-title>Login</v-toolbar-title>\r\n </v-toolbar>\r\n\r\n <div ref=\"loginOptionsScrollable\" class=\"scrollable box-shadow-inset\">\r\n <v-card\r\n color=\"transparent\"\r\n style=\"height: inherit\"\r\n class=\"white--text flex-center-container\"\r\n elevation=\"24\"\r\n >\r\n <div>\r\n <div class=\"text-large text-center pb-8\">Log in with</div>\r\n <div>\r\n <v-container>\r\n <v-row class=\"no-gutters\">\r\n <v-col class=\"flex-center-container\">\r\n <v-btn\r\n dark\r\n large\r\n color=\"orange darken-2\"\r\n class=\"px-5 text-none\"\r\n style=\"border-radius: 20px\"\r\n width=\"150\"\r\n height=\"130\"\r\n @click=\"navigateToMyLibraryUsernameLogin\"\r\n >\r\n <div>\r\n <div class=\"mb-2\">\r\n <v-icon x-large dark>mdi-library</v-icon>\r\n </div>\r\n <div class=\"text-medium white--text\">\r\n myLibrary<br />username\r\n </div>\r\n </div>\r\n </v-btn>\r\n <div class=\"px-4 mt-4 text-center white--text\">\r\n To book library seats & visits\r\n </div>\r\n </v-col>\r\n <v-col class=\"flex-center-container\">\r\n <v-btn\r\n dark\r\n large\r\n color=\"orange darken-2\"\r\n class=\"px-5 text-capitalize\"\r\n style=\"border-radius: 20px\"\r\n width=\"150\"\r\n height=\"130\"\r\n @click=\"navigateToEmailMobileLogin\"\r\n >\r\n <div>\r\n <div class=\"mb-5\">\r\n <v-icon dark x-large class=\"pr-1\">mdi-cellphone</v-icon>\r\n <v-icon dark x-large>mdi-email</v-icon>\r\n </div>\r\n <div class=\"text-medium white--text\">Mobile/Email</div>\r\n </div>\r\n </v-btn>\r\n <div class=\"px-4 mt-4 text-center white--text\">\r\n To book library visits only\r\n </div>\r\n </v-col>\r\n </v-row>\r\n </v-container>\r\n </div>\r\n </div>\r\n </v-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapGetters } from \"vuex\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\n\r\nexport default {\r\n name: \"LoginOptions\",\r\n methods: {\r\n navigateToMyLibraryUsernameLogin() {\r\n apiHelper.casAuth();\r\n },\r\n navigateToEmailMobileLogin() {\r\n this.$router.push({\r\n name: \"EmailMobileLogin\",\r\n query: { from: 'loginOptions' },\r\n });\r\n },\r\n setContentHeight() {\r\n if (this.$refs.loginOptionsScrollable) {\r\n const heights = this.heights();\r\n const contentHeight = heights.screen - heights.toolbar - heights.noticeBarHeight;\r\n\r\n this.$refs.loginOptionsScrollable.style.height = contentHeight + \"px\";\r\n }\r\n },\r\n },\r\n computed: {\r\n ...mapGetters([\"visitBookingEnabled\"]),\r\n },\r\n activated() {\r\n this.$nextTick(() => this.setContentHeight());\r\n // if (this.authenticated) {\r\n // this.$router.push({ name: \"Home\" });\r\n // }\r\n },\r\n beforeRouteEnter(to, from, next) {\r\n next((vm) => {\r\n if (vm.authenticated) {\r\n return next({ name: \"Home\" });\r\n } else {\r\n if (vm.visitBookingEnabled) {\r\n next();\r\n } else {\r\n apiHelper.casAuth();\r\n }\r\n }\r\n });\r\n },\r\n};\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginOptions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginOptions.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoginOptions.vue?vue&type=template&id=2af10a6b&\"\nimport script from \"./LoginOptions.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginOptions.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VCol,VContainer,VIcon,VRow,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visitBookingEnabled || _vm.gantryAccessQrEnabled)?_c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}],class:[\n { 'inset-box-shadow': !_vm.isMobileOrStandaloneMode },\n _vm.onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial' ],attrs:{\"id\":\"emailmobile-login-page\"}},[_c('v-toolbar',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.visitBookingEnabled && _vm.navFromLoginOptions),expression:\"visitBookingEnabled && navFromLoginOptions\"}],staticClass:\"pr-1\",attrs:{\"dark\":\"\",\"color\":\"transparent\"}},[_c('v-btn',{staticStyle:{\"z-index\":\"1\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$router.push('/login/options', function () {})}}},[_c('v-icon',[_vm._v(\"mdi-arrow-left\")])],1),_c('v-toolbar-title',[_vm._v(\"Login\")])],1),_c('div',{ref:\"emailMobileLoginScrollable\",staticClass:\"scrollable box-shadow-inset\"},[_c('v-card',{staticClass:\"white--text flex-center-container px-5\",staticStyle:{\"height\":\"inherit\"},attrs:{\"color\":\"transparent\",\"elevation\":\"24\"}},[_c('div',[(_vm.visitBookingEnabled && _vm.navFromLoginOptions)?_c('div',{staticClass:\"text-title text-center pb-8\"},[_vm._v(\" An OTP (One-Time Password) will be sent to the mobile number or email address entered \")]):_c('div',{staticClass:\"text-title text-center pb-8\"},[_c('div',[_vm._v(\"Welcome to \"+_vm._s(_vm.getCurrentBranchName)+\".\")]),_c('div',[_vm._v(\"Please enter your Singapore registered mobile number, or email to receive a One-Time PIN (OTP) to generate a QR code day pass.\")])]),_c('v-container',[_c('v-form',{ref:\"form\",on:{\"submit\":function($event){$event.preventDefault();}},model:{value:(_vm.isFormValidated),callback:function ($$v) {_vm.isFormValidated=$$v},expression:\"isFormValidated\"}},[_c('v-row',{staticClass:\"no-gutters\"},[_c('v-text-field',{ref:\"toFocus\",staticClass:\"border-radius: 20px mt-3\",attrs:{\"elevation\":\"21\",\"dark\":\"\",\"background-color\":\"primary\",\"clearable\":\"\",\"single-line\":\"\",\"solo\":\"\",\"prepend-inner-icon\":\"mdi-account\",\"rules\":_vm.emailMobileRules,\"required\":\"\"},model:{value:(_vm.otpChannelValue),callback:function ($$v) {_vm.otpChannelValue=(typeof $$v === 'string'? $$v.trim(): $$v)},expression:\"otpChannelValue\"}},[_c('div',{attrs:{\"slot\":\"label\"},slot:\"label\"},[_vm._v(\"SG Mobile/Email\")])])],1),_c('v-row',{staticClass:\"no-gutters flex-center-container\"},[_c('div',{staticClass:\"px-4x mt-1 mb-7\",staticStyle:{\"width\":\"100%\"}},[_c('v-btn',{attrs:{\"onfocus\":\"this.blur()\",\"color\":\"orange darken-2\",\"large\":\"\",\"block\":\"\",\"dark\":\"\",\"disabled\":!_vm.isFormValidated || _vm.otpTimer.isLoading},on:{\"click\":_vm.requestOtp}},[_vm._v(\" Request OTP \"),_c('span',[_c('v-progress-circular',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.otpTimer.isLoading),expression:\"otpTimer.isLoading\"}],staticClass:\"px-0\",staticStyle:{\"font-size\":\"11px\",\"margin-left\":\"50px\"},attrs:{\"rotate\":-90,\"size\":26,\"width\":2,\"color\":\"white\"}},[_vm._v(_vm._s(_vm.otpTimer.timerInSeconds)+\" \")])],1)])],1)]),_c('v-row',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.visitBookingEnabled && _vm.navFromLoginOptions),expression:\"visitBookingEnabled && navFromLoginOptions\"}],staticClass:\"no-gutters flex-center-container\"},[_c('a',{staticClass:\"white--text text-medium\",attrs:{\"href\":\"#\"},on:{\"click\":_vm.casAuth}},[_vm._v(\"Log in with myLibrary username\")])])],1)],1)],1)])],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n v-if=\"visitBookingEnabled || gantryAccessQrEnabled\"\r\n id=\"emailmobile-login-page\"\r\n v-resize=\"setContentHeight\"\r\n :class=\"[\r\n { 'inset-box-shadow': !isMobileOrStandaloneMode },\r\n onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial',\r\n ]\"\r\n >\r\n <!-- Toolbar -->\r\n <v-toolbar\r\n v-show=\"visitBookingEnabled && navFromLoginOptions\"\r\n dark color=\"transparent\" class=\"pr-1\">\r\n <v-btn\r\n icon\r\n @click=\"$router.push('/login/options', () => {})\"\r\n style=\"z-index: 1\"\r\n >\r\n <v-icon>mdi-arrow-left</v-icon>\r\n </v-btn>\r\n <v-toolbar-title>Login</v-toolbar-title>\r\n </v-toolbar>\r\n\r\n <div ref=\"emailMobileLoginScrollable\" class=\"scrollable box-shadow-inset\">\r\n <v-card\r\n color=\"transparent\"\r\n style=\"height: inherit\"\r\n class=\"white--text flex-center-container px-5\"\r\n elevation=\"24\"\r\n >\r\n <div>\r\n <div\r\n v-if=\"visitBookingEnabled && navFromLoginOptions\"\r\n class=\"text-title text-center pb-8\">\r\n An OTP (One-Time Password) will be sent to the mobile number\r\n or email address entered\r\n </div>\r\n <div\r\n v-else\r\n class=\"text-title text-center pb-8\">\r\n <div>Welcome to {{ getCurrentBranchName }}.</div>\r\n <div>Please enter your Singapore registered mobile number, or email to receive a One-Time PIN (OTP) to generate a QR code day pass.</div>\r\n </div>\r\n <v-container>\r\n <v-form\r\n ref=\"form\"\r\n v-model=\"isFormValidated\"\r\n v-on:submit.prevent\r\n >\r\n <v-row class=\"no-gutters\">\r\n <v-text-field\r\n ref=\"toFocus\"\r\n elevation=\"21\"\r\n dark\r\n background-color=\"primary\"\r\n class=\"border-radius: 20px mt-3\"\r\n clearable\r\n single-line\r\n solo\r\n prepend-inner-icon=\"mdi-account\"\r\n :rules=\"emailMobileRules\"\r\n required\r\n v-model.trim=\"otpChannelValue\"\r\n >\r\n <div slot=\"label\">SG Mobile/Email</div>\r\n </v-text-field>\r\n </v-row>\r\n <v-row class=\"no-gutters flex-center-container\">\r\n <div class=\"px-4x mt-1 mb-7\" style=\"width: 100%\">\r\n <v-btn\r\n @click=\"requestOtp\"\r\n onfocus=\"this.blur()\"\r\n color=\"orange darken-2\"\r\n large\r\n block\r\n dark\r\n :disabled=\"!isFormValidated || otpTimer.isLoading\"\r\n >\r\n Request OTP\r\n <span>\r\n <v-progress-circular\r\n :rotate=\"-90\"\r\n :size=\"26\"\r\n :width=\"2\"\r\n color=\"white\"\r\n style=\"font-size: 11px; margin-left: 50px\"\r\n class=\"px-0\"\r\n v-show=\"otpTimer.isLoading\"\r\n >{{ otpTimer.timerInSeconds }}\r\n </v-progress-circular></span\r\n >\r\n </v-btn>\r\n </div>\r\n </v-row>\r\n <v-row\r\n v-show=\"visitBookingEnabled && navFromLoginOptions\"\r\n class=\"no-gutters flex-center-container\">\r\n <a href=\"#\" class=\"white--text text-medium\" @click=\"casAuth\"\r\n >Log in with myLibrary username</a\r\n >\r\n </v-row>\r\n </v-form>\r\n </v-container>\r\n </div>\r\n </v-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapState, mapGetters, mapMutations } from \"vuex\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\nimport businessLogic from \"@/helpers/businessLogic\";\r\nimport constants from \"../helpers/constants\";\r\n\r\nexport default {\r\n name: \"EmailMobileLogin\",\r\n data() {\r\n return {\r\n isFormValidated: false,\r\n triggerOtpTimer: false,\r\n otpChannelValue: String,\r\n emailMobileRules: [\r\n (value) => !!value || \"Required\",\r\n (value) =>\r\n /(^[8,9]\\d{7}$)|(^\\S+@\\S+\\.+\\S+$)/.test(value) ||\r\n window.$msg.invalidEmailMobile,\r\n ],\r\n };\r\n },\r\n computed: {\r\n ...mapState([\"otpTimer\"]),\r\n ...mapGetters([\"authenticated\", \"visitBookingEnabled\", \"gantryAccessQrEnabled\", \"getCurrentBranchName\"]),\r\n navFromLoginOptions() {\r\n return this.$route.query.from === 'loginOptions'\r\n },\r\n getCurrentBranchName() {\r\n return businessLogic.getCurrentBranchName()\r\n },\r\n otpChannelId: {\r\n get() {\r\n return this.isValidEmail(this.otpChannelValue);\r\n },\r\n set(newValue) {\r\n return newValue;\r\n },\r\n },\r\n },\r\n methods: {\r\n casAuth() {\r\n this.auth(this.$route.name);\r\n },\r\n setContentHeight() {\r\n if (this.$refs.emailMobileLoginScrollable) {\r\n const heights = this.heights();\r\n const contentHeight = heights.screen - heights.toolbar - heights.noticeBarHeight;\r\n\r\n this.$refs.emailMobileLoginScrollable.style.height =\r\n contentHeight + \"px\";\r\n }\r\n },\r\n isValidEmail(otpCannelValue) {\r\n if (otpCannelValue) {\r\n if (otpCannelValue.match(RegExp(/^\\S+@\\S+\\.+\\S+$/))) {\r\n return constants.channelId.Email;\r\n } else if (otpCannelValue.match(RegExp(/^[8,9]\\d{7}$/))) {\r\n return constants.channelId.SMS;\r\n }\r\n }\r\n },\r\n async requestOtp() {\r\n const validationResult = this.$refs.form.validate();\r\n\r\n if (validationResult) {\r\n // console.log(\"Request Otp with otpchannel: \", this.otpChannelId + \" , \" + this.otpChannel.value);\r\n this.triggerOtpTimer = true;\r\n\r\n if (this.visitBookingEnabled || this.gantryAccessQrEnabled) {\r\n businessLogic.isOtpTimerRunning(\r\n window.$settings.resendOtpTimeIntervalInSeconds,\r\n this.time.nowMoment.format(),\r\n this.triggerOtpTimer\r\n );\r\n }\r\n\r\n const response = await apiHelper.requestOtp(\r\n this.otpChannelId,\r\n this.otpChannelValue\r\n );\r\n\r\n this.commonResponseHandler(\r\n response,\r\n window.$msg.otpGenerateSuccess,\r\n window.$msg.otpGenerateFail,\r\n null,\r\n () =>\r\n this.$router.push({\r\n name: \"ValidateOtp\",\r\n params: {\r\n otpChannelId: this.otpChannelId,\r\n otpChannelValue: this.otpChannelValue,\r\n triggerOtpTimer: this.triggerOtpTimer,\r\n },\r\n query: { from: this.$route.query.from }\r\n }),\r\n null\r\n );\r\n }\r\n },\r\n },\r\n activated() {\r\n this.$nextTick(() => this.setContentHeight());\r\n this.$nextTick(() => this.$refs.toFocus.focus());\r\n\r\n this.otpChannelId = null;\r\n this.otpChannelValue = null;\r\n\r\n this.triggerOtpTimer = false;\r\n \r\n if (this.visitBookingEnabled || this.gantryAccessQrEnabled) {\r\n businessLogic.isOtpTimerRunning(\r\n window.$settings.resendOtpTimeIntervalInSeconds,\r\n this.time.nowMoment.format(),\r\n this.triggerOtpTimer\r\n );\r\n }\r\n\r\n // if (this.authenticated) {\r\n // this.$router.replace({ name: \"Home\" });\r\n // }\r\n },\r\n beforeRouteEnter(to, from, next) {\r\n next((vm) => {\r\n if (vm.authenticated) {\r\n return next({ name: \"Home\" });\r\n } else {\r\n //To prevent from landing to casauth page if one of vistbooking or gantryaccessqr is disabled\r\n if (vm.visitBookingEnabled || vm.gantryAccessQrEnabled) {\r\n next();\r\n } else {\r\n apiHelper.casAuth();\r\n }\r\n }\r\n });\r\n },\r\n};\r\n</script>\r\n\r\n<style>\r\n#emailmobile-login-page .v-input__prepend-inner .v-icon {\r\n color: white !important;\r\n}\r\n\r\n#emailmobile-login-page .v-messages__message {\r\n color: orange !important;\r\n font-weight: bold;\r\n}\r\n\r\n#emailmobile-login-page .mdi-close::before {\r\n color: orange !important;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailMobileLogin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailMobileLogin.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EmailMobileLogin.vue?vue&type=template&id=7dcf475c&\"\nimport script from \"./EmailMobileLogin.vue?vue&type=script&lang=js&\"\nexport * from \"./EmailMobileLogin.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EmailMobileLogin.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VContainer,VForm,VIcon,VProgressCircular,VRow,VTextField,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visitBookingEnabled || _vm.gantryAccessQrEnabled)?_c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}],class:[\n { 'inset-box-shadow': !_vm.isMobileOrStandaloneMode },\n _vm.onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial' ],attrs:{\"id\":\"validateOtp-page\"}},[_c('v-toolbar',{staticClass:\"pr-1\",attrs:{\"dark\":\"\",\"color\":\"transparent\"}},[_c('v-btn',{staticStyle:{\"z-index\":\"1\"},attrs:{\"icon\":\"\"},on:{\"click\":_vm.navigateBackOrHome}},[_c('v-icon',[_vm._v(\" \"+_vm._s((_vm.visitBookingEnabled && _vm.navFromLoginOptions) ? \"mdi-window-close\" : \"mdi-arrow-left\")+\" \")])],1),_c('v-toolbar-title',[_vm._v(\"Login\")])],1),_c('div',{ref:\"validateOtpScrollable\",staticClass:\"scrollable box-shadow-inset\"},[_c('v-card',{staticClass:\"white--text flex-center-container px-5\",staticStyle:{\"height\":\"inherit\"},attrs:{\"color\":\"transparent\",\"elevation\":\"24\"}},[_c('v-form',{ref:\"form\"},[_c('div',[(_vm.otpChannelValue)?_c('div',{staticClass:\"text-title text-center pb-8\"},[_vm._v(\" Please enter the 6-digit OTP sent to \"+_vm._s(this.otpChannelValue)+\" \")]):_vm._e(),_c('v-container',[_c('v-form',{ref:\"validateOtpForm\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('v-row',{staticClass:\"no-gutters flex-center-container\"},[_c('div',{staticClass:\"text-medium mb-2\"},[_c('v-icon',{staticStyle:{\"padding-bottom\":\"2px\"},attrs:{\"small\":\"\",\"color\":\"white\"}},[_vm._v(\"mdi-information-outline\")]),_vm._v(\" OTP is valid for 5 minutes. \")],1)]),_c('v-row',{staticClass:\"no-gutters\"},[_c('v-container',{staticClass:\"mb-3\"},[_c('v-otp-input',{ref:\"toFocus\",attrs:{\"type\":\"number\",\"max-length\":\"1\",\"min\":\"null\",\"rules\":_vm.otpInputRules},on:{\"finish\":_vm.onFinish},model:{value:(_vm.otpInput),callback:function ($$v) {_vm.otpInput=$$v},expression:\"otpInput\"}})],1)],1),_c('v-row',{staticClass:\"no-gutters flex-center-container\"},[_c('div',{staticClass:\"px-3 mb-7\",staticStyle:{\"width\":\"100%\"}},[_c('v-btn',{attrs:{\"id\":\"btnLogin\",\"onfocus\":\"this.blur()\",\"color\":\"orange darken-2\",\"large\":\"\",\"block\":\"\",\"dark\":\"\",\"should-auto-focus\":true,\"x:disabled\":\"!otpEnterComplete\"},on:{\"click\":_vm.validateOtp}},[(_vm.visitBookingEnabled && _vm.navFromLoginOptions)?_c('div',[_vm._v(\" Log In \")]):_c('div',[_vm._v(\" Generate QR Code \")])])],1)])],1),_c('v-row',{staticClass:\"no-gutters flex-center-container\"},[_c('div',{staticClass:\"text-medium\"},[_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.otpTimer.isLoading),expression:\"otpTimer.isLoading\"}],staticClass:\"white--text\"},[_vm._v(\"Resend OTP in \"+_vm._s(_vm.otpTimer.timerInSeconds)+\" seconds\")]),_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.otpTimer.isLoading),expression:\"!otpTimer.isLoading\"}],staticClass:\"white--text\"},[_vm._v(\"Did not receive the OTP? \"),_c('a',{staticClass:\"white--text\",attrs:{\"href\":\"#\"},on:{\"click\":_vm.resendOtp}},[_vm._v(\"Resend\")])])])])],1)],1)])],1)],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n v-if=\"visitBookingEnabled || gantryAccessQrEnabled\"\r\n id=\"validateOtp-page\"\r\n v-resize=\"setContentHeight\"\r\n :class=\"[\r\n { 'inset-box-shadow': !isMobileOrStandaloneMode },\r\n onsiteMode ? 'bg-blue-radial' : 'bg-teal-radial',\r\n ]\"\r\n >\r\n <!-- Toolbar -->\r\n <v-toolbar dark color=\"transparent\" class=\"pr-1\">\r\n <v-btn icon @click=\"navigateBackOrHome\" style=\"z-index: 1\">\r\n <v-icon>\r\n {{\r\n (visitBookingEnabled && navFromLoginOptions) ? \"mdi-window-close\" : \"mdi-arrow-left\"\r\n }}\r\n </v-icon>\r\n </v-btn>\r\n <v-toolbar-title>Login</v-toolbar-title>\r\n </v-toolbar>\r\n\r\n <div ref=\"validateOtpScrollable\" class=\"scrollable box-shadow-inset\">\r\n <v-card\r\n color=\"transparent\"\r\n style=\"height: inherit\"\r\n class=\"white--text flex-center-container px-5\"\r\n elevation=\"24\"\r\n >\r\n <v-form ref=\"form\">\r\n <div>\r\n <div v-if=\"otpChannelValue\" class=\"text-title text-center pb-8\">\r\n Please enter the 6-digit OTP sent to {{ this.otpChannelValue }}\r\n </div>\r\n <v-container>\r\n <v-form ref=\"validateOtpForm\" v-on:submit.prevent>\r\n <v-row class=\"no-gutters flex-center-container\"\r\n ><div class=\"text-medium mb-2\">\r\n <v-icon small color=\"white\" style=\"padding-bottom: 2px\"\r\n >mdi-information-outline</v-icon\r\n >\r\n OTP is valid for 5 minutes.\r\n </div></v-row\r\n >\r\n <v-row class=\"no-gutters\">\r\n <v-container class=\"mb-3\">\r\n <v-otp-input\r\n ref=\"toFocus\"\r\n type=\"number\"\r\n max-length=\"1\"\r\n min=\"null\"\r\n :rules=\"otpInputRules\"\r\n @finish=\"onFinish\"\r\n v-model=\"otpInput\"\r\n ></v-otp-input></v-container\r\n ></v-row>\r\n <v-row class=\"no-gutters flex-center-container\">\r\n <div class=\"px-3 mb-7\" style=\"width: 100%\">\r\n <v-btn\r\n id=\"btnLogin\"\r\n onfocus=\"this.blur()\"\r\n color=\"orange darken-2\"\r\n large\r\n block\r\n dark\r\n @click=\"validateOtp\"\r\n :should-auto-focus=\"true\"\r\n x:disabled=\"!otpEnterComplete\"\r\n >\r\n <div v-if=\"visitBookingEnabled && navFromLoginOptions\">\r\n Log In\r\n </div>\r\n <div v-else>\r\n Generate QR Code\r\n </div>\r\n </v-btn>\r\n </div></v-row\r\n ></v-form\r\n >\r\n <v-row class=\"no-gutters flex-center-container\">\r\n <div class=\"text-medium\">\r\n <a v-show=\"otpTimer.isLoading\" class=\"white--text\"\r\n >Resend OTP in {{ otpTimer.timerInSeconds }} seconds</a\r\n >\r\n <a v-show=\"!otpTimer.isLoading\" class=\"white--text\"\r\n >Did not receive the OTP?\r\n <a href=\"#\" class=\"white--text\" @click=\"resendOtp\"\r\n >Resend</a\r\n ></a\r\n >\r\n </div>\r\n </v-row>\r\n </v-container>\r\n </div>\r\n </v-form>\r\n </v-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapState, mapMutations, mapGetters } from \"vuex\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\nimport businessLogic from \"@/helpers/businessLogic\";\r\n\r\nexport default {\r\n name: \"ValidateOtp\",\r\n props: {\r\n otpChannelId: String,\r\n otpChannelValue: String,\r\n triggerOtpTimer: Boolean,\r\n },\r\n data: () => ({\r\n otpInput: null,\r\n localtriggerOtpTimer: false,\r\n otpInputRules: [\r\n (value) => !!value || \"Required\",\r\n (value) => /(^\\d{6}$)/.test(value),\r\n ],\r\n }),\r\n computed: {\r\n ...mapState([\"otpTimer\", \"preCasAuthState\"]),\r\n ...mapGetters([\"visitBookingEnabled\", \"isEmailMobileLogin\", \"gantryAccessQrEnabled\"]),\r\n navFromLoginOptions() {\r\n return this.$route.query.from === 'loginOptions'\r\n }\r\n },\r\n methods: {\r\n ...mapMutations([\r\n // \"updateTriggerOtpTimer\",\r\n \"updateResult\",\r\n \"updatePreCasAuthState\",\r\n ]),\r\n setContentHeight() {\r\n if (this.$refs.validateOtpScrollable) {\r\n const heights = this.heights();\r\n const contentHeight = heights.screen - heights.toolbar - heights.noticeBarHeight;\r\n\r\n this.$refs.validateOtpScrollable.style.height = contentHeight + \"px\";\r\n }\r\n },\r\n onFinish(otp) {\r\n this.otpInput = otp;\r\n },\r\n goHome() {\r\n this.$router.push(\"/\");\r\n },\r\n navigateBackOrHome() {\r\n if (this.navFromLoginOptions) {\r\n this.goHome()\r\n } else {\r\n this.goBack()\r\n }\r\n },\r\n async validateOtp() {\r\n const validationResult = this.$refs.form.validate();\r\n\r\n if (validationResult) {\r\n const response = await apiHelper.validateOtp(\r\n this.otpChannelId,\r\n this.otpChannelValue,\r\n this.otpInput\r\n );\r\n\r\n if (response && response.data) {\r\n window.$NotFirstRouting = true;\r\n\r\n businessLogic.updateAccountStateAfterLogin(response);\r\n\r\n if (this.gantryAccessQrEnabled && !this.navFromLoginOptions && this.authenticated) {\r\n\r\n const qrCodeResponse = await apiHelper.getGantryAccessQr();\r\n\r\n businessLogic.updateQrCodeValue(qrCodeResponse.data.encryptedQrCode)\r\n }\r\n\r\n const preCasAuthState = this.preCasAuthState;\r\n if (preCasAuthState) {\r\n // console.debug(\"preCasAuthState.routeName\", preCasAuthState.routeName)\r\n\r\n this.updatePreCasAuthState(null);\r\n\r\n if (this.gantryAccessQrEnabled && !this.navFromLoginOptions) {\r\n this.$router.push({ name: \"GantryAccessQR\" });\r\n }\r\n else {\r\n this.$router.push({\r\n name: preCasAuthState.routeName,\r\n query: { reload: true },\r\n });\r\n }\r\n } else {\r\n this.$router.push({ name: \"Home\" });\r\n }\r\n } else {\r\n this.updateResult({\r\n show: true,\r\n success: false,\r\n title: window.$msg.loginFail,\r\n message: window.$msg.invalidOtp,\r\n });\r\n\r\n // if (response === window.$msg.reloginRequired) {\r\n // setTimeout(() => {\r\n // businessLogic.logout();\r\n // }, 3000);\r\n // } else {\r\n // // next({ name: \"Home\" });\r\n // this.$router.replace({ name: \"Home\" });\r\n // }\r\n }\r\n }\r\n },\r\n async resendOtp() {\r\n if (this.visitBookingEnabled || this.gantryAccessQrEnabled) {\r\n const triggerOtpTimer = true;\r\n\r\n businessLogic.isOtpTimerRunning(\r\n window.$settings.resendOtpTimeIntervalInSeconds,\r\n this.time.nowMoment.format(),\r\n triggerOtpTimer\r\n );\r\n }\r\n\r\n const response = await apiHelper.requestOtp(\r\n this.otpChannelId,\r\n this.otpChannelValue\r\n );\r\n\r\n this.commonResponseHandler(\r\n response,\r\n window.$msg.otpGenerateSuccess,\r\n window.$msg.otpGenerateFail,\r\n null,\r\n null,\r\n null\r\n );\r\n },\r\n },\r\n activated() {\r\n this.$nextTick(() => this.setContentHeight());\r\n this.$nextTick(() => this.$refs.toFocus.focus());\r\n\r\n this.otpInput = null;\r\n\r\n if (this.triggerOtpTimer) {\r\n this.localtriggerOtpTimer = true;\r\n }\r\n\r\n // if (this.authenticated) {\r\n // this.$router.push({ name: \"Home\" });\r\n // }\r\n\r\n // if (!this.otpChannel) {\r\n // this.$router.push({ name: \"EmailMobileLogin\" });\r\n // }\r\n if (this.visitBookingEnabled || this.gantryAccessQrEnabled) {\r\n businessLogic.isOtpTimerRunning(\r\n window.$settings.resendOtpTimeIntervalInSeconds,\r\n this.time.nowMoment.format(),\r\n this.localtriggerOtpTimer\r\n );\r\n }\r\n },\r\n beforeRouteEnter(to, from, next) {\r\n next((vm) => {\r\n if (vm.authenticated) {\r\n return next({ name: \"Home\" });\r\n } else {\r\n if (vm.visitBookingEnabled || vm.gantryAccessQrEnabled) {\r\n next();\r\n } else {\r\n apiHelper.casAuth();\r\n }\r\n }\r\n\r\n if (!vm.otpChannelValue) {\r\n return next({ name: \"EmailMobileLogin\" });\r\n } else {\r\n next();\r\n }\r\n });\r\n },\r\n};\r\n</script>\r\n\r\n<style>\r\n.v-text-field {\r\n margin-left: 3px !important;\r\n margin-right: 3px !important;\r\n}\r\n.v-text-field--outlined .v-input__control .v-input__slot {\r\n min-height: 50px;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ValidateOtp.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ValidateOtp.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ValidateOtp.vue?vue&type=template&id=19ee57de&\"\nimport script from \"./ValidateOtp.vue?vue&type=script&lang=js&\"\nexport * from \"./ValidateOtp.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ValidateOtp.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VOtpInput } from 'vuetify/lib/components/VOtpInput';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VContainer,VForm,VIcon,VOtpInput,VRow,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.gantryAccessQrEnabled && _vm.qrCodeEntry)?_c('div',[_c('div',[_c('v-card',{staticClass:\"pr-1\",staticStyle:{\"border-radius\":\"0px\"},attrs:{\"height\":\"104px\",\"color\":\"primary\"}},[_c('v-toolbar',{staticStyle:{\"border-bottom-right-radius\":\"5px\",\"border-bottom-left-radius\":\"5px\"},attrs:{\"id\":\"newBookingToolbar\",\"dark\":\"\",\"elevation\":\"0\",\"color\":\"primary\"}},[_c('img',{staticClass:\"mr-3\",staticStyle:{\"height\":\"48px\",\"widthx\":\"24px\"},attrs:{\"src\":((this.iconPath) + \"nlb-logo-white.png\")}}),_c('v-toolbar-title',[_vm._v(\"QR Code Day Pass\")]),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":_vm.confirmLogout}},[_c('v-icon',[_vm._v(\"mdi-logout-variant\")])],1)],1),_c('v-card',{staticClass:\"mx-2 px-5 pt-8 pb-3 mb-2\",staticStyle:{\"border-radius\":\"8px\"}},[_c('div',{staticClass:\"text-center pt-4 pb-10\"},[_c('figure',{staticClass:\"qrcode\"},[_c('qrcode-vue',{attrs:{\"value\":_vm.qrCodeEntry,\"size\":160,\"level\":\"H\"}}),_c('img',{staticClass:\"qrcode__image\",staticStyle:{\"height\":\"50px\",\"width\":\"50px\"},attrs:{\"src\":((this.iconPath) + \"nlb-daypass-logo.png\")}})],1)]),_c('div',{staticClass:\"text-title text-center\"},[_vm._v(\" Please scan this QR code to enter and exit the library. \")]),_c('div',{staticClass:\"text-title text-center pt-2\"},[_vm._v(\" QR code is valid for today \")]),_c('div',{staticClass:\"text-title text-center\"},[_vm._v(\" \"+_vm._s(_vm.formatCurrentDate())+\" \")])])],1)],1),_c('div',{attrs:{\"id\":\"bottomNavigation\"}},[_c('v-bottom-navigation',{directives:[{name:\"show\",rawName:\"v-show\",value:(true),expression:\"true\"}],staticStyle:{\"height\":\"auto\"},attrs:{\"fixed\":\"\",\"grow\":\"\",\"color\":\"primary\",\"block\":\"\"}},[_c('v-btn',[_c('span',[_vm._v(\"QR Code\")]),_c('v-icon',[_vm._v(\"mdi-qrcode\")])],1)],1)],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n v-if=\"gantryAccessQrEnabled && qrCodeEntry\"\r\n >\r\n <div>\r\n <v-card\r\n height=\"104px\"\r\n style=\"border-radius: 0px\"\r\n color=\"primary\"\r\n class=\"pr-1\"\r\n >\r\n <!-- Toolbar -->\r\n <v-toolbar\r\n id=\"newBookingToolbar\"\r\n dark\r\n elevation=\"0\"\r\n color=\"primary\"\r\n style=\"border-bottom-right-radius: 5px; border-bottom-left-radius: 5px\"\r\n >\r\n <img\r\n :src=\"`${this.iconPath}nlb-logo-white.png`\"\r\n style=\"height: 48px; widthx: 24px\"\r\n class=\"mr-3\"\r\n />\r\n\r\n <v-toolbar-title>QR Code Day Pass</v-toolbar-title>\r\n\r\n <v-spacer></v-spacer>\r\n\r\n <v-btn icon @click=\"confirmLogout\">\r\n <v-icon>mdi-logout-variant</v-icon>\r\n </v-btn>\r\n </v-toolbar>\r\n \r\n <v-card\r\n class=\"mx-2 px-5 pt-8 pb-3 mb-2\"\r\n style=\"border-radius: 8px\"\r\n >\r\n <div class=\"text-center pt-4 pb-10\">\r\n <figure class=\"qrcode\">\r\n <qrcode-vue :value=\"qrCodeEntry\" :size=\"160\" level=\"H\" />\r\n <img\r\n :src=\"`${this.iconPath}nlb-daypass-logo.png`\"\r\n style=\"height: 50px; width: 50px\"\r\n class=\"qrcode__image\"\r\n />\r\n </figure>\r\n </div>\r\n <div class=\"text-title text-center\">\r\n Please scan this QR code to enter and exit the library.\r\n </div>\r\n <div class=\"text-title text-center pt-2\">\r\n QR code is valid for today\r\n </div>\r\n <div class=\"text-title text-center\">\r\n {{ formatCurrentDate() }}\r\n </div>\r\n </v-card>\r\n </v-card>\r\n </div>\r\n <div id=\"bottomNavigation\">\r\n <v-bottom-navigation\r\n v-show=\"true\"\r\n fixed\r\n grow\r\n color=\"primary\"\r\n style=\"height: auto\"\r\n block\r\n >\r\n <v-btn>\r\n <span>QR Code</span>\r\n <v-icon>mdi-qrcode</v-icon>\r\n </v-btn>\r\n </v-bottom-navigation>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport QrcodeVue from 'qrcode.vue';\r\nimport { mapGetters, mapState } from 'vuex';\r\nimport formatters from \"@/helpers/formatters\";\r\n\r\nexport default {\r\n name: 'GantryAccessQR',\r\n components: {\r\n QrcodeVue,\r\n },\r\n computed: {\r\n ...mapState([\"qrCode\", \"qrCodeEntry\"]),\r\n ...mapGetters([\"authenticated\", \"visitBookingEnabled\", \"gantryAccessQrEnabled\"]),\r\n },\r\n methods: {\r\n confirmLogout() {\r\n const yesCallback = async () => {\r\n this.logout();\r\n };\r\n\r\n this.updateSystemDialog({\r\n title: window.$msg.confirmLogout,\r\n // message: window.$msg.confirmLogout,\r\n actions: {\r\n actionType: \"YesOrNo\",\r\n yes: {\r\n callback: yesCallback,\r\n },\r\n },\r\n });\r\n },\r\n formatCurrentDate() {\r\n return formatters.formatCurrentDate();\r\n },\r\n },\r\n beforeRouteEnter(to, from, next) {\r\n next((vm) => {\r\n if (vm.authenticated && vm.gantryAccessQrEnabled && vm.qrCodeEntry) {\r\n next()\r\n }\r\n else {\r\n return next({ name: \"EmailMobileLogin\" });\r\n }\r\n });\r\n },\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.qrcode {\r\n display: inline-block;\r\n font-size: 0;\r\n margin-bottom: 0;\r\n position: relative;\r\n}\r\n/* Fix bottom-navigation button floting up issue */\r\n#bottomNavigation .v-btn:not(.v-btn--round).v-size--default {\r\n height: auto;\r\n}\r\n\r\n#bottomNavigation,\r\n#bottomNavigation .v-icon {\r\n font-size: 20px;\r\n}\r\n\r\n#bottomNavigation .v-icon {\r\n margin-bottom: 2px;\r\n}\r\n\r\n#bottomNavigation .v-btn {\r\n padding-top: 7px;\r\n padding-bottom: 5px;\r\n background-color:white;\r\n}\r\n\r\n#bottomNavigation .v-item-group.v-bottom-navigation .v-btn {\r\n font-size: 12px !important;\r\n}\r\n\r\n.qrcode__image {\r\n background-color: #fff;\r\n border: 0.25rem solid #fff;\r\n border-radius: 0.25rem;\r\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.25);\r\n height: 15%;\r\n left: 50%;\r\n overflow: hidden;\r\n position: absolute;\r\n top: 50%;\r\n transform: translate(-50%, -50%);\r\n width: 15%;\r\n}\r\n</style>\r\n\r\n<style>\r\n#newBookingToolbar .v-toolbar__content,\r\n.v-toolbar__extension {\r\n padding-left: 10px !important;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GantryAccessQR.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GantryAccessQR.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GantryAccessQR.vue?vue&type=template&id=4133be48&scoped=true&\"\nimport script from \"./GantryAccessQR.vue?vue&type=script&lang=js&\"\nexport * from \"./GantryAccessQR.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GantryAccessQR.vue?vue&type=style&index=0&id=4133be48&scoped=true&lang=css&\"\nimport style1 from \"./GantryAccessQR.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4133be48\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBottomNavigation } from 'vuetify/lib/components/VBottomNavigation';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBottomNavigation,VBtn,VCard,VIcon,VSpacer,VToolbar,VToolbarTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}]},[_c('v-card',{staticClass:\"pr-1\",staticStyle:{\"border-radius\":\"0px\"},attrs:{\"color\":\"primary\",\"height\":_vm.visitBranchMenus ? '140px' : '104px'}},[_c('v-toolbar',{staticStyle:{\"border-bottom-right-radius\":\"5px\",\"border-bottom-left-radius\":\"5px\"},attrs:{\"id\":\"newBookingToolbar\",\"dark\":\"\",\"elevation\":\"0\",\"color\":\"primary\"}},[_c('img',{staticClass:\"mr-3\",staticStyle:{\"height\":\"48px\",\"widthx\":\"24px\"},attrs:{\"img\":\"\",\"aria-label\":\"NLB Logo\",\"src\":((this.iconPath) + \"nlb-logo-white.png\")}}),_c('v-toolbar-title',[_vm._v(\"Seat Availability\")]),_c('v-spacer')],1)],1),_c('div',{ref:\"homeScrollable\",staticClass:\"scrollable\",style:(_vm.visitBranchMenus ? 'margin-top: -36px !important' : 'margin-top: -45px !important')},[(_vm.visitBranchMenus)?_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.showSeatBookingSearchForm),expression:\"!showSeatBookingSearchForm\"}]},[_c('VisitBookingSearchForm',{ref:\"visitBookingSearchForm\"})],1):_vm._e(),((!_vm.visitBranchMenus || _vm.showSeatBookingSearchForm))?_c('v-card',{staticClass:\"mx-2 px-5 pt-4 pb-3 mb-2\",staticStyle:{\"border-radius\":\"8px\"}},[_c('div',[_c('div',{staticClass:\"label\"},[_c('span',[_c('v-icon',{attrs:{\"slot\":\"prepend-inner\",\"color\":\"green\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-seat\")]),_vm._v(\" Available \")],1),_c('span',[_c('v-icon',{attrs:{\"slot\":\"prepend-inner\",\"color\":\"red\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-cancel\")]),_vm._v(\" Not Available \")],1)]),_c('div',{staticStyle:{\"margin-top\":\".5rem\"}},[_c('UpdateTimer',{staticClass:\"py-3\",on:{\"times-up\":function($event){return _vm.searchSeatAvailability(_vm.branchCode, _vm.areaId)}}})],1)]),_c('div',[_c('span',{staticClass:\"label\"},[_vm._v(\"Library\")]),_c('v-text-field',{attrs:{\"aria-label\":\"Select library\",\"value\":_vm.branch,\"readonly\":\"\"}},[_c('v-icon',{attrs:{\"slot\":\"prepend-inner\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-library\")])],1)],1),(_vm.areas)?_c('div',{staticClass:\"accordion\"},_vm._l((_vm.areas),function(area,i){return _c('Accordion',{key:i,attrs:{\"areas\":[area],\"index\":i+1,\"open\":area.open,\"displaySlots\":_vm.displaySlots},on:{\"toggleOpen\":_vm.toggleOpen}})}),1):_c('div',[_c('span',[_vm._v(\"Unable to retrieve records.\")])])]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.open ? 'area-cont open' : 'area-cont',on:{\"click\":function($event){return _vm.$emit('toggleOpen', _vm.index)}}},_vm._l((_vm.areas),function(area,i){return _c('div',{key:i,attrs:{\"index\":i}},[_c('div',{staticClass:\"areas\",attrs:{\"id\":area.areaId},on:{\"click\":function($event){_vm.activeIndex = _vm.activeIndex === i ? null : i}}},[_vm._v(\" \"+_vm._s(area.name)+\" \"),_c('span',{staticClass:\"accordion__arrow\"})]),_c('div',{staticClass:\"table\"},[_c('div',[_c('SeatAvailabilityTable',{key:_vm.j,attrs:{\"index\":_vm.j,\"seats\":area.seats,\"displaySlots\":_vm.displaySlots}})],1)])])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"seatAvailabilityTableRef\"},[_c('div',[_c('table',{staticClass:\"table\",attrs:{\"id\":\"datatable\"}},[_c('thead',[_c('tr',[_c('th',[_vm._v(\"Seats\")]),_vm._l((_vm.seats[0].hasAvailableSlots.slice(0, _vm.displaySlots)),function(slot,index){return _c('th',{key:index},[(index === 0)?_c('span',[_vm._v(\"Now: \"+_vm._s(slot.time))]):_c('span',[_vm._v(_vm._s(slot.time))])])})],2)]),_vm._l((_vm.seats),function(seat,i){return _c('tbody',{key:i,attrs:{\"index\":i}},[_c('tr',[_c('td',[_vm._v(_vm._s(seat.name))]),_vm._l((seat.hasAvailableSlots.slice(0, _vm.displaySlots)),function(slot,index){return _c('td',{key:index},[(slot.isAvail)?_c('v-icon',{attrs:{\"slot\":\"prepend-inner\",\"color\":\"green\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-seat\")]):_c('v-icon',{attrs:{\"slot\":\"prepend-inner\",\"color\":\"red\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-cancel\")])],1)})],2)])})],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div ref=\"seatAvailabilityTableRef\">\r\n <div>\r\n <table class=\"table\" id=\"datatable\">\r\n <thead>\r\n <tr>\r\n <th>Seats</th>\r\n <th v-for=\"(slot, index) in seats[0].hasAvailableSlots.slice(0, displaySlots)\" :key=\"index\">\r\n <span v-if=\"index === 0\">Now: {{ slot.time }}</span>\r\n <span v-else>{{ slot.time }}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody v-for=\"(seat,i) in seats\" :index=\"i\" :key=\"i\">\r\n <tr>\r\n <td>{{ seat.name }}</td>\r\n <td v-for=\"(slot, index) in seat.hasAvailableSlots.slice(0, displaySlots)\" :key=\"index\">\r\n <v-icon v-if=\"slot.isAvail\" color=\"green\" slot=\"prepend-inner\">mdi-seat</v-icon>\r\n <v-icon v-else color=\"red\" slot=\"prepend-inner\">mdi-cancel</v-icon>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n import LoginIcon from \"@/components/LoginIcon\";\r\n\r\n export default {\r\n name: 'SeatAvailabilityTable', \r\n props: ['seats', 'index', 'displaySlots'],\r\n components: {\r\n LoginIcon,\r\n } \r\n };\r\n</script>\r\n\r\n<style scoped>\r\n table, td, th {\r\n border: 1px solid;\r\n text-align: center;\r\n }\r\n\r\n table, tr {\r\n width: 100%;\r\n border-collapse: collapse;\r\n }\r\n\r\n th {\r\n /*width: 16%;*/\r\n }\r\n\r\n td {\r\n padding: .3em;\r\n }\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatAvailabilityTable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatAvailabilityTable.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SeatAvailabilityTable.vue?vue&type=template&id=1eb13958&scoped=true&\"\nimport script from \"./SeatAvailabilityTable.vue?vue&type=script&lang=js&\"\nexport * from \"./SeatAvailabilityTable.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SeatAvailabilityTable.vue?vue&type=style&index=0&id=1eb13958&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1eb13958\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VIcon})\n","<template>\r\n <div :class=\"open ? 'area-cont open' : 'area-cont'\" @click=\"$emit('toggleOpen', index)\" >\r\n <div v-for=\"(area,i) in areas\" :index=\"i\" :key=\"i\">\r\n <!-- <div :id='index' class=\"areas\" @click='activeIndex = activeIndex === i ? null : i'> -->\r\n <div :id='area.areaId' class=\"areas\" @click='activeIndex = activeIndex === i ? null : i'>\r\n {{ area.name }}\r\n <span class='accordion__arrow'></span> \r\n </div>\r\n <div class=\"table\">\r\n <div>\r\n <SeatAvailabilityTable :index=\"j\" :key=\"j\" :seats=\"area.seats\" :displaySlots=\"displaySlots\" />\r\n </div> \r\n </div>\r\n </div> \r\n </div>\r\n</template>\r\n\r\n<script>\r\n import SeatAvailabilityTable from \"@/components/SeatAvailabilityTable\";\r\n\r\n export default {\r\n name: 'Accordion',\r\n //props: ['areas', 'index', 'open'],\r\n data: () => ({\r\n activeIndex: null,\r\n }),\r\n\r\n props: {\r\n areas: {\r\n type: Array,\r\n required: false\r\n },\r\n index: {\r\n type: Number,\r\n required: false\r\n },\r\n open: {\r\n type: Boolean,\r\n required: false\r\n },\r\n title: {\r\n type: String,\r\n required: false\r\n },\r\n list: {\r\n type: Array,\r\n required: false\r\n },\r\n height: {\r\n type: String,\r\n required: false\r\n },\r\n maxWidth: {\r\n type: String,\r\n required: false\r\n },\r\n select: {\r\n type: Object,\r\n required: false,\r\n default: function () {\r\n return {\r\n show: false,\r\n selectedItem: null\r\n }\r\n }\r\n },\r\n fixed: {\r\n type: Boolean,\r\n required: false,\r\n },\r\n displaySlots: {\r\n type: Number,\r\n required: true\r\n }\r\n },\r\n\r\n components: {\r\n SeatAvailabilityTable,\r\n },\r\n\r\n methods: {\r\n scrollToAccordion() {\r\n const id = window.location.pathname.split('/').pop();\r\n\r\n if (!isNaN(parseInt(id))) {\r\n const element = document.getElementById(id);\r\n\r\n if (element) {\r\n const parentElement = element.parentElement.parentElement;\r\n\r\n // if (parentElement) {\r\n\r\n // // console.log('Index: ' + this.index);\r\n // // console.log('Id: ' + id);\r\n\r\n // // Add CSS class to the parent element\r\n // //parentElement.classList.add('open'); // Replace 'your-css-class' with the name of your CSS class\r\n // //if (this.index === parseInt(id)) {\r\n // // this.open = true;\r\n // element.scrollIntoView({ behavior: 'smooth' });\r\n // //}\r\n // }\r\n \r\n // Scroll the parent element into view\r\n //parentElement.scrollIntoView({ behavior: 'smooth' }); \r\n \r\n element.scrollIntoView({ behavior: 'smooth' }); \r\n }\r\n }\r\n },\r\n },\r\n\r\n mounted() {\r\n this.scrollToAccordion();\r\n setInterval(this.scrollToAccordion, 60000); // load method every 1 min\r\n },\r\n };\r\n</script>\r\n\r\n<style scoped>\r\n .area-cont {\r\n display: block;\r\n width: 100%;\r\n margin-top: .5rem;\r\n border-radius: 8px;\r\n background-color: #fff;\r\n cursor: pointer;\r\n }\r\n\r\n .area-cont .areas {\r\n padding: 1rem;\r\n position: relative;\r\n color: #3c3c3c;\r\n transition: all 0.4s linear;\r\n display: flex;\r\n align-items: center;\r\n }\r\n \r\n .area-cont .areas::after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n right: 0px;\r\n transform: translateY(-50%) rotate(0deg);\r\n\r\n width: 100%;\r\n height: 100%;\r\n box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.25);\r\n }\r\n\r\n .area-cont.open .areas {\r\n background-color: #dcdbdb;\r\n }\r\n\r\n .area-cont.open .areas::after {\r\n transform: translateY(-50%) rotate(180deg);\r\n }\r\n\r\n .area-cont .table {\r\n color: #3c3c3c;\r\n opacity: 1;\r\n max-height: 0px;\r\n padding: 0 1rem;\r\n overflow-y: hidden;\r\n transition: max-height 0.5s ease-out;\r\n transition: padding 0.5s ease-out;\r\n }\r\n\r\n .area-cont.open .table {\r\n opacity: 1;\r\n padding: 2rem 1rem;\r\n max-height: fit-content;\r\n }\r\n\r\n .accordion__arrow {\r\n position: absolute;\r\n margin-right: 1em;\r\n width: 1em;\r\n height: 1em;\r\n box-sizing: border-box;\r\n right: 0;\r\n }\r\n .accordion__arrow:after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n left: 0;\r\n width: .65em;\r\n height: .65em;\r\n border-width: 1px 1px 0 0;\r\n border-style: solid;\r\n border-color: initial;\r\n transform: rotate(45deg) translate(0, -50%);\r\n transform-origin: top;\r\n transition: transform .3s ease-out;\r\n box-sizing: border-box; \r\n }\r\n\r\n .area-cont.open > div > .areas > .accordion__arrow:after {\r\n transform: rotate(135deg) translate(0, -50%); }\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Accordion.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Accordion.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Accordion.vue?vue&type=template&id=5b9b81aa&scoped=true&\"\nimport script from \"./Accordion.vue?vue&type=script&lang=js&\"\nexport * from \"./Accordion.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Accordion.vue?vue&type=style&index=0&id=5b9b81aa&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5b9b81aa\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"py-2x text-small font-weight-bold primary--text\",staticStyle:{\"padding-top\":\"5px\",\"padding-bottom\":\"5px\",\"border-bottom-left-radiusx\":\"3px\",\"border-bottom-right-radiusx\":\"3px\"},attrs:{\"tile\":\"\"}},[_c('v-progress-circular',{staticClass:\"px-0\",staticStyle:{\"font-size\":\"11px\",\"margin-left\":\"-5px\",\"margin-right\":\"9px\"},attrs:{\"rotate\":-90,\"size\":26,\"width\":2,\"value\":_vm.value,\"color\":\"primary\"}},[_vm._v(_vm._s(_vm.timer))]),_c('span',[_vm._v(\"Last updated : \"+_vm._s(_vm.formattedTimeNow))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n tile\r\n class=\"py-2x text-small font-weight-bold primary--text\"\r\n style=\"\r\n padding-top: 5px;\r\n padding-bottom: 5px;\r\n border-bottom-left-radiusx: 3px;\r\n border-bottom-right-radiusx: 3px;\r\n \"\r\n >\r\n <v-progress-circular\r\n :rotate=\"-90\"\r\n :size=\"26\"\r\n :width=\"2\"\r\n :value=\"value\"\r\n color=\"primary\"\r\n style=\"font-size: 11px; margin-left: -5px; margin-right: 9px\"\r\n class=\"px-0\"\r\n >{{ timer }}</v-progress-circular\r\n >\r\n\r\n <span>Last updated : {{ formattedTimeNow }}</span>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapState } from \"vuex\";\r\n\r\nexport default {\r\n name: \"UpdateTimer\",\r\n components: {},\r\n data: () => ({\r\n interval: {},\r\n value: 100,\r\n timer: window.$settings.seatAvailRefreshIntervalInSeconds,\r\n formattedTimeNow: null,\r\n }),\r\n computed: {\r\n ...mapState([\"dashboard\"]),\r\n },\r\n methods: {\r\n updateLastUpdatedTime() {\r\n this.formattedTimeNow = this.time.nowMoment.format(\r\n \"D MMM YYYY, h:mm:ss a\"\r\n );\r\n },\r\n resetTimer() {\r\n this.timer = window.$settings.seatAvailRefreshIntervalInSeconds;\r\n this.value = 100;\r\n },\r\n },\r\n watch: {\r\n dashboard(newValue, oldValue) {\r\n if (newValue) {\r\n this.resetTimer();\r\n this.updateLastUpdatedTime();\r\n }\r\n },\r\n },\r\n beforeDestroy() {\r\n clearInterval(this.interval);\r\n },\r\n mounted() {\r\n this.updateLastUpdatedTime();\r\n\r\n this.interval = setInterval(() => {\r\n const totalSeconds = window.$settings.seatAvailRefreshIntervalInSeconds;\r\n\r\n if (this.timer <= 0) {\r\n this.resetTimer();\r\n } else {\r\n this.timer -= 1;\r\n const timerPercentage = (1 / totalSeconds) * 100;\r\n this.value -= timerPercentage;\r\n\r\n if (this.timer === 0) {\r\n this.$emit(\"times-up\");\r\n this.updateLastUpdatedTime();\r\n }\r\n }\r\n }, 1000);\r\n },\r\n};\r\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateTimer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateTimer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UpdateTimer.vue?vue&type=template&id=254e69f8&\"\nimport script from \"./UpdateTimer.vue?vue&type=script&lang=js&\"\nexport * from \"./UpdateTimer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VProgressCircular})\n","<template>\r\n <div v-resize=\"setContentHeight\">\r\n <!-- Top View -->\r\n <v-card style=\"border-radius: 0px\" color=\"primary\" class=\"pr-1\"\r\n :height=\"visitBranchMenus ? '140px' : '104px'\">\r\n\r\n <!-- Toolbar -->\r\n <v-toolbar id=\"newBookingToolbar\" dark elevation=\"0\" color=\"primary\" style=\"border-bottom-right-radius: 5px; border-bottom-left-radius: 5px\">\r\n <img img aria-label=\"NLB Logo\" style=\"height: 48px; widthx: 24px\" class=\"mr-3\" \r\n :src=\"`${this.iconPath}nlb-logo-white.png`\"/>\r\n\r\n <v-toolbar-title>Seat Availability</v-toolbar-title>\r\n\r\n <v-spacer></v-spacer>\r\n\r\n <!-- <v-btn aria-label=\"Show help\" @click=\"$router.push({ name: 'Help' }, () => {})\" icon>\r\n <v-icon>mdi-help-circle-outline</v-icon>\r\n </v-btn>\r\n\r\n <v-btn icon>\r\n <LoginIcon />\r\n </v-btn> -->\r\n </v-toolbar>\r\n </v-card>\r\n\r\n <div ref=\"homeScrollable\" class=\"scrollable\" \r\n :style=\"visitBranchMenus ? 'margin-top: -36px !important' : 'margin-top: -45px !important'\"\r\n > \r\n <!-- Search form not in use -->\r\n <div v-if=\"visitBranchMenus\" v-show=\"!showSeatBookingSearchForm\">\r\n <VisitBookingSearchForm ref=\"visitBookingSearchForm\" />\r\n </div>\r\n\r\n <v-card class=\"mx-2 px-5 pt-4 pb-3 mb-2\" style=\"border-radius: 8px\"\r\n v-if=\"(!visitBranchMenus || showSeatBookingSearchForm)\">\r\n\r\n <div>\r\n <div class=\"label\">\r\n <span>\r\n <v-icon color=\"green\" slot=\"prepend-inner\">mdi-seat</v-icon>\r\n Available\r\n </span>\r\n <span>\r\n <v-icon color=\"red\" slot=\"prepend-inner\">mdi-cancel</v-icon>\r\n Not Available\r\n </span>\r\n </div>\r\n <div style=\"margin-top:.5rem\">\r\n <UpdateTimer @times-up=\"searchSeatAvailability(branchCode, areaId)\" class=\"py-3\" />\r\n </div> \r\n </div>\r\n\r\n <!-- Library -->\r\n <div>\r\n <span class=\"label\">Library</span>\r\n\r\n <v-text-field aria-label=\"Select library\"\r\n :value=\"branch\" readonly>\r\n <v-icon slot=\"prepend-inner\">mdi-library</v-icon>\r\n </v-text-field>\r\n </div>\r\n\r\n <!-- Accordion :index=\"i+1\" -->\r\n <div v-if=\"areas\" class=\"accordion\">\r\n <Accordion v-for=\"(area,i) in areas\" \r\n :areas=\"[area]\"\r\n :index=\"i+1\"\r\n :key=\"i\"\r\n :open=\"area.open\"\r\n :displaySlots=\"displaySlots\"\r\n @toggleOpen=\"toggleOpen\"\r\n />\r\n </div>\r\n <div v-else>\r\n <span>Unable to retrieve records.</span>\r\n </div>\r\n\r\n </v-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n import { mapGetters, mapMutations, mapState } from 'vuex';\r\n import apiHelper from \"@/helpers/apiHelper\";\r\n import LoginIcon from \"@/components/LoginIcon\";\r\n import Accordion from \"@/components/Accordion\";\r\n import UpdateTimer from \"@/components/UpdateTimer\";\r\n import businessLogic from \"@/helpers/businessLogic\";\r\n import VisitBookingSearchForm from \"@/components/VisitBookingSearchForm\";\r\n\r\n require('@/assets/styles/main.css')\r\n\r\n export default {\r\n name: \"SeatsAvailability\",\r\n components: {\r\n LoginIcon,\r\n Accordion,\r\n UpdateTimer,\r\n VisitBookingSearchForm,\r\n },\r\n\r\n props: {\r\n fixed: Boolean\r\n },\r\n\r\n data: () => ({ \r\n areas: [], // for data after branch is searched\r\n branch: null,\r\n areaId: null,\r\n branchCode: null,\r\n currentTime: null, // for last load/refresh time\r\n displaySlots: window.$settings.seatAvailabilityFixedDisplaySlotsDisplay,\r\n }),\r\n\r\n computed: {\r\n // Get BranchMenu from index.js \r\n ...mapState([\"searchResults\"]),\r\n ...mapGetters([\"seatBranchMenus\"]),\r\n\r\n selectedBranch() { \r\n return this.inputPopupSelectBranch.selectedItem; \r\n },\r\n \r\n selectedArea() { \r\n return this.inputPopupSelectArea.selectedItem; \r\n },\r\n },\r\n\r\n methods: {\r\n ...mapMutations([\r\n \"updateSearchResults\",\r\n ]),\r\n\r\n setContentHeight() {\r\n if (this.$refs.homeScrollable) {\r\n const heights = this.heights(); \r\n const contentHeight = this.Accordion\r\n ? heights.screen - heights.toolbarWithButtons - heights.bottombar - heights.noticeBarHeight\r\n : heights.screen - heights.toolbar - heights.bottombar - heights.noticeBarHeight;\r\n\r\n this.$refs.homeScrollable.style.height = contentHeight + \"px\";\r\n }\r\n },\r\n\r\n async searchSeatAvailability(branchCode, areaId) {\r\n const searchResponse = await apiHelper.searchSeatAvailability(branchCode, areaId);\r\n\r\n if (searchResponse === window.$msg.reloginRequired) {\r\n // console.log(\"login required\");\r\n businessLogic.im8Logout();\r\n return;\r\n }\r\n\r\n if (searchResponse && \r\n searchResponse.data && \r\n searchResponse.data.areas &&\r\n searchResponse.data.areas.length) {\r\n this.updateSearchResults(searchResponse.data);\r\n\r\n if (searchResponse.data.found) \r\n {\r\n this.branch = searchResponse.data.branchName;\r\n this.areas = searchResponse.data.areas;\r\n }\r\n }\r\n else {\r\n // Api response did not retrieve anything, display error warning\r\n // this.updateResult({\r\n // show: true,\r\n // success: false,\r\n // title: window.$msg.noResultsFoundTitle,\r\n // message: window.$msg.noResultsFoundMsg,\r\n // });\r\n\r\n this.$router.push({ name: 'SeatsAvailabilities' }, () => {});\r\n }\r\n },\r\n // Accordion toggleOpen method\r\n toggleOpen(index) {\r\n this.areas = this.areas.map((area, i) => {\r\n if (index === i + 1) {\r\n area.open = !area.open;\r\n }\r\n else {\r\n area.open = false;\r\n } \r\n return area;\r\n });\r\n },\r\n },\r\n\r\n beforeRouteEnter(to, from, next) { \r\n next(vm => {\r\n vm.branchCode = to.params.branchCode;\r\n vm.areaId = to.params.areaId;\r\n vm.searchSeatAvailability(vm.branchCode, vm.areaId);\r\n })\r\n },\r\n };\r\n</script>\r\n\r\n<style scoped> \r\n .accordion {\r\n width: 100%;\r\n padding-bottom: 120px;\r\n }\r\n\r\n .accordion-item {\r\n border: 1px solid #ccc;\r\n margin-bottom: 5px;\r\n }\r\n\r\n .accordion-title {\r\n background-color: #f4f4f4;\r\n padding: 10px;\r\n cursor: pointer;\r\n }\r\n\r\n .accordion-title.active {\r\n background-color: #e0e0e0;\r\n }\r\n\r\n .accordion-content {\r\n padding: 10px;\r\n }\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatsAvailability.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatsAvailability.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SeatsAvailability.vue?vue&type=template&id=99aee8fe&scoped=true&\"\nimport script from \"./SeatsAvailability.vue?vue&type=script&lang=js&\"\nexport * from \"./SeatsAvailability.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SeatsAvailability.vue?vue&type=style&index=0&id=99aee8fe&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"99aee8fe\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VCard,VIcon,VSpacer,VTextField,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.setContentHeight),expression:\"setContentHeight\"}]},[_c('v-card',{staticClass:\"pr-1\",staticStyle:{\"border-radius\":\"0px\"},attrs:{\"color\":\"primary\",\"height\":_vm.visitBranchMenus ? '140px' : '104px'}},[_c('v-toolbar',{staticStyle:{\"border-bottom-right-radius\":\"5px\",\"border-bottom-left-radius\":\"5px\"},attrs:{\"id\":\"newBookingToolbar\",\"dark\":\"\",\"elevation\":\"0\",\"color\":\"primary\"}},[_c('img',{staticClass:\"mr-3\",staticStyle:{\"height\":\"48px\",\"widthx\":\"24px\"},attrs:{\"img\":\"\",\"aria-label\":\"NLB Logo\",\"src\":((this.iconPath) + \"nlb-logo-white.png\")}}),_c('v-toolbar-title',[_vm._v(\"Seat Availability\")]),_c('v-spacer'),_c('v-btn',{attrs:{\"aria-label\":\"Show help\",\"icon\":\"\"},on:{\"click\":function($event){_vm.$router.push({ name: 'Help' }, function () {})}}},[_c('v-icon',[_vm._v(\"mdi-help-circle-outline\")])],1),_c('v-btn',{attrs:{\"icon\":\"\"}},[_c('LoginIcon')],1)],1)],1),_c('div',{ref:\"homeScrollable\",staticClass:\"scrollable\",style:(_vm.visitBranchMenus ? 'margin-top: -36px !important' : 'margin-top: -45px !important')},[(_vm.visitBranchMenus)?_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.showSeatBookingSearchForm),expression:\"!showSeatBookingSearchForm\"}]},[_c('VisitBookingSearchForm',{ref:\"visitBookingSearchForm\"})],1):_vm._e(),((!_vm.visitBranchMenus || _vm.showSeatBookingSearchForm) && _vm.settings && _vm.inputPopupSelectBranch.selectedItem)?_c('v-card',{staticClass:\"mx-2 px-5 pt-4 pb-3 mb-2\",staticStyle:{\"border-radius\":\"8px\"}},[_c('div',{staticClass:\"seatAvailMessage_cont\"},[_c('div',{staticStyle:{\"text-align\":\"justify\",\"line-height\":\"1\"}},[_c('span',{staticStyle:{\"font-size\":\"13px\",\"font-weight\":\"bold\"}},[_vm._v(\" \"+_vm._s(_vm.refMsg)+\" \")])]),_c('div',{staticClass:\"label\",staticStyle:{\"margin-top\":\".5rem\"}},[_c('span',[_c('v-icon',{attrs:{\"slot\":\"prepend-inner\",\"color\":\"green\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-seat\")]),_vm._v(\" Available \")],1),_c('span',[_c('v-icon',{attrs:{\"slot\":\"prepend-inner\",\"color\":\"red\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-cancel\")]),_vm._v(\" Not Available \")],1)]),_c('div',{staticStyle:{\"margin-top\":\".5rem\"}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Last Updated Time: \")]),_c('span',[_vm._v(_vm._s(_vm.currentTime))])])]),_c('div',{staticClass:\"inputPopupSelectDiv\",on:{\"click\":function($event){_vm.inputPopupSelectBranch.show = true}}},[_c('span',{staticClass:\"label\"},[_vm._v(\"Library\")]),_c('v-text-field',{attrs:{\"aria-label\":\"Select library\",\"value\":_vm.inputPopupSelectBranch.selectedItem.name,\"readonly\":\"\"}},[_c('v-icon',{attrs:{\"slot\":\"prepend-inner\"},slot:\"prepend-inner\"},[_vm._v(\"mdi-library\")])],1),_c('InputPopupSelect',{attrs:{\"title\":\"Library\",\"list\":_vm.seatBranchMenus,\"select\":_vm.inputPopupSelectBranch},on:{\"update:select\":function($event){_vm.inputPopupSelectBranch=$event}}})],1),(_vm.inputPopupSelectArea)?_c('div',{staticClass:\"accordion\"},_vm._l((_vm.inputPopupSelectBranch.selectedItem.areas),function(area,i){return _c('Accordion',{key:i,attrs:{\"areas\":[area],\"index\":i,\"open\":area.open,\"displaySlots\":_vm.displaySlots},on:{\"toggleOpen\":_vm.toggleOpen}})}),1):_c('div',[_c('span',[_vm._v(\"Unable to retrieve records.\")])])]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-resize=\"setContentHeight\">\r\n <!-- Top View -->\r\n <v-card style=\"border-radius: 0px\" color=\"primary\" class=\"pr-1\"\r\n :height=\"visitBranchMenus ? '140px' : '104px'\">\r\n\r\n <!-- Toolbar -->\r\n <v-toolbar id=\"newBookingToolbar\" dark elevation=\"0\" color=\"primary\" style=\"border-bottom-right-radius: 5px; border-bottom-left-radius: 5px\">\r\n <img img aria-label=\"NLB Logo\" style=\"height: 48px; widthx: 24px\" class=\"mr-3\" \r\n :src=\"`${this.iconPath}nlb-logo-white.png`\"/>\r\n\r\n <v-toolbar-title>Seat Availability</v-toolbar-title>\r\n\r\n <v-spacer></v-spacer>\r\n\r\n <v-btn aria-label=\"Show help\" @click=\"$router.push({ name: 'Help' }, () => {})\" icon>\r\n <v-icon>mdi-help-circle-outline</v-icon>\r\n </v-btn>\r\n\r\n <v-btn icon>\r\n <LoginIcon />\r\n </v-btn>\r\n </v-toolbar>\r\n </v-card>\r\n\r\n <div ref=\"homeScrollable\" class=\"scrollable\" \r\n :style=\"visitBranchMenus ? 'margin-top: -36px !important' : 'margin-top: -45px !important'\"\r\n > \r\n <!-- Search form not in use -->\r\n <div v-if=\"visitBranchMenus\" v-show=\"!showSeatBookingSearchForm\">\r\n <VisitBookingSearchForm ref=\"visitBookingSearchForm\" />\r\n </div>\r\n\r\n <v-card class=\"mx-2 px-5 pt-4 pb-3 mb-2\" style=\"border-radius: 8px\"\r\n v-if=\"(!visitBranchMenus || showSeatBookingSearchForm) && settings && inputPopupSelectBranch.selectedItem\">\r\n\r\n <div class=\"seatAvailMessage_cont\">\r\n <div style=\"text-align: justify; line-height:1\">\r\n <span style=\"font-size: 13px; font-weight: bold;\">\r\n {{ refMsg }}\r\n <!-- This page is for reference only. To book a seat, tap the \"New\" button at the bottom of the screen. -->\r\n </span> \r\n </div>\r\n <div class=\"label\" style=\"margin-top:.5rem\">\r\n <span>\r\n <v-icon color=\"green\" slot=\"prepend-inner\">mdi-seat</v-icon>\r\n Available\r\n </span>\r\n <span>\r\n <v-icon color=\"red\" slot=\"prepend-inner\">mdi-cancel</v-icon>\r\n Not Available\r\n </span>\r\n </div>\r\n <div style=\"margin-top:.5rem\">\r\n <span class=\"label\">Last Updated Time: </span>\r\n <span>{{ currentTime }}</span>\r\n </div> \r\n </div>\r\n\r\n <!-- Select Library -->\r\n <div class=\"inputPopupSelectDiv\" @click=\"inputPopupSelectBranch.show = true\">\r\n <span class=\"label\">Library</span>\r\n\r\n <v-text-field aria-label=\"Select library\"\r\n :value=\"inputPopupSelectBranch.selectedItem.name\" readonly>\r\n <v-icon slot=\"prepend-inner\">mdi-library</v-icon>\r\n </v-text-field>\r\n\r\n <InputPopupSelect title=\"Library\" :list=\"seatBranchMenus\" :select.sync=\"inputPopupSelectBranch\"/>\r\n </div>\r\n\r\n <!-- Accordion -->\r\n <div v-if=\"inputPopupSelectArea\" class=\"accordion\">\r\n <Accordion v-for=\"(area,i) in inputPopupSelectBranch.selectedItem.areas\" \r\n :areas=\"[area]\"\r\n :index=\"i\" \r\n :key=\"i\" \r\n :open=\"area.open\"\r\n :displaySlots=\"displaySlots\"\r\n @toggleOpen=\"toggleOpen\" \r\n /> \r\n </div>\r\n <div v-else>\r\n <span>Unable to retrieve records.</span>\r\n </div>\r\n </v-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n import { mapGetters, mapMutations, mapState } from 'vuex';\r\n import apiHelper from \"@/helpers/apiHelper\";\r\n import LoginIcon from \"@/components/LoginIcon\";\r\n import Accordion from \"@/components/Accordion\";\r\n import businessLogic from \"@/helpers/businessLogic\";\r\n import InputPopupSelect from \"@/components/InputPopupSelect\";\r\n import VisitBookingSearchForm from \"@/components/VisitBookingSearchForm\";\r\n\r\n require('@/assets/styles/main.css')\r\n\r\n export default {\r\n name: \"Home\",\r\n components: {\r\n LoginIcon,\r\n Accordion,\r\n InputPopupSelect,\r\n VisitBookingSearchForm,\r\n },\r\n\r\n data: () => ({\r\n // for data after branch is searched\r\n searchResponse: null, \r\n\r\n // for last load/refresh time\r\n currentTime: null,\r\n\r\n // Show branch\r\n inputPopupSelectBranch: {\r\n show: false,\r\n selectedItem: {\r\n //PublicBranchMenu\r\n name: null,\r\n code: null,\r\n },\r\n },\r\n\r\n inputPopupSelectArea: {\r\n show: false,\r\n selectedItem: null, //PublicAreaMenu (null = \"All\" areas)\r\n },\r\n \r\n displaySlots: window.$settings.seatAvailabilityMobileSlotsDisplay,\r\n\r\n refMsg: window.$msg.seatAvailabilityRefMsg,\r\n }),\r\n\r\n created() {\r\n this.getCurrentTime();\r\n },\r\n\r\n computed: {\r\n // Get BranchMenu from index.js \r\n ...mapState([\"searchResults\"]),\r\n ...mapGetters([\"seatBranchMenus\"]),\r\n\r\n selectedBranch() { \r\n return this.inputPopupSelectBranch.selectedItem; \r\n },\r\n \r\n selectedArea() { \r\n return this.inputPopupSelectArea.selectedItem; \r\n },\r\n },\r\n\r\n methods: {\r\n ...mapMutations([\r\n \"updateSearchResults\",\r\n ]),\r\n\r\n //#region GET TIME\r\n\r\n getCurrentTime() {\r\n const now = new Date();\r\n const hours = this.formatTime(now.getHours());\r\n const minutes = this.formatTime(now.getMinutes());\r\n const seconds = this.formatTime(now.getSeconds());\r\n this.currentTime = `${hours}:${minutes}:${seconds}`;\r\n },\r\n\r\n formatTime(time) {\r\n return time < 10 ? '0' + time : time;\r\n },\r\n\r\n //#endregion\r\n\r\n setContentHeight() {\r\n if (this.$refs.homeScrollable) {\r\n const heights = this.heights(); \r\n const contentHeight = this.Accordion\r\n ? heights.screen - heights.toolbarWithButtons - heights.bottombar - heights.noticeBarHeight\r\n : heights.screen - heights.toolbar - heights.bottombar - heights.noticeBarHeight;\r\n\r\n this.$refs.homeScrollable.style.height = contentHeight + \"px\";\r\n }\r\n },\r\n\r\n async searchSeatAvailability() {\r\n const branchId = this.selectedBranch.id;\r\n\r\n const searchResponse = await apiHelper.searchSeatAvailability(branchId);\r\n\r\n if (searchResponse === window.$msg.reloginRequired) {\r\n // console.log(\"login required\");\r\n businessLogic.im8Logout();\r\n return;\r\n }\r\n\r\n if (searchResponse && \r\n searchResponse.data && \r\n searchResponse.data.areas &&\r\n searchResponse.data.areas.length) {\r\n this.updateSearchResults(searchResponse.data);\r\n\r\n if (searchResponse.data.found) \r\n {\r\n console.log(searchResponse.data.areas);\r\n \r\n //this.$router.push({ name: \"SeatsAvailabilities\" });\r\n // try {\r\n // // Route to the same page\r\n // await this.$router.push({ name: \"SeatsAvailabilities\" });\r\n // } catch (error) {\r\n // // Handle NavigationDuplicated error\r\n // if (error.name === 'NavigationDuplicated') {\r\n // // Reload the page if navigation is duplicated\r\n // window.location.reload();\r\n // } else {\r\n // // Handle other errors\r\n // console.error(error);\r\n // }\r\n // }\r\n }\r\n }\r\n else {\r\n // Api response did not retrieve anything, display error warning\r\n this.updateResult({\r\n show: true,\r\n success: false,\r\n title: window.$msg.noResultsFoundTitle,\r\n message: window.$msg.noResultsFoundMsg,\r\n });\r\n }\r\n },\r\n // Accordion toggleOpen method\r\n toggleOpen(index) {\r\n this.inputPopupSelectBranch.selectedItem.areas = this.inputPopupSelectBranch.selectedItem.areas.map((area, i) => {\r\n if (index === i) {\r\n area.open = !area.open;\r\n }\r\n else {\r\n area.open = false;\r\n }\r\n return area;\r\n });\r\n },\r\n },\r\n\r\n activated() {\r\n this.searchResponse = this.searchResults;\r\n this.$nextTick(() => this.setContentHeight());\r\n },\r\n\r\n watch: {\r\n settings: {\r\n immediate: true,\r\n handler(newValue, oldValue) {\r\n if (newValue) {\r\n if (this.onsiteMode) {\r\n const branch = this.seatBranchMenus.find(\r\n (x) => x.id === this.mode.branchId\r\n );\r\n\r\n if (branch) {\r\n this.inputPopupSelectBranch.selectedItem = branch;\r\n return;\r\n }\r\n }\r\n this.inputPopupSelectBranch.selectedItem = this.seatBranchMenus[0];\r\n }\r\n },\r\n },\r\n inputPopupSelectBranch(newValue, oldValue) {\r\n if (newValue.selectedItem !== oldValue.selectedItem) {\r\n this.inputPopupSelectArea.selectedItem = null;\r\n }\r\n },\r\n },\r\n };\r\n</script>\r\n\r\n<style scoped> \r\n .accordion {\r\n width: 100%;\r\n }\r\n\r\n .accordion-item {\r\n border: 1px solid #ccc;\r\n margin-bottom: 5px;\r\n }\r\n\r\n .accordion-title {\r\n background-color: #f4f4f4;\r\n padding: 10px;\r\n cursor: pointer;\r\n }\r\n\r\n .accordion-title.active {\r\n background-color: #e0e0e0;\r\n }\r\n\r\n .accordion-content {\r\n padding: 10px;\r\n }\r\n\r\n .seatAvailMessage_cont {\r\n margin-bottom: 1rem;\r\n }\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatsAvailabilities.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatsAvailabilities.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SeatsAvailabilities.vue?vue&type=template&id=1b6d9856&scoped=true&\"\nimport script from \"./SeatsAvailabilities.vue?vue&type=script&lang=js&\"\nexport * from \"./SeatsAvailabilities.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SeatsAvailabilities.vue?vue&type=style&index=0&id=1b6d9856&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b6d9856\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VCard,VIcon,VSpacer,VTextField,VToolbar,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Home from '../views/Home.vue'\nimport SearchResults from '@/views/SearchResults'\nimport BookingDetails from '@/views/BookingDetails'\nimport VisitBookingSearchResults from '@/views/VisitBookingSearchResults'\nimport VisitBookingDetails from '@/views/VisitBookingDetails'\nimport MyBookings from '@/views/MyBookings'\nimport MyBookingDetails from '@/views/MyBookingDetails'\nimport Account from '@/views/Account'\nimport Login from '@/views/Login'\nimport ViewMaps from \"@/views/ViewMaps\"\nimport ScanQRCode from \"@/views/ScanQRCode\"\nimport Help from \"@/views/Help\"\nimport OnsiteDetector from \"@/views/OnsiteDetector\"\nimport LoginOptions from \"@/views/LoginOptions\"\nimport EmailMobileLogin from \"@/views/EmailMobileLogin\"\nimport ValidateOtp from \"@/views/ValidateOtp\"\nimport GantryAccessQR from \"@/views/GantryAccessQR\"\nimport SeatsAvailability from \"@/views/SeatsAvailability\"\nimport SeatsAvailabilities from \"@/views/SeatsAvailabilities\"\n\nimport store from \"@/store/index\";\nimport constants from \"@/helpers/constants\"\nimport apiHelper from \"@/helpers/apiHelper\"\nimport businessLogic from \"@/helpers/businessLogic\"\nimport moment from \"moment\";\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'Home',\n component: Home\n },\n {\n path: \"/login\",\n name: 'Login',\n beforeEnter: (to, from, next) => {\n // if (store.getters.authenticated) {\n // next({ name: 'Home' });\n // } else {\n apiHelper.casAuth()\n // }\n },\n },\n {\n path: '/common/scanqrcode',\n name: 'ScanQRCode',\n component: ScanQRCode,\n props: true\n },\n {\n path: '/new/searchresults',\n name: 'SearchResults',\n component: SearchResults,\n },\n {\n path: '/new/bookingdetails',\n name: 'BookingDetails',\n component: BookingDetails,\n props: true\n },\n {\n path: '/new/visitbookingsearchresults',\n name: 'VisitBookingSearchResults',\n component: VisitBookingSearchResults\n },\n {\n path: '/new/visitbookingbookingdetails',\n name: 'VisitBookingDetails',\n component: VisitBookingDetails\n },\n {\n path: '/common/viewmaps',\n name: 'ViewMaps',\n component: ViewMaps,\n props: true\n },\n {\n path: '/mybookings',\n name: 'MyBookings',\n component: MyBookings,\n props: true\n },\n {\n path: '/mybookings/mybookingdetails',\n name: 'MyBookingDetails',\n component: MyBookingDetails\n },\n {\n path: '/account',\n name: 'Account',\n component: Account\n },\n {\n path: '/common/help',\n name: 'Help',\n component: Help\n },\n {\n path: '/common/onsitedetector',\n name: 'OnsiteDetector',\n component: OnsiteDetector\n },\n {\n path: '/login/options',\n name: 'LoginOptions',\n component: LoginOptions\n },\n {\n path: '/login/emailmobilelogin',\n name: 'EmailMobileLogin',\n component: EmailMobileLogin\n },\n {\n path: '/login/validateotp',\n name: 'ValidateOtp',\n component: ValidateOtp,\n props: true\n },\n {\n path: '/about',\n name: 'About',\n // route level code-splitting\n // this generates a separate chunk (about.[hash].js) for this route\n // which is lazy-loaded when the route is visited.\n component: () => import(/* webpackChunkName: \"about\" */ '../views/About.vue')\n },\n {\n path: '/gantryaccessqr/:branchCode?',\n name: 'GantryAccessQR',\n component: GantryAccessQR,\n },\n {\n path: '/seatavailability',\n name: 'SeatsAvailabilities',\n component: SeatsAvailabilities\n },\n {\n path: '/seatavailability/:branchCode?/:areaId?',\n name: 'SeatsAvailability',\n component: SeatsAvailability,\n }\n]\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes\n})\n\nrouter.beforeResolve((to, from, next) => {\n if (store.state.systemDialog) {\n store.commit(\"updateSystemDialog\", null)\n next(false)\n return\n }\n\n next()\n})\n\n// Insert component here if you do not want to trigger login for the page\n const noAuthRouteNames = [\n \"Login\", \"Home\", \"SearchResults\", \"BookingDetails\", \"VisitBookingSearchResults\", \"VisitBookingDetails\", \n \"ViewMaps\", \"ScanQRCode\", \"Help\", \"OnsiteDetector\", \"LoginOptions\", \"EmailMobileLogin\", \"ValidateOtp\", \n \"SeatsAvailabilities\", \"SeatsAvailability\"\n ];\n\n//const noAuthRouteNames = [\n// \"Login\", \"Home\", \"SearchResults\", \"BookingDetails\", \"VisitBookingSearchResults\", \"VisitBookingDetails\",\n// \"ViewMaps\", \"ScanQRCode\", \"Help\", \"OnsiteDetector\", \"LoginOptions\", \"EmailMobileLogin\", \"ValidateOtp\"\n//];\n\nconst noCheckInRouteNames = [\"ScanQRCode\"];\n\nrouter.beforeEach(async (to, from, next) => {\n // console.debug(\"Route changed\", to.path)\n if (window.$settings.showServiceNotAvailablePage) {\n next();\n return;\n }\n\n // const casAuth = window.$settings.casAuth;\n const casAuthState = store.state.casAuthState; //get dynamic state value from store\n \n\n if (to.query && to.query.code && (to.query.state === casAuthState)) {\n // console.debug(\"CAS callback URL detected\", to)\n\n // //Remove CAS ticket from history\n // console.debug(\"Replace /\")\n // router.replace(\"/\")\n\n const response = await apiHelper.login(to.query.code, window.$settings.casAuth.redirect_uri);\n\n if (response && response.data) {\n window.$NotFirstRouting = true;\n\n businessLogic.updateAccountStateAfterLogin(response);\n\n const preCasAuthState = store.state.preCasAuthState;\n if (preCasAuthState) {\n // console.debug(\"preCasAuthState.routeName\", preCasAuthState.routeName)\n\n store.commit(\"updatePreCasAuthState\", null)\n\n // console.debug(\"Replace /\")\n router.replace(\"/\")\n next({ name: preCasAuthState.routeName, query: { reload: true } })\n }\n else {\n next({ name: \"Home\" })\n }\n } else {\n store.commit(\"updateResult\", {\n show: true,\n success: false,\n title: window.$msg.loginFail,\n message: response,\n });\n\n if (response === window.$msg.reloginRequired) {\n setTimeout(() => {\n businessLogic.logout();\n }, 3000)\n }\n else {\n next({ name: \"Home\" })\n }\n }\n\n // window.$NotFirstRouting = true;\n\n return;\n }\n else if (!window.$NotFirstRouting) {\n // console.debug(\"Reload detected\", window.$NotFirstRouting)\n\n //Page reloaded - Get settings. Get user account info if token exists\n const response = await apiHelper.getAccountInfo();\n\n const successCallback = () => {\n store.commit(\"updateSettings\", response.data.settings);\n };\n\n const resultCommonResponseHandler = businessLogic.commonResponseHandler(\n response,\n null,\n null,\n null,\n successCallback,\n null,\n true\n );\n\n if (resultCommonResponseHandler === window.$msg.reloginRequired) {\n next();\n return;\n }\n }\n\n window.$NotFirstRouting = true;\n\n //NOTE : if/else below will cause maximum call stack size exceeded error\n //if (store.getters.gantryAccessQrEnabled) {\n // if (store.state.qrCodeEntry && to.name !== \"GantryAccessQR\") {\n // return next({ name: \"GantryAccessQR\" });\n // }\n // else {\n // return next({ name: 'EmailMobileLogin' });\n // }\n //}\n\n if (store.state.qrCodeEntry && to.name !== \"GantryAccessQR\") {\n return next({ name: \"GantryAccessQR\" })\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////\n // NOTE : comment from seat availability changes start - seat availability changes end //\n // to comment off the seat availability changes. //\n // otherwise, use existing changes start - existing changes end //\n /////////////////////////////////////////////////////////////////////////////////////////\n // Important Reminder : These two cannot coexist. Hence must comment either one.//\n /////////////////////////////////////////////////////////////////////////////////////////\n\n // existing changes start\n //if (noAuthRouteNames.includes(to.name) || (store.getters.authenticated)) {\n // if (to.fullPath.includes(\"mybooking\")) {\n // store.commit(\"updateNavBarActiveButton\", 1);\n // } else if (to.fullPath.includes(\"account\")) {\n // store.commit(\"updateNavBarActiveButton\", 2);\n // } else {\n // store.commit(\"updateNavBarActiveButton\", 0);\n // }\n\n // next()\n //}\n // existing changes end\n\n // seat availability changes start\n if (noAuthRouteNames.includes(to.name) || (store.getters.authenticated)) {\n\n if (to.fullPath.includes(\"mybooking\")) {\n store.commit(\"updateNavBarActiveButton\", 2);\n } \n else if (to.fullPath.includes(\"account\")) {\n store.commit(\"updateNavBarActiveButton\", 3);\n }\n else if (to.fullPath.includes(\"seatavailability\")) {\n store.commit(\"updateNavQRCodeActiveButton\", 0);\n store.commit(\"updateNavBarActiveButton\", 0);\n } \n else {\n store.commit(\"updateNavBarActiveButton\", 1);\n }\n\n next()\n }\n // seat availability changes end\n\n else {\n // router.replace(\"/\")\n //apiHelper.casAuth(to.name);\n //next({ name: \"LoginOptions\" });\n\n //Store current URL before going to CAS auth page\n store.commit(\"updatePreCasAuthState\", {\n routeName: to.name,\n time: moment()\n });\n\n store.commit(\"updateLocationInfoFromUrl\", {\n currentBranchCode: to.params.branchCode || constants.defaultBranchName\n });\n\n if (store.getters.gantryAccessQrEnabled && to.fullPath.includes(\"gantryaccessqr\")) {\n next({ name: 'EmailMobileLogin' })\n }\n else {\n next('/login/options');\n }\n }\n\n if (noCheckInRouteNames.includes(to.name)) {\n store.commit(\"updateShowCheckIn\", false)\n }\n else {\n store.commit(\"updateShowCheckIn\", true)\n }\n})\n\n// Include the 'name' of the Route here for the BottomNavigationBar to appear.\n\n// existing changes start\n//const showNavBarPages = [\"Home\", \"MyBookings\", \"Account\"]\n// existing changes end\n\n// seat availability changes start\nconst showNavBarPages = [\"Home\", \"MyBookings\", \"Account\", \"SeatsAvailabilities\"]\nconst showQRCodeBarPages = [\"SeatsAvailability\"]\n// seat availability changes end\n\nrouter.afterEach((to, from) => {\n if (showNavBarPages.includes(to.name)) {\n store.commit(\"updateShowNavBar\", true)\n }\n else {\n store.commit(\"updateShowNavBar\", false)\n }\n // seat availability changes start\n if (showQRCodeBarPages.includes(to.name)) {\n store.commit(\"updateShowQRCodeBar\", true)\n }\n else {\n store.commit(\"updateShowQRCodeBar\", false)\n }\n // seat availability changes end\n})\n\nexport default router\n","import axios from \"axios\"\r\nimport constants from \"@/helpers/constants\"\r\nimport moment from \"moment\"\r\nimport store from \"@/store/index\";\r\nimport router from '@/router/index'\r\n\r\nconst axiosClient = () => {\r\n const defaultOptions = {\r\n baseURL: window.$settings.userApiBaseUrl\r\n };\r\n\r\n // Create instance\r\n const instance = axios.create(defaultOptions);\r\n\r\n // Set the AUTH token for any request\r\n instance.interceptors.request.use(function (config) {\r\n config.withCredentials = true; // To send cookies with Axios, you must set the withCredentials property to true\r\n \r\n // const token = store.state.sid;\r\n // console.debug(\"axiosClient - token in store\", token)\r\n // config.headers.Authorization = token ? `Bearer ${token}` : '';\r\n\r\n return config;\r\n });\r\n\r\n instance.interceptors.response.use(function (response) {\r\n return response;\r\n }, function (error) {\r\n //Turn all rejects into resolves\r\n //To determine an API call is successfull, check the existance of response.data\r\n //Else, response = error message\r\n\r\n console.debug(\"intercepted error response\", error, error.response)\r\n const errorRes = error.response\r\n\r\n //Extract error messages for various status code - 500, 400 and 404 or validation objects\r\n let errorMessage = \"Please try again later.\"\r\n\r\n if (errorRes && errorRes.data) {\r\n const errorData = errorRes.data;\r\n\r\n if (errorData) {\r\n if (errorData.status === 400) {\r\n errorMessage = Object.values(errorData.errors)[0][0]\r\n }\r\n else if (errorData.status === 403) {\r\n errorMessage = errorData.detail;\r\n }\r\n else if (errorData.status === 401) {\r\n //Handle 401 - unauthorized status code\r\n errorMessage = window.$msg.reloginRequired\r\n }\r\n }\r\n }\r\n\r\n console.debug(\"errorMessage\", errorMessage)\r\n\r\n return Promise.resolve(errorMessage);\r\n // return Promise.resolve(error.response);\r\n });\r\n\r\n return instance;\r\n};\r\n\r\nexport default {\r\n casAuth(currentRouteName) {\r\n const casAuth = window.$settings.casAuth;\r\n const casAuthState = Math.random().toString(36).substring(2, 10); //make state parameter value dynamic \r\n // console.debug(\"currentRouteName\", currentRouteName);\r\n\r\n // //Store current URL before going to CAS auth page\r\n // if (currentRouteName && typeof currentRouteName === \"string\") {\r\n // store.commit(\"updatePreCasAuthState\", {\r\n // routeName: currentRouteName,\r\n // time: moment()\r\n // });\r\n // }\r\n // else {\r\n // store.commit(\"updatePreCasAuthState\", null);\r\n // }\r\n\r\n // const params = new URLSearchParams({\r\n // applicationid: casAuth.client_id,\r\n // service: casAuth.redirect_uri,\r\n // });\r\n\r\n store.commit(\"updateCasAuthState\", casAuthState);\r\n\r\n const params = new URLSearchParams({\r\n response_type: casAuth.response_type,\r\n client_id: casAuth.client_id,\r\n redirect_uri: casAuth.redirect_uri,\r\n scope: casAuth.scope.trim(),\r\n state: store.state.casAuthState, //use dynamic state value from store\r\n applicationId: casAuth.applicationId,\r\n });\r\n\r\n const casAuthUrl = casAuth.endpoint + \"?\" + params.toString();\r\n window.location.href = casAuthUrl;\r\n\r\n console.log(\"casAuthUrl\", casAuthUrl);\r\n },\r\n async login(code, clientLoginUrl, branchId) {\r\n setTimeout(() => {\r\n this.loading(true)\r\n }, 1)\r\n\r\n const mode = this.getModeRaw();\r\n\r\n const response = await axiosClient().post(window.$settings.loginEnpoint, {\r\n Mode: mode,\r\n authorizationCode: code,\r\n clientLoginUrl: clientLoginUrl\r\n });\r\n\r\n setTimeout(() => {\r\n this.loading(false)\r\n }, 2)\r\n\r\n // console.debug(\"CAS login response\", response)\r\n return response;\r\n },\r\n async logout(afterLogoutCallback, branchId) {\r\n //logout public API for OTP mobile and email\r\n const mode = this.getModeRaw();\r\n if (\r\n store.state.accountInfo?.accountType === constants.accountType.EmailLoginUser ||\r\n store.state.accountInfo?.accountType === constants.accountType.MobileLoginUser\r\n ) {\r\n await axiosClient().post(window.$settings.otpLogoutEndpoint, {\r\n Mode: mode\r\n });\r\n\r\n if (afterLogoutCallback) {\r\n afterLogoutCallback();\r\n }\r\n\r\n //TODO : Better logic that can cater/handle if both visit booking and gantry access qr enabled\r\n if (store.state.locationInfoFromUrl) {\r\n router.push(\"/login/emailmobilelogin\")\r\n }\r\n else {\r\n router.push(\"/\")\r\n }\r\n } else {\r\n //logout public API and CAS\r\n await axiosClient().post(window.$settings.logoutEnpoint, {\r\n Mode: mode\r\n });\r\n\r\n if (afterLogoutCallback) {\r\n afterLogoutCallback();\r\n }\r\n\r\n this.casLogout();\r\n }\r\n },\r\n casLogout() {\r\n //Logout CAS only\r\n const casAuth = window.$settings.casAuth;\r\n\r\n const params = new URLSearchParams({\r\n service: casAuth.redirect_uri,\r\n });\r\n\r\n const casAuthUrl = casAuth.logoutEndpoint + \"?\" + params.toString();\r\n window.location.href = casAuthUrl;\r\n },\r\n async getAccountInfo() {\r\n setTimeout(() => {\r\n this.loading(true)\r\n }, 1)\r\n\r\n const response = await axiosClient().get(window.$settings.getAccountInfoEndpoint);\r\n\r\n setTimeout(() => {\r\n this.loading(false)\r\n }, 2)\r\n\r\n // console.debug(\"getAccountInfo response\", response);\r\n return response;\r\n },\r\n async checkIn(bookingId, autoCheckIn, branchId, silent) {\r\n if (!silent) {\r\n this.loading(true)\r\n }\r\n\r\n const mode = this.getMode(branchId);\r\n\r\n const response = await axiosClient().post(window.$settings.checkInEndpoint, {\r\n Mode: mode,\r\n BookingId: bookingId,\r\n AutoCheckIn: autoCheckIn\r\n })\r\n\r\n this.loading(false, true)\r\n\r\n // console.debug(\"checkIn response\", response);\r\n return response;\r\n },\r\n async extend(bookingId, branchId) {\r\n this.loading(true)\r\n\r\n const mode = this.getMode(branchId);\r\n\r\n const response = await axiosClient().post(window.$settings.extendEndpoint, {\r\n Mode: mode,\r\n BookingId: bookingId\r\n })\r\n\r\n this.loading(false, true)\r\n\r\n // console.debug(\"Extend response\", response);\r\n return response;\r\n },\r\n async cancel(isVisitBooking, bookingId, cancelReasonCode, branchId) {\r\n this.loading(true)\r\n\r\n const mode = this.getMode(branchId);\r\n\r\n const body = {\r\n mode,\r\n bookingId,\r\n CancelReason: cancelReasonCode\r\n }\r\n\r\n //Visit booking has been updated to use the PATCH verb, so does seat booking\r\n const endpoint = isVisitBooking ? window.$settings.cancelVisitEndpoint : window.$settings.cancelEndpoint;\r\n const response = await axiosClient().patch(endpoint, body);\r\n\r\n this.loading(false, true)\r\n\r\n // console.debug(\"Cancel response\", response);\r\n return response;\r\n },\r\n async search(branchId, areaId, startTime, durationInMinutes, seatCode) {\r\n this.loading(true)\r\n\r\n const mode = this.getMode(branchId);\r\n\r\n const response = await axiosClient().get(window.$settings.searchEndpoint, {\r\n params: {\r\n Mode: mode,\r\n BranchId: branchId,\r\n AreaId: areaId,\r\n StartTime: startTime,\r\n DurationInMinutes: durationInMinutes,\r\n SelectedSeatCode: seatCode\r\n }\r\n })\r\n\r\n const revertStatusBarColor =\r\n response &&\r\n response.data &&\r\n response.data.areas &&\r\n response.data.areas.length;\r\n\r\n this.loading(false, !revertStatusBarColor)\r\n\r\n // console.debug(\"Search response\", response);\r\n return response;\r\n },\r\n async searchAvailableVisitCapacity(branchId, pax, startTime, durationInMinutes) {\r\n this.loading(true)\r\n\r\n const mode = this.getMode(branchId);\r\n\r\n const response = await axiosClient().get(window.$settings.searchAvailableVisitCapacityEndpoint, {\r\n params: {\r\n mode,\r\n branchId,\r\n pax,\r\n startTime,\r\n durationInMinutes\r\n }\r\n })\r\n\r\n const revertStatusBarColor =\r\n response &&\r\n response.data &&\r\n response.data.visitCapacity;\r\n\r\n this.loading(false, !revertStatusBarColor)\r\n\r\n // console.debug(\"searchAvailableVisitCapacity response\", response);\r\n return response;\r\n },\r\n async book(areaId, startTime, durationInMinutes, branchId, seatCode) {\r\n this.loading(true)\r\n\r\n const mode = this.getMode(branchId);\r\n\r\n const response = await axiosClient().post(window.$settings.bookEndpoint, {\r\n Mode: mode,\r\n AreaId: areaId,\r\n StartTime: startTime,\r\n DurationInMinutes: durationInMinutes,\r\n SeatCode: seatCode\r\n })\r\n\r\n this.loading(false, true)\r\n\r\n // console.debug(\"Book response\", response);\r\n return response;\r\n },\r\n async bookVisit(branchId, startTime, durationInMinutes, pax) {\r\n this.loading(true)\r\n\r\n const mode = this.getMode(branchId);\r\n\r\n const response = await axiosClient().post(window.$settings.bookVisitEndpoint, {\r\n mode,\r\n branchId,\r\n startTime,\r\n durationInMinutes,\r\n pax\r\n })\r\n\r\n this.loading(false, true)\r\n\r\n // console.debug(\"bookVisit response\", response);\r\n return response;\r\n },\r\n async requestOtp(channelId, value) {\r\n this.loading(true)\r\n\r\n const mode = this.getModeRaw();\r\n\r\n const response = await axiosClient().post(window.$settings.requestOtpEndpoint, {\r\n channelId,\r\n value,\r\n mode\r\n })\r\n\r\n this.loading(false, true)\r\n\r\n // console.debug(\"requestOtp response\", response);\r\n return response;\r\n },\r\n async validateOtp(channelId, value, otp) {\r\n this.loading(true)\r\n\r\n const mode = this.getModeRaw();\r\n\r\n const response = await axiosClient().patch(window.$settings.otpLoginEndpoint, {\r\n channelId,\r\n value,\r\n otp,\r\n mode\r\n })\r\n\r\n this.loading(false, true)\r\n\r\n // console.debug(\"validateOtp response\", response);\r\n return response;\r\n },\r\n async getGantryAccessQr() {\r\n\r\n const mode = this.getModeRaw();\r\n\r\n const response = await axiosClient().get(window.$settings.getGantryAccessQrEndpoint, {\r\n params: {\r\n mode\r\n }\r\n })\r\n\r\n return response;\r\n },\r\n getMode(branchId) {\r\n const storeMode = store.getters.mode\r\n\r\n if (storeMode && branchId &&\r\n (storeMode.mode === constants.mode.OnsiteModeQrCode ||\r\n storeMode.mode === constants.mode.OnsiteModeGps) &&\r\n storeMode.branchId === branchId) {\r\n\r\n // console.debug(\"storeMode\", storeMode.mode)\r\n return storeMode.mode\r\n }\r\n\r\n // console.debug(\"storeMode\", constants.mode.OffsiteMode)\r\n return constants.mode.OffsiteMode\r\n },\r\n getModeRaw() {\r\n return store.getters.mode.mode\r\n },\r\n loading(show, notRevertStatusBarColor) {\r\n store.commit(\"updateLoading\", { show: show, notRevertStatusBarColor: notRevertStatusBarColor })\r\n },\r\n async searchSeatAvailability(branchCode, areaId) {\r\n this.loading(true)\r\n\r\n //const mode = this.getMode(branchId);\r\n const mode = this.getMode(branchCode);\r\n const response = await axiosClient().get(window.$settings.searchSeatAvailability, {\r\n params: {\r\n Mode: mode, \r\n BranchCode: branchCode,\r\n AreaId: areaId\r\n }\r\n })\r\n\r\n const revertStatusBarColor =\r\n response &&\r\n response.data &&\r\n response.data.areas &&\r\n response.data.areas.length;\r\n\r\n this.loading(false, !revertStatusBarColor)\r\n\r\n return response;\r\n }\r\n}\r\n","import urlHelper from \"@/helpers/urlHelper\";\r\nimport store from \"@/store/index\";\r\nimport apiHelper from \"@/helpers/apiHelper\"\r\nimport validators from \"@/helpers/validators\";\r\nimport moment from \"moment\";\r\n\r\nexport default {\r\n clearCache() {\r\n //store.commit(\"updateSid\", null);\r\n store.commit(\"updateAccountInfo\", null);\r\n\r\n store.commit(\"updateSearchResults\", null);\r\n store.commit(\"updateSelectedArea\", null);\r\n store.commit(\"updateSelectedBooking\", null);\r\n store.commit(\"updateQrCodeValue\", null);\r\n },\r\n logout() {\r\n //logout public API and CAS\r\n const afterLogoutCallback = () => {\r\n this.clearCache();\r\n }\r\n\r\n apiHelper.logout(afterLogoutCallback)\r\n },\r\n casLogout() {\r\n //Log out CAS only as Public API is already logged out\r\n this.clearCache();\r\n\r\n apiHelper.casLogout()\r\n },\r\n im8Logout() {\r\n //Logout CAS only as Public API is already logged out\r\n\r\n //Logout caused by concurrent session login or session inacitivity timeout.\r\n //It is indicated by status code 401 or window.$msg.reloginRequired,\r\n //all API calls should handle it this way, except for Login\r\n\r\n //1. The user application session is cleared.\r\n this.clearCache();\r\n\r\n //2. A user friendly message “Your session has expired. Please log in again.†will be displayed.\r\n store.commit(\"updateResult\", {\r\n show: true,\r\n success: false,\r\n title: window.$msg.reloginRequiredTitle,\r\n message: window.$msg.reloginRequired,\r\n });\r\n\r\n //3. Log out user from CAS, and then go to homepage after\r\n setTimeout(() => {\r\n apiHelper.casLogout();\r\n }, 3000);\r\n },\r\n commonResponseHandler(response, successMessage, errorMessage,\r\n alwaysCallback, successCallback, errorCallback, hideResult) {\r\n let title = errorMessage;\r\n let success = false;\r\n\r\n if (response && response.data) {\r\n title = successMessage;\r\n success = true;\r\n\r\n if (!hideResult) {\r\n store.commit(\"updateResult\", { show: true, success: success, title: title });\r\n }\r\n\r\n store.commit(\"updateAccountInfo\", response.data.accountInfo);\r\n\r\n if (successCallback) {\r\n successCallback();\r\n }\r\n } else {\r\n //Force window.$msg.reloginRequired to be shown even for auto checking that's running background\r\n if (!hideResult || response === window.$msg.reloginRequired) {\r\n if (response === window.$msg.reloginRequired) {\r\n title = window.$msg.reloginRequiredTitle;\r\n }\r\n\r\n store.commit(\"updateResult\", {\r\n show: true,\r\n success: success,\r\n title: title,\r\n message: response,\r\n });\r\n }\r\n\r\n if (response === window.$msg.reloginRequired) {\r\n //The user application session will be cleared.\r\n this.clearCache();\r\n\r\n setTimeout(() => {\r\n this.casLogout();\r\n }, 3000)\r\n\r\n return window.$msg.reloginRequired;\r\n }\r\n\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n }\r\n\r\n if (alwaysCallback) {\r\n alwaysCallback();\r\n }\r\n\r\n return success;\r\n },\r\n getLocationInfoFromQrCode(qrCode, branchMenus) {\r\n if (qrCode && branchMenus) {\r\n const locationInfo = urlHelper.validateAreaQrCode(qrCode);\r\n\r\n if (locationInfo) {\r\n const branchMenu = branchMenus.find(\r\n (x) => x.code.toLowerCase() === locationInfo.branchCode.toLowerCase()\r\n );\r\n\r\n if (branchMenu) {\r\n locationInfo.branchId = branchMenu.id;\r\n\r\n // console.log(\"getLocationInfoFromQrCode\", locationInfo);\r\n return locationInfo;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n getCurrentBranchName() {\r\n return store.getters.currentBranchName\r\n },\r\n getDwellTimeMinutes(holidays, branchDwellTime, bookingDateString) {\r\n if (branchDwellTime) {\r\n const dayOfWeek = moment(bookingDateString).day();\r\n let dwellMinutesOfTheDay = branchDwellTime.weeklyMaxDwellMinutes[dayOfWeek];\r\n\r\n if (branchDwellTime.holidayMaxDwellMinutes > 0) {\r\n //Get holidays - HolidayMaxDwellMinutes overrides WeeklyMaxDwellMinutes if it's greater than zero\r\n const hitHoliday = holidays.some(x => validators.isBetweenDate(bookingDateString, x.startTime, x.endTime));\r\n\r\n if (hitHoliday) {\r\n dwellMinutesOfTheDay = branchDwellTime.holidayMaxDwellMinutes;\r\n }\r\n }\r\n\r\n if (dwellMinutesOfTheDay > 0) {\r\n return dwellMinutesOfTheDay;\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n updateAccountStateAfterLogin(response) {\r\n if (response && response.data) {\r\n //store.commit(\"updateSid\", response.data.sessionId);\r\n store.commit(\"updateSettings\", response.data.settings);\r\n store.commit(\"updateAccountInfo\", response.data.accountInfo);\r\n }\r\n },\r\n updateQrCodeValue(response) {\r\n if (response) {\r\n store.commit(\"updateQrCodeValue\", response);\r\n }\r\n },\r\n timeDiffInSeconds(currentTime, startTime) {\r\n const duration =\r\n moment(currentTime).diff(\r\n moment(startTime)\r\n );\r\n const durationInSeconds =\r\n moment.duration(duration).asSeconds()\r\n\r\n return durationInSeconds;\r\n },\r\n isOtpTimerRunning(totalSeconds, now, isTrigger) {\r\n const timer = store.state.otpTimer;\r\n\r\n if (!isTrigger && !timer.isLoading) {\r\n return;\r\n }\r\n\r\n let otpTimerStartTime = store.state.otpTimerStartTime;\r\n\r\n if (timer.timerInterval) {\r\n clearInterval(timer.timerInterval);\r\n timer.timerInterval = {};\r\n }\r\n\r\n //if the pass time > remaining time then reset only instead resume,\r\n //so need to update otpTimer.timerinSeconds \r\n //start timer 8:00:00 60\r\n //refresh page, timer stop 8:00:05 55\r\n //reload page, resume timer 8:00:10 50 <--need to set\r\n const timeDiff = this.timeDiffInSeconds(now, otpTimerStartTime);\r\n\r\n if (timeDiff > 0 && timeDiff < totalSeconds\r\n ) {\r\n const latestTimerInSeconds = totalSeconds - timeDiff;\r\n timer.timerInSeconds = latestTimerInSeconds;\r\n }\r\n else if (!isTrigger) {\r\n this.resetOtpTimer();\r\n return\r\n }\r\n\r\n timer.timerInterval = setInterval(() => {\r\n\r\n if (timer.timerInSeconds <= 0) {\r\n this.resetOtpTimer();\r\n } else {\r\n timer.timerInSeconds -= 1;\r\n timer.progressPercentage =\r\n (timer.timerInSeconds / totalSeconds) * 100;\r\n\r\n store.commit(\"updateOtpTimer\", {\r\n timerInSeconds: timer.timerInSeconds,\r\n progressPercentage: timer.progressPercentage,\r\n timerInterval: timer.timerInterval,\r\n isLoading: true,\r\n });\r\n\r\n if (isTrigger) {\r\n store.commit(\"updateOtpTimerStartTime\", now)\r\n }\r\n }\r\n }, 1000);\r\n },\r\n resetOtpTimer() {\r\n const timer = store.state.otpTimer;\r\n\r\n timer.timerInSeconds = window.$settings.resendOtpTimeIntervalInSeconds;\r\n timer.progressPercentage = 100;\r\n\r\n if (timer.timerInterval) {\r\n clearInterval(timer.timerInterval);\r\n timer.timerInterval = {};\r\n }\r\n\r\n store.commit(\"updateOtpTimer\", {\r\n timerInSeconds: timer.timerInSeconds,\r\n progressPercentage: timer.progressPercentage,\r\n isLoading: false,\r\n });\r\n },\r\n}\r\n","<template>\r\n <div\r\n v-if=\"accountInfo\"\r\n v-show=\"showCheckIn && canCheckInNowBooking && autoCheckInFailedBookingId\"\r\n style=\"z-index: 1; position: fixed; bottom: 58px; right: 10px\"\r\n >\r\n <div\r\n class=\"speech-bubble text-small\"\r\n style=\"color: white !important\"\r\n @click=\"checkInButtonClicked\"\r\n >\r\n Check-In\r\n </div>\r\n <div style=\"text-align: right\">\r\n <v-btn\r\n id=\"btnCheckIn\"\r\n @click=\"checkInButtonClicked\"\r\n fab\r\n dark\r\n color=\"orange\"\r\n >\r\n <v-icon>mdi-checkbox-marked-circle-outline</v-icon>\r\n </v-btn>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapState, mapGetters, mapMutations } from \"vuex\";\r\nimport validators from \"@/helpers/validators\";\r\nimport businessLogic from \"@/helpers/businessLogic\";\r\nimport apiHelper from \"@/helpers/apiHelper\";\r\n\r\nexport default {\r\n name: \"CheckIn\",\r\n data: () => ({\r\n canCheckInNowBooking: null,\r\n autoCheckInFailedBookingId: null,\r\n tryingAutoCheckIn: false,\r\n lastCheckInTimeMoment: null,\r\n }),\r\n computed: {\r\n ...mapState([\"showCheckIn\", \"qrCode\"]),\r\n ...mapGetters([\"mode\"]),\r\n },\r\n methods: {\r\n ...mapMutations([\"updateLocationInfoFromQrCode\"]),\r\n async checkIn(autoCheckIn, silent) {\r\n this.canCheckInNowBooking = this.getCanCheckInNowBooking();\r\n\r\n if (this.canCheckInNowBooking) {\r\n //Try to prevent server from being DDoS by the combination of manual and auto check-ins,\r\n //But only stop auto check-ins\r\n if (this.lastCheckInTimeMoment) {\r\n const diffSeconds = this.time.nowMoment.diff(\r\n this.lastCheckInTimeMoment,\r\n \"seconds\"\r\n );\r\n\r\n if (autoCheckIn && diffSeconds < 30) {\r\n console.debug(\"Stop excessive auto check-ins\");\r\n return false;\r\n }\r\n }\r\n\r\n this.lastCheckInTimeMoment = this.time.nowMoment.clone();\r\n\r\n // console.debug(\"Check in test - \" + this.time.nowMoment.format());\r\n // const response = \"Testing\";\r\n\r\n const response = await apiHelper.checkIn(\r\n this.canCheckInNowBooking.bookingId,\r\n autoCheckIn,\r\n this.canCheckInNowBooking.branchId,\r\n silent\r\n );\r\n\r\n const successCallback = () => {\r\n this.autoCheckInFailedBookingId = null;\r\n this.canCheckInNowBooking = null;\r\n this.updateSystemAlert(null);\r\n\r\n if (!silent && this.$route.name !== \"MyBookings\") {\r\n this.$router.push({ name: \"MyBookings\" });\r\n }\r\n };\r\n\r\n const checkInResult = this.commonResponseHandler(\r\n response,\r\n window.$msg.checkInSuccess,\r\n window.$msg.checkInFail,\r\n null,\r\n successCallback,\r\n null,\r\n silent\r\n );\r\n\r\n return checkInResult;\r\n }\r\n\r\n return false;\r\n },\r\n showAutoCheckInFailedHandler() {\r\n // 4. If auto check in failed for the first attempt, show manual check-in button\r\n\r\n if (\r\n this.canCheckInNowBooking &&\r\n this.canCheckInNowBooking.bookingId !== this.autoCheckInFailedBookingId\r\n ) {\r\n this.autoCheckInFailedBookingId = this.canCheckInNowBooking.bookingId;\r\n\r\n const checkInFailedMsg = window.$msg.checkInReminder.replace(\r\n \"{checkInEndTimeInMinutes}\",\r\n this.settings.system.checkInEndTimeInMinutes\r\n );\r\n\r\n // const checkInFailedMsg =\r\n // \"Auto check-in failed. Please check in manually\";\r\n\r\n this.updateSystemAlert({\r\n show: true,\r\n success: false,\r\n message: checkInFailedMsg,\r\n });\r\n }\r\n },\r\n startTryAutoCheckIn() {\r\n if (this.tryingAutoCheckIn) {\r\n return;\r\n }\r\n\r\n this.tryingAutoCheckIn = true;\r\n\r\n this.tryAutoCheckIn();\r\n\r\n setInterval(() => {\r\n this.tryAutoCheckIn();\r\n }, window.$settings.autoCheckInInterval);\r\n },\r\n async tryAutoCheckIn() {\r\n if (!this.accountInfo) {\r\n return;\r\n }\r\n\r\n //1. App - x sec timer - check if any check-in required now\r\n this.canCheckInNowBooking = this.getCanCheckInNowBooking();\r\n\r\n if (this.canCheckInNowBooking) {\r\n const bookingRefId = this.clone(this.canCheckInNowBooking.bookingRefId);\r\n\r\n // console.debug(\r\n // \"AutoCheckInTimer\",\r\n // this.onsiteMode,\r\n // this.mode.branchId,\r\n // this.canCheckInNowBooking.branchId,\r\n // bookingRefId\r\n // );\r\n if (\r\n this.onsiteMode &&\r\n this.mode.branchId === this.canCheckInNowBooking.branchId\r\n ) {\r\n //2. If so, auto check in the background\r\n // console.debug(\"Auto check-in\");\r\n const checkInSuccess = await this.checkIn(true, true);\r\n\r\n if (checkInSuccess) {\r\n //3. If auto check-in succeeded, show success notification\r\n const checkInSuccessMsg = window.$msg.autoCheckInSuccess.replace(\r\n \"{bookingRefId}\",\r\n bookingRefId\r\n );\r\n\r\n this.updateSystemAlert({\r\n show: true,\r\n success: true,\r\n message: checkInSuccessMsg,\r\n });\r\n } else {\r\n this.showAutoCheckInFailedHandler();\r\n }\r\n } else {\r\n this.showAutoCheckInFailedHandler();\r\n }\r\n } else {\r\n this.autoCheckInFailedBookingId = null;\r\n // this.updateSystemAlert(null);\r\n }\r\n },\r\n async checkInButtonClicked() {\r\n if (this.canCheckInNowBooking) {\r\n //Check if it's in onsiteMode, if not, redirect to ScanQRCode\r\n\r\n if (\r\n this.onsiteMode &&\r\n this.mode.branchId === this.canCheckInNowBooking.branchId\r\n ) {\r\n // console.debug(\"Manual check-in\");\r\n await this.checkIn();\r\n } else {\r\n this.$router.push({\r\n name: \"ScanQRCode\",\r\n params: { state: \"checkIn\", title: \"Scan QR code to check in\" },\r\n });\r\n }\r\n }\r\n },\r\n getCanCheckInNowBooking() {\r\n const canCheckInBookings = this.accountInfo.bookings.filter(\r\n (x) =>\r\n validators.isToday(x.startTime, this.time.nowMoment) &&\r\n x.canCheckInStatus\r\n );\r\n\r\n if (canCheckInBookings) {\r\n const canCheckInNowBooking = canCheckInBookings.find((x) => {\r\n return validators.canCheckIn(\r\n x.canCheckInStatus,\r\n x.startTime,\r\n this.settings.system.checkInStartTimeInMinutes,\r\n this.settings.system.checkInEndTimeInMinutes,\r\n this.time.nowMoment\r\n );\r\n });\r\n\r\n return canCheckInNowBooking;\r\n }\r\n\r\n return null;\r\n },\r\n },\r\n watch: {\r\n accountInfo(newValue, oldValue) {\r\n if (newValue) {\r\n this.startTryAutoCheckIn();\r\n }\r\n },\r\n qrCode(newValue, oldValue) {\r\n if (newValue && newValue.state === \"checkIn\") {\r\n //E.g qrCode = https://192.168.10.100:8090/seatbooking/?loc=NLB.TRL.5.BloombergTerminal.1\r\n\r\n //Update locationInfoFromQrCode\r\n const locationInfo = businessLogic.getLocationInfoFromQrCode(\r\n newValue.value,\r\n this.settings.menus.branchMenus\r\n );\r\n\r\n if (locationInfo) {\r\n this.updateLocationInfoFromQrCode(locationInfo);\r\n\r\n //Check onsiteMode & extend if really onsite\r\n this.$nextTick(async () => {\r\n if (\r\n this.onsiteMode &&\r\n this.mode.branchId === this.canCheckInNowBooking.branchId\r\n ) {\r\n // console.debug(\"Manual check-in with QR code\");\r\n await this.checkIn();\r\n } else {\r\n const msg = window.$msg.checkInAtTheWrongBranch;\r\n\r\n this.updateSystemDialog({\r\n show: true,\r\n title: window.$msg.checkInFail,\r\n message: msg,\r\n });\r\n }\r\n });\r\n } else {\r\n this.updateSystemDialog({\r\n title: window.$msg.invalidQrCodeTitle,\r\n message: window.$msg.invalidQrCodeMsg,\r\n });\r\n }\r\n }\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.speech-bubble {\r\n position: relative;\r\n background: orange;\r\n border-radius: 5px;\r\n width: 70px;\r\n height: 30px;\r\n text-align: center;\r\n right: 15px;\r\n bottom: 3px;\r\n padding: 5px 5px 5px 5px;\r\n}\r\n\r\n.speech-bubble:before {\r\n content: \"\";\r\n position: absolute;\r\n bottom: 0;\r\n left: 60%;\r\n width: 0;\r\n height: 0;\r\n border: 20px solid transparent;\r\n border-top-color: orange;\r\n border-bottom: 0;\r\n border-left: 0;\r\n margin-left: -10px;\r\n margin-bottom: -15px;\r\n\r\n /* content: \"\";\r\n position: absolute;\r\n left: 40%;\r\n background-color: transparent;\r\n bottom: -40px;\r\n height: 40px;\r\n width: 30px;\r\n border-top-left-radius: 25px;\r\n box-shadow: 0 -25px 0 0 orange; */\r\n}\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckIn.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckIn.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CheckIn.vue?vue&type=template&id=2678bb06&scoped=true&\"\nimport script from \"./CheckIn.vue?vue&type=script&lang=js&\"\nexport * from \"./CheckIn.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CheckIn.vue?vue&type=style&index=0&id=2678bb06&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2678bb06\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VBtn,VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"serviceNotAvailableDiv\"}},[_c('div',{staticStyle:{\"position\":\"fixed\",\"border-radius\":\"50%\"},attrs:{\"id\":\"serviceNotAvailable1\"}}),_c('div',{staticStyle:{\"position\":\"fixed\",\"border-radius\":\"50%\"},attrs:{\"id\":\"serviceNotAvailable2\"}}),_c('div',{staticClass:\"fixed-center2\",staticStyle:{\"text-align\":\"center\",\"z-index\":\"2\",\"width\":\"100%\",\"opacity\":\"0\"},attrs:{\"id\":\"lastPage\"}},[_c('p',{staticClass:\"headline px-2\",staticStyle:{\"z-index\":\"2\",\"width\":\"100%\",\"word-break\":\"keep-all\",\"color\":\"white\",\"position\":\"absolute\",\"top\":\"-43px\"}},[_vm._v(\" Seat Booking \")]),_c('v-img',{staticStyle:{\"margin\":\"auto\"},attrs:{\"src\":((this.iconPath) + \"nlb-logo-only-white.png\"),\"width\":\"130\",\"height\":\"130\"}})],1),_c('div',{staticClass:\"fixed-center2\",staticStyle:{\"text-align\":\"center\",\"z-index\":\"2\",\"width\":\"100%\"}},[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.showMessage),expression:\"!showMessage\"}],staticStyle:{\"color\":\"white\",\"font-size\":\"80px\"}},[_vm._v(_vm._s(_vm.loadingIcon))])],1),_c('div',{staticClass:\"header\"},[_c('p',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.onResize),expression:\"onResize\"}],staticClass:\"px-3\",staticStyle:{\"position\":\"absolute\",\"width\":\"100%\",\"color\":\"white\"},attrs:{\"id\":\"lblMessage\"}},[_c('em',[_vm._v(_vm._s(_vm.serviceNotAvailableMessage))])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUfo),expression:\"showUfo\"}],staticStyle:{\"position\":\"absolute\",\"bottom\":\"3px\",\"left\":\"120px\"}},[_c('v-icon',{attrs:{\"color\":\"white\"}},[_vm._v(\"mdi-ufo-outline\")])],1),_c('div',[_c('svg',{staticClass:\"waves\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"viewBox\":\"0 24 150 28\",\"preserveAspectRatio\":\"none\",\"shape-rendering\":\"auto\"}},[_c('defs',[_c('path',{attrs:{\"id\":\"gentle-wave\",\"d\":\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\"}})]),_c('g',{staticClass:\"parallax\"},[_c('use',{attrs:{\"xlink:href\":\"#gentle-wave\",\"x\":\"48\",\"y\":\"0\",\"fill\":\"rgba(255,255,255,0.7\"}}),_c('use',{attrs:{\"xlink:href\":\"#gentle-wave\",\"x\":\"48\",\"y\":\"3\",\"fill\":\"rgba(255,255,255,0.5)\"}}),_c('use',{attrs:{\"xlink:href\":\"#gentle-wave\",\"x\":\"48\",\"y\":\"5\",\"fill\":\"rgba(255,255,255,0.3)\"}}),_c('use',{attrs:{\"xlink:href\":\"#gentle-wave\",\"x\":\"48\",\"y\":\"7\",\"fill\":\"#fff\"}})])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div id=\"serviceNotAvailableDiv\">\r\n <div\r\n id=\"serviceNotAvailable1\"\r\n style=\"position: fixed; border-radius: 50%\"\r\n ></div>\r\n <div\r\n id=\"serviceNotAvailable2\"\r\n style=\"position: fixed; border-radius: 50%\"\r\n ></div>\r\n\r\n <div\r\n id=\"lastPage\"\r\n class=\"fixed-center2\"\r\n style=\"text-align: center; z-index: 2; width: 100%; opacity: 0\"\r\n >\r\n <p\r\n class=\"headline px-2\"\r\n style=\"\r\n z-index: 2;\r\n width: 100%;\r\n word-break: keep-all;\r\n color: white;\r\n position: absolute;\r\n top: -43px;\r\n \"\r\n >\r\n Seat Booking\r\n </p>\r\n\r\n <v-img\r\n :src=\"`${this.iconPath}nlb-logo-only-white.png`\"\r\n width=\"130\"\r\n height=\"130\"\r\n style=\"margin: auto\"\r\n ></v-img>\r\n </div>\r\n\r\n <div\r\n class=\"fixed-center2\"\r\n style=\"text-align: center; z-index: 2; width: 100%\"\r\n >\r\n <v-icon v-show=\"!showMessage\" style=\"color: white; font-size: 80px\">{{\r\n loadingIcon\r\n }}</v-icon>\r\n </div>\r\n\r\n <div class=\"header\">\r\n <p\r\n v-resize=\"onResize\"\r\n id=\"lblMessage\"\r\n style=\"position: absolute; width: 100%; color: white\"\r\n class=\"px-3\"\r\n >\r\n <em>{{ serviceNotAvailableMessage }}</em>\r\n </p>\r\n\r\n <div\r\n v-show=\"showUfo\"\r\n style=\"position: absolute; bottom: 3px; left: 120px\"\r\n >\r\n <v-icon color=\"white\">mdi-ufo-outline</v-icon>\r\n </div>\r\n\r\n <div>\r\n <svg\r\n class=\"waves\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n viewBox=\"0 24 150 28\"\r\n preserveAspectRatio=\"none\"\r\n shape-rendering=\"auto\"\r\n >\r\n <defs>\r\n <path\r\n id=\"gentle-wave\"\r\n d=\"M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z\"\r\n />\r\n </defs>\r\n <g class=\"parallax\">\r\n <use\r\n xlink:href=\"#gentle-wave\"\r\n x=\"48\"\r\n y=\"0\"\r\n fill=\"rgba(255,255,255,0.7\"\r\n />\r\n <use\r\n xlink:href=\"#gentle-wave\"\r\n x=\"48\"\r\n y=\"3\"\r\n fill=\"rgba(255,255,255,0.5)\"\r\n />\r\n <use\r\n xlink:href=\"#gentle-wave\"\r\n x=\"48\"\r\n y=\"5\"\r\n fill=\"rgba(255,255,255,0.3)\"\r\n />\r\n <use xlink:href=\"#gentle-wave\" x=\"48\" y=\"7\" fill=\"#fff\" />\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <!-- Wave 2 -->\r\n <!-- <div class=\"ocean\">\r\n <div class=\"wave\"></div>\r\n <div class=\"wave\"></div>\r\n </div>-->\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport animator from \"@/helpers/animator\";\r\n\r\nexport default {\r\n name: \"ServiceNotAvailable\",\r\n data: () => ({\r\n showMessage: false,\r\n showUfo: false,\r\n loadingIcon: null,\r\n serviceNotAvailableMessage: \"\",\r\n transitions: [\r\n {\r\n backgroundImage: \"radial-gradient(circle, #F44336, #B71C1C)\",\r\n statusBarColor: \"#B71C1C\",\r\n icon: \"mdi-cellphone-iphone\",\r\n }, //Red\r\n {\r\n backgroundImage: \"radial-gradient(circle, #FF9800, #E65100)\",\r\n statusBarColor: \"#E65100\",\r\n icon: \"mdi-qrcode-scan\",\r\n }, //Orange\r\n {\r\n backgroundImage: \"radial-gradient(circle, #FFEB3B, #F57F17)\",\r\n statusBarColor: \"#FFEB3B\",\r\n icon: \"mdi-map-search\",\r\n }, //Yellow\r\n {\r\n backgroundImage: \"radial-gradient(circle, #4CAF50, #1B5E20)\",\r\n statusBarColor: \"#1B5E20\",\r\n icon: \"mdi-seat\",\r\n }, //Green\r\n {\r\n backgroundImage: \"radial-gradient(circle, #2196f3, #0d47a1)\",\r\n statusBarColor: \"#0d47a1\",\r\n icon: null,\r\n }, //Blue\r\n ],\r\n // transitions: [\r\n // \"radial-gradient(circle, #2196f3, #0d47a1)\", //Blue\r\n // \"radial-gradient(circle, #424242, black)\", //Black\r\n // \"radial-gradient(circle, #FFEB3B, #F57F17)\", //Yellow\r\n // \"radial-gradient(circle, #9C27B0, #4A148C)\", //Purple\r\n // \"radial-gradient(circle, #F44336, #B71C1C)\", //Red\r\n // \"radial-gradient(circle, #4CAF50, #1B5E20)\", //Green\r\n // \"radial-gradient(circle, #607D8B, #263238)\", //Blue gray\r\n // \"radial-gradient(circle, #FF9800, #E65100)\" //Orange\r\n // ]\r\n }),\r\n mounted() {\r\n this.setContentHeight();\r\n\r\n this.setStatusBackgroundBarColor(\"#FFFFFF\");\r\n\r\n this.serviceNotAvailableMessage = window.$msg.serviceNotAvailable;\r\n\r\n setTimeout(() => {\r\n this.startLoading();\r\n }, 500);\r\n },\r\n methods: {\r\n startLoading() {\r\n this.ripple(0);\r\n },\r\n onResize() {\r\n document.getElementById(\"lblMessage\").style.top =\r\n window.innerHeight > 500 ? \"-50px\" : \"0\";\r\n\r\n this.setContentHeight();\r\n },\r\n setContentHeight() {\r\n document.getElementById(\"serviceNotAvailableDiv\").style.height =\r\n this.heights().screen + \"px\";\r\n },\r\n ripple(count) {\r\n if (count >= this.transitions.length) {\r\n return;\r\n }\r\n\r\n let transitionIndex =\r\n this.transitions.length > count\r\n ? count\r\n : count % this.transitions.length;\r\n let transition = this.transitions[transitionIndex];\r\n\r\n setTimeout(() => {\r\n this.loadingIcon = this.transitions[transitionIndex].icon;\r\n\r\n if (count === this.transitions.length - 1) {\r\n document.getElementById(\"lastPage\").style.opacity = 1;\r\n }\r\n }, 150);\r\n\r\n let loadingEleId = \"serviceNotAvailable\" + (count % 2 === 0 ? \"1\" : \"2\");\r\n\r\n let completeCallback = null;\r\n if (count < this.transitions.length - 1) {\r\n completeCallback = () => {\r\n this.setStatusBackgroundBarColor(transition.statusBarColor);\r\n this.ripple(++count);\r\n };\r\n } else {\r\n completeCallback = () => {\r\n this.setStatusBackgroundBarColor(transition.statusBarColor);\r\n document.getElementById(\r\n \"serviceNotAvailableDiv\"\r\n ).style.backgroundImage = \"radial-gradient(circle, #2196f3, #0d47a1)\";\r\n\r\n document.getElementById(\"serviceNotAvailable1\").style.opacity = 0;\r\n document.getElementById(\"serviceNotAvailable2\").style.opacity = 0;\r\n this.showMessage = true;\r\n\r\n setTimeout(() => {\r\n this.showUfo = true;\r\n setTimeout(() => {\r\n this.showUfo = false;\r\n }, 8000);\r\n }, 16000);\r\n };\r\n }\r\n\r\n animator.rippleTransition(\r\n loadingEleId,\r\n loadingEleId,\r\n 300,\r\n 0,\r\n 28,\r\n null,\r\n transition.backgroundImage,\r\n true,\r\n false,\r\n completeCallback\r\n );\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style>\r\n/* #2196f3, #0d47a1 */\r\n\r\n.header {\r\n position: fixed;\r\n bottom: 0;\r\n width: 100%;\r\n text-align: center;\r\n color: white;\r\n border-bottom: 0px solid white;\r\n}\r\n\r\n.waves {\r\n position: relative;\r\n width: 100%;\r\n height: 15vh;\r\n margin-bottom: -7px;\r\n /*Fix for safari gap*/\r\n min-height: 100px;\r\n max-height: 150px;\r\n}\r\n\r\n/* Animation */\r\n.parallax > use {\r\n animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite;\r\n}\r\n.parallax > use:nth-child(1) {\r\n animation-delay: -2s;\r\n animation-duration: 5s;\r\n}\r\n.parallax > use:nth-child(2) {\r\n animation-delay: -3s;\r\n animation-duration: 7s;\r\n}\r\n.parallax > use:nth-child(3) {\r\n animation-delay: -4s;\r\n animation-duration: 9s;\r\n}\r\n.parallax > use:nth-child(4) {\r\n animation-delay: -5s;\r\n animation-duration: 11s;\r\n}\r\n@keyframes move-forever {\r\n 0% {\r\n transform: translate3d(-90px, 0, 0);\r\n }\r\n 100% {\r\n transform: translate3d(85px, 0, 0);\r\n }\r\n}\r\n/*Shrinking for mobile*/\r\n@media (max-width: 768px) {\r\n .waves {\r\n height: 60px;\r\n min-height: 60px;\r\n }\r\n}\r\n\r\n/* Wave 2 */\r\n/* .ocean {\r\n height: 0%;\r\n width: 100%;\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n background: #ffffff;\r\n}\r\n\r\n.wave {\r\n background: url(../assets/images/wave.svg) repeat-x;\r\n position: absolute;\r\n top: -138px;\r\n width: 6400px;\r\n height: 198px;\r\n animation: wave 7s cubic-bezier(0.36, 0.45, 0.63, 0.53) infinite;\r\n transform: translate3d(0, 0, 0);\r\n}\r\n\r\n.wave:nth-of-type(2) {\r\n top: -115px;\r\n animation: wave 7s cubic-bezier(0.36, 0.45, 0.63, 0.53) -0.125s infinite,\r\n swell 7s ease -1.25s infinite;\r\n opacity: 1;\r\n}\r\n\r\n@keyframes wave {\r\n 0% {\r\n margin-left: 0;\r\n }\r\n 100% {\r\n margin-left: -1600px;\r\n }\r\n}\r\n\r\n@keyframes swell {\r\n 0%,\r\n 100% {\r\n transform: translate3d(0, -25px, 0);\r\n }\r\n 50% {\r\n transform: translate3d(0, 5px, 0);\r\n }\r\n} */\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServiceNotAvailable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServiceNotAvailable.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ServiceNotAvailable.vue?vue&type=template&id=0b20df7b&\"\nimport script from \"./ServiceNotAvailable.vue?vue&type=script&lang=js&\"\nexport * from \"./ServiceNotAvailable.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ServiceNotAvailable.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\ninstallComponents(component, {VIcon,VImg})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","<template>\r\n <v-app>\r\n <SystemAlert />\r\n\r\n <ServiceNotAvailable v-if=\"showServiceNotAvailablePage\" />\r\n\r\n <template v-else>\r\n <Loading />\r\n\r\n <RippleResult />\r\n\r\n <SystemDialog />\r\n\r\n <v-main>\r\n <transition :name=\"transitionName\">\r\n <keep-alive>\r\n <router-view\r\n style=\"\r\n position: fixed;\r\n width: 100vw;\r\n height: 100vh;\r\n background: white;\r\n \"\r\n ></router-view>\r\n </keep-alive>\r\n </transition>\r\n </v-main>\r\n\r\n <CheckIn />\r\n\r\n <BottomNavigationBar />\r\n </template>\r\n </v-app>\r\n</template>\r\n\r\n<script>\r\n import BottomNavigationBar from \"@/components/BottomNavigationBar\";\r\n import Loading from \"@/components/Loading\";\r\n import RippleResult from \"@/components/RippleResult\";\r\n import SystemDialog from \"@/components/SystemDialog\";\r\n import geolocationHelper from \"@/helpers/geolocationHelper\";\r\n import SystemAlert from \"@/components/SystemAlert\";\r\n import CheckIn from \"@/components/CheckIn\";\r\n import ServiceNotAvailable from \"@/components/ServiceNotAvailable\";\r\n\r\n import { mapState, mapMutations } from \"vuex\";\r\n import axios from \"axios\";\r\n import Vue from \"vue\";\r\n import constants from \"@/helpers/constants\";\r\n import validators from \"@/helpers/validators\";\r\n import moment from \"moment\";\r\n\r\n export default {\r\n name: \"App\",\r\n components: {\r\n BottomNavigationBar,\r\n Loading,\r\n RippleResult,\r\n SystemDialog,\r\n SystemAlert,\r\n CheckIn,\r\n ServiceNotAvailable,\r\n },\r\n data: () => ({\r\n showServiceNotAvailablePage: false,\r\n transitionName: \"nextPageTransition\",\r\n activeBtn: 0,\r\n allScreenHeights: 0,\r\n detectingBranchWithGps: false,\r\n }),\r\n methods: {\r\n ...mapMutations([\r\n \"updateLocationInfoFromGps\",\r\n \"updateTime\"\r\n ]),\r\n onResize() {\r\n //Don't really have to set it in this case\r\n //window.innerHeight is much more reliable than \"100vh\" across browsers\r\n // document.body.style.height = this.screenHeight + \"px\";\r\n // this.allScreenHeights = JSON.stringify(this.screenHeights(), null, 4);\r\n // console.debug(\r\n // \"App onResize - screenheight & bottomNavigationHeight - \",\r\n // this.screenHeight(),\r\n // this.bottomNavigationHeight(),\r\n // this.allScreenHeights\r\n // );\r\n },\r\n startUpdatingTime() {\r\n this.updateTime(this.getTime());\r\n\r\n console.debug(\r\n \"Time\",\r\n this.time.nowMoment.format(),\r\n this.time.todayMoment.format()\r\n );\r\n\r\n //TODO: Don't forget to put it back after testing!\r\n setInterval(() => {\r\n this.updateTime(this.getTime());\r\n\r\n // console.debug(\r\n // \"Time\",\r\n // this.time.nowMoment.format(),\r\n // this.time.todayMoment.format()\r\n // );\r\n }, window.$settings.updatingTimeInterval);\r\n },\r\n startDetectingBranchWithGps() {\r\n if (this.detectingBranchWithGps) {\r\n return;\r\n }\r\n\r\n this.detectingBranchWithGps = true;\r\n\r\n //Lenient logic - Only update Vuex when a branch is detected, else ignore\r\n const getCurrentGeolocationBrowserCallback = (locationInfo) => {\r\n const atBranch = this.settings.menus.branchMenus.find((x) => {\r\n return geolocationHelper.isInRange(\r\n locationInfo.longitude,\r\n locationInfo.latitude,\r\n x.geolocationInfo\r\n );\r\n });\r\n\r\n if (atBranch) {\r\n // console.debug(\"getCurrentGeolocationBrowserCallback\", atBranch);\r\n this.updateLocationInfoFromGps(atBranch);\r\n }\r\n };\r\n\r\n geolocationHelper.getCurrentGeolocationBrowser(\r\n getCurrentGeolocationBrowserCallback\r\n );\r\n\r\n //TODO: Remember to enable it back\r\n setInterval(() => {\r\n geolocationHelper.getCurrentGeolocationBrowser(\r\n getCurrentGeolocationBrowserCallback\r\n );\r\n }, window.$settings.getGeolocationInterval);\r\n },\r\n showWarningMessageInHostileEnvironment() {\r\n if (this.isUnsupportedBrowser()) {\r\n console.log(\"App Detected Unsupported Browser!\");\r\n this.updateSystemAlert({\r\n show: true,\r\n success: false,\r\n message: window.$msg.unsupportedBrowser,\r\n });\r\n }\r\n else if (!this.isMobileDevice()) {\r\n console.log(\"App Detected Not Mobile Browser!\");\r\n //else if (!this.isMobileDevice() && (this.$route.name !== null && this.$route.name !== \"SeatsAvailability\")) {\r\n this.updateSystemAlert({\r\n show: true,\r\n success: false,\r\n message: window.$msg.suggestMobile,\r\n });\r\n }\r\n },\r\n showNotificationMessage() {\r\n console.log(\"App Notified!\");\r\n this.updateSystemAlert({\r\n show: true,\r\n success: false,\r\n message: window.$msg.notificationMessage,\r\n });\r\n },\r\n setTransitionName(to, from) {\r\n let toDepth = to.path.length;\r\n let fromDepth = from.path.length;\r\n\r\n //Custom logic for paths in with \"Common\", they r kind of considered the last route\r\n if (to.path.toLowerCase().includes(\"common\")) {\r\n toDepth += 20;\r\n }\r\n\r\n if (from.path.toLowerCase().includes(\"common\")) {\r\n fromDepth += 20;\r\n }\r\n\r\n const fromPathSlashCount = from.path.split(\"/\").length - 1;\r\n const toPathSlashCount = to.path.split(\"/\").length - 1;\r\n\r\n if (fromPathSlashCount === 1 && toPathSlashCount === 1) {\r\n //Custom logic to avoid transition between first level pages in bottom navigation bar\r\n this.transitionName = null;\r\n } else {\r\n this.transitionName =\r\n toDepth < fromDepth ? \"backPageTransition\" : \"nextPageTransition\";\r\n }\r\n },\r\n },\r\n watch: {\r\n $route(to, from) {\r\n this.setTransitionName(to, from);\r\n },\r\n settings(newValue, oldValue) {\r\n if (newValue) {\r\n this.startDetectingBranchWithGps();\r\n }\r\n },\r\n onsiteMode: {\r\n immediate: true,\r\n handler(newValue, oldValue) {\r\n this.setThemeColorByMode();\r\n },\r\n },\r\n },\r\n created() {\r\n console.log(\"App created!\");\r\n\r\n if (window.$settings.showServiceNotAvailablePage) {\r\n this.showServiceNotAvailablePage = true;\r\n } else {\r\n this.startUpdatingTime();\r\n }\r\n },\r\n mounted() {\r\n //New setting to hide or show unsupported browser or non-mobile browser system alert\r\n if (!window.$settings.disableNotifications) {\r\n if (window.$settings.showOnlyNotification) {\r\n this.showNotificationMessage();\r\n } else {\r\n this.showWarningMessageInHostileEnvironment();\r\n }\r\n }\r\n },\r\n };\r\n</script>\r\n\r\n<style>\r\n html {\r\n /* Don't need to do this. This is just sympton */\r\n overflow-x: hidden !important;\r\n }\r\n\r\n /* Vuetify is trying to kill me */\r\n .v-application--wrap {\r\n min-height: 0 !important;\r\n }\r\n\r\n /* Remove highlighted active background color or flat */\r\n :hover:before {\r\n background-color: transparent !important;\r\n }\r\n\r\n #app {\r\n background-color: black;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n position: relative;\r\n }\r\n\r\n .v-text-field {\r\n margin: 0 !important;\r\n padding: 0 !important;\r\n }\r\n\r\n .v-input__prepend-inner {\r\n padding-right: 12px !important;\r\n }\r\n\r\n .v-input__prepend-inner .v-icon {\r\n color: var(--v-primary-base) !important;\r\n }\r\n\r\n .theme--light.v-label {\r\n color: black !important;\r\n }\r\n\r\n .theme--light.v-date-picker-table th,\r\n .theme--light.v-date-picker-table .v-date-picker-table--date__week {\r\n color: black !important;\r\n }\r\n\r\n .text-xxsmall {\r\n font-size: 10px !important;\r\n }\r\n\r\n .text-xsmall {\r\n font-size: 12px !important;\r\n }\r\n\r\n .text-xsmall {\r\n font-size: 12px !important;\r\n }\r\n\r\n .text-xsmall-weight {\r\n font-size: 12px !important;\r\n color: rgba(0, 0, 0, 0.54) !important;\r\n font-weight: 500;\r\n }\r\n\r\n .text-smaller {\r\n font-size: 13px !important;\r\n color: rgba(0, 0, 0, 0.54) !important;\r\n font-weight: 500;\r\n }\r\n\r\n .text-small {\r\n font-size: 14px !important;\r\n color: rgba(0, 0, 0, 0.54) !important;\r\n font-weight: 500;\r\n }\r\n\r\n .text-medium {\r\n font-size: 15px !important;\r\n font-weight: bold !important;\r\n }\r\n\r\n .text-large {\r\n font-size: 28px !important;\r\n font-weight: bold !important;\r\n }\r\n\r\n .icon-smaller {\r\n font-size: 15px !important;\r\n color: var(--v-primary-base) !important;\r\n }\r\n\r\n .icon-small {\r\n font-size: 16px !important;\r\n color: var(--v-primary-base) !important;\r\n }\r\n\r\n .text-title,\r\n .text-title-black {\r\n font-size: 18px !important;\r\n font-weight: bold !important;\r\n }\r\n\r\n .text-title-black {\r\n color: black;\r\n }\r\n\r\n .text-title-medium {\r\n font-size: 15px !important;\r\n font-weight: bold !important;\r\n color: black;\r\n }\r\n\r\n .flex-center-container {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n\r\n .flex-center-container2 {\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n gap: 10px;\r\n }\r\n\r\n .flex-center-left-container {\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .fixed-center {\r\n position: fixed;\r\n height: 100vh;\r\n left: 50%;\r\n top: 50%;\r\n transform: translate(-50%, -50%);\r\n }\r\n\r\n .fixed-center2 {\r\n position: fixed;\r\n left: 50%;\r\n top: 50%;\r\n transform: translate(-50%, -50%);\r\n }\r\n\r\n /* Added to ensure QR camera frame displays correctly across different browsers */\r\n .fixed-center3 {\r\n height: 100vh;\r\n width: 100vw;\r\n object-fit: cover;\r\n }\r\n\r\n nlb-notice.bs4-mb-3 {\r\n margin-bottom: 0 !important; /* Set margin-bottom to 0 to override the padding that comes with nlb-notice component */\r\n }\r\n\r\n .fixed-bottom {\r\n height: 100vh;\r\n position: fixed;\r\n left: 50%;\r\n bottom: 3%;\r\n transform: translate(-50%, -50%);\r\n }\r\n\r\n .fixed-bottom2 {\r\n position: fixed;\r\n left: 50%;\r\n bottom: 3%;\r\n transform: translate(-50%, -50%);\r\n }\r\n\r\n .v-tabs-slider-wrapper {\r\n height: 5px !important;\r\n }\r\n\r\n .box-shadow {\r\n box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.3);\r\n }\r\n\r\n /* Standardize toolbar title */\r\n .v-toolbar__title {\r\n font-weight: bold;\r\n }\r\n\r\n /* Page transition starts */\r\n .nextPageTransition-enter-active {\r\n animation: slideUpIn 100ms ease-out;\r\n }\r\n\r\n .nextPageTransition-leave-active {\r\n animation: slideUpOut 200ms;\r\n }\r\n\r\n .text-shadow {\r\n text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);\r\n }\r\n\r\n .inset-box-shadow {\r\n box-shadow: 0px 1px 3px -1px rgba(0, 0, 0, 0.2) inset !important;\r\n }\r\n\r\n .box-shadow-inset {\r\n box-shadow: 0px 1px 3px -1px rgba(0, 0, 0, 0.2) inset !important;\r\n }\r\n\r\n /* .text-truncate {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n } */\r\n\r\n .bg-teal-radial {\r\n background-image: radial-gradient(circle, #009688, #004d40) !important;\r\n }\r\n\r\n .bg-blue-radial {\r\n background-image: radial-gradient(circle, #2196f3, #0d47a1) !important;\r\n }\r\n\r\n .bg-orange-radial {\r\n background-image: radial-gradient(circle, #ff9800, #e65100) !important;\r\n }\r\n\r\n .bg-red-radial {\r\n background-image: radial-gradient(circle, #f44336, #b71c1c) !important;\r\n }\r\n\r\n .bg-black-radial {\r\n background-image: radial-gradient(circle, #424242, #000000) !important;\r\n }\r\n\r\n @keyframes slideUpIn {\r\n from {\r\n transform: translateY(100px);\r\n }\r\n\r\n to {\r\n transform: translateY(0px);\r\n }\r\n }\r\n\r\n @keyframes slideUpOut {\r\n from {\r\n transform: translateY(0px);\r\n }\r\n\r\n to {\r\n transform: translateY(-10px);\r\n }\r\n }\r\n\r\n .backPageTransition-enter-active {\r\n animation: slideUpOut 200ms ease-out reverse;\r\n }\r\n\r\n .backPageTransition-leave-active {\r\n animation: slideDownOut 100ms ease-in;\r\n z-index: 1;\r\n }\r\n\r\n @keyframes slideDownOut {\r\n 0% {\r\n transform: translateY(0px);\r\n }\r\n\r\n 100% {\r\n transform: translateY(20vh);\r\n opacity: 0;\r\n }\r\n }\r\n /* Page transition ends */\r\n\r\n .scrollable {\r\n overflow-y: auto;\r\n }\r\n\r\n .v-slide-group__prev,\r\n .v-slide-group__prev--disabled {\r\n position: absolute;\r\n }\r\n</style>\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=fa43dc80&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VMain } from 'vuetify/lib/components/VMain';\ninstallComponents(component, {VApp,VMain})\n","import '@mdi/font/css/materialdesignicons.css'\nimport Vue from 'vue'\nimport Vuetify from 'vuetify/lib'\n//import colors from 'vuetify/lib/util/colors'\n\nVue.use(Vuetify)\n\nexport default new Vuetify({\n theme: {\n dark: false,\n themes: {\n light: {\n accent: \"#FF9800\",\n warning: \"#BF360C\", //added to override default warning color to cater accessibility fix\n },\n dark: {\n accent: \"#FF9800\",\n }\n },\n options: {\n customProperties: true,\n variations: false,\n cspNonce: 'dQw4w9WgXcQ',\n }\n }\n})\n","import { mapState, mapGetters, mapMutations } from \"vuex\";\r\nimport moment from \"moment\";\r\nimport anime from \"animejs/lib/anime.es.js\"\r\nimport apiHelper from \"@/helpers/apiHelper\"\r\nimport UAParser from \"ua-parser-js\";\r\nimport store from \"@/store/index\";\r\nimport businessLogic from \"@/helpers/businessLogic\"\r\n\r\nexport default {\r\n data: () => ({\r\n serviceNotAvailable: false,\r\n appVersion: \"1.0.0\",\r\n publicPath: process.env.BASE_URL,\r\n areaImagePath: process.env.BASE_URL + \"img/areas/\",\r\n branchImagePath: process.env.BASE_URL + \"img/branches/\",\r\n audioPath: process.env.BASE_URL + \"audio/\",\r\n iconPath: process.env.BASE_URL + \"img/icons/\",\r\n }),\r\n computed: {\r\n ...mapState([\"time\", \"branchMenus\", \"settings\", \"accountInfo\"]),\r\n ...mapGetters([\"authenticated\", \"onsiteMode\"]),\r\n windowSettings() {\r\n return window.$settings;\r\n },\r\n primaryColor() {\r\n return this.$vuetify.theme.themes.light.primary;\r\n }\r\n },\r\n methods: {\r\n ...mapMutations([\"updateLoading\", \"updateResult\", \"updateSystemDialog\", \"updateSystemAlert\"]),\r\n haha() {\r\n alert(\"haha!\")\r\n },\r\n getTime() {\r\n // const now = window.$settings.mockDateString ? new Date(window.$settings.mockDateString) : new Date()\r\n const nowMoment = moment(window.$settings.mockDateString);\r\n const todayMoment = moment(nowMoment.format(\"YYYY-MM-DD\"));\r\n\r\n return {\r\n nowMoment, todayMoment\r\n };\r\n },\r\n clone(obj) {\r\n return JSON.parse(JSON.stringify(obj));\r\n },\r\n isMobileDevice() {\r\n const uaParser = new UAParser();\r\n const result = uaParser.getResult();\r\n\r\n // //TODO: Remove this\r\n // if (!window.$notFirstIsMobileDeviceCheck) {\r\n // console.debug(\"UA info\", result)\r\n // window.$notFirstIsMobileDeviceCheck = true;\r\n // }\r\n\r\n return result && result.device && result.device.type && (result.device.type === \"mobile\" || result.device.type === \"tablet\")\r\n },\r\n isUnsupportedBrowser() {\r\n const uaParser = new UAParser();\r\n const result = uaParser.getResult();\r\n\r\n return result && result.browser && result.browser.name === \"IE\"\r\n },\r\n android() {\r\n return /Android/i.test(window.navigator.userAgent)\r\n },\r\n isInStandaloneMode() {\r\n return (window.matchMedia('(display-mode: standalone)').matches) || (window.navigator.standalone) || document.referrer.includes('android-app://')\r\n },\r\n isMobileOrStandaloneMode() {\r\n return this.isInStandaloneMode() || this.isMobileDevice()\r\n },\r\n heights() {\r\n return {\r\n screen: document.documentElement.clientHeight,\r\n toolbar: 56,\r\n toolbarWithButtons: 56 + 34 + 8 + 2,\r\n tabbar: 41,\r\n headerbar: 41,\r\n bottombar: 48,\r\n noticeBarHeight: 85,\r\n }\r\n },\r\n screenHeight() {\r\n return document.documentElement.clientHeight\r\n },\r\n screenHeights() {\r\n return {\r\n windowInnerHeight: window.innerHeight,\r\n windowScreenHeight: window.screen.height,\r\n docClientHeight: document.documentElement.clientHeight,\r\n docScrollHeight: document.documentElement.scrollHeight\r\n }\r\n },\r\n bottomNavigationHeight() {\r\n const bottomNavigationHeight = document\r\n .getElementById(\"bottomNavigation\")\r\n .getBoundingClientRect().height;\r\n\r\n return 48// bottomNavigationHeight\r\n },\r\n auth(currentRouteName) {\r\n if (!this.authenticated) {\r\n apiHelper.casAuth(currentRouteName);\r\n }\r\n else {\r\n this.$router.push({ name: \"Account\" })\r\n }\r\n },\r\n logout() {\r\n businessLogic.logout()\r\n },\r\n setThemeColorByMode(duration) {\r\n //TODO: Remember to roll back\r\n let themeColor = this.onsiteMode ? \"#1976D2\" : \"#00796B\"\r\n // themeColor = \"#1976D2\";\r\n // themeColor = \"#00796B\";\r\n this.setPrimaryColor(themeColor)\r\n\r\n if (this.$route.name === \"Help\") {\r\n themeColor = this.onsiteMode ? \"#0d47a1\" : \"#004d40\";\r\n }\r\n\r\n this.setStatusBackgroundBarColor(themeColor, duration)\r\n },\r\n setPrimaryColor(color, secondary) {\r\n this.$vuetify.theme.themes.light.primary = color;\r\n this.$vuetify.theme.themes.light.secondary = secondary;\r\n },\r\n setStatusBackgroundBarColor(color, duration) {\r\n const metaThemeColor = document.getElementById(\"metaThemeColor\").getAttribute(\"content\")\r\n\r\n anime({\r\n targets: '.metaThemeColor',\r\n content: [metaThemeColor, color],\r\n duration: duration || 0,\r\n easing: 'easeOutCirc'\r\n });\r\n\r\n // anime({\r\n // targets: '.metaThemeColor',\r\n // content: [metaThemeColor, color],\r\n // duration: duration || 200,\r\n // easing: 'easeOutCirc'\r\n // });\r\n },\r\n goBack() {\r\n window.history.length > 1 ? this.$router.go(-1) : this.$router.push('/')\r\n },\r\n goHome() {\r\n this.$router.push(\"/\")\r\n },\r\n convertQueryStringToObj(url) {\r\n if (url) {\r\n const queryStringIndex = url.indexOf(\"?\")\r\n if (queryStringIndex >= 0 && url.length > 1) {\r\n const queryStringUrl = url.substring(queryStringIndex + 1)\r\n return Object.fromEntries(new URLSearchParams(queryStringUrl))\r\n }\r\n }\r\n\r\n return null\r\n },\r\n windowInfo() {\r\n const a = {\r\n width: document.documentElement.clientWidth,\r\n height: document.documentElement.clientHeight,\r\n min: Math.min(document.documentElement.clientWidth, document.documentElement.clientHeight),\r\n max: Math.max(document.documentElement.clientWidth, document.documentElement.clientHeight)\r\n }\r\n\r\n return a;\r\n },\r\n commonResponseHandler(response, successMessage, errorMessage,\r\n alwaysCallback, successCallback, errorCallback, hideResult) {\r\n\r\n return businessLogic.commonResponseHandler(response, successMessage, errorMessage,\r\n alwaysCallback, successCallback, errorCallback, hideResult)\r\n }\r\n }\r\n}","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport vuetify from './plugins/vuetify'\r\nimport globalMixin from '@/mixins/global'\r\n\r\nVue.config.productionTip = false\r\n\r\nVue.mixin(globalMixin)\r\n\r\nnew Vue({\r\n router,\r\n store,\r\n vuetify,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GantryAccessQR.vue?vue&type=style&index=1&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GantryAccessQR.vue?vue&type=style&index=1&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BookingDetails.vue?vue&type=style&index=0&id=5b932807&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BookingDetails.vue?vue&type=style&index=0&id=5b932807&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatAvailabilityTable.vue?vue&type=style&index=0&id=1eb13958&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatAvailabilityTable.vue?vue&type=style&index=0&id=1eb13958&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Accordion.vue?vue&type=style&index=0&id=5b9b81aa&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Accordion.vue?vue&type=style&index=0&id=5b9b81aa&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Help.vue?vue&type=style&index=0&id=111493cd&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Help.vue?vue&type=style&index=0&id=111493cd&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatsAvailabilities.vue?vue&type=style&index=0&id=1b6d9856&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeatsAvailabilities.vue?vue&type=style&index=0&id=1b6d9856&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QRCodeScanner.vue?vue&type=style&index=0&id=af85e3e2&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QRCodeScanner.vue?vue&type=style&index=0&id=af85e3e2&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginIcon.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginIcon.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BottomNavigationBar.vue?vue&type=style&index=0&id=c6f5d8d6&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BottomNavigationBar.vue?vue&type=style&index=0&id=c6f5d8d6&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckIn.vue?vue&type=style&index=0&id=2678bb06&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckIn.vue?vue&type=style&index=0&id=2678bb06&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/mylibrary-logo.83b9166e.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailMobileLogin.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmailMobileLogin.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServiceNotAvailable.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServiceNotAvailable.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookingList.vue?vue&type=style&index=0&id=123c9df6&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyBookingList.vue?vue&type=style&index=0&id=123c9df6&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingDetails.vue?vue&type=style&index=0&id=ceba771e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VisitBookingDetails.vue?vue&type=style&index=0&id=ceba771e&scoped=true&lang=css&\""],"sourceRoot":""}